/******************************************************************************
 *
 * Copyright(c) 2007 - 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 _RTW_CHPLAN_C_

#include <drv_types.h>

#ifndef USE_RTW_REGD
#define USE_RTW_REGD 0
#endif
 
#if defined(PHL_FEATURE_NIC)
/*
* some PHL regulation APIs doesn't have pure database query function, even have, still need pointer of phl as context
* here use a global variable to workaround, this is workable for one-driver-one-dev situation
*/
static void *phl_info;

static enum rtw_regd phl_regulation_to_regd(enum REGULATION reg)
{
	switch (reg) {
	case REGULATION_WW:
		return RTW_REGD_WW;
	case REGULATION_ETSI:
		return RTW_REGD_ETSI;
	case REGULATION_FCC:
		return RTW_REGD_FCC;
	case REGULATION_MKK:
		return RTW_REGD_MKK;
	case REGULATION_KCC:
		return RTW_REGD_KCC;
	case REGULATION_NCC:
		return RTW_REGD_NCC;
	case REGULATION_ACMA:
		return RTW_REGD_ACMA;
	case REGULATION_NA:
		return RTW_REGD_NA;
	case REGULATION_IC:
		return RTW_REGD_IC;
	case REGULATION_CHILE:
		return RTW_REGD_CHILE;
	case REGULATION_MEX:
		return RTW_REGD_MEX;
	case REGULATION_MAX:
	default:
		RTW_WARN("unknown reg:%d\n", reg);
		rtw_warn_on(1);
		return RTW_REGD_NA;
	}
};

static REGULATION_TXPWR_LMT phl_tpo_to_txpwr_lmt(enum TP_OVERWRITE tpo)
{
	switch (tpo) {
	case TPO_CHILE:
		return TXPWR_LMT_CHILE;
	case TPO_QATAR:
		return TXPWR_LMT_QATAR;
	case TPO_UKRAINE:
		return TXPWR_LMT_UKRAINE;
	case TPO_CN:
		return TXPWR_LMT_CN;
	case TPO_NA:
		return TXPWR_LMT_DEF;
	default:
		RTW_WARN("unknown tpo:%d\n", tpo);
		rtw_warn_on(1);
		return TXPWR_LMT_DEF;
	}
}
#endif

#if USE_RTW_REGD
#define RTW_DOMAIN_MAP_VER		"57"
#define RTW_DOMAIN_MAP_M_VER	"h"
#define RTW_COUNTRY_MAP_VER		"31"

struct ch_list_t {
	u8 *len_ch_attr;
};

#define CLA_2G_12_14_PASSIVE	BIT0

#define CLA_5G_B1_PASSIVE		BIT0
#define CLA_5G_B2_PASSIVE		BIT1
#define CLA_5G_B3_PASSIVE		BIT2
#define CLA_5G_B4_PASSIVE		BIT3
#define CLA_5G_B2_DFS			BIT4
#define CLA_5G_B3_DFS			BIT5
#define CLA_5G_B4_DFS			BIT6

#define CLA_6G_B1_PASSIVE		BIT0
#define CLA_6G_B2_PASSIVE		BIT1
#define CLA_6G_B3_PASSIVE		BIT2
#define CLA_6G_B4_PASSIVE		BIT3

#define CH_LIST_ENT(_len, arg...) \
	{.len_ch_attr = (u8[_len + 2]) {_len, ##arg}, }

#define CH_LIST_LEN(_ch_list) (_ch_list.len_ch_attr[0])
#define CH_LIST_CH(_ch_list, _i) (_ch_list.len_ch_attr[_i + 1])
#define CH_LIST_ATTRIB(_ch_list) (_ch_list.len_ch_attr[CH_LIST_LEN(_ch_list) + 1])

enum rtw_chd_2g {
	RTW_CHD_2G_INVALID = 0,

	RTW_CHD_2G_00,
	RTW_CHD_2G_01,
	RTW_CHD_2G_02,
	RTW_CHD_2G_03,
	RTW_CHD_2G_04,
	RTW_CHD_2G_05,
	RTW_CHD_2G_06,

	RTW_CHD_2G_MAX,
	RTW_CHD_2G_NULL = RTW_CHD_2G_00,
};

enum rtw_chd_5g {
	RTW_CHD_5G_INVALID = 0,

	RTW_CHD_5G_00,
	RTW_CHD_5G_01,
	RTW_CHD_5G_02,
	RTW_CHD_5G_03,
	RTW_CHD_5G_04,
	RTW_CHD_5G_05,
	RTW_CHD_5G_06,
	RTW_CHD_5G_07,
	RTW_CHD_5G_08,
	RTW_CHD_5G_09,
	RTW_CHD_5G_10,
	RTW_CHD_5G_11,
	RTW_CHD_5G_12,
	RTW_CHD_5G_13,
	RTW_CHD_5G_14,
	RTW_CHD_5G_15,
	RTW_CHD_5G_16,
	RTW_CHD_5G_17,
	RTW_CHD_5G_18,
	RTW_CHD_5G_19,
	RTW_CHD_5G_20,
	RTW_CHD_5G_21,
	RTW_CHD_5G_22,
	RTW_CHD_5G_23,
	RTW_CHD_5G_24,
	RTW_CHD_5G_25,
	RTW_CHD_5G_26,
	RTW_CHD_5G_27,
	RTW_CHD_5G_28,
	RTW_CHD_5G_29,
	RTW_CHD_5G_30,
	RTW_CHD_5G_31,
	RTW_CHD_5G_32,
	RTW_CHD_5G_33,
	RTW_CHD_5G_34,
	RTW_CHD_5G_35,
	RTW_CHD_5G_36,
	RTW_CHD_5G_37,
	RTW_CHD_5G_38,
	RTW_CHD_5G_39,
	RTW_CHD_5G_40,
	RTW_CHD_5G_41,
	RTW_CHD_5G_42,
	RTW_CHD_5G_43,
	RTW_CHD_5G_44,
	RTW_CHD_5G_45,
	RTW_CHD_5G_46,
	RTW_CHD_5G_47,
	RTW_CHD_5G_48,
	RTW_CHD_5G_49,
	RTW_CHD_5G_50,
	RTW_CHD_5G_51,
	RTW_CHD_5G_52,

	RTW_CHD_5G_MAX,
	RTW_CHD_5G_NULL = RTW_CHD_5G_00,
};

static const struct ch_list_t rtw_channel_def_2g[] = {
	/* RTW_CHD_2G_INVALID */	CH_LIST_ENT(0, 0),
	/* RTW_CHD_2G_00 */	CH_LIST_ENT(0, 0),
	/* RTW_CHD_2G_01 */	CH_LIST_ENT(13, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, CLA_2G_12_14_PASSIVE),
	/* RTW_CHD_2G_02 */	CH_LIST_ENT(13, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0),
	/* RTW_CHD_2G_03 */	CH_LIST_ENT(11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0),
	/* RTW_CHD_2G_04 */	CH_LIST_ENT(14, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0),
	/* RTW_CHD_2G_05 */	CH_LIST_ENT(4, 10, 11, 12, 13, 0),
	/* RTW_CHD_2G_06 */	CH_LIST_ENT(14, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, CLA_2G_12_14_PASSIVE),
};

#if CONFIG_IEEE80211_BAND_5GHZ
static const struct ch_list_t rtw_channel_def_5g[] = {
	/* RTW_CHD_5G_INVALID */	CH_LIST_ENT(0, 0),
	/* RTW_CHD_5G_00 */	CH_LIST_ENT(0, 0),
	/* RTW_CHD_5G_01 */	CH_LIST_ENT(21, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
	/* RTW_CHD_5G_02 */	CH_LIST_ENT(19, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
	/* RTW_CHD_5G_03 */	CH_LIST_ENT(24, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
	/* RTW_CHD_5G_04 */	CH_LIST_ENT(22, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 149, 153, 157, 161, 165, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
	/* RTW_CHD_5G_05 */	CH_LIST_ENT(19, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 149, 153, 157, 161, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
	/* RTW_CHD_5G_06 */	CH_LIST_ENT(9, 36, 40, 44, 48, 149, 153, 157, 161, 165, 0),
	/* RTW_CHD_5G_07 */	CH_LIST_ENT(13, 36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165, CLA_5G_B2_DFS),
	/* RTW_CHD_5G_08 */	CH_LIST_ENT(12, 36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, CLA_5G_B2_DFS),
	/* RTW_CHD_5G_09 */	CH_LIST_ENT(5, 149, 153, 157, 161, 165, 0),
	/* RTW_CHD_5G_10 */	CH_LIST_ENT(8, 36, 40, 44, 48, 52, 56, 60, 64, CLA_5G_B2_DFS),
	/* RTW_CHD_5G_11 */	CH_LIST_ENT(11, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, CLA_5G_B3_DFS),
	/* RTW_CHD_5G_12 */	CH_LIST_ENT(16, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
	/* RTW_CHD_5G_13 */	CH_LIST_ENT(8, 56, 60, 64, 149, 153, 157, 161, 165, CLA_5G_B2_DFS),
	/* RTW_CHD_5G_14 */	CH_LIST_ENT(4, 36, 40, 44, 48, 0),
	/* RTW_CHD_5G_15 */	CH_LIST_ENT(4, 149, 153, 157, 161, 0),
	/* RTW_CHD_5G_16 */	CH_LIST_ENT(11, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 0),
	/* RTW_CHD_5G_17 */	CH_LIST_ENT(16, 36, 40, 44, 48, 52, 56, 60, 64, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
	/* RTW_CHD_5G_18 */	CH_LIST_ENT(17, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
	/* RTW_CHD_5G_19 */	CH_LIST_ENT(16, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
	/* RTW_CHD_5G_20 */	CH_LIST_ENT(20, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
	/* RTW_CHD_5G_21 */	CH_LIST_ENT(11, 36, 40, 44, 48, 52, 56, 60, 64, 132, 136, 140, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
	/* RTW_CHD_5G_22 */	CH_LIST_ENT(25, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 149, 153, 157, 161, 165, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
	/* RTW_CHD_5G_23 */	CH_LIST_ENT(21, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 149, 153, 157, 161, 165, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
	/* RTW_CHD_5G_24 */	CH_LIST_ENT(24, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B2_PASSIVE | CLA_5G_B3_PASSIVE | CLA_5G_B4_PASSIVE),
	/* RTW_CHD_5G_25 */	CH_LIST_ENT(24, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B2_PASSIVE | CLA_5G_B3_PASSIVE),
	/* RTW_CHD_5G_26 */	CH_LIST_ENT(24, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B1_PASSIVE | CLA_5G_B2_PASSIVE | CLA_5G_B3_PASSIVE),
	/* RTW_CHD_5G_27 */	CH_LIST_ENT(21, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B2_PASSIVE | CLA_5G_B3_PASSIVE),
	/* RTW_CHD_5G_28 */	CH_LIST_ENT(13, 36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165, CLA_5G_B2_PASSIVE),
	/* RTW_CHD_5G_29 */	CH_LIST_ENT(13, 36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165, CLA_5G_B1_PASSIVE | CLA_5G_B2_PASSIVE),
	/* RTW_CHD_5G_30 */	CH_LIST_ENT(9, 36, 40, 44, 48, 149, 153, 157, 161, 165, CLA_5G_B1_PASSIVE | CLA_5G_B4_PASSIVE),
	/* RTW_CHD_5G_31 */	CH_LIST_ENT(24, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B1_PASSIVE | CLA_5G_B2_PASSIVE | CLA_5G_B3_PASSIVE | CLA_5G_B4_PASSIVE),
	/* RTW_CHD_5G_32 */	CH_LIST_ENT(9, 52, 56, 60, 64, 149, 153, 157, 161, 165, CLA_5G_B2_DFS),
	/* RTW_CHD_5G_33 */	CH_LIST_ENT(22, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 144, 149, 153, 157, 161, 165, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
	/* RTW_CHD_5G_34 */	CH_LIST_ENT(13, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B3_DFS),
	/* RTW_CHD_5G_35 */	CH_LIST_ENT(8, 100, 104, 108, 112, 116, 132, 136, 140, CLA_5G_B3_DFS),
	/* RTW_CHD_5G_36 */	CH_LIST_ENT(25, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 149, 153, 157, 161, 165, CLA_5G_B1_PASSIVE | CLA_5G_B2_PASSIVE | CLA_5G_B2_DFS | CLA_5G_B3_PASSIVE | CLA_5G_B3_DFS | CLA_5G_B4_PASSIVE),
	/* RTW_CHD_5G_37 */	CH_LIST_ENT(8, 36, 40, 44, 48, 52, 56, 60, 64, CLA_5G_B1_PASSIVE | CLA_5G_B2_PASSIVE),
	/* RTW_CHD_5G_38 */	CH_LIST_ENT(16, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
	/* RTW_CHD_5G_39 */	CH_LIST_ENT(21, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 149, 153, 157, 161, 165, CLA_5G_B1_PASSIVE | CLA_5G_B2_DFS | CLA_5G_B3_DFS | CLA_5G_B4_DFS),
	/* RTW_CHD_5G_40 */	CH_LIST_ENT(21, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B1_PASSIVE | CLA_5G_B2_DFS | CLA_5G_B3_DFS),
	/* RTW_CHD_5G_41 */	CH_LIST_ENT(24, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B2_DFS | CLA_5G_B3_DFS | CLA_5G_B4_PASSIVE),
	/* RTW_CHD_5G_42 */	CH_LIST_ENT(24, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B1_PASSIVE | CLA_5G_B2_DFS | CLA_5G_B3_DFS | CLA_5G_B4_PASSIVE),
	/* RTW_CHD_5G_43 */	CH_LIST_ENT(23, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B1_PASSIVE | CLA_5G_B2_PASSIVE | CLA_5G_B3_PASSIVE | CLA_5G_B4_PASSIVE),
	/* RTW_CHD_5G_44 */	CH_LIST_ENT(21, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165, CLA_5G_B1_PASSIVE | CLA_5G_B2_PASSIVE | CLA_5G_B3_PASSIVE | CLA_5G_B4_PASSIVE),
	/* RTW_CHD_5G_45 */	CH_LIST_ENT(13, 36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165, CLA_5G_B1_PASSIVE | CLA_5G_B2_PASSIVE | CLA_5G_B4_PASSIVE),
	/* RTW_CHD_5G_46 */	CH_LIST_ENT(12, 36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, CLA_5G_B2_PASSIVE),
	/* RTW_CHD_5G_47 */	CH_LIST_ENT(19, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, CLA_5G_B2_PASSIVE | CLA_5G_B3_PASSIVE),
	/* RTW_CHD_5G_48 */	CH_LIST_ENT(20, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
	/* RTW_CHD_5G_49 */	CH_LIST_ENT(17, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
	/* RTW_CHD_5G_50 */	CH_LIST_ENT(17, 36, 40, 44, 48, 52, 56, 60, 64, 132, 136, 140, 144, 149, 153, 157, 161, 165, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
	/* RTW_CHD_5G_51 */	CH_LIST_ENT(13, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
	/* RTW_CHD_5G_52 */	CH_LIST_ENT(28, 36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 144, 149, 153, 157, 161, 165, 169, 173, 177, CLA_5G_B2_DFS | CLA_5G_B3_DFS),
};
#endif /* CONFIG_IEEE80211_BAND_5GHZ */

struct chplan_ent_t {
	u8 regd_2g; /* value of enum rtw_regd */
	u8 chd_2g;
#if CONFIG_IEEE80211_BAND_5GHZ
	u8 regd_5g; /* value of enum rtw_regd */
	u8 chd_5g;
#endif
};

#if CONFIG_IEEE80211_BAND_5GHZ
#define CHPLAN_ENT(_regd_2g, _chd_2g, _regd_5g, _chd_5g) {.regd_2g = RTW_REGD_##_regd_2g, .chd_2g = RTW_CHD_2G_##_chd_2g, .regd_5g = RTW_REGD_##_regd_5g, .chd_5g = RTW_CHD_5G_##_chd_5g}
#else
#define CHPLAN_ENT(_regd_2g, _chd_2g, _regd_5g, _chd_5g) {.regd_2g = RTW_REGD_##_regd_2g, .chd_2g = RTW_CHD_2G_##_chd_2g}
#endif

#define CHPLAN_ENT_NOT_DEFINED CHPLAN_ENT(NA, INVALID, NA, INVALID)

static const struct chplan_ent_t RTW_ChannelPlanMap[] = {
	[0x00] = CHPLAN_ENT(ETSI , 02, ETSI , 49),
	[0x01] = CHPLAN_ENT(ETSI , 02, ETSI , 50),
	[0x02] = CHPLAN_ENT(ETSI , 03, ETSI , 07),
	[0x03] = CHPLAN_ENT(ACMA , 02, ACMA , 33),
	[0x04] = CHPLAN_ENT(ETSI , 02, ETSI , 51),
	[0x05] = CHPLAN_ENT(ETSI , 02, ETSI , 06),
	[0x06] = CHPLAN_ENT(ETSI , 02, ETSI , 07),
	[0x07] = CHPLAN_ENT(ETSI , 02, ETSI , 23),
	[0x08] = CHPLAN_ENT(ETSI , 02, ETSI , 21),
	[0x09] = CHPLAN_ENT(ETSI , 02, ETSI , 17),
	[0x1A] = CHPLAN_ENT(NA   , 00, NA   , 00),
	[0x1B] = CHPLAN_ENT(FCC  , 02, FCC  , 52),
	[0x20] = CHPLAN_ENT(WW   , 01, NA   , 00),
	[0x21] = CHPLAN_ENT(ETSI , 02, NA   , 00),
	[0x22] = CHPLAN_ENT(FCC  , 03, NA   , 00),
	[0x23] = CHPLAN_ENT(MKK  , 04, NA   , 00),
	[0x24] = CHPLAN_ENT(ETSI , 05, NA   , 00),
	[0x25] = CHPLAN_ENT(FCC  , 03, FCC  , 03),
	[0x26] = CHPLAN_ENT(ETSI , 01, ETSI , 02),
	[0x27] = CHPLAN_ENT(MKK  , 04, MKK  , 02),
	[0x28] = CHPLAN_ENT(KCC  , 01, KCC  , 05),
	[0x29] = CHPLAN_ENT(FCC  , 01, FCC  , 06),
	[0x2A] = CHPLAN_ENT(FCC  , 02, NA   , 00),
	[0x2B] = CHPLAN_ENT(IC   , 02, IC   , 33),
	[0x2C] = CHPLAN_ENT(MKK  , 02, NA   , 00),
	[0x2D] = CHPLAN_ENT(CHILE, 01, CHILE, 22),
	[0x2E] = CHPLAN_ENT(WW   , 03, WW   , 37),
	[0x2F] = CHPLAN_ENT(CHILE, 01, CHILE, 38),
	[0x30] = CHPLAN_ENT(FCC  , 01, FCC  , 07),
	[0x31] = CHPLAN_ENT(FCC  , 01, FCC  , 08),
	[0x32] = CHPLAN_ENT(FCC  , 01, FCC  , 09),
	[0x33] = CHPLAN_ENT(FCC  , 01, FCC  , 10),
	[0x34] = CHPLAN_ENT(FCC  , 03, FCC  , 01),
	[0x35] = CHPLAN_ENT(ETSI , 01, ETSI , 03),
	[0x36] = CHPLAN_ENT(ETSI , 01, ETSI , 04),
	[0x37] = CHPLAN_ENT(MKK  , 04, MKK  , 10),
	[0x38] = CHPLAN_ENT(MKK  , 04, MKK  , 11),
	[0x39] = CHPLAN_ENT(NCC  , 03, NCC  , 12),
	[0x3A] = CHPLAN_ENT(ETSI , 02, ETSI , 02),
	[0x3B] = CHPLAN_ENT(ACMA , 02, ACMA , 01),
	[0x3C] = CHPLAN_ENT(ETSI , 02, ETSI , 10),
	[0x3D] = CHPLAN_ENT(ETSI , 02, ETSI , 15),
	[0x3E] = CHPLAN_ENT(KCC  , 02, KCC  , 03),
	[0x3F] = CHPLAN_ENT(FCC  , 03, FCC  , 22),
	[0x40] = CHPLAN_ENT(NCC  , 03, NCC  , 13),
	[0x41] = CHPLAN_ENT(WW   , 06, NA   , 00),
	[0x42] = CHPLAN_ENT(ETSI , 02, ETSI , 14),
	[0x43] = CHPLAN_ENT(FCC  , 03, FCC  , 06),
	[0x44] = CHPLAN_ENT(NCC  , 03, NCC  , 09),
	[0x45] = CHPLAN_ENT(ACMA , 01, ACMA , 01),
	[0x46] = CHPLAN_ENT(FCC  , 03, FCC  , 15),
	[0x47] = CHPLAN_ENT(ETSI , 01, ETSI , 10),
	[0x48] = CHPLAN_ENT(ETSI , 01, ETSI , 07),
	[0x49] = CHPLAN_ENT(ETSI , 01, ETSI , 06),
	[0x4A] = CHPLAN_ENT(IC   , 03, IC   , 33),
	[0x4B] = CHPLAN_ENT(KCC  , 02, KCC  , 22),
	[0x4C] = CHPLAN_ENT(FCC  , 03, FCC  , 28),
	[0x4D] = CHPLAN_ENT(MEX  , 02, MEX  , 01),
	[0x4E] = CHPLAN_ENT(ETSI , 02, ETSI , 42),
	[0x4F] = CHPLAN_ENT(NA   , 00, MKK  , 43),
	[0x50] = CHPLAN_ENT(ETSI , 01, ETSI , 16),
	[0x51] = CHPLAN_ENT(ETSI , 01, ETSI , 09),
	[0x52] = CHPLAN_ENT(ETSI , 01, ETSI , 17),
	[0x53] = CHPLAN_ENT(NCC  , 03, NCC  , 18),
	[0x54] = CHPLAN_ENT(ETSI , 01, ETSI , 15),
	[0x55] = CHPLAN_ENT(FCC  , 03, FCC  , 01),
	[0x56] = CHPLAN_ENT(ETSI , 01, ETSI , 19),
	[0x57] = CHPLAN_ENT(FCC  , 03, FCC  , 20),
	[0x58] = CHPLAN_ENT(MKK  , 02, MKK  , 14),
	[0x59] = CHPLAN_ENT(ETSI , 01, ETSI , 21),
	[0x5A] = CHPLAN_ENT(NA   , 00, FCC  , 44),
	[0x5B] = CHPLAN_ENT(NA   , 00, FCC  , 45),
	[0x5C] = CHPLAN_ENT(NA   , 00, FCC  , 43),
	[0x5D] = CHPLAN_ENT(ETSI , 02, ETSI , 08),
	[0x5E] = CHPLAN_ENT(ETSI , 02, ETSI , 03),
	[0x5F] = CHPLAN_ENT(MKK  , 02, MKK  , 47),
	[0x60] = CHPLAN_ENT(FCC  , 03, FCC  , 09),
	[0x61] = CHPLAN_ENT(FCC  , 02, FCC  , 01),
	[0x62] = CHPLAN_ENT(FCC  , 02, FCC  , 03),
	[0x63] = CHPLAN_ENT(ETSI , 01, ETSI , 23),
	[0x64] = CHPLAN_ENT(MKK  , 02, MKK  , 24),
	[0x65] = CHPLAN_ENT(ETSI , 02, ETSI , 24),
	[0x66] = CHPLAN_ENT(FCC  , 03, FCC  , 27),
	[0x67] = CHPLAN_ENT(FCC  , 03, FCC  , 25),
	[0x68] = CHPLAN_ENT(FCC  , 02, FCC  , 27),
	[0x69] = CHPLAN_ENT(FCC  , 02, FCC  , 25),
	[0x6A] = CHPLAN_ENT(ETSI , 02, ETSI , 25),
	[0x6B] = CHPLAN_ENT(FCC  , 01, FCC  , 29),
	[0x6C] = CHPLAN_ENT(FCC  , 01, FCC  , 26),
	[0x6D] = CHPLAN_ENT(FCC  , 02, FCC  , 28),
	[0x6E] = CHPLAN_ENT(FCC  , 01, FCC  , 25),
	[0x6F] = CHPLAN_ENT(NA   , 00, ETSI , 06),
	[0x70] = CHPLAN_ENT(NA   , 00, ETSI , 30),
	[0x71] = CHPLAN_ENT(NA   , 00, ETSI , 25),
	[0x72] = CHPLAN_ENT(NA   , 00, ETSI , 31),
	[0x73] = CHPLAN_ENT(FCC  , 01, FCC  , 01),
	[0x74] = CHPLAN_ENT(FCC  , 02, FCC  , 19),
	[0x75] = CHPLAN_ENT(ETSI , 01, ETSI , 32),
	[0x76] = CHPLAN_ENT(FCC  , 02, FCC  , 22),
	[0x77] = CHPLAN_ENT(ETSI , 01, ETSI , 34),
	[0x78] = CHPLAN_ENT(FCC  , 03, FCC  , 35),
	[0x79] = CHPLAN_ENT(MKK  , 02, MKK  , 02),
	[0x7A] = CHPLAN_ENT(ETSI , 02, ETSI , 28),
	[0x7B] = CHPLAN_ENT(ETSI , 02, ETSI , 46),
	[0x7C] = CHPLAN_ENT(ETSI , 02, ETSI , 47),
	[0x7D] = CHPLAN_ENT(MKK  , 04, MKK  , 48),
	[0x7E] = CHPLAN_ENT(MKK  , 02, MKK  , 48),
	[0x7F] = CHPLAN_ENT(WW   , 01, WW   , 36),
};

const int RTW_ChannelPlanMap_size = sizeof(RTW_ChannelPlanMap) / sizeof(RTW_ChannelPlanMap[0]);
#endif /* USE_RTW_REGD */

u8 rtw_chplan_get_default_regd_2g(u8 id)
{
#if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
	return phl_regulation_to_regd(rtw_phl_get_domain_regulation_2g(id));
#else
	if (id < RTW_ChannelPlanMap_size)
		return RTW_ChannelPlanMap[id].regd_2g;
	return RTW_REGD_NA;
#endif
}

u8 rtw_chplan_get_default_regd_5g(u8 id)
{
#if CONFIG_IEEE80211_BAND_5GHZ
#if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
	return phl_regulation_to_regd(rtw_phl_get_domain_regulation_5g(id));
#else
	if (id < RTW_ChannelPlanMap_size)
		return RTW_ChannelPlanMap[id].regd_5g;
#endif
#endif
	return RTW_REGD_NA;
}

bool rtw_is_channel_plan_valid(u8 id)
{
#if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
	if (rtw_phl_valid_regulation_domain(id))
		return _TRUE;
	else
		return _FALSE;
#else
	if (id < RTW_ChannelPlanMap_size) {
		const struct chplan_ent_t *chplan_map = &RTW_ChannelPlanMap[id];

		if (chplan_map->chd_2g != RTW_CHD_2G_INVALID
			#if CONFIG_IEEE80211_BAND_5GHZ
			&& chplan_map->chd_5g != RTW_CHD_5G_INVALID
			#endif
		)
			return _TRUE;
	}

	return _FALSE;
#endif
}

bool rtw_regsty_is_excl_chs(struct registry_priv *regsty, u8 ch)
{
	int i;

	for (i = 0; i < MAX_CHANNEL_NUM_2G_5G; i++) {
		if (regsty->excl_chs[i] == 0)
			break;
		if (regsty->excl_chs[i] == ch)
			return _TRUE;
	}
	return _FALSE;
}

/*
 * Search the @param ch in chplan by given @param id
 * @id: the given channel plan id
 * @ch: the given channel number
 *
 * return the index of channel_num in channel_set, -1 if not found
 */
static bool rtw_chplan_get_ch(u8 id, const u32 ch, u8 *flags)
{
	u8 index, chan, attrib;

	if (flags)
		*flags = 0;

#if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
	if (phl_info) {
		struct rtw_regulation_chplan plan;

		/* this function check for capability inside */
		if (rtw_phl_query_specific_chplan(phl_info, id, &plan)) {
			for (index = 0; index < plan.cnt; index++) {
				if (plan.ch[index].band != BAND_ON_24G && plan.ch[index].band != BAND_ON_5G)
					continue;
				if (plan.ch[index].channel != ch)
					continue;
				if (flags) {
					if (plan.ch[index].property & CH_PASSIVE)
						*flags |= RTW_CHF_NO_IR;
					if (plan.ch[index].property & CH_DFS)
						*flags |= RTW_CHF_DFS;
				}
				return 1;
			}
		}
	}
#else
#if CONFIG_IEEE80211_BAND_5GHZ
	if (ch > 14) {
		u8 chd_5g = RTW_ChannelPlanMap[id].chd_5g;

		attrib = CH_LIST_ATTRIB(rtw_channel_def_5g[chd_5g]);

		for (index = 0; index < CH_LIST_LEN(rtw_channel_def_5g[chd_5g]); index++) {
			if (CH_LIST_CH(rtw_channel_def_5g[chd_5g], index) == ch) {
				if (flags) {
					if ((rtw_is_5g_band1(ch) && (attrib & CLA_5G_B1_PASSIVE)) /* band1 passive */
						|| (rtw_is_5g_band2(ch) && (attrib & CLA_5G_B2_PASSIVE)) /* band2 passive */
						|| (rtw_is_5g_band3(ch) && (attrib & CLA_5G_B3_PASSIVE)) /* band3 passive */
						|| (rtw_is_5g_band4(ch) && (attrib & CLA_5G_B4_PASSIVE)) /* band4 passive */
					)
						*flags |= RTW_CHF_NO_IR;

					if ((rtw_is_5g_band2(ch) && (attrib & CLA_5G_B2_DFS))
						|| (rtw_is_5g_band3(ch) && (attrib & CLA_5G_B3_DFS))
						|| (rtw_is_5g_band4(ch) && (attrib & CLA_5G_B4_DFS)))
						*flags |= RTW_CHF_DFS;
				}
				return 1;
			}
		}
	} else
#endif /* CONFIG_IEEE80211_BAND_5GHZ */
	 {
		u8 chd_2g = RTW_ChannelPlanMap[id].chd_2g;

		attrib = CH_LIST_ATTRIB(rtw_channel_def_2g[chd_2g]);

		for (index = 0; index < CH_LIST_LEN(rtw_channel_def_2g[chd_2g]); index++) {
			if (CH_LIST_CH(rtw_channel_def_2g[chd_2g], index) == ch) {
				if (flags) {
					if (ch >= 12 && ch <= 14 && (attrib & CLA_2G_12_14_PASSIVE))
						*flags |= RTW_CHF_NO_IR;
				}
				return 1;
			}
		}
	}
#endif /* defined(PHL_FEATURE_NIC) && !USE_RTW_REGD */

	return 0;
}

#if CONFIG_IEEE80211_BAND_6GHZ
#if USE_RTW_REGD
enum rtw_chd_6g {
	RTW_CHD_6G_INVALID = 0,

	RTW_CHD_6G_00,
	RTW_CHD_6G_01,
	RTW_CHD_6G_02,
	RTW_CHD_6G_03,
	RTW_CHD_6G_04,
	RTW_CHD_6G_05,	/* 6G Worldwide */

	RTW_CHD_6G_MAX,
	RTW_CHD_6G_NULL = RTW_CHD_6G_00,
};

static const struct ch_list_t rtw_channel_def_6g[] = {
	/* RTW_CHD_6G_INVALID */	CH_LIST_ENT(0, 0),
	/* RTW_CHD_6G_00 */	CH_LIST_ENT(0, 0),
	/* RTW_CHD_6G_01 */	CH_LIST_ENT(24, 1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 49, 53, 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, 0),
	/* RTW_CHD_6G_02 */	CH_LIST_ENT(6, 97, 101, 105, 109, 113, 117, 0),
	/* RTW_CHD_6G_03 */	CH_LIST_ENT(18, 121, 125, 129, 133, 137, 141, 145, 149, 153, 157, 161, 165, 169, 173, 177, 181, 185, 189, 0),
	/* RTW_CHD_6G_04 */	CH_LIST_ENT(11, 193, 197, 201, 205, 209, 213, 217, 221, 225, 229, 233, 0),
	/* RTW_CHD_6G_05 */	CH_LIST_ENT(59, 1, 5, 9, 13, 17, 21, 25, 29, 33, 37, 41, 45, 49, 53, 57, 61, 65, 69, 73, 77, 81, 85, 89, 93, 97, 101, 105, 109, 113, 117, 121, 125, 129, 133, 137, 141, 145, 149, 153, 157, 161, 165, 169, 173, 177, 181, 185, 189, 193, 197, 201, 205, 209, 213, 217, 221, 225, 229, 233, CLA_6G_B1_PASSIVE | CLA_6G_B2_PASSIVE | CLA_6G_B3_PASSIVE | CLA_6G_B4_PASSIVE),
};

struct chplan_6g_ent_t {
	u8 regd; /* value of enum rtw_regd */
	u8 chd;
};

#define CHPLAN_6G_ENT(_regd, _chd) {.regd = RTW_REGD_##_regd, .chd = RTW_CHD_6G_##_chd}

#define CHPLAN_6G_ENT_NOT_DEFINED CHPLAN_6G_ENT(NA, INVALID)

static const struct chplan_6g_ent_t rtw_chplan_6g_map[] = {
	[0x00] = CHPLAN_6G_ENT(NA   , 00),
	[0x01] = CHPLAN_6G_ENT(FCC  , 01),
	[0x02] = CHPLAN_6G_ENT(FCC  , 02),
	[0x03] = CHPLAN_6G_ENT(FCC  , 03),
	[0x04] = CHPLAN_6G_ENT(FCC  , 04),
	[0x7F] = CHPLAN_6G_ENT(WW   , 05),
};

const int rtw_chplan_6g_map_size = sizeof(rtw_chplan_6g_map) / sizeof(rtw_chplan_6g_map[0]);
#endif /* USE_RTW_REGD */

u8 rtw_chplan_get_default_regd_6g(u8 id)
{
#if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
	/* wait PHL ready */
	return RTW_REGD_NA;
#else
	if (id < rtw_chplan_6g_map_size)
		return rtw_chplan_6g_map[id].regd;
	return RTW_REGD_NA;
#endif
}

bool rtw_is_channel_plan_6g_valid(u8 id)
{
#if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
	/* TODO: wait PHL ready */
	return _FALSE;
#else
	if (id < rtw_chplan_6g_map_size) {
		const struct chplan_6g_ent_t *chplan_map = &rtw_chplan_6g_map[id];

		if (chplan_map->chd != RTW_CHD_6G_INVALID)
			return _TRUE;
	}

	return _FALSE;
#endif
}

bool rtw_regsty_is_excl_chs_6g(struct registry_priv *regsty, u8 ch)
{
	int i;

	for (i = 0; i < MAX_CHANNEL_NUM_6G; i++) {
		if (regsty->excl_chs_6g[i] == 0)
			break;
		if (regsty->excl_chs_6g[i] == ch)
			return _TRUE;
	}
	return _FALSE;
}

/*
 * Search the @param ch in chplan by given @param id
 * @id: the given channel plan id
 * @ch: the given channel number
 *
 * return the index of channel_num in channel_set, -1 if not found
 */
static bool rtw_chplan_6g_get_ch(u8 id, const u32 ch, u8 *flags)
{
	u8 index, chan, attrib;
	u8 chd_6g;

	if (flags)
		*flags = 0;

#if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
	if (phl_info) {
		/* Wait PHL ready */
	}
#else
	chd_6g = rtw_chplan_6g_map[id].chd;

	attrib = CH_LIST_ATTRIB(rtw_channel_def_6g[chd_6g]);

	for (index = 0; index < CH_LIST_LEN(rtw_channel_def_6g[chd_6g]); index++) {
		if (CH_LIST_CH(rtw_channel_def_6g[chd_6g], index) == ch) {
			if (flags) {
				if ((rtw_is_6g_band1(ch) && (attrib & CLA_6G_B1_PASSIVE)) /* band1 passive */
					|| (rtw_is_6g_band2(ch) && (attrib & CLA_6G_B2_PASSIVE)) /* band2 passive */
					|| (rtw_is_6g_band3(ch) && (attrib & CLA_6G_B3_PASSIVE)) /* band3 passive */
					|| (rtw_is_6g_band4(ch) && (attrib & CLA_6G_B4_PASSIVE)) /* band4 passive */
				)
					*flags |= RTW_CHF_NO_IR;
			}
			return 1;
		}
	}
#endif

	return 0;
}
#endif /* CONFIG_IEEE80211_BAND_6GHZ */

/*
 * Check if the @param ch, bw, offset is valid for the given @param id, id_6g
 * @ch_set: the given channel set
 * @ch: the given channel number
 * @bw: the given bandwidth
 * @offset: the given channel offset
 *
 * return valid (1) or not (0)
 */
u8 rtw_chplan_is_chbw_valid(u8 id, u8 id_6g, enum band_type band, u8 ch, u8 bw, u8 offset
	, bool allow_primary_passive, bool allow_passive, struct registry_priv *regsty)
{
	u8 cch;
	u8 *op_chs;
	u8 op_ch_num;
	u8 op_ch;
	u8 valid = 0;
	int i;
	int ch_idx;
	u8 flags;

#if CONFIG_IEEE80211_BAND_6GHZ
	if (band == BAND_ON_6G)
		goto exit;
#endif

	cch = rtw_get_center_ch(ch, bw, offset); /* TODO: 6G */

	if (!rtw_get_op_chs_by_cch_bw(cch, bw, &op_chs, &op_ch_num)) /* TODO: 6G  */
		goto exit;

	for (i = 0; i < op_ch_num; i++) {
		op_ch = *(op_chs + i);
		if (0)
			RTW_INFO("%u,%u,%u - cch:%u, bw:%u, op_ch:%u\n", ch, bw, offset, cch, bw, op_ch);
		#if CONFIG_IEEE80211_BAND_6GHZ
		if (band == BAND_ON_6G) {
			if (!rtw_chplan_6g_get_ch(id_6g, op_ch, &flags)
				|| (regsty && rtw_regsty_is_excl_chs_6g(regsty, op_ch) == _TRUE))
				break;
		} else
		#endif
		{
			if (!rtw_chplan_get_ch(id, op_ch, &flags)
				|| (regsty && rtw_regsty_is_excl_chs(regsty, op_ch) == _TRUE))
				break;
		}
		if (flags & RTW_CHF_NO_IR) {
			if (!allow_passive
				|| (!allow_primary_passive && op_ch == ch))
				break;
		}
	}

	if (op_ch_num != 0 && i == op_ch_num)
		valid = 1;

exit:
	return valid;
}

const char *_regd_src_str[] = {
	[REGD_SRC_RTK_PRIV] = "RTK_PRIV",
	[REGD_SRC_OS] = "OS",
	[REGD_SRC_NUM] = "UNKNOWN",
};

#if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
static u8 init_channel_set_from_rtk_priv(_adapter *adapter, RT_CHANNEL_INFO *channel_set)
{
	struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);
	struct rf_ctl_t *rfctl = adapter_to_rfctl(adapter);
	struct registry_priv *regsty = adapter_to_regsty(adapter);
	u8 ChannelPlan = rfctl->ChannelPlan;
	struct rtw_regulation_chplan plan = {0};
	u8	index, chanset_size = 0;
	int i = 0;

	_rtw_memset(channel_set, 0, sizeof(RT_CHANNEL_INFO) * MAX_CHANNEL_NUM);

	/* Set and query channel plan from PHL*/
	if (IS_ALPHA2_WORLDWIDE(rfctl->alpha2) || IS_ALPHA2_UNSPEC(rfctl->alpha2)) {
		if (rtw_phl_regulation_set_domain(GET_PHL_INFO(dvobj), rfctl->ChannelPlan, REGU_RSN_DEFAULT) != true) {
			RTW_WARN("rtw_phl_regulation_set_domain() != true\n");
			goto exit;
		}
		#if CONFIG_IEEE80211_BAND_6GHZ && 0 /* Wait PHL ready */
		/* set 6g domain code */
		#endif
	} else {
		if (rtw_phl_regulation_set_country(GET_PHL_INFO(dvobj), rfctl->alpha2, REGU_RSN_DEFAULT) != true) {
			RTW_WARN("rtw_phl_regulation_set_country() != true\n");
			goto exit;
		}
	}

	if (rtw_phl_regulation_query_chplan(GET_PHL_INFO(dvobj), REGULQ_CHPLAN_FULL, NULL, &plan) != true) {
		RTW_WARN("rtw_phl_regulation_query_chplan() return false\n");
		goto exit;
	}

	for (i = 0; i < plan.cnt; i++) {
		if (rtw_regsty_is_excl_chs(regsty, plan.ch[i].channel) == _TRUE)
			continue;

		if (plan.ch[i].property & CH_DFS) {
			#if CONFIG_DFS
			channel_set[chanset_size].flags |= RTW_CHF_DFS;
			#else
			continue;
			#endif
		}

		channel_set[chanset_size].band = plan.ch[i].band;
		channel_set[chanset_size].ChannelNum = plan.ch[i].channel;
		if (plan.ch[i].property & CH_PASSIVE)
			channel_set[chanset_size].flags |= RTW_CHF_NO_IR;

		if (channel_set[chanset_size].flags & RTW_CHF_NO_IR) {
			if (!rtw_rfctl_reg_allow_beacon_hint(rfctl) || !rtw_chinfo_allow_beacon_hint(&channel_set[chanset_size]))
				RTW_INFO("band:%s ch%u is NO_IR%s while beacon hint not allowed\n"
					, band_str(plan.ch[i].band), plan.ch[i].channel, plan.ch[i].property & CH_DFS ? " DFS" : "");
		}

		chanset_size++;
	}

	#ifdef CONFIG_DFS_MASTER
	for (i = 0; i < chanset_size; i++)
		channel_set[i].non_ocp_end_time = rtw_get_current_time();
	#endif

exit:
	if (chanset_size)
		RTW_INFO(FUNC_ADPT_FMT" ch num:%d\n", FUNC_ADPT_ARG(adapter), chanset_size);
	else
		RTW_WARN(FUNC_ADPT_FMT" final chset has no channel\n", FUNC_ADPT_ARG(adapter));

	return chanset_size;
}
#else
static u8 init_channel_set_from_rtk_priv_2g_5g(_adapter *adapter, RT_CHANNEL_INFO *channel_set, u8 *ch_num)
{
	struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);
	struct rf_ctl_t *rfctl = adapter_to_rfctl(adapter);
	struct registry_priv *regsty = adapter_to_regsty(adapter);
	u8 chplan = rfctl->ChannelPlan;
	u8 index, chanset_size = *ch_num;
	u8 b5GBand = _FALSE, b2_4GBand = _FALSE;
	u8 ch, attrib;

	if (!rtw_is_channel_plan_valid(chplan)) {
		RTW_ERR(FUNC_ADPT_FMT" invalid chplan:0x%02X\n", FUNC_ADPT_ARG(adapter), chplan);
		goto exit;
	}
	RTW_INFO(FUNC_ADPT_FMT" chplan:0x%02X\n", FUNC_ADPT_ARG(adapter), chplan);

	if (is_supported_24g(regsty->band_type) && rtw_hw_chk_band_cap(dvobj, BAND_CAP_2G))
		b2_4GBand = _TRUE;

	if (is_supported_5g(regsty->band_type) && rtw_hw_chk_band_cap(dvobj, BAND_CAP_5G))
		b5GBand = _TRUE;

	if (b2_4GBand) {
		u8 chd_2g = RTW_ChannelPlanMap[chplan].chd_2g;

		attrib = CH_LIST_ATTRIB(rtw_channel_def_2g[chd_2g]);

		for (index = 0; index < CH_LIST_LEN(rtw_channel_def_2g[chd_2g]); index++) {
			ch = CH_LIST_CH(rtw_channel_def_2g[chd_2g], index);
			if (rtw_regsty_is_excl_chs(regsty, ch) == _TRUE)
				continue;

			if (chanset_size >= MAX_CHANNEL_NUM) {
				RTW_WARN("chset size can't exceed MAX_CHANNEL_NUM(%u)\n", MAX_CHANNEL_NUM);
				break;
			}

			channel_set[chanset_size].band = BAND_ON_24G;
			channel_set[chanset_size].ChannelNum = ch;

			if (ch >= 12 && ch <= 14 && (attrib & CLA_2G_12_14_PASSIVE))
				channel_set[chanset_size].flags |= RTW_CHF_NO_IR;

			if (channel_set[chanset_size].flags & RTW_CHF_NO_IR) {
				if (!rtw_rfctl_reg_allow_beacon_hint(rfctl) || !rtw_chinfo_allow_beacon_hint(&channel_set[chanset_size]))
					RTW_INFO("band:%s ch%u is NO_IR while beacon hint not allowed\n", band_str(BAND_ON_24G), ch);
			}

			chanset_size++;
		}
	}

#if CONFIG_IEEE80211_BAND_5GHZ
	if (b5GBand) {
		bool dfs;
		u8 chd_5g = RTW_ChannelPlanMap[chplan].chd_5g;

		attrib = CH_LIST_ATTRIB(rtw_channel_def_5g[chd_5g]);

		for (index = 0; index < CH_LIST_LEN(rtw_channel_def_5g[chd_5g]); index++) {
			ch = CH_LIST_CH(rtw_channel_def_5g[chd_5g], index);
			if (rtw_regsty_is_excl_chs(regsty, ch) == _TRUE)
				continue;
			dfs = (rtw_is_5g_band2(ch) && (attrib & CLA_5G_B2_DFS))
				|| (rtw_is_5g_band3(ch) && (attrib & CLA_5G_B3_DFS))
				|| (rtw_is_5g_band4(ch) && (attrib & CLA_5G_B4_DFS));
			#if !CONFIG_DFS
			if (dfs)
				continue;
			#endif

			if (chanset_size >= MAX_CHANNEL_NUM) {
				RTW_WARN("chset size can't exceed MAX_CHANNEL_NUM(%u)\n", MAX_CHANNEL_NUM);
				break;
			}

			channel_set[chanset_size].band = BAND_ON_5G;
			channel_set[chanset_size].ChannelNum = ch;

			if ((rtw_is_5g_band1(ch) && (attrib & CLA_5G_B1_PASSIVE)) /* band1 passive */
				|| (rtw_is_5g_band2(ch) && (attrib & CLA_5G_B2_PASSIVE)) /* band2 passive */
				|| (rtw_is_5g_band3(ch) && (attrib & CLA_5G_B3_PASSIVE)) /* band3 passive */
				|| (rtw_is_5g_band4(ch) && (attrib & CLA_5G_B4_PASSIVE)) /* band4 passive */
			)
				channel_set[chanset_size].flags |= RTW_CHF_NO_IR;

			if (dfs)
				channel_set[chanset_size].flags |= RTW_CHF_DFS;

			if (channel_set[chanset_size].flags & RTW_CHF_NO_IR) {
				if (!rtw_rfctl_reg_allow_beacon_hint(rfctl) || !rtw_chinfo_allow_beacon_hint(&channel_set[chanset_size]))
					RTW_INFO("band:%s ch%u is NO_IR%s while beacon hint not allowed\n", band_str(BAND_ON_5G), ch, dfs ? " DFS" : "");
			}

			chanset_size++;
		}
	}
#endif /* CONFIG_IEEE80211_BAND_5GHZ */

exit:
	*ch_num = chanset_size;

	return chanset_size;
}

#if CONFIG_IEEE80211_BAND_6GHZ
static u8 init_channel_set_from_rtk_priv_6g(_adapter *adapter, RT_CHANNEL_INFO *channel_set, u8 *ch_num)
{
	struct dvobj_priv *dvobj = adapter_to_dvobj(adapter);
	struct rf_ctl_t *rfctl = adapter_to_rfctl(adapter);
	struct registry_priv *regsty = adapter_to_regsty(adapter);
	u8 chplan_6g = rfctl->chplan_6g;
	u8 index, chanset_size = *ch_num;
	bool band_6g = _FALSE;
	u8 chd_6g;
	u8 ch, attrib;

	if (!rtw_is_channel_plan_6g_valid(chplan_6g)) {
		RTW_ERR(FUNC_ADPT_FMT" invalid chplan_6g:0x%02X\n", FUNC_ADPT_ARG(adapter), chplan_6g);
		goto exit;
	}
	RTW_INFO(FUNC_ADPT_FMT" chplan_6g:0x%02X\n", FUNC_ADPT_ARG(adapter), chplan_6g);

	if (is_supported_6g(regsty->band_type) && rtw_hw_chk_band_cap(dvobj, BAND_CAP_6G))
		band_6g = _TRUE;
	if (!band_6g)
		goto exit;

	chd_6g = rtw_chplan_6g_map[chplan_6g].chd;

	attrib = CH_LIST_ATTRIB(rtw_channel_def_6g[chd_6g]);

	for (index = 0; index < CH_LIST_LEN(rtw_channel_def_6g[chd_6g]); index++) {
		ch = CH_LIST_CH(rtw_channel_def_6g[chd_6g], index);
		if (rtw_regsty_is_excl_chs_6g(regsty, ch) == _TRUE)
			continue;
		if (chanset_size >= MAX_CHANNEL_NUM) {
			RTW_WARN("chset size can't exceed MAX_CHANNEL_NUM(%u)\n", MAX_CHANNEL_NUM);
			break;
		}

		channel_set[chanset_size].band = BAND_ON_6G;
		channel_set[chanset_size].ChannelNum = ch;

		if ((rtw_is_6g_band1(ch) && (attrib & CLA_6G_B1_PASSIVE)) /* band1 passive */
			|| (rtw_is_6g_band2(ch) && (attrib & CLA_6G_B2_PASSIVE)) /* band2 passive */
			|| (rtw_is_6g_band3(ch) && (attrib & CLA_6G_B3_PASSIVE)) /* band3 passive */
			|| (rtw_is_6g_band4(ch) && (attrib & CLA_6G_B4_PASSIVE)) /* band4 passive */
		)
			channel_set[chanset_size].flags |= RTW_CHF_NO_IR;

		chanset_size++;
	}

exit:
	*ch_num = chanset_size;

	return chanset_size;
}
#endif /* CONFIG_IEEE80211_BAND_6GHZ */

static u8 init_channel_set_from_rtk_priv(_adapter *adapter, RT_CHANNEL_INFO *channel_set)
{
	u8 chanset_size = 0;
#ifdef CONFIG_DFS_MASTER
	int i;
#endif

	_rtw_memset(channel_set, 0, sizeof(RT_CHANNEL_INFO) * MAX_CHANNEL_NUM);

	init_channel_set_from_rtk_priv_2g_5g(adapter, channel_set, &chanset_size);

#if CONFIG_IEEE80211_BAND_6GHZ
	init_channel_set_from_rtk_priv_6g(adapter, channel_set, &chanset_size);
#endif

#ifdef CONFIG_DFS_MASTER
	for (i = 0; i < chanset_size; i++)
		channel_set[i].non_ocp_end_time = rtw_get_current_time();
#endif

	if (chanset_size)
		RTW_INFO(FUNC_ADPT_FMT" ch num:%d\n", FUNC_ADPT_ARG(adapter), chanset_size);
	else
		RTW_WARN(FUNC_ADPT_FMT" final chset has no channel\n", FUNC_ADPT_ARG(adapter));

	return chanset_size;
}
#endif /* defined(PHL_FEATURE_NIC) && !USE_RTW_REGD */

u8 init_channel_set(_adapter *adapter)
{
	struct rf_ctl_t *rfctl = adapter_to_rfctl(adapter);

	if (rfctl->regd_src == REGD_SRC_RTK_PRIV)
		rfctl->max_chan_nums = init_channel_set_from_rtk_priv(adapter, rfctl->channel_set);
#ifdef CONFIG_REGD_SRC_FROM_OS
	else if (rfctl->regd_src == REGD_SRC_OS)
		rfctl->max_chan_nums = rtw_os_init_channel_set(adapter, rfctl->channel_set);
#endif
	else {
		rfctl->max_chan_nums = 0;
		rtw_warn_on(1);
	}

	return rfctl->max_chan_nums;
}

bool rtw_chset_is_dfs_range(struct _RT_CHANNEL_INFO *chset, u32 hi, u32 lo)
{
	u8 hi_ch = rtw_freq2ch(hi);
	u8 lo_ch = rtw_freq2ch(lo);
	int i;

	for (i = 0; i < MAX_CHANNEL_NUM && chset[i].ChannelNum != 0; i++){
		if (!(chset[i].flags & RTW_CHF_DFS))
			continue;
		if (hi_ch > chset[i].ChannelNum && lo_ch < chset[i].ChannelNum)
			return 1;
	}

	return 0;
}

bool rtw_chset_is_dfs_ch(struct _RT_CHANNEL_INFO *chset, u8 ch)
{
	int i;

	for (i = 0; i < MAX_CHANNEL_NUM && chset[i].ChannelNum != 0; i++){
		if (chset[i].ChannelNum == ch)
			return chset[i].flags & RTW_CHF_DFS ? 1 : 0;
	}

	return 0;
}

bool rtw_chset_is_dfs_chbw(struct _RT_CHANNEL_INFO *chset, u8 ch, u8 bw, u8 offset)
{
	u32 hi, lo;

	if (!rtw_chbw_to_freq_range(ch, bw, offset, &hi, &lo))
		return 0;

	return rtw_chset_is_dfs_range(chset, hi, lo);
}

/* channel specific beacon hint rules */
#ifndef RTW_CHPLAN_BEACON_HINT_ON_2G_CH_1_11
#define RTW_CHPLAN_BEACON_HINT_ON_2G_CH_1_11 0
#endif
#ifndef RTW_CHPLAN_BEACON_HINT_ON_DFS_CH
#define RTW_CHPLAN_BEACON_HINT_ON_DFS_CH 0
#endif

bool rtw_chinfo_allow_beacon_hint(struct _RT_CHANNEL_INFO *chinfo)
{
	return (RTW_CHPLAN_BEACON_HINT_ON_2G_CH_1_11 || !(chinfo->band == BAND_ON_24G && chinfo->ChannelNum <= 11))
		&& (RTW_CHPLAN_BEACON_HINT_ON_DFS_CH || !(chinfo->flags & RTW_CHF_DFS));
}

u8 rtw_process_beacon_hint(_adapter *adapter, WLAN_BSSID_EX *bss)
{
	struct rf_ctl_t *rfctl = adapter_to_rfctl(adapter);
	RT_CHANNEL_INFO *chset = rfctl->channel_set;
	u8 ch = bss->Configuration.DSConfig;
	int chset_idx = rtw_chset_search_ch(chset, ch);
	RT_CHANNEL_INFO *chinfo;
	u8 act_cnt = 0;

	if (chset_idx < 0)
		goto exit;

	chinfo = &chset[chset_idx];

	if ((chinfo->flags & RTW_CHF_NO_IR)
		&& rtw_rfctl_reg_allow_beacon_hint(rfctl)
		&& rtw_chinfo_allow_beacon_hint(chinfo)
	) {
		RTW_INFO("%s: change band:%s ch:%d to active\n", __func__, band_str(chinfo->band), ch);
		chinfo->flags &= ~RTW_CHF_NO_IR;
		act_cnt++;
	}

exit:
	return act_cnt;
}

const char *const _regd_inr_str[] = {
	[RTW_REGD_SET_BY_INIT]			= "INIT",
	[RTW_REGD_SET_BY_USER]			= "USER",
	[RTW_REGD_SET_BY_COUNTRY_IE]	= "COUNTRY_IE",
	[RTW_REGD_SET_BY_DRIVER]		= "DRIVER",
	[RTW_REGD_SET_BY_CORE]			= "CORE",
	[RTW_REGD_SET_BY_NUM]			= "UNKNOWN",
};

const char *const _regd_str[] = {
	[RTW_REGD_NA]		= "NA",
	[RTW_REGD_FCC]		= "FCC",
	[RTW_REGD_MKK]		= "MKK",
	[RTW_REGD_ETSI]		= "ETSI",
	[RTW_REGD_IC]		= "IC",
	[RTW_REGD_KCC]		= "KCC",
	[RTW_REGD_NCC]		= "NCC",
	[RTW_REGD_ACMA]		= "ACMA",
	[RTW_REGD_CHILE]	= "CHILE",
	[RTW_REGD_MEX]		= "MEX",
	[RTW_REGD_WW]		= "WW",
};

const char *const _rtw_edcca_mode_str[] = {
	[RTW_EDCCA_NORM]	= "NORMAL",
	[RTW_EDCCA_ADAPT]	= "ADAPT",
	[RTW_EDCCA_CS]		= "CS",
};

const char *const _rtw_dfs_regd_str[] = {
	[RTW_DFS_REGD_NONE]	= "NONE",
	[RTW_DFS_REGD_FCC]	= "FCC",
	[RTW_DFS_REGD_MKK]	= "MKK",
	[RTW_DFS_REGD_ETSI]	= "ETSI",
};

const char *const _txpwr_lmt_str[] = {
	[TXPWR_LMT_NONE]	= "NONE",
	[TXPWR_LMT_FCC]		= "FCC",
	[TXPWR_LMT_MKK]		= "MKK",
	[TXPWR_LMT_ETSI]	= "ETSI",
	[TXPWR_LMT_IC]		= "IC",
	[TXPWR_LMT_KCC]		= "KCC",
	[TXPWR_LMT_NCC]		= "NCC",
	[TXPWR_LMT_ACMA]	= "ACMA",
	[TXPWR_LMT_CHILE]	= "CHILE",
	[TXPWR_LMT_UKRAINE]	= "UKRAINE",
	[TXPWR_LMT_MEXICO]	= "MEXICO",
	[TXPWR_LMT_CN]		= "CN",
	[TXPWR_LMT_QATAR]	= "QATAR",
	[TXPWR_LMT_WW]		= "WW",
	[TXPWR_LMT_NUM]		= NULL,
};

const REGULATION_TXPWR_LMT _txpwr_lmt_alternate[] = {
	[TXPWR_LMT_NONE]	= TXPWR_LMT_NONE,
	[TXPWR_LMT_FCC]		= TXPWR_LMT_FCC,
	[TXPWR_LMT_MKK]		= TXPWR_LMT_MKK,
	[TXPWR_LMT_ETSI]	= TXPWR_LMT_ETSI,
	[TXPWR_LMT_WW]		= TXPWR_LMT_WW,
	[TXPWR_LMT_NUM]		= TXPWR_LMT_NUM,

	[TXPWR_LMT_IC]		= TXPWR_LMT_FCC,
	[TXPWR_LMT_KCC]		= TXPWR_LMT_ETSI,
	[TXPWR_LMT_NCC]		= TXPWR_LMT_FCC,
	[TXPWR_LMT_ACMA]	= TXPWR_LMT_ETSI,
	[TXPWR_LMT_CHILE]	= TXPWR_LMT_FCC,
	[TXPWR_LMT_UKRAINE]	= TXPWR_LMT_ETSI,
	[TXPWR_LMT_MEXICO]	= TXPWR_LMT_FCC,
	[TXPWR_LMT_CN]		= TXPWR_LMT_ETSI,
	[TXPWR_LMT_QATAR]	= TXPWR_LMT_ETSI,
};

const enum rtw_edcca_mode_t _rtw_regd_to_edcca_mode[RTW_REGD_NUM] = {
	[RTW_REGD_NA] = RTW_EDCCA_MODE_NUM,
	[RTW_REGD_MKK] = RTW_EDCCA_CS,
	[RTW_REGD_ETSI] = RTW_EDCCA_ADAPT,
	[RTW_REGD_WW] = RTW_EDCCA_ADAPT,
};

const REGULATION_TXPWR_LMT _rtw_regd_to_txpwr_lmt[] = {
	[RTW_REGD_NA]		= TXPWR_LMT_NUM,
	[RTW_REGD_FCC]		= TXPWR_LMT_FCC,
	[RTW_REGD_MKK]		= TXPWR_LMT_MKK,
	[RTW_REGD_ETSI]		= TXPWR_LMT_ETSI,
	[RTW_REGD_IC]		= TXPWR_LMT_IC,
	[RTW_REGD_KCC]		= TXPWR_LMT_KCC,
	[RTW_REGD_NCC]		= TXPWR_LMT_NCC,
	[RTW_REGD_ACMA]		= TXPWR_LMT_ACMA,
	[RTW_REGD_CHILE]	= TXPWR_LMT_CHILE,
	[RTW_REGD_MEX]		= TXPWR_LMT_MEXICO,
	[RTW_REGD_WW]		= TXPWR_LMT_WW,
};

char *rtw_get_edcca_modes_str(char *buf, u8 modes[])
{
#define EDCCA_MODE_SEQ_COMPARE(result, operand) (result == RTW_EDCCA_MODE_NUM ? operand : (operand == RTW_EDCCA_MODE_NUM ? result : (result != operand ? -1 : result)))

	int mode = RTW_EDCCA_MODE_NUM;
	int cnt = 0;

	mode = EDCCA_MODE_SEQ_COMPARE(mode, modes[BAND_ON_24G]);
#if CONFIG_IEEE80211_BAND_5GHZ
	mode = EDCCA_MODE_SEQ_COMPARE(mode, modes[BAND_ON_5G]);
#endif
#if CONFIG_IEEE80211_BAND_6GHZ
	mode = EDCCA_MODE_SEQ_COMPARE(mode, modes[BAND_ON_6G]);
#endif

	if (mode != -1) { /* all available values are the same */
		cnt += snprintf(buf + cnt, EDCCA_MODES_STR_LEN - cnt - 1, "%s(%u)", rtw_edcca_mode_str(mode), mode);
		if (cnt >= EDCCA_MODES_STR_LEN - 1)
			goto exit;
	} else {
		cnt += snprintf(buf + cnt, EDCCA_MODES_STR_LEN - cnt - 1, "%s(%u) ", rtw_edcca_mode_str(modes[BAND_ON_24G]), modes[BAND_ON_24G]);
		if (cnt >= EDCCA_MODES_STR_LEN - 1)
			goto exit;
		#if CONFIG_IEEE80211_BAND_5GHZ
		cnt += snprintf(buf + cnt, EDCCA_MODES_STR_LEN - cnt - 1, "%s(%u) ", rtw_edcca_mode_str(modes[BAND_ON_5G]), modes[BAND_ON_5G]);
		if (cnt >= EDCCA_MODES_STR_LEN - 1)
			goto exit;
		#endif
		#if CONFIG_IEEE80211_BAND_6GHZ
		cnt += snprintf(buf + cnt, EDCCA_MODES_STR_LEN - cnt - 1, "%s(%u) ", rtw_edcca_mode_str(modes[BAND_ON_6G]), modes[BAND_ON_6G]);
		if (cnt >= EDCCA_MODES_STR_LEN - 1)
			goto exit;
		#endif
		buf[cnt - 1] = 0;
	}

exit:
	return buf;
}

void rtw_edcca_mode_update(struct dvobj_priv *dvobj)
{
	struct registry_priv *regsty = dvobj_to_regsty(dvobj);
	struct rf_ctl_t *rfctl = dvobj_to_rfctl(dvobj);

	if (regsty->adaptivity_en == 0) {
		/* force disable */
		rfctl->edcca_mode_2g = RTW_EDCCA_NORM;
		#if CONFIG_IEEE80211_BAND_5GHZ
		rfctl->edcca_mode_5g = RTW_EDCCA_NORM;
		#endif
		#if CONFIG_IEEE80211_BAND_6GHZ
		rfctl->edcca_mode_6g = RTW_EDCCA_NORM;
		#endif

	} else if (regsty->adaptivity_en == 1) {
		/* force enable */
		if (!regsty->adaptivity_mode) {
			/* adaptivity */
			rfctl->edcca_mode_2g = RTW_EDCCA_ADAPT;
			#if CONFIG_IEEE80211_BAND_5GHZ
			rfctl->edcca_mode_5g = RTW_EDCCA_ADAPT;
			#endif
			#if CONFIG_IEEE80211_BAND_6GHZ
			rfctl->edcca_mode_6g = RTW_EDCCA_ADAPT;
			#endif
		} else {
			/* carrier sense */
			rfctl->edcca_mode_2g = RTW_EDCCA_CS;
			#if CONFIG_IEEE80211_BAND_5GHZ
			rfctl->edcca_mode_5g = RTW_EDCCA_CS;
			#endif
			#if CONFIG_IEEE80211_BAND_6GHZ
			rfctl->edcca_mode_6g = RTW_EDCCA_CS;
			#endif
		}

	} else {
		u8 modes[BAND_MAX];
		char buf[EDCCA_MODES_STR_LEN];

		/* by regulatory setting */
		#ifdef CONFIG_REGD_SRC_FROM_OS
		if (rfctl->regd_src == REGD_SRC_OS
			&& rfctl->ChannelPlan == RTW_CHPLAN_UNSPECIFIED
		) {
			modes[BAND_ON_24G] = rfctl->edcca_mode_2g = RTW_EDCCA_ADAPT;
			#if CONFIG_IEEE80211_BAND_5GHZ
			modes[BAND_ON_5G] = rfctl->edcca_mode_5g = RTW_EDCCA_ADAPT;
			#endif
			#if CONFIG_IEEE80211_BAND_6GHZ
			modes[BAND_ON_6G] = rfctl->edcca_mode_6g = RTW_EDCCA_ADAPT;
			#endif
			RTW_PRINT("mapping %scountry:%c%c to edcca_mode:%s\n"
				, RFCTL_REG_WORLDWIDE(rfctl) ? "" : "unsupported "
				, rfctl->alpha2[0]
				, rfctl->alpha2[1]
				, rtw_get_edcca_modes_str(buf, modes)
			);
		} else
		#endif
		{
			modes[BAND_ON_24G] = rfctl->edcca_mode_2g =
				rfctl->edcca_mode_2g_override != RTW_EDCCA_DEF ? rfctl->edcca_mode_2g_override :
				rtw_regd_to_edcca_mode(rtw_chplan_get_default_regd_2g(rfctl->ChannelPlan));
			#if CONFIG_IEEE80211_BAND_5GHZ
			modes[BAND_ON_5G] = rfctl->edcca_mode_5g =
				rfctl->edcca_mode_5g_override != RTW_EDCCA_DEF ? rfctl->edcca_mode_5g_override :
				rtw_regd_to_edcca_mode(rtw_chplan_get_default_regd_5g(rfctl->ChannelPlan));
			#endif
			#if CONFIG_IEEE80211_BAND_6GHZ
			modes[BAND_ON_6G] = rfctl->edcca_mode_6g =
				rfctl->edcca_mode_6g_override != RTW_EDCCA_DEF ? rfctl->edcca_mode_6g_override :
				rtw_regd_to_edcca_mode(rtw_chplan_get_default_regd_6g(rfctl->chplan_6g));
			#endif
			RTW_PRINT("update edcca_mode:%s\n"
				, rtw_get_edcca_modes_str(buf, modes)
			);
		}
	}
}

u8 rtw_get_edcca_mode(struct dvobj_priv *dvobj, enum band_type band)
{
	struct rf_ctl_t *rfctl = dvobj_to_rfctl(dvobj);
	u8 edcca_mode = RTW_EDCCA_NORM;

	if (band == BAND_ON_24G)
		edcca_mode = rfctl->edcca_mode_2g;
	#if CONFIG_IEEE80211_BAND_5GHZ
	else if (band == BAND_ON_5G)
		edcca_mode = rfctl->edcca_mode_5g;
	#endif
	#if CONFIG_IEEE80211_BAND_6GHZ
	else if (band == BAND_ON_6G)
		edcca_mode = rfctl->edcca_mode_6g;
	#endif

	return edcca_mode;
}

char *rtw_get_txpwr_lmt_names_str(char *buf, const char *names[], u8 unknown_bmp)
{
#define NAME_DIFF ((void *)1)
/* input comes form organized database, string with same content will not have different pointer */
#define NAME_SEQ_COMPARE(result, operand) (result == NULL ? operand : (operand == NULL ? result : (result != operand ? NAME_DIFF : result)))

	const char *name = NULL;
	int cnt = 0;

	name = NAME_SEQ_COMPARE(name, names[BAND_ON_24G]);
#if CONFIG_IEEE80211_BAND_5GHZ
	name = NAME_SEQ_COMPARE(name, names[BAND_ON_5G]);
#endif
#if CONFIG_IEEE80211_BAND_6GHZ
	name = NAME_SEQ_COMPARE(name, names[BAND_ON_6G]);
#endif

	if (name != NAME_DIFF) { /* all available values are the same */
		cnt += snprintf(buf + cnt, TXPWR_NAMES_STR_LEN - cnt - 1, "%s%s", (unknown_bmp & BIT(BAND_ON_24G)) ? "?" : "", name);
		if (cnt >= TXPWR_NAMES_STR_LEN - 1)
			goto exit;
	} else {
		cnt += snprintf(buf + cnt, TXPWR_NAMES_STR_LEN - cnt - 1, "%s%s ", (unknown_bmp & BIT(BAND_ON_24G)) ? "?" : "", names[BAND_ON_24G]);
		if (cnt >= TXPWR_NAMES_STR_LEN - 1)
			goto exit;
		#if CONFIG_IEEE80211_BAND_5GHZ
		cnt += snprintf(buf + cnt, TXPWR_NAMES_STR_LEN - cnt - 1, "%s%s ", (unknown_bmp & BIT(BAND_ON_5G)) ? "?" : "", names[BAND_ON_5G]);
		if (cnt >= TXPWR_NAMES_STR_LEN - 1)
			goto exit;
		#endif
		#if CONFIG_IEEE80211_BAND_6GHZ
		cnt += snprintf(buf + cnt, TXPWR_NAMES_STR_LEN - cnt - 1, "%s%s ", (unknown_bmp & BIT(BAND_ON_6G)) ? "?" : "", names[BAND_ON_6G]);
		if (cnt >= TXPWR_NAMES_STR_LEN - 1)
			goto exit;
		#endif
		buf[cnt - 1] = 0;
	}

exit:
	return buf;
}

#if CONFIG_IEEE80211_BAND_5GHZ
#define COUNTRY_CHPLAN_ASSIGN_EDCCA_MODE_5G_OVERRIDE(_val) , .edcca_mode_5g_override = (_val)
#else
#define COUNTRY_CHPLAN_ASSIGN_EDCCA_MODE_5G_OVERRIDE(_val)
#endif

#if CONFIG_IEEE80211_BAND_6GHZ
#define COUNTRY_CHPLAN_ASSIGN_CHPLAN_6G(_val) , .chplan_6g = (_val)
#define COUNTRY_CHPLAN_ASSIGN_EDCCA_MODE_6G_OVERRIDE(_val) , .edcca_mode_6g_override = (_val)
#else
#define COUNTRY_CHPLAN_ASSIGN_CHPLAN_6G(_val)
#define COUNTRY_CHPLAN_ASSIGN_EDCCA_MODE_6G_OVERRIDE(_val)
#endif

#if defined(CONFIG_80211AC_VHT) || defined(CONFIG_80211AX_HE)
#define COUNTRY_CHPLAN_ASSIGN_PROTO_EN(_val) , .proto_en = (_val)
#else
#define COUNTRY_CHPLAN_ASSIGN_PROTO_EN(_val)
#endif

#define COUNTRY_CHPLAN_ENT(_alpha2, _chplan, _chplan_6g, _txpwr_lmt_override, _en_11ax, _en_11ac) \
	{.alpha2 = (_alpha2), .chplan = (_chplan) \
		COUNTRY_CHPLAN_ASSIGN_CHPLAN_6G(_chplan_6g) \
		, .edcca_mode_2g_override = RTW_EDCCA_DEF \
		COUNTRY_CHPLAN_ASSIGN_EDCCA_MODE_5G_OVERRIDE(RTW_EDCCA_DEF) \
		COUNTRY_CHPLAN_ASSIGN_EDCCA_MODE_6G_OVERRIDE(RTW_EDCCA_DEF) \
		, .txpwr_lmt_override = TXPWR_LMT_##_txpwr_lmt_override \
		COUNTRY_CHPLAN_ASSIGN_PROTO_EN((_en_11ax ? CHPLAN_PROTO_EN_AX : 0) | (_en_11ac ? CHPLAN_PROTO_EN_AC : 0)) \
	}

static const struct country_chplan world_wide_chplan =
	COUNTRY_CHPLAN_ENT(WORLDWIDE_ALPHA2, RTW_CHPLAN_WORLDWIDE, RTW_CHPLAN_6G_WORLDWIDE, DEF, 1, 1);

#ifdef CONFIG_CUSTOMIZED_COUNTRY_CHPLAN_MAP

#include "../platform/custom_country_chplan.h"

#elif RTW_DEF_MODULE_REGULATORY_CERT

#if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8821AE_HMC_M2) /* 2013 certify */
static const struct country_chplan RTL8821AE_HMC_M2_country_chplan_map[] = {
	COUNTRY_CHPLAN_ENT("AE", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AN", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AR", 0x61, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AU", 0x45, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BA", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BH", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BO", 0x73, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BR", 0x62, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BW", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BY", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CA", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CI", 0x42, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CL", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CN", 0x51, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CO", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CR", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CY", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DO", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DZ", 0x00, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EC", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EG", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ES", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("FI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("FR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GB", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GT", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HK", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HN", 0x32, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ID", 0x3D, 0x00, DEF    , 0, 0),
	COUNTRY_CHPLAN_ENT("IE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IL", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IN", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JM", 0x32, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JO", 0x49, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JP", 0x27, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KE", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KR", 0x28, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KW", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LB", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LV", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MA", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MC", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ME", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MX", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MY", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NG", 0x75, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NI", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NO", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NZ", 0x45, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("OM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PA", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PE", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PG", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PH", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PK", 0x51, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PR", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PY", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("QA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RO", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RU", 0x59, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SG", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SN", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SV", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TH", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TN", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TT", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TW", 0x39, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UA", 0x36, 0x00, DEF    , 0, 0),
	COUNTRY_CHPLAN_ENT("UG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("US", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UY", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("VE", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("VN", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ZA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ZW", 0x26, 0x00, DEF    , 0, 1),
};
#endif

#if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8821AU) /* 2014 certify */
static const struct country_chplan RTL8821AU_country_chplan_map[] = {
	COUNTRY_CHPLAN_ENT("AE", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AR", 0x61, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AU", 0x45, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CA", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CN", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CY", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ES", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("FI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("FR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GB", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HK", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ID", 0x3D, 0x00, DEF    , 0, 0),
	COUNTRY_CHPLAN_ENT("IE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JO", 0x49, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JP", 0x27, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KR", 0x28, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KW", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LV", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MC", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NO", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NZ", 0x45, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RU", 0x59, 0x00, DEF    , 0, 0),
	COUNTRY_CHPLAN_ENT("SA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SG", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TW", 0x39, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UA", 0x36, 0x00, DEF    , 0, 0),
	COUNTRY_CHPLAN_ENT("US", 0x34, 0x00, DEF    , 0, 1),
};
#endif

#if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8812AENF_NGFF) /* 2014 certify */
static const struct country_chplan RTL8812AENF_NGFF_country_chplan_map[] = {
	COUNTRY_CHPLAN_ENT("JP", 0x27, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TW", 0x39, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("US", 0x34, 0x00, DEF    , 0, 1),
};
#endif

#if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8812AEBT_HMC) /* 2013 certify */
static const struct country_chplan RTL8812AEBT_HMC_country_chplan_map[] = {
	COUNTRY_CHPLAN_ENT("AE", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AU", 0x45, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CA", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CN", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CY", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ES", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("FI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("FR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GB", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HK", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JO", 0x49, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JP", 0x27, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KE", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KR", 0x28, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KW", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LV", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MC", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NG", 0x75, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NO", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NZ", 0x45, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("OM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("QA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RU", 0x59, 0x00, DEF    , 0, 0),
	COUNTRY_CHPLAN_ENT("SA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SG", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TW", 0x39, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UA", 0x36, 0x00, DEF    , 0, 0),
	COUNTRY_CHPLAN_ENT("US", 0x34, 0x00, DEF    , 0, 1),
};
#endif

#if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8188EE_HMC_M2) /* 2012 certify */
static const struct country_chplan RTL8188EE_HMC_M2_country_chplan_map[] = {
	COUNTRY_CHPLAN_ENT("AE", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AN", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AR", 0x61, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AU", 0x45, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AW", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BA", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BB", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BF", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BH", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BJ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BN", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BO", 0x73, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BR", 0x62, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BW", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BY", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CA", 0x20, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CF", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CI", 0x42, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CL", 0x2D, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CN", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CO", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CR", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CV", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CY", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DO", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DZ", 0x00, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EC", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EG", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ES", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ET", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("FI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("FR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GA", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GB", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GD", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GN", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GQ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GT", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GW", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HK", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HN", 0x32, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HT", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ID", 0x5D, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IL", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IN", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JM", 0x32, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JO", 0x49, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JP", 0x27, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KE", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KR", 0x28, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KW", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LB", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LV", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MA", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MC", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ME", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ML", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MW", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MX", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MY", 0x63, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NG", 0x75, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NI", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NO", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NP", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NZ", 0x45, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("OM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PA", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PE", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PG", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PH", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PK", 0x51, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PR", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PY", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("QA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RO", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RU", 0x59, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RW", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SC", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SG", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SN", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SV", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TH", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TN", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TT", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TW", 0x39, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("US", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UY", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UZ", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("VC", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("VE", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("VN", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ZA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ZM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ZW", 0x26, 0x00, DEF    , 0, 1),
};
#endif

#if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8723BE_HMC_M2) /* 2013 certify */
static const struct country_chplan RTL8723BE_HMC_M2_country_chplan_map[] = {
	COUNTRY_CHPLAN_ENT("AE", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AN", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AO", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AR", 0x61, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AU", 0x45, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AW", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BA", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BF", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BH", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BJ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BO", 0x73, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BR", 0x62, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BS", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BW", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BY", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CA", 0x20, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CF", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CI", 0x42, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CL", 0x2D, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CN", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CO", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CR", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CV", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CY", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DO", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DZ", 0x00, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EC", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EG", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ES", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ET", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("FI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("FR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GA", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GB", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GD", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GQ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GT", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GW", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HK", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HN", 0x32, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ID", 0x5D, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IL", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IN", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JM", 0x32, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JO", 0x49, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JP", 0x27, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KE", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KR", 0x28, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KW", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LB", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LV", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MA", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MC", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ME", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ML", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MW", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MX", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MY", 0x63, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NG", 0x75, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NI", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NO", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NP", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NZ", 0x45, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("OM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PA", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PE", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PG", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PH", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PK", 0x51, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PR", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PY", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("QA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RO", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RU", 0x59, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RW", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SG", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SN", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SV", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TH", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TN", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TT", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TW", 0x39, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("US", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UY", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UZ", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("VE", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("VN", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ZA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ZM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ZW", 0x26, 0x00, DEF    , 0, 1),
};
#endif

#if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8723BS_NGFF1216) /* 2014 certify */
static const struct country_chplan RTL8723BS_NGFF1216_country_chplan_map[] = {
	COUNTRY_CHPLAN_ENT("AE", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AN", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AO", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AR", 0x61, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AU", 0x45, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BA", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BB", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BH", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BO", 0x73, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BR", 0x62, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BW", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BY", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CA", 0x20, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CI", 0x42, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CL", 0x2D, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CN", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CO", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CR", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CY", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DO", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DZ", 0x00, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EC", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EG", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ES", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("FI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("FR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GB", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GT", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HK", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HN", 0x32, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HT", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ID", 0x5D, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IL", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IN", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JM", 0x32, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JO", 0x49, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JP", 0x27, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KE", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KR", 0x28, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KW", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LB", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LV", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MA", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MC", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ME", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MQ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MX", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MY", 0x63, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NG", 0x75, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NI", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NO", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NP", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NZ", 0x45, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("OM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PA", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PE", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PG", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PH", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PK", 0x51, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PR", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PY", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("QA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RO", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RU", 0x59, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SG", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SN", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SV", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TH", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TJ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TN", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TT", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TW", 0x39, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("US", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UY", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UZ", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("VE", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("VN", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("YE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ZA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ZW", 0x26, 0x00, DEF    , 0, 1),
};
#endif

#if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8192EEBT_HMC_M2) /* 2013 certify */
static const struct country_chplan RTL8192EEBT_HMC_M2_country_chplan_map[] = {
	COUNTRY_CHPLAN_ENT("AE", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AN", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AO", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AR", 0x61, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AU", 0x45, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AW", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BA", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BF", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BH", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BJ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BO", 0x73, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BR", 0x62, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BW", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BY", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CA", 0x20, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CF", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CI", 0x42, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CL", 0x2D, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CN", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CO", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CR", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CV", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CY", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DJ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DO", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DZ", 0x00, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EC", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EG", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EH", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ES", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ET", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("FI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("FR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GA", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GB", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GD", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GF", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GQ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GT", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GW", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HK", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HN", 0x32, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ID", 0x5D, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IL", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IN", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JM", 0x32, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JO", 0x49, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JP", 0x27, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KE", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KR", 0x28, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KW", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LB", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LV", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MA", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MC", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ME", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ML", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MW", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MX", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MY", 0x63, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NG", 0x75, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NI", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NO", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NP", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NZ", 0x45, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("OM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PA", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PE", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PG", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PH", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PK", 0x51, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PR", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PY", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("QA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RO", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RU", 0x59, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RW", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SC", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SG", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SN", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ST", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SV", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TF", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TH", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TN", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TT", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TW", 0x39, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("US", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UY", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UZ", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("VE", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("VN", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("YT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ZA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ZM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ZW", 0x26, 0x00, DEF    , 0, 1),
};
#endif

#if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8723DE_NGFF1630) /* 2016 certify */
static const struct country_chplan RTL8723DE_NGFF1630_country_chplan_map[] = {
	COUNTRY_CHPLAN_ENT("AE", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AN", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AR", 0x61, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AU", 0x45, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BA", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BH", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BO", 0x73, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BR", 0x62, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BY", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CA", 0x2A, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CI", 0x42, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CL", 0x2D, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CN", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CO", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CR", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CY", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DO", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DZ", 0x00, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EC", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EG", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ES", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("FI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("FR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GB", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GT", 0x61, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HK", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HN", 0x32, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ID", 0x5D, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IL", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IN", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JM", 0x32, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JO", 0x49, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JP", 0x27, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KE", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KR", 0x28, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KW", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LB", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LV", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MA", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MC", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ME", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MX", 0x34, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MY", 0x63, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NA", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NG", 0x75, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NI", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NO", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NZ", 0x45, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("OM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PA", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PE", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PG", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PH", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PK", 0x51, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PR", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PY", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("QA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RO", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RU", 0x59, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SG", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SN", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SV", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TH", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TN", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TT", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TW", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("US", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UY", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("VE", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("VN", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ZA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ZW", 0x26, 0x00, DEF    , 0, 1),
};
#endif

#if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8822BE) /* 2016 certify */
static const struct country_chplan RTL8822BE_country_chplan_map[] = {
	COUNTRY_CHPLAN_ENT("AE", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AN", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AO", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AR", 0x61, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AU", 0x45, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BA", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BB", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BF", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BH", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BJ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BM", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BN", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BO", 0x73, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BR", 0x62, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BS", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BW", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BY", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CA", 0x2B, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CF", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CI", 0x42, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CL", 0x2D, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CN", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CO", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CR", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CV", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CY", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DJ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DO", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DZ", 0x00, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EC", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EG", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EH", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ES", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("FI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("FJ", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("FR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GA", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GB", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GN", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GP", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GQ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GT", 0x61, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GU", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GW", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HK", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HN", 0x32, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HT", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ID", 0x3D, 0x00, DEF    , 0, 0),
	COUNTRY_CHPLAN_ENT("IE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IL", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IN", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JM", 0x32, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JO", 0x49, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JP", 0x27, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KE", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KR", 0x28, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KW", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LB", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LV", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MA", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MC", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ME", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ML", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MO", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MQ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MW", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MX", 0x4D, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MY", 0x63, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NA", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NG", 0x75, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NI", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NO", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NP", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NZ", 0x45, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("OM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PA", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PE", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PG", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PH", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PK", 0x51, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PR", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PY", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("QA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RO", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RU", 0x59, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SC", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SG", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SN", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ST", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SV", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TF", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TH", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TJ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TN", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TT", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TW", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UA", 0x35, 0x00, UKRAINE, 0, 1),
	COUNTRY_CHPLAN_ENT("UG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("US", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UY", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UZ", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("VE", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("VN", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("YT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ZA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ZM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ZW", 0x26, 0x00, DEF    , 0, 1),
};
#endif

#if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8821CE) /* 2016 certify */
static const struct country_chplan RTL8821CE_country_chplan_map[] = {
	COUNTRY_CHPLAN_ENT("AE", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AN", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AO", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AR", 0x61, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AU", 0x45, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BA", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BB", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BF", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BH", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BJ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BM", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BN", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BO", 0x73, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BR", 0x62, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BS", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BW", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BY", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CA", 0x2B, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CF", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CI", 0x42, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CL", 0x2D, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CN", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CO", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CR", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CV", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CY", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DJ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DO", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DZ", 0x00, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EC", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EG", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EH", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ES", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ET", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("FI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("FJ", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("FR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GA", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GB", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GN", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GP", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GQ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GT", 0x61, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GU", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GW", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HK", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HN", 0x32, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HT", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ID", 0x3D, 0x00, DEF    , 0, 0),
	COUNTRY_CHPLAN_ENT("IE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IL", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IN", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JM", 0x32, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JO", 0x49, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JP", 0x27, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KE", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KR", 0x28, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KW", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LB", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LV", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MA", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MC", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ME", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ML", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MO", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MQ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MW", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MX", 0x4D, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MY", 0x63, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NA", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NG", 0x75, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NI", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NO", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NP", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NZ", 0x45, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("OM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PA", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PE", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PG", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PH", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PK", 0x51, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PR", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PY", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("QA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RO", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RU", 0x59, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SC", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SG", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SN", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ST", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SV", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TF", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TH", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TJ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TN", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TW", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UA", 0x35, 0x00, UKRAINE, 0, 1),
	COUNTRY_CHPLAN_ENT("UG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("US", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UY", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UZ", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("VE", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("VN", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("YT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ZA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ZM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ZW", 0x26, 0x00, DEF    , 0, 1),
};
#endif

#if (RTW_DEF_MODULE_REGULATORY_CERT & RTW_MODULE_RTL8822CE) /* 2018 certify */
static const struct country_chplan RTL8822CE_country_chplan_map[] = {
	COUNTRY_CHPLAN_ENT("AE", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AN", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AO", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AR", 0x61, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AU", 0x45, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AW", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("AZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BA", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BB", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BF", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BH", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BJ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BM", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BN", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BO", 0x73, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BR", 0x62, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BS", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BW", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("BY", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CA", 0x2B, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CF", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CI", 0x42, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CL", 0x2D, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CN", 0x48, 0x00, CN     , 0, 1),
	COUNTRY_CHPLAN_ENT("CO", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CR", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CV", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CY", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("CZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DJ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DO", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("DZ", 0x00, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EC", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EG", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("EH", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ES", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ET", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("FI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("FJ", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("FR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GA", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GB", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GN", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GP", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GQ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GT", 0x61, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GU", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("GW", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HK", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HN", 0x32, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HT", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("HU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IL", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IN", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("IT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JM", 0x32, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JO", 0x49, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("JP", 0x27, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KE", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KH", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KR", 0x4B, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KW", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("KZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LB", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("LV", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MA", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MC", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ME", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ML", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MO", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MQ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MU", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MW", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MX", 0x4D, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MY", 0x63, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("MZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NA", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NG", 0x75, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NI", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NO", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NP", 0x48, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("NZ", 0x45, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("OM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PA", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PE", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PG", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PH", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PK", 0x51, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PR", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("PY", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("QA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RO", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RS", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("RU", 0x59, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SC", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SE", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SG", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SI", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SK", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SL", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SN", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ST", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SV", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("SZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TD", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TF", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TH", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TJ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TN", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TR", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TW", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("TZ", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UA", 0x35, 0x00, UKRAINE, 0, 1),
	COUNTRY_CHPLAN_ENT("UG", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("US", 0x76, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UY", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("UZ", 0x47, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("VE", 0x30, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("VN", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("YT", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ZA", 0x35, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ZM", 0x26, 0x00, DEF    , 0, 1),
	COUNTRY_CHPLAN_ENT("ZW", 0x26, 0x00, DEF    , 0, 1),
};
#endif

/**
 * rtw_def_module_country_chplan_map -
 * @hal_map: returned map
 * @return: size of map
 */
static u16 rtw_def_module_country_chplan_map(const struct country_chplan **hal_map)
{
	u16 hal_map_sz = 0;

	/* TODO: runtime selection for multi driver */
#if (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8821AE_HMC_M2)
	*hal_map = RTL8821AE_HMC_M2_country_chplan_map;
	hal_map_sz = sizeof(RTL8821AE_HMC_M2_country_chplan_map) / sizeof(struct country_chplan);
#elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8821AU)
	*hal_map = RTL8821AU_country_chplan_map;
	hal_map_sz = sizeof(RTL8821AU_country_chplan_map) / sizeof(struct country_chplan);
#elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8812AENF_NGFF)
	*hal_map = RTL8812AENF_NGFF_country_chplan_map;
	hal_map_sz = sizeof(RTL8812AENF_NGFF_country_chplan_map) / sizeof(struct country_chplan);
#elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8812AEBT_HMC)
	*hal_map = RTL8812AEBT_HMC_country_chplan_map;
	hal_map_sz = sizeof(RTL8812AEBT_HMC_country_chplan_map) / sizeof(struct country_chplan);
#elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8188EE_HMC_M2)
	*hal_map = RTL8188EE_HMC_M2_country_chplan_map;
	hal_map_sz = sizeof(RTL8188EE_HMC_M2_country_chplan_map) / sizeof(struct country_chplan);
#elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8723BE_HMC_M2)
	*hal_map = RTL8723BE_HMC_M2_country_chplan_map;
	hal_map_sz = sizeof(RTL8723BE_HMC_M2_country_chplan_map) / sizeof(struct country_chplan);
#elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8723BS_NGFF1216)
	*hal_map = RTL8723BS_NGFF1216_country_chplan_map;
	hal_map_sz = sizeof(RTL8723BS_NGFF1216_country_chplan_map) / sizeof(struct country_chplan);
#elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8192EEBT_HMC_M2)
	*hal_map = RTL8192EEBT_HMC_M2_country_chplan_map;
	hal_map_sz = sizeof(RTL8192EEBT_HMC_M2_country_chplan_map) / sizeof(struct country_chplan);
#elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8723DE_NGFF1630)
	*hal_map = RTL8723DE_NGFF1630_country_chplan_map;
	hal_map_sz = sizeof(RTL8723DE_NGFF1630_country_chplan_map) / sizeof(struct country_chplan);
#elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8822BE)
	*hal_map = RTL8822BE_country_chplan_map;
	hal_map_sz = sizeof(RTL8822BE_country_chplan_map) / sizeof(struct country_chplan);
#elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8821CE)
	*hal_map = RTL8821CE_country_chplan_map;
	hal_map_sz = sizeof(RTL8821CE_country_chplan_map) / sizeof(struct country_chplan);
#elif (RTW_DEF_MODULE_REGULATORY_CERT == RTW_MODULE_RTL8822CE)
	*hal_map = RTL8822CE_country_chplan_map;
	hal_map_sz = sizeof(RTL8822CE_country_chplan_map) / sizeof(struct country_chplan);
#endif

	return hal_map_sz;
}
#else

static const struct country_chplan country_chplan_map[] = {
	COUNTRY_CHPLAN_ENT("AD", 0x3A, 0x00, DEF    , 1, 1), /* Andorra */
	COUNTRY_CHPLAN_ENT("AE", 0x5E, 0x00, DEF    , 1, 1), /* United Arab Emirates */
	COUNTRY_CHPLAN_ENT("AF", 0x42, 0x00, DEF    , 1, 1), /* Afghanistan */
	COUNTRY_CHPLAN_ENT("AG", 0x76, 0x00, DEF    , 1, 1), /* Antigua & Barbuda */
	COUNTRY_CHPLAN_ENT("AI", 0x5E, 0x00, DEF    , 1, 1), /* Anguilla(UK) */
	COUNTRY_CHPLAN_ENT("AL", 0x5E, 0x00, DEF    , 1, 1), /* Albania */
	COUNTRY_CHPLAN_ENT("AM", 0x5E, 0x00, DEF    , 1, 1), /* Armenia */
	COUNTRY_CHPLAN_ENT("AN", 0x76, 0x00, DEF    , 1, 1), /* Netherlands Antilles */
	COUNTRY_CHPLAN_ENT("AO", 0x5E, 0x00, DEF    , 1, 1), /* Angola */
	COUNTRY_CHPLAN_ENT("AQ", 0x26, 0x00, DEF    , 1, 1), /* Antarctica */
	COUNTRY_CHPLAN_ENT("AR", 0x4D, 0x00, DEF    , 1, 1), /* Argentina */
	COUNTRY_CHPLAN_ENT("AS", 0x76, 0x00, DEF    , 1, 1), /* American Samoa */
	COUNTRY_CHPLAN_ENT("AT", 0x5E, 0x00, DEF    , 1, 1), /* Austria */
	COUNTRY_CHPLAN_ENT("AU", 0x03, 0x00, DEF    , 1, 1), /* Australia */
	COUNTRY_CHPLAN_ENT("AW", 0x76, 0x00, DEF    , 1, 1), /* Aruba */
	COUNTRY_CHPLAN_ENT("AZ", 0x5E, 0x00, DEF    , 1, 1), /* Azerbaijan */
	COUNTRY_CHPLAN_ENT("BA", 0x5E, 0x00, DEF    , 1, 1), /* Bosnia & Herzegovina */
	COUNTRY_CHPLAN_ENT("BB", 0x76, 0x00, DEF    , 1, 1), /* Barbados */
	COUNTRY_CHPLAN_ENT("BD", 0x5E, 0x00, DEF    , 1, 1), /* Bangladesh */
	COUNTRY_CHPLAN_ENT("BE", 0x5E, 0x00, DEF    , 1, 1), /* Belgium */
	COUNTRY_CHPLAN_ENT("BF", 0x5E, 0x00, DEF    , 1, 1), /* Burkina Faso */
	COUNTRY_CHPLAN_ENT("BG", 0x5E, 0x00, DEF    , 1, 1), /* Bulgaria */
	COUNTRY_CHPLAN_ENT("BH", 0x06, 0x00, DEF    , 1, 1), /* Bahrain */
	COUNTRY_CHPLAN_ENT("BI", 0x3A, 0x00, DEF    , 1, 1), /* Burundi */
	COUNTRY_CHPLAN_ENT("BJ", 0x3A, 0x00, DEF    , 1, 1), /* Benin */
	COUNTRY_CHPLAN_ENT("BM", 0x76, 0x00, DEF    , 1, 1), /* Bermuda (UK) */
	COUNTRY_CHPLAN_ENT("BN", 0x06, 0x00, DEF    , 1, 1), /* Brunei */
	COUNTRY_CHPLAN_ENT("BO", 0x61, 0x00, DEF    , 1, 1), /* Bolivia */
	COUNTRY_CHPLAN_ENT("BR", 0x62, 0x00, DEF    , 1, 1), /* Brazil */
	COUNTRY_CHPLAN_ENT("BS", 0x76, 0x00, DEF    , 1, 1), /* Bahamas */
	COUNTRY_CHPLAN_ENT("BT", 0x5E, 0x00, DEF    , 1, 1), /* Bhutan */
	COUNTRY_CHPLAN_ENT("BV", 0x5E, 0x00, DEF    , 1, 1), /* Bouvet Island (Norway) */
	COUNTRY_CHPLAN_ENT("BW", 0x5E, 0x00, DEF    , 1, 1), /* Botswana */
	COUNTRY_CHPLAN_ENT("BY", 0x08, 0x00, DEF    , 0, 1), /* Belarus */
	COUNTRY_CHPLAN_ENT("BZ", 0x76, 0x00, DEF    , 1, 1), /* Belize */
	COUNTRY_CHPLAN_ENT("CA", 0x2B, 0x00, DEF    , 1, 1), /* Canada */
	COUNTRY_CHPLAN_ENT("CC", 0x3A, 0x00, DEF    , 1, 1), /* Cocos (Keeling) Islands (Australia) */
	COUNTRY_CHPLAN_ENT("CD", 0x3A, 0x00, DEF    , 1, 1), /* Congo, Republic of the */
	COUNTRY_CHPLAN_ENT("CF", 0x3A, 0x00, DEF    , 1, 1), /* Central African Republic */
	COUNTRY_CHPLAN_ENT("CG", 0x3A, 0x00, DEF    , 1, 1), /* Congo, Democratic Republic of the. Zaire */
	COUNTRY_CHPLAN_ENT("CH", 0x5E, 0x00, DEF    , 1, 1), /* Switzerland */
	COUNTRY_CHPLAN_ENT("CI", 0x42, 0x00, DEF    , 1, 1), /* Cote d'Ivoire */
	COUNTRY_CHPLAN_ENT("CK", 0x5E, 0x00, DEF    , 1, 1), /* Cook Islands */
	COUNTRY_CHPLAN_ENT("CL", 0x76, 0x00, CHILE  , 1, 1), /* Chile */
	COUNTRY_CHPLAN_ENT("CM", 0x5E, 0x00, DEF    , 1, 1), /* Cameroon */
	COUNTRY_CHPLAN_ENT("CN", 0x06, 0x00, CN     , 1, 1), /* China */
	COUNTRY_CHPLAN_ENT("CO", 0x76, 0x00, DEF    , 1, 1), /* Colombia */
	COUNTRY_CHPLAN_ENT("CR", 0x76, 0x00, DEF    , 1, 1), /* Costa Rica */
	COUNTRY_CHPLAN_ENT("CV", 0x5E, 0x00, DEF    , 1, 1), /* Cape Verde */
	COUNTRY_CHPLAN_ENT("CX", 0x03, 0x00, DEF    , 1, 1), /* Christmas Island (Australia) */
	COUNTRY_CHPLAN_ENT("CY", 0x5E, 0x00, DEF    , 1, 1), /* Cyprus */
	COUNTRY_CHPLAN_ENT("CZ", 0x5E, 0x00, DEF    , 1, 1), /* Czech Republic */
	COUNTRY_CHPLAN_ENT("DE", 0x5E, 0x00, DEF    , 1, 1), /* Germany */
	COUNTRY_CHPLAN_ENT("DJ", 0x3A, 0x00, DEF    , 1, 1), /* Djibouti */
	COUNTRY_CHPLAN_ENT("DK", 0x5E, 0x00, DEF    , 1, 1), /* Denmark */
	COUNTRY_CHPLAN_ENT("DM", 0x76, 0x00, DEF    , 1, 1), /* Dominica */
	COUNTRY_CHPLAN_ENT("DO", 0x76, 0x00, DEF    , 1, 1), /* Dominican Republic */
	COUNTRY_CHPLAN_ENT("DZ", 0x00, 0x00, DEF    , 1, 1), /* Algeria */
	COUNTRY_CHPLAN_ENT("EC", 0x76, 0x00, DEF    , 1, 1), /* Ecuador */
	COUNTRY_CHPLAN_ENT("EE", 0x5E, 0x00, DEF    , 1, 1), /* Estonia */
	COUNTRY_CHPLAN_ENT("EG", 0x3C, 0x00, DEF    , 1, 1), /* Egypt */
	COUNTRY_CHPLAN_ENT("EH", 0x3C, 0x00, DEF    , 1, 1), /* Western Sahara */
	COUNTRY_CHPLAN_ENT("ER", 0x3A, 0x00, DEF    , 1, 1), /* Eritrea */
	COUNTRY_CHPLAN_ENT("ES", 0x5E, 0x00, DEF    , 1, 1), /* Spain, Canary Islands, Ceuta, Melilla */
	COUNTRY_CHPLAN_ENT("ET", 0x3A, 0x00, DEF    , 1, 1), /* Ethiopia */
	COUNTRY_CHPLAN_ENT("FI", 0x5E, 0x00, DEF    , 1, 1), /* Finland */
	COUNTRY_CHPLAN_ENT("FJ", 0x76, 0x00, DEF    , 1, 1), /* Fiji */
	COUNTRY_CHPLAN_ENT("FK", 0x3A, 0x00, DEF    , 1, 1), /* Falkland Islands (Islas Malvinas) (UK) */
	COUNTRY_CHPLAN_ENT("FM", 0x76, 0x00, DEF    , 1, 1), /* Micronesia, Federated States of (USA) */
	COUNTRY_CHPLAN_ENT("FO", 0x3A, 0x00, DEF    , 1, 1), /* Faroe Islands (Denmark) */
	COUNTRY_CHPLAN_ENT("FR", 0x5E, 0x00, DEF    , 1, 1), /* France */
	COUNTRY_CHPLAN_ENT("GA", 0x5E, 0x00, DEF    , 1, 1), /* Gabon */
	COUNTRY_CHPLAN_ENT("GB", 0x5E, 0x00, DEF    , 1, 1), /* Great Britain (United Kingdom; England) */
	COUNTRY_CHPLAN_ENT("GD", 0x76, 0x00, DEF    , 1, 1), /* Grenada */
	COUNTRY_CHPLAN_ENT("GE", 0x5E, 0x00, DEF    , 1, 1), /* Georgia */
	COUNTRY_CHPLAN_ENT("GF", 0x3A, 0x00, DEF    , 1, 1), /* French Guiana */
	COUNTRY_CHPLAN_ENT("GG", 0x5E, 0x00, DEF    , 1, 1), /* Guernsey (UK) */
	COUNTRY_CHPLAN_ENT("GH", 0x5E, 0x00, DEF    , 1, 1), /* Ghana */
	COUNTRY_CHPLAN_ENT("GI", 0x3A, 0x00, DEF    , 1, 1), /* Gibraltar (UK) */
	COUNTRY_CHPLAN_ENT("GL", 0x5E, 0x00, DEF    , 1, 1), /* Greenland (Denmark) */
	COUNTRY_CHPLAN_ENT("GM", 0x3A, 0x00, DEF    , 1, 1), /* Gambia */
	COUNTRY_CHPLAN_ENT("GN", 0x3A, 0x00, DEF    , 1, 1), /* Guinea */
	COUNTRY_CHPLAN_ENT("GP", 0x3A, 0x00, DEF    , 1, 1), /* Guadeloupe (France) */
	COUNTRY_CHPLAN_ENT("GQ", 0x5E, 0x00, DEF    , 1, 1), /* Equatorial Guinea */
	COUNTRY_CHPLAN_ENT("GR", 0x5E, 0x00, DEF    , 1, 1), /* Greece */
	COUNTRY_CHPLAN_ENT("GS", 0x3A, 0x00, DEF    , 1, 1), /* South Georgia and the Sandwich Islands (UK) */
	COUNTRY_CHPLAN_ENT("GT", 0x76, 0x00, DEF    , 1, 1), /* Guatemala */
	COUNTRY_CHPLAN_ENT("GU", 0x76, 0x00, DEF    , 1, 1), /* Guam (USA) */
	COUNTRY_CHPLAN_ENT("GW", 0x3A, 0x00, DEF    , 1, 1), /* Guinea-Bissau */
	COUNTRY_CHPLAN_ENT("GY", 0x44, 0x00, DEF    , 1, 1), /* Guyana */
	COUNTRY_CHPLAN_ENT("HK", 0x5E, 0x00, DEF    , 1, 1), /* Hong Kong */
	COUNTRY_CHPLAN_ENT("HM", 0x03, 0x00, DEF    , 1, 1), /* Heard and McDonald Islands (Australia) */
	COUNTRY_CHPLAN_ENT("HN", 0x32, 0x00, DEF    , 1, 1), /* Honduras */
	COUNTRY_CHPLAN_ENT("HR", 0x5E, 0x00, DEF    , 1, 1), /* Croatia */
	COUNTRY_CHPLAN_ENT("HT", 0x76, 0x00, DEF    , 0, 1), /* Haiti */
	COUNTRY_CHPLAN_ENT("HU", 0x5E, 0x00, DEF    , 1, 1), /* Hungary */
	COUNTRY_CHPLAN_ENT("ID", 0x5D, 0x00, DEF    , 1, 1), /* Indonesia */
	COUNTRY_CHPLAN_ENT("IE", 0x5E, 0x00, DEF    , 1, 1), /* Ireland */
	COUNTRY_CHPLAN_ENT("IL", 0x5E, 0x00, DEF    , 1, 1), /* Israel */
	COUNTRY_CHPLAN_ENT("IM", 0x3A, 0x00, DEF    , 1, 1), /* Isle of Man (UK) */
	COUNTRY_CHPLAN_ENT("IN", 0x06, 0x00, DEF    , 1, 1), /* India */
	COUNTRY_CHPLAN_ENT("IO", 0x3A, 0x00, DEF    , 1, 1), /* British Indian Ocean Territory (UK) */
	COUNTRY_CHPLAN_ENT("IQ", 0x05, 0x00, DEF    , 1, 1), /* Iraq */
	COUNTRY_CHPLAN_ENT("IR", 0x3A, 0x00, DEF    , 0, 0), /* Iran */
	COUNTRY_CHPLAN_ENT("IS", 0x5E, 0x00, DEF    , 1, 1), /* Iceland */
	COUNTRY_CHPLAN_ENT("IT", 0x5E, 0x00, DEF    , 1, 1), /* Italy */
	COUNTRY_CHPLAN_ENT("JE", 0x3A, 0x00, DEF    , 1, 1), /* Jersey (UK) */
	COUNTRY_CHPLAN_ENT("JM", 0x76, 0x00, DEF    , 1, 1), /* Jamaica */
	COUNTRY_CHPLAN_ENT("JO", 0x05, 0x00, DEF    , 1, 1), /* Jordan */
	COUNTRY_CHPLAN_ENT("JP", 0x7D, 0x00, DEF    , 1, 1), /* Japan- Telec */
	COUNTRY_CHPLAN_ENT("KE", 0x5E, 0x00, DEF    , 1, 1), /* Kenya */
	COUNTRY_CHPLAN_ENT("KG", 0x5E, 0x00, DEF    , 1, 1), /* Kyrgyzstan */
	COUNTRY_CHPLAN_ENT("KH", 0x5E, 0x00, DEF    , 1, 1), /* Cambodia */
	COUNTRY_CHPLAN_ENT("KI", 0x5E, 0x00, DEF    , 1, 1), /* Kiribati */
	COUNTRY_CHPLAN_ENT("KM", 0x3A, 0x00, DEF    , 1, 1), /* Comoros */
	COUNTRY_CHPLAN_ENT("KN", 0x76, 0x00, DEF    , 1, 1), /* Saint Kitts and Nevis */
	COUNTRY_CHPLAN_ENT("KR", 0x4B, 0x00, DEF    , 1, 1), /* South Korea */
	COUNTRY_CHPLAN_ENT("KW", 0x5E, 0x00, DEF    , 1, 1), /* Kuwait */
	COUNTRY_CHPLAN_ENT("KY", 0x76, 0x00, DEF    , 1, 1), /* Cayman Islands (UK) */
	COUNTRY_CHPLAN_ENT("KZ", 0x5E, 0x00, DEF    , 1, 1), /* Kazakhstan */
	COUNTRY_CHPLAN_ENT("LA", 0x5E, 0x00, DEF    , 1, 1), /* Laos */
	COUNTRY_CHPLAN_ENT("LB", 0x5E, 0x00, DEF    , 1, 1), /* Lebanon */
	COUNTRY_CHPLAN_ENT("LC", 0x76, 0x00, DEF    , 1, 1), /* Saint Lucia */
	COUNTRY_CHPLAN_ENT("LI", 0x5E, 0x00, DEF    , 1, 1), /* Liechtenstein */
	COUNTRY_CHPLAN_ENT("LK", 0x5E, 0x00, DEF    , 1, 1), /* Sri Lanka */
	COUNTRY_CHPLAN_ENT("LR", 0x5E, 0x00, DEF    , 1, 1), /* Liberia */
	COUNTRY_CHPLAN_ENT("LS", 0x5E, 0x00, DEF    , 1, 1), /* Lesotho */
	COUNTRY_CHPLAN_ENT("LT", 0x5E, 0x00, DEF    , 1, 1), /* Lithuania */
	COUNTRY_CHPLAN_ENT("LU", 0x5E, 0x00, DEF    , 1, 1), /* Luxembourg */
	COUNTRY_CHPLAN_ENT("LV", 0x5E, 0x00, DEF    , 1, 1), /* Latvia */
	COUNTRY_CHPLAN_ENT("LY", 0x5E, 0x00, DEF    , 1, 1), /* Libya */
	COUNTRY_CHPLAN_ENT("MA", 0x3C, 0x00, DEF    , 1, 1), /* Morocco */
	COUNTRY_CHPLAN_ENT("MC", 0x5E, 0x00, DEF    , 1, 1), /* Monaco */
	COUNTRY_CHPLAN_ENT("MD", 0x5E, 0x00, DEF    , 1, 1), /* Moldova */
	COUNTRY_CHPLAN_ENT("ME", 0x3A, 0x00, DEF    , 1, 1), /* Montenegro */
	COUNTRY_CHPLAN_ENT("MF", 0x76, 0x00, DEF    , 1, 1), /* Saint Martin */
	COUNTRY_CHPLAN_ENT("MG", 0x5E, 0x00, DEF    , 1, 1), /* Madagascar */
	COUNTRY_CHPLAN_ENT("MH", 0x76, 0x00, DEF    , 1, 1), /* Marshall Islands (USA) */
	COUNTRY_CHPLAN_ENT("MK", 0x3A, 0x00, DEF    , 1, 1), /* Republic of Macedonia (FYROM) */
	COUNTRY_CHPLAN_ENT("ML", 0x5E, 0x00, DEF    , 1, 1), /* Mali */
	COUNTRY_CHPLAN_ENT("MM", 0x3A, 0x00, DEF    , 1, 1), /* Burma (Myanmar) */
	COUNTRY_CHPLAN_ENT("MN", 0x5E, 0x00, DEF    , 1, 1), /* Mongolia */
	COUNTRY_CHPLAN_ENT("MO", 0x5E, 0x00, DEF    , 1, 1), /* Macau */
	COUNTRY_CHPLAN_ENT("MP", 0x76, 0x00, DEF    , 1, 1), /* Northern Mariana Islands (USA) */
	COUNTRY_CHPLAN_ENT("MQ", 0x3A, 0x00, DEF    , 1, 1), /* Martinique (France) */
	COUNTRY_CHPLAN_ENT("MR", 0x5E, 0x00, DEF    , 1, 1), /* Mauritania */
	COUNTRY_CHPLAN_ENT("MS", 0x3A, 0x00, DEF    , 1, 1), /* Montserrat (UK) */
	COUNTRY_CHPLAN_ENT("MT", 0x5E, 0x00, DEF    , 1, 1), /* Malta */
	COUNTRY_CHPLAN_ENT("MU", 0x5E, 0x00, DEF    , 1, 1), /* Mauritius */
	COUNTRY_CHPLAN_ENT("MV", 0x3C, 0x00, DEF    , 1, 1), /* Maldives */
	COUNTRY_CHPLAN_ENT("MW", 0x5E, 0x00, DEF    , 1, 1), /* Malawi */
	COUNTRY_CHPLAN_ENT("MX", 0x4D, 0x00, DEF    , 1, 1), /* Mexico */
	COUNTRY_CHPLAN_ENT("MY", 0x07, 0x00, DEF    , 1, 1), /* Malaysia */
	COUNTRY_CHPLAN_ENT("MZ", 0x5E, 0x00, DEF    , 1, 1), /* Mozambique */
	COUNTRY_CHPLAN_ENT("NA", 0x5E, 0x00, DEF    , 1, 1), /* Namibia */
	COUNTRY_CHPLAN_ENT("NC", 0x3A, 0x00, DEF    , 1, 1), /* New Caledonia */
	COUNTRY_CHPLAN_ENT("NE", 0x5E, 0x00, DEF    , 1, 1), /* Niger */
	COUNTRY_CHPLAN_ENT("NF", 0x03, 0x00, DEF    , 1, 1), /* Norfolk Island (Australia) */
	COUNTRY_CHPLAN_ENT("NG", 0x75, 0x00, DEF    , 1, 1), /* Nigeria */
	COUNTRY_CHPLAN_ENT("NI", 0x76, 0x00, DEF    , 1, 1), /* Nicaragua */
	COUNTRY_CHPLAN_ENT("NL", 0x5E, 0x00, DEF    , 1, 1), /* Netherlands */
	COUNTRY_CHPLAN_ENT("NO", 0x5E, 0x00, DEF    , 1, 1), /* Norway */
	COUNTRY_CHPLAN_ENT("NP", 0x06, 0x00, DEF    , 1, 1), /* Nepal */
	COUNTRY_CHPLAN_ENT("NR", 0x3A, 0x00, DEF    , 1, 1), /* Nauru */
	COUNTRY_CHPLAN_ENT("NU", 0x03, 0x00, DEF    , 1, 1), /* Niue */
	COUNTRY_CHPLAN_ENT("NZ", 0x03, 0x00, DEF    , 1, 1), /* New Zealand */
	COUNTRY_CHPLAN_ENT("OM", 0x5E, 0x00, DEF    , 1, 1), /* Oman */
	COUNTRY_CHPLAN_ENT("PA", 0x76, 0x00, DEF    , 1, 1), /* Panama */
	COUNTRY_CHPLAN_ENT("PE", 0x76, 0x00, DEF    , 1, 1), /* Peru */
	COUNTRY_CHPLAN_ENT("PF", 0x3A, 0x00, DEF    , 1, 1), /* French Polynesia (France) */
	COUNTRY_CHPLAN_ENT("PG", 0x5E, 0x00, DEF    , 1, 1), /* Papua New Guinea */
	COUNTRY_CHPLAN_ENT("PH", 0x5E, 0x00, DEF    , 1, 1), /* Philippines */
	COUNTRY_CHPLAN_ENT("PK", 0x51, 0x00, DEF    , 1, 1), /* Pakistan */
	COUNTRY_CHPLAN_ENT("PL", 0x5E, 0x00, DEF    , 1, 1), /* Poland */
	COUNTRY_CHPLAN_ENT("PM", 0x3A, 0x00, DEF    , 1, 1), /* Saint Pierre and Miquelon (France) */
	COUNTRY_CHPLAN_ENT("PR", 0x76, 0x00, DEF    , 1, 1), /* Puerto Rico */
	COUNTRY_CHPLAN_ENT("PS", 0x5E, 0x00, DEF    , 1, 1), /* Palestine */
	COUNTRY_CHPLAN_ENT("PT", 0x5E, 0x00, DEF    , 1, 1), /* Portugal */
	COUNTRY_CHPLAN_ENT("PW", 0x76, 0x00, DEF    , 1, 1), /* Palau */
	COUNTRY_CHPLAN_ENT("PY", 0x76, 0x00, DEF    , 1, 1), /* Paraguay */
	COUNTRY_CHPLAN_ENT("QA", 0x5E, 0x00, QATAR  , 1, 1), /* Qatar */
	COUNTRY_CHPLAN_ENT("RE", 0x3A, 0x00, DEF    , 1, 1), /* Reunion (France) */
	COUNTRY_CHPLAN_ENT("RO", 0x5E, 0x00, DEF    , 1, 1), /* Romania */
	COUNTRY_CHPLAN_ENT("RS", 0x5E, 0x00, DEF    , 1, 1), /* Serbia */
	COUNTRY_CHPLAN_ENT("RU", 0x09, 0x00, DEF    , 1, 1), /* Russia(fac/gost), Kaliningrad */
	COUNTRY_CHPLAN_ENT("RW", 0x5E, 0x00, DEF    , 1, 1), /* Rwanda */
	COUNTRY_CHPLAN_ENT("SA", 0x5E, 0x00, DEF    , 1, 1), /* Saudi Arabia */
	COUNTRY_CHPLAN_ENT("SB", 0x3A, 0x00, DEF    , 1, 1), /* Solomon Islands */
	COUNTRY_CHPLAN_ENT("SC", 0x76, 0x00, DEF    , 1, 1), /* Seychelles */
	COUNTRY_CHPLAN_ENT("SE", 0x5E, 0x00, DEF    , 1, 1), /* Sweden */
	COUNTRY_CHPLAN_ENT("SG", 0x5E, 0x00, DEF    , 1, 1), /* Singapore */
	COUNTRY_CHPLAN_ENT("SH", 0x3A, 0x00, DEF    , 1, 1), /* Saint Helena (UK) */
	COUNTRY_CHPLAN_ENT("SI", 0x5E, 0x00, DEF    , 1, 1), /* Slovenia */
	COUNTRY_CHPLAN_ENT("SJ", 0x3A, 0x00, DEF    , 1, 1), /* Svalbard (Norway) */
	COUNTRY_CHPLAN_ENT("SK", 0x5E, 0x00, DEF    , 1, 1), /* Slovakia */
	COUNTRY_CHPLAN_ENT("SL", 0x5E, 0x00, DEF    , 1, 1), /* Sierra Leone */
	COUNTRY_CHPLAN_ENT("SM", 0x3A, 0x00, DEF    , 1, 1), /* San Marino */
	COUNTRY_CHPLAN_ENT("SN", 0x3A, 0x00, DEF    , 1, 1), /* Senegal */
	COUNTRY_CHPLAN_ENT("SO", 0x3A, 0x00, DEF    , 1, 1), /* Somalia */
	COUNTRY_CHPLAN_ENT("SR", 0x74, 0x00, DEF    , 1, 1), /* Suriname */
	COUNTRY_CHPLAN_ENT("ST", 0x76, 0x00, DEF    , 1, 1), /* Sao Tome and Principe */
	COUNTRY_CHPLAN_ENT("SV", 0x76, 0x00, DEF    , 1, 1), /* El Salvador */
	COUNTRY_CHPLAN_ENT("SX", 0x76, 0x00, DEF    , 1, 1), /* Sint Marteen */
	COUNTRY_CHPLAN_ENT("SZ", 0x5E, 0x00, DEF    , 1, 1), /* Swaziland */
	COUNTRY_CHPLAN_ENT("TC", 0x3A, 0x00, DEF    , 1, 1), /* Turks and Caicos Islands (UK) */
	COUNTRY_CHPLAN_ENT("TD", 0x3A, 0x00, DEF    , 1, 1), /* Chad */
	COUNTRY_CHPLAN_ENT("TF", 0x3A, 0x00, DEF    , 1, 1), /* French Southern and Antarctic Lands (FR Southern Territories) */
	COUNTRY_CHPLAN_ENT("TG", 0x5E, 0x00, DEF    , 1, 1), /* Togo */
	COUNTRY_CHPLAN_ENT("TH", 0x5E, 0x00, DEF    , 1, 1), /* Thailand */
	COUNTRY_CHPLAN_ENT("TJ", 0x5E, 0x00, DEF    , 1, 1), /* Tajikistan */
	COUNTRY_CHPLAN_ENT("TK", 0x03, 0x00, DEF    , 1, 1), /* Tokelau */
	COUNTRY_CHPLAN_ENT("TM", 0x3A, 0x00, DEF    , 1, 1), /* Turkmenistan */
	COUNTRY_CHPLAN_ENT("TN", 0x04, 0x00, DEF    , 1, 1), /* Tunisia */
	COUNTRY_CHPLAN_ENT("TO", 0x3A, 0x00, DEF    , 1, 1), /* Tonga */
	COUNTRY_CHPLAN_ENT("TR", 0x5E, 0x00, DEF    , 1, 1), /* Turkey, Northern Cyprus */
	COUNTRY_CHPLAN_ENT("TT", 0x76, 0x00, DEF    , 1, 1), /* Trinidad & Tobago */
	COUNTRY_CHPLAN_ENT("TV", 0x21, 0x00, DEF    , 0, 0), /* Tuvalu */
	COUNTRY_CHPLAN_ENT("TW", 0x76, 0x00, DEF    , 1, 1), /* Taiwan */
	COUNTRY_CHPLAN_ENT("TZ", 0x5E, 0x00, DEF    , 1, 1), /* Tanzania */
	COUNTRY_CHPLAN_ENT("UA", 0x5E, 0x00, UKRAINE, 1, 1), /* Ukraine */
	COUNTRY_CHPLAN_ENT("UG", 0x3A, 0x00, DEF    , 1, 1), /* Uganda */
	COUNTRY_CHPLAN_ENT("US", 0x76, 0x7F, DEF    , 1, 1), /* United States of America (USA) */
	COUNTRY_CHPLAN_ENT("UY", 0x30, 0x00, DEF    , 1, 1), /* Uruguay */
	COUNTRY_CHPLAN_ENT("UZ", 0x3C, 0x00, DEF    , 1, 1), /* Uzbekistan */
	COUNTRY_CHPLAN_ENT("VA", 0x3A, 0x00, DEF    , 1, 1), /* Holy See (Vatican City) */
	COUNTRY_CHPLAN_ENT("VC", 0x76, 0x00, DEF    , 1, 1), /* Saint Vincent and the Grenadines */
	COUNTRY_CHPLAN_ENT("VE", 0x30, 0x00, DEF    , 1, 1), /* Venezuela */
	COUNTRY_CHPLAN_ENT("VG", 0x76, 0x00, DEF    , 1, 1), /* British Virgin Islands (UK) */
	COUNTRY_CHPLAN_ENT("VI", 0x76, 0x00, DEF    , 1, 1), /* United States Virgin Islands (USA) */
	COUNTRY_CHPLAN_ENT("VN", 0x5E, 0x00, DEF    , 1, 1), /* Vietnam */
	COUNTRY_CHPLAN_ENT("VU", 0x26, 0x00, DEF    , 1, 1), /* Vanuatu */
	COUNTRY_CHPLAN_ENT("WF", 0x3A, 0x00, DEF    , 1, 1), /* Wallis and Futuna (France) */
	COUNTRY_CHPLAN_ENT("WS", 0x76, 0x00, DEF    , 1, 1), /* Samoa */
	COUNTRY_CHPLAN_ENT("XK", 0x3A, 0x00, DEF    , 1, 1), /* Kosovo */
	COUNTRY_CHPLAN_ENT("YE", 0x3A, 0x00, DEF    , 1, 1), /* Yemen */
	COUNTRY_CHPLAN_ENT("YT", 0x5E, 0x00, DEF    , 1, 1), /* Mayotte (France) */
	COUNTRY_CHPLAN_ENT("ZA", 0x5E, 0x00, DEF    , 1, 1), /* South Africa */
	COUNTRY_CHPLAN_ENT("ZM", 0x5E, 0x00, DEF    , 1, 1), /* Zambia */
	COUNTRY_CHPLAN_ENT("ZW", 0x5E, 0x00, DEF    , 1, 1), /* Zimbabwe */
};
#endif /* CONFIG_CUSTOMIZED_COUNTRY_CHPLAN_MAP or RTW_DEF_MODULE_REGULATORY_CERT or newest */

/*
* rtw_get_chplan_worldwide -
* @ent: the buf to copy country_chplan entry content
*/
void rtw_get_chplan_worldwide(struct country_chplan *ent)
{
	_rtw_memcpy(ent, &world_wide_chplan, sizeof(*ent));
}

/*
* rtw_get_chplan_from_country -
* @country_code: string of country code
* @ent: the buf to copy country_chplan entry content
*
* Return _TRUE or _FALSE when unsupported country_code is given
*/
bool rtw_get_chplan_from_country(const char *country_code, struct country_chplan *ent)
{
#if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
	struct country_chplan phl_ent = {.alpha2 = "\0\0"};
#endif
	const struct country_chplan *map = NULL;
	u16 map_sz = 0;
	char code[2];
	int i;

	code[0] = alpha_to_upper(country_code[0]);
	code[1] = alpha_to_upper(country_code[1]);

#ifdef CONFIG_CUSTOMIZED_COUNTRY_CHPLAN_MAP
	map = CUSTOMIZED_country_chplan_map;
	map_sz = sizeof(CUSTOMIZED_country_chplan_map) / sizeof(struct country_chplan);
#elif RTW_DEF_MODULE_REGULATORY_CERT
	map_sz = rtw_def_module_country_chplan_map(&map);
#else
	#if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
{
	struct rtw_regulation_country_chplan plan;

	_rtw_memset(&plan, 0, sizeof(plan));
	if (rtw_phl_query_country_chplan(code, &plan)) {
		_rtw_memcpy(phl_ent.alpha2, code, 2);
		phl_ent.chplan = plan.domain_code;
		#if CONFIG_IEEE80211_BAND_6GHZ
		phl_ent.chplan_6g = RTW_CHPLAN_6G_NULL; /* TODO: get from PHL */
		#endif
		phl_ent.edcca_mode_2g_override = RTW_EDCCA_DEF;
		#if CONFIG_IEEE80211_BAND_5GHZ
		phl_ent.edcca_mode_5g_override = RTW_EDCCA_DEF;
		#endif
		#if CONFIG_IEEE80211_BAND_6GHZ
		phl_ent.edcca_mode_6g_override = RTW_EDCCA_DEF;
		#endif
		phl_ent.txpwr_lmt_override = phl_tpo_to_txpwr_lmt(plan.tpo);
		#if defined(CONFIG_80211AX_HE) || defined(CONFIG_80211AC_VHT)
		phl_ent.proto_en = 0
			| ((plan.support_mode & SUPPORT_11AC) ? CHPLAN_PROTO_EN_AC : 0)
			| ((plan.support_mode & SUPPORT_11AX) ? CHPLAN_PROTO_EN_AX : 0)
			;
		#endif
		map = &phl_ent;
		map_sz = 1;
	}
}
	#else
	map = country_chplan_map;
	map_sz = sizeof(country_chplan_map) / sizeof(struct country_chplan);
	#endif
#endif

	for (i = 0; i < map_sz; i++) {
		if (strncmp(code, map[i].alpha2, 2) == 0) {
			if (ent)
				_rtw_memcpy(ent, &map[i], sizeof(*ent));
			return _TRUE;
		}
	}

	return _FALSE;
}

void rtw_chplan_ioctl_input_mapping(u16 *chplan, u16 *chplan_6g)
{
	if (chplan) {
		if (*chplan == RTW_CHPLAN_IOCTL_UNSPECIFIED)
			*chplan = RTW_CHPLAN_UNSPECIFIED;
		else if (*chplan == RTW_CHPLAN_IOCTL_NULL)
			*chplan = RTW_CHPLAN_NULL;
	}

	if (chplan_6g) {
		if (*chplan_6g == RTW_CHPLAN_IOCTL_UNSPECIFIED)
			*chplan_6g = RTW_CHPLAN_6G_UNSPECIFIED;
		else if (*chplan_6g == RTW_CHPLAN_IOCTL_NULL)
			*chplan_6g = RTW_CHPLAN_6G_NULL;
	}
}

bool rtw_chplan_ids_is_world_wide(u8 chplan, u8 chplan_6g)
{
	return !(chplan == RTW_CHPLAN_NULL
				#if CONFIG_IEEE80211_BAND_6GHZ
				&& chplan_6g == RTW_CHPLAN_6G_NULL
				#endif
			)
			&& (chplan == RTW_CHPLAN_WORLDWIDE || chplan == RTW_CHPLAN_NULL)
			#if CONFIG_IEEE80211_BAND_6GHZ
			&& (chplan_6g == RTW_CHPLAN_6G_WORLDWIDE || chplan_6g == RTW_CHPLAN_6G_NULL)
			#endif
			;
}

/*
 * Check if the @param ch, bw, offset is valid for the given @param ent
 * @ch_set: the given channel set
 * @ch: the given channel number
 * @bw: the given bandwidth
 * @offset: the given channel offset
 *
 * return valid (1) or not (0)
 */
u8 rtw_country_chplan_is_chbw_valid(struct country_chplan *ent, enum band_type band, u8 ch, u8 bw, u8 offset
	, bool allow_primary_passive, bool allow_passive, struct registry_priv *regsty)
{
	u8 chplan_6g = RTW_CHPLAN_6G_NULL;
	u8 valid = 0;

	if (bw >= CHANNEL_WIDTH_80 && !COUNTRY_CHPLAN_EN_11AC(ent))
		goto exit;

	#if CONFIG_IEEE80211_BAND_6GHZ
	chplan_6g = ent->chplan_6g;
	#endif

	valid = rtw_chplan_is_chbw_valid(ent->chplan, chplan_6g, band, ch, bw, offset
		, allow_primary_passive, allow_passive, regsty);

exit:
	return valid;
}

static void rtw_country_chplan_get_edcca_modes(const struct country_chplan *ent, u8 modes[])
{
	modes[BAND_ON_24G] =
		ent->edcca_mode_2g_override != RTW_EDCCA_DEF ? ent->edcca_mode_2g_override :
		rtw_regd_to_edcca_mode(rtw_chplan_get_default_regd_2g(ent->chplan));
	#if CONFIG_IEEE80211_BAND_5GHZ
	modes[BAND_ON_5G] =
		ent->edcca_mode_5g_override != RTW_EDCCA_DEF ? ent->edcca_mode_5g_override :
		rtw_regd_to_edcca_mode(rtw_chplan_get_default_regd_5g(ent->chplan));
	#endif
	#if CONFIG_IEEE80211_BAND_6GHZ
	modes[BAND_ON_6G] =
		ent->edcca_mode_6g_override != RTW_EDCCA_DEF ? ent->edcca_mode_6g_override :
		rtw_regd_to_edcca_mode(rtw_chplan_get_default_regd_6g(ent->chplan_6g));
	#endif
}

static void rtw_country_chplan_get_txpwr_lmts(const struct country_chplan *ent, u8 txpwr_lmt[])
{
	txpwr_lmt[BAND_ON_24G] =
		ent->txpwr_lmt_override != TXPWR_LMT_DEF ? ent->txpwr_lmt_override :
		rtw_regd_to_txpwr_lmt(rtw_chplan_get_default_regd_2g(ent->chplan));
	#if CONFIG_IEEE80211_BAND_5GHZ
	txpwr_lmt[BAND_ON_5G] =
		ent->txpwr_lmt_override != TXPWR_LMT_DEF ? ent->txpwr_lmt_override :
		rtw_regd_to_txpwr_lmt(rtw_chplan_get_default_regd_5g(ent->chplan));
	#endif
	#if CONFIG_IEEE80211_BAND_6GHZ
	txpwr_lmt[BAND_ON_6G] =
		ent->txpwr_lmt_override != TXPWR_LMT_DEF ? ent->txpwr_lmt_override :
		rtw_regd_to_txpwr_lmt(rtw_chplan_get_default_regd_6g(ent->chplan_6g));
	#endif
}

#ifdef CONFIG_80211D
const char *const _cis_status_str[] = {
	[COUNTRY_IE_SLAVE_NOCOUNTRY]	= "NOCOUNTRY",
	[COUNTRY_IE_SLAVE_UNKNOWN]		= "UNKNOWN",
	[COUNTRY_IE_SLAVE_OPCH_NOEXIST]	= "OPCH_NOEXIST",
	[COUNTRY_IE_SLAVE_APPLICABLE]	= "APPLICABLE",
	[COUNTRY_IE_SLAVE_STATUS_NUM]	= "INVALID",
};

void dump_country_ie_slave_records(void *sel, struct rf_ctl_t *rfctl, bool skip_noset)
{
	int i;

	RTW_PRINT_SEL(sel, "   %-6s %-4s %-4s %s\n", "alpha2", "band", "opch", "status");
	for (i = 0; i < CONFIG_IFACE_NUMBER; i++) {
		if (skip_noset && strncmp(rfctl->cisr[i].alpha2, "\x00\x00", 2) == 0)
			continue;
		RTW_PRINT_SEL(sel, "%c%d     "ALPHA2_FMT" %4s %4u %s\n"
			, i == rfctl->effected_cisr_id ? '*' : ' ', i, ALPHA2_ARG(rfctl->cisr[i].alpha2)
			, band_str(rfctl->cisr[i].band), rfctl->cisr[i].opch, cis_status_str(rfctl->cisr[i].status));
	}
}

enum country_ie_slave_status rtw_get_chplan_from_recv_country_ie(_adapter *adapter
		, enum band_type band, u8 opch, const u8 *country_ie, struct country_chplan *ent
		, struct country_ie_slave_record *cisr, const char *caller_msg)
{
	struct registry_priv *regsty = adapter_to_regsty(adapter);
	const char *country_code = country_ie ? country_ie + 2 : NULL;
	u8 chplan_6g = RTW_CHPLAN_6G_NULL;
	enum country_ie_slave_status ret;

	_rtw_memset(ent, 0, sizeof(*ent));

	if (!country_code || strncmp(country_code, "XX", 2) == 0) {
		if (caller_msg && country_code)
			RTW_INFO("%s("ADPT_FMT") noncountry \"XX\"\n", caller_msg, ADPT_ARG(adapter));
		ret = COUNTRY_IE_SLAVE_NOCOUNTRY;
		goto exit;
	}

	if (!rtw_get_chplan_from_country(country_code, ent)) {
		if (caller_msg) {
			if (is_alpha(country_code[0]) == _FALSE || is_alpha(country_code[1]) == _FALSE) {
				RTW_INFO("%s("ADPT_FMT") country_code is not alpha2, use world wide instead\n"
					, caller_msg, ADPT_ARG(adapter));
			} else {
				RTW_INFO("%s("ADPT_FMT") unsupported country_code:\"%c%c\", use world wide\n"
					, caller_msg, ADPT_ARG(adapter), country_code[0], country_code[1]);
			}
		}
		rtw_get_chplan_worldwide(ent);
		ret = COUNTRY_IE_SLAVE_UNKNOWN;
		goto exit;
	}

	#if CONFIG_IEEE80211_BAND_6GHZ
	chplan_6g = ent->chplan_6g;
	#endif

	if (!rtw_chplan_is_chbw_valid(ent->chplan, chplan_6g, band, opch
			, CHANNEL_WIDTH_20, CHAN_OFFSET_NO_EXT, 1, 1, regsty)
	) {
		u8 edcca_modes[BAND_MAX];

		if (caller_msg) {
			RTW_INFO("%s("ADPT_FMT") \"%c%c\" no band:%s ch:%u, use world wide with ori edcca modes\n"
				, caller_msg, ADPT_ARG(adapter), country_code[0], country_code[1], band_str(band), opch);
		}
		rtw_country_chplan_get_edcca_modes(ent, edcca_modes);
		rtw_get_chplan_worldwide(ent);
		ent->edcca_mode_2g_override = edcca_modes[BAND_ON_24G];
		#if CONFIG_IEEE80211_BAND_5GHZ
		ent->edcca_mode_5g_override = edcca_modes[BAND_ON_5G];
		#endif
		#if CONFIG_IEEE80211_BAND_6GHZ
		ent->edcca_mode_6g_override = edcca_modes[BAND_ON_6G];
		#endif
		ret = COUNTRY_IE_SLAVE_OPCH_NOEXIST;
		goto exit;
	}

	if (caller_msg) {
		RTW_INFO("%s("ADPT_FMT") country_code:\"%c%c\" is applicapble\n"
			, caller_msg, ADPT_ARG(adapter), country_code[0], country_code[1]);
	}
	ret = COUNTRY_IE_SLAVE_APPLICABLE;

exit:
	if (cisr) {
		_rtw_memcpy(cisr->alpha2, country_code ? country_code : "\x00\x00", 2);
		cisr->band = band;
		cisr->opch = opch;
		cisr->status = ret;
	}

	return ret;
}

enum country_ie_slave_status rtw_get_chplan_from_cisrs(struct rf_ctl_t *rfctl
	, struct country_chplan *ent, const char *caller_msg)
{
	struct dvobj_priv *dvobj = rfctl_to_dvobj(rfctl);
	_adapter *adapter = dvobj->padapters[rfctl->effected_cisr_id];
	struct country_ie_slave_record *cisr = &rfctl->cisr[rfctl->effected_cisr_id];
	const u8 country_ie[4] = {WLAN_EID_COUNTRY, 2, cisr->alpha2[0], cisr->alpha2[1]};
	enum country_ie_slave_status status;

	status = rtw_get_chplan_from_recv_country_ie(adapter, cisr->band, cisr->opch, country_ie, ent, NULL, caller_msg);
	rtw_warn_on(cisr->status != status);

	return status;
}
#endif /* CONFIG_80211D */

void dump_country_chplan(void *sel, const struct country_chplan *ent, bool regd_info)
{
	char buf[16];
	char *pos = buf;

	if (ent->chplan == RTW_CHPLAN_UNSPECIFIED)
		pos += sprintf(pos, "NA");
	else
		pos += sprintf(pos, "0x%02X", ent->chplan);

#if CONFIG_IEEE80211_BAND_6GHZ
	if (ent->chplan_6g == RTW_CHPLAN_6G_UNSPECIFIED)
		pos += sprintf(pos, " NA");
	else
		pos += sprintf(pos, " 0x%02X", ent->chplan_6g);
#endif

	RTW_PRINT_SEL(sel, "\"%c%c\", %s"
		, ent->alpha2[0], ent->alpha2[1], buf);

	if (regd_info) {
		u8 edcca_modes[BAND_MAX];
		u8 txpwr_lmts[BAND_MAX];

		rtw_country_chplan_get_edcca_modes(ent, edcca_modes);
		_RTW_PRINT_SEL(sel, " {%-6s", rtw_edcca_mode_str(edcca_modes[BAND_ON_24G]));
		#if CONFIG_IEEE80211_BAND_5GHZ
		_RTW_PRINT_SEL(sel, " %-6s", rtw_edcca_mode_str(edcca_modes[BAND_ON_5G]));
		#endif
		#if CONFIG_IEEE80211_BAND_6GHZ
		_RTW_PRINT_SEL(sel, " %-6s", rtw_edcca_mode_str(edcca_modes[BAND_ON_6G]));
		#endif
		_RTW_PRINT_SEL(sel, "}");

		rtw_country_chplan_get_txpwr_lmts(ent, txpwr_lmts);
		_RTW_PRINT_SEL(sel, " {%-7s", txpwr_lmt_str(txpwr_lmts[BAND_ON_24G]));
		#if CONFIG_IEEE80211_BAND_5GHZ
		_RTW_PRINT_SEL(sel, " %-7s", txpwr_lmt_str(txpwr_lmts[BAND_ON_5G]));
		#endif
		#if CONFIG_IEEE80211_BAND_6GHZ
		_RTW_PRINT_SEL(sel, " %-7s", txpwr_lmt_str(txpwr_lmts[BAND_ON_6G]));
		#endif
		_RTW_PRINT_SEL(sel, "}");
	}

	_RTW_PRINT_SEL(sel, " %s", COUNTRY_CHPLAN_EN_11AX(ent) ? "ax" : "  ");
	_RTW_PRINT_SEL(sel, " %s", COUNTRY_CHPLAN_EN_11AC(ent) ? "ac" : "  ");

	_RTW_PRINT_SEL(sel, "\n");
}

void dump_country_chplan_map(void *sel, bool regd_info)
{
	struct country_chplan ent;
	u8 code[2];

#if RTW_DEF_MODULE_REGULATORY_CERT
	RTW_PRINT_SEL(sel, "RTW_DEF_MODULE_REGULATORY_CERT:0x%x\n", RTW_DEF_MODULE_REGULATORY_CERT);
#endif
#ifdef CONFIG_CUSTOMIZED_COUNTRY_CHPLAN_MAP
	RTW_PRINT_SEL(sel, "CONFIG_CUSTOMIZED_COUNTRY_CHPLAN_MAP\n");
#endif

	rtw_get_chplan_worldwide(&ent);
	dump_country_chplan(sel, &ent, regd_info);

	for (code[0] = 'A'; code[0] <= 'Z'; code[0]++) {
		for (code[1] = 'A'; code[1] <= 'Z'; code[1]++) {
			if (rtw_get_chplan_from_country(code, &ent) == _FALSE)
				continue;

			dump_country_chplan(sel, &ent, regd_info);
		}
	}
}

void dump_country_list(void *sel)
{
	u8 code[2];

	RTW_PRINT_SEL(sel, "%s ", WORLDWIDE_ALPHA2);

	for (code[0] = 'A'; code[0] <= 'Z'; code[0]++) {
		for (code[1] = 'A'; code[1] <= 'Z'; code[1]++) {
			if (!rtw_get_chplan_from_country(code, NULL))
				continue;

			_RTW_PRINT_SEL(sel, "%c%c ", code[0], code[1]);
		}
	}
	_RTW_PRINT_SEL(sel, "\n");
}

void dump_chplan_id_list(void *sel)
{
#if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
	u8 id_search_max = 255;
#else
	u8 id_search_max = RTW_ChannelPlanMap_size - 1;
#endif
	u8 first = 1;
	int i;

	for (i = 0; i <= id_search_max; i++) {
		if (!rtw_is_channel_plan_valid(i))
			continue;

		if (first) {
			RTW_PRINT_SEL(sel, "0x%02X ", i);
			first = 0;
		} else
			_RTW_PRINT_SEL(sel, "0x%02X ", i);
	}
	if (first == 0)
		_RTW_PRINT_SEL(sel, "\n");
}

void dump_chplan_country_list(void *sel)
{
#if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
	u8 id_search_max = 255;
#else
	u8 id_search_max = RTW_ChannelPlanMap_size - 1;
#endif
	int i;

	for (i = 0; i <= id_search_max; i++) {
		struct country_chplan ent;
		u8 code[2];
		u8 first;

		if (!rtw_is_channel_plan_valid(i))
			continue;

		first = 1;
		for (code[0] = 'A'; code[0] <= 'Z'; code[0]++) {
			for (code[1] = 'A'; code[1] <= 'Z'; code[1]++) {
				if (!rtw_get_chplan_from_country(code, &ent) || ent.chplan != i)
					continue;

				if (first) {
					RTW_PRINT_SEL(sel, "0x%02X %c%c ", i, code[0], code[1]);
					first = 0;
				} else
					_RTW_PRINT_SEL(sel, "%c%c ", code[0], code[1]);
			}
		}
		if (first == 0)
			_RTW_PRINT_SEL(sel, "\n");
	}
}

#if CONFIG_IEEE80211_BAND_6GHZ
void dump_chplan_6g_id_list(void *sel)
{
#if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
	u8 id_search_max = 255;
#else
	u8 id_search_max = rtw_chplan_6g_map_size - 1;
#endif
	u8 first = 1;
	int i;

	for (i = 0; i <= id_search_max; i++) {
		if (!rtw_is_channel_plan_6g_valid(i))
			continue;

		if (first) {
			RTW_PRINT_SEL(sel, "0x%02X ", i);
			first = 0;
		} else
			_RTW_PRINT_SEL(sel, "0x%02X ", i);
	}
	if (first == 0)
		_RTW_PRINT_SEL(sel, "\n");
}

void dump_chplan_6g_country_list(void *sel)
{
#if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
	u8 id_search_max = 255;
#else
	u8 id_search_max = rtw_chplan_6g_map_size - 1;
#endif
	int i;

	for (i = 0; i <= id_search_max; i++) {
		struct country_chplan ent;
		u8 code[2];
		u8 first;

		if (!rtw_is_channel_plan_6g_valid(i))
			continue;

		first = 1;
		for (code[0] = 'A'; code[0] <= 'Z'; code[0]++) {
			for (code[1] = 'A'; code[1] <= 'Z'; code[1]++) {
				if (!rtw_get_chplan_from_country(code, &ent) || ent.chplan_6g != i)
					continue;

				if (first) {
					RTW_PRINT_SEL(sel, "0x%02X %c%c ", i, code[0], code[1]);
					first = 0;
				} else
					_RTW_PRINT_SEL(sel, "%c%c ", code[0], code[1]);
			}
		}
		if (first == 0)
			_RTW_PRINT_SEL(sel, "\n");
	}
}
#endif /* CONFIG_IEEE80211_BAND_6GHZ */

#ifdef CONFIG_RTW_DEBUG
void dump_chplan_test(void *sel)
{
#if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
#else
	int i, j;

	/* check 2G CHD redundent */
	for (i = RTW_CHD_2G_00; i < RTW_CHD_2G_MAX; i++) {
		for (j = RTW_CHD_2G_00; j < i; j++) {
			if (CH_LIST_LEN(rtw_channel_def_2g[i]) == CH_LIST_LEN(rtw_channel_def_2g[j])
				&& _rtw_memcmp(&CH_LIST_CH(rtw_channel_def_2g[i], 0), &CH_LIST_CH(rtw_channel_def_2g[j], 0), CH_LIST_LEN(rtw_channel_def_2g[i]) + 1) == _TRUE)
				RTW_PRINT_SEL(sel, "2G chd:%u and %u is the same\n", i, j);
		}
	}

	/* check 2G CHD invalid channel */
	for (i = RTW_CHD_2G_00; i < RTW_CHD_2G_MAX; i++) {
		for (j = 0; j < CH_LIST_LEN(rtw_channel_def_2g[i]); j++) {
			if (rtw_ch2freq(CH_LIST_CH(rtw_channel_def_2g[i], j)) == 0)
				RTW_PRINT_SEL(sel, "2G invalid ch:%u at (%d,%d)\n", CH_LIST_CH(rtw_channel_def_2g[i], j), i, j);
		}
	}

#if CONFIG_IEEE80211_BAND_5GHZ
	/* check 5G CHD redundent */
	for (i = RTW_CHD_5G_00; i < RTW_CHD_5G_MAX; i++) {
		for (j = RTW_CHD_5G_00; j < i; j++) {
			if (CH_LIST_LEN(rtw_channel_def_5g[i]) == CH_LIST_LEN(rtw_channel_def_5g[j])
				&& _rtw_memcmp(&CH_LIST_CH(rtw_channel_def_5g[i], 0), &CH_LIST_CH(rtw_channel_def_5g[j], 0), CH_LIST_LEN(rtw_channel_def_5g[i]) + 1) == _TRUE)
				RTW_PRINT_SEL(sel, "5G chd:%u and %u is the same\n", i, j);
		}
	}

	/* check 5G CHD invalid channel */
	for (i = RTW_CHD_5G_00; i < RTW_CHD_5G_MAX; i++) {
		for (j = 0; j < CH_LIST_LEN(rtw_channel_def_5g[i]); j++) {
			if (rtw_ch2freq(CH_LIST_CH(rtw_channel_def_5g[i], j)) == 0)
				RTW_PRINT_SEL(sel, "5G invalid ch:%u at (%d,%d)\n", CH_LIST_CH(rtw_channel_def_5g[i], j), i, j);
		}
	}
#endif

#if CONFIG_IEEE80211_BAND_6GHZ
	/* check 6G CHD redundent */
	for (i = RTW_CHD_6G_00; i < RTW_CHD_6G_MAX; i++) {
		for (j = RTW_CHD_6G_00; j < i; j++) {
			if (CH_LIST_LEN(rtw_channel_def_6g[i]) == CH_LIST_LEN(rtw_channel_def_6g[j])
				&& _rtw_memcmp(&CH_LIST_CH(rtw_channel_def_6g[i], 0), &CH_LIST_CH(rtw_channel_def_6g[j], 0), CH_LIST_LEN(rtw_channel_def_6g[i]) + 1) == _TRUE)
				RTW_PRINT_SEL(sel, "6G chd:%u and %u is the same\n", i, j);
		}
	}

	/* check 6G CHD invalid channel */
	for (i = RTW_CHD_6G_00; i < RTW_CHD_6G_MAX; i++) {
		for (j = 0; j < CH_LIST_LEN(rtw_channel_def_6g[i]); j++) {
			if (rtw_6gch2freq(CH_LIST_CH(rtw_channel_def_6g[i], j)) == 0)
				RTW_PRINT_SEL(sel, "6G invalid ch:%u at (%d,%d)\n", CH_LIST_CH(rtw_channel_def_6g[i], j), i, j);
		}
	}
#endif

	/* check chplan 2G_5G redundent */
	for (i = 0; i < RTW_ChannelPlanMap_size; i++) {
		if (!rtw_is_channel_plan_valid(i))
			continue;
		for (j = 0; j < i; j++) {
			if (!rtw_is_channel_plan_valid(j))
				continue;
			if (_rtw_memcmp(&RTW_ChannelPlanMap[i], &RTW_ChannelPlanMap[j], sizeof(RTW_ChannelPlanMap[i])) == _TRUE)
				RTW_PRINT_SEL(sel, "channel plan 0x%02x and 0x%02x is the same\n", i, j);
		}
	}

#if CONFIG_IEEE80211_BAND_6GHZ
	/* check chplan 6G redundent */
	for (i = 0; i < rtw_chplan_6g_map_size; i++) {
		if (!rtw_is_channel_plan_6g_valid(i))
			continue;
		for (j = 0; j < i; j++) {
			if (!rtw_is_channel_plan_6g_valid(j))
				continue;
			if (_rtw_memcmp(&rtw_chplan_6g_map[i], &rtw_chplan_6g_map[j], sizeof(rtw_chplan_6g_map[i])) == _TRUE)
				RTW_PRINT_SEL(sel, "channel plan 6g 0x%02x and 0x%02x is the same\n", i, j);
		}
	}
#endif


	/* check country invalid chplan/chplan_6g */
{
	struct country_chplan ent;
	u8 code[2];

	for (code[0] = 'A'; code[0] <= 'Z'; code[0]++) {
		for (code[1] = 'A'; code[1] <= 'Z'; code[1]++) {
			if (!rtw_get_chplan_from_country(code, &ent))
				continue;
			if (!rtw_is_channel_plan_valid(ent.chplan))
				RTW_PRINT_SEL(sel, "country \"%c%c\" has invalid chplan:0x%02X\n", code[0], code[1], ent.chplan);
			#if CONFIG_IEEE80211_BAND_6GHZ
			if (!rtw_is_channel_plan_6g_valid(ent.chplan_6g))
				RTW_PRINT_SEL(sel, "country \"%c%c\" has invalid chplan_6g:0x%02X\n", code[0], code[1], ent.chplan_6g);
			#endif
		}
	}
}
#endif
}
#endif /* CONFIG_RTW_DEBUG */

void dump_chplan_ver(void *sel)
{
#if defined(PHL_FEATURE_NIC) && !USE_RTW_REGD
	struct rtw_regulation_info info = {0};

	if (!rtw_phl_query_regulation_info(phl_info, &info)) {
		RTW_PRINT_SEL(sel, "query chplan version fail\n");
		return;
	}
	RTW_PRINT_SEL(sel, "%d-%d\n", info.chplan_ver, info.country_ver);
#else
	RTW_PRINT_SEL(sel, "%s%s-%s\n", RTW_DOMAIN_MAP_VER, RTW_DOMAIN_MAP_M_VER, RTW_COUNTRY_MAP_VER);
#endif
}

void rtw_set_phl_regulation_ctx(struct dvobj_priv *dvobj)
{
#ifdef PHL_FEATURE_NIC
	if (!phl_info)
		phl_info = GET_PHL_INFO(dvobj);
#endif
}

void rtw_clear_phl_regulation_ctx(struct dvobj_priv *dvobj)
{
#ifdef PHL_FEATURE_NIC
	if (phl_info == GET_PHL_INFO(dvobj))
		phl_info = NULL;
#endif
}