#!/usr/bin/perl

$stats_header_file = 'qtn_muc_stats_print.h';
$dbg_header_file = "muc_txrx_stats.h.raw";

$in_tx_struct=0;
$tx_stats_content = "";
$in_rx_struct=0;
$rx_stats_content = "";
$rxq_num = 0;

foreach my $line (`cat muc_share_def.h`) {
	if ($line =~ /^\#define\s+QTN_FW_WMAC_RX_QNUM\s+(\d+).*$/) {
		$rxq_num = $1;
	}
}

if ($rxq_num == 0) {
	die("muc_dbg_parse: fail to find macro QTN_FW_WMAC_RX_QNUM\n");
}

open(HDRFILE,"$dbg_header_file");
while (<HDRFILE>) {

	if (/\}/) {
		if ($in_tx_struct == 1) {
			$tx_stats_content .= "}";
			$in_tx_struct=0;
		}
		if ($in_rx_struct == 1) {
			$rx_stats_content .= "}";
			$in_rx_struct=0;
		}
	}

	if ($in_tx_struct) {
		if(/(\w+)\;/){
			$strtmp = $1;
			$tx_stats_content .= "	\"$strtmp\", \\\n";
		} else {
			die("muc_dbg_parse: fail to process tx stats item \"$_\"");
		}
	}

	if ($in_rx_struct) {
		if (/(\w+)\;/) {
			$strtmp = $1;
			$rx_stats_content .= "	\"$strtmp\", \\\n";
		} elsif (/(rxq_\w+)\[\w+\]\;/) {
			$strtmp = $1;
			for (my $i = 0; $i < $rxq_num; $i++) {
				$rx_stats_content .= "	\"$strtmp"."[$i]\", \\\n";
			}
		} else {
			die("muc_dbg_parse: fail to process rx stats item \"$_\"");
		}
	}

	if (/^\s*struct\s+muc_tx_stats\s*\{/) {
		$in_tx_struct=1;
		$tx_stats_content .= "#define MUC_TX_STATS_NAMES_TABLE { \\\n";
	}

	if (/^\s*struct\s+muc_rx_stats\s*\{/) {
		$in_rx_struct=1;
		$rx_stats_content .= "#define MUC_RX_STATS_NAMES_TABLE { \\\n";
	}

}
close(HDRFILE);

unlink($stats_header_file);
open(headfile,">>$stats_header_file");
print headfile "/* autogenerated */\n\n";
print headfile $tx_stats_content;
print headfile "\n\n";
print headfile $rx_stats_content;
print headfile "\n";
close(headfile);
