/******************************************************************************
 *
 * Copyright(c) 2019 Realtek Corporation.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of version 2 of the GNU General Public License as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
 * more details.
 *
 *****************************************************************************/
#define _HAL_BTC_DEF_C_
#include "../hal_headers_le.h"
#include "hal_btc.h"
#include "halbtc_fw.h"
#include "halbtc_action.h"

#ifdef CONFIG_BTCOEX

#define case_role(src) \
	case PHL_RTYPE_##src: return #src
#define case_mrole(src) \
	case BTC_WLMROLE_##src: return #src
#define case_slot(src) \
	case CXST_##src: return #src
#define case_reg(src) \
	case REG_##src: return #src
#define case_tdma(src) \
	case CXTDMA_##src: return #src
#define case_trace(src) \
	case CXSTEP_##src: return #src
#define case_branch(src) \
	case BTC_BRANCH_##src: return #src
#define case_rxflctrl_(src) \
	case CXFLC_##src: return #src
#define case_wllink(src) \
	case BTC_WLINK_##src: return #src
#define case_antpath(src) \
	case BTC_ANT_##src: return #src
#define case_gdbg(src) \
	case BTC_DBG_##src: return #src
#define case_chip(src) \
	case CHIP_##src: return #src
#define case_event(src) \
	case CXEVNT_##src: return #src
#define case_wlmode(src) \
	case WLAN_MD_##src: return #src
#define case_wlbw(src) \
	case CHANNEL_WIDTH_##src: return #src
#define case_cxp(src) \
	case BTC_CXP_##src: return #src
#define case_rftype(src) \
	case RF_##src: return #src
#define case_mstate(src) \
	case MLME_##src: return #src
#define case_rate(src) \
	case RTW_DATA_RATE_##src: return #src
#define case_polut(src) \
	case BTC_PLT_##src: return #src

const char *id_to_str(u8 type, u32 id)
{
	switch(type) {
	case BTC_STR_ROLE:
		switch (id) {
		case_role(NONE);
		case_role(STATION);
		case_role(AP);
		case_role(VAP);
		case_role(ADHOC);
		case_role(ADHOC_MASTER);
		case_role(MESH);
		case_role(MONITOR);
		case_role(P2P_DEVICE);
		case_role(P2P_GC);
		case_role(P2P_GO);
		case_role(NAN);
		}
		break;
	case BTC_STR_MROLE:
		switch (id) {
		case_mrole(NONE);
		case_mrole(STA_GC);
		case_mrole(STA_GC_NOA);
		case_mrole(STA_GO);
		case_mrole(STA_GO_NOA);
		case_mrole(STA_STA);
		}
		break;
	case BTC_STR_SLOT:
		switch (id) {
		case_slot(OFF);
		case_slot(B2W);
		case_slot(W1);
		case_slot(W2);
		case_slot(W2B);
		case_slot(B1);
		case_slot(B2);
		case_slot(B3);
		case_slot(B4);
		case_slot(LK);
		case_slot(BLK);
		case_slot(E2G);
		case_slot(E5G);
		case_slot(EBT);
		case_slot(ENULL);
		case_slot(WLK);
		case_slot(W1FDD);
		case_slot(B1FDD);
		}
		break;
	case BTC_STR_REG:
		switch (id) {
		case_reg(MAC);
		case_reg(BB);
		case_reg(RF);
		case_reg(BT_RF);
		case_reg(BT_MODEM);
		case_reg(BT_BLUEWIZE);
		case_reg(BT_VENDOR);
		case_reg(BT_LE);
		}
		break;
	case BTC_STR_TDMA:
		switch (id) {
		case_tdma(OFF);
		case_tdma(FIX);
		case_tdma(AUTO);
		case_tdma(AUTO2);
		}
		break;
	case BTC_STR_TRACE:
		switch (id) {
		case_trace(NONE);
		case_trace(EVNT);
		case_trace(SLOT);
		}
		break;
	case BTC_STR_BRANCH:
		switch (id) {
		case_branch(MAIN);
		case_branch(HP);
		case_branch(LENOVO);
		case_branch(HUAWEI);
		}
		break;
	case BTC_STR_RXFLCTRL:
		switch (id) {
		case_rxflctrl_(OFF);
		case_rxflctrl_(NULLP);
		case_rxflctrl_(QOSNULL);
		case_rxflctrl_(CTS);
		}
		break;
	case BTC_STR_WLLINK:
		switch (id) {
		case_wllink(NOLINK);
		case_wllink(2G_STA);
		case_wllink(2G_GO);
		case_wllink(2G_GC);
		case_wllink(2G_AP);
		case_wllink(2G_SCC);
		case_wllink(2G_MCC);
		case_wllink(25G_MCC);
		case_wllink(25G_DBCC);
		case_wllink(5G);
		case_wllink(2G_NAN);
		case_wllink(OTHER);
		}
		break;
	case BTC_STR_ANTPATH:
		switch (id) {
		case_antpath(WPOWERON);
		case_antpath(WINIT);
		case_antpath(WONLY);
		case_antpath(WOFF);
		case_antpath(W2G);
		case_antpath(W5G);
		case_antpath(W25G);
		case_antpath(FREERUN);
		case_antpath(WRFK);
		case_antpath(BRFK);
		}
		break;
	case BTC_STR_GDBG:
		switch (id) {
		case_gdbg(GNT_BT);
		case_gdbg(GNT_WL);
		case_gdbg(BCN_EARLY);
		case_gdbg(WL_NULL0);
		case_gdbg(WL_NULL1);
		case_gdbg(WL_RXISR);
		case_gdbg(TDMA_ENTRY);
		case_gdbg(A2DP_EMPTY);
		case_gdbg(BT_RETRY);
		case_gdbg(BT_RELINK);
		case_gdbg(SLOT_WL);
		case_gdbg(SLOT_BT);
		case_gdbg(WL_RFK);
		case_gdbg(BT_RFK);
		case_gdbg(SLOT_B2W);
		case_gdbg(SLOT_W1);
		case_gdbg(SLOT_W2);
		case_gdbg(SLOT_W2B);
		case_gdbg(SLOT_B1);
		case_gdbg(SLOT_B2);
		case_gdbg(SLOT_B3);
		case_gdbg(SLOT_B4);
		case_gdbg(SLOT_LK);
		case_gdbg(SLOT_E2G);
		case_gdbg(SLOT_E5G);
		case_gdbg(SLOT_EBT);
		case_gdbg(SLOT_ENULL);
		case_gdbg(SLOT_WLK);
		case_gdbg(SLOT_W1FDD);
		case_gdbg(SLOT_B1FDD);
		case_gdbg(BT_CHANGE);
		}
		break;
	case BTC_STR_CHIPID:
		switch (id) {
		case_chip(WIFI6_8852A);
		case_chip(WIFI6_8852B);
		case_chip(WIFI6_8852C);
		}
		break;
	case BTC_STR_POLUT:
		switch (id) {
		case_polut(NONE);
		case_polut(GNT_BT_TX);
		case_polut(GNT_BT_RX);
		case_polut(GNT_WL);
		case_polut(BT);
		case_polut(ALL);
		}
		break;
	case BTC_STR_EVENT:
		switch(id) {
		case_event(TDMA_ENTRY);
		case_event(WL_TMR);
		case_event(B1_TMR);
		case_event(B2_TMR);
		case_event(B3_TMR);
		case_event(B4_TMR);
		case_event(W2B_TMR);
		case_event(B2W_TMR);
		case_event(BCN_EARLY);
		case_event(A2DP_EMPTY);
		case_event(LK_END);
		case_event(RX_ISR);
		case_event(RX_FC0);
		case_event(RX_FC1);
		case_event(BT_RELINK);
		case_event(BT_RETRY);
		case_event(E2G);
		case_event(E5G);
		case_event(EBT);
		case_event(ENULL);
		case_event(DRV_WLK);
		case_event(BCN_OK);
		case_event(BT_CHANGE);
		case_event(EBT_EXTEND);
		case_event(E2G_NULL1);
		}
		break;
	case BTC_STR_WLMODE:
		switch(id) {
		case_wlmode(INVALID);
		case_wlmode(11B);
		case_wlmode(11A);
		case_wlmode(11G);
		case_wlmode(11N);
		case_wlmode(11AC);
		case_wlmode(11AX);
		case_wlmode(11BG);
		case_wlmode(11GN);
		case_wlmode(11AN);
		case_wlmode(11BN);
		case_wlmode(11BGN);
		case_wlmode(11BGAC);
		case_wlmode(11BGAX);
		case_wlmode(11A_AC);
		case_wlmode(11A_AX);
		case_wlmode(11AGN);
		case_wlmode(11ABGN);
		case_wlmode(24G_MIX);
		case_wlmode(5G_MIX);
		case_wlmode(MAX);
		}
		break;
	case BTC_STR_WLBW:
		switch(id) {
		case_wlbw(20);
		case_wlbw(40);
		case_wlbw(80);
		case_wlbw(160);
		case_wlbw(80_80);
		case_wlbw(5);
		case_wlbw(10);
		case_wlbw(MAX);
		}
		break;
	case BTC_STR_RFTYPE:
		switch(id) {
		case_rftype(1T1R);
		case_rftype(1T2R);
		case_rftype(2T3R);
		case_rftype(2T4R);
		case_rftype(3T3R);
		case_rftype(3T4R);
		case_rftype(4T4R);
		}
		break;
	case BTC_STR_POLICY:
		switch(id) {
		case_cxp(OFF_BT);
		case_cxp(OFF_WL);
		case_cxp(OFF_EQ0);
		case_cxp(OFF_EQ1);
		case_cxp(OFF_EQ2);
		case_cxp(OFF_EQ3);
		case_cxp(OFF_BWB0);
		case_cxp(OFF_BWB1);
		case_cxp(OFF_BWB2);
		case_cxp(OFFB_BWB0);
		case_cxp(OFFE_2GBWISOB);
		case_cxp(OFFE_2GISOB);
		case_cxp(OFFE_2GBWMIXB);
		case_cxp(OFFE_2GBWMIXB2);
		case_cxp(OFFE_WL);
		case_cxp(FIX_TD3030);
		case_cxp(FIX_TD5050);
		case_cxp(FIX_TD2030);
		case_cxp(FIX_TD4010);
		case_cxp(FIX_TD7010);
		case_cxp(FIX_TD2060);
		case_cxp(FIX_TD3060);
		case_cxp(FIX_TD2080);
		case_cxp(FIX_TDW1B1);
		case_cxp(FIX_TD4010ISO);
		case_cxp(PFIX_TD3030);
		case_cxp(PFIX_TD5050);
		case_cxp(PFIX_TD2030);
		case_cxp(PFIX_TD2060);
		case_cxp(PFIX_TD3070);
		case_cxp(PFIX_TD2080);
		case_cxp(PFIX_TDW1B1);
		case_cxp(AUTO_TD50B1);
		case_cxp(AUTO_TD60B1);
		case_cxp(AUTO_TD20B1);
		case_cxp(AUTO_TDW1B1);
		case_cxp(PAUTO_TD50B1);
		case_cxp(PAUTO_TD60B1);
		case_cxp(PAUTO_TD20B1);
		case_cxp(PAUTO_TDW1B1);
		case_cxp(AUTO2_TD3050);
		case_cxp(AUTO2_TD3070);
		case_cxp(AUTO2_TD5050);
		case_cxp(AUTO2_TD6060);
		case_cxp(AUTO2_TD2080);
		case_cxp(AUTO2_TDW1B4);
		case_cxp(PAUTO2_TD3050);
		case_cxp(PAUTO2_TD3070);
		case_cxp(PAUTO2_TD5050);
		case_cxp(PAUTO2_TD6060);
		case_cxp(PAUTO2_TD2080);
		case_cxp(PAUTO2_TDW1B4);
		}
		break;
	case BTC_STR_MSTATE:
		switch(id) {
		case_mstate(NO_LINK);
		case_mstate(LINKING);
		case_mstate(LINKED);
		}
		break;
	case BTC_STR_RATE:
		switch(id) {
		case_rate(CCK1);
		case_rate(CCK2);
		case_rate(CCK5_5);
		case_rate(CCK11);
		case_rate(OFDM6);
		case_rate(OFDM9);
		case_rate(OFDM12);
		case_rate(OFDM18);
		case_rate(OFDM24);
		case_rate(OFDM36);
		case_rate(OFDM48);
		case_rate(OFDM54);
		case_rate(MCS0);
		case_rate(MCS1);
		case_rate(MCS2);
		case_rate(MCS3);
		case_rate(MCS4);
		case_rate(MCS5);
		case_rate(MCS6);
		case_rate(MCS7);
		case_rate(MCS8);
		case_rate(MCS9);
		case_rate(MCS10);
		case_rate(MCS11);
		case_rate(MCS12);
		case_rate(MCS13);
		case_rate(MCS14);
		case_rate(MCS15);
		case_rate(MCS16);
		case_rate(MCS17);
		case_rate(MCS18);
		case_rate(MCS19);
		case_rate(MCS20);
		case_rate(MCS21);
		case_rate(MCS22);
		case_rate(MCS23);
		case_rate(MCS24);
		case_rate(MCS25);
		case_rate(MCS26);
		case_rate(MCS27);
		case_rate(MCS28);
		case_rate(MCS29);
		case_rate(MCS30);
		case_rate(MCS31);
		case_rate(VHT_NSS1_MCS0);
		case_rate(VHT_NSS1_MCS1);
		case_rate(VHT_NSS1_MCS2);
		case_rate(VHT_NSS1_MCS3);
		case_rate(VHT_NSS1_MCS4);
		case_rate(VHT_NSS1_MCS5);
		case_rate(VHT_NSS1_MCS6);
		case_rate(VHT_NSS1_MCS7);
		case_rate(VHT_NSS1_MCS8);
		case_rate(VHT_NSS1_MCS9);
		case_rate(VHT_NSS2_MCS0);
		case_rate(VHT_NSS2_MCS1);
		case_rate(VHT_NSS2_MCS2);
		case_rate(VHT_NSS2_MCS3);
		case_rate(VHT_NSS2_MCS4);
		case_rate(VHT_NSS2_MCS5);
		case_rate(VHT_NSS2_MCS6);
		case_rate(VHT_NSS2_MCS7);
		case_rate(VHT_NSS2_MCS8);
		case_rate(VHT_NSS2_MCS9);
		case_rate(VHT_NSS3_MCS0);
		case_rate(VHT_NSS3_MCS1);
		case_rate(VHT_NSS3_MCS2);
		case_rate(VHT_NSS3_MCS3);
		case_rate(VHT_NSS3_MCS4);
		case_rate(VHT_NSS3_MCS5);
		case_rate(VHT_NSS3_MCS6);
		case_rate(VHT_NSS3_MCS7);
		case_rate(VHT_NSS3_MCS8);
		case_rate(VHT_NSS3_MCS9);
		case_rate(VHT_NSS4_MCS0);
		case_rate(VHT_NSS4_MCS1);
		case_rate(VHT_NSS4_MCS2);
		case_rate(VHT_NSS4_MCS3);
		case_rate(VHT_NSS4_MCS4);
		case_rate(VHT_NSS4_MCS5);
		case_rate(VHT_NSS4_MCS6);
		case_rate(VHT_NSS4_MCS7);
		case_rate(VHT_NSS4_MCS8);
		case_rate(VHT_NSS4_MCS9);
		case_rate(HE_NSS1_MCS0);
		case_rate(HE_NSS1_MCS1);
		case_rate(HE_NSS1_MCS2);
		case_rate(HE_NSS1_MCS3);
		case_rate(HE_NSS1_MCS4);
		case_rate(HE_NSS1_MCS5);
		case_rate(HE_NSS1_MCS6);
		case_rate(HE_NSS1_MCS7);
		case_rate(HE_NSS1_MCS8);
		case_rate(HE_NSS1_MCS9);
		case_rate(HE_NSS1_MCS10);
		case_rate(HE_NSS1_MCS11);
		case_rate(HE_NSS2_MCS0);
		case_rate(HE_NSS2_MCS1);
		case_rate(HE_NSS2_MCS2);
		case_rate(HE_NSS2_MCS3);
		case_rate(HE_NSS2_MCS4);
		case_rate(HE_NSS2_MCS5);
		case_rate(HE_NSS2_MCS6);
		case_rate(HE_NSS2_MCS7);
		case_rate(HE_NSS2_MCS8);
		case_rate(HE_NSS2_MCS9);
		case_rate(HE_NSS2_MCS10);
		case_rate(HE_NSS2_MCS11);
		case_rate(HE_NSS3_MCS0);
		case_rate(HE_NSS3_MCS1);
		case_rate(HE_NSS3_MCS2);
		case_rate(HE_NSS3_MCS3);
		case_rate(HE_NSS3_MCS4);
		case_rate(HE_NSS3_MCS5);
		case_rate(HE_NSS3_MCS6);
		case_rate(HE_NSS3_MCS7);
		case_rate(HE_NSS3_MCS8);
		case_rate(HE_NSS3_MCS9);
		case_rate(HE_NSS3_MCS10);
		case_rate(HE_NSS3_MCS11);
		case_rate(HE_NSS4_MCS0);
		case_rate(HE_NSS4_MCS1);
		case_rate(HE_NSS4_MCS2);
		case_rate(HE_NSS4_MCS3);
		case_rate(HE_NSS4_MCS4);
		case_rate(HE_NSS4_MCS5);
		case_rate(HE_NSS4_MCS6);
		case_rate(HE_NSS4_MCS7);
		case_rate(HE_NSS4_MCS8);
		case_rate(HE_NSS4_MCS9);
		case_rate(HE_NSS4_MCS10);
		case_rate(HE_NSS4_MCS11);
		case_rate(MAX);
		}
		break;
	}

	return "Undefine";
}


#endif
