Path: blob/master/ALFA-W1F1/RTL8814AU/hal/phydm/phydm_cck_pd.c
1307 views
/******************************************************************************1*2* Copyright(c) 2007 - 2017 Realtek Corporation.3*4* This program is free software; you can redistribute it and/or modify it5* under the terms of version 2 of the GNU General Public License as6* published by the Free Software Foundation.7*8* This program is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for11* more details.12*13* The full GNU General Public License is included in this distribution in the14* file called LICENSE.15*16* Contact Information:17* wlanfae <[email protected]>18* Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,19* Hsinchu 300, Taiwan.20*21* Larry Finger <[email protected]>22*23*****************************************************************************/2425/*@************************************************************26* include files27************************************************************/2829#include "mp_precomp.h"30#include "phydm_precomp.h"3132#ifdef PHYDM_SUPPORT_CCKPD33#ifdef PHYDM_COMPILE_CCKPD_TYPE134void phydm_write_cck_pd_type1(void *dm_void, u8 cca_th)35{36struct dm_struct *dm = (struct dm_struct *)dm_void;37struct phydm_cckpd_struct *cckpd_t = &dm->dm_cckpd_table;3839PHYDM_DBG(dm, DBG_CCKPD, "[%s] cck_cca_th=((0x%x))\n",40__func__, cca_th);4142odm_write_1byte(dm, R_0xa0a, cca_th);43cckpd_t->cur_cck_cca_thres = cca_th;44}4546void phydm_set_cckpd_lv_type1(void *dm_void, enum cckpd_lv lv)47{48struct dm_struct *dm = (struct dm_struct *)dm_void;49struct phydm_cckpd_struct *cckpd_t = &dm->dm_cckpd_table;50u8 pd_th = 0;5152PHYDM_DBG(dm, DBG_CCKPD, "%s ======>\n", __func__);53PHYDM_DBG(dm, DBG_CCKPD, "lv: (%d) -> (%d)\n", cckpd_t->cck_pd_lv, lv);5455if (cckpd_t->cck_pd_lv == lv) {56PHYDM_DBG(dm, DBG_CCKPD, "stay in lv=%d\n", lv);57return;58}5960cckpd_t->cck_pd_lv = lv;61cckpd_t->cck_fa_ma = CCK_FA_MA_RESET;6263if (lv == CCK_PD_LV_4)64pd_th = 0xed;65else if (lv == CCK_PD_LV_3)66pd_th = 0xdd;67else if (lv == CCK_PD_LV_2)68pd_th = 0xcd;69else if (lv == CCK_PD_LV_1)70pd_th = 0x83;71else if (lv == CCK_PD_LV_0)72pd_th = 0x40;7374phydm_write_cck_pd_type1(dm, pd_th);75}7677void phydm_cckpd_type1(void *dm_void)78{79struct dm_struct *dm = (struct dm_struct *)dm_void;80struct phydm_dig_struct *dig_t = &dm->dm_dig_table;81struct phydm_cckpd_struct *cckpd_t = &dm->dm_cckpd_table;82enum cckpd_lv lv = CCK_PD_LV_INIT;83boolean is_update = true;8485if (dm->is_linked) {86#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE))87if (dm->rssi_min > 60) {88lv = CCK_PD_LV_3;89} else if (dm->rssi_min > 35) {90lv = CCK_PD_LV_2;91} else if (dm->rssi_min > 20) {92if (cckpd_t->cck_fa_ma > 500)93lv = CCK_PD_LV_2;94else if (cckpd_t->cck_fa_ma < 250)95lv = CCK_PD_LV_1;96else97is_update = false;98} else { /*RSSI < 20*/99lv = CCK_PD_LV_1;100}101#else /*ODM_AP*/102if (dig_t->cur_ig_value > 0x32)103lv = CCK_PD_LV_4;104else if (dig_t->cur_ig_value > 0x2a)105lv = CCK_PD_LV_3;106else if (dig_t->cur_ig_value > 0x24)107lv = CCK_PD_LV_2;108else109lv = CCK_PD_LV_1;110#endif111} else {112if (cckpd_t->cck_fa_ma > 1000)113lv = CCK_PD_LV_1;114else if (cckpd_t->cck_fa_ma < 500)115lv = CCK_PD_LV_0;116else117is_update = false;118}119120/*[Abnormal case] =================================================*/121#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)122/*@HP 22B LPS power consumption issue & [PCIE-1596]*/123if (dm->hp_hw_id && dm->traffic_load == TRAFFIC_ULTRA_LOW) {124lv = CCK_PD_LV_0;125PHYDM_DBG(dm, DBG_CCKPD, "CCKPD Abnormal case1\n");126} else if ((dm->p_advance_ota & PHYDM_ASUS_OTA_SETTING) &&127cckpd_t->cck_fa_ma > 200 && dm->rssi_min <= 20) {128lv = CCK_PD_LV_1;129cckpd_t->cck_pd_lv = lv;130phydm_write_cck_pd_type1(dm, 0xc3); /*@for ASUS OTA test*/131is_update = false;132PHYDM_DBG(dm, DBG_CCKPD, "CCKPD Abnormal case2\n");133}134#elif (DM_ODM_SUPPORT_TYPE & (ODM_AP))135#ifdef MCR_WIRELESS_EXTEND136lv = CCK_PD_LV_2;137cckpd_t->cck_pd_lv = lv;138phydm_write_cck_pd_type1(dm, 0x43);139is_update = false;140PHYDM_DBG(dm, DBG_CCKPD, "CCKPD Abnormal case3\n");141#endif142#endif143/*=================================================================*/144145if (is_update)146phydm_set_cckpd_lv_type1(dm, lv);147148PHYDM_DBG(dm, DBG_CCKPD, "is_linked=%d, lv=%d, pd_th=0x%x\n\n",149dm->is_linked, cckpd_t->cck_pd_lv,150cckpd_t->cur_cck_cca_thres);151}152#endif /*#ifdef PHYDM_COMPILE_CCKPD_TYPE1*/153154#ifdef PHYDM_COMPILE_CCKPD_TYPE2155void phydm_write_cck_pd_type2(void *dm_void, u8 cca_th, u8 cca_th_aaa)156{157struct dm_struct *dm = (struct dm_struct *)dm_void;158struct phydm_cckpd_struct *cckpd_t = &dm->dm_cckpd_table;159160PHYDM_DBG(dm, DBG_CCKPD, "[%s] pd_th=0x%x, cs_ratio=0x%x\n",161__func__, cca_th, cca_th_aaa);162163odm_set_bb_reg(dm, R_0xa08, 0x3f0000, cca_th);164odm_set_bb_reg(dm, R_0xaa8, 0x1f0000, cca_th_aaa);165cckpd_t->cur_cck_cca_thres = cca_th;166cckpd_t->cck_cca_th_aaa = cca_th_aaa;167}168169void phydm_set_cckpd_lv_type2(void *dm_void, enum cckpd_lv lv)170{171struct dm_struct *dm = (struct dm_struct *)dm_void;172struct phydm_cckpd_struct *cckpd_t = &dm->dm_cckpd_table;173u8 pd_th = 0, cs_ratio = 0, cs_2r_offset = 0;174u8 cck_n_rx = 1;175176PHYDM_DBG(dm, DBG_CCKPD, "%s ======>\n", __func__);177PHYDM_DBG(dm, DBG_CCKPD, "lv: (%d) -> (%d)\n", cckpd_t->cck_pd_lv, lv);178179/*@r_mrx & r_cca_mrc*/180cck_n_rx = (odm_get_bb_reg(dm, R_0xa2c, BIT(18)) &&181odm_get_bb_reg(dm, R_0xa2c, BIT(22))) ? 2 : 1;182183if (cckpd_t->cck_pd_lv == lv && cckpd_t->cck_n_rx == cck_n_rx) {184PHYDM_DBG(dm, DBG_CCKPD, "stay in lv=%d\n", lv);185return;186}187188cckpd_t->cck_n_rx = cck_n_rx;189cckpd_t->cck_pd_lv = lv;190cckpd_t->cck_fa_ma = CCK_FA_MA_RESET;191192if (lv == CCK_PD_LV_4) {193cs_ratio = cckpd_t->aaa_default + 8;194cs_2r_offset = 5;195pd_th = 0xd;196} else if (lv == CCK_PD_LV_3) {197cs_ratio = cckpd_t->aaa_default + 6;198cs_2r_offset = 4;199pd_th = 0xd;200} else if (lv == CCK_PD_LV_2) {201cs_ratio = cckpd_t->aaa_default + 4;202cs_2r_offset = 3;203pd_th = 0xd;204} else if (lv == CCK_PD_LV_1) {205cs_ratio = cckpd_t->aaa_default + 2;206cs_2r_offset = 1;207pd_th = 0x7;208} else if (lv == CCK_PD_LV_0) {209cs_ratio = cckpd_t->aaa_default;210cs_2r_offset = 0;211pd_th = 0x3;212}213214if (cckpd_t->cck_n_rx == 2) {215if (cs_ratio >= cs_2r_offset)216cs_ratio = cs_ratio - cs_2r_offset;217else218cs_ratio = 0;219}220phydm_write_cck_pd_type2(dm, pd_th, cs_ratio);221}222223void phydm_cckpd_type2(void *dm_void)224{225struct dm_struct *dm = (struct dm_struct *)dm_void;226struct phydm_dig_struct *dig_t = &dm->dm_dig_table;227struct phydm_cckpd_struct *cckpd_t = &dm->dm_cckpd_table;228enum cckpd_lv lv = CCK_PD_LV_INIT;229u8 igi = dig_t->cur_ig_value;230u8 rssi_min = dm->rssi_min;231boolean is_update = true;232233PHYDM_DBG(dm, DBG_CCKPD, "%s ======>\n", __func__);234235if (dm->is_linked) {236if (igi > 0x38 && rssi_min > 32) {237lv = CCK_PD_LV_4;238} else if (igi > 0x2a && rssi_min > 32) {239lv = CCK_PD_LV_3;240} else if (igi > 0x24 || (rssi_min > 24 && rssi_min <= 30)) {241lv = CCK_PD_LV_2;242} else if (igi <= 0x24 || rssi_min < 22) {243if (cckpd_t->cck_fa_ma > 1000) {244lv = CCK_PD_LV_1;245} else if (cckpd_t->cck_fa_ma < 500) {246lv = CCK_PD_LV_0;247} else {248is_update = false;249}250} else {251is_update = false;252}253} else {254if (cckpd_t->cck_fa_ma > 1000) {255lv = CCK_PD_LV_1;256} else if (cckpd_t->cck_fa_ma < 500) {257lv = CCK_PD_LV_0;258} else {259is_update = false;260}261}262263/*[Abnormal case] =================================================*/264#if (DM_ODM_SUPPORT_TYPE & ODM_WIN)265/*@21C Miracast lag issue & [PCIE-3298]*/266if (dm->support_ic_type & ODM_RTL8821C && rssi_min > 60) {267lv = CCK_PD_LV_4;268cckpd_t->cck_pd_lv = lv;269phydm_write_cck_pd_type2(dm, 0x1d, (cckpd_t->aaa_default + 8));270is_update = false;271PHYDM_DBG(dm, DBG_CCKPD, "CCKPD Abnormal case1\n");272}273#endif274/*=================================================================*/275276if (is_update) {277phydm_set_cckpd_lv_type2(dm, lv);278}279280PHYDM_DBG(dm, DBG_CCKPD,281"is_linked=%d, lv=%d, n_rx=%d, cs_ratio=0x%x, pd_th=0x%x\n\n",282dm->is_linked, cckpd_t->cck_pd_lv, cckpd_t->cck_n_rx,283cckpd_t->cck_cca_th_aaa, cckpd_t->cur_cck_cca_thres);284}285#endif /*#ifdef PHYDM_COMPILE_CCKPD_TYPE2*/286287#ifdef PHYDM_COMPILE_CCKPD_TYPE3288void phydm_write_cck_pd_type3(void *dm_void, u8 pd_th, u8 cs_ratio,289enum cckpd_mode mode)290{291struct dm_struct *dm = (struct dm_struct *)dm_void;292struct phydm_cckpd_struct *cckpd_t = &dm->dm_cckpd_table;293294PHYDM_DBG(dm, DBG_CCKPD,295"[%s] mode=%d, pd_th=0x%x, cs_ratio=0x%x\n", __func__,296mode, pd_th, cs_ratio);297298switch (mode) {299case CCK_BW20_1R: /*RFBW20_1R*/300{301cckpd_t->cur_cck_pd_20m_1r = pd_th;302cckpd_t->cur_cck_cs_ratio_20m_1r = cs_ratio;303odm_set_bb_reg(dm, R_0xac8, 0xff, pd_th);304odm_set_bb_reg(dm, R_0xad0, 0x1f, cs_ratio);305} break;306case CCK_BW20_2R: /*RFBW20_2R*/307{308cckpd_t->cur_cck_pd_20m_2r = pd_th;309cckpd_t->cur_cck_cs_ratio_20m_2r = cs_ratio;310odm_set_bb_reg(dm, R_0xac8, 0xff00, pd_th);311odm_set_bb_reg(dm, R_0xad0, 0x3e0, cs_ratio);312} break;313case CCK_BW40_1R: /*RFBW40_1R*/314{315cckpd_t->cur_cck_pd_40m_1r = pd_th;316cckpd_t->cur_cck_cs_ratio_40m_1r = cs_ratio;317odm_set_bb_reg(dm, R_0xacc, 0xff, pd_th);318odm_set_bb_reg(dm, R_0xad0, 0x1f00000, cs_ratio);319} break;320case CCK_BW40_2R: /*RFBW40_2R*/321{322cckpd_t->cur_cck_pd_40m_2r = pd_th;323cckpd_t->cur_cck_cs_ratio_40m_2r = cs_ratio;324odm_set_bb_reg(dm, R_0xacc, 0xff00, pd_th);325odm_set_bb_reg(dm, R_0xad0, 0x3e000000, cs_ratio);326} break;327328default:329/*@pr_debug("[%s] warning!\n", __func__);*/330break;331}332}333334void phydm_set_cckpd_lv_type3(void *dm_void, enum cckpd_lv lv)335{336struct dm_struct *dm = (struct dm_struct *)dm_void;337struct phydm_cckpd_struct *cckpd_t = &dm->dm_cckpd_table;338enum cckpd_mode cck_mode = CCK_BW20_2R;339enum channel_width cck_bw = CHANNEL_WIDTH_20;340u8 cck_n_rx = 1;341u8 pd_th;342u8 cs_ratio;343344PHYDM_DBG(dm, DBG_CCKPD, "%s ======>\n", __func__);345PHYDM_DBG(dm, DBG_CCKPD, "lv: (%d) -> (%d)\n", cckpd_t->cck_pd_lv, lv);346347/*[Check Nrx]*/348cck_n_rx = (odm_get_bb_reg(dm, R_0xa2c, BIT(17))) ? 2 : 1;349350/*[Check BW]*/351if (odm_get_bb_reg(dm, R_0x800, BIT(0)))352cck_bw = CHANNEL_WIDTH_40;353else354cck_bw = CHANNEL_WIDTH_20;355356/*[Check LV]*/357if (cckpd_t->cck_pd_lv == lv &&358cckpd_t->cck_n_rx == cck_n_rx &&359cckpd_t->cck_bw == cck_bw) {360PHYDM_DBG(dm, DBG_CCKPD, "stay in lv=%d\n", lv);361return;362}363364cckpd_t->cck_bw = cck_bw;365cckpd_t->cck_n_rx = cck_n_rx;366cckpd_t->cck_pd_lv = lv;367cckpd_t->cck_fa_ma = CCK_FA_MA_RESET;368369if (cck_n_rx == 2) {370if (cck_bw == CHANNEL_WIDTH_20) {371pd_th = cckpd_t->cck_pd_20m_2r;372cs_ratio = cckpd_t->cck_cs_ratio_20m_2r;373cck_mode = CCK_BW20_2R;374} else {375pd_th = cckpd_t->cck_pd_40m_2r;376cs_ratio = cckpd_t->cck_cs_ratio_40m_2r;377cck_mode = CCK_BW40_2R;378}379} else {380if (cck_bw == CHANNEL_WIDTH_20) {381pd_th = cckpd_t->cck_pd_20m_1r;382cs_ratio = cckpd_t->cck_cs_ratio_20m_1r;383cck_mode = CCK_BW20_1R;384} else {385pd_th = cckpd_t->cck_pd_40m_1r;386cs_ratio = cckpd_t->cck_cs_ratio_40m_1r;387cck_mode = CCK_BW40_1R;388}389}390391if (lv == CCK_PD_LV_4) {392if (cck_n_rx == 2) {393pd_th += 4;394cs_ratio += 2;395} else {396pd_th += 4;397cs_ratio += 3;398}399} else if (lv == CCK_PD_LV_3) {400if (cck_n_rx == 2) {401pd_th += 3;402cs_ratio += 1;403} else {404pd_th += 3;405cs_ratio += 2;406}407} else if (lv == CCK_PD_LV_2) {408pd_th += 2;409cs_ratio += 1;410} else if (lv == CCK_PD_LV_1) {411pd_th += 1;412cs_ratio += 1;413}414#if 0415else if (lv == CCK_PD_LV_0) {416pd_th += 0;417cs_ratio += 0;418}419#endif420421phydm_write_cck_pd_type3(dm, pd_th, cs_ratio, cck_mode);422}423424void phydm_cckpd_type3(void *dm_void)425{426struct dm_struct *dm = (struct dm_struct *)dm_void;427struct phydm_cckpd_struct *cckpd_t = &dm->dm_cckpd_table;428enum cckpd_lv lv = CCK_PD_LV_INIT;429u8 igi = dm->dm_dig_table.cur_ig_value;430boolean is_update = true;431u8 pd_th = 0;432u8 cs_ratio = 0;433434PHYDM_DBG(dm, DBG_CCKPD, "%s ======>\n", __func__);435436if (dm->is_linked) {437if (igi > 0x38 && dm->rssi_min > 32) {438lv = CCK_PD_LV_4;439} else if ((igi > 0x2a) && (dm->rssi_min > 32)) {440lv = CCK_PD_LV_3;441} else if ((igi > 0x24) ||442(dm->rssi_min > 24 && dm->rssi_min <= 30)) {443lv = CCK_PD_LV_2;444} else if ((igi <= 0x24) || (dm->rssi_min < 22)) {445if (cckpd_t->cck_fa_ma > 1000)446lv = CCK_PD_LV_1;447else if (cckpd_t->cck_fa_ma < 500)448lv = CCK_PD_LV_0;449else450is_update = false;451}452} else {453if (cckpd_t->cck_fa_ma > 1000)454lv = CCK_PD_LV_1;455else if (cckpd_t->cck_fa_ma < 500)456lv = CCK_PD_LV_0;457else458is_update = false;459}460461if (is_update)462phydm_set_cckpd_lv_type3(dm, lv);463464if (cckpd_t->cck_n_rx == 2) {465if (cckpd_t->cck_bw == CHANNEL_WIDTH_20) {466pd_th = cckpd_t->cur_cck_pd_20m_2r;467cs_ratio = cckpd_t->cur_cck_cs_ratio_20m_2r;468} else {469pd_th = cckpd_t->cur_cck_pd_40m_2r;470cs_ratio = cckpd_t->cur_cck_cs_ratio_40m_2r;471}472} else {473if (cckpd_t->cck_bw == CHANNEL_WIDTH_20) {474pd_th = cckpd_t->cur_cck_pd_20m_1r;475cs_ratio = cckpd_t->cur_cck_cs_ratio_20m_1r;476} else {477pd_th = cckpd_t->cur_cck_pd_40m_1r;478cs_ratio = cckpd_t->cur_cck_cs_ratio_40m_1r;479}480}481PHYDM_DBG(dm, DBG_CCKPD,482"[%dR][%dM] is_linked=%d, lv=%d, cs_ratio=0x%x, pd_th=0x%x\n\n",483cckpd_t->cck_n_rx, 20 << cckpd_t->cck_bw, dm->is_linked,484cckpd_t->cck_pd_lv, cs_ratio, pd_th);485}486487void phydm_cck_pd_init_type3(void *dm_void)488{489struct dm_struct *dm = (struct dm_struct *)dm_void;490struct phydm_cckpd_struct *cckpd_t = &dm->dm_cckpd_table;491u32 reg_tmp = 0;492493/*Get Default value*/494cckpd_t->cck_pd_20m_1r = (u8)odm_get_bb_reg(dm, R_0xac8, 0xff);495cckpd_t->cck_pd_20m_2r = (u8)odm_get_bb_reg(dm, R_0xac8, 0xff00);496cckpd_t->cck_pd_40m_1r = (u8)odm_get_bb_reg(dm, R_0xacc, 0xff);497cckpd_t->cck_pd_40m_2r = (u8)odm_get_bb_reg(dm, R_0xacc, 0xff00);498499reg_tmp = odm_get_bb_reg(dm, R_0xad0, MASKDWORD);500cckpd_t->cck_cs_ratio_20m_1r = (u8)(reg_tmp & 0x1f);501cckpd_t->cck_cs_ratio_20m_2r = (u8)((reg_tmp & 0x3e0) >> 5);502cckpd_t->cck_cs_ratio_40m_1r = (u8)((reg_tmp & 0x1f00000) >> 20);503cckpd_t->cck_cs_ratio_40m_2r = (u8)((reg_tmp & 0x3e000000) >> 25);504}505#endif /*#ifdef PHYDM_COMPILE_CCKPD_TYPE3*/506507#ifdef PHYDM_COMPILE_CCKPD_TYPE4508void phydm_write_cck_pd_type4(void *dm_void, enum cckpd_lv lv,509enum cckpd_mode mode)510{511struct dm_struct *dm = (struct dm_struct *)dm_void;512struct phydm_cckpd_struct *cckpd_t = &dm->dm_cckpd_table;513u32 val = 0;514515PHYDM_DBG(dm, DBG_CCKPD, "write CCK CCA parameters(CS_ratio & PD)\n");516switch (mode) {517case CCK_BW20_1R: /*RFBW20_1R*/518{519val = cckpd_t->cck_pd_table_jgr3[0][0][0][lv];520odm_set_bb_reg(dm, R_0x1ac8, 0xff, val);521val = cckpd_t->cck_pd_table_jgr3[0][0][1][lv];522odm_set_bb_reg(dm, R_0x1ad0, 0x1f, val);523} break;524case CCK_BW40_1R: /*RFBW40_1R*/525{526val = cckpd_t->cck_pd_table_jgr3[1][0][0][lv];527odm_set_bb_reg(dm, R_0x1acc, 0xff, val);528val = cckpd_t->cck_pd_table_jgr3[1][0][1][lv];529odm_set_bb_reg(dm, R_0x1ad0, 0x01F00000, val);530} break;531#if (defined(PHYDM_COMPILE_ABOVE_2SS))532case CCK_BW20_2R: /*RFBW20_2R*/533{534val = cckpd_t->cck_pd_table_jgr3[0][1][0][lv];535odm_set_bb_reg(dm, R_0x1ac8, 0xff00, val);536val = cckpd_t->cck_pd_table_jgr3[0][1][1][lv];537odm_set_bb_reg(dm, R_0x1ad0, 0x3e0, val);538} break;539case CCK_BW40_2R: /*RFBW40_2R*/540{541val = cckpd_t->cck_pd_table_jgr3[1][1][0][lv];542odm_set_bb_reg(dm, R_0x1acc, 0xff00, val);543val = cckpd_t->cck_pd_table_jgr3[1][1][1][lv];544odm_set_bb_reg(dm, R_0x1ad0, 0x3E000000, val);545} break;546#endif547#if (defined(PHYDM_COMPILE_ABOVE_3SS))548case CCK_BW20_3R: /*RFBW20_3R*/549{550val = cckpd_t->cck_pd_table_jgr3[0][2][0][lv];551odm_set_bb_reg(dm, R_0x1ac8, 0xff0000, val);552val = cckpd_t->cck_pd_table_jgr3[0][2][1][lv];553odm_set_bb_reg(dm, R_0x1ad0, 0x7c00, val);554} break;555case CCK_BW40_3R: /*RFBW40_3R*/556{557val = cckpd_t->cck_pd_table_jgr3[1][2][0][lv];558odm_set_bb_reg(dm, R_0x1acc, 0xff0000, val);559val = cckpd_t->cck_pd_table_jgr3[1][2][1][lv] & 0x3;560odm_set_bb_reg(dm, R_0x1ad0, 0xC0000000, val);561val = (cckpd_t->cck_pd_table_jgr3[1][2][1][lv] & 0x1c) >> 2;562odm_set_bb_reg(dm, R_0x1ad4, 0x7, val);563} break;564#endif565#if (defined(PHYDM_COMPILE_ABOVE_4SS))566case CCK_BW20_4R: /*RFBW20_4R*/567{568val = cckpd_t->cck_pd_table_jgr3[0][3][0][lv];569odm_set_bb_reg(dm, R_0x1ac8, 0xff000000, val);570val = cckpd_t->cck_pd_table_jgr3[0][3][1][lv];571odm_set_bb_reg(dm, R_0x1ad0, 0xF8000, val);572} break;573case CCK_BW40_4R: /*RFBW40_4R*/574{575val = cckpd_t->cck_pd_table_jgr3[1][3][0][lv];576odm_set_bb_reg(dm, R_0x1acc, 0xff000000, val);577val = cckpd_t->cck_pd_table_jgr3[1][3][1][lv];578odm_set_bb_reg(dm, R_0x1ad4, 0xf8, val);579} break;580#endif581default:582/*@pr_debug("[%s] warning!\n", __func__);*/583break;584}585}586587void phydm_set_cck_pd_lv_type4(void *dm_void, enum cckpd_lv lv)588{589struct dm_struct *dm = (struct dm_struct *)dm_void;590struct phydm_cckpd_struct *cckpd_t = &dm->dm_cckpd_table;591enum cckpd_mode cck_mode = CCK_BW20_2R;592enum channel_width cck_bw = CHANNEL_WIDTH_20;593u8 cck_n_rx = 0;594u32 val = 0;595/*u32 val_dbg = 0;*/596597PHYDM_DBG(dm, DBG_CCKPD, "%s ======>\n", __func__);598PHYDM_DBG(dm, DBG_CCKPD, "lv: (%d) -> (%d)\n", cckpd_t->cck_pd_lv, lv);599600/*[Check Nrx]*/601cck_n_rx = (u8)odm_get_bb_reg(dm, R_0x1a2c, 0x60000) + 1;602603/*[Check BW]*/604val = odm_get_bb_reg(dm, R_0x9b0, 0xc);605if (val == 0)606cck_bw = CHANNEL_WIDTH_20;607else if (val == 1)608cck_bw = CHANNEL_WIDTH_40;609else610cck_bw = CHANNEL_WIDTH_80;611612/*[Check LV]*/613if (cckpd_t->cck_pd_lv == lv &&614cckpd_t->cck_n_rx == cck_n_rx &&615cckpd_t->cck_bw == cck_bw) {616PHYDM_DBG(dm, DBG_CCKPD, "stay in lv=%d\n", lv);617return;618}619620cckpd_t->cck_bw = cck_bw;621cckpd_t->cck_n_rx = cck_n_rx;622cckpd_t->cck_pd_lv = lv;623cckpd_t->cck_fa_ma = CCK_FA_MA_RESET;624625switch (cck_n_rx) {626case 1: /*1R*/627{628if (cck_bw == CHANNEL_WIDTH_20)629cck_mode = CCK_BW20_1R;630else if (cck_bw == CHANNEL_WIDTH_40)631cck_mode = CCK_BW40_1R;632} break;633#if (defined(PHYDM_COMPILE_ABOVE_2SS))634case 2: /*2R*/635{636if (cck_bw == CHANNEL_WIDTH_20)637cck_mode = CCK_BW20_2R;638else if (cck_bw == CHANNEL_WIDTH_40)639cck_mode = CCK_BW40_2R;640} break;641#endif642#if (defined(PHYDM_COMPILE_ABOVE_3SS))643case 3: /*3R*/644{645if (cck_bw == CHANNEL_WIDTH_20)646cck_mode = CCK_BW20_3R;647else if (cck_bw == CHANNEL_WIDTH_40)648cck_mode = CCK_BW40_3R;649} break;650#endif651#if (defined(PHYDM_COMPILE_ABOVE_4SS))652case 4: /*4R*/653{654if (cck_bw == CHANNEL_WIDTH_20)655cck_mode = CCK_BW20_4R;656else if (cck_bw == CHANNEL_WIDTH_40)657cck_mode = CCK_BW40_4R;658} break;659#endif660default:661/*@pr_debug("[%s] warning!\n", __func__);*/662break;663}664phydm_write_cck_pd_type4(dm, lv, cck_mode);665}666667void phydm_read_cckpd_para_type4(void *dm_void)668{669struct dm_struct *dm = (struct dm_struct *)dm_void;670struct phydm_cckpd_struct *cckpd_t = &dm->dm_cckpd_table;671u8 bw = 0; /*r_RX_RF_BW*/672u8 n_rx = 0;673u8 curr_cck_pd_t[2][4][2];674u32 reg0 = 0;675u32 reg1 = 0;676u32 reg2 = 0;677u32 reg3 = 0;678679bw = (u8)odm_get_bb_reg(dm, R_0x9b0, 0xc);680n_rx = (u8)odm_get_bb_reg(dm, R_0x1a2c, 0x60000) + 1;681682reg0 = odm_get_bb_reg(dm, R_0x1ac8, MASKDWORD);683reg1 = odm_get_bb_reg(dm, R_0x1acc, MASKDWORD);684reg2 = odm_get_bb_reg(dm, R_0x1ad0, MASKDWORD);685reg3 = odm_get_bb_reg(dm, R_0x1ad4, MASKDWORD);686curr_cck_pd_t[0][0][0] = (u8)(reg0 & 0x000000ff);687curr_cck_pd_t[1][0][0] = (u8)(reg1 & 0x000000ff);688curr_cck_pd_t[0][0][1] = (u8)(reg2 & 0x0000001f);689curr_cck_pd_t[1][0][1] = (u8)((reg2 & 0x01f00000) >> 20);690#if (defined(PHYDM_COMPILE_ABOVE_2SS))691if (dm->support_ic_type & PHYDM_IC_ABOVE_2SS) {692curr_cck_pd_t[0][1][0] = (u8)((reg0 & 0x0000ff00) >> 8);693curr_cck_pd_t[1][1][0] = (u8)((reg1 & 0x0000ff00) >> 8);694curr_cck_pd_t[0][1][1] = (u8)((reg2 & 0x000003E0) >> 5);695curr_cck_pd_t[1][1][1] = (u8)((reg2 & 0x3E000000) >> 25);696}697#endif698#if (defined(PHYDM_COMPILE_ABOVE_3SS))699if (dm->support_ic_type & PHYDM_IC_ABOVE_3SS) {700curr_cck_pd_t[0][2][0] = (u8)((reg0 & 0x00ff0000) >> 16);701curr_cck_pd_t[1][2][0] = (u8)((reg1 & 0x00ff0000) >> 16);702curr_cck_pd_t[0][2][1] = (u8)((reg2 & 0x00007C00) >> 10);703curr_cck_pd_t[1][2][1] = (u8)((reg2 & 0xC0000000) >> 30) |704(u8)((reg3 & 0x00000007) << 3);705}706#endif707#if (defined(PHYDM_COMPILE_ABOVE_4SS))708if (dm->support_ic_type & PHYDM_IC_ABOVE_4SS) {709curr_cck_pd_t[0][3][0] = (u8)((reg0 & 0xff000000) >> 24);710curr_cck_pd_t[1][3][0] = (u8)((reg1 & 0xff000000) >> 24);711curr_cck_pd_t[0][3][1] = (u8)((reg2 & 0x000F8000) >> 15);712curr_cck_pd_t[1][3][1] = (u8)((reg3 & 0x000000F8) >> 3);713}714#endif715716PHYDM_DBG(dm, DBG_CCKPD, "bw=%dM, Nrx=%d\n", 20 << bw, n_rx);717PHYDM_DBG(dm, DBG_CCKPD, "lv=%d, readback CS_th=0x%x, PD th=0x%x\n",718cckpd_t->cck_pd_lv,719curr_cck_pd_t[bw][n_rx - 1][1],720curr_cck_pd_t[bw][n_rx - 1][0]);721}722723void phydm_cckpd_type4(void *dm_void)724{725struct dm_struct *dm = (struct dm_struct *)dm_void;726struct phydm_cckpd_struct *cckpd_t = &dm->dm_cckpd_table;727u8 igi = dm->dm_dig_table.cur_ig_value;728enum cckpd_lv lv = 0;729boolean is_update = true;730731PHYDM_DBG(dm, DBG_CCKPD, "%s ======>\n", __func__);732733if (dm->is_linked) {734PHYDM_DBG(dm, DBG_CCKPD, "Linked!!!\n");735if (igi > 0x38 && dm->rssi_min > 32) {736lv = CCK_PD_LV_4;737PHYDM_DBG(dm, DBG_CCKPD, "Order 1\n");738} else if (igi > 0x2a && dm->rssi_min > 32) {739lv = CCK_PD_LV_3;740PHYDM_DBG(dm, DBG_CCKPD, "Order 2\n");741} else if (igi > 0x24 || dm->rssi_min > 24) {742lv = CCK_PD_LV_2;743PHYDM_DBG(dm, DBG_CCKPD, "Order 3\n");744} else {745if (cckpd_t->cck_fa_ma > 1000) {746lv = CCK_PD_LV_1;747PHYDM_DBG(dm, DBG_CCKPD, "Order 4-1\n");748} else if (cckpd_t->cck_fa_ma < 500) {749lv = CCK_PD_LV_0;750PHYDM_DBG(dm, DBG_CCKPD, "Order 4-2\n");751} else {752is_update = false;753PHYDM_DBG(dm, DBG_CCKPD, "Order 4-3\n");754}755}756} else {757PHYDM_DBG(dm, DBG_CCKPD, "UnLinked!!!\n");758if (cckpd_t->cck_fa_ma > 1000) {759lv = CCK_PD_LV_1;760PHYDM_DBG(dm, DBG_CCKPD, "Order 1\n");761} else if (cckpd_t->cck_fa_ma < 500) {762lv = CCK_PD_LV_0;763PHYDM_DBG(dm, DBG_CCKPD, "Order 2\n");764} else {765is_update = false;766PHYDM_DBG(dm, DBG_CCKPD, "Order 3\n");767}768}769770if (is_update) {771phydm_set_cck_pd_lv_type4(dm, lv);772773PHYDM_DBG(dm, DBG_CCKPD, "setting CS_th = 0x%x, PD th = 0x%x\n",774cckpd_t->cck_pd_table_jgr3[cckpd_t->cck_bw]775[cckpd_t->cck_n_rx - 1][1][lv],776cckpd_t->cck_pd_table_jgr3[cckpd_t->cck_bw]777[cckpd_t->cck_n_rx - 1][0][lv]);778}779phydm_read_cckpd_para_type4(dm);780}781782void phydm_cck_pd_init_type4(void *dm_void)783{784struct dm_struct *dm = (struct dm_struct *)dm_void;785struct phydm_cckpd_struct *cckpd_t = &dm->dm_cckpd_table;786u32 reg0 = 0;787u32 reg1 = 0;788u32 reg2 = 0;789u32 reg3 = 0;790u8 pd_step = 0;791u8 cck_bw = 0; /*r_RX_RF_BW*/792u8 cck_n_rx = 0;793u8 val = 0;794u8 i = 0;795796PHYDM_DBG(dm, DBG_CCKPD, "[%s]======>\n", __func__);797798#if 0799/*@800*cckpd_t[0][0][0][0] = 1ac8[7:0] r_PD_lim_RFBW20_1R801*cckpd_t[0][1][0][0] = 1ac8[15:8] r_PD_lim_RFBW20_2R802*cckpd_t[0][2][0][0] = 1ac8[23:16] r_PD_lim_RFBW20_3R803*cckpd_t[0][3][0][0] = 1ac8[31:24] r_PD_lim_RFBW20_4R804*cckpd_t[1][0][0][0] = 1acc[7:0] r_PD_lim_RFBW40_1R805*cckpd_t[1][1][0][0] = 1acc[15:8] r_PD_lim_RFBW40_2R806*cckpd_t[1][2][0][0] = 1acc[23:16] r_PD_lim_RFBW40_3R807*cckpd_t[1][3][0][0] = 1acc[31:24] r_PD_lim_RFBW40_4R808*809*810*cckpd_t[0][0][1][0] = 1ad0[4:0] r_CS_ratio_RFBW20_1R[4:0]811*cckpd_t[0][1][1][0] = 1ad0[9:5] r_CS_ratio_RFBW20_2R[4:0]812*cckpd_t[0][2][1][0] = 1ad0[14:10] r_CS_ratio_RFBW20_3R[4:0]813*cckpd_t[0][3][1][0] = 1ad0[19:15] r_CS_ratio_RFBW20_4R[4:0]814*cckpd_t[1][0][1][0] = 1ad0[24:20] r_CS_ratio_RFBW40_1R[4:0]815*cckpd_t[1][1][1][0] = 1ad0[29:25] r_CS_ratio_RFBW40_2R[4:0]816*cckpd_t[1][2][1][0] = 1ad0[31:30] r_CS_ratio_RFBW40_3R[1:0]817* 1ad4[2:0] r_CS_ratio_RFBW40_3R[4:2]818*cckpd_t[1][3][1][0] = 1ad4[7:3] r_CS_ratio_RFBW40_4R[4:0]819*/820#endif821/*[Check Nrx]*/822cck_n_rx = (u8)odm_get_bb_reg(dm, R_0x1a2c, 0x60000) + 1;823824/*[Check BW]*/825val = (u8)odm_get_bb_reg(dm, R_0x9b0, 0xc);826if (val == 0)827cck_bw = CHANNEL_WIDTH_20;828else if (val == 1)829cck_bw = CHANNEL_WIDTH_40;830else831cck_bw = CHANNEL_WIDTH_80;832833cckpd_t->cck_bw = cck_bw;834cckpd_t->cck_n_rx = cck_n_rx;835reg0 = odm_get_bb_reg(dm, R_0x1ac8, MASKDWORD);836reg1 = odm_get_bb_reg(dm, R_0x1acc, MASKDWORD);837reg2 = odm_get_bb_reg(dm, R_0x1ad0, MASKDWORD);838reg3 = odm_get_bb_reg(dm, R_0x1ad4, MASKDWORD);839840for (i = 0 ; i < CCK_PD_LV_MAX ; i++) {841pd_step = i * 2;842843val = (u8)(reg0 & 0x000000ff) + pd_step;844PHYDM_DBG(dm, DBG_CCKPD, "lvl %d val = %x\n\n", i, val);845cckpd_t->cck_pd_table_jgr3[0][0][0][i] = val;846847val = (u8)(reg1 & 0x000000ff) + pd_step;848cckpd_t->cck_pd_table_jgr3[1][0][0][i] = val;849850val = (u8)(reg2 & 0x0000001F) + pd_step;851cckpd_t->cck_pd_table_jgr3[0][0][1][i] = val;852853val = (u8)((reg2 & 0x01F00000) >> 20) + pd_step;854cckpd_t->cck_pd_table_jgr3[1][0][1][i] = val;855856#ifdef PHYDM_COMPILE_ABOVE_2SS857if (dm->support_ic_type & PHYDM_IC_ABOVE_2SS) {858val = (u8)((reg0 & 0x0000ff00) >> 8) + pd_step;859cckpd_t->cck_pd_table_jgr3[0][1][0][i] = val;860861val = (u8)((reg1 & 0x0000ff00) >> 8) + pd_step;862cckpd_t->cck_pd_table_jgr3[1][1][0][i] = val;863864val = (u8)((reg2 & 0x000003E0) >> 5) + pd_step;865cckpd_t->cck_pd_table_jgr3[0][1][1][i] = val;866867val = (u8)((reg2 & 0x3E000000) >> 25) + pd_step;868cckpd_t->cck_pd_table_jgr3[1][1][1][i] = val;869}870#endif871872#ifdef PHYDM_COMPILE_ABOVE_3SS873if (dm->support_ic_type & PHYDM_IC_ABOVE_3SS) {874val = (u8)((reg0 & 0x00ff0000) >> 16) + pd_step;875cckpd_t->cck_pd_table_jgr3[0][2][0][i] = val;876877val = (u8)((reg1 & 0x00ff0000) >> 16) + pd_step;878cckpd_t->cck_pd_table_jgr3[1][2][0][i] = val;879val = (u8)((reg2 & 0x00007C00) >> 10) + pd_step;880cckpd_t->cck_pd_table_jgr3[0][2][1][i] = val;881val = (u8)(((reg2 & 0xC0000000) >> 30) |882((reg3 & 0x7) << 3)) + pd_step;883cckpd_t->cck_pd_table_jgr3[1][2][1][i] = val;884}885#endif886887#ifdef PHYDM_COMPILE_ABOVE_4SS888if (dm->support_ic_type & PHYDM_IC_ABOVE_4SS) {889val = (u8)((reg0 & 0xff000000) >> 24) + pd_step;890cckpd_t->cck_pd_table_jgr3[0][3][0][i] = val;891892val = (u8)((reg1 & 0xff000000) >> 24) + pd_step;893cckpd_t->cck_pd_table_jgr3[1][3][0][i] = val;894895val = (u8)((reg2 & 0x000F8000) >> 15) + pd_step;896cckpd_t->cck_pd_table_jgr3[0][3][1][i] = val;897898val = (u8)((reg3 & 0x000000F8) >> 3) + pd_step;899cckpd_t->cck_pd_table_jgr3[1][3][1][i] = val;900}901#endif902}903}904905void phydm_invalid_cckpd_type4(void *dm_void)906{907struct dm_struct *dm = (struct dm_struct *)dm_void;908struct phydm_cckpd_struct *cckpd_t = &dm->dm_cckpd_table;909u8 val = 0;910u8 i = 0;911u8 k = 0;912913PHYDM_DBG(dm, DBG_CCKPD, "[%s]======>\n", __func__);914915for (i = 0; i < CCK_PD_LV_MAX; i++) {916for (k = RF_PATH_A; k < dm->num_rf_path; k++) {917val = cckpd_t->cck_pd_table_jgr3[0][k][1][i];918919if (val == INVALID_CS_RATIO_0)920cckpd_t->cck_pd_table_jgr3[0][k][1][i] = 28;921else if (val == INVALID_CS_RATIO_1)922cckpd_t->cck_pd_table_jgr3[0][k][1][i] = 30;923else if (val > MAXVALID_CS_RATIO)924cckpd_t->cck_pd_table_jgr3[0][k][1][i] =925MAXVALID_CS_RATIO;926val = cckpd_t->cck_pd_table_jgr3[1][k][1][i];927928if (val == INVALID_CS_RATIO_0)929cckpd_t->cck_pd_table_jgr3[1][k][1][i] = 28;930else if (val == INVALID_CS_RATIO_1)931cckpd_t->cck_pd_table_jgr3[1][k][1][i] = 30;932else if (val > MAXVALID_CS_RATIO)933cckpd_t->cck_pd_table_jgr3[1][k][1][i] =934MAXVALID_CS_RATIO;935val = cckpd_t->cck_pd_table_jgr3[0][k][0][i];936937if (val > MAXVALID_PD_THRES)938cckpd_t->cck_pd_table_jgr3[0][k][0][i] =939MAXVALID_PD_THRES;940val = cckpd_t->cck_pd_table_jgr3[1][k][0][i];941if (val > MAXVALID_PD_THRES)942cckpd_t->cck_pd_table_jgr3[1][k][0][i] =943MAXVALID_PD_THRES;944}945}946}947948#endif /*#ifdef PHYDM_COMPILE_CCKPD_TYPE4*/949950void phydm_set_cckpd_val(void *dm_void, u32 *val_buf, u8 val_len)951{952struct dm_struct *dm = (struct dm_struct *)dm_void;953struct phydm_cckpd_struct *cckpd_t = &dm->dm_cckpd_table;954enum cckpd_lv lv;955956if (val_len != 1) {957PHYDM_DBG(dm, ODM_COMP_API, "[Error][CCKPD]Need val_len=1\n");958return;959}960961lv = (enum cckpd_lv)val_buf[0];962963if (lv > CCK_PD_LV_4) {964pr_debug("[%s] warning! lv=%d\n", __func__, lv);965return;966}967968switch (cckpd_t->cckpd_hw_type) {969#ifdef PHYDM_COMPILE_CCKPD_TYPE1970case 1:971phydm_set_cckpd_lv_type1(dm, lv);972break;973#endif974#ifdef PHYDM_COMPILE_CCKPD_TYPE2975case 2:976phydm_set_cckpd_lv_type2(dm, lv);977break;978#endif979#ifdef PHYDM_COMPILE_CCKPD_TYPE3980case 3:981phydm_set_cckpd_lv_type3(dm, lv);982break;983#endif984#ifdef PHYDM_COMPILE_CCKPD_TYPE4985case 4:986phydm_set_cck_pd_lv_type4(dm, lv);987break;988#endif989default:990pr_debug("[%s]warning\n", __func__);991break;992}993}994995boolean996phydm_stop_cck_pd_th(void *dm_void)997{998struct dm_struct *dm = (struct dm_struct *)dm_void;9991000if (!(dm->support_ability & (ODM_BB_CCK_PD | ODM_BB_FA_CNT))) {1001PHYDM_DBG(dm, DBG_CCKPD, "Not Support\n");1002return true;1003}10041005if (dm->pause_ability & ODM_BB_CCK_PD) {1006PHYDM_DBG(dm, DBG_CCKPD, "Return: Pause CCKPD in LV=%d\n",1007dm->pause_lv_table.lv_cckpd);1008return true;1009}10101011if (dm->is_linked && (*dm->channel > 36)) {1012PHYDM_DBG(dm, DBG_CCKPD, "Return: 5G CH=%d\n", *dm->channel);1013return true;1014}1015return false;1016}10171018void phydm_cck_pd_th(void *dm_void)1019{1020struct dm_struct *dm = (struct dm_struct *)dm_void;1021struct phydm_fa_struct *fa_t = &dm->false_alm_cnt;1022struct phydm_cckpd_struct *cckpd_t = &dm->dm_cckpd_table;1023u32 cck_fa = fa_t->cnt_cck_fail;1024#ifdef PHYDM_TDMA_DIG_SUPPORT1025struct phydm_fa_acc_struct *fa_acc_t = &dm->false_alm_cnt_acc;1026#endif10271028PHYDM_DBG(dm, DBG_CCKPD, "[%s] ======>\n", __func__);10291030if (phydm_stop_cck_pd_th(dm))1031return;10321033#ifdef PHYDM_TDMA_DIG_SUPPORT1034if (dm->original_dig_restore)1035cck_fa = fa_t->cnt_cck_fail;1036else1037cck_fa = fa_acc_t->cnt_cck_fail_1sec;1038#endif10391040if (cckpd_t->cck_fa_ma == CCK_FA_MA_RESET)1041cckpd_t->cck_fa_ma = cck_fa;1042else1043cckpd_t->cck_fa_ma = (cckpd_t->cck_fa_ma * 3 + cck_fa) >> 2;10441045PHYDM_DBG(dm, DBG_CCKPD,1046"IGI=0x%x, rssi_min=%d, cck_fa=%d, cck_fa_ma=%d\n",1047dm->dm_dig_table.cur_ig_value, dm->rssi_min,1048cck_fa, cckpd_t->cck_fa_ma);10491050switch (cckpd_t->cckpd_hw_type) {1051#ifdef PHYDM_COMPILE_CCKPD_TYPE11052case 1:1053phydm_cckpd_type1(dm);1054break;1055#endif1056#ifdef PHYDM_COMPILE_CCKPD_TYPE21057case 2:1058phydm_cckpd_type2(dm);1059break;1060#endif1061#ifdef PHYDM_COMPILE_CCKPD_TYPE31062case 3:1063phydm_cckpd_type3(dm);1064break;1065#endif1066#ifdef PHYDM_COMPILE_CCKPD_TYPE41067case 4:1068phydm_cckpd_type4(dm);1069break;1070#endif1071default:1072pr_debug("[%s]warning\n", __func__);1073break;1074}1075}10761077void phydm_cck_pd_init(void *dm_void)1078{1079struct dm_struct *dm = (struct dm_struct *)dm_void;1080struct phydm_cckpd_struct *cckpd_t = &dm->dm_cckpd_table;10811082if (dm->support_ic_type & CCK_PD_IC_TYPE1)1083cckpd_t->cckpd_hw_type = 1;1084else if (dm->support_ic_type & CCK_PD_IC_TYPE2)1085cckpd_t->cckpd_hw_type = 2;1086else if (dm->support_ic_type & CCK_PD_IC_TYPE3)1087cckpd_t->cckpd_hw_type = 3;1088else if (dm->support_ic_type & CCK_PD_IC_TYPE4)1089cckpd_t->cckpd_hw_type = 4;10901091PHYDM_DBG(dm, DBG_CCKPD, "[%s] cckpd_hw_type=%d\n",1092__func__, cckpd_t->cckpd_hw_type);10931094cckpd_t->cck_pd_lv = CCK_PD_LV_INIT;1095cckpd_t->cck_n_rx = 0xff;1096cckpd_t->cck_bw = CHANNEL_WIDTH_MAX;10971098switch (cckpd_t->cckpd_hw_type) {1099#ifdef PHYDM_COMPILE_CCKPD_TYPE11100case 1:1101phydm_set_cckpd_lv_type1(dm, CCK_PD_LV_0);1102break;1103#endif1104#ifdef PHYDM_COMPILE_CCKPD_TYPE21105case 2:1106cckpd_t->aaa_default = odm_read_1byte(dm, 0xaaa) & 0x1f;1107phydm_set_cckpd_lv_type2(dm, CCK_PD_LV_0);1108break;1109#endif1110#ifdef PHYDM_COMPILE_CCKPD_TYPE31111case 3:1112phydm_cck_pd_init_type3(dm);1113phydm_set_cckpd_lv_type3(dm, CCK_PD_LV_0);1114break;1115#endif1116#ifdef PHYDM_COMPILE_CCKPD_TYPE41117case 4:1118phydm_cck_pd_init_type4(dm);1119phydm_invalid_cckpd_type4(dm);1120phydm_set_cck_pd_lv_type4(dm, CCK_PD_LV_0);1121break;1122#endif1123default:1124pr_debug("[%s]warning\n", __func__);1125break;1126}1127}1128#endif /*#ifdef PHYDM_SUPPORT_CCKPD*/1129113011311132