X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=drivers%2Fstaging%2Frtl8723bs%2Fhal%2Frtl8723bs_recv.c;h=12e0522679c58e7e90491a8f912b3cb399f71b1d;hb=837bc3dc713b2a876445614333cf844d6a5c4303;hp=40276166b703398a98d289be15d73bb948a672bb;hpb=7e3f85d9883e7f4aa508db679bd215974d81138d;p=android-x86%2Fkernel.git diff --git a/drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c b/drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c index 40276166b703..12e0522679c5 100644 --- a/drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c +++ b/drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c @@ -11,18 +11,15 @@ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * ******************************************************************************/ #define _RTL8723BS_RECV_C_ +#include +#include #include -static s32 initrecvbuf(struct recv_buf *precvbuf, PADAPTER padapter) +static s32 initrecvbuf(struct recv_buf *precvbuf, struct adapter *padapter) { INIT_LIST_HEAD(&precvbuf->list); spin_lock_init(&precvbuf->recvbuf_lock); @@ -33,7 +30,7 @@ static s32 initrecvbuf(struct recv_buf *precvbuf, PADAPTER padapter) } static void update_recvframe_attrib( - PADAPTER padapter, + struct adapter *padapter, union recv_frame *precvframe, struct recv_stat *prxstat) { @@ -41,24 +38,24 @@ static void update_recvframe_attrib( 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); + 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; memset(pattrib, 0, sizeof(struct rx_pkt_attrib)); - // update rx report to recv_frame attribute + /* 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); +/* 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 + /* 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; @@ -89,22 +86,22 @@ static void update_recvframe_attrib( /* * Notice: - * Before calling this function, - * precvframe->u.hdr.rx_data should be ready! + *Before calling this function, + *precvframe->u.hdr.rx_data should be ready! */ static void update_recvframe_phyinfo( union recv_frame *precvframe, struct phy_stat *pphy_status) { - PADAPTER padapter= precvframe->u.hdr.adapter; + struct adapter * padapter = precvframe->u.hdr.adapter; struct rx_pkt_attrib *pattrib = &precvframe->u.hdr.attrib; - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter); - PODM_PHY_INFO_T pPHYInfo = (PODM_PHY_INFO_T)(&pattrib->phy_info); + struct hal_com_data *pHalData = GET_HAL_DATA(padapter); + PODM_PHY_INFO_T pPHYInfo = (PODM_PHY_INFO_T)(&pattrib->phy_info); - u8 *wlanhdr; + u8 *wlanhdr; ODM_PACKET_INFO_T pkt_info; - u8 *sa=NULL; - //_irqL irqL; + u8 *sa = NULL; + /* _irqL irqL; */ struct sta_priv *pstapriv; struct sta_info *psta; @@ -132,15 +129,15 @@ static void update_recvframe_phyinfo( if (psta) { pkt_info.StationID = psta->mac_id; - //DBG_8192C("%s ==> StationID(%d)\n",__FUNCTION__,pkt_info.StationID); + /* DBG_8192C("%s ==> StationID(%d)\n", __func__, pkt_info.StationID); */ } pkt_info.DataRate = pattrib->data_rate; - //rtl8723b_query_rx_phy_status(precvframe, pphy_status); - //spin_lock_bh(&pHalData->odm_stainfo_lock); - ODM_PhyStatusQuery(&pHalData->odmpriv,pPHYInfo,(u8 *)pphy_status,&(pkt_info)); - if(psta) psta->rssi = pattrib->phy_info.RecvSignalPower; - //spin_unlock_bh(&pHalData->odm_stainfo_lock); + /* rtl8723b_query_rx_phy_status(precvframe, pphy_status); */ + /* spin_lock_bh(&pHalData->odm_stainfo_lock); */ + ODM_PhyStatusQuery(&pHalData->odmpriv, pPHYInfo, (u8 *)pphy_status,&(pkt_info)); + if (psta) psta->rssi = pattrib->phy_info.RecvSignalPower; + /* spin_unlock_bh(&pHalData->odm_stainfo_lock); */ precvframe->u.hdr.psta = NULL; if (pkt_info.bPacketMatchBSSID && (check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE) == true)) @@ -164,15 +161,15 @@ static void update_recvframe_phyinfo( } } -static void rtl8723bs_c2h_packet_handler(PADAPTER padapter, u8 *pbuf, u16 length) +static void rtl8723bs_c2h_packet_handler(struct adapter *padapter, u8 *pbuf, u16 length) { - u8 *tmpBuf=NULL; + u8 *tmpBuf = NULL; u8 res = false; - if(length == 0) + if (length == 0) return; - //DBG_871X("+%s() length=%d\n", __func__, length); + /* DBG_871X("+%s() length =%d\n", __func__, length); */ tmpBuf = rtw_zmalloc(length); if (tmpBuf == NULL) @@ -182,31 +179,29 @@ static void rtl8723bs_c2h_packet_handler(PADAPTER padapter, u8 *pbuf, u16 length res = rtw_c2h_packet_wk_cmd(padapter, tmpBuf, length); - if (res == false && tmpBuf != NULL) - kfree(tmpBuf); + if (res == false) + kfree(tmpBuf); - //DBG_871X("-%s res(%d)\n", __func__, res); + /* DBG_871X("-%s res(%d)\n", __func__, res); */ return; } static void rtl8723bs_recv_tasklet(void *priv) { - PADAPTER padapter; - PHAL_DATA_TYPE pHalData; - struct recv_priv *precvpriv; - struct recv_buf *precvbuf; + struct adapter * padapter; + struct hal_com_data * pHalData; + struct recv_priv *precvpriv; + struct recv_buf *precvbuf; union recv_frame *precvframe; - struct recv_frame_hdr *phdr; struct rx_pkt_attrib *pattrib; - _irqL irql; - u8 *ptr; - u32 pkt_len, pkt_offset, skb_len, alloc_sz; + u8 *ptr; + u32 pkt_offset, skb_len, alloc_sz; _pkt *pkt_copy = NULL; - u8 shift_sz = 0, rx_report_sz = 0; + u8 shift_sz = 0, rx_report_sz = 0; - padapter = (PADAPTER)priv; + padapter = (struct adapter *)priv; pHalData = GET_HAL_DATA(padapter); precvpriv = &padapter->recvpriv; @@ -221,24 +216,24 @@ static void rtl8723bs_recv_tasklet(void *priv) precvframe = rtw_alloc_recvframe(&precvpriv->free_recv_queue); if (precvframe == NULL) { - DBG_8192C("%s: no enough recv frame!\n", __FUNCTION__); + DBG_8192C("%s: no enough recv frame!\n", __func__); rtw_enqueue_recvbuf_to_head(precvbuf, &precvpriv->recv_buf_pending_queue); - // The case of can't allocte recvframe should be temporary, - // schedule again and hope recvframe is available next time. + /* The case of can't allocte recvframe should be temporary, */ + /* schedule again and hope recvframe is available next time. */ tasklet_schedule(&precvpriv->recv_tasklet); return; } - //rx desc parsing + /* rx desc parsing */ update_recvframe_attrib(padapter, precvframe, (struct recv_stat*)ptr); pattrib = &precvframe->u.hdr.attrib; - // fix Hardware RX data error, drop whole recv_buffer + /* fix Hardware RX data error, drop whole recv_buffer */ if ((!(pHalData->ReceiveConfig & RCR_ACRC32)) && pattrib->crc_err) { - DBG_8192C("%s()-%d: RX Warning! rx CRC ERROR !!\n", __FUNCTION__, __LINE__); + DBG_8192C("%s()-%d: RX Warning! rx CRC ERROR !!\n", __func__, __LINE__); rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue); break; } @@ -247,7 +242,7 @@ static void rtl8723bs_recv_tasklet(void *priv) pkt_offset = rx_report_sz + pattrib->shift_sz + pattrib->pkt_len; if ((ptr + pkt_offset) > precvbuf->ptail) { - DBG_8192C("%s()-%d: : next pkt len(%p,%d) exceed ptail(%p)!\n", __FUNCTION__, __LINE__, ptr, pkt_offset, precvbuf->ptail); + DBG_8192C("%s()-%d: : next pkt len(%p,%d) exceed ptail(%p)!\n", __func__, __LINE__, ptr, pkt_offset, precvbuf->ptail); rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue); break; } @@ -255,15 +250,15 @@ static void rtl8723bs_recv_tasklet(void *priv) if ((pattrib->crc_err) || (pattrib->icv_err)) { { - DBG_8192C("%s: crc_err=%d icv_err=%d, skip!\n", __FUNCTION__, pattrib->crc_err, pattrib->icv_err); + DBG_8192C("%s: crc_err =%d icv_err =%d, skip!\n", __func__, pattrib->crc_err, pattrib->icv_err); } rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue); } else { - // Modified by Albert 20101213 - // For 8 bytes IP header alignment. - if (pattrib->qos) // Qos data, wireless lan header length is 26 + /* Modified by Albert 20101213 */ + /* For 8 bytes IP header alignment. */ + if (pattrib->qos) /* Qos data, wireless lan header length is 26 */ { shift_sz = 6; } @@ -274,30 +269,29 @@ static void rtl8723bs_recv_tasklet(void *priv) skb_len = pattrib->pkt_len; - // for first fragment packet, driver need allocate 1536+drvinfo_sz+RXDESC_SIZE to defrag packet. - // modify alloc_sz for recvive crc error packet by thomas 2011-06-02 - if((pattrib->mfrag == 1)&&(pattrib->frag_num == 0)){ - //alloc_sz = 1664; //1664 is 128 alignment. - if(skb_len <= 1650) + /* for first fragment packet, driver need allocate 1536+drvinfo_sz+RXDESC_SIZE to defrag packet. */ + /* modify alloc_sz for recvive crc error packet by thomas 2011-06-02 */ + if ((pattrib->mfrag == 1) && (pattrib->frag_num == 0)) { + if (skb_len <= 1650) alloc_sz = 1664; else alloc_sz = skb_len + 14; } else { alloc_sz = skb_len; - // 6 is for IP header 8 bytes alignment in QoS packet case. - // 8 is for skb->data 4 bytes alignment. + /* 6 is for IP header 8 bytes alignment in QoS packet case. */ + /* 8 is for skb->data 4 bytes alignment. */ alloc_sz += 14; } pkt_copy = rtw_skb_alloc(alloc_sz); - if(pkt_copy) + if (pkt_copy) { pkt_copy->dev = padapter->pnetdev; precvframe->u.hdr.pkt = pkt_copy; - skb_reserve( pkt_copy, 8 - ((SIZE_PTR)( pkt_copy->data ) & 7 ));//force pkt_copy->data at 8-byte alignment address - skb_reserve( pkt_copy, shift_sz );//force ip_hdr at 8-byte alignment address according to shift_sz. + skb_reserve(pkt_copy, 8 - ((SIZE_PTR)(pkt_copy->data) & 7));/* force pkt_copy->data at 8-byte alignment address */ + skb_reserve(pkt_copy, shift_sz);/* force ip_hdr at 8-byte alignment address according to shift_sz. */ memcpy(pkt_copy->data, (ptr + rx_report_sz + pattrib->shift_sz), skb_len); precvframe->u.hdr.rx_head = pkt_copy->head; precvframe->u.hdr.rx_data = precvframe->u.hdr.rx_tail = pkt_copy->data; @@ -305,15 +299,15 @@ static void rtl8723bs_recv_tasklet(void *priv) } else { - if((pattrib->mfrag == 1)&&(pattrib->frag_num == 0)) + if ((pattrib->mfrag == 1) && (pattrib->frag_num == 0)) { - DBG_8192C("%s: alloc_skb fail, drop frag frame\n", __FUNCTION__); + DBG_8192C("%s: alloc_skb fail, drop frag frame\n", __func__); rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue); break; } precvframe->u.hdr.pkt = rtw_skb_clone(precvbuf->pskb); - if(precvframe->u.hdr.pkt) + if (precvframe->u.hdr.pkt) { _pkt *pkt_clone = precvframe->u.hdr.pkt; @@ -325,40 +319,40 @@ static void rtl8723bs_recv_tasklet(void *priv) } else { - DBG_8192C("%s: rtw_skb_clone fail\n", __FUNCTION__); + DBG_8192C("%s: rtw_skb_clone fail\n", __func__); rtw_free_recvframe(precvframe, &precvpriv->free_recv_queue); break; } } recvframe_put(precvframe, skb_len); - //recvframe_pull(precvframe, drvinfo_sz + RXDESC_SIZE); + /* recvframe_pull(precvframe, drvinfo_sz + RXDESC_SIZE); */ if (pHalData->ReceiveConfig & RCR_APPFCS) recvframe_pull_tail(precvframe, IEEE80211_FCS_LEN); - // move to drv info position + /* move to drv info position */ ptr += RXDESC_SIZE; - // update drv info + /* update drv info */ if (pHalData->ReceiveConfig & RCR_APP_BA_SSN) { - //rtl8723s_update_bassn(padapter, pdrvinfo); + /* rtl8723s_update_bassn(padapter, pdrvinfo); */ ptr += 4; } - if(pattrib->pkt_rpt_type == NORMAL_RX)//Normal rx packet + if (pattrib->pkt_rpt_type == NORMAL_RX)/* Normal rx packet */ { if (pattrib->physt) update_recvframe_phyinfo(precvframe, (struct phy_stat*)ptr); if (rtw_recv_entry(precvframe) != _SUCCESS) { - RT_TRACE(_module_rtl871x_recv_c_, _drv_dump_, ("%s: rtw_recv_entry(precvframe) != _SUCCESS\n",__FUNCTION__)); + RT_TRACE(_module_rtl871x_recv_c_, _drv_dump_, ("%s: rtw_recv_entry(precvframe) != _SUCCESS\n", __func__)); } } - else if(pattrib->pkt_rpt_type == C2H_PACKET) + else if (pattrib->pkt_rpt_type == C2H_PACKET) { - C2H_EVT_HDR C2hEvent; + C2H_EVT_HDR C2hEvent; u16 len_c2h = pattrib->pkt_len; u8 *pbuf_c2h = precvframe->u.hdr.rx_data; @@ -369,7 +363,7 @@ static void rtl8723bs_recv_tasklet(void *priv) C2hEvent.CmdLen = (len_c2h -2); pdata_c2h = pbuf_c2h+2; - if(C2hEvent.CmdID == C2H_CCX_TX_RPT) + if (C2hEvent.CmdID == C2H_CCX_TX_RPT) { CCX_FwC2HTxRpt_8723b(padapter, pdata_c2h, C2hEvent.CmdLen); } @@ -401,18 +395,18 @@ static void rtl8723bs_recv_tasklet(void *priv) * 2. recv tasklet * */ -s32 rtl8723bs_init_recv_priv(PADAPTER padapter) +s32 rtl8723bs_init_recv_priv(struct adapter *padapter) { s32 res; - u32 i, n; - struct recv_priv *precvpriv; + u32 i, n; + struct recv_priv *precvpriv; struct recv_buf *precvbuf; res = _SUCCESS; precvpriv = &padapter->recvpriv; - //3 1. init recv buffer + /* 3 1. init recv buffer */ _rtw_init_queue(&precvpriv->free_recv_buf_queue); _rtw_init_queue(&precvpriv->recv_buf_pending_queue); @@ -424,9 +418,9 @@ s32 rtl8723bs_init_recv_priv(PADAPTER padapter) goto exit; } - precvpriv->precv_buf = (u8*)N_BYTE_ALIGMENT((SIZE_PTR)(precvpriv->pallocated_recv_buf), 4); + precvpriv->precv_buf = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(precvpriv->pallocated_recv_buf), 4); - // init each recv buffer + /* init each recv buffer */ precvbuf = (struct recv_buf*)precvpriv->precv_buf; for (i = 0; i < NR_RECVBUFF; i++) { @@ -435,12 +429,12 @@ s32 rtl8723bs_init_recv_priv(PADAPTER padapter) break; if (precvbuf->pskb == NULL) { - SIZE_PTR tmpaddr=0; - SIZE_PTR alignment=0; + SIZE_PTR tmpaddr = 0; + SIZE_PTR alignment = 0; precvbuf->pskb = rtw_skb_alloc(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ); - if(precvbuf->pskb) + if (precvbuf->pskb) { precvbuf->pskb->dev = padapter->pnetdev; @@ -450,7 +444,7 @@ s32 rtl8723bs_init_recv_priv(PADAPTER padapter) } if (precvbuf->pskb == NULL) { - DBG_871X("%s: alloc_skb fail!\n", __FUNCTION__); + DBG_871X("%s: alloc_skb fail!\n", __func__); } } @@ -463,7 +457,7 @@ s32 rtl8723bs_init_recv_priv(PADAPTER padapter) if (res == _FAIL) goto initbuferror; - //3 2. init tasklet + /* 3 2. init tasklet */ tasklet_init(&precvpriv->recv_tasklet, (void(*)(unsigned long))rtl8723bs_recv_tasklet, (unsigned long)padapter); @@ -500,19 +494,19 @@ exit: * 2. recv tasklet * */ -void rtl8723bs_free_recv_priv(PADAPTER padapter) +void rtl8723bs_free_recv_priv(struct adapter *padapter) { - u32 i, n; - struct recv_priv *precvpriv; + u32 i, n; + struct recv_priv *precvpriv; struct recv_buf *precvbuf; precvpriv = &padapter->recvpriv; - //3 1. kill tasklet + /* 3 1. kill tasklet */ tasklet_kill(&precvpriv->recv_tasklet); - //3 2. free all recv buffers + /* 3 2. free all recv buffers */ precvbuf = (struct recv_buf*)precvpriv->precv_buf; if (precvbuf) { n = NR_RECVBUFF;