u32 init_bcmc_stainfo(_adapter* padapter) { struct sta_info *psta; struct tx_servq *ptxservq; u32 res=_SUCCESS; NDIS_802_11_MAC_ADDRESS bcast_addr= {0xff,0xff,0xff,0xff,0xff,0xff}; struct sta_priv *pstapriv = &padapter->stapriv; _queue *pstapending = &padapter->xmitpriv.bm_pending; _func_enter_; psta = alloc_stainfo(pstapriv, bcast_addr); if(psta==NULL){ res=_FAIL; RT_TRACE(_module_rtl871x_sta_mgt_c_,_drv_err_,("alloc_stainfo fail")); goto exit; } // default broadcast & multicast use macid 1 psta->mac_id = 1; ptxservq= &(psta->sta_xmitpriv.be_q); /* _enter_critical(&pstapending->lock, &irqL0); if (is_list_empty(&ptxservq->tx_pending)) list_insert_tail(&ptxservq->tx_pending, get_list_head(pstapending)); _exit_critical(&pstapending->lock, &irqL0); */ exit: _func_exit_; return _SUCCESS; }
void createbss_cmd_callback(_adapter *padapter, struct cmd_obj *pcmd) { _irqL irqL; u8 timer_cancelled; struct sta_info *psta = NULL; struct wlan_network *pwlan = NULL; struct mlme_priv *pmlmepriv = &padapter->mlmepriv; NDIS_WLAN_BSSID_EX *pnetwork = (NDIS_WLAN_BSSID_EX *)pcmd->parmbuf; struct wlan_network *tgt_network = &(pmlmepriv->cur_network); _func_enter_; if((pcmd->res != H2C_SUCCESS)) { RT_TRACE(_module_rtl871x_cmd_c_,_drv_err_,("\n ********Error: createbss_cmd_callback Fail ************\n\n.")); _set_timer(&pmlmepriv->assoc_timer, 1 ); } _cancel_timer(&pmlmepriv->assoc_timer, &timer_cancelled); //endian_convert pnetwork->Length = le32_to_cpu(pnetwork->Length); pnetwork->Ssid.SsidLength = le32_to_cpu(pnetwork->Ssid.SsidLength); pnetwork->Privacy =le32_to_cpu(pnetwork->Privacy); pnetwork->Rssi = le32_to_cpu(pnetwork->Rssi); pnetwork->NetworkTypeInUse =le32_to_cpu(pnetwork->NetworkTypeInUse); pnetwork->Configuration.ATIMWindow = le32_to_cpu(pnetwork->Configuration.ATIMWindow); pnetwork->Configuration.BeaconPeriod = le32_to_cpu(pnetwork->Configuration.BeaconPeriod); pnetwork->Configuration.DSConfig =le32_to_cpu(pnetwork->Configuration.DSConfig); pnetwork->Configuration.FHConfig.DwellTime=le32_to_cpu(pnetwork->Configuration.FHConfig.DwellTime); pnetwork->Configuration.FHConfig.HopPattern=le32_to_cpu(pnetwork->Configuration.FHConfig.HopPattern); pnetwork->Configuration.FHConfig.HopSet=le32_to_cpu(pnetwork->Configuration.FHConfig.HopSet); pnetwork->Configuration.FHConfig.Length=le32_to_cpu(pnetwork->Configuration.FHConfig.Length); pnetwork->Configuration.Length = le32_to_cpu(pnetwork->Configuration.Length); pnetwork->InfrastructureMode = le32_to_cpu(pnetwork->InfrastructureMode); pnetwork->IELength = le32_to_cpu(pnetwork->IELength); _enter_critical(&pmlmepriv->lock, &irqL); { pwlan = _alloc_network(pmlmepriv); if ( pwlan == NULL) { pwlan = get_oldest_wlan_network(&pmlmepriv->scanned_queue); if( pwlan == NULL) { RT_TRACE(_module_rtl871x_cmd_c_,_drv_err_,("\n Error: can't get pwlan in joinbss_event_callback \n")); goto createbss_cmd_fail; } pwlan->last_scanned = get_current_time(); } else { list_insert_tail(&(pwlan->list), &pmlmepriv->scanned_queue.queue); } pnetwork->Length = get_NDIS_WLAN_BSSID_EX_sz(pnetwork); _memcpy(&(pwlan->network), pnetwork, pnetwork->Length); pwlan->fixed = _TRUE; //list_insert_tail(&(pwlan->list), &pmlmepriv->scanned_queue.queue); // copy pdev_network information to pmlmepriv->cur_network _memcpy(&tgt_network->network, pnetwork, (get_NDIS_WLAN_BSSID_EX_sz(pnetwork))); // reset DSConfig //tgt_network->network.Configuration.DSConfig = (u32)ch2freq(pnetwork->Configuration.DSConfig); if(pmlmepriv->fw_state & _FW_UNDER_LINKING) pmlmepriv->fw_state ^= _FW_UNDER_LINKING; if((pmlmepriv->fw_state) & WIFI_AP_STATE) { psta = alloc_stainfo(&padapter->stapriv, pnetwork->MacAddress); if (psta == NULL) { // for AP Mode & Adhoc Master Mode RT_TRACE(_module_rtl871x_cmd_c_,_drv_err_,("\nCan't alloc sta_info when createbss_cmd_callback\n")); goto createbss_cmd_fail ; } indicate_connect( padapter); } else { //indicate_disconnect(dev); } // we will set _FW_LINKED when there is one more sat to join us (stassoc_event_callback) } createbss_cmd_fail: _exit_critical(&pmlmepriv->lock, &irqL); free_cmd_obj(pcmd); _func_exit_; }