u8 //return the final channel plan decision hal_com_get_channel_plan( IN PADAPTER padapter, IN u8 hw_channel_plan, //channel plan from HW (efuse/eeprom) IN u8 sw_channel_plan, //channel plan from SW (registry/module param) IN u8 def_channel_plan, //channel plan used when the former two is invalid IN BOOLEAN AutoLoadFail ) { u8 swConfig; u8 chnlPlan; swConfig = _TRUE; if (!AutoLoadFail) { if (!rtw_is_channel_plan_valid(sw_channel_plan)) swConfig = _FALSE; if (hw_channel_plan & EEPROM_CHANNEL_PLAN_BY_HW_MASK) swConfig = _FALSE; } if (swConfig == _TRUE) chnlPlan = sw_channel_plan; else chnlPlan = hw_channel_plan & (~EEPROM_CHANNEL_PLAN_BY_HW_MASK); if (!rtw_is_channel_plan_valid(chnlPlan)) chnlPlan = def_channel_plan; return chnlPlan; }
/* def_channel_plan: channel plan used when the former two is invalid */ u8 hal_com_get_channel_plan23a(struct rtw_adapter *padapter, u8 hw_channel_plan, u8 sw_channel_plan, u8 def_channel_plan, bool AutoLoadFail) { u8 swConfig; u8 chnlPlan; swConfig = true; if (!AutoLoadFail) { if (!rtw_is_channel_plan_valid(sw_channel_plan)) swConfig = false; if (hw_channel_plan & EEPROM_CHANNEL_PLAN_BY_HW_MASK) swConfig = false; } if (swConfig == true) chnlPlan = sw_channel_plan; else chnlPlan = hw_channel_plan & (~EEPROM_CHANNEL_PLAN_BY_HW_MASK); if (!rtw_is_channel_plan_valid(chnlPlan)) chnlPlan = def_channel_plan; return chnlPlan; }
u8 /* return the final channel plan decision */ hal_com_get_channel_plan(struct adapter *padapter, u8 hw_channel_plan, u8 sw_channel_plan, u8 def_channel_plan, bool load_fail) { u8 sw_cfg; u8 chnlplan; sw_cfg = true; if (!load_fail) { if (!rtw_is_channel_plan_valid(sw_channel_plan)) sw_cfg = false; if (hw_channel_plan & CHAN_PLAN_HW) sw_cfg = false; } if (sw_cfg) chnlplan = sw_channel_plan; else chnlplan = hw_channel_plan & (~CHAN_PLAN_HW); if (!rtw_is_channel_plan_valid(chnlplan)) chnlplan = def_channel_plan; return chnlplan; }
u8 rtw_set_chplan_cmd(struct adapter *padapter, u8 chplan, u8 enqueue) { struct cmd_obj *pcmdobj; struct SetChannelPlan_param *setChannelPlan_param; struct cmd_priv *pcmdpriv = &padapter->cmdpriv; u8 res = _SUCCESS; RT_TRACE(_module_rtl871x_cmd_c_, _drv_notice_, ("+rtw_set_chplan_cmd\n")); /* check input parameter */ if (!rtw_is_channel_plan_valid(chplan)) { res = _FAIL; goto exit; } /* prepare cmd parameter */ setChannelPlan_param = kzalloc(sizeof(struct SetChannelPlan_param), GFP_KERNEL); if (setChannelPlan_param == NULL) { res = _FAIL; goto exit; } setChannelPlan_param->channel_plan = chplan; if (enqueue) { /* need enqueue, prepare cmd_obj and enqueue */ pcmdobj = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL); if (pcmdobj == NULL) { kfree(setChannelPlan_param); res = _FAIL; goto exit; } init_h2fwcmd_w_parm_no_rsp(pcmdobj, setChannelPlan_param, GEN_CMD_CODE(_SetChannelPlan)); res = rtw_enqueue_cmd(pcmdpriv, pcmdobj); } else { /* no need to enqueue, do the cmd hdl directly and free cmd parameter */ if (set_chplan_hdl(padapter, (unsigned char *)setChannelPlan_param) != H2C_SUCCESS) res = _FAIL; kfree(setChannelPlan_param); } /* do something based on res... */ if (res == _SUCCESS) padapter->mlmepriv.ChannelPlan = chplan; exit: return res; }
/* * Description: *Use hardware(efuse), driver parameter(registry) and default channel plan *to decide which one should be used. * * Parameters: *padapter pointer of adapter *hw_channel_plan channel plan from HW (efuse/eeprom) * BIT[7] software configure mode; 0:Enable, 1:disable * BIT[6:0] Channel Plan *sw_channel_plan channel plan from SW (registry/module param) *def_channel_plan channel plan used when HW/SW both invalid *AutoLoadFail efuse autoload fail or not * * Return: *Final channel plan decision * */ u8 hal_com_config_channel_plan( struct adapter *padapter, u8 hw_channel_plan, u8 sw_channel_plan, u8 def_channel_plan, bool AutoLoadFail ) { struct hal_com_data *pHalData; u8 chnlPlan; pHalData = GET_HAL_DATA(padapter); pHalData->bDisableSWChannelPlan = false; chnlPlan = def_channel_plan; if (0xFF == hw_channel_plan) AutoLoadFail = true; if (!AutoLoadFail) { u8 hw_chnlPlan; hw_chnlPlan = hw_channel_plan & (~EEPROM_CHANNEL_PLAN_BY_HW_MASK); if (rtw_is_channel_plan_valid(hw_chnlPlan)) { #ifndef CONFIG_SW_CHANNEL_PLAN if (hw_channel_plan & EEPROM_CHANNEL_PLAN_BY_HW_MASK) pHalData->bDisableSWChannelPlan = true; #endif /* !CONFIG_SW_CHANNEL_PLAN */ chnlPlan = hw_chnlPlan; } } if ( (false == pHalData->bDisableSWChannelPlan) && rtw_is_channel_plan_valid(sw_channel_plan) ) chnlPlan = sw_channel_plan; return chnlPlan; }