void rtl8188e_init_dm_priv(struct adapter *Adapter) { struct hal_data_8188e *hal_data = GET_HAL_DATA(Adapter); struct dm_priv *pdmpriv = &hal_data->dmpriv; struct odm_dm_struct *podmpriv = &hal_data->odmpriv; _rtw_memset(pdmpriv, 0, sizeof(struct dm_priv)); Init_ODM_ComInfo_88E(Adapter); ODM_InitDebugSetting(podmpriv); }
void _rtw_init_stainfo(struct sta_info *psta) { _func_enter_; _rtw_memset((u8 *)psta, 0, sizeof (struct sta_info)); _rtw_spinlock_init(&psta->lock); _rtw_init_listhead(&psta->list); _rtw_init_listhead(&psta->hash_list); //_rtw_init_listhead(&psta->asoc_list); //_rtw_init_listhead(&psta->sleep_list); //_rtw_init_listhead(&psta->wakeup_list); _rtw_init_queue(&psta->sleep_q); psta->sleepq_len = 0; _rtw_init_sta_xmit_priv(&psta->sta_xmitpriv); _rtw_init_sta_recv_priv(&psta->sta_recvpriv); #ifdef CONFIG_AP_MODE _rtw_init_listhead(&psta->asoc_list); _rtw_init_listhead(&psta->auth_list); psta->expire_to = 0; psta->flags = 0; psta->capability = 0; psta->bpairwise_key_installed = _FALSE; #ifdef CONFIG_NATIVEAP_MLME psta->nonerp_set = 0; psta->no_short_slot_time_set = 0; psta->no_short_preamble_set = 0; psta->no_ht_gf_set = 0; psta->no_ht_set = 0; psta->ht_20mhz_set = 0; #endif #ifdef CONFIG_TX_MCAST2UNI psta->under_exist_checking = 0; #endif // CONFIG_TX_MCAST2UNI psta->keep_alive_trycnt = 0; #endif // CONFIG_AP_MODE _func_exit_; }
void update_recvframe_attrib_88e( union recv_frame *precvframe, struct recv_stat *prxstat) { struct rx_pkt_attrib *pattrib; struct recv_stat report; PRXREPORT prxreport; //struct recv_frame_hdr *phdr; //phdr = &precvframe->u.hdr; report.rxdw0 = le32_to_cpu(prxstat->rxdw0); report.rxdw1 = le32_to_cpu(prxstat->rxdw1); report.rxdw2 = le32_to_cpu(prxstat->rxdw2); report.rxdw3 = le32_to_cpu(prxstat->rxdw3); report.rxdw4 = le32_to_cpu(prxstat->rxdw4); report.rxdw5 = le32_to_cpu(prxstat->rxdw5); prxreport = (PRXREPORT)&report; pattrib = &precvframe->u.hdr.attrib; _rtw_memset(pattrib, 0, sizeof(struct rx_pkt_attrib)); pattrib->crc_err = (u8)((report.rxdw0 >> 14) & 0x1);;//(u8)prxreport->crc32; // update rx report to recv_frame attribute pattrib->pkt_rpt_type = (u8)((report.rxdw3 >> 14) & 0x3);//prxreport->rpt_sel; if(pattrib->pkt_rpt_type == NORMAL_RX)//Normal rx packet { pattrib->pkt_len = (u16)(report.rxdw0 &0x00003fff);//(u16)prxreport->pktlen; pattrib->drvinfo_sz = (u8)((report.rxdw0 >> 16) & 0xf) * 8;//(u8)(prxreport->drvinfosize << 3); pattrib->physt = (u8)((report.rxdw0 >> 26) & 0x1);//(u8)prxreport->physt; pattrib->bdecrypted = (report.rxdw0 & BIT(27))? 0:1;//(u8)(prxreport->swdec ? 0 : 1); pattrib->encrypt = (u8)((report.rxdw0 >> 20) & 0x7);//(u8)prxreport->security; pattrib->qos = (u8)((report.rxdw0 >> 23) & 0x1);//(u8)prxreport->qos; pattrib->priority = (u8)((report.rxdw1 >> 8) & 0xf);//(u8)prxreport->tid; pattrib->amsdu = (u8)((report.rxdw1 >> 13) & 0x1);//(u8)prxreport->amsdu; pattrib->seq_num = (u16)(report.rxdw2 & 0x00000fff);//(u16)prxreport->seq; pattrib->frag_num = (u8)((report.rxdw2 >> 12) & 0xf);//(u8)prxreport->frag; pattrib->mfrag = (u8)((report.rxdw1 >> 27) & 0x1);//(u8)prxreport->mf; pattrib->mdata = (u8)((report.rxdw1 >> 26) & 0x1);//(u8)prxreport->md; pattrib->mcs_rate = (u8)(report.rxdw3 & 0x3f);//(u8)prxreport->rxmcs; pattrib->rxht = (u8)((report.rxdw3 >> 6) & 0x1);//(u8)prxreport->rxht; pattrib->icv_err = (u8)((report.rxdw0 >> 15) & 0x1);//(u8)prxreport->icverr; //pattrib->shift_sz = (u8)prxreport->shift; }
static void update_recvframe_attrib( PADAPTER padapter, union recv_frame *precvframe, struct recv_stat *prxstat) { struct rx_pkt_attrib *pattrib; struct recv_stat report; PRXREPORT prxreport = (PRXREPORT)&report; report.rxdw0 = le32_to_cpu(prxstat->rxdw0); report.rxdw1 = le32_to_cpu(prxstat->rxdw1); report.rxdw2 = le32_to_cpu(prxstat->rxdw2); report.rxdw3 = le32_to_cpu(prxstat->rxdw3); report.rxdw4 = le32_to_cpu(prxstat->rxdw4); report.rxdw5 = le32_to_cpu(prxstat->rxdw5); pattrib = &precvframe->u.hdr.attrib; _rtw_memset(pattrib, 0, sizeof(struct rx_pkt_attrib)); // update rx report to recv_frame attribute pattrib->pkt_rpt_type = prxreport->c2h_ind?C2H_PACKET:NORMAL_RX; // DBG_871X("%s: pkt_rpt_type=%d\n", __func__, pattrib->pkt_rpt_type); if (pattrib->pkt_rpt_type == NORMAL_RX) { // Normal rx packet // update rx report to recv_frame attribute pattrib->pkt_len = (u16)prxreport->pktlen; pattrib->drvinfo_sz = (u8)(prxreport->drvinfosize << 3); pattrib->physt = (u8)prxreport->physt; pattrib->crc_err = (u8)prxreport->crc32; pattrib->icv_err = (u8)prxreport->icverr; pattrib->bdecrypted = (u8)(prxreport->swdec ? 0 : 1); pattrib->encrypt = (u8)prxreport->security; pattrib->qos = (u8)prxreport->qos; pattrib->priority = (u8)prxreport->tid; pattrib->amsdu = (u8)prxreport->amsdu; pattrib->seq_num = (u16)prxreport->seq; pattrib->frag_num = (u8)prxreport->frag; pattrib->mfrag = (u8)prxreport->mf; pattrib->mdata = (u8)prxreport->md; pattrib->data_rate = (u8)prxreport->rx_rate; } else { pattrib->pkt_len = (u16)prxreport->pktlen; } }
static uint rtw_p2p_attr_remove(u8 *ie, uint ielen_ori, u8 attr_id) { u8 *target_attr; u32 target_attr_len; uint ielen = ielen_ori; int index=0; while(1) { target_attr=rtw_get_p2p_attr(ie, ielen, attr_id, NULL, &target_attr_len); if(target_attr && target_attr_len) { u8 *next_attr = target_attr+target_attr_len; uint remain_len = ielen-(next_attr-ie); //dump_ies(ie, ielen); #if 0 DBG_871X("[%d] ie:%p, ielen:%u\n" "target_attr:%p, target_attr_len:%u\n" "next_attr:%p, remain_len:%u\n" , index++ , ie, ielen , target_attr, target_attr_len , next_attr, remain_len ); #endif _rtw_memset(target_attr, 0, target_attr_len); _rtw_memcpy(target_attr, next_attr, remain_len); _rtw_memset(target_attr+remain_len, 0, target_attr_len); *(ie+1) -= target_attr_len; ielen-=target_attr_len; } else { //if(index>0) // dump_ies(ie, ielen); break; } } return ielen; }
void rtw_free_pwrctrl_priv(_adapter *adapter) { struct pwrctrl_priv *pwrctrlpriv = &adapter->pwrctrlpriv; _func_enter_; _rtw_memset((unsigned char *)pwrctrlpriv, 0, sizeof(struct pwrctrl_priv)); _free_pwrlock(&pwrctrlpriv->lock); _func_exit_; }
void rtw_init_pwrctrl_priv(_adapter *padapter) { struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv; _func_enter_; _rtw_memset((unsigned char *)pwrctrlpriv, 0, sizeof(struct pwrctrl_priv)); #ifdef PLATFORM_WINDOWS pwrctrlpriv->pnp_current_pwr_state=NdisDeviceStateD0; #endif _init_pwrlock(&pwrctrlpriv->lock); pwrctrlpriv->current_rfpwrstate = rf_on; pwrctrlpriv->ips_enter_cnts=0; pwrctrlpriv->ips_leave_cnts=0; pwrctrlpriv->pwr_state_check_inverval = 2000; pwrctrlpriv->pwr_state_check_cnts = 0; pwrctrlpriv->bInternalAutoSuspend = _FALSE; pwrctrlpriv->bkeepfwalive = _FALSE; #ifdef CONFIG_AUTOSUSPEND #ifdef SUPPORT_HW_RFOFF_DETECTED pwrctrlpriv->pwr_state_check_inverval = (pwrctrlpriv->bHWPwrPindetect) ?1000:2000; #endif #endif pwrctrlpriv->LpsIdleCount = 0; //pwrctrlpriv->FWCtrlPSMode =padapter->registrypriv.power_mgnt;// PS_MODE_MIN; pwrctrlpriv->power_mgnt =padapter->registrypriv.power_mgnt;// PS_MODE_MIN; pwrctrlpriv->bLeisurePs = (PS_MODE_ACTIVE != pwrctrlpriv->power_mgnt)?_TRUE:_FALSE; pwrctrlpriv->bFwCurrentInPSMode = _FALSE; pwrctrlpriv->cpwm = PS_STATE_S4; pwrctrlpriv->pwr_mode = PS_MODE_ACTIVE; pwrctrlpriv->smart_ps = 0; pwrctrlpriv->tog = 0x80; #ifdef PLATFORM_LINUX _init_timer(&(pwrctrlpriv->pwr_state_check_timer), padapter->pnetdev, pwr_state_check_handler, (u8 *)padapter); #endif _func_exit_; }
void rtl8723a_init_dm_priv(IN PADAPTER Adapter) { PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter); struct dm_priv *pdmpriv = &pHalData->dmpriv; PDM_ODM_T podmpriv = &pHalData->odmpriv; _rtw_memset(pdmpriv, 0, sizeof(struct dm_priv)); Init_ODM_ComInfo_8723a(Adapter); #ifdef CONFIG_SW_ANTENNA_DIVERSITY //_init_timer(&(pdmpriv->SwAntennaSwitchTimer), Adapter->pnetdev , odm_SW_AntennaSwitchCallback, Adapter); ODM_InitAllTimers(podmpriv ); #endif }
void rtw_reset_securitypriv(struct adapter *adapter) { u8 backup_index = 0; u8 backup_counter = 0x00; u32 backup_time = 0; if (adapter->securitypriv.dot11AuthAlgrthm == dot11AuthAlgrthm_8021X) { /* 802.1x */ /* We have to backup the PMK information for WiFi PMK Caching test item. */ /* Backup the btkip_countermeasure information. */ /* When the countermeasure is trigger, the driver have to disconnect with AP for 60 seconds. */ _rtw_memset(&backup_pmkid[0], 0x00, sizeof(struct rt_pmkid_list) * NUM_PMKID_CACHE); memcpy(&backup_pmkid[0], &adapter->securitypriv.PMKIDList[0], sizeof(struct rt_pmkid_list) * NUM_PMKID_CACHE); backup_index = adapter->securitypriv.PMKIDIndex; backup_counter = adapter->securitypriv.btkip_countermeasure; backup_time = adapter->securitypriv.btkip_countermeasure_time; _rtw_memset((unsigned char *)&adapter->securitypriv, 0, sizeof(struct security_priv)); /* Restore the PMK information to securitypriv structure for the following connection. */ memcpy(&adapter->securitypriv.PMKIDList[0], &backup_pmkid[0], sizeof(struct rt_pmkid_list) * NUM_PMKID_CACHE); adapter->securitypriv.PMKIDIndex = backup_index; adapter->securitypriv.btkip_countermeasure = backup_counter; adapter->securitypriv.btkip_countermeasure_time = backup_time; adapter->securitypriv.ndisauthtype = Ndis802_11AuthModeOpen; adapter->securitypriv.ndisencryptstatus = Ndis802_11WEPDisabled; } else { /* reset values in securitypriv */ struct security_priv *psec_priv = &adapter->securitypriv; psec_priv->dot11AuthAlgrthm = dot11AuthAlgrthm_Open; /* open system */ psec_priv->dot11PrivacyAlgrthm = _NO_PRIVACY_; psec_priv->dot11PrivacyKeyIndex = 0; psec_priv->dot118021XGrpPrivacy = _NO_PRIVACY_; psec_priv->dot118021XGrpKeyid = 1; psec_priv->ndisauthtype = Ndis802_11AuthModeOpen; psec_priv->ndisencryptstatus = Ndis802_11WEPDisabled; } }
void rtw_report_sec_ie(_adapter *adapter,u8 authmode,u8 *sec_ie) { uint len; u8 *buff,*p,i; union iwreq_data wrqu; _func_enter_; RT_TRACE(_module_mlme_osdep_c_,_drv_info_,("+rtw_report_sec_ie, authmode=%d\n", authmode)); buff = NULL; if(authmode==_WPA_IE_ID_) { RT_TRACE(_module_mlme_osdep_c_,_drv_info_,("rtw_report_sec_ie, authmode=%d\n", authmode)); buff = rtw_zmalloc(IW_CUSTOM_MAX); if (NULL == buff) { DBG_871X(FUNC_ADPT_FMT ": alloc memory FAIL!!\n", FUNC_ADPT_ARG(adapter)); return; } p = buff; p+=sprintf(p,"ASSOCINFO(ReqIEs="); len = sec_ie[1]+2; len = (len < IW_CUSTOM_MAX) ? len:IW_CUSTOM_MAX; for(i=0;i<len;i++){ p+=sprintf(p,"%02x",sec_ie[i]); } p+=sprintf(p,")"); _rtw_memset(&wrqu,0,sizeof(wrqu)); wrqu.data.length=p-buff; wrqu.data.length = (wrqu.data.length<IW_CUSTOM_MAX) ? wrqu.data.length:IW_CUSTOM_MAX; #ifndef CONFIG_IOCTL_CFG80211 wireless_send_event(adapter->pnetdev,IWEVCUSTOM,&wrqu,buff); #endif rtw_mfree(buff, IW_CUSTOM_MAX); } exit: _func_exit_; }
VOID InsertEMContent(IN struct xmit_frame *pxmitframe, IN u8 *VirtualAddress) { _rtw_memset(VirtualAddress, 0, 8); SET_EARLYMODE_PKTNUM(VirtualAddress, pxmitframe->EMPktNum); SET_EARLYMODE_LEN0(VirtualAddress, pxmitframe->EMPktLen[0]); SET_EARLYMODE_LEN1(VirtualAddress, pxmitframe->EMPktLen[1]); SET_EARLYMODE_LEN2_1(VirtualAddress, pxmitframe->EMPktLen[2]&0xF); SET_EARLYMODE_LEN2_2(VirtualAddress, pxmitframe->EMPktLen[2]>>4); SET_EARLYMODE_LEN3(VirtualAddress, pxmitframe->EMPktLen[3]); SET_EARLYMODE_LEN4(VirtualAddress, pxmitframe->EMPktLen[4]); //RT_PRINT_DATA(COMP_SEND, DBG_LOUD, "EM Header:", VirtualAddress, 8) }
static uint rtw_p2p_attr_remove(u8 *ie, uint ielen_ori, u8 attr_id) { u8 *target_attr; uint target_attr_clen; uint ielen = ielen_ori; int index=0; while(1) { target_attr=rtw_get_p2p_attr_content(ie, ielen, attr_id, NULL, &target_attr_clen); if(target_attr && target_attr_clen) { u8 *next_attr = target_attr+target_attr_clen+3; uint remain_len = ielen-(next_attr-ie); //dump_ie(ie, ielen); //DBG_871X("[%d] ie:%p, ielen:%u\n" // "target_attr:%p, target_attr_clen:%u\n" // "next_attr:%p, remain_len:%u\n" // , index++ // , ie, ielen // , target_attr, target_attr_clen // , next_attr, remain_len //); _rtw_memset(target_attr, 0, target_attr_clen+3); _rtw_memcpy(target_attr, next_attr, remain_len); _rtw_memset(target_attr+remain_len, 0, ielen-(target_attr_clen+3)); *(ie+1) -= target_attr_clen+3; ielen-=target_attr_clen+3; } else { //if(index>0) // dump_ie(ie, ielen); break; } } return ielen; }
u8 rtw_set_802_11_remove_key(_adapter* padapter, NDIS_802_11_REMOVE_KEY *key){ u8 *pbssid; struct sta_info *stainfo; u8 bgroup = (key->KeyIndex & 0x4000000) > 0 ? false: true; u8 keyIndex = (u8)key->KeyIndex & 0x03; u8 ret=_SUCCESS; _func_enter_; if ((key->KeyIndex & 0xbffffffc) > 0) { ret=_FAIL; goto exit; } if (bgroup == true) { /* clear group key by index */ _rtw_memset(&padapter->securitypriv.dot118021XGrpKey[keyIndex], 0, 16); /* \todo Send a H2C Command to Firmware for removing this Key in CAM Entry. */ } else { pbssid=get_bssid(&padapter->mlmepriv); stainfo=rtw_get_stainfo(&padapter->stapriv , pbssid ); if (stainfo) { /* clear key by BSSID */ _rtw_memset(&stainfo->dot118021x_UncstKey, 0, 16); /* \todo Send a H2C Command to Firmware for disable this Key in CAM Entry. */ } else { ret= _FAIL; goto exit; } } exit: _func_exit_; return ret; }
s32 c2h_evt_read(_adapter *adapter, u8 *buf) { s32 ret = _FAIL; struct c2h_evt_hdr *c2h_evt; int i; u8 trigger; if (buf == NULL) goto exit; trigger = rtw_read8(adapter, REG_C2HEVT_CLEAR); if (trigger == C2H_EVT_HOST_CLOSE) { goto exit; /* Not ready */ } else if (trigger != C2H_EVT_FW_CLOSE) { goto clear_evt; /* Not a valid value */ } c2h_evt = (struct c2h_evt_hdr *)buf; _rtw_memset(c2h_evt, 0, 16); *buf = rtw_read8(adapter, REG_C2HEVT_MSG_NORMAL); *(buf+1) = rtw_read8(adapter, REG_C2HEVT_MSG_NORMAL + 1); RT_PRINT_DATA(_module_hal_init_c_, _drv_info_, "c2h_evt_read(): ", &c2h_evt , sizeof(c2h_evt)); if (0) { DBG_871X("%s id:%u, len:%u, seq:%u, trigger:0x%02x\n", __func__ , c2h_evt->id, c2h_evt->plen, c2h_evt->seq, trigger); } /* Read the content */ for (i = 0; i < c2h_evt->plen; i++) c2h_evt->payload[i] = rtw_read8(adapter, REG_C2HEVT_MSG_NORMAL + sizeof(*c2h_evt) + i); RT_PRINT_DATA(_module_hal_init_c_, _drv_info_, "c2h_evt_read(): Command Content:\n", c2h_evt->payload, c2h_evt->plen); ret = _SUCCESS; clear_evt: /* * Clear event to notify FW we have read the command. * If this field isn't clear, the FW won't update the next command message. */ c2h_evt_clear(adapter); exit: return ret; }
void rtl8192e_init_dm_priv(IN PADAPTER Adapter) { PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter); struct dm_priv *pdmpriv = &pHalData->dmpriv; PDM_ODM_T podmpriv = &pHalData->odmpriv; _rtw_memset(pdmpriv, 0, sizeof(struct dm_priv)); //_rtw_spinlock_init(&(pHalData->odm_stainfo_lock)); Init_ODM_ComInfo_8192e(Adapter); //_init_timer(&(pdmpriv->SwAntennaSwitchTimer), Adapter->pnetdev , odm_SW_AntennaSwitchCallback, Adapter); ODM_InitAllTimers(podmpriv ); ODM_InitDebugSetting(podmpriv); pHalData->RegRFPathS1 = 0; }
void ODM_Memory_Set (IN PDM_ODM_T pDM_Odm, IN PVOID pbuf, IN s1Byte value, IN u4Byte length) { #if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL)) #elif (DM_ODM_SUPPORT_TYPE & ODM_CE ) _rtw_memset(pbuf,value, length); #elif(DM_ODM_SUPPORT_TYPE & ODM_WIN) PlatformFillMemory(pbuf,length,value); #endif }
static void mp_init_xmit_attrib(struct mp_tx *pmptx, struct adapter *padapter) { struct pkt_attrib *pattrib; struct tx_desc *desc; /* init xmitframe attribute */ pattrib = &pmptx->attrib; _rtw_memset(pattrib, 0, sizeof(struct pkt_attrib)); desc = &pmptx->desc; _rtw_memset(desc, 0, TXDESC_SIZE); pattrib->ether_type = 0x8712; _rtw_memset(pattrib->dst, 0xFF, ETH_ALEN); pattrib->ack_policy = 0; pattrib->hdrlen = WLAN_HDR_A3_LEN; pattrib->subtype = WIFI_DATA; pattrib->priority = 0; pattrib->qsel = pattrib->priority; pattrib->nr_frags = 1; pattrib->encrypt = 0; pattrib->bswenc = false; pattrib->qos_en = false; }
// // Description: In normal chip, we should send some packet to Hw which will be used by Fw // in FW LPS mode. The function is to fill the Tx descriptor of this packets, then // Fw can tell Hw to send these packet derectly. // Added by tynli. 2009.10.15. // static VOID FillFakeTxDescriptor92D( IN PADAPTER Adapter, IN u8* pDesc, IN u32 BufferLen, IN BOOLEAN IsPsPoll ) { HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); struct tx_desc *ptxdesc = (struct tx_desc *)pDesc; // Clear all status _rtw_memset(pDesc, 0, 32); //offset 0 ptxdesc->txdw0 |= cpu_to_le32( OWN | FSG | LSG); //own, bFirstSeg, bLastSeg; ptxdesc->txdw0 |= cpu_to_le32(((TXDESC_SIZE+OFFSET_SZ)<<OFFSET_SHT)&0x00ff0000); //32 bytes for TX Desc ptxdesc->txdw0 |= cpu_to_le32(BufferLen&0x0000ffff); // Buffer size + command header //offset 4 ptxdesc->txdw1 |= cpu_to_le32((QSLT_MGNT<<QSEL_SHT)&0x00001f00); // Fixed queue of Mgnt queue //Set NAVUSEHDR to prevent Ps-poll AId filed to be changed to error vlaue by Hw. if(IsPsPoll) { ptxdesc->txdw1 |= cpu_to_le32(NAVUSEHDR); } else { ptxdesc->txdw4 |= cpu_to_le32(BIT(7)); // Hw set sequence number ptxdesc->txdw3 |= cpu_to_le32((8 <<28)); //set bit3 to 1. Suugested by TimChen. 2009.12.29. } //offset 16 ptxdesc->txdw4 |= cpu_to_le32(BIT(8));//driver uses rate if(pHalData->CurrentBandType92D == BAND_ON_5G) ptxdesc->txdw5 |= cpu_to_le32(BIT(2));// use OFDM 6Mbps #ifdef CONFIG_USB_HCI // USB interface drop packet if the checksum of descriptor isn't correct. // Using this checksum can let hardware recovery from packet bulk out error (e.g. Cancel URC, Bulk out error.). rtl8192du_cal_txdesc_chksum(ptxdesc); #endif RT_PRINT_DATA(_module_rtl8712_cmd_c_, _drv_info_, "FillFakeTxDescriptor92D(): H2C Tx Desc Content ----->\n", pDesc, TXDESC_SIZE); }
u8 rtw_set_802_11_bssid_list_scan(_adapter* padapter) { _irqL irqL; struct mlme_priv *pmlmepriv= &padapter->mlmepriv; u8 res=_TRUE; _func_enter_; RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("+rtw_set_802_11_bssid_list_scan(), fw_state=%x\n", pmlmepriv->fw_state)); if (padapter == NULL) { res=_FALSE; goto exit; } if (padapter->hw_init_completed==_FALSE){ res = _FALSE; RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("\n===rtw_set_802_11_bssid_list_scan:hw_init_completed==_FALSE===\n")); goto exit; } if ((check_fwstate(pmlmepriv, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) == _TRUE) || (pmlmepriv->sitesurveyctrl.traffic_busy == _TRUE)) { // Scan or linking is in progress, do nothing. RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("rtw_set_802_11_bssid_list_scan fail since fw_state = %x\n", pmlmepriv->fw_state)); res = _TRUE; if(check_fwstate(pmlmepriv, (_FW_UNDER_SURVEY|_FW_UNDER_LINKING))== _TRUE){ RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("\n###_FW_UNDER_SURVEY|_FW_UNDER_LINKING\n\n")); } else { RT_TRACE(_module_rtl871x_ioctl_set_c_,_drv_err_,("\n###pmlmepriv->sitesurveyctrl.traffic_busy==_TRUE\n\n")); } } else { NDIS_802_11_SSID ssid; _enter_critical_bh(&pmlmepriv->lock, &irqL); _rtw_memset((unsigned char*)&ssid, 0, sizeof(NDIS_802_11_SSID)); res = rtw_sitesurvey_cmd(padapter, &ssid); _exit_critical_bh(&pmlmepriv->lock, &irqL); } exit: _func_exit_; return res; }
// // Description: In normal chip, we should send some packet to Hw which will be used by Fw // in FW LPS mode. The function is to fill the Tx descriptor of this packets, then // Fw can tell Hw to send these packet derectly. // void rtl8188e_fill_fake_txdesc( PADAPTER padapter, u8* pDesc, u32 BufferLen, u8 IsPsPoll, u8 IsBTQosNull) { struct tx_desc *ptxdesc; // Clear all status ptxdesc = (struct tx_desc*)pDesc; _rtw_memset(pDesc, 0, TXDESC_SIZE); //offset 0 ptxdesc->txdw0 |= cpu_to_le32( OWN | FSG | LSG); //own, bFirstSeg, bLastSeg; ptxdesc->txdw0 |= cpu_to_le32(((TXDESC_SIZE+OFFSET_SZ)<<OFFSET_SHT)&0x00ff0000); //32 bytes for TX Desc ptxdesc->txdw0 |= cpu_to_le32(BufferLen&0x0000ffff); // Buffer size + command header //offset 4 ptxdesc->txdw1 |= cpu_to_le32((QSLT_MGNT<<QSEL_SHT)&0x00001f00); // Fixed queue of Mgnt queue //Set NAVUSEHDR to prevent Ps-poll AId filed to be changed to error vlaue by Hw. if (IsPsPoll) { ptxdesc->txdw1 |= cpu_to_le32(NAVUSEHDR); } else { ptxdesc->txdw4 |= cpu_to_le32(BIT(7)); // Hw set sequence number ptxdesc->txdw3 |= cpu_to_le32((8 <<28)); //set bit3 to 1. Suugested by TimChen. 2009.12.29. } if (_TRUE == IsBTQosNull) { ptxdesc->txdw2 |= cpu_to_le32(BIT(23)); // BT NULL } //offset 16 ptxdesc->txdw4 |= cpu_to_le32(BIT(8));//driver uses rate #if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) // USB interface drop packet if the checksum of descriptor isn't correct. // Using this checksum can let hardware recovery from packet bulk out error (e.g. Cancel URC, Bulk out error.). rtl8188e_cal_txdesc_chksum(ptxdesc); #endif }
void update_recvframe_attrib_88e( union recv_frame *precvframe, struct recv_stat *prxstat) { struct rx_pkt_attrib *pattrib; struct recv_stat report; report.rxdw0 = prxstat->rxdw0; report.rxdw1 = prxstat->rxdw1; report.rxdw2 = prxstat->rxdw2; report.rxdw3 = prxstat->rxdw3; report.rxdw4 = prxstat->rxdw4; report.rxdw5 = prxstat->rxdw5; pattrib = &precvframe->u.hdr.attrib; _rtw_memset(pattrib, 0, sizeof(struct rx_pkt_attrib)); pattrib->crc_err = (u8)((le32_to_cpu(report.rxdw0) >> 14) & 0x1);;/* u8)prxreport->crc32; */ /* update rx report to recv_frame attribute */ pattrib->pkt_rpt_type = (u8)((le32_to_cpu(report.rxdw3) >> 14) & 0x3);/* prxreport->rpt_sel; */ if (pattrib->pkt_rpt_type == NORMAL_RX) { /* Normal rx packet */ pattrib->pkt_len = (u16)(le32_to_cpu(report.rxdw0) & 0x00003fff);/* u16)prxreport->pktlen; */ pattrib->drvinfo_sz = (u8)((le32_to_cpu(report.rxdw0) >> 16) & 0xf) * 8;/* u8)(prxreport->drvinfosize << 3); */ pattrib->physt = (u8)((le32_to_cpu(report.rxdw0) >> 26) & 0x1);/* u8)prxreport->physt; */ pattrib->bdecrypted = (le32_to_cpu(report.rxdw0) & BIT(27))? 0:1;/* u8)(prxreport->swdec ? 0 : 1); */ pattrib->encrypt = (u8)((le32_to_cpu(report.rxdw0) >> 20) & 0x7);/* u8)prxreport->security; */ pattrib->qos = (u8)((le32_to_cpu(report.rxdw0) >> 23) & 0x1);/* u8)prxreport->qos; */ pattrib->priority = (u8)((le32_to_cpu(report.rxdw1) >> 8) & 0xf);/* u8)prxreport->tid; */ pattrib->amsdu = (u8)((le32_to_cpu(report.rxdw1) >> 13) & 0x1);/* u8)prxreport->amsdu; */ pattrib->seq_num = (u16)(le32_to_cpu(report.rxdw2) & 0x00000fff);/* u16)prxreport->seq; */ pattrib->frag_num = (u8)((le32_to_cpu(report.rxdw2) >> 12) & 0xf);/* u8)prxreport->frag; */ pattrib->mfrag = (u8)((le32_to_cpu(report.rxdw1) >> 27) & 0x1);/* u8)prxreport->mf; */ pattrib->mdata = (u8)((le32_to_cpu(report.rxdw1) >> 26) & 0x1);/* u8)prxreport->md; */ pattrib->mcs_rate = (u8)(le32_to_cpu(report.rxdw3) & 0x3f);/* u8)prxreport->rxmcs; */ pattrib->rxht = (u8)((le32_to_cpu(report.rxdw3) >> 6) & 0x1);/* u8)prxreport->rxht; */ pattrib->icv_err = (u8)((le32_to_cpu(report.rxdw0) >> 15) & 0x1);/* u8)prxreport->icverr; */ pattrib->shift_sz = (u8)((le32_to_cpu(report.rxdw0) >> 24) & 0x3); } else if (pattrib->pkt_rpt_type == TX_REPORT1) { /* CCX */
void rtl8188e_fill_fake_txdesc( struct adapter * padapter, u8* pDesc, u32 BufferLen, u8 IsPsPoll, u8 IsBTQosNull) { struct tx_desc *ptxdesc; /* Clear all status */ ptxdesc = (struct tx_desc*)pDesc; _rtw_memset(pDesc, 0, TXDESC_SIZE); /* offset 0 */ ptxdesc->txdw0 |= cpu_to_le32( OWN | FSG | LSG); /* own, bFirstSeg, bLastSeg; */ ptxdesc->txdw0 |= cpu_to_le32(((TXDESC_SIZE+OFFSET_SZ)<<OFFSET_SHT)&0x00ff0000); /* 32 bytes for TX Desc */ ptxdesc->txdw0 |= cpu_to_le32(BufferLen&0x0000ffff); /* Buffer size + command header */ /* offset 4 */ ptxdesc->txdw1 |= cpu_to_le32((QSLT_MGNT<<QSEL_SHT)&0x00001f00); /* Fixed queue of Mgnt queue */ /* Set NAVUSEHDR to prevent Ps-poll AId filed to be changed to error vlaue by Hw. */ if (IsPsPoll) { ptxdesc->txdw1 |= cpu_to_le32(NAVUSEHDR); } else { ptxdesc->txdw4 |= cpu_to_le32(BIT(7)); /* Hw set sequence number */ ptxdesc->txdw3 |= cpu_to_le32((8 <<28)); /* set bit3 to 1. Suugested by TimChen. 2009.12.29. */ } if (true == IsBTQosNull) { ptxdesc->txdw2 |= cpu_to_le32(BIT(23)); /* BT NULL */ } /* offset 16 */ ptxdesc->txdw4 |= cpu_to_le32(BIT(8));/* driver uses rate */ /* USB interface drop packet if the checksum of descriptor isn't correct. */ /* Using this checksum can let hardware recovery from packet bulk out error (e.g. Cancel URC, Bulk out error.). */ rtl8188eu_cal_txdesc_chksum(ptxdesc); }
void _rtw_init_stainfo(struct sta_info *psta) { _func_enter_; _rtw_memset((u8 *)psta, 0, sizeof (struct sta_info)); _rtw_spinlock_init(&psta->lock); _rtw_init_listhead(&psta->list); _rtw_init_listhead(&psta->hash_list); //_rtw_init_listhead(&psta->asoc_list); //_rtw_init_listhead(&psta->sleep_list); //_rtw_init_listhead(&psta->wakeup_list); _rtw_init_queue(&psta->sleep_q); psta->sleepq_len = 0; _rtw_init_sta_xmit_priv(&psta->sta_xmitpriv); _rtw_init_sta_recv_priv(&psta->sta_recvpriv); #ifdef CONFIG_AP_MODE _rtw_init_listhead(&psta->asoc_list); _rtw_init_listhead(&psta->auth_list); psta->expire_to = 0; psta->flags = 0; psta->capability = 0; #ifdef CONFIG_NATIVEAP_MLME psta->nonerp_set = 0; psta->no_short_slot_time_set = 0; psta->no_short_preamble_set = 0; psta->no_ht_gf_set = 0; psta->no_ht_set = 0; psta->ht_20mhz_set = 0; #endif #endif _func_exit_; }
static void Init_ODM_ComInfo_88E(struct adapter *Adapter) { struct hal_data_8188e *hal_data = GET_HAL_DATA(Adapter); struct dm_priv *pdmpriv = &hal_data->dmpriv; struct odm_dm_struct *dm_odm = &(hal_data->odmpriv); u8 cut_ver, fab_ver; /* Init Value */ _rtw_memset(dm_odm, 0, sizeof(dm_odm)); dm_odm->Adapter = Adapter; ODM_CmnInfoInit(dm_odm, ODM_CMNINFO_PLATFORM, ODM_CE); if (Adapter->interface_type == RTW_GSPI) ODM_CmnInfoInit(dm_odm, ODM_CMNINFO_INTERFACE, ODM_ITRF_SDIO); else ODM_CmnInfoInit(dm_odm, ODM_CMNINFO_INTERFACE, Adapter->interface_type);/* RTL871X_HCI_TYPE */ ODM_CmnInfoInit(dm_odm, ODM_CMNINFO_IC_TYPE, ODM_RTL8188E); fab_ver = ODM_TSMC; cut_ver = ODM_CUT_A; ODM_CmnInfoInit(dm_odm, ODM_CMNINFO_FAB_VER, fab_ver); ODM_CmnInfoInit(dm_odm, ODM_CMNINFO_CUT_VER, cut_ver); ODM_CmnInfoInit(dm_odm, ODM_CMNINFO_MP_TEST_CHIP, IS_NORMAL_CHIP(hal_data->VersionID)); ODM_CmnInfoInit(dm_odm, ODM_CMNINFO_PATCH_ID, hal_data->CustomerID); ODM_CmnInfoInit(dm_odm, ODM_CMNINFO_BWIFI_TEST, Adapter->registrypriv.wifi_spec); if (hal_data->rf_type == RF_1T1R) ODM_CmnInfoUpdate(dm_odm, ODM_CMNINFO_RF_TYPE, ODM_1T1R); else if (hal_data->rf_type == RF_2T2R) ODM_CmnInfoUpdate(dm_odm, ODM_CMNINFO_RF_TYPE, ODM_2T2R); else if (hal_data->rf_type == RF_1T2R) ODM_CmnInfoUpdate(dm_odm, ODM_CMNINFO_RF_TYPE, ODM_1T2R); ODM_CmnInfoInit(dm_odm, ODM_CMNINFO_RF_ANTENNA_TYPE, hal_data->TRxAntDivType); pdmpriv->InitODMFlag = ODM_RF_CALIBRATION | ODM_RF_TX_PWR_TRACK; ODM_CmnInfoUpdate(dm_odm, ODM_CMNINFO_ABILITY, pdmpriv->InitODMFlag); }
void rtw_report_sec_ie(_adapter *adapter,u8 authmode,u8 *sec_ie) { uint len; u8 *buff,*p,i; union iwreq_data wrqu; _func_enter_; RT_TRACE(_module_mlme_osdep_c_,_drv_info_,("+rtw_report_sec_ie, authmode=%d\n", authmode)); buff = NULL; if(authmode==_WPA_IE_ID_) { RT_TRACE(_module_mlme_osdep_c_,_drv_info_,("rtw_report_sec_ie, authmode=%d\n", authmode)); buff = kzalloc(IW_CUSTOM_MAX, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL); if (!buff) return; p=buff; p+=sprintf(p,"ASSOCINFO(ReqIEs="); len = sec_ie[1]+2; len = (len < IW_CUSTOM_MAX) ? len:IW_CUSTOM_MAX; for(i=0;i<len;i++){ p+=sprintf(p,"%02x",sec_ie[i]); } p+=sprintf(p,")"); _rtw_memset(&wrqu,0,sizeof(wrqu)); wrqu.data.length=p-buff; wrqu.data.length = (wrqu.data.length<IW_CUSTOM_MAX) ? wrqu.data.length:IW_CUSTOM_MAX; wireless_send_event(adapter->pnetdev,IWEVCUSTOM,&wrqu,buff); if(buff) rtw_mfree(buff, IW_CUSTOM_MAX); } _func_exit_; }
static void update_recvframe_attrib( union recv_frame *precvframe, struct recv_stat *prxstat) { struct rx_pkt_attrib *pattrib; struct recv_stat report; PRXREPORT prxreport; report.rxdw0 = le32_to_cpu(prxstat->rxdw0); report.rxdw1 = le32_to_cpu(prxstat->rxdw1); report.rxdw2 = le32_to_cpu(prxstat->rxdw2); report.rxdw3 = le32_to_cpu(prxstat->rxdw3); report.rxdw4 = le32_to_cpu(prxstat->rxdw4); report.rxdw5 = le32_to_cpu(prxstat->rxdw5); prxreport = (PRXREPORT)&report; pattrib = &precvframe->u.hdr.attrib; _rtw_memset(pattrib, 0, sizeof(struct rx_pkt_attrib)); // update rx report to recv_frame attribute pattrib->pkt_len = (u16)prxreport->pktlen; pattrib->drvinfo_sz = (u8)(prxreport->drvinfosize << 3); pattrib->physt = (u8)prxreport->physt; pattrib->crc_err = (u8)prxreport->crc32; pattrib->icv_err = (u8)prxreport->icverr; pattrib->bdecrypted = (u8)(prxreport->swdec ? 0 : 1); pattrib->encrypt = (u8)prxreport->security; pattrib->qos = (u8)prxreport->qos; pattrib->priority = (u8)prxreport->tid; pattrib->amsdu = (u8)prxreport->amsdu; pattrib->seq_num = (u16)prxreport->seq; pattrib->frag_num = (u8)prxreport->frag; pattrib->mfrag = (u8)prxreport->mf; pattrib->mdata = (u8)prxreport->md; pattrib->mcs_rate = (u8)prxreport->rxmcs; pattrib->rxht = (u8)prxreport->rxht; }
// // Description: In normal chip, we should send some packet to Hw which will be used by Fw // in FW LPS mode. The function is to fill the Tx descriptor of this packets, then // Fw can tell Hw to send these packet derectly. // void rtl8192e_fill_fake_txdesc( PADAPTER padapter, u8* pDesc, u32 BufferLen, u8 IsPsPoll, u8 IsBTQosNull) { struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; // Clear all status _rtw_memset(pDesc, 0, TXDESC_SIZE); SET_TX_DESC_OFFSET_92E(pDesc, (TXDESC_SIZE+OFFSET_SZ)); SET_TX_DESC_PKT_SIZE_92E(pDesc, BufferLen); if (pmlmeext->cur_wireless_mode & WIRELESS_11B) { SET_TX_DESC_RATE_ID_92E(pDesc, RATR_INX_WIRELESS_B); } else { SET_TX_DESC_RATE_ID_92E(pDesc, RATR_INX_WIRELESS_G); } SET_TX_DESC_QUEUE_SEL_92E(pDesc, QSLT_MGNT); //Set NAVUSEHDR to prevent Ps-poll AId filed to be changed to error vlaue by Hw. if (IsPsPoll) { SET_TX_DESC_NAV_USE_HDR_92E(pDesc, 1); } else { SET_TX_DESC_EN_HWSEQ_92E(pDesc, 1); // Hw set sequence number } SET_TX_DESC_USE_RATE_92E(pDesc, 1); SET_TX_DESC_TX_RATE_92E(pDesc, MRateToHwRate(pmlmeext->tx_rate)); #if defined(CONFIG_USB_HCI) || defined(CONFIG_SDIO_HCI) // USB interface drop packet if the checksum of descriptor isn't correct. // Using this checksum can let hardware recovery from packet bulk out error (e.g. Cancel URC, Bulk out error.). rtl8192e_cal_txdesc_chksum(pDesc); #endif }
u8 rtl8192d_set_raid_cmd(_adapter*padapter, u32 mask, u8 arg) { u8 buf[5]; u8 res=_SUCCESS; _func_enter_; _rtw_memset(buf, 0, 5); mask = cpu_to_le32( mask ); _rtw_memcpy(buf, &mask, 4); buf[4] = arg; FillH2CCmd92D(padapter, H2C_RA_MASK, 5, buf); _func_exit_; return res; }
u8 rtw_set_802_11_remove_wep(_adapter* padapter, u32 keyindex){ u8 ret=_SUCCESS; _func_enter_; if (keyindex >= 0x80000000 || padapter == NULL){ ret=_FALSE; goto exit; } else { int res; struct security_priv* psecuritypriv=&(padapter->securitypriv); if( keyindex < 4 ){ _rtw_memset(&psecuritypriv->dot11DefKey[keyindex], 0, 16); res=rtw_set_key(padapter,psecuritypriv,keyindex, 0); psecuritypriv->dot11DefKeylen[keyindex]=0; if(res==_FAIL) ret=_FAIL; } else { ret=_FAIL; } } exit: _func_exit_; return ret; }
void rtw_hostapd_mlme_rx(_adapter *padapter, union recv_frame *precv_frame) { #ifdef CONFIG_HOSTAPD_MLME _pkt *skb; struct hostapd_priv *phostapdpriv = padapter->phostapdpriv; struct net_device *pmgnt_netdev = phostapdpriv->pmgnt_netdev; printk(KERN_EMERG "\n rtw_hostapd_mlme_rx"); //Agostino Polizzano RT_TRACE(_module_recv_osdep_c_, _drv_info_, ("+rtw_hostapd_mlme_rx\n")); skb = precv_frame->u.hdr.pkt; if (skb == NULL) return; skb->data = precv_frame->u.hdr.rx_data; skb->tail = precv_frame->u.hdr.rx_tail; skb->len = precv_frame->u.hdr.len; //pskb_copy = skb_copy(skb, GFP_ATOMIC); // if(skb == NULL) goto _exit; skb->dev = pmgnt_netdev; skb->ip_summed = CHECKSUM_NONE; skb->pkt_type = PACKET_OTHERHOST; //skb->protocol = __constant_htons(0x0019); /*ETH_P_80211_RAW*/ skb->protocol = __constant_htons(0x0003); /*ETH_P_80211_RAW*/ //DBG_8192C("(1)data=0x%x, head=0x%x, tail=0x%x, mac_header=0x%x, len=%d\n", skb->data, skb->head, skb->tail, skb->mac_header, skb->len); //skb->mac.raw = skb->data; skb_reset_mac_header(skb); //skb_pull(skb, 24); _rtw_memset(skb->cb, 0, sizeof(skb->cb)); netif_rx(skb); precv_frame->u.hdr.pkt = NULL; // set pointer to NULL before rtw_free_recvframe() if call netif_rx() #endif }