rtl8188eu: update driver to v4.3.0.8_13968.20150417
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / rockchip_wlan / rtl8188eu / os_dep / linux / recv_linux.c
index 2f965d2b3433e5cc1409ed5d1fe289e5eb2dacba..d4ce0fc9f9502385f068b22831757343d4f7ce29 100755 (executable)
@@ -552,6 +552,52 @@ static void rtw_os_ksocket_send(_adapter *padapter, union recv_frame *precv_fram
 }
 #endif //CONFIG_AUTO_AP_MODE
 
+int rtw_recv_monitor(_adapter *padapter, union recv_frame *precv_frame)
+{
+       int ret = _FAIL;
+       struct recv_priv *precvpriv;
+       _queue  *pfree_recv_queue;
+       _pkt *skb;
+       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+       struct rx_pkt_attrib *pattrib;
+
+       if (NULL == precv_frame)
+               goto _recv_drop;
+
+       pattrib = &precv_frame->u.hdr.attrib;
+       precvpriv = &(padapter->recvpriv);
+       pfree_recv_queue = &(precvpriv->free_recv_queue);
+
+       skb = precv_frame->u.hdr.pkt;
+       if (skb == NULL) {
+               DBG_871X("%s :skb==NULL something wrong!!!!\n", __func__);
+               goto _recv_drop;
+       }
+
+       skb->data = precv_frame->u.hdr.rx_data;
+       skb_set_tail_pointer(skb, precv_frame->u.hdr.len);
+       skb->len = precv_frame->u.hdr.len;
+       skb->ip_summed = CHECKSUM_NONE;
+       skb->pkt_type = PACKET_OTHERHOST;
+       skb->protocol = htons(0x0019); /* ETH_P_80211_RAW */
+
+       rtw_netif_rx(padapter->pnetdev, skb);
+
+       /* pointers to NULL before rtw_free_recvframe() */
+       precv_frame->u.hdr.pkt = NULL;
+
+       ret = _SUCCESS;
+
+_recv_drop:
+
+       /* enqueue back to free_recv_queue */
+       if (precv_frame)
+               rtw_free_recvframe(precv_frame, pfree_recv_queue);
+
+       return ret;
+
+}
+
 int rtw_recv_indicatepkt(_adapter *padapter, union recv_frame *precv_frame)
 {
        struct recv_priv *precvpriv;
@@ -599,6 +645,9 @@ _func_enter_;
 
        RT_TRACE(_module_recv_osdep_c_,_drv_info_,("\n skb->head=%p skb->data=%p skb->tail=%p skb->end=%p skb->len=%d\n", skb->head, skb->data, skb_tail_pointer(skb), skb_end_pointer(skb), skb->len));
 
+       if (pattrib->eth_type == 0x888e)
+               DBG_871X_LEVEL(_drv_always_, "recv eapol packet\n");
+
 #ifdef CONFIG_AUTO_AP_MODE     
 #if 1 //for testing
 #if 1