OSDN Git Service

staging: rtl8723bs: update to the latest driver
[android-x86/kernel.git] / drivers / staging / rtl8723bs / hal / rtl8723bs_recv.c
index 4027616..12e0522 100644 (file)
  * 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 <drv_types.h>
+#include <rtw_debug.h>
 #include <rtl8723b_hal.h>
 
 
-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;