nexmon – Rev 1
?pathlinks?
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