diff options
Diffstat (limited to 'drivers/net/wireless/sd8897/mlan/mlan_uap_ioctl.c')
-rw-r--r-- | drivers/net/wireless/sd8897/mlan/mlan_uap_ioctl.c | 2045 |
1 files changed, 1050 insertions, 995 deletions
diff --git a/drivers/net/wireless/sd8897/mlan/mlan_uap_ioctl.c b/drivers/net/wireless/sd8897/mlan/mlan_uap_ioctl.c index 7f37c3db27a6..48e49e174ca2 100644 --- a/drivers/net/wireless/sd8897/mlan/mlan_uap_ioctl.c +++ b/drivers/net/wireless/sd8897/mlan/mlan_uap_ioctl.c @@ -1,20 +1,20 @@ /** @file mlan_uap_ioctl.c * - * @brief This file contains the handling of AP mode ioctls - * - * Copyright (C) 2009-2011, Marvell International Ltd. - * - * This software file (the "File") is distributed by Marvell International - * Ltd. under the terms of the GNU General Public License Version 2, June 1991 - * (the "License"). You may use, redistribute and/or modify this File in - * accordance with the terms and conditions of the License, a copy of which + * @brief This file contains the handling of AP mode ioctls + * + * Copyright (C) 2009-2011, Marvell International Ltd. + * + * This software file (the "File") is distributed by Marvell International + * Ltd. under the terms of the GNU General Public License Version 2, June 1991 + * (the "License"). You may use, redistribute and/or modify this File in + * accordance with the terms and conditions of the License, a copy of which * is available by writing to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA or on the * worldwide web at http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. * - * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE - * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE - * ARE EXPRESSLY DISCLAIMED. The License provides additional details about + * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE + * IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE + * ARE EXPRESSLY DISCLAIMED. The License provides additional details about * this warranty disclaimer. */ @@ -45,7 +45,7 @@ extern t_u8 tos_to_tid_inv[]; /******************************************************** Local Functions ********************************************************/ -/** +/** * @brief Stop BSS * * @param pmadapter A pointer to mlan_adapter structure @@ -55,22 +55,22 @@ extern t_u8 tos_to_tid_inv[]; */ static mlan_status wlan_uap_bss_ioctl_stop(IN pmlan_adapter pmadapter, - IN pmlan_ioctl_req pioctl_req) + IN pmlan_ioctl_req pioctl_req) { - mlan_status ret = MLAN_STATUS_SUCCESS; - pmlan_private pmpriv = pmadapter->priv[pioctl_req->bss_index]; + mlan_status ret = MLAN_STATUS_SUCCESS; + pmlan_private pmpriv = pmadapter->priv[pioctl_req->bss_index]; - ENTER(); + ENTER(); - ret = wlan_prepare_cmd(pmpriv, - HOST_CMD_APCMD_BSS_STOP, - HostCmd_ACT_GEN_SET, - 0, (t_void *) pioctl_req, MNULL); - if (ret == MLAN_STATUS_SUCCESS) - ret = MLAN_STATUS_PENDING; + ret = wlan_prepare_cmd(pmpriv, + HOST_CMD_APCMD_BSS_STOP, + HostCmd_ACT_GEN_SET, + 0, (t_void *) pioctl_req, MNULL); + if (ret == MLAN_STATUS_SUCCESS) + ret = MLAN_STATUS_PENDING; - LEAVE(); - return ret; + LEAVE(); + return ret; } /** @@ -85,93 +85,106 @@ wlan_uap_bss_ioctl_stop(IN pmlan_adapter pmadapter, static mlan_status wlan_uap_callback_bss_ioctl_start(IN t_void * priv) { - mlan_status ret = MLAN_STATUS_SUCCESS; - mlan_private *pmpriv = (mlan_private *) priv; - mlan_callbacks *pcb = (mlan_callbacks *) & pmpriv->adapter->callbacks; - wlan_uap_get_info_cb_t *puap_state_chan_cb = &pmpriv->uap_state_chan_cb; - t_u8 old_channel; - - ENTER(); - /* clear callback now that we're here */ - puap_state_chan_cb->get_chan_callback = MNULL; - - /* - * Check if the region and channel requires we check for radar. - */ - if ((puap_state_chan_cb->band_config & BAND_CONFIG_5GHZ) && - wlan_11h_radar_detect_required(pmpriv, puap_state_chan_cb->channel)) { - /* first check if channel is under NOP */ - if (wlan_11h_is_channel_under_nop(pmpriv->adapter, - puap_state_chan_cb->channel)) { - /* recently we've seen radar on this channel */ - ret = MLAN_STATUS_FAILURE; - } - - /* Check cached radar check on the channel */ - if (ret == MLAN_STATUS_SUCCESS) - ret = - wlan_11h_check_chan_report(pmpriv, puap_state_chan_cb->channel); - - /* Found radar: try to switch to a non-dfs channel */ - if (ret != MLAN_STATUS_SUCCESS) { - old_channel = puap_state_chan_cb->channel; - ret = - wlan_11h_switch_non_dfs_chan(pmpriv, - &puap_state_chan_cb->channel); - - if (ret == MLAN_STATUS_SUCCESS) { - ret = wlan_uap_set_channel(pmpriv, - pmpriv->uap_state_chan_cb. - band_config, - puap_state_chan_cb->channel); - if (ret == MLAN_STATUS_SUCCESS) { - PRINTM(MMSG, "Radar found on channel %d," - "switch to new channel %d.\n", - old_channel, puap_state_chan_cb->channel); - } else { - PRINTM(MMSG, "Radar found on channel %d," - " switch to new channel %d failed.\n", - old_channel, puap_state_chan_cb->channel); - pcb->moal_ioctl_complete(pmpriv->adapter->pmoal_handle, - puap_state_chan_cb-> - pioctl_req_curr, - MLAN_STATUS_FAILURE); - goto done; - } - } else { - PRINTM(MMSG, - "Radar found on channel %d, no switch channel available.\n", - old_channel); - /* No command sent with the ioctl, need manually signal - completion */ - pcb->moal_ioctl_complete(pmpriv->adapter->pmoal_handle, - puap_state_chan_cb->pioctl_req_curr, - MLAN_STATUS_FAILURE); - goto done; - } - } else { - PRINTM(MINFO, "No Radar found on channel %d\n", - puap_state_chan_cb->channel); - } - } - - /* else okay to send command: not DFS channel or no radar */ - ret = wlan_prepare_cmd(pmpriv, - HOST_CMD_APCMD_BSS_START, - HostCmd_ACT_GEN_SET, - 0, - (t_void *) puap_state_chan_cb->pioctl_req_curr, - MNULL); - if (ret == MLAN_STATUS_SUCCESS) - ret = MLAN_STATUS_PENDING; - - done: - puap_state_chan_cb->pioctl_req_curr = MNULL; // prevent re-use - LEAVE(); - return ret; + mlan_status ret = MLAN_STATUS_SUCCESS; + mlan_private *pmpriv = (mlan_private *) priv; + mlan_callbacks *pcb = (mlan_callbacks *) & pmpriv->adapter->callbacks; + wlan_uap_get_info_cb_t *puap_state_chan_cb = &pmpriv->uap_state_chan_cb; + t_u8 old_channel; + + ENTER(); + /* clear callback now that we're here */ + puap_state_chan_cb->get_chan_callback = MNULL; + + /* + * Check if the region and channel requires we check for radar. + */ + if ((puap_state_chan_cb->band_config & BAND_CONFIG_5GHZ) && + wlan_11h_radar_detect_required(pmpriv, + puap_state_chan_cb->channel)) { + /* first check if channel is under NOP */ + if (wlan_11h_is_channel_under_nop(pmpriv->adapter, + puap_state_chan_cb-> + channel)) { + /* recently we've seen radar on this channel */ + ret = MLAN_STATUS_FAILURE; + } + + /* Check cached radar check on the channel */ + if (ret == MLAN_STATUS_SUCCESS) + ret = wlan_11h_check_chan_report(pmpriv, + puap_state_chan_cb-> + channel); + + /* Found radar: try to switch to a non-dfs channel */ + if (ret != MLAN_STATUS_SUCCESS) { + old_channel = puap_state_chan_cb->channel; + ret = wlan_11h_switch_non_dfs_chan(pmpriv, + &puap_state_chan_cb-> + channel); + + if (ret == MLAN_STATUS_SUCCESS) { + ret = wlan_uap_set_channel(pmpriv, + pmpriv-> + uap_state_chan_cb. + band_config, + puap_state_chan_cb-> + channel); + if (ret == MLAN_STATUS_SUCCESS) { + PRINTM(MMSG, + "Radar found on channel %d," + "switch to new channel %d.\n", + old_channel, + puap_state_chan_cb->channel); + } else { + PRINTM(MMSG, + "Radar found on channel %d," + " switch to new channel %d failed.\n", + old_channel, + puap_state_chan_cb->channel); + pcb->moal_ioctl_complete(pmpriv-> + adapter-> + pmoal_handle, + puap_state_chan_cb-> + pioctl_req_curr, + MLAN_STATUS_FAILURE); + goto done; + } + } else { + PRINTM(MMSG, + "Radar found on channel %d, no switch channel available.\n", + old_channel); + /* No command sent with the ioctl, need + manually signal completion */ + pcb->moal_ioctl_complete(pmpriv->adapter-> + pmoal_handle, + puap_state_chan_cb-> + pioctl_req_curr, + MLAN_STATUS_FAILURE); + goto done; + } + } else { + PRINTM(MINFO, "No Radar found on channel %d\n", + puap_state_chan_cb->channel); + } + } + + /* else okay to send command: not DFS channel or no radar */ + ret = wlan_prepare_cmd(pmpriv, + HOST_CMD_APCMD_BSS_START, + HostCmd_ACT_GEN_SET, + 0, + (t_void *) puap_state_chan_cb->pioctl_req_curr, + MNULL); + if (ret == MLAN_STATUS_SUCCESS) + ret = MLAN_STATUS_PENDING; + +done: + puap_state_chan_cb->pioctl_req_curr = MNULL; // prevent re-use + LEAVE(); + return ret; } -/** +/** * @brief Start BSS * * @param pmadapter A pointer to mlan_adapter structure @@ -184,29 +197,29 @@ wlan_uap_callback_bss_ioctl_start(IN t_void * priv) */ static mlan_status wlan_uap_bss_ioctl_start(IN pmlan_adapter pmadapter, - IN pmlan_ioctl_req pioctl_req) + IN pmlan_ioctl_req pioctl_req) { - mlan_status ret = MLAN_STATUS_SUCCESS; - pmlan_private pmpriv = pmadapter->priv[pioctl_req->bss_index]; + mlan_status ret = MLAN_STATUS_SUCCESS; + pmlan_private pmpriv = pmadapter->priv[pioctl_req->bss_index]; - ENTER(); + ENTER(); - /* First check channel report, defer BSS_START CMD to callback. */ - /* store params, issue command to get UAP channel, whose CMD_RESP will - callback remainder of bss_start handling */ - pmpriv->uap_state_chan_cb.pioctl_req_curr = pioctl_req; - pmpriv->uap_state_chan_cb.get_chan_callback = - wlan_uap_callback_bss_ioctl_start; + /* First check channel report, defer BSS_START CMD to callback. */ + /* store params, issue command to get UAP channel, whose CMD_RESP will + callback remainder of bss_start handling */ + pmpriv->uap_state_chan_cb.pioctl_req_curr = pioctl_req; + pmpriv->uap_state_chan_cb.get_chan_callback = + wlan_uap_callback_bss_ioctl_start; - ret = wlan_uap_get_channel(pmpriv); - if (ret == MLAN_STATUS_SUCCESS) - ret = MLAN_STATUS_PENDING; + ret = wlan_uap_get_channel(pmpriv); + if (ret == MLAN_STATUS_SUCCESS) + ret = MLAN_STATUS_PENDING; - LEAVE(); - return ret; + LEAVE(); + return ret; } -/** +/** * @brief reset BSS * * @param pmadapter A pointer to mlan_adapter structure @@ -216,48 +229,48 @@ wlan_uap_bss_ioctl_start(IN pmlan_adapter pmadapter, */ static mlan_status wlan_uap_bss_ioctl_reset(IN pmlan_adapter pmadapter, - IN pmlan_ioctl_req pioctl_req) + IN pmlan_ioctl_req pioctl_req) { - mlan_status ret = MLAN_STATUS_SUCCESS; - pmlan_private pmpriv = pmadapter->priv[pioctl_req->bss_index]; - t_u8 i = 0; - - ENTER(); - - /* - * Reset any uap private parameters here - */ - for (i = 0; i < pmadapter->max_mgmt_ie_index; i++) { - memset(pmadapter, &pmpriv->mgmt_ie[i], 0, sizeof(custom_ie)); - } - pmpriv->add_ba_param.timeout = MLAN_DEFAULT_BLOCK_ACK_TIMEOUT; - pmpriv->add_ba_param.tx_win_size = MLAN_UAP_AMPDU_DEF_TXWINSIZE; - pmpriv->add_ba_param.rx_win_size = MLAN_UAP_AMPDU_DEF_RXWINSIZE; - for (i = 0; i < MAX_NUM_TID; i++) { - pmpriv->aggr_prio_tbl[i].ampdu_user = tos_to_tid_inv[i]; - pmpriv->aggr_prio_tbl[i].amsdu = BA_STREAM_NOT_ALLOWED; - pmpriv->addba_reject[i] = ADDBA_RSP_STATUS_ACCEPT; - } - pmpriv->aggr_prio_tbl[6].ampdu_user = - pmpriv->aggr_prio_tbl[7].ampdu_user = BA_STREAM_NOT_ALLOWED; - - /* hs_configured, hs_activated are reset by main loop */ - pmadapter->hs_cfg.conditions = HOST_SLEEP_DEF_COND; - pmadapter->hs_cfg.gpio = HOST_SLEEP_DEF_GPIO; - pmadapter->hs_cfg.gap = HOST_SLEEP_DEF_GAP; - - ret = wlan_prepare_cmd(pmpriv, - HOST_CMD_APCMD_SYS_RESET, - HostCmd_ACT_GEN_SET, - 0, (t_void *) pioctl_req, MNULL); - if (ret == MLAN_STATUS_SUCCESS) - ret = MLAN_STATUS_PENDING; - - LEAVE(); - return ret; + mlan_status ret = MLAN_STATUS_SUCCESS; + pmlan_private pmpriv = pmadapter->priv[pioctl_req->bss_index]; + t_u8 i = 0; + + ENTER(); + + /* + * Reset any uap private parameters here + */ + for (i = 0; i < pmadapter->max_mgmt_ie_index; i++) { + memset(pmadapter, &pmpriv->mgmt_ie[i], 0, sizeof(custom_ie)); + } + pmpriv->add_ba_param.timeout = MLAN_DEFAULT_BLOCK_ACK_TIMEOUT; + pmpriv->add_ba_param.tx_win_size = MLAN_UAP_AMPDU_DEF_TXWINSIZE; + pmpriv->add_ba_param.rx_win_size = MLAN_UAP_AMPDU_DEF_RXWINSIZE; + for (i = 0; i < MAX_NUM_TID; i++) { + pmpriv->aggr_prio_tbl[i].ampdu_user = tos_to_tid_inv[i]; + pmpriv->aggr_prio_tbl[i].amsdu = BA_STREAM_NOT_ALLOWED; + pmpriv->addba_reject[i] = ADDBA_RSP_STATUS_ACCEPT; + } + pmpriv->aggr_prio_tbl[6].ampdu_user = + pmpriv->aggr_prio_tbl[7].ampdu_user = BA_STREAM_NOT_ALLOWED; + + /* hs_configured, hs_activated are reset by main loop */ + pmadapter->hs_cfg.conditions = HOST_SLEEP_DEF_COND; + pmadapter->hs_cfg.gpio = HOST_SLEEP_DEF_GPIO; + pmadapter->hs_cfg.gap = HOST_SLEEP_DEF_GAP; + + ret = wlan_prepare_cmd(pmpriv, + HOST_CMD_APCMD_SYS_RESET, + HostCmd_ACT_GEN_SET, + 0, (t_void *) pioctl_req, MNULL); + if (ret == MLAN_STATUS_SUCCESS) + ret = MLAN_STATUS_PENDING; + + LEAVE(); + return ret; } -/** +/** * @brief Set/Get MAC address * * @param pmadapter A pointer to mlan_adapter structure @@ -267,34 +280,34 @@ wlan_uap_bss_ioctl_reset(IN pmlan_adapter pmadapter, */ static mlan_status wlan_uap_bss_ioctl_mac_address(IN pmlan_adapter pmadapter, - IN pmlan_ioctl_req pioctl_req) + IN pmlan_ioctl_req pioctl_req) { - mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; - mlan_ds_bss *bss = MNULL; - mlan_status ret = MLAN_STATUS_SUCCESS; - t_u16 cmd_action = 0; - - ENTER(); - - bss = (mlan_ds_bss *) pioctl_req->pbuf; - if (pioctl_req->action == MLAN_ACT_SET) { - memcpy(pmadapter, pmpriv->curr_addr, &bss->param.mac_addr, - MLAN_MAC_ADDR_LENGTH); - cmd_action = HostCmd_ACT_GEN_SET; - } else - cmd_action = HostCmd_ACT_GEN_GET; - /* Send request to firmware */ - ret = wlan_prepare_cmd(pmpriv, HOST_CMD_APCMD_SYS_CONFIGURE, - cmd_action, 0, (t_void *) pioctl_req, MNULL); - - if (ret == MLAN_STATUS_SUCCESS) - ret = MLAN_STATUS_PENDING; - - LEAVE(); - return ret; + mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; + mlan_ds_bss *bss = MNULL; + mlan_status ret = MLAN_STATUS_SUCCESS; + t_u16 cmd_action = 0; + + ENTER(); + + bss = (mlan_ds_bss *) pioctl_req->pbuf; + if (pioctl_req->action == MLAN_ACT_SET) { + memcpy(pmadapter, pmpriv->curr_addr, &bss->param.mac_addr, + MLAN_MAC_ADDR_LENGTH); + cmd_action = HostCmd_ACT_GEN_SET; + } else + cmd_action = HostCmd_ACT_GEN_GET; + /* Send request to firmware */ + ret = wlan_prepare_cmd(pmpriv, HOST_CMD_APCMD_SYS_CONFIGURE, + cmd_action, 0, (t_void *) pioctl_req, MNULL); + + if (ret == MLAN_STATUS_SUCCESS) + ret = MLAN_STATUS_PENDING; + + LEAVE(); + return ret; } -/** +/** * @brief Get Uap statistics * * @param pmadapter A pointer to mlan_adapter structure @@ -305,23 +318,23 @@ wlan_uap_bss_ioctl_mac_address(IN pmlan_adapter pmadapter, static mlan_status wlan_uap_get_stats(IN pmlan_adapter pmadapter, IN pmlan_ioctl_req pioctl_req) { - mlan_status ret = MLAN_STATUS_SUCCESS; - pmlan_private pmpriv = pmadapter->priv[pioctl_req->bss_index]; + mlan_status ret = MLAN_STATUS_SUCCESS; + pmlan_private pmpriv = pmadapter->priv[pioctl_req->bss_index]; - ENTER(); + ENTER(); - ret = wlan_prepare_cmd(pmpriv, - HostCmd_CMD_802_11_SNMP_MIB, - HostCmd_ACT_GEN_GET, - 0, (t_void *) pioctl_req, MNULL); - if (ret == MLAN_STATUS_SUCCESS) - ret = MLAN_STATUS_PENDING; + ret = wlan_prepare_cmd(pmpriv, + HostCmd_CMD_802_11_SNMP_MIB, + HostCmd_ACT_GEN_GET, + 0, (t_void *) pioctl_req, MNULL); + if (ret == MLAN_STATUS_SUCCESS) + ret = MLAN_STATUS_PENDING; - LEAVE(); - return ret; + LEAVE(); + return ret; } -/** +/** * @brief Set/Get AP config * * @param pmadapter A pointer to mlan_adapter structure @@ -331,31 +344,31 @@ wlan_uap_get_stats(IN pmlan_adapter pmadapter, IN pmlan_ioctl_req pioctl_req) */ static mlan_status wlan_uap_bss_ioctl_config(IN pmlan_adapter pmadapter, - IN pmlan_ioctl_req pioctl_req) + IN pmlan_ioctl_req pioctl_req) { - mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; - mlan_status ret = MLAN_STATUS_SUCCESS; - t_u16 cmd_action = 0; + mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; + mlan_status ret = MLAN_STATUS_SUCCESS; + t_u16 cmd_action = 0; - ENTER(); + ENTER(); - if (pioctl_req->action == MLAN_ACT_SET) - cmd_action = HostCmd_ACT_GEN_SET; - else - cmd_action = HostCmd_ACT_GEN_GET; + if (pioctl_req->action == MLAN_ACT_SET) + cmd_action = HostCmd_ACT_GEN_SET; + else + cmd_action = HostCmd_ACT_GEN_GET; - /* Send request to firmware */ - ret = wlan_prepare_cmd(pmpriv, HOST_CMD_APCMD_SYS_CONFIGURE, - cmd_action, 0, (t_void *) pioctl_req, MNULL); + /* Send request to firmware */ + ret = wlan_prepare_cmd(pmpriv, HOST_CMD_APCMD_SYS_CONFIGURE, + cmd_action, 0, (t_void *) pioctl_req, MNULL); - if (ret == MLAN_STATUS_SUCCESS) - ret = MLAN_STATUS_PENDING; + if (ret == MLAN_STATUS_SUCCESS) + ret = MLAN_STATUS_PENDING; - LEAVE(); - return ret; + LEAVE(); + return ret; } -/** +/** * @brief deauth sta * * @param pmadapter A pointer to mlan_adapter structure @@ -365,30 +378,30 @@ wlan_uap_bss_ioctl_config(IN pmlan_adapter pmadapter, */ static mlan_status wlan_uap_bss_ioctl_deauth_sta(IN pmlan_adapter pmadapter, - IN pmlan_ioctl_req pioctl_req) + IN pmlan_ioctl_req pioctl_req) { - mlan_status ret = MLAN_STATUS_SUCCESS; - pmlan_private pmpriv = pmadapter->priv[pioctl_req->bss_index]; - mlan_ds_bss *bss = MNULL; - - ENTER(); - - bss = (mlan_ds_bss *) pioctl_req->pbuf; - ret = wlan_prepare_cmd(pmpriv, - HOST_CMD_APCMD_STA_DEAUTH, - HostCmd_ACT_GEN_SET, - 0, - (t_void *) pioctl_req, - (t_void *) & bss->param.deauth_param); - if (ret == MLAN_STATUS_SUCCESS) - ret = MLAN_STATUS_PENDING; - - LEAVE(); - return ret; + mlan_status ret = MLAN_STATUS_SUCCESS; + pmlan_private pmpriv = pmadapter->priv[pioctl_req->bss_index]; + mlan_ds_bss *bss = MNULL; + + ENTER(); + + bss = (mlan_ds_bss *) pioctl_req->pbuf; + ret = wlan_prepare_cmd(pmpriv, + HOST_CMD_APCMD_STA_DEAUTH, + HostCmd_ACT_GEN_SET, + 0, + (t_void *) pioctl_req, + (t_void *) & bss->param.deauth_param); + if (ret == MLAN_STATUS_SUCCESS) + ret = MLAN_STATUS_PENDING; + + LEAVE(); + return ret; } -/** - * @brief Get station list +/** + * @brief Get station list * * @param pmadapter A pointer to mlan_adapter structure * @param pioctl_req A pointer to ioctl request buffer @@ -398,25 +411,25 @@ wlan_uap_bss_ioctl_deauth_sta(IN pmlan_adapter pmadapter, static mlan_status wlan_uap_get_sta_list(IN pmlan_adapter pmadapter, IN pmlan_ioctl_req pioctl_req) { - pmlan_private pmpriv = pmadapter->priv[pioctl_req->bss_index]; - mlan_status ret = MLAN_STATUS_SUCCESS; + pmlan_private pmpriv = pmadapter->priv[pioctl_req->bss_index]; + mlan_status ret = MLAN_STATUS_SUCCESS; - ENTER(); + ENTER(); - /* Send request to firmware */ - ret = wlan_prepare_cmd(pmpriv, - HOST_CMD_APCMD_STA_LIST, - HostCmd_ACT_GEN_GET, - 0, (t_void *) pioctl_req, MNULL); + /* Send request to firmware */ + ret = wlan_prepare_cmd(pmpriv, + HOST_CMD_APCMD_STA_LIST, + HostCmd_ACT_GEN_GET, + 0, (t_void *) pioctl_req, MNULL); - if (ret == MLAN_STATUS_SUCCESS) - ret = MLAN_STATUS_PENDING; + if (ret == MLAN_STATUS_SUCCESS) + ret = MLAN_STATUS_PENDING; - LEAVE(); - return ret; + LEAVE(); + return ret; } -/** +/** * @brief soft_reset * * @param pmadapter A pointer to mlan_adapter structure @@ -426,25 +439,25 @@ wlan_uap_get_sta_list(IN pmlan_adapter pmadapter, IN pmlan_ioctl_req pioctl_req) */ static mlan_status wlan_uap_misc_ioctl_soft_reset(IN pmlan_adapter pmadapter, - IN pmlan_ioctl_req pioctl_req) + IN pmlan_ioctl_req pioctl_req) { - mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; - mlan_status ret = MLAN_STATUS_SUCCESS; + mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; + mlan_status ret = MLAN_STATUS_SUCCESS; - ENTER(); + ENTER(); - ret = wlan_prepare_cmd(pmpriv, - HostCmd_CMD_SOFT_RESET, - HostCmd_ACT_GEN_SET, - 0, (t_void *) pioctl_req, MNULL); - if (ret == MLAN_STATUS_SUCCESS) - ret = MLAN_STATUS_PENDING; + ret = wlan_prepare_cmd(pmpriv, + HostCmd_CMD_SOFT_RESET, + HostCmd_ACT_GEN_SET, + 0, (t_void *) pioctl_req, MNULL); + if (ret == MLAN_STATUS_SUCCESS) + ret = MLAN_STATUS_PENDING; - LEAVE(); - return ret; + LEAVE(); + return ret; } -/** +/** * @brief Tx data pause * * @param pmadapter A pointer to mlan_adapter structure @@ -454,32 +467,33 @@ wlan_uap_misc_ioctl_soft_reset(IN pmlan_adapter pmadapter, */ static mlan_status wlan_uap_misc_ioctl_txdatapause(IN pmlan_adapter pmadapter, - IN pmlan_ioctl_req pioctl_req) + IN pmlan_ioctl_req pioctl_req) { - mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; - mlan_ds_misc_cfg *pmisc = (mlan_ds_misc_cfg *) pioctl_req->pbuf; - mlan_status ret = MLAN_STATUS_SUCCESS; - t_u16 cmd_action = 0; - - ENTER(); - - if (pioctl_req->action == MLAN_ACT_SET) - cmd_action = HostCmd_ACT_GEN_SET; - else - cmd_action = HostCmd_ACT_GEN_GET; - ret = wlan_prepare_cmd(pmpriv, - HostCmd_CMD_CFG_TX_DATA_PAUSE, - cmd_action, - 0, - (t_void *) pioctl_req, &(pmisc->param.tx_datapause)); - if (ret == MLAN_STATUS_SUCCESS) - ret = MLAN_STATUS_PENDING; - - LEAVE(); - return ret; + mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; + mlan_ds_misc_cfg *pmisc = (mlan_ds_misc_cfg *) pioctl_req->pbuf; + mlan_status ret = MLAN_STATUS_SUCCESS; + t_u16 cmd_action = 0; + + ENTER(); + + if (pioctl_req->action == MLAN_ACT_SET) + cmd_action = HostCmd_ACT_GEN_SET; + else + cmd_action = HostCmd_ACT_GEN_GET; + ret = wlan_prepare_cmd(pmpriv, + HostCmd_CMD_CFG_TX_DATA_PAUSE, + cmd_action, + 0, + (t_void *) pioctl_req, + &(pmisc->param.tx_datapause)); + if (ret == MLAN_STATUS_SUCCESS) + ret = MLAN_STATUS_PENDING; + + LEAVE(); + return ret; } -/** +/** * @brief Set/Get Power mode * * @param pmadapter A pointer to mlan_adapter structure @@ -489,52 +503,53 @@ wlan_uap_misc_ioctl_txdatapause(IN pmlan_adapter pmadapter, */ static mlan_status wlan_uap_pm_ioctl_mode(IN pmlan_adapter pmadapter, - IN pmlan_ioctl_req pioctl_req) + IN pmlan_ioctl_req pioctl_req) { - mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; - mlan_ds_pm_cfg *pm = MNULL; - mlan_status ret = MLAN_STATUS_SUCCESS; - t_u16 cmd_action = 0; - t_u32 cmd_oid = 0; - - ENTER(); - - pm = (mlan_ds_pm_cfg *) pioctl_req->pbuf; - if (pioctl_req->action == MLAN_ACT_SET) { - if (pm->param.ps_mgmt.ps_mode == PS_MODE_INACTIVITY) { - cmd_action = EN_AUTO_PS; - cmd_oid = BITMAP_UAP_INACT_PS; - } else if (pm->param.ps_mgmt.ps_mode == PS_MODE_PERIODIC_DTIM) { - cmd_action = EN_AUTO_PS; - cmd_oid = BITMAP_UAP_DTIM_PS; - } else { - cmd_action = DIS_AUTO_PS; - cmd_oid = BITMAP_UAP_INACT_PS | BITMAP_UAP_DTIM_PS; - } - } else { - cmd_action = GET_PS; - cmd_oid = BITMAP_UAP_INACT_PS | BITMAP_UAP_DTIM_PS; - } - /* Send request to firmware */ - ret = wlan_prepare_cmd(pmpriv, - HostCmd_CMD_802_11_PS_MODE_ENH, - cmd_action, cmd_oid, (t_void *) pioctl_req, - (t_void *) & pm->param.ps_mgmt); - if ((ret == MLAN_STATUS_SUCCESS) && - (pioctl_req->action == MLAN_ACT_SET) && (cmd_action == DIS_AUTO_PS)) { - ret = wlan_prepare_cmd(pmpriv, - HostCmd_CMD_802_11_PS_MODE_ENH, GET_PS, - 0, MNULL, MNULL); - } - if (ret == MLAN_STATUS_SUCCESS) - ret = MLAN_STATUS_PENDING; - - LEAVE(); - return ret; + mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; + mlan_ds_pm_cfg *pm = MNULL; + mlan_status ret = MLAN_STATUS_SUCCESS; + t_u16 cmd_action = 0; + t_u32 cmd_oid = 0; + + ENTER(); + + pm = (mlan_ds_pm_cfg *) pioctl_req->pbuf; + if (pioctl_req->action == MLAN_ACT_SET) { + if (pm->param.ps_mgmt.ps_mode == PS_MODE_INACTIVITY) { + cmd_action = EN_AUTO_PS; + cmd_oid = BITMAP_UAP_INACT_PS; + } else if (pm->param.ps_mgmt.ps_mode == PS_MODE_PERIODIC_DTIM) { + cmd_action = EN_AUTO_PS; + cmd_oid = BITMAP_UAP_DTIM_PS; + } else { + cmd_action = DIS_AUTO_PS; + cmd_oid = BITMAP_UAP_INACT_PS | BITMAP_UAP_DTIM_PS; + } + } else { + cmd_action = GET_PS; + cmd_oid = BITMAP_UAP_INACT_PS | BITMAP_UAP_DTIM_PS; + } + /* Send request to firmware */ + ret = wlan_prepare_cmd(pmpriv, + HostCmd_CMD_802_11_PS_MODE_ENH, + cmd_action, cmd_oid, (t_void *) pioctl_req, + (t_void *) & pm->param.ps_mgmt); + if ((ret == MLAN_STATUS_SUCCESS) && + (pioctl_req->action == MLAN_ACT_SET) && + (cmd_action == DIS_AUTO_PS)) { + ret = wlan_prepare_cmd(pmpriv, + HostCmd_CMD_802_11_PS_MODE_ENH, GET_PS, + 0, MNULL, MNULL); + } + if (ret == MLAN_STATUS_SUCCESS) + ret = MLAN_STATUS_PENDING; + + LEAVE(); + return ret; } -/** - * @brief Set WAPI IE +/** + * @brief Set WAPI IE * * @param priv A pointer to mlan_private structure * @param pioctl_req A pointer to ioctl request buffer @@ -544,47 +559,48 @@ wlan_uap_pm_ioctl_mode(IN pmlan_adapter pmadapter, static mlan_status wlan_uap_set_wapi_ie(mlan_private * priv, pmlan_ioctl_req pioctl_req) { - mlan_ds_misc_cfg *misc = MNULL; - mlan_status ret = MLAN_STATUS_SUCCESS; - - ENTER(); - misc = (mlan_ds_misc_cfg *) pioctl_req->pbuf; - if (misc->param.gen_ie.len) { - if (misc->param.gen_ie.len > sizeof(priv->wapi_ie)) { - PRINTM(MWARN, "failed to copy WAPI IE, too big \n"); - pioctl_req->status_code = MLAN_ERROR_INVALID_PARAMETER; - LEAVE(); - return MLAN_STATUS_FAILURE; - } - memcpy(priv->adapter, priv->wapi_ie, misc->param.gen_ie.ie_data, - misc->param.gen_ie.len); - priv->wapi_ie_len = misc->param.gen_ie.len; - PRINTM(MIOCTL, "Set wapi_ie_len=%d IE=%#x\n", priv->wapi_ie_len, - priv->wapi_ie[0]); - DBG_HEXDUMP(MCMD_D, "wapi_ie", priv->wapi_ie, priv->wapi_ie_len); - if (priv->wapi_ie[0] == WAPI_IE) - priv->sec_info.wapi_enabled = MTRUE; - } else { - memset(priv->adapter, priv->wapi_ie, 0, sizeof(priv->wapi_ie)); - priv->wapi_ie_len = misc->param.gen_ie.len; - PRINTM(MINFO, "Reset wapi_ie_len=%d IE=%#x\n", priv->wapi_ie_len, - priv->wapi_ie[0]); - priv->sec_info.wapi_enabled = MFALSE; - } - - /* Send request to firmware */ - ret = wlan_prepare_cmd(priv, HOST_CMD_APCMD_SYS_CONFIGURE, - HostCmd_ACT_GEN_SET, 0, (t_void *) pioctl_req, - MNULL); - - if (ret == MLAN_STATUS_SUCCESS) - ret = MLAN_STATUS_PENDING; - - LEAVE(); - return ret; + mlan_ds_misc_cfg *misc = MNULL; + mlan_status ret = MLAN_STATUS_SUCCESS; + + ENTER(); + misc = (mlan_ds_misc_cfg *) pioctl_req->pbuf; + if (misc->param.gen_ie.len) { + if (misc->param.gen_ie.len > sizeof(priv->wapi_ie)) { + PRINTM(MWARN, "failed to copy WAPI IE, too big \n"); + pioctl_req->status_code = MLAN_ERROR_INVALID_PARAMETER; + LEAVE(); + return MLAN_STATUS_FAILURE; + } + memcpy(priv->adapter, priv->wapi_ie, misc->param.gen_ie.ie_data, + misc->param.gen_ie.len); + priv->wapi_ie_len = misc->param.gen_ie.len; + PRINTM(MIOCTL, "Set wapi_ie_len=%d IE=%#x\n", priv->wapi_ie_len, + priv->wapi_ie[0]); + DBG_HEXDUMP(MCMD_D, "wapi_ie", priv->wapi_ie, + priv->wapi_ie_len); + if (priv->wapi_ie[0] == WAPI_IE) + priv->sec_info.wapi_enabled = MTRUE; + } else { + memset(priv->adapter, priv->wapi_ie, 0, sizeof(priv->wapi_ie)); + priv->wapi_ie_len = misc->param.gen_ie.len; + PRINTM(MINFO, "Reset wapi_ie_len=%d IE=%#x\n", + priv->wapi_ie_len, priv->wapi_ie[0]); + priv->sec_info.wapi_enabled = MFALSE; + } + + /* Send request to firmware */ + ret = wlan_prepare_cmd(priv, HOST_CMD_APCMD_SYS_CONFIGURE, + HostCmd_ACT_GEN_SET, 0, (t_void *) pioctl_req, + MNULL); + + if (ret == MLAN_STATUS_SUCCESS) + ret = MLAN_STATUS_PENDING; + + LEAVE(); + return ret; } -/** +/** * @brief Set generic IE * * @param pmadapter A pointer to mlan_adapter structure @@ -594,36 +610,37 @@ wlan_uap_set_wapi_ie(mlan_private * priv, pmlan_ioctl_req pioctl_req) */ static mlan_status wlan_uap_misc_ioctl_gen_ie(IN pmlan_adapter pmadapter, - IN pmlan_ioctl_req pioctl_req) + IN pmlan_ioctl_req pioctl_req) { - mlan_status ret = MLAN_STATUS_SUCCESS; - mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; - mlan_ds_misc_cfg *misc = MNULL; - IEEEtypes_VendorHeader_t *pvendor_ie = MNULL; - - ENTER(); - - misc = (mlan_ds_misc_cfg *) pioctl_req->pbuf; - - if ((misc->param.gen_ie.type == MLAN_IE_TYPE_GEN_IE) && - (pioctl_req->action == MLAN_ACT_SET)) { - if (misc->param.gen_ie.len) { - pvendor_ie = - (IEEEtypes_VendorHeader_t *) misc->param.gen_ie.ie_data; - if (pvendor_ie->element_id == WAPI_IE) { - /* IE is a WAPI IE so call set_wapi function */ - ret = wlan_uap_set_wapi_ie(pmpriv, pioctl_req); - } - } else { - /* clear WAPI IE */ - ret = wlan_uap_set_wapi_ie(pmpriv, pioctl_req); - } - } - LEAVE(); - return ret; + mlan_status ret = MLAN_STATUS_SUCCESS; + mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; + mlan_ds_misc_cfg *misc = MNULL; + IEEEtypes_VendorHeader_t *pvendor_ie = MNULL; + + ENTER(); + + misc = (mlan_ds_misc_cfg *) pioctl_req->pbuf; + + if ((misc->param.gen_ie.type == MLAN_IE_TYPE_GEN_IE) && + (pioctl_req->action == MLAN_ACT_SET)) { + if (misc->param.gen_ie.len) { + pvendor_ie = + (IEEEtypes_VendorHeader_t *) misc->param.gen_ie. + ie_data; + if (pvendor_ie->element_id == WAPI_IE) { + /* IE is a WAPI IE so call set_wapi function */ + ret = wlan_uap_set_wapi_ie(pmpriv, pioctl_req); + } + } else { + /* clear WAPI IE */ + ret = wlan_uap_set_wapi_ie(pmpriv, pioctl_req); + } + } + LEAVE(); + return ret; } -/** +/** * @brief Set/Get WAPI status * * @param pmadapter A pointer to mlan_adapter structure @@ -633,34 +650,34 @@ wlan_uap_misc_ioctl_gen_ie(IN pmlan_adapter pmadapter, */ static mlan_status wlan_uap_sec_ioctl_wapi_enable(IN pmlan_adapter pmadapter, - IN pmlan_ioctl_req pioctl_req) + IN pmlan_ioctl_req pioctl_req) { - mlan_status ret = MLAN_STATUS_SUCCESS; - mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; - mlan_ds_sec_cfg *sec = MNULL; - ENTER(); - sec = (mlan_ds_sec_cfg *) pioctl_req->pbuf; - if (pioctl_req->action == MLAN_ACT_GET) { - if (pmpriv->wapi_ie_len) - sec->param.wapi_enabled = MTRUE; - else - sec->param.wapi_enabled = MFALSE; - } else { - if (sec->param.wapi_enabled == MFALSE) { - memset(pmpriv->adapter, pmpriv->wapi_ie, 0, - sizeof(pmpriv->wapi_ie)); - pmpriv->wapi_ie_len = 0; - PRINTM(MINFO, "Reset wapi_ie_len=%d IE=%#x\n", pmpriv->wapi_ie_len, - pmpriv->wapi_ie[0]); - pmpriv->sec_info.wapi_enabled = MFALSE; - } - } - pioctl_req->data_read_written = sizeof(t_u32) + MLAN_SUB_COMMAND_SIZE; - LEAVE(); - return ret; + mlan_status ret = MLAN_STATUS_SUCCESS; + mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; + mlan_ds_sec_cfg *sec = MNULL; + ENTER(); + sec = (mlan_ds_sec_cfg *) pioctl_req->pbuf; + if (pioctl_req->action == MLAN_ACT_GET) { + if (pmpriv->wapi_ie_len) + sec->param.wapi_enabled = MTRUE; + else + sec->param.wapi_enabled = MFALSE; + } else { + if (sec->param.wapi_enabled == MFALSE) { + memset(pmpriv->adapter, pmpriv->wapi_ie, 0, + sizeof(pmpriv->wapi_ie)); + pmpriv->wapi_ie_len = 0; + PRINTM(MINFO, "Reset wapi_ie_len=%d IE=%#x\n", + pmpriv->wapi_ie_len, pmpriv->wapi_ie[0]); + pmpriv->sec_info.wapi_enabled = MFALSE; + } + } + pioctl_req->data_read_written = sizeof(t_u32) + MLAN_SUB_COMMAND_SIZE; + LEAVE(); + return ret; } -/** +/** * @brief Set encrypt key * * @param pmadapter A pointer to mlan_adapter structure @@ -670,37 +687,37 @@ wlan_uap_sec_ioctl_wapi_enable(IN pmlan_adapter pmadapter, */ static mlan_status wlan_uap_sec_ioctl_set_encrypt_key(IN pmlan_adapter pmadapter, - IN pmlan_ioctl_req pioctl_req) + IN pmlan_ioctl_req pioctl_req) { - mlan_status ret = MLAN_STATUS_SUCCESS; - mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; - mlan_ds_sec_cfg *sec = MNULL; - - ENTER(); - sec = (mlan_ds_sec_cfg *) pioctl_req->pbuf; - if (pioctl_req->action != MLAN_ACT_SET) { - pioctl_req->status_code = MLAN_ERROR_IOCTL_INVALID; - LEAVE(); - return MLAN_STATUS_FAILURE; - } - if (!sec->param.encrypt_key.key_len) { - PRINTM(MCMND, "Skip set key with key_len = 0\n"); - LEAVE(); - return ret; - } - ret = wlan_prepare_cmd(pmpriv, - HostCmd_CMD_802_11_KEY_MATERIAL, - HostCmd_ACT_GEN_SET, - KEY_INFO_ENABLED, - (t_void *) pioctl_req, &sec->param.encrypt_key); - - if (ret == MLAN_STATUS_SUCCESS) - ret = MLAN_STATUS_PENDING; - LEAVE(); - return ret; + mlan_status ret = MLAN_STATUS_SUCCESS; + mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; + mlan_ds_sec_cfg *sec = MNULL; + + ENTER(); + sec = (mlan_ds_sec_cfg *) pioctl_req->pbuf; + if (pioctl_req->action != MLAN_ACT_SET) { + pioctl_req->status_code = MLAN_ERROR_IOCTL_INVALID; + LEAVE(); + return MLAN_STATUS_FAILURE; + } + if (!sec->param.encrypt_key.key_len) { + PRINTM(MCMND, "Skip set key with key_len = 0\n"); + LEAVE(); + return ret; + } + ret = wlan_prepare_cmd(pmpriv, + HostCmd_CMD_802_11_KEY_MATERIAL, + HostCmd_ACT_GEN_SET, + KEY_INFO_ENABLED, + (t_void *) pioctl_req, &sec->param.encrypt_key); + + if (ret == MLAN_STATUS_SUCCESS) + ret = MLAN_STATUS_PENDING; + LEAVE(); + return ret; } -/** +/** * @brief Get BSS information * * @param pmadapter A pointer to mlan_adapter structure @@ -711,31 +728,31 @@ wlan_uap_sec_ioctl_set_encrypt_key(IN pmlan_adapter pmadapter, static mlan_status wlan_uap_get_bss_info(IN pmlan_adapter pmadapter, IN pmlan_ioctl_req pioctl_req) { - pmlan_private pmpriv = pmadapter->priv[pioctl_req->bss_index]; - mlan_status ret = MLAN_STATUS_SUCCESS; - mlan_ds_get_info *info; + pmlan_private pmpriv = pmadapter->priv[pioctl_req->bss_index]; + mlan_status ret = MLAN_STATUS_SUCCESS; + mlan_ds_get_info *info; - ENTER(); + ENTER(); - info = (mlan_ds_get_info *) pioctl_req->pbuf; - /* Connection status */ - info->param.bss_info.media_connected = pmpriv->media_connected; + info = (mlan_ds_get_info *) pioctl_req->pbuf; + /* Connection status */ + info->param.bss_info.media_connected = pmpriv->media_connected; - /* Radio status */ - info->param.bss_info.radio_on = pmadapter->radio_on; + /* Radio status */ + info->param.bss_info.radio_on = pmadapter->radio_on; - /* BSSID */ - memcpy(pmadapter, &info->param.bss_info.bssid, pmpriv->curr_addr, - MLAN_MAC_ADDR_LENGTH); - info->param.bss_info.is_hs_configured = pmadapter->is_hs_configured; - pioctl_req->data_read_written = - sizeof(mlan_bss_info) + MLAN_SUB_COMMAND_SIZE; + /* BSSID */ + memcpy(pmadapter, &info->param.bss_info.bssid, pmpriv->curr_addr, + MLAN_MAC_ADDR_LENGTH); + info->param.bss_info.is_hs_configured = pmadapter->is_hs_configured; + pioctl_req->data_read_written = + sizeof(mlan_bss_info) + MLAN_SUB_COMMAND_SIZE; - LEAVE(); - return ret; + LEAVE(); + return ret; } -/** +/** * @brief Set Host Sleep configurations * * @param pmadapter A pointer to mlan_adapter structure @@ -745,65 +762,67 @@ wlan_uap_get_bss_info(IN pmlan_adapter pmadapter, IN pmlan_ioctl_req pioctl_req) */ static mlan_status wlan_uap_pm_ioctl_deepsleep(IN pmlan_adapter pmadapter, - IN pmlan_ioctl_req pioctl_req) + IN pmlan_ioctl_req pioctl_req) { - mlan_status ret = MLAN_STATUS_SUCCESS; - mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; - mlan_ds_pm_cfg *pm = MNULL; - mlan_ds_auto_ds auto_ds; - t_u32 mode; - - ENTER(); - - if (pioctl_req->buf_len < sizeof(mlan_ds_pm_cfg)) { - PRINTM(MWARN, "MLAN bss IOCTL length is too short.\n"); - pioctl_req->data_read_written = 0; - pioctl_req->buf_len_needed = sizeof(mlan_ds_pm_cfg); - pioctl_req->status_code = MLAN_ERROR_INVALID_PARAMETER; - LEAVE(); - return MLAN_STATUS_RESOURCE; - } - pm = (mlan_ds_pm_cfg *) pioctl_req->pbuf; - - if (pioctl_req->action == MLAN_ACT_GET) { - if (pmadapter->is_deep_sleep) { - pm->param.auto_deep_sleep.auto_ds = DEEP_SLEEP_ON; - pm->param.auto_deep_sleep.idletime = pmadapter->idle_time; - } else - pm->param.auto_deep_sleep.auto_ds = DEEP_SLEEP_OFF; - } else { - if (pmadapter->is_deep_sleep && - pm->param.auto_deep_sleep.auto_ds == DEEP_SLEEP_ON) { - PRINTM(MMSG, "uAP already in deep sleep mode\n"); - LEAVE(); - return MLAN_STATUS_FAILURE; - } - if (((mlan_ds_pm_cfg *) pioctl_req->pbuf)->param.auto_deep_sleep. - auto_ds == DEEP_SLEEP_ON) { - auto_ds.auto_ds = DEEP_SLEEP_ON; - mode = EN_AUTO_PS; - PRINTM(MINFO, "Auto Deep Sleep: on\n"); - } else { - mode = DIS_AUTO_PS; - auto_ds.auto_ds = DEEP_SLEEP_OFF; - PRINTM(MINFO, "Auto Deep Sleep: off\n"); - } - if (((mlan_ds_pm_cfg *) pioctl_req->pbuf)->param.auto_deep_sleep. - idletime) - auto_ds.idletime = - ((mlan_ds_pm_cfg *) pioctl_req->pbuf)->param.auto_deep_sleep. - idletime; - else - auto_ds.idletime = pmadapter->idle_time; - ret = wlan_prepare_cmd(pmpriv, - HostCmd_CMD_802_11_PS_MODE_ENH, - (t_u16) mode, - BITMAP_AUTO_DS, (t_void *) pioctl_req, &auto_ds); - if (ret == MLAN_STATUS_SUCCESS) - ret = MLAN_STATUS_PENDING; - } - LEAVE(); - return ret; + mlan_status ret = MLAN_STATUS_SUCCESS; + mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; + mlan_ds_pm_cfg *pm = MNULL; + mlan_ds_auto_ds auto_ds; + t_u32 mode; + + ENTER(); + + if (pioctl_req->buf_len < sizeof(mlan_ds_pm_cfg)) { + PRINTM(MWARN, "MLAN bss IOCTL length is too short.\n"); + pioctl_req->data_read_written = 0; + pioctl_req->buf_len_needed = sizeof(mlan_ds_pm_cfg); + pioctl_req->status_code = MLAN_ERROR_INVALID_PARAMETER; + LEAVE(); + return MLAN_STATUS_RESOURCE; + } + pm = (mlan_ds_pm_cfg *) pioctl_req->pbuf; + + if (pioctl_req->action == MLAN_ACT_GET) { + if (pmadapter->is_deep_sleep) { + pm->param.auto_deep_sleep.auto_ds = DEEP_SLEEP_ON; + pm->param.auto_deep_sleep.idletime = + pmadapter->idle_time; + } else + pm->param.auto_deep_sleep.auto_ds = DEEP_SLEEP_OFF; + } else { + if (pmadapter->is_deep_sleep && + pm->param.auto_deep_sleep.auto_ds == DEEP_SLEEP_ON) { + PRINTM(MMSG, "uAP already in deep sleep mode\n"); + LEAVE(); + return MLAN_STATUS_FAILURE; + } + if (((mlan_ds_pm_cfg *) pioctl_req->pbuf)->param. + auto_deep_sleep.auto_ds == DEEP_SLEEP_ON) { + auto_ds.auto_ds = DEEP_SLEEP_ON; + mode = EN_AUTO_PS; + PRINTM(MINFO, "Auto Deep Sleep: on\n"); + } else { + mode = DIS_AUTO_PS; + auto_ds.auto_ds = DEEP_SLEEP_OFF; + PRINTM(MINFO, "Auto Deep Sleep: off\n"); + } + if (((mlan_ds_pm_cfg *) pioctl_req->pbuf)->param. + auto_deep_sleep.idletime) + auto_ds.idletime = + ((mlan_ds_pm_cfg *) pioctl_req->pbuf)->param. + auto_deep_sleep.idletime; + else + auto_ds.idletime = pmadapter->idle_time; + ret = wlan_prepare_cmd(pmpriv, + HostCmd_CMD_802_11_PS_MODE_ENH, + (t_u16) mode, + BITMAP_AUTO_DS, + (t_void *) pioctl_req, &auto_ds); + if (ret == MLAN_STATUS_SUCCESS) + ret = MLAN_STATUS_PENDING; + } + LEAVE(); + return ret; } /** @@ -817,38 +836,38 @@ wlan_uap_pm_ioctl_deepsleep(IN pmlan_adapter pmadapter, static mlan_status wlan_uap_snmp_mib_11d(IN pmlan_adapter pmadapter, IN pmlan_ioctl_req pioctl_req) { - mlan_status ret = MLAN_STATUS_SUCCESS; - mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; - mlan_ds_snmp_mib *snmp = MNULL; - state_11d_t flag; - - ENTER(); - - if (pioctl_req->buf_len < sizeof(mlan_ds_snmp_mib)) { - PRINTM(MWARN, "MLAN snmp_mib IOCTL length is too short.\n"); - pioctl_req->data_read_written = 0; - pioctl_req->buf_len_needed = sizeof(mlan_ds_snmp_mib); - LEAVE(); - return MLAN_STATUS_RESOURCE; - } - - if ((pioctl_req->action == MLAN_ACT_SET) && pmpriv->uap_bss_started) { - PRINTM(MIOCTL, - "11D setting cannot be changed while UAP bss is started.\n"); - pioctl_req->data_read_written = 0; - LEAVE(); - return MLAN_STATUS_FAILURE; - } - - snmp = (mlan_ds_snmp_mib *) pioctl_req->pbuf; - flag = (snmp->param.oid_value) ? ENABLE_11D : DISABLE_11D; - - ret = wlan_11d_enable(pmpriv, (t_void *) pioctl_req, flag); - if (ret == MLAN_STATUS_SUCCESS) - ret = MLAN_STATUS_PENDING; - - LEAVE(); - return ret; + mlan_status ret = MLAN_STATUS_SUCCESS; + mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; + mlan_ds_snmp_mib *snmp = MNULL; + state_11d_t flag; + + ENTER(); + + if (pioctl_req->buf_len < sizeof(mlan_ds_snmp_mib)) { + PRINTM(MWARN, "MLAN snmp_mib IOCTL length is too short.\n"); + pioctl_req->data_read_written = 0; + pioctl_req->buf_len_needed = sizeof(mlan_ds_snmp_mib); + LEAVE(); + return MLAN_STATUS_RESOURCE; + } + + if ((pioctl_req->action == MLAN_ACT_SET) && pmpriv->uap_bss_started) { + PRINTM(MIOCTL, + "11D setting cannot be changed while UAP bss is started.\n"); + pioctl_req->data_read_written = 0; + LEAVE(); + return MLAN_STATUS_FAILURE; + } + + snmp = (mlan_ds_snmp_mib *) pioctl_req->pbuf; + flag = (snmp->param.oid_value) ? ENABLE_11D : DISABLE_11D; + + ret = wlan_11d_enable(pmpriv, (t_void *) pioctl_req, flag); + if (ret == MLAN_STATUS_SUCCESS) + ret = MLAN_STATUS_PENDING; + + LEAVE(); + return ret; } /** @@ -863,42 +882,44 @@ wlan_uap_snmp_mib_11d(IN pmlan_adapter pmadapter, IN pmlan_ioctl_req pioctl_req) static mlan_status wlan_uap_callback_domain_info(IN t_void * priv) { - mlan_status ret = MLAN_STATUS_SUCCESS; - mlan_private *pmpriv = (mlan_private *) priv; - wlan_uap_get_info_cb_t *puap_state_chan_cb = &pmpriv->uap_state_chan_cb; - mlan_ds_11d_cfg *cfg11d; - t_u8 band; - pmlan_adapter pmadapter = pmpriv->adapter; - pmlan_callbacks pcb = &pmadapter->callbacks; - - ENTER(); - /* clear callback now that we're here */ - puap_state_chan_cb->get_chan_callback = MNULL; - - if (!puap_state_chan_cb->pioctl_req_curr) { - PRINTM(MERROR, "pioctl_req_curr is null\n"); - LEAVE(); - return ret; - } - cfg11d = (mlan_ds_11d_cfg *) puap_state_chan_cb->pioctl_req_curr->pbuf; - band = - (puap_state_chan_cb->band_config & BAND_CONFIG_5GHZ) ? BAND_A : BAND_B; - - ret = - wlan_11d_handle_uap_domain_info(pmpriv, band, cfg11d->param.domain_tlv, - puap_state_chan_cb->pioctl_req_curr); - if (ret == MLAN_STATUS_SUCCESS) - ret = MLAN_STATUS_PENDING; - else { - puap_state_chan_cb->pioctl_req_curr->status_code = MLAN_STATUS_FAILURE; - pcb->moal_ioctl_complete(pmadapter->pmoal_handle, - puap_state_chan_cb->pioctl_req_curr, - MLAN_STATUS_FAILURE); - } - - puap_state_chan_cb->pioctl_req_curr = MNULL; // prevent re-use - LEAVE(); - return ret; + mlan_status ret = MLAN_STATUS_SUCCESS; + mlan_private *pmpriv = (mlan_private *) priv; + wlan_uap_get_info_cb_t *puap_state_chan_cb = &pmpriv->uap_state_chan_cb; + mlan_ds_11d_cfg *cfg11d; + t_u8 band; + pmlan_adapter pmadapter = pmpriv->adapter; + pmlan_callbacks pcb = &pmadapter->callbacks; + + ENTER(); + /* clear callback now that we're here */ + puap_state_chan_cb->get_chan_callback = MNULL; + + if (!puap_state_chan_cb->pioctl_req_curr) { + PRINTM(MERROR, "pioctl_req_curr is null\n"); + LEAVE(); + return ret; + } + cfg11d = (mlan_ds_11d_cfg *) puap_state_chan_cb->pioctl_req_curr->pbuf; + band = (puap_state_chan_cb-> + band_config & BAND_CONFIG_5GHZ) ? BAND_A : BAND_B; + + ret = wlan_11d_handle_uap_domain_info(pmpriv, band, + cfg11d->param.domain_tlv, + puap_state_chan_cb-> + pioctl_req_curr); + if (ret == MLAN_STATUS_SUCCESS) + ret = MLAN_STATUS_PENDING; + else { + puap_state_chan_cb->pioctl_req_curr->status_code = + MLAN_STATUS_FAILURE; + pcb->moal_ioctl_complete(pmadapter->pmoal_handle, + puap_state_chan_cb->pioctl_req_curr, + MLAN_STATUS_FAILURE); + } + + puap_state_chan_cb->pioctl_req_curr = MNULL; // prevent re-use + LEAVE(); + return ret; } /** @@ -913,38 +934,39 @@ wlan_uap_callback_domain_info(IN t_void * priv) static mlan_status wlan_uap_domain_info(IN pmlan_adapter pmadapter, IN pmlan_ioctl_req pioctl_req) { - mlan_status ret = MLAN_STATUS_SUCCESS; - mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; - - ENTER(); - - if (pioctl_req->buf_len < sizeof(mlan_ds_11d_cfg)) { - PRINTM(MWARN, "MLAN 11d_cfg IOCTL length is too short.\n"); - pioctl_req->data_read_written = 0; - pioctl_req->buf_len_needed = sizeof(mlan_ds_11d_cfg); - LEAVE(); - return MLAN_STATUS_RESOURCE; - } - - if ((pioctl_req->action == MLAN_ACT_SET) && pmpriv->uap_bss_started) { - PRINTM(MIOCTL, - "Domain_info cannot be changed while UAP bss is started.\n"); - pioctl_req->data_read_written = 0; - LEAVE(); - return MLAN_STATUS_FAILURE; - } - - /* store params, issue command to get UAP channel, whose CMD_RESP will - callback remainder of domain_info handling */ - pmpriv->uap_state_chan_cb.pioctl_req_curr = pioctl_req; - pmpriv->uap_state_chan_cb.get_chan_callback = wlan_uap_callback_domain_info; - - ret = wlan_uap_get_channel(pmpriv); - if (ret == MLAN_STATUS_SUCCESS) - ret = MLAN_STATUS_PENDING; - - LEAVE(); - return ret; + mlan_status ret = MLAN_STATUS_SUCCESS; + mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; + + ENTER(); + + if (pioctl_req->buf_len < sizeof(mlan_ds_11d_cfg)) { + PRINTM(MWARN, "MLAN 11d_cfg IOCTL length is too short.\n"); + pioctl_req->data_read_written = 0; + pioctl_req->buf_len_needed = sizeof(mlan_ds_11d_cfg); + LEAVE(); + return MLAN_STATUS_RESOURCE; + } + + if ((pioctl_req->action == MLAN_ACT_SET) && pmpriv->uap_bss_started) { + PRINTM(MIOCTL, + "Domain_info cannot be changed while UAP bss is started.\n"); + pioctl_req->data_read_written = 0; + LEAVE(); + return MLAN_STATUS_FAILURE; + } + + /* store params, issue command to get UAP channel, whose CMD_RESP will + callback remainder of domain_info handling */ + pmpriv->uap_state_chan_cb.pioctl_req_curr = pioctl_req; + pmpriv->uap_state_chan_cb.get_chan_callback = + wlan_uap_callback_domain_info; + + ret = wlan_uap_get_channel(pmpriv); + if (ret == MLAN_STATUS_SUCCESS) + ret = MLAN_STATUS_PENDING; + + LEAVE(); + return ret; } /** @@ -959,49 +981,51 @@ wlan_uap_domain_info(IN pmlan_adapter pmadapter, IN pmlan_ioctl_req pioctl_req) static mlan_status wlan_uap_callback_11h_channel_check_req(IN t_void * priv) { - mlan_status ret = MLAN_STATUS_FAILURE; - mlan_private *pmpriv = (mlan_private *) priv; - mlan_callbacks *pcb = (mlan_callbacks *) & pmpriv->adapter->callbacks; - wlan_uap_get_info_cb_t *puap_state_chan_cb = &pmpriv->uap_state_chan_cb; - /* keep copy as local variable */ - pmlan_ioctl_req pioctl = puap_state_chan_cb->pioctl_req_curr; - - ENTER(); - /* clear callback now that we're here */ - puap_state_chan_cb->get_chan_callback = MNULL; - /* clear early to avoid race condition */ - puap_state_chan_cb->pioctl_req_curr = MNULL; - - /* - * Check if the region and channel requires a channel availability - * check. - */ - if ((puap_state_chan_cb->band_config & BAND_CONFIG_5GHZ) && - wlan_11h_radar_detect_required(pmpriv, puap_state_chan_cb->channel) && - !wlan_11h_is_channel_under_nop(pmpriv->adapter, - puap_state_chan_cb->channel)) { - - /* - * Radar detection is required for this channel, make sure - * 11h is activated in the firmware - */ - ret = wlan_11h_activate(pmpriv, MNULL, MTRUE); - ret = wlan_11h_config_master_radar_det(pmpriv, MTRUE); - ret = wlan_11h_check_update_radar_det_state(pmpriv); - - /* Check for radar on the channel */ - ret = wlan_11h_issue_radar_detect(pmpriv, - pioctl, puap_state_chan_cb->channel); - if (ret == MLAN_STATUS_SUCCESS) - ret = MLAN_STATUS_PENDING; - } else { - /* No command sent with the ioctl, need manually signal completion */ - pcb->moal_ioctl_complete(pmpriv->adapter->pmoal_handle, - pioctl, MLAN_STATUS_FAILURE); - } - - LEAVE(); - return ret; + mlan_status ret = MLAN_STATUS_FAILURE; + mlan_private *pmpriv = (mlan_private *) priv; + mlan_callbacks *pcb = (mlan_callbacks *) & pmpriv->adapter->callbacks; + wlan_uap_get_info_cb_t *puap_state_chan_cb = &pmpriv->uap_state_chan_cb; + /* keep copy as local variable */ + pmlan_ioctl_req pioctl = puap_state_chan_cb->pioctl_req_curr; + + ENTER(); + /* clear callback now that we're here */ + puap_state_chan_cb->get_chan_callback = MNULL; + /* clear early to avoid race condition */ + puap_state_chan_cb->pioctl_req_curr = MNULL; + + /* + * Check if the region and channel requires a channel availability + * check. + */ + if ((puap_state_chan_cb->band_config & BAND_CONFIG_5GHZ) && + wlan_11h_radar_detect_required(pmpriv, puap_state_chan_cb->channel) + && !wlan_11h_is_channel_under_nop(pmpriv->adapter, + puap_state_chan_cb->channel)) { + + /* + * Radar detection is required for this channel, make sure + * 11h is activated in the firmware + */ + ret = wlan_11h_activate(pmpriv, MNULL, MTRUE); + ret = wlan_11h_config_master_radar_det(pmpriv, MTRUE); + ret = wlan_11h_check_update_radar_det_state(pmpriv); + + /* Check for radar on the channel */ + ret = wlan_11h_issue_radar_detect(pmpriv, + pioctl, + puap_state_chan_cb->channel); + if (ret == MLAN_STATUS_SUCCESS) + ret = MLAN_STATUS_PENDING; + } else { + /* No command sent with the ioctl, need manually signal + completion */ + pcb->moal_ioctl_complete(pmpriv->adapter->pmoal_handle, + pioctl, MLAN_STATUS_FAILURE); + } + + LEAVE(); + return ret; } /** @@ -1015,33 +1039,33 @@ wlan_uap_callback_11h_channel_check_req(IN t_void * priv) */ static mlan_status wlan_uap_11h_channel_check_req(IN pmlan_adapter pmadapter, - IN pmlan_ioctl_req pioctl_req) + IN pmlan_ioctl_req pioctl_req) { - mlan_status ret = MLAN_STATUS_SUCCESS; - mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; - - ENTER(); - - if (pioctl_req->buf_len < sizeof(mlan_ds_11h_cfg)) { - PRINTM(MWARN, "MLAN 11h_cfg IOCTL length is too short.\n"); - pioctl_req->data_read_written = 0; - pioctl_req->buf_len_needed = sizeof(mlan_ds_11h_cfg); - LEAVE(); - return MLAN_STATUS_RESOURCE; - } - - /* store params, issue command to get UAP channel, whose CMD_RESP will - callback remainder of 11H channel check handling */ - pmpriv->uap_state_chan_cb.pioctl_req_curr = pioctl_req; - pmpriv->uap_state_chan_cb.get_chan_callback = - wlan_uap_callback_11h_channel_check_req; - - ret = wlan_uap_get_channel(pmpriv); - if (ret == MLAN_STATUS_SUCCESS) - ret = MLAN_STATUS_PENDING; - - LEAVE(); - return ret; + mlan_status ret = MLAN_STATUS_SUCCESS; + mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; + + ENTER(); + + if (pioctl_req->buf_len < sizeof(mlan_ds_11h_cfg)) { + PRINTM(MWARN, "MLAN 11h_cfg IOCTL length is too short.\n"); + pioctl_req->data_read_written = 0; + pioctl_req->buf_len_needed = sizeof(mlan_ds_11h_cfg); + LEAVE(); + return MLAN_STATUS_RESOURCE; + } + + /* store params, issue command to get UAP channel, whose CMD_RESP will + callback remainder of 11H channel check handling */ + pmpriv->uap_state_chan_cb.pioctl_req_curr = pioctl_req; + pmpriv->uap_state_chan_cb.get_chan_callback = + wlan_uap_callback_11h_channel_check_req; + + ret = wlan_uap_get_channel(pmpriv); + if (ret == MLAN_STATUS_SUCCESS) + ret = MLAN_STATUS_PENDING; + + LEAVE(); + return ret; } /** @@ -1056,39 +1080,39 @@ wlan_uap_11h_channel_check_req(IN pmlan_adapter pmadapter, static mlan_status wlan_uap_callback_snmp_mib_11h(IN t_void * priv) { - mlan_status ret = MLAN_STATUS_SUCCESS; - mlan_private *pmpriv = (mlan_private *) priv; - wlan_uap_get_info_cb_t *puap_state_chan_cb = &pmpriv->uap_state_chan_cb; - mlan_ds_snmp_mib *snmp; - t_bool enable_11h; - - ENTER(); - /* clear callback now that we're here */ - puap_state_chan_cb->get_chan_callback = MNULL; - - snmp = (mlan_ds_snmp_mib *) puap_state_chan_cb->pioctl_req_curr->pbuf; - enable_11h = (snmp->param.oid_value) ? MTRUE : MFALSE; - - if (enable_11h) { - if ((puap_state_chan_cb->band_config & BAND_CONFIG_5GHZ) && - wlan_11h_radar_detect_required(pmpriv, - puap_state_chan_cb->channel)) { - if (!wlan_11h_is_master_radar_det_active(pmpriv)) - wlan_11h_config_master_radar_det(pmpriv, MTRUE); - } - } - - ret = - wlan_11h_activate(pmpriv, - (t_void *) puap_state_chan_cb->pioctl_req_curr, - enable_11h); - wlan_11h_check_update_radar_det_state(pmpriv); - if (ret == MLAN_STATUS_SUCCESS) - ret = MLAN_STATUS_PENDING; - - puap_state_chan_cb->pioctl_req_curr = MNULL; // prevent re-use - LEAVE(); - return ret; + mlan_status ret = MLAN_STATUS_SUCCESS; + mlan_private *pmpriv = (mlan_private *) priv; + wlan_uap_get_info_cb_t *puap_state_chan_cb = &pmpriv->uap_state_chan_cb; + mlan_ds_snmp_mib *snmp; + t_bool enable_11h; + + ENTER(); + /* clear callback now that we're here */ + puap_state_chan_cb->get_chan_callback = MNULL; + + snmp = (mlan_ds_snmp_mib *) puap_state_chan_cb->pioctl_req_curr->pbuf; + enable_11h = (snmp->param.oid_value) ? MTRUE : MFALSE; + + if (enable_11h) { + if ((puap_state_chan_cb->band_config & BAND_CONFIG_5GHZ) && + wlan_11h_radar_detect_required(pmpriv, + puap_state_chan_cb-> + channel)) { + if (!wlan_11h_is_master_radar_det_active(pmpriv)) + wlan_11h_config_master_radar_det(pmpriv, MTRUE); + } + } + + ret = wlan_11h_activate(pmpriv, + (t_void *) puap_state_chan_cb->pioctl_req_curr, + enable_11h); + wlan_11h_check_update_radar_det_state(pmpriv); + if (ret == MLAN_STATUS_SUCCESS) + ret = MLAN_STATUS_PENDING; + + puap_state_chan_cb->pioctl_req_curr = MNULL; // prevent re-use + LEAVE(); + return ret; } /** @@ -1103,48 +1127,48 @@ wlan_uap_callback_snmp_mib_11h(IN t_void * priv) static mlan_status wlan_uap_snmp_mib_11h(IN pmlan_adapter pmadapter, IN pmlan_ioctl_req pioctl_req) { - mlan_status ret = MLAN_STATUS_SUCCESS; - mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; - mlan_ds_snmp_mib *snmp = MNULL; - t_bool enable; - - ENTER(); - - if (pioctl_req->buf_len < sizeof(mlan_ds_snmp_mib)) { - PRINTM(MWARN, "MLAN snmp_mib IOCTL length is too short.\n"); - pioctl_req->data_read_written = 0; - pioctl_req->buf_len_needed = sizeof(mlan_ds_snmp_mib); - LEAVE(); - return MLAN_STATUS_RESOURCE; - } - snmp = (mlan_ds_snmp_mib *) pioctl_req->pbuf; - enable = (snmp->param.oid_value) ? MTRUE : MFALSE; - - if (enable) { - /* first enable 11D if it is not enabled */ - if (!wlan_11d_is_enabled(pmpriv)) { - ret = wlan_11d_enable(pmpriv, MNULL, ENABLE_11D); - if (ret != MLAN_STATUS_SUCCESS) { - PRINTM(MERROR, - "Failed to first enable 11D before enabling 11H.\n"); - LEAVE(); - return ret; - } - } - } - - /* store params, issue command to get UAP channel, whose CMD_RESP will - callback remainder of 11H handling (and radar detect if DFS chan) */ - pmpriv->uap_state_chan_cb.pioctl_req_curr = pioctl_req; - pmpriv->uap_state_chan_cb.get_chan_callback = - wlan_uap_callback_snmp_mib_11h; - - ret = wlan_uap_get_channel(pmpriv); - if (ret == MLAN_STATUS_SUCCESS) - ret = MLAN_STATUS_PENDING; - - LEAVE(); - return ret; + mlan_status ret = MLAN_STATUS_SUCCESS; + mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; + mlan_ds_snmp_mib *snmp = MNULL; + t_bool enable; + + ENTER(); + + if (pioctl_req->buf_len < sizeof(mlan_ds_snmp_mib)) { + PRINTM(MWARN, "MLAN snmp_mib IOCTL length is too short.\n"); + pioctl_req->data_read_written = 0; + pioctl_req->buf_len_needed = sizeof(mlan_ds_snmp_mib); + LEAVE(); + return MLAN_STATUS_RESOURCE; + } + snmp = (mlan_ds_snmp_mib *) pioctl_req->pbuf; + enable = (snmp->param.oid_value) ? MTRUE : MFALSE; + + if (enable) { + /* first enable 11D if it is not enabled */ + if (!wlan_11d_is_enabled(pmpriv)) { + ret = wlan_11d_enable(pmpriv, MNULL, ENABLE_11D); + if (ret != MLAN_STATUS_SUCCESS) { + PRINTM(MERROR, + "Failed to first enable 11D before enabling 11H.\n"); + LEAVE(); + return ret; + } + } + } + + /* store params, issue command to get UAP channel, whose CMD_RESP will + callback remainder of 11H handling (and radar detect if DFS chan) */ + pmpriv->uap_state_chan_cb.pioctl_req_curr = pioctl_req; + pmpriv->uap_state_chan_cb.get_chan_callback = + wlan_uap_callback_snmp_mib_11h; + + ret = wlan_uap_get_channel(pmpriv); + if (ret == MLAN_STATUS_SUCCESS) + ret = MLAN_STATUS_PENDING; + + LEAVE(); + return ret; } /******************************************************** @@ -1161,19 +1185,19 @@ wlan_uap_snmp_mib_11h(IN pmlan_adapter pmadapter, IN pmlan_ioctl_req pioctl_req) mlan_status wlan_uap_get_channel(IN pmlan_private pmpriv) { - MrvlIEtypes_channel_band_t tlv_chan_band; - mlan_status ret = MLAN_STATUS_SUCCESS; - - ENTER(); - memset(pmpriv->adapter, &tlv_chan_band, 0, sizeof(tlv_chan_band)); - tlv_chan_band.header.type = TLV_TYPE_UAP_CHAN_BAND_CONFIG; - tlv_chan_band.header.len = sizeof(MrvlIEtypes_channel_band_t) - - sizeof(MrvlIEtypesHeader_t); - - ret = wlan_prepare_cmd(pmpriv, HOST_CMD_APCMD_SYS_CONFIGURE, - HostCmd_ACT_GEN_GET, 0, MNULL, &tlv_chan_band); - LEAVE(); - return ret; + MrvlIEtypes_channel_band_t tlv_chan_band; + mlan_status ret = MLAN_STATUS_SUCCESS; + + ENTER(); + memset(pmpriv->adapter, &tlv_chan_band, 0, sizeof(tlv_chan_band)); + tlv_chan_band.header.type = TLV_TYPE_UAP_CHAN_BAND_CONFIG; + tlv_chan_band.header.len = sizeof(MrvlIEtypes_channel_band_t) + - sizeof(MrvlIEtypesHeader_t); + + ret = wlan_prepare_cmd(pmpriv, HOST_CMD_APCMD_SYS_CONFIGURE, + HostCmd_ACT_GEN_GET, 0, MNULL, &tlv_chan_band); + LEAVE(); + return ret; } /** @@ -1187,23 +1211,23 @@ wlan_uap_get_channel(IN pmlan_private pmpriv) */ mlan_status wlan_uap_set_channel(IN pmlan_private pmpriv, - IN t_u8 uap_band_cfg, IN t_u8 channel) + IN t_u8 uap_band_cfg, IN t_u8 channel) { - MrvlIEtypes_channel_band_t tlv_chan_band; - mlan_status ret = MLAN_STATUS_SUCCESS; - - ENTER(); - memset(pmpriv->adapter, &tlv_chan_band, 0, sizeof(tlv_chan_band)); - tlv_chan_band.header.type = TLV_TYPE_UAP_CHAN_BAND_CONFIG; - tlv_chan_band.header.len = sizeof(MrvlIEtypes_channel_band_t) - - sizeof(MrvlIEtypesHeader_t); - tlv_chan_band.band_config = uap_band_cfg; - tlv_chan_band.channel = channel; - - ret = wlan_prepare_cmd(pmpriv, HOST_CMD_APCMD_SYS_CONFIGURE, - HostCmd_ACT_GEN_SET, 0, MNULL, &tlv_chan_band); - LEAVE(); - return ret; + MrvlIEtypes_channel_band_t tlv_chan_band; + mlan_status ret = MLAN_STATUS_SUCCESS; + + ENTER(); + memset(pmpriv->adapter, &tlv_chan_band, 0, sizeof(tlv_chan_band)); + tlv_chan_band.header.type = TLV_TYPE_UAP_CHAN_BAND_CONFIG; + tlv_chan_band.header.len = sizeof(MrvlIEtypes_channel_band_t) + - sizeof(MrvlIEtypesHeader_t); + tlv_chan_band.band_config = uap_band_cfg; + tlv_chan_band.channel = channel; + + ret = wlan_prepare_cmd(pmpriv, HOST_CMD_APCMD_SYS_CONFIGURE, + HostCmd_ACT_GEN_SET, 0, MNULL, &tlv_chan_band); + LEAVE(); + return ret; } /** @@ -1216,35 +1240,35 @@ wlan_uap_set_channel(IN pmlan_private pmpriv, mlan_status wlan_uap_get_beacon_dtim(IN pmlan_private pmpriv) { - t_u8 tlv_buffer[sizeof(MrvlIEtypes_beacon_period_t) + - sizeof(MrvlIEtypes_dtim_period_t)]; - MrvlIEtypes_beacon_period_t *ptlv_beacon_pd; - MrvlIEtypes_dtim_period_t *ptlv_dtim_pd; - mlan_status ret = MLAN_STATUS_SUCCESS; - - ENTER(); - - memset(pmpriv->adapter, &tlv_buffer, 0, sizeof(tlv_buffer)); - ptlv_beacon_pd = (MrvlIEtypes_beacon_period_t *) tlv_buffer; - ptlv_beacon_pd->header.type = TLV_TYPE_UAP_BEACON_PERIOD; - ptlv_beacon_pd->header.len = sizeof(MrvlIEtypes_beacon_period_t) - - sizeof(MrvlIEtypesHeader_t); - - ptlv_dtim_pd = (MrvlIEtypes_dtim_period_t *) (tlv_buffer - + - sizeof - (MrvlIEtypes_beacon_period_t)); - ptlv_dtim_pd->header.type = TLV_TYPE_UAP_DTIM_PERIOD; - ptlv_dtim_pd->header.len = sizeof(MrvlIEtypes_dtim_period_t) - - sizeof(MrvlIEtypesHeader_t); - - ret = wlan_prepare_cmd(pmpriv, HOST_CMD_APCMD_SYS_CONFIGURE, - HostCmd_ACT_GEN_GET, 0, MNULL, tlv_buffer); - LEAVE(); - return ret; + t_u8 tlv_buffer[sizeof(MrvlIEtypes_beacon_period_t) + + sizeof(MrvlIEtypes_dtim_period_t)]; + MrvlIEtypes_beacon_period_t *ptlv_beacon_pd; + MrvlIEtypes_dtim_period_t *ptlv_dtim_pd; + mlan_status ret = MLAN_STATUS_SUCCESS; + + ENTER(); + + memset(pmpriv->adapter, &tlv_buffer, 0, sizeof(tlv_buffer)); + ptlv_beacon_pd = (MrvlIEtypes_beacon_period_t *) tlv_buffer; + ptlv_beacon_pd->header.type = TLV_TYPE_UAP_BEACON_PERIOD; + ptlv_beacon_pd->header.len = sizeof(MrvlIEtypes_beacon_period_t) + - sizeof(MrvlIEtypesHeader_t); + + ptlv_dtim_pd = (MrvlIEtypes_dtim_period_t *) (tlv_buffer + + + sizeof + (MrvlIEtypes_beacon_period_t)); + ptlv_dtim_pd->header.type = TLV_TYPE_UAP_DTIM_PERIOD; + ptlv_dtim_pd->header.len = sizeof(MrvlIEtypes_dtim_period_t) + - sizeof(MrvlIEtypesHeader_t); + + ret = wlan_prepare_cmd(pmpriv, HOST_CMD_APCMD_SYS_CONFIGURE, + HostCmd_ACT_GEN_GET, 0, MNULL, tlv_buffer); + LEAVE(); + return ret; } -/** +/** * @brief MLAN uap ioctl handler * * @param adapter A pointer to mlan_adapter structure @@ -1255,183 +1279,214 @@ wlan_uap_get_beacon_dtim(IN pmlan_private pmpriv) mlan_status wlan_ops_uap_ioctl(t_void * adapter, pmlan_ioctl_req pioctl_req) { - pmlan_adapter pmadapter = (pmlan_adapter) adapter; - mlan_status status = MLAN_STATUS_SUCCESS; - mlan_ds_bss *bss = MNULL; - mlan_ds_get_info *pget_info = MNULL; - mlan_ds_misc_cfg *misc = MNULL; - mlan_ds_sec_cfg *sec = MNULL; - mlan_ds_pm_cfg *pm = MNULL; - mlan_ds_11d_cfg *cfg11d = MNULL; - mlan_ds_snmp_mib *snmp = MNULL; - mlan_ds_11h_cfg *cfg11h = MNULL; - mlan_ds_radio_cfg *radiocfg = MNULL; - mlan_ds_rate *rate = MNULL; - mlan_ds_reg_mem *reg_mem = MNULL; - mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; - - ENTER(); - - switch (pioctl_req->req_id) { - case MLAN_IOCTL_BSS: - bss = (mlan_ds_bss *) pioctl_req->pbuf; - if (bss->sub_command == MLAN_OID_BSS_MAC_ADDR) - status = wlan_uap_bss_ioctl_mac_address(pmadapter, pioctl_req); - else if (bss->sub_command == MLAN_OID_BSS_STOP) - status = wlan_uap_bss_ioctl_stop(pmadapter, pioctl_req); - else if (bss->sub_command == MLAN_OID_BSS_START) - status = wlan_uap_bss_ioctl_start(pmadapter, pioctl_req); - else if (bss->sub_command == MLAN_OID_UAP_BSS_CONFIG) - status = wlan_uap_bss_ioctl_config(pmadapter, pioctl_req); - else if (bss->sub_command == MLAN_OID_UAP_DEAUTH_STA) - status = wlan_uap_bss_ioctl_deauth_sta(pmadapter, pioctl_req); - else if (bss->sub_command == MLAN_OID_UAP_BSS_RESET) - status = wlan_uap_bss_ioctl_reset(pmadapter, pioctl_req); + pmlan_adapter pmadapter = (pmlan_adapter) adapter; + mlan_status status = MLAN_STATUS_SUCCESS; + mlan_ds_bss *bss = MNULL; + mlan_ds_get_info *pget_info = MNULL; + mlan_ds_misc_cfg *misc = MNULL; + mlan_ds_sec_cfg *sec = MNULL; + mlan_ds_pm_cfg *pm = MNULL; + mlan_ds_11d_cfg *cfg11d = MNULL; + mlan_ds_snmp_mib *snmp = MNULL; + mlan_ds_11h_cfg *cfg11h = MNULL; + mlan_ds_radio_cfg *radiocfg = MNULL; + mlan_ds_rate *rate = MNULL; + mlan_ds_reg_mem *reg_mem = MNULL; + mlan_private *pmpriv = pmadapter->priv[pioctl_req->bss_index]; + + ENTER(); + + switch (pioctl_req->req_id) { + case MLAN_IOCTL_BSS: + bss = (mlan_ds_bss *) pioctl_req->pbuf; + if (bss->sub_command == MLAN_OID_BSS_MAC_ADDR) + status = wlan_uap_bss_ioctl_mac_address(pmadapter, + pioctl_req); + else if (bss->sub_command == MLAN_OID_BSS_STOP) + status = wlan_uap_bss_ioctl_stop(pmadapter, pioctl_req); + else if (bss->sub_command == MLAN_OID_BSS_START) + status = wlan_uap_bss_ioctl_start(pmadapter, + pioctl_req); + else if (bss->sub_command == MLAN_OID_UAP_BSS_CONFIG) + status = wlan_uap_bss_ioctl_config(pmadapter, + pioctl_req); + else if (bss->sub_command == MLAN_OID_UAP_DEAUTH_STA) + status = wlan_uap_bss_ioctl_deauth_sta(pmadapter, + pioctl_req); + else if (bss->sub_command == MLAN_OID_UAP_BSS_RESET) + status = wlan_uap_bss_ioctl_reset(pmadapter, + pioctl_req); #if defined(STA_SUPPORT) && defined(UAP_SUPPORT) - else if (bss->sub_command == MLAN_OID_BSS_ROLE) - status = wlan_bss_ioctl_bss_role(pmadapter, pioctl_req); + else if (bss->sub_command == MLAN_OID_BSS_ROLE) + status = wlan_bss_ioctl_bss_role(pmadapter, pioctl_req); #endif #ifdef WIFI_DIRECT_SUPPORT - else if (bss->sub_command == MLAN_OID_WIFI_DIRECT_MODE) - status = wlan_bss_ioctl_wifi_direct_mode(pmadapter, pioctl_req); + else if (bss->sub_command == MLAN_OID_WIFI_DIRECT_MODE) + status = wlan_bss_ioctl_wifi_direct_mode(pmadapter, + pioctl_req); #endif - else if (bss->sub_command == MLAN_OID_BSS_REMOVE) - status = wlan_bss_ioctl_bss_remove(pmadapter, pioctl_req); - break; - case MLAN_IOCTL_GET_INFO: - pget_info = (mlan_ds_get_info *) pioctl_req->pbuf; - if (pget_info->sub_command == MLAN_OID_GET_VER_EXT) - status = wlan_get_info_ver_ext(pmadapter, pioctl_req); - else if (pget_info->sub_command == MLAN_OID_GET_DEBUG_INFO) - status = wlan_get_info_debug_info(pmadapter, pioctl_req); - else if (pget_info->sub_command == MLAN_OID_GET_STATS) - status = wlan_uap_get_stats(pmadapter, pioctl_req); - else if (pget_info->sub_command == MLAN_OID_UAP_STA_LIST) - status = wlan_uap_get_sta_list(pmadapter, pioctl_req); - else if (pget_info->sub_command == MLAN_OID_GET_BSS_INFO) - status = wlan_uap_get_bss_info(pmadapter, pioctl_req); - else if (pget_info->sub_command == MLAN_OID_GET_FW_INFO) { - pioctl_req->data_read_written = - sizeof(mlan_fw_info) + MLAN_SUB_COMMAND_SIZE; - memcpy(pmadapter, &pget_info->param.fw_info.mac_addr, - pmpriv->curr_addr, MLAN_MAC_ADDR_LENGTH); - pget_info->param.fw_info.fw_ver = pmadapter->fw_release_number; - pget_info->param.fw_info.fw_bands = pmadapter->fw_bands; - pget_info->param.fw_info.hw_dev_mcs_support = - pmadapter->hw_dev_mcs_support; - pget_info->param.fw_info.region_code = pmadapter->region_code; - } - break; - case MLAN_IOCTL_MISC_CFG: - misc = (mlan_ds_misc_cfg *) pioctl_req->pbuf; - if (misc->sub_command == MLAN_OID_MISC_INIT_SHUTDOWN) - status = wlan_misc_ioctl_init_shutdown(pmadapter, pioctl_req); - if (misc->sub_command == MLAN_OID_MISC_SOFT_RESET) - status = wlan_uap_misc_ioctl_soft_reset(pmadapter, pioctl_req); - if (misc->sub_command == MLAN_OID_MISC_HOST_CMD) - status = wlan_misc_ioctl_host_cmd(pmadapter, pioctl_req); - if (misc->sub_command == MLAN_OID_MISC_GEN_IE) - status = wlan_uap_misc_ioctl_gen_ie(pmadapter, pioctl_req); - if (misc->sub_command == MLAN_OID_MISC_CUSTOM_IE) - status = - wlan_misc_ioctl_custom_ie_list(pmadapter, pioctl_req, MTRUE); - if (misc->sub_command == MLAN_OID_MISC_TX_DATAPAUSE) - status = wlan_uap_misc_ioctl_txdatapause(pmadapter, pioctl_req); - if (misc->sub_command == MLAN_OID_MISC_RX_MGMT_IND) - status = wlan_reg_rx_mgmt_ind(pmadapter, pioctl_req); + else if (bss->sub_command == MLAN_OID_BSS_REMOVE) + status = wlan_bss_ioctl_bss_remove(pmadapter, + pioctl_req); + break; + case MLAN_IOCTL_GET_INFO: + pget_info = (mlan_ds_get_info *) pioctl_req->pbuf; + if (pget_info->sub_command == MLAN_OID_GET_VER_EXT) + status = wlan_get_info_ver_ext(pmadapter, pioctl_req); + else if (pget_info->sub_command == MLAN_OID_GET_DEBUG_INFO) + status = wlan_get_info_debug_info(pmadapter, + pioctl_req); + else if (pget_info->sub_command == MLAN_OID_GET_STATS) + status = wlan_uap_get_stats(pmadapter, pioctl_req); + else if (pget_info->sub_command == MLAN_OID_UAP_STA_LIST) + status = wlan_uap_get_sta_list(pmadapter, pioctl_req); + else if (pget_info->sub_command == MLAN_OID_GET_BSS_INFO) + status = wlan_uap_get_bss_info(pmadapter, pioctl_req); + else if (pget_info->sub_command == MLAN_OID_GET_FW_INFO) { + pioctl_req->data_read_written = + sizeof(mlan_fw_info) + MLAN_SUB_COMMAND_SIZE; + memcpy(pmadapter, &pget_info->param.fw_info.mac_addr, + pmpriv->curr_addr, MLAN_MAC_ADDR_LENGTH); + pget_info->param.fw_info.fw_ver = + pmadapter->fw_release_number; + pget_info->param.fw_info.fw_bands = pmadapter->fw_bands; + pget_info->param.fw_info.hw_dev_mcs_support = + pmadapter->hw_dev_mcs_support; + pget_info->param.fw_info.region_code = + pmadapter->region_code; + } + break; + case MLAN_IOCTL_MISC_CFG: + misc = (mlan_ds_misc_cfg *) pioctl_req->pbuf; + if (misc->sub_command == MLAN_OID_MISC_INIT_SHUTDOWN) + status = wlan_misc_ioctl_init_shutdown(pmadapter, + pioctl_req); + if (misc->sub_command == MLAN_OID_MISC_SOFT_RESET) + status = wlan_uap_misc_ioctl_soft_reset(pmadapter, + pioctl_req); + if (misc->sub_command == MLAN_OID_MISC_HOST_CMD) + status = wlan_misc_ioctl_host_cmd(pmadapter, + pioctl_req); + if (misc->sub_command == MLAN_OID_MISC_GEN_IE) + status = wlan_uap_misc_ioctl_gen_ie(pmadapter, + pioctl_req); + if (misc->sub_command == MLAN_OID_MISC_CUSTOM_IE) + status = wlan_misc_ioctl_custom_ie_list(pmadapter, + pioctl_req, + MTRUE); + if (misc->sub_command == MLAN_OID_MISC_TX_DATAPAUSE) + status = wlan_uap_misc_ioctl_txdatapause(pmadapter, + pioctl_req); + if (misc->sub_command == MLAN_OID_MISC_RX_MGMT_IND) + status = wlan_reg_rx_mgmt_ind(pmadapter, pioctl_req); #ifdef DEBUG_LEVEL1 - if (misc->sub_command == MLAN_OID_MISC_DRVDBG) - status = wlan_set_drvdbg(pmadapter, pioctl_req); + if (misc->sub_command == MLAN_OID_MISC_DRVDBG) + status = wlan_set_drvdbg(pmadapter, pioctl_req); #endif - if (misc->sub_command == MLAN_OID_MISC_TXCONTROL) - status = wlan_misc_ioctl_txcontrol(pmadapter, pioctl_req); - if (misc->sub_command == MLAN_OID_MISC_MAC_CONTROL) - status = wlan_misc_ioctl_mac_control(pmadapter, pioctl_req); - break; - case MLAN_IOCTL_PM_CFG: - pm = (mlan_ds_pm_cfg *) pioctl_req->pbuf; - if (pm->sub_command == MLAN_OID_PM_CFG_PS_MODE) - status = wlan_uap_pm_ioctl_mode(pmadapter, pioctl_req); - if (pm->sub_command == MLAN_OID_PM_CFG_DEEP_SLEEP) - status = wlan_uap_pm_ioctl_deepsleep(pmadapter, pioctl_req); - if (pm->sub_command == MLAN_OID_PM_CFG_HS_CFG) { - status = wlan_pm_ioctl_hscfg(pmadapter, pioctl_req); - } - if (pm->sub_command == MLAN_OID_PM_HS_WAKEUP_REASON) { - status = wlan_get_hs_wakeup_reason(pmadapter, pioctl_req); - } - if (pm->sub_command == MLAN_OID_PM_INFO) { - status = wlan_get_pm_info(pmadapter, pioctl_req); - } - break; - case MLAN_IOCTL_SNMP_MIB: - snmp = (mlan_ds_snmp_mib *) pioctl_req->pbuf; - if (snmp->sub_command == MLAN_OID_SNMP_MIB_DOT11D) - status = wlan_uap_snmp_mib_11d(pmadapter, pioctl_req); - if (snmp->sub_command == MLAN_OID_SNMP_MIB_DOT11H) - status = wlan_uap_snmp_mib_11h(pmadapter, pioctl_req); - break; - case MLAN_IOCTL_SEC_CFG: - sec = (mlan_ds_sec_cfg *) pioctl_req->pbuf; - if (sec->sub_command == MLAN_OID_SEC_CFG_ENCRYPT_KEY) - status = wlan_uap_sec_ioctl_set_encrypt_key(pmadapter, pioctl_req); - if (sec->sub_command == MLAN_OID_SEC_CFG_WAPI_ENABLED) - status = wlan_uap_sec_ioctl_wapi_enable(pmadapter, pioctl_req); - break; - case MLAN_IOCTL_11N_CFG: - status = wlan_11n_cfg_ioctl(pmadapter, pioctl_req); - break; - case MLAN_IOCTL_11D_CFG: - cfg11d = (mlan_ds_11d_cfg *) pioctl_req->pbuf; - if (cfg11d->sub_command == MLAN_OID_11D_DOMAIN_INFO) - status = wlan_uap_domain_info(pmadapter, pioctl_req); - break; - case MLAN_IOCTL_11H_CFG: - cfg11h = (mlan_ds_11h_cfg *) pioctl_req->pbuf; - if (cfg11h->sub_command == MLAN_OID_11H_CHANNEL_CHECK) - status = wlan_uap_11h_channel_check_req(pmadapter, pioctl_req); + if (misc->sub_command == MLAN_OID_MISC_TXCONTROL) + status = wlan_misc_ioctl_txcontrol(pmadapter, + pioctl_req); + if (misc->sub_command == MLAN_OID_MISC_MAC_CONTROL) + status = wlan_misc_ioctl_mac_control(pmadapter, + pioctl_req); + break; + case MLAN_IOCTL_PM_CFG: + pm = (mlan_ds_pm_cfg *) pioctl_req->pbuf; + if (pm->sub_command == MLAN_OID_PM_CFG_PS_MODE) + status = wlan_uap_pm_ioctl_mode(pmadapter, pioctl_req); + if (pm->sub_command == MLAN_OID_PM_CFG_DEEP_SLEEP) + status = wlan_uap_pm_ioctl_deepsleep(pmadapter, + pioctl_req); + if (pm->sub_command == MLAN_OID_PM_CFG_HS_CFG) { + status = wlan_pm_ioctl_hscfg(pmadapter, pioctl_req); + } + if (pm->sub_command == MLAN_OID_PM_HS_WAKEUP_REASON) { + status = wlan_get_hs_wakeup_reason(pmadapter, + pioctl_req); + } + if (pm->sub_command == MLAN_OID_PM_INFO) { + status = wlan_get_pm_info(pmadapter, pioctl_req); + } + break; + case MLAN_IOCTL_SNMP_MIB: + snmp = (mlan_ds_snmp_mib *) pioctl_req->pbuf; + if (snmp->sub_command == MLAN_OID_SNMP_MIB_DOT11D) + status = wlan_uap_snmp_mib_11d(pmadapter, pioctl_req); + if (snmp->sub_command == MLAN_OID_SNMP_MIB_DOT11H) + status = wlan_uap_snmp_mib_11h(pmadapter, pioctl_req); + break; + case MLAN_IOCTL_SEC_CFG: + sec = (mlan_ds_sec_cfg *) pioctl_req->pbuf; + if (sec->sub_command == MLAN_OID_SEC_CFG_ENCRYPT_KEY) + status = wlan_uap_sec_ioctl_set_encrypt_key(pmadapter, + pioctl_req); + if (sec->sub_command == MLAN_OID_SEC_CFG_WAPI_ENABLED) + status = wlan_uap_sec_ioctl_wapi_enable(pmadapter, + pioctl_req); + break; + case MLAN_IOCTL_11N_CFG: + status = wlan_11n_cfg_ioctl(pmadapter, pioctl_req); + break; + case MLAN_IOCTL_11D_CFG: + cfg11d = (mlan_ds_11d_cfg *) pioctl_req->pbuf; + if (cfg11d->sub_command == MLAN_OID_11D_DOMAIN_INFO) + status = wlan_uap_domain_info(pmadapter, pioctl_req); + break; + case MLAN_IOCTL_11H_CFG: + cfg11h = (mlan_ds_11h_cfg *) pioctl_req->pbuf; + if (cfg11h->sub_command == MLAN_OID_11H_CHANNEL_CHECK) + status = wlan_uap_11h_channel_check_req(pmadapter, + pioctl_req); #if defined(DFS_TESTING_SUPPORT) - if (cfg11h->sub_command == MLAN_OID_11H_DFS_TESTING) - status = wlan_11h_ioctl_dfs_testing(pmadapter, pioctl_req); + if (cfg11h->sub_command == MLAN_OID_11H_DFS_TESTING) + status = wlan_11h_ioctl_dfs_testing(pmadapter, + pioctl_req); #endif - break; - case MLAN_IOCTL_RADIO_CFG: - radiocfg = (mlan_ds_radio_cfg *) pioctl_req->pbuf; - if (radiocfg->sub_command == MLAN_OID_RADIO_CTRL) - status = wlan_radio_ioctl_radio_ctl(pmadapter, pioctl_req); + break; + case MLAN_IOCTL_RADIO_CFG: + radiocfg = (mlan_ds_radio_cfg *) pioctl_req->pbuf; + if (radiocfg->sub_command == MLAN_OID_RADIO_CTRL) + status = wlan_radio_ioctl_radio_ctl(pmadapter, + pioctl_req); #ifdef WIFI_DIRECT_SUPPORT - if (radiocfg->sub_command == MLAN_OID_REMAIN_CHAN_CFG) - status = wlan_radio_ioctl_remain_chan_cfg(pmadapter, pioctl_req); + if (radiocfg->sub_command == MLAN_OID_REMAIN_CHAN_CFG) + status = wlan_radio_ioctl_remain_chan_cfg(pmadapter, + pioctl_req); #endif - if (radiocfg->sub_command == MLAN_OID_ANT_CFG) - status = wlan_radio_ioctl_ant_cfg(pmadapter, pioctl_req); - break; - case MLAN_IOCTL_RATE: - rate = (mlan_ds_rate *) pioctl_req->pbuf; - if (rate->sub_command == MLAN_OID_RATE_CFG) - status = wlan_rate_ioctl_cfg(pmadapter, pioctl_req); - else if (rate->sub_command == MLAN_OID_GET_DATA_RATE) - status = wlan_rate_ioctl_get_data_rate(pmadapter, pioctl_req); - break; - case MLAN_IOCTL_11AC_CFG: - status = wlan_11ac_cfg_ioctl(pmadapter, pioctl_req); - break; - case MLAN_IOCTL_REG_MEM: - reg_mem = (mlan_ds_reg_mem *) pioctl_req->pbuf; - if (reg_mem->sub_command == MLAN_OID_REG_RW) - status = wlan_reg_mem_ioctl_reg_rw(pmadapter, pioctl_req); - else if (reg_mem->sub_command == MLAN_OID_EEPROM_RD) - status = wlan_reg_mem_ioctl_read_eeprom(pmadapter, pioctl_req); - else if (reg_mem->sub_command == MLAN_OID_MEM_RW) - status = wlan_reg_mem_ioctl_mem_rw(pmadapter, pioctl_req); - break; - case MLAN_IOCTL_WMM_CFG: - status = wlan_wmm_cfg_ioctl(pmadapter, pioctl_req); - break; - default: - pioctl_req->status_code = MLAN_ERROR_IOCTL_INVALID; - break; - } - LEAVE(); - return status; + if (radiocfg->sub_command == MLAN_OID_ANT_CFG) + status = wlan_radio_ioctl_ant_cfg(pmadapter, + pioctl_req); + break; + case MLAN_IOCTL_RATE: + rate = (mlan_ds_rate *) pioctl_req->pbuf; + if (rate->sub_command == MLAN_OID_RATE_CFG) + status = wlan_rate_ioctl_cfg(pmadapter, pioctl_req); + else if (rate->sub_command == MLAN_OID_GET_DATA_RATE) + status = wlan_rate_ioctl_get_data_rate(pmadapter, + pioctl_req); + break; + case MLAN_IOCTL_11AC_CFG: + status = wlan_11ac_cfg_ioctl(pmadapter, pioctl_req); + break; + case MLAN_IOCTL_REG_MEM: + reg_mem = (mlan_ds_reg_mem *) pioctl_req->pbuf; + if (reg_mem->sub_command == MLAN_OID_REG_RW) + status = wlan_reg_mem_ioctl_reg_rw(pmadapter, + pioctl_req); + else if (reg_mem->sub_command == MLAN_OID_EEPROM_RD) + status = wlan_reg_mem_ioctl_read_eeprom(pmadapter, + pioctl_req); + else if (reg_mem->sub_command == MLAN_OID_MEM_RW) + status = wlan_reg_mem_ioctl_mem_rw(pmadapter, + pioctl_req); + break; + case MLAN_IOCTL_WMM_CFG: + status = wlan_wmm_cfg_ioctl(pmadapter, pioctl_req); + break; + default: + pioctl_req->status_code = MLAN_ERROR_IOCTL_INVALID; + break; + } + LEAVE(); + return status; } |