Files
Linux_Drivers/osdrv/extdrv/wireless/mediatek/mt7603/common/netif_block.c
forum_service 213c880673 add driver of tp、wiegand-gpio and wireless
Change-Id: Ie3c11d9d85cf1a05042f5690ac711856fe8b1ad7
2023-12-22 09:56:05 +08:00

88 lines
2.2 KiB
C

#ifdef BLOCK_NET_IF
#include "rt_config.h"
#include "netif_block.h"
static NETIF_ENTRY freeNetIfEntryPool[FREE_NETIF_POOL_SIZE];
static LIST_HEADER freeNetIfEntryList;
void initblockQueueTab(RTMP_ADAPTER *pAd)
{
int i;
initList(&freeNetIfEntryList);
for (i = 0; i < FREE_NETIF_POOL_SIZE; i++)
insertTailList(&freeNetIfEntryList, (RT_LIST_ENTRY *)&freeNetIfEntryPool[i]);
for (i=0; i < NUM_OF_TX_RING; i++)
initList(&pAd->blockQueueTab[i].NetIfList);
return;
}
BOOLEAN blockNetIf(BLOCK_QUEUE_ENTRY *pBlockQueueEntry, PNET_DEV pNetDev)
{
NETIF_ENTRY *pNetIfEntry = NULL;
if ((pNetIfEntry = (NETIF_ENTRY *)removeHeadList(&freeNetIfEntryList)) != NULL)
{
RTMP_OS_NETDEV_STOP_QUEUE(pNetDev);
pNetIfEntry->pNetDev = pNetDev;
insertTailList(&pBlockQueueEntry->NetIfList, (RT_LIST_ENTRY *)pNetIfEntry);
pBlockQueueEntry->SwTxQueueBlockFlag = TRUE;
DBGPRINT(RT_DEBUG_TRACE, ("RTMP_OS_NETDEV_STOP_QUEUE(%s)\n", RTMP_OS_NETDEV_GET_DEVNAME(pNetDev)));
}
else
return FALSE;
return TRUE;
}
VOID releaseNetIf(BLOCK_QUEUE_ENTRY *pBlockQueueEntry)
{
NETIF_ENTRY *pNetIfEntry = NULL;
LIST_HEADER *pNetIfList = &pBlockQueueEntry->NetIfList;
while((pNetIfEntry = (NETIF_ENTRY *)removeHeadList(pNetIfList)) != NULL)
{
PNET_DEV pNetDev = pNetIfEntry->pNetDev;
if (pNetDev) {
RTMP_OS_NETDEV_WAKE_QUEUE(pNetDev);
DBGPRINT(RT_DEBUG_TRACE, ("RTMP_OS_NETDEV_WAKE_QUEUE(%s)\n",
RTMP_OS_NETDEV_GET_DEVNAME(pNetDev)));
}
insertTailList(&freeNetIfEntryList, (RT_LIST_ENTRY *)pNetIfEntry);
}
pBlockQueueEntry->SwTxQueueBlockFlag = FALSE;
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;
}
#endif /* BLOCK_NET_IF */