#!/bin/sh
IFS=$'\n'

# Header files with post code defines
post_code_file="src/commonlib/include/commonlib/console/post_codes.h"
amd_post_code_file="src/soc/amd/common/psp_verstage/include/psp_verstage.h"

# Format defines as MACRO hex_code
post_codes=$(grep -Pho "(?<=#define )POST.*\s*0x.." $post_code_file $amd_post_code_file| \
	sed -E "s/\s+/ /g")

# All calls to post_code() using hex literals instead of macros
post_usage=$(grep -Pnr "^\s*post_code\(\d.*\)" src | \
	sed -E "s/(.*:)\s*?(post_code\((.*)\))/\3\t\1\t\2/")

for line in $post_codes; do
	macro=$(echo $line | cut -d " " -f 1)
	hex_code=$(echo $line | cut -d " " -f 2 | tr '[:upper:]' '[:lower:]')
	macro_usage=$(grep -rPn "$macro(?![A-Z_])" src | \
		sed -E "s/\s+/ /g" | sed -E "s/(.*:)\s*(.*)/$hex_code\t\1\t\2/")
	post_usage=$post_usage$'\n'$macro_usage
done

post_usage=$(sort <<< $post_usage)
old_code=""
for line in $post_usage; do
	code=$(echo $line | cut -d $'\t' -f 1)
	if [[ $old_code != $code ]]; then 
		echo ""
	fi
	old_code=$code
	echo $line
done
