/** * @brief This function initializes firmware * * @param pmadapter A pointer to mlan_adapter * * @return MLAN_STATUS_SUCCESS or error code */ mlan_status wlan_init_fw(IN pmlan_adapter pmadapter) { mlan_status ret = MLAN_STATUS_SUCCESS; pmlan_private priv; t_s32 i = 0; ENTER(); /* Allocate adapter structure */ ret = wlan_allocate_adapter(pmadapter); if (ret) { ret = MLAN_STATUS_FAILURE; goto done; } /* Initialize adapter structure */ wlan_init_adapter(pmadapter); for (i = 0; i < MLAN_MAX_BSS_NUM; i++) { if (pmadapter->priv[i]) { priv = pmadapter->priv[i]; /* Initialize private structure */ wlan_init_priv(priv); if ((ret = wlan_add_bsspriotbl(pmadapter, i))) { ret = MLAN_STATUS_FAILURE; goto done; } } } #ifdef MFG_CMD_SUPPORT if (pmadapter->mfgmode != MTRUE) #endif ret = wlan_init_cmd(pmadapter); #ifdef MFG_CMD_SUPPORT if (pmadapter->mfgmode == MTRUE) { pmadapter->hw_status = WlanHardwareStatusReady; goto done; } #endif /* Send the first command in queue and return */ if (mlan_main_process(pmadapter) == MLAN_STATUS_FAILURE) ret = MLAN_STATUS_FAILURE; else ret = MLAN_STATUS_PENDING; done: LEAVE(); return ret; }
/** * @brief This function initializes firmware * * @param pmadapter A pointer to mlan_adapter * * @return MLAN_STATUS_SUCCESS or error code */ mlan_status wlan_init_fw(IN pmlan_adapter pmadapter) { mlan_status ret = MLAN_STATUS_SUCCESS; pmlan_private priv = MNULL; t_s32 i = 0; t_u8 first_sta = MTRUE; ENTER(); /* Allocate memory for member of adapter structure */ ret = wlan_allocate_adapter(pmadapter); if (ret) { ret = MLAN_STATUS_FAILURE; goto done; } /* Initialize adapter structure */ wlan_init_adapter(pmadapter); for (i = 0; i < MLAN_MAX_BSS_NUM; i++) { if (pmadapter->priv[i]) { priv = pmadapter->priv[i]; /* Initialize private structure */ wlan_init_priv(priv); if ((ret = wlan_add_bsspriotbl(pmadapter, i))) { ret = MLAN_STATUS_FAILURE; goto done; } } } #ifdef MFG_CMD_SUPPORT if (pmadapter->mfg_mode != MTRUE) { #endif for (i = 0; i < MLAN_MAX_BSS_NUM; i++) { if (pmadapter->priv[i]) { ret = pmadapter->priv[i]->ops.init_cmd(pmadapter->priv[i], first_sta); if (ret == MLAN_STATUS_FAILURE) goto done; first_sta = MFALSE; } } #ifdef MFG_CMD_SUPPORT } #endif if (util_peek_list(&pmadapter->cmd_pending_q, pmadapter->callbacks.moal_spin_lock, pmadapter->callbacks.moal_spin_unlock)) { /* Send the first command in queue and return */ if (mlan_main_process(pmadapter) == MLAN_STATUS_FAILURE) ret = MLAN_STATUS_FAILURE; else ret = MLAN_STATUS_PENDING; } else { pmadapter->hw_status = WlanHardwareStatusReady; } done: LEAVE(); return ret; }
/** * @brief This function initializes the private structure * and sets default values to the members of mlan_private. * * @param priv A pointer to mlan_private structure * * @return MLAN_STATUS_SUCCESS or MLAN_STATUS_FAILURE */ mlan_status wlan_init_priv(pmlan_private priv) { t_u32 i; pmlan_adapter pmadapter = priv->adapter; mlan_status ret = MLAN_STATUS_SUCCESS; ENTER(); priv->media_connected = MFALSE; memset(pmadapter, priv->curr_addr, 0xff, MLAN_MAC_ADDR_LENGTH); #ifdef STA_SUPPORT priv->pkt_tx_ctrl = 0; priv->bss_mode = MLAN_BSS_MODE_INFRA; priv->data_rate = 0; /* Initially indicate the rate as auto */ priv->is_data_rate_auto = MTRUE; priv->bcn_avg_factor = DEFAULT_BCN_AVG_FACTOR; priv->data_avg_factor = DEFAULT_DATA_AVG_FACTOR; priv->sec_info.wep_status = Wlan802_11WEPDisabled; priv->sec_info.authentication_mode = MLAN_AUTH_MODE_AUTO; priv->sec_info.encryption_mode = MLAN_ENCRYPTION_MODE_NONE; for (i = 0; i < sizeof(priv->wep_key) / sizeof(priv->wep_key[0]); i++) memset(pmadapter, &priv->wep_key[i], 0, sizeof(mrvl_wep_key_t)); priv->wep_key_curr_index = 0; priv->ewpa_query = MFALSE; priv->adhoc_aes_enabled = MFALSE; priv->curr_pkt_filter = HostCmd_ACT_MAC_RX_ON | HostCmd_ACT_MAC_TX_ON | HostCmd_ACT_MAC_ETHERNETII_ENABLE; priv->beacon_period = MLAN_BEACON_INTERVAL; priv->pattempted_bss_desc = MNULL; memset(pmadapter, &priv->curr_bss_params, 0, sizeof(priv->curr_bss_params)); priv->listen_interval = MLAN_DEFAULT_LISTEN_INTERVAL; memset(pmadapter, &priv->assoc_rsp_buf, 0, sizeof(priv->assoc_rsp_buf)); priv->assoc_rsp_size = 0; wlan_11d_priv_init(priv); wlan_11h_priv_init(priv); #if defined(UAP_SUPPORT) priv->uap_bss_started = MFALSE; memset(pmadapter, &priv->uap_state_chan_cb, 0, sizeof(priv->uap_state_chan_cb)); #endif priv->adhoc_channel = DEFAULT_AD_HOC_CHANNEL; priv->atim_window = 0; priv->adhoc_state = ADHOC_IDLE; priv->tx_power_level = 0; priv->max_tx_power_level = 0; priv->min_tx_power_level = 0; priv->tx_rate = 0; priv->rxpd_htinfo = 0; priv->rxpd_rate = 0; priv->rate_bitmap = 0; priv->data_rssi_last = 0; priv->data_rssi_avg = 0; priv->data_nf_avg = 0; priv->data_nf_last = 0; priv->bcn_rssi_last = 0; priv->bcn_rssi_avg = 0; priv->bcn_nf_avg = 0; priv->bcn_nf_last = 0; memset(pmadapter, &priv->wpa_ie, 0, sizeof(priv->wpa_ie)); memset(pmadapter, &priv->aes_key, 0, sizeof(priv->aes_key)); priv->wpa_ie_len = 0; priv->wpa_is_gtk_set = MFALSE; memset(pmadapter, &priv->wps, 0, sizeof(priv->wps)); memset(pmadapter, &priv->gen_ie_buf, 0, sizeof(priv->gen_ie_buf)); priv->gen_ie_buf_len = 0; #endif /* STA_SUPPORT */ priv->tx_bf_cap = 0; priv->wmm_required = MTRUE; priv->wmm_enabled = MFALSE; priv->wmm_qosinfo = 0; #ifdef STA_SUPPORT priv->pcurr_bcn_buf = MNULL; priv->curr_bcn_size = 0; #endif /* STA_SUPPORT */ for (i = 0; i < MAX_NUM_TID; i++) priv->addba_reject[i] = ADDBA_RSP_STATUS_ACCEPT; priv->scan_block = MFALSE; priv->port_ctrl_mode = MFALSE; priv->port_open = MFALSE; if (!ret) ret = wlan_add_bsspriotbl(priv); LEAVE(); return ret; }
/** * @brief This function initializes the private structure * and sets default values to the members of mlan_private. * * @param priv A pointer to mlan_private structure * * @return MLAN_STATUS_SUCCESS or MLAN_STATUS_FAILURE */ mlan_status wlan_init_priv(pmlan_private priv) { t_u32 i; pmlan_adapter pmadapter = priv->adapter; mlan_status ret = MLAN_STATUS_SUCCESS; ENTER(); priv->media_connected = MFALSE; memset(pmadapter, priv->curr_addr, 0xff, MLAN_MAC_ADDR_LENGTH); #ifdef STA_SUPPORT priv->pkt_tx_ctrl = 0; priv->bss_mode = MLAN_BSS_MODE_INFRA; priv->data_rate = 0; /* Initially indicate the rate as auto */ priv->is_data_rate_auto = MTRUE; priv->bcn_avg_factor = DEFAULT_BCN_AVG_FACTOR; priv->data_avg_factor = DEFAULT_DATA_AVG_FACTOR; priv->sec_info.wep_status = Wlan802_11WEPDisabled; priv->sec_info.authentication_mode = MLAN_AUTH_MODE_AUTO; priv->sec_info.encryption_mode = MLAN_ENCRYPTION_MODE_NONE; for (i = 0; i < MRVL_NUM_WEP_KEY; i++) memset(pmadapter, &priv->wep_key[i], 0, sizeof(mrvl_wep_key_t)); priv->wep_key_curr_index = 0; priv->ewpa_query = MFALSE; priv->adhoc_aes_enabled = MFALSE; priv->curr_pkt_filter = HostCmd_ACT_MAC_STATIC_DYNAMIC_BW_ENABLE | HostCmd_ACT_MAC_RTS_CTS_ENABLE | HostCmd_ACT_MAC_RX_ON | HostCmd_ACT_MAC_TX_ON | HostCmd_ACT_MAC_ETHERNETII_ENABLE; priv->beacon_period = MLAN_BEACON_INTERVAL; priv->pattempted_bss_desc = MNULL; memset(pmadapter, &priv->curr_bss_params, 0, sizeof(priv->curr_bss_params)); priv->listen_interval = MLAN_DEFAULT_LISTEN_INTERVAL; memset(pmadapter, &priv->assoc_rsp_buf, 0, sizeof(priv->assoc_rsp_buf)); priv->assoc_rsp_size = 0; wlan_11d_priv_init(priv); wlan_11h_priv_init(priv); #ifdef UAP_SUPPORT priv->uap_bss_started = MFALSE; memset(pmadapter, &priv->uap_state_chan_cb, 0, sizeof(priv->uap_state_chan_cb)); #endif #if defined(UAP_SUPPORT) priv->num_drop_pkts = 0; #endif #if defined(STA_SUPPORT) priv->adhoc_state_prev = ADHOC_IDLE; memset(pmadapter, &priv->adhoc_last_start_ssid, 0, sizeof(priv->adhoc_last_start_ssid)); #endif priv->adhoc_channel = DEFAULT_AD_HOC_CHANNEL; priv->atim_window = 0; priv->adhoc_state = ADHOC_IDLE; priv->tx_power_level = 0; priv->max_tx_power_level = 0; priv->min_tx_power_level = 0; priv->tx_rate = 0; priv->rxpd_rate_info = 0; /* refer to V15 CMD_TX_RATE_QUERY */ priv->rxpd_vhtinfo = 0; priv->rxpd_rate = 0; priv->rate_bitmap = 0; priv->data_rssi_last = 0; priv->data_rssi_avg = 0; priv->data_nf_avg = 0; priv->data_nf_last = 0; priv->bcn_rssi_last = 0; priv->bcn_rssi_avg = 0; priv->bcn_nf_avg = 0; priv->bcn_nf_last = 0; priv->sec_info.ewpa_enabled = MFALSE; priv->sec_info.wpa_enabled = MFALSE; priv->sec_info.wpa2_enabled = MFALSE; memset(pmadapter, &priv->wpa_ie, 0, sizeof(priv->wpa_ie)); memset(pmadapter, &priv->aes_key, 0, sizeof(priv->aes_key)); priv->wpa_ie_len = 0; priv->wpa_is_gtk_set = MFALSE; #if defined(STA_SUPPORT) priv->pmfcfg.mfpc = 0; priv->pmfcfg.mfpr = 0; #endif priv->sec_info.wapi_enabled = MFALSE; priv->wapi_ie_len = 0; priv->sec_info.wapi_key_on = MFALSE; memset(pmadapter, &priv->wps, 0, sizeof(priv->wps)); memset(pmadapter, &priv->gen_ie_buf, 0, sizeof(priv->gen_ie_buf)); priv->gen_ie_buf_len = 0; #endif /* STA_SUPPORT */ priv->wmm_required = MTRUE; priv->wmm_enabled = MFALSE; priv->wmm_qosinfo = 0; priv->saved_wmm_qosinfo = 0; priv->txaggrctrl = MTRUE; #ifdef STA_SUPPORT priv->pcurr_bcn_buf = MNULL; priv->curr_bcn_size = 0; memset(pmadapter, &priv->ext_cap, 0, sizeof(priv->ext_cap)); SET_EXTCAP_OPERMODENTF(priv->ext_cap); #endif /* STA_SUPPORT */ for (i = 0; i < MAX_NUM_TID; i++) priv->addba_reject[i] = ADDBA_RSP_STATUS_ACCEPT; priv->addba_reject[6] = ADDBA_RSP_STATUS_REJECT; priv->addba_reject[7] = ADDBA_RSP_STATUS_REJECT; priv->max_amsdu = 0; #ifdef STA_SUPPORT if (priv->bss_type == MLAN_BSS_TYPE_STA) { priv->add_ba_param.tx_win_size = pmadapter->psdio_device->ampdu_info-> ampdu_sta_txwinsize; priv->add_ba_param.rx_win_size = MLAN_STA_AMPDU_DEF_RXWINSIZE; } #endif #ifdef WIFI_DIRECT_SUPPORT if (priv->bss_type == MLAN_BSS_TYPE_WIFIDIRECT) { priv->add_ba_param.tx_win_size = pmadapter->psdio_device->ampdu_info-> ampdu_wfd_txrxwinsize; priv->add_ba_param.rx_win_size = pmadapter->psdio_device->ampdu_info-> ampdu_wfd_txrxwinsize; } #endif #ifdef UAP_SUPPORT if (priv->bss_type == MLAN_BSS_TYPE_UAP) { priv->add_ba_param.tx_win_size = pmadapter->psdio_device->ampdu_info-> ampdu_uap_txwinsize; priv->add_ba_param.rx_win_size = pmadapter->psdio_device->ampdu_info-> ampdu_uap_rxwinsize; priv->aggr_prio_tbl[6].ampdu_user = priv->aggr_prio_tbl[7].ampdu_user = BA_STREAM_NOT_ALLOWED; } #endif priv->port_ctrl_mode = MTRUE; priv->port_open = MFALSE; ret = wlan_add_bsspriotbl(priv); priv->usr_dev_mcs_support = 0; priv->usr_dot_11n_dev_cap_bg = 0; priv->usr_dot_11n_dev_cap_a = 0; priv->usr_dot_11ac_mcs_support = 0; priv->usr_dot_11ac_dev_cap_bg = 0; priv->usr_dot_11ac_dev_cap_a = 0; LEAVE(); return ret; }