VOID StopNetIfQueue( IN PRTMP_ADAPTER pAd, IN UCHAR QueIdx, IN PNDIS_PACKET pPacket) { PNET_DEV NetDev = NULL, wdev_NetDev= NULL; UCHAR IfIdx = 0; BOOLEAN valid = FALSE; IfIdx = RTMP_GET_PACKET_WDEV(pPacket); if ((IfIdx < WDEV_NUM_MAX) && (pAd->wdev_list[IfIdx] != NULL)) { wdev_NetDev = pAd->wdev_list[IfIdx]->if_dev; } #ifdef APCLI_SUPPORT if (RTMP_GET_PACKET_NET_DEVICE(pPacket) >= MIN_NET_DEVICE_FOR_APCLI) { IfIdx = (RTMP_GET_PACKET_NET_DEVICE(pPacket) - MIN_NET_DEVICE_FOR_APCLI) % MAX_APCLI_NUM; NetDev = pAd->ApCfg.ApCliTab[IfIdx].wdev.if_dev; } else #endif /* APCLI_SUPPORT */ { #ifdef MBSS_SUPPORT if (pAd->OpMode == OPMODE_AP) { IfIdx = (RTMP_GET_PACKET_NET_DEVICE(pPacket) - MIN_NET_DEVICE_FOR_MBSSID) % MAX_MBSSID_NUM(pAd); NetDev = pAd->ApCfg.MBSSID[IfIdx].wdev.if_dev; } else { IfIdx = MAIN_MBSSID; NetDev = pAd->net_dev; } #else IfIdx = MAIN_MBSSID; NetDev = pAd->net_dev; #endif } /* WMM support 4 software queues.*/ /* One software queue full doesn't mean device have no capbility to transmit packet.*/ /* So disable block Net-If queue function while WMM enable.*/ #ifdef CONFIG_AP_SUPPORT IF_DEV_CONFIG_OPMODE_ON_AP(pAd) valid = (pAd->ApCfg.MBSSID[IfIdx].wdev.bWmmCapable == TRUE) ? FALSE : TRUE; #endif /* CONFIG_AP_SUPPORT */ #ifdef CONFIG_STA_SUPPORT { IF_DEV_CONFIG_OPMODE_ON_STA(pAd) valid = (pAd->CommonCfg.bWmmCapable == TRUE) ? FALSE : TRUE; } #endif /* CONFIG_STA_SUPPORT */ if (valid) blockNetIf(&pAd->blockQueueTab[QueIdx], NetDev); return; }
VOID StopNetIfQueue(RTMP_ADAPTER *pAd, UCHAR QueIdx, PNDIS_PACKET pPacket) { UCHAR wdev_idx; struct wifi_dev *wdev; wdev_idx = RTMP_GET_PACKET_WDEV(pPacket); if ((wdev_idx < WDEV_NUM_MAX) && (pAd->wdev_list[wdev_idx] != NULL)) { wdev = pAd->wdev_list[wdev_idx]; /* WMM support 4 software queues.*/ /* One software queue full doesn't mean device have no capbility to transmit packet.*/ /* So disable block Net-If queue function while WMM enable.*/ if ((wdev->bWmmCapable == FALSE) && (wdev->if_dev)) blockNetIf(&pAd->blockQueueTab[QueIdx], wdev->if_dev); } return; }
void IKANOS_DataFrameRx(RTMP_ADAPTER *pAd, struct sk_buff *pSkb) { apPreHeader_t *apBuf; void *pRxParam = pSkb->dev; UINT32 Length = pSkb->len; UCHAR wdev_idx, mbss_idx; apBuf = (apPreHeader_t *)(translateMbuf2Apbuf(pSkb, 0)); apBuf->flags1 = 1 << AP_FLAG1_IS_ETH_BIT; wdev_idx = RTMP_GET_PACKET_WDEV(pSkb); mbss_idx = pAd->wdev_list[wdev_idx]->func_idx; apBuf->specInfoElement = mbss_idx; /* MBSS */ pIkanosAd = pAd; apBuf->flags2 = 0; apClassify(IKANOS_PERAP_ID, apBuf, (void *)IKANOS_WlanPktFromAp); dev_kfree_skb(pSkb); }