nexmon – Rev 1

Subversion Repositories:
Rev:
diff -ur ../rt2570-cvs-20050824/Module/mlme.c ./Module/mlme.c
--- ../rt2570-cvs-20050824/Module/mlme.c        2005-08-17 11:00:39.000000000 +0200
+++ ./Module/mlme.c     2005-08-24 11:53:01.000000000 +0200
@@ -1690,7 +1690,7 @@
                        }
                        else
                        {
-                               pAd->PortCfg.TxRate = min((INT)(pAd->PortCfg.MaxTxRate), RATE_11);
+                               pAd->PortCfg.TxRate = min((INT)(pAd->PortCfg.MaxTxRate), RATE_5_5);
                        }
                }
     }
diff -ur ../rt2570-cvs-20050824/Module/rtusb_bulk.c ./Module/rtusb_bulk.c
--- ../rt2570-cvs-20050824/Module/rtusb_bulk.c  2005-07-19 10:20:46.000000000 +0200
+++ ./Module/rtusb_bulk.c       2005-08-24 15:40:14.000000000 +0200
@@ -107,7 +107,8 @@
                NdisReleaseSpinLock(&pAdapter->BulkOutLock);
                return;
        }
-       else if (pAdapter->MediaState == NdisMediaStateDisconnected)
+       else if (pAdapter->MediaState == NdisMediaStateDisconnected &&
+                pAdapter->PortCfg.BssType != BSS_MONITOR)
        {
                //
                // Since there is no connection, so we need to empty the Tx Bulk out Ring.
diff -ur ../rt2570-cvs-20050824/Module/rtusb_data.c ./Module/rtusb_data.c
--- ../rt2570-cvs-20050824/Module/rtusb_data.c  2005-08-17 11:00:39.000000000 +0200
+++ ./Module/rtusb_data.c       2005-08-24 15:37:06.000000000 +0200
@@ -84,7 +84,8 @@
                return 0;
        }
        // Drop packets if no associations
-       else if (!INFRA_ON(pAdapter) && !ADHOC_ON(pAdapter))
+       else if (!INFRA_ON(pAdapter) && !ADHOC_ON(pAdapter) &&
+                pAdapter->PortCfg.BssType != BSS_MONITOR)
        {
                RTUSBFreeSkbBuffer(skb);
                return 0;
@@ -141,6 +142,14 @@
        Priority = 0;
        AccessCategory = 0;
        
+       if (skb && pAdapter->PortCfg.BssType == BSS_MONITOR)
+       {
+               NdisAcquireSpinLock(&pAdapter->SendTxWaitQueueLock);
+               skb_queue_tail(&pAdapter->SendTxWaitQueue, skb);
+               NdisReleaseSpinLock(&pAdapter->SendTxWaitQueueLock);
+               return (NDIS_STATUS_SUCCESS);
+       }
+
        if (skb)
        {
                Priority = skb->priority;
@@ -806,6 +815,36 @@
                DBGPRINT(RT_DEBUG_ERROR, "Error, Null skb data buffer!!!\n");
                return (NDIS_STATUS_FAILURE);
        }
+
+       if (pAdapter->PortCfg.BssType == BSS_MONITOR)
+       {
+               pTxContext  = &pAdapter->TxContext[pAdapter->NextTxIndex];
+               pTxContext->InUse   = TRUE;
+               pTxContext->LastOne = TRUE;
+               
+               pAdapter->NextTxIndex++;
+               if (pAdapter->NextTxIndex >= TX_RING_SIZE)
+                       pAdapter->NextTxIndex = 0;
+
+               pTxD  = &(pTxContext->TransferBuffer->TxDesc);
+               memset(pTxD, 0, sizeof(TXD_STRUC));
+               pDest = pTxContext->TransferBuffer->WirelessPacket;
+
+               memcpy( pDest, skb->data, skb->len );
+
+               RTUSBWriteTxDescriptor(pTxD, FALSE, 0, FALSE, FALSE, TRUE, IFS_BACKOFF, skb->len, FALSE, 0, CW_MIN_IN_BITS, CW_MAX_IN_BITS, skb->len + 4, pAdapter->PortCfg.TxRate, 4, pAdapter->PortCfg.TxPreambleInUsed);
+
+               TransferBufferLength = skb->len + sizeof(TXD_STRUC);
+               if ((TransferBufferLength % 2) == 1)
+                       TransferBufferLength++;
+
+               pTxContext->BulkOutSize = TransferBufferLength;
+               atomic_inc(&pAdapter->TxCount);
+               RTUSB_SET_BULK_FLAG(pAdapter, fRTUSB_BULK_OUT_DATA_FRAG);
+               RTUSBFreeSkbBuffer(skb);
+               return (NDIS_STATUS_SUCCESS);
+       }
+
        if (NdisBufferLength < 14)
        {
                DBGPRINT_RAW(RT_DEBUG_ERROR, "RTUSBHardEncrypt --> Ndis Packet buffer error !!!\n");
diff -ur ../rt2570-cvs-20050824/Module/rtusb_info.c ./Module/rtusb_info.c
--- ../rt2570-cvs-20050824/Module/rtusb_info.c  2005-08-17 11:00:39.000000000 +0200
+++ ./Module/rtusb_info.c       2005-08-24 12:11:05.000000000 +0200
@@ -200,6 +200,12 @@
        pAdapter->PortCfg.IbssConfig.Channel = chan;
        DBGPRINT(RT_DEBUG_ERROR, "<==SIOCSIWFREQ[cmd=0x%x] (Channel=%d)\n", SIOCSIWFREQ, pAdapter->PortCfg.IbssConfig.Channel);
 
+       if (pAdapter->PortCfg.BssType == BSS_MONITOR)
+       {
+               pAdapter->PortCfg.Channel = pAdapter->PortCfg.IbssConfig.Channel;
+               AsicSwitchChannel(pAdapter, pAdapter->PortCfg.Channel);
+               AsicLockChannel(pAdapter, pAdapter->PortCfg.Channel);
+       }
 
        return 0;
 }
@@ -288,10 +294,15 @@
                   __u32 *mode, char *extra)
 {
        PRT2570ADAPTER pAdapter = (PRT2570ADAPTER) dev->priv;
-       if (ADHOC_ON(pAdapter))
-               *mode = IW_MODE_ADHOC;
+       if (pAdapter->PortCfg.BssType == BSS_MONITOR)
+               *mode = IW_MODE_MONITOR;
        else
-               *mode = IW_MODE_INFRA;
+       {
+               if (ADHOC_ON(pAdapter))
+                       *mode = IW_MODE_ADHOC;
+               else
+                       *mode = IW_MODE_INFRA;
+       }
        DBGPRINT(RT_DEBUG_TEMP,"--->rtusb_ioctl_giwmode\n");            
        return 0;
 }
diff -ur ../rt2570-cvs-20050824/Module/sync.c ./Module/sync.c
--- ../rt2570-cvs-20050824/Module/sync.c        2005-07-27 17:54:29.000000000 +0200
+++ ./Module/sync.c     2005-08-24 14:31:58.000000000 +0200
@@ -203,6 +203,9 @@
        UCHAR          Ssid[MAX_LEN_OF_SSID], SsidLen, ScanType, BssType;
        ULONG          Now;
 
+       if (pAd->PortCfg.BssType == BSS_MONITOR)
+               return;
+
        DBGPRINT(RT_DEBUG_INFO, "SYNC - MlmeScanReqAction\n");
 #if 0
        // Check the total scan tries for one single OID command