//for device_set_media_duplex
#define DEVICE_LINK_CHANGE 0x00000001UL
-//PLICE_DEBUG->
-
-typedef struct _RxManagementQueue {
- int packet_num;
- int head, tail;
- PSRxMgmtPacket Q[NUM];
-} RxManagementQueue, *PSRxManagementQueue;
-
-//PLICE_DEBUG<-
-
typedef struct __device_opt {
int nRxDescs0; //Number of RX descriptors0
int nRxDescs1; //Number of RX descriptors1
unsigned char byRxMode;
spinlock_t lock;
-//PLICE_DEBUG->
- RxManagementQueue rxManeQueue;
-//PLICE_DEBUG<-
+
//PLICE_DEBUG ->
pid_t MLMEThr_pid;
struct completion notify;
bool bCommit;
} DEVICE_INFO, *PSDevice;
-//PLICE_DEBUG->
-
-inline static void EnQueue(PSDevice pDevice, PSRxMgmtPacket pRxMgmtPacket)
-{
- if ((pDevice->rxManeQueue.tail+1) % NUM == pDevice->rxManeQueue.head) {
- return;
- } else {
- pDevice->rxManeQueue.tail = (pDevice->rxManeQueue.tail + 1) % NUM;
- pDevice->rxManeQueue.Q[pDevice->rxManeQueue.tail] = pRxMgmtPacket;
- pDevice->rxManeQueue.packet_num++;
- }
-}
-
-static inline PSRxMgmtPacket DeQueue(PSDevice pDevice)
-{
- PSRxMgmtPacket pRxMgmtPacket;
-
- if (pDevice->rxManeQueue.tail == pDevice->rxManeQueue.head) {
- printk("Queue is Empty\n");
- return NULL;
- } else {
- int x;
- //x=pDevice->rxManeQueue.head = (pDevice->rxManeQueue.head+1)%NUM;
- pDevice->rxManeQueue.head = (pDevice->rxManeQueue.head+1)%NUM;
- x = pDevice->rxManeQueue.head;
- pRxMgmtPacket = pDevice->rxManeQueue.Q[x];
- pDevice->rxManeQueue.packet_num--;
- return pRxMgmtPacket;
- }
-}
-
-void InitRxManagementQueue(PSDevice pDevice);
-
-//PLICE_DEBUG<-
-
static inline bool device_get_ip(PSDevice pInfo) {
struct in_device *in_dev = (struct in_device *)pInfo->dev->ip_ptr;
struct in_ifaddr *ifa;
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("VIA Networking Solomon-A/B/G Wireless LAN Adapter Driver");
-#ifdef THREAD
-static int mlme_kill;
-#endif
-
#define DEVICE_PARAM(N, D)
#define RX_DESC_MIN0 16
pTDInfo->byFlags = 0;
}
-//PLICE_DEBUG ->
-void InitRxManagementQueue(PSDevice pDevice)
-{
- pDevice->rxManeQueue.packet_num = 0;
- pDevice->rxManeQueue.head = pDevice->rxManeQueue.tail = 0;
-}
-//PLICE_DEBUG<-
-
-//PLICE_DEBUG ->
-#ifdef THREAD
-static int MlmeThread(
- void *Context)
-{
- PSDevice pDevice = (PSDevice) Context;
- PSRxMgmtPacket pRxMgmtPacket;
-
- while (1) {
- spin_lock_irq(&pDevice->lock);
- while (pDevice->rxManeQueue.packet_num != 0) {
- pRxMgmtPacket = DeQueue(pDevice);
- vMgrRxManagePacket(pDevice, pDevice->pMgmt, pRxMgmtPacket);
- }
- spin_unlock_irq(&pDevice->lock);
- if (mlme_kill == 0)
- break;
-
- schedule();
- if (mlme_kill == 0)
- break;
- }
-
- return 0;
-}
-#endif
-
static int device_open(struct net_device *dev)
{
PSDevice pDevice = (PSDevice)netdev_priv(dev);
vMgrObjectInit(pDevice);
vMgrTimerInit(pDevice);
-//PLICE_DEBUG->
-#ifdef THREAD
- InitRxManagementQueue(pDevice);
- mlme_kill = 0;
- mlme_task = kthread_run(MlmeThread, (void *)pDevice, "MLME");
- if (IS_ERR(mlme_task)) {
- pr_err("thread create fail\n");
- return -1;
- }
-
- mlme_kill = 1;
-#endif
-
DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "call device_init_registers\n");
device_init_registers(pDevice, DEVICE_INIT_COLD);
MACvReadEtherAddress(pDevice->PortOffset, pDevice->abyCurrentNetAddr);
PSDevice pDevice = (PSDevice)netdev_priv(dev);
PSMgmtObject pMgmt = pDevice->pMgmt;
//PLICE_DEBUG->
-#ifdef THREAD
- mlme_kill = 0;
-#endif
//PLICE_DEBUG<-
//2007-1121-02<Add>by EinsnLiu
if (pDevice->bLinkPass) {
}
pRxPacket->byRxRate = s_byGetRateIdx(*pbyRxRate);
pRxPacket->byRxChannel = (*pbyRxSts) >> 2;
-//PLICE_DEBUG->
-#ifdef THREAD
- EnQueue(pDevice, pRxPacket);
-#else
vMgrRxManagePacket((void *)pDevice, pDevice->pMgmt, pRxPacket);
-#endif
-//PLICE_DEBUG<-
+
// hostap Deamon handle 802.11 management
if (pDevice->bEnableHostapd) {
skb->dev = pDevice->apdev;