aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/rt2870/common
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/rt2870/common')
-rw-r--r--drivers/staging/rt2870/common/2870_rtmp_init.c1730
-rw-r--r--drivers/staging/rt2870/common/acction.c1
-rw-r--r--drivers/staging/rt2870/common/cmm_aes.c1
-rw-r--r--drivers/staging/rt2870/common/cmm_asic.c1
-rw-r--r--drivers/staging/rt2870/common/cmm_cfg.c1
-rw-r--r--drivers/staging/rt2870/common/cmm_data_2870.c936
-rw-r--r--drivers/staging/rt2870/common/cmm_data_usb.c1
-rw-r--r--drivers/staging/rt2870/common/cmm_mac_usb.c1
-rw-r--r--drivers/staging/rt2870/common/cmm_profile.c1
-rw-r--r--drivers/staging/rt2870/common/cmm_tkip.c1
-rw-r--r--drivers/staging/rt2870/common/cmm_wep.c1
-rw-r--r--drivers/staging/rt2870/common/crypt_hmac.c1
-rw-r--r--drivers/staging/rt2870/common/crypt_md5.c1
-rw-r--r--drivers/staging/rt2870/common/crypt_sha2.c1
-rw-r--r--drivers/staging/rt2870/common/ee_efuse.c1
-rw-r--r--drivers/staging/rt2870/common/rt_channel.c1
-rw-r--r--drivers/staging/rt2870/common/rt_rf.c1
-rw-r--r--drivers/staging/rt2870/common/rtmp_mcu.c1
-rw-r--r--drivers/staging/rt2870/common/rtmp_timer.c1
-rw-r--r--drivers/staging/rt2870/common/rtusb_bulk.c1067
-rw-r--r--drivers/staging/rt2870/common/rtusb_data.c220
-rw-r--r--drivers/staging/rt2870/common/rtusb_io.c2672
22 files changed, 2135 insertions, 4507 deletions
diff --git a/drivers/staging/rt2870/common/2870_rtmp_init.c b/drivers/staging/rt2870/common/2870_rtmp_init.c
deleted file mode 100644
index f517d9e90271..000000000000
--- a/drivers/staging/rt2870/common/2870_rtmp_init.c
+++ /dev/null
@@ -1,1730 +0,0 @@
-/*
- *************************************************************************
- * Ralink Tech Inc.
- * 5F., No.36, Taiyuan St., Jhubei City,
- * Hsinchu County 302,
- * Taiwan, R.O.C.
- *
- * (c) Copyright 2002-2007, Ralink Technology, Inc.
- *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
- * *
- *************************************************************************
-
- Module Name:
- 2870_rtmp_init.c
-
- Abstract:
- Miniport generic portion header file
-
- Revision History:
- Who When What
- -------- ---------- ----------------------------------------------
- Paul Lin 2002-08-01 created
- John Chang 2004-08-20 RT2561/2661 use scatter-gather scheme
- Jan Lee 2006-09-15 RT2860. Change for 802.11n , EEPROM, Led, BA, HT.
- Sample Lin 2007-05-31 Merge RT2860 and RT2870 drivers.
-*/
-
-#include "../rt_config.h"
-
-
-static void rx_done_tasklet(unsigned long data);
-static void rt2870_hcca_dma_done_tasklet(unsigned long data);
-static void rt2870_ac3_dma_done_tasklet(unsigned long data);
-static void rt2870_ac2_dma_done_tasklet(unsigned long data);
-static void rt2870_ac1_dma_done_tasklet(unsigned long data);
-static void rt2870_ac0_dma_done_tasklet(unsigned long data);
-static void rt2870_mgmt_dma_done_tasklet(unsigned long data);
-static void rt2870_null_frame_complete_tasklet(unsigned long data);
-static void rt2870_rts_frame_complete_tasklet(unsigned long data);
-static void rt2870_pspoll_frame_complete_tasklet(unsigned long data);
-static void rt2870_dataout_complete_tasklet(unsigned long data);
-
-
-/*
-========================================================================
-Routine Description:
- Initialize receive data structures.
-
-Arguments:
- pAd Pointer to our adapter
-
-Return Value:
- NDIS_STATUS_SUCCESS
- NDIS_STATUS_RESOURCES
-
-Note:
- Initialize all receive releated private buffer, include those define
- in RTMP_ADAPTER structure and all private data structures. The mahor
- work is to allocate buffer for each packet and chain buffer to
- NDIS packet descriptor.
-========================================================================
-*/
-NDIS_STATUS NICInitRecv(
- IN PRTMP_ADAPTER pAd)
-{
- UCHAR i;
- NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie;
-
-
- DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitRecv\n"));
- pObj = pObj;
-
- //InterlockedExchange(&pAd->PendingRx, 0);
- pAd->PendingRx = 0;
- pAd->NextRxBulkInReadIndex = 0; // Next Rx Read index
- pAd->NextRxBulkInIndex = 0 ; //RX_RING_SIZE -1; // Rx Bulk pointer
- pAd->NextRxBulkInPosition = 0;
-
- for (i = 0; i < (RX_RING_SIZE); i++)
- {
- PRX_CONTEXT pRxContext = &(pAd->RxContext[i]);
-
- //Allocate URB
- pRxContext->pUrb = RTUSB_ALLOC_URB(0);
- if (pRxContext->pUrb == NULL)
- {
- Status = NDIS_STATUS_RESOURCES;
- goto out1;
- }
-
- // Allocate transfer buffer
- pRxContext->TransferBuffer = RTUSB_URB_ALLOC_BUFFER(pObj->pUsb_Dev, MAX_RXBULK_SIZE, &pRxContext->data_dma);
- if (pRxContext->TransferBuffer == NULL)
- {
- Status = NDIS_STATUS_RESOURCES;
- goto out1;
- }
-
- NdisZeroMemory(pRxContext->TransferBuffer, MAX_RXBULK_SIZE);
-
- pRxContext->pAd = pAd;
- pRxContext->pIrp = NULL;
- pRxContext->InUse = FALSE;
- pRxContext->IRPPending = FALSE;
- pRxContext->Readable = FALSE;
- //pRxContext->ReorderInUse = FALSE;
- pRxContext->bRxHandling = FALSE;
- pRxContext->BulkInOffset = 0;
- }
-
- DBGPRINT(RT_DEBUG_TRACE, ("<-- NICInitRecv\n"));
- return Status;
-
-out1:
- for (i = 0; i < (RX_RING_SIZE); i++)
- {
- PRX_CONTEXT pRxContext = &(pAd->RxContext[i]);
-
- if (NULL != pRxContext->TransferBuffer)
- {
- RTUSB_URB_FREE_BUFFER(pObj->pUsb_Dev, MAX_RXBULK_SIZE,
- pRxContext->TransferBuffer, pRxContext->data_dma);
- pRxContext->TransferBuffer = NULL;
- }
-
- if (NULL != pRxContext->pUrb)
- {
- RTUSB_UNLINK_URB(pRxContext->pUrb);
- RTUSB_FREE_URB(pRxContext->pUrb);
- pRxContext->pUrb = NULL;
- }
- }
-
- return Status;
-}
-
-
-/*
-========================================================================
-Routine Description:
- Initialize transmit data structures.
-
-Arguments:
- pAd Pointer to our adapter
-
-Return Value:
- NDIS_STATUS_SUCCESS
- NDIS_STATUS_RESOURCES
-
-Note:
-========================================================================
-*/
-NDIS_STATUS NICInitTransmit(
- IN PRTMP_ADAPTER pAd)
-{
-#define LM_USB_ALLOC(pObj, Context, TB_Type, BufferSize, Status, msg1, err1, msg2, err2) \
- Context->pUrb = RTUSB_ALLOC_URB(0); \
- if (Context->pUrb == NULL) { \
- DBGPRINT(RT_DEBUG_ERROR, msg1); \
- Status = NDIS_STATUS_RESOURCES; \
- goto err1; } \
- \
- Context->TransferBuffer = \
- (TB_Type)RTUSB_URB_ALLOC_BUFFER(pObj->pUsb_Dev, BufferSize, &Context->data_dma); \
- if (Context->TransferBuffer == NULL) { \
- DBGPRINT(RT_DEBUG_ERROR, msg2); \
- Status = NDIS_STATUS_RESOURCES; \
- goto err2; }
-
-#define LM_URB_FREE(pObj, Context, BufferSize) \
- if (NULL != Context->pUrb) { \
- RTUSB_UNLINK_URB(Context->pUrb); \
- RTUSB_FREE_URB(Context->pUrb); \
- Context->pUrb = NULL; } \
- if (NULL != Context->TransferBuffer) { \
- RTUSB_URB_FREE_BUFFER(pObj->pUsb_Dev, BufferSize, \
- Context->TransferBuffer, \
- Context->data_dma); \
- Context->TransferBuffer = NULL; }
-
- UCHAR i, acidx;
- NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
- PTX_CONTEXT pNullContext = &(pAd->NullContext);
- PTX_CONTEXT pPsPollContext = &(pAd->PsPollContext);
- PTX_CONTEXT pRTSContext = &(pAd->RTSContext);
- PTX_CONTEXT pMLMEContext = NULL;
-// PHT_TX_CONTEXT pHTTXContext = NULL;
- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie;
- PVOID RingBaseVa;
-// RTMP_TX_RING *pTxRing;
- RTMP_MGMT_RING *pMgmtRing;
-
- DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitTransmit\n"));
- pObj = pObj;
-
- // Init 4 set of Tx parameters
- for(acidx = 0; acidx < NUM_OF_TX_RING; acidx++)
- {
- // Initialize all Transmit releated queues
- InitializeQueueHeader(&pAd->TxSwQueue[acidx]);
-
- // Next Local tx ring pointer waiting for buck out
- pAd->NextBulkOutIndex[acidx] = acidx;
- pAd->BulkOutPending[acidx] = FALSE; // Buck Out control flag
- //pAd->DataBulkDoneIdx[acidx] = 0;
- }
-
- //pAd->NextMLMEIndex = 0;
- //pAd->PushMgmtIndex = 0;
- //pAd->PopMgmtIndex = 0;
- //InterlockedExchange(&pAd->MgmtQueueSize, 0);
- //InterlockedExchange(&pAd->TxCount, 0);
-
- //pAd->PrioRingFirstIndex = 0;
- //pAd->PrioRingTxCnt = 0;
-
- do
- {
- //
- // TX_RING_SIZE, 4 ACs
- //
- for(acidx=0; acidx<4; acidx++)
- {
- PHT_TX_CONTEXT pHTTXContext = &(pAd->TxContext[acidx]);
-
- NdisZeroMemory(pHTTXContext, sizeof(HT_TX_CONTEXT));
- //Allocate URB
- LM_USB_ALLOC(pObj, pHTTXContext, PHTTX_BUFFER, sizeof(HTTX_BUFFER), Status,
- ("<-- ERROR in Alloc TX TxContext[%d] urb!! \n", acidx),
- done,
- ("<-- ERROR in Alloc TX TxContext[%d] HTTX_BUFFER !! \n", acidx),
- out1);
-
- NdisZeroMemory(pHTTXContext->TransferBuffer->Aggregation, 4);
- pHTTXContext->pAd = pAd;
- pHTTXContext->pIrp = NULL;
- pHTTXContext->IRPPending = FALSE;
- pHTTXContext->NextBulkOutPosition = 0;
- pHTTXContext->ENextBulkOutPosition = 0;
- pHTTXContext->CurWritePosition = 0;
- pHTTXContext->CurWriteRealPos = 0;
- pHTTXContext->BulkOutSize = 0;
- pHTTXContext->BulkOutPipeId = acidx;
- pHTTXContext->bRingEmpty = TRUE;
- pHTTXContext->bCopySavePad = FALSE;
-
- pAd->BulkOutPending[acidx] = FALSE;
- }
-
-
- //
- // MGMT_RING_SIZE
- //
- // Allocate MGMT ring descriptor's memory
- pAd->MgmtDescRing.AllocSize = MGMT_RING_SIZE * sizeof(TX_CONTEXT);
- RTMPAllocateMemory(&pAd->MgmtDescRing.AllocVa, pAd->MgmtDescRing.AllocSize);
- if (pAd->MgmtDescRing.AllocVa == NULL)
- {
- DBGPRINT_ERR(("Failed to allocate a big buffer for MgmtDescRing!\n"));
- Status = NDIS_STATUS_RESOURCES;
- goto out1;
- }
- NdisZeroMemory(pAd->MgmtDescRing.AllocVa, pAd->MgmtDescRing.AllocSize);
- RingBaseVa = pAd->MgmtDescRing.AllocVa;
-
- // Initialize MGMT Ring and associated buffer memory
- pMgmtRing = &pAd->MgmtRing;
- for (i = 0; i < MGMT_RING_SIZE; i++)
- {
- // link the pre-allocated Mgmt buffer to MgmtRing.Cell
- pMgmtRing->Cell[i].AllocSize = sizeof(TX_CONTEXT);
- pMgmtRing->Cell[i].AllocVa = RingBaseVa;
- pMgmtRing->Cell[i].pNdisPacket = NULL;
- pMgmtRing->Cell[i].pNextNdisPacket = NULL;
-
- //Allocate URB for MLMEContext
- pMLMEContext = (PTX_CONTEXT) pAd->MgmtRing.Cell[i].AllocVa;
- pMLMEContext->pUrb = RTUSB_ALLOC_URB(0);
- if (pMLMEContext->pUrb == NULL)
- {
- DBGPRINT(RT_DEBUG_ERROR, ("<-- ERROR in Alloc TX MLMEContext[%d] urb!! \n", i));
- Status = NDIS_STATUS_RESOURCES;
- goto out2;
- }
- pMLMEContext->pAd = pAd;
- pMLMEContext->pIrp = NULL;
- pMLMEContext->TransferBuffer = NULL;
- pMLMEContext->InUse = FALSE;
- pMLMEContext->IRPPending = FALSE;
- pMLMEContext->bWaitingBulkOut = FALSE;
- pMLMEContext->BulkOutSize = 0;
- pMLMEContext->SelfIdx = i;
-
- // Offset to next ring descriptor address
- RingBaseVa = (PUCHAR) RingBaseVa + sizeof(TX_CONTEXT);
- }
- DBGPRINT(RT_DEBUG_TRACE, ("MGMT Ring: total %d entry allocated\n", i));
-
- //pAd->MgmtRing.TxSwFreeIdx = (MGMT_RING_SIZE - 1);
- pAd->MgmtRing.TxSwFreeIdx = MGMT_RING_SIZE;
- pAd->MgmtRing.TxCpuIdx = 0;
- pAd->MgmtRing.TxDmaIdx = 0;
-
- //
- // BEACON_RING_SIZE
- //
- for(i=0; i<BEACON_RING_SIZE; i++) // 2
- {
- PTX_CONTEXT pBeaconContext = &(pAd->BeaconContext[i]);
-
-
- NdisZeroMemory(pBeaconContext, sizeof(TX_CONTEXT));
-
- //Allocate URB
- LM_USB_ALLOC(pObj, pBeaconContext, PTX_BUFFER, sizeof(TX_BUFFER), Status,
- ("<-- ERROR in Alloc TX BeaconContext[%d] urb!! \n", i),
- out2,
- ("<-- ERROR in Alloc TX BeaconContext[%d] TX_BUFFER !! \n", i),
- out3);
-
- pBeaconContext->pAd = pAd;
- pBeaconContext->pIrp = NULL;
- pBeaconContext->InUse = FALSE;
- pBeaconContext->IRPPending = FALSE;
- }
-
- //
- // NullContext
- //
- NdisZeroMemory(pNullContext, sizeof(TX_CONTEXT));
-
- //Allocate URB
- LM_USB_ALLOC(pObj, pNullContext, PTX_BUFFER, sizeof(TX_BUFFER), Status,
- ("<-- ERROR in Alloc TX NullContext urb!! \n"),
- out3,
- ("<-- ERROR in Alloc TX NullContext TX_BUFFER !! \n"),
- out4);
-
- pNullContext->pAd = pAd;
- pNullContext->pIrp = NULL;
- pNullContext->InUse = FALSE;
- pNullContext->IRPPending = FALSE;
-
- //
- // RTSContext
- //
- NdisZeroMemory(pRTSContext, sizeof(TX_CONTEXT));
-
- //Allocate URB
- LM_USB_ALLOC(pObj, pRTSContext, PTX_BUFFER, sizeof(TX_BUFFER), Status,
- ("<-- ERROR in Alloc TX RTSContext urb!! \n"),
- out4,
- ("<-- ERROR in Alloc TX RTSContext TX_BUFFER !! \n"),
- out5);
-
- pRTSContext->pAd = pAd;
- pRTSContext->pIrp = NULL;
- pRTSContext->InUse = FALSE;
- pRTSContext->IRPPending = FALSE;
-
- //
- // PsPollContext
- //
- //NdisZeroMemory(pPsPollContext, sizeof(TX_CONTEXT));
- //Allocate URB
- LM_USB_ALLOC(pObj, pPsPollContext, PTX_BUFFER, sizeof(TX_BUFFER), Status,
- ("<-- ERROR in Alloc TX PsPollContext urb!! \n"),
- out5,
- ("<-- ERROR in Alloc TX PsPollContext TX_BUFFER !! \n"),
- out6);
-
- pPsPollContext->pAd = pAd;
- pPsPollContext->pIrp = NULL;
- pPsPollContext->InUse = FALSE;
- pPsPollContext->IRPPending = FALSE;
- pPsPollContext->bAggregatible = FALSE;
- pPsPollContext->LastOne = TRUE;
-
- } while (FALSE);
-
-
-done:
- DBGPRINT(RT_DEBUG_TRACE, ("<-- NICInitTransmit\n"));
-
- return Status;
-
- /* --------------------------- ERROR HANDLE --------------------------- */
-out6:
- LM_URB_FREE(pObj, pPsPollContext, sizeof(TX_BUFFER));
-
-out5:
- LM_URB_FREE(pObj, pRTSContext, sizeof(TX_BUFFER));
-
-out4:
- LM_URB_FREE(pObj, pNullContext, sizeof(TX_BUFFER));
-
-out3:
- for(i=0; i<BEACON_RING_SIZE; i++)
- {
- PTX_CONTEXT pBeaconContext = &(pAd->BeaconContext[i]);
- if (pBeaconContext)
- LM_URB_FREE(pObj, pBeaconContext, sizeof(TX_BUFFER));
- }
-
-out2:
- if (pAd->MgmtDescRing.AllocVa)
- {
- pMgmtRing = &pAd->MgmtRing;
- for(i=0; i<MGMT_RING_SIZE; i++)
- {
- pMLMEContext = (PTX_CONTEXT) pAd->MgmtRing.Cell[i].AllocVa;
- if (pMLMEContext)
- LM_URB_FREE(pObj, pMLMEContext, sizeof(TX_BUFFER));
- }
- NdisFreeMemory(pAd->MgmtDescRing.AllocVa, pAd->MgmtDescRing.AllocSize, 0);
- pAd->MgmtDescRing.AllocVa = NULL;
- }
-
-out1:
- for (acidx = 0; acidx < 4; acidx++)
- {
- PHT_TX_CONTEXT pTxContext = &(pAd->TxContext[acidx]);
- if (pTxContext)
- LM_URB_FREE(pObj, pTxContext, sizeof(HTTX_BUFFER));
- }
-
- // Here we didn't have any pre-allocated memory need to free.
-
- return Status;
-}
-
-
-/*
-========================================================================
-Routine Description:
- Allocate DMA memory blocks for send, receive.
-
-Arguments:
- pAd Pointer to our adapter
-
-Return Value:
- NDIS_STATUS_SUCCESS
- NDIS_STATUS_FAILURE
- NDIS_STATUS_RESOURCES
-
-Note:
-========================================================================
-*/
-NDIS_STATUS RTMPAllocTxRxRingMemory(
- IN PRTMP_ADAPTER pAd)
-{
-// COUNTER_802_11 pCounter = &pAd->WlanCounters;
- NDIS_STATUS Status;
- INT num;
-
-
- DBGPRINT(RT_DEBUG_TRACE, ("--> RTMPAllocTxRxRingMemory\n"));
-
-
- do
- {
- // Init the CmdQ and CmdQLock
- NdisAllocateSpinLock(&pAd->CmdQLock);
- NdisAcquireSpinLock(&pAd->CmdQLock);
- RTUSBInitializeCmdQ(&pAd->CmdQ);
- NdisReleaseSpinLock(&pAd->CmdQLock);
-
-
- NdisAllocateSpinLock(&pAd->MLMEBulkOutLock);
- //NdisAllocateSpinLock(&pAd->MLMEWaitQueueLock);
- NdisAllocateSpinLock(&pAd->BulkOutLock[0]);
- NdisAllocateSpinLock(&pAd->BulkOutLock[1]);
- NdisAllocateSpinLock(&pAd->BulkOutLock[2]);
- NdisAllocateSpinLock(&pAd->BulkOutLock[3]);
- NdisAllocateSpinLock(&pAd->BulkOutLock[4]);
- NdisAllocateSpinLock(&pAd->BulkOutLock[5]);
- NdisAllocateSpinLock(&pAd->BulkInLock);
-
- for (num = 0; num < NUM_OF_TX_RING; num++)
- {
- NdisAllocateSpinLock(&pAd->TxContextQueueLock[num]);
- }
-
-// NdisAllocateSpinLock(&pAd->MemLock); // Not used in RT28XX
-
-// NdisAllocateSpinLock(&pAd->MacTabLock); // init it in UserCfgInit()
-// NdisAllocateSpinLock(&pAd->BATabLock); // init it in BATableInit()
-
-// for(num=0; num<MAX_LEN_OF_BA_REC_TABLE; num++)
-// {
-// NdisAllocateSpinLock(&pAd->BATable.BARecEntry[num].RxReRingLock);
-// }
-
- //
- // Init Mac Table
- //
-// MacTableInitialize(pAd);
-
- //
- // Init send data structures and related parameters
- //
- Status = NICInitTransmit(pAd);
- if (Status != NDIS_STATUS_SUCCESS)
- break;
-
- //
- // Init receive data structures and related parameters
- //
- Status = NICInitRecv(pAd);
- if (Status != NDIS_STATUS_SUCCESS)
- break;
-
- pAd->PendingIoCount = 1;
-
- } while (FALSE);
-
- NdisZeroMemory(&pAd->FragFrame, sizeof(FRAGMENT_FRAME));
- pAd->FragFrame.pFragPacket = RTMP_AllocateFragPacketBuffer(pAd, RX_BUFFER_NORMSIZE);
-
- if (pAd->FragFrame.pFragPacket == NULL)
- {
- Status = NDIS_STATUS_RESOURCES;
- }
-
- DBGPRINT_S(Status, ("<-- RTMPAllocTxRxRingMemory, Status=%x\n", Status));
- return Status;
-}
-
-
-/*
-========================================================================
-Routine Description:
- Calls USB_InterfaceStop and frees memory allocated for the URBs
- calls NdisMDeregisterDevice and frees the memory
- allocated in VNetInitialize for the Adapter Object
-
-Arguments:
- *pAd the raxx interface data pointer
-
-Return Value:
- None
-
-Note:
-========================================================================
-*/
-VOID RTMPFreeTxRxRingMemory(
- IN PRTMP_ADAPTER pAd)
-{
-#define LM_URB_FREE(pObj, Context, BufferSize) \
- if (NULL != Context->pUrb) { \
- RTUSB_UNLINK_URB(Context->pUrb); \
- RTUSB_FREE_URB(Context->pUrb); \
- Context->pUrb = NULL; } \
- if (NULL != Context->TransferBuffer) { \
- RTUSB_URB_FREE_BUFFER(pObj->pUsb_Dev, BufferSize, \
- Context->TransferBuffer, \
- Context->data_dma); \
- Context->TransferBuffer = NULL; }
-
-
- UINT i, acidx;
- PTX_CONTEXT pNullContext = &pAd->NullContext;
- PTX_CONTEXT pPsPollContext = &pAd->PsPollContext;
- PTX_CONTEXT pRTSContext = &pAd->RTSContext;
-// PHT_TX_CONTEXT pHTTXContext;
- //PRTMP_REORDERBUF pReorderBuf;
- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie;
-// RTMP_TX_RING *pTxRing;
-
- DBGPRINT(RT_DEBUG_ERROR, ("---> RTMPFreeTxRxRingMemory\n"));
- pObj = pObj;
-
- // Free all resources for the RECEIVE buffer queue.
- for(i=0; i<(RX_RING_SIZE); i++)
- {
- PRX_CONTEXT pRxContext = &(pAd->RxContext[i]);
- if (pRxContext)
- LM_URB_FREE(pObj, pRxContext, MAX_RXBULK_SIZE);
- }
-
- // Free PsPoll frame resource
- LM_URB_FREE(pObj, pPsPollContext, sizeof(TX_BUFFER));
-
- // Free NULL frame resource
- LM_URB_FREE(pObj, pNullContext, sizeof(TX_BUFFER));
-
- // Free RTS frame resource
- LM_URB_FREE(pObj, pRTSContext, sizeof(TX_BUFFER));
-
-
- // Free beacon frame resource
- for(i=0; i<BEACON_RING_SIZE; i++)
- {
- PTX_CONTEXT pBeaconContext = &(pAd->BeaconContext[i]);
- if (pBeaconContext)
- LM_URB_FREE(pObj, pBeaconContext, sizeof(TX_BUFFER));
- }
-
-
- // Free mgmt frame resource
- for(i = 0; i < MGMT_RING_SIZE; i++)
- {
- PTX_CONTEXT pMLMEContext = (PTX_CONTEXT)pAd->MgmtRing.Cell[i].AllocVa;
- //LM_URB_FREE(pObj, pMLMEContext, sizeof(TX_BUFFER));
- if (NULL != pAd->MgmtRing.Cell[i].pNdisPacket)
- {
- RTMPFreeNdisPacket(pAd, pAd->MgmtRing.Cell[i].pNdisPacket);
- pAd->MgmtRing.Cell[i].pNdisPacket = NULL;
- pMLMEContext->TransferBuffer = NULL;
- }
-
- if (pMLMEContext)
- {
- if (NULL != pMLMEContext->pUrb)
- {
- RTUSB_UNLINK_URB(pMLMEContext->pUrb);
- RTUSB_FREE_URB(pMLMEContext->pUrb);
- pMLMEContext->pUrb = NULL;
- }
- }
- }
- if (pAd->MgmtDescRing.AllocVa)
- NdisFreeMemory(pAd->MgmtDescRing.AllocVa, pAd->MgmtDescRing.AllocSize, 0);
-
-
- // Free Tx frame resource
- for(acidx=0; acidx<4; acidx++)
- {
- PHT_TX_CONTEXT pHTTXContext = &(pAd->TxContext[acidx]);
- if (pHTTXContext)
- LM_URB_FREE(pObj, pHTTXContext, sizeof(HTTX_BUFFER));
- }
-
- if (pAd->FragFrame.pFragPacket)
- RELEASE_NDIS_PACKET(pAd, pAd->FragFrame.pFragPacket, NDIS_STATUS_SUCCESS);
-
- for(i=0; i<6; i++)
- {
- NdisFreeSpinLock(&pAd->BulkOutLock[i]);
- }
-
- NdisFreeSpinLock(&pAd->BulkInLock);
- NdisFreeSpinLock(&pAd->MLMEBulkOutLock);
-
- NdisFreeSpinLock(&pAd->CmdQLock);
-
- // Clear all pending bulk-out request flags.
- RTUSB_CLEAR_BULK_FLAG(pAd, 0xffffffff);
-
-// NdisFreeSpinLock(&pAd->MacTabLock);
-
-// for(i=0; i<MAX_LEN_OF_BA_REC_TABLE; i++)
-// {
-// NdisFreeSpinLock(&pAd->BATable.BARecEntry[i].RxReRingLock);
-// }
-
- DBGPRINT(RT_DEBUG_ERROR, ("<--- ReleaseAdapter\n"));
-}
-
-
-/*
-========================================================================
-Routine Description:
- Allocate memory for adapter control block.
-
-Arguments:
- pAd Pointer to our adapter
-
-Return Value:
- NDIS_STATUS_SUCCESS
- NDIS_STATUS_FAILURE
- NDIS_STATUS_RESOURCES
-
-Note:
-========================================================================
-*/
-NDIS_STATUS AdapterBlockAllocateMemory(
- IN PVOID handle,
- OUT PVOID *ppAd)
-{
- PUSB_DEV usb_dev;
- POS_COOKIE pObj = (POS_COOKIE) handle;
-
-
- usb_dev = pObj->pUsb_Dev;
-
- pObj->MLMEThr_pid = NULL;
- pObj->RTUSBCmdThr_pid = NULL;
-
- *ppAd = (PVOID)vmalloc(sizeof(RTMP_ADAPTER));
-
- if (*ppAd)
- {
- NdisZeroMemory(*ppAd, sizeof(RTMP_ADAPTER));
- ((PRTMP_ADAPTER)*ppAd)->OS_Cookie = handle;
- return (NDIS_STATUS_SUCCESS);
- }
- else
- {
- return (NDIS_STATUS_FAILURE);
- }
-}
-
-
-/*
-========================================================================
-Routine Description:
- Create kernel threads & tasklets.
-
-Arguments:
- *net_dev Pointer to wireless net device interface
-
-Return Value:
- NDIS_STATUS_SUCCESS
- NDIS_STATUS_FAILURE
-
-Note:
-========================================================================
-*/
-NDIS_STATUS CreateThreads(
- IN struct net_device *net_dev)
-{
- PRTMP_ADAPTER pAd = net_dev->ml_priv;
- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie;
- pid_t pid_number;
-
- //init_MUTEX(&(pAd->usbdev_semaphore));
-
- init_MUTEX_LOCKED(&(pAd->mlme_semaphore));
- init_completion (&pAd->mlmeComplete);
-
- init_MUTEX_LOCKED(&(pAd->RTUSBCmd_semaphore));
- init_completion (&pAd->CmdQComplete);
-
- init_MUTEX_LOCKED(&(pAd->RTUSBTimer_semaphore));
- init_completion (&pAd->TimerQComplete);
-
- // Creat MLME Thread
- pObj->MLMEThr_pid = NULL;
- pid_number = kernel_thread(MlmeThread, pAd, CLONE_VM);
- if (pid_number < 0)
- {
- printk (KERN_WARNING "%s: unable to start Mlme thread\n",pAd->net_dev->name);
- return NDIS_STATUS_FAILURE;
- }
-
- pObj->MLMEThr_pid = find_get_pid(pid_number);
-
- // Wait for the thread to start
- wait_for_completion(&(pAd->mlmeComplete));
-
- // Creat Command Thread
- pObj->RTUSBCmdThr_pid = NULL;
- pid_number = kernel_thread(RTUSBCmdThread, pAd, CLONE_VM);
- if (pid_number < 0)
- {
- printk (KERN_WARNING "%s: unable to start RTUSBCmd thread\n",pAd->net_dev->name);
- return NDIS_STATUS_FAILURE;
- }
-
- pObj->RTUSBCmdThr_pid = find_get_pid(pid_number);
-
- wait_for_completion(&(pAd->CmdQComplete));
-
- pObj->TimerQThr_pid = NULL;
- pid_number = kernel_thread(TimerQThread, pAd, CLONE_VM);
- if (pid_number < 0)
- {
- printk (KERN_WARNING "%s: unable to start TimerQThread\n",pAd->net_dev->name);
- return NDIS_STATUS_FAILURE;
- }
-
- pObj->TimerQThr_pid = find_get_pid(pid_number);
-
- // Wait for the thread to start
- wait_for_completion(&(pAd->TimerQComplete));
-
- // Create receive tasklet
- tasklet_init(&pObj->rx_done_task, rx_done_tasklet, (ULONG)pAd);
- tasklet_init(&pObj->mgmt_dma_done_task, rt2870_mgmt_dma_done_tasklet, (unsigned long)pAd);
- tasklet_init(&pObj->ac0_dma_done_task, rt2870_ac0_dma_done_tasklet, (unsigned long)pAd);
- tasklet_init(&pObj->ac1_dma_done_task, rt2870_ac1_dma_done_tasklet, (unsigned long)pAd);
- tasklet_init(&pObj->ac2_dma_done_task, rt2870_ac2_dma_done_tasklet, (unsigned long)pAd);
- tasklet_init(&pObj->ac3_dma_done_task, rt2870_ac3_dma_done_tasklet, (unsigned long)pAd);
- tasklet_init(&pObj->hcca_dma_done_task, rt2870_hcca_dma_done_tasklet, (unsigned long)pAd);
- tasklet_init(&pObj->tbtt_task, tbtt_tasklet, (unsigned long)pAd);
- tasklet_init(&pObj->null_frame_complete_task, rt2870_null_frame_complete_tasklet, (unsigned long)pAd);
- tasklet_init(&pObj->rts_frame_complete_task, rt2870_rts_frame_complete_tasklet, (unsigned long)pAd);
- tasklet_init(&pObj->pspoll_frame_complete_task, rt2870_pspoll_frame_complete_tasklet, (unsigned long)pAd);
-
- return NDIS_STATUS_SUCCESS;
-}
-
-/*
-========================================================================
-Routine Description:
- As STA's BSSID is a WC too, it uses shared key table.
- This function write correct unicast TX key to ASIC WCID.
- And we still make a copy in our MacTab.Content[BSSID_WCID].PairwiseKey.
- Caller guarantee TKIP/AES always has keyidx = 0. (pairwise key)
- Caller guarantee WEP calls this function when set Txkey, default key index=0~3.
-
-Arguments:
- pAd Pointer to our adapter
- pKey Pointer to the where the key stored
-
-Return Value:
- NDIS_SUCCESS Add key successfully
-
-Note:
-========================================================================
-*/
-VOID RTMPAddBSSIDCipher(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR Aid,
- IN PNDIS_802_11_KEY pKey,
- IN UCHAR CipherAlg)
-{
- PUCHAR pTxMic, pRxMic;
- BOOLEAN bKeyRSC, bAuthenticator; // indicate the receive SC set by KeyRSC value
-// UCHAR CipherAlg;
- UCHAR i;
- ULONG WCIDAttri;
- USHORT offset;
- UCHAR KeyIdx, IVEIV[8];
- UINT32 Value;
-
- DBGPRINT(RT_DEBUG_TRACE, ("RTMPAddBSSIDCipher==> Aid = %d\n",Aid));
-
- // Bit 29 of Add-key KeyRSC
- bKeyRSC = (pKey->KeyIndex & 0x20000000) ? TRUE : FALSE;
-
- // Bit 28 of Add-key Authenticator
- bAuthenticator = (pKey->KeyIndex & 0x10000000) ? TRUE : FALSE;
- KeyIdx = (UCHAR)pKey->KeyIndex&0xff;
-
- if (KeyIdx > 4)
- return;
-
-
- if (pAd->MacTab.Content[Aid].PairwiseKey.CipherAlg == CIPHER_TKIP)
- { if (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPANone)
- {
- // for WPA-None Tx, Rx MIC is the same
- pTxMic = (PUCHAR) (&pKey->KeyMaterial) + 16;
- pRxMic = pTxMic;
- }
- else if (bAuthenticator == TRUE)
- {
- pTxMic = (PUCHAR) (&pKey->KeyMaterial) + 16;
- pRxMic = (PUCHAR) (&pKey->KeyMaterial) + 24;
- }
- else
- {
- pRxMic = (PUCHAR) (&pKey->KeyMaterial) + 16;
- pTxMic = (PUCHAR) (&pKey->KeyMaterial) + 24;
- }
-
- offset = PAIRWISE_KEY_TABLE_BASE + (Aid * HW_KEY_ENTRY_SIZE) + 0x10;
- for (i=0; i<8; )
- {
- Value = *(pTxMic+i);
- Value += (*(pTxMic+i+1)<<8);
- Value += (*(pTxMic+i+2)<<16);
- Value += (*(pTxMic+i+3)<<24);
- RTUSBWriteMACRegister(pAd, offset+i, Value);
- i+=4;
- }
-
- offset = PAIRWISE_KEY_TABLE_BASE + (Aid * HW_KEY_ENTRY_SIZE) + 0x18;
- for (i=0; i<8; )
- {
- Value = *(pRxMic+i);
- Value += (*(pRxMic+i+1)<<8);
- Value += (*(pRxMic+i+2)<<16);
- Value += (*(pRxMic+i+3)<<24);
- RTUSBWriteMACRegister(pAd, offset+i, Value);
- i+=4;
- }
-
- // Only Key lenth equal to TKIP key have these
- NdisMoveMemory(pAd->MacTab.Content[Aid].PairwiseKey.RxMic, pRxMic, 8);
- NdisMoveMemory(pAd->MacTab.Content[Aid].PairwiseKey.TxMic, pTxMic, 8);
-
- DBGPRINT(RT_DEBUG_TRACE,
- (" TxMIC = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x \n",
- pTxMic[0],pTxMic[1],pTxMic[2],pTxMic[3],
- pTxMic[4],pTxMic[5],pTxMic[6],pTxMic[7]));
- DBGPRINT(RT_DEBUG_TRACE,
- (" RxMIC = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x \n",
- pRxMic[0],pRxMic[1],pRxMic[2],pRxMic[3],
- pRxMic[4],pRxMic[5],pRxMic[6],pRxMic[7]));
- }
-
- // 2. Record Security Key.
- pAd->MacTab.Content[BSSID_WCID].PairwiseKey.KeyLen= (UCHAR)pKey->KeyLength;
- NdisMoveMemory(pAd->MacTab.Content[Aid].PairwiseKey.Key, &pKey->KeyMaterial, pKey->KeyLength);
-
- // 3. Check RxTsc. And used to init to ASIC IV.
- if (bKeyRSC == TRUE)
- NdisMoveMemory(pAd->MacTab.Content[Aid].PairwiseKey.RxTsc, &pKey->KeyRSC, 6);
- else
- NdisZeroMemory(pAd->MacTab.Content[Aid].PairwiseKey.RxTsc, 6);
-
- // 4. Init TxTsc to one based on WiFi WPA specs
- pAd->MacTab.Content[Aid].PairwiseKey.TxTsc[0] = 1;
- pAd->MacTab.Content[Aid].PairwiseKey.TxTsc[1] = 0;
- pAd->MacTab.Content[Aid].PairwiseKey.TxTsc[2] = 0;
- pAd->MacTab.Content[Aid].PairwiseKey.TxTsc[3] = 0;
- pAd->MacTab.Content[Aid].PairwiseKey.TxTsc[4] = 0;
- pAd->MacTab.Content[Aid].PairwiseKey.TxTsc[5] = 0;
-
- CipherAlg = pAd->MacTab.Content[Aid].PairwiseKey.CipherAlg;
-
- offset = PAIRWISE_KEY_TABLE_BASE + (Aid * HW_KEY_ENTRY_SIZE);
- RTUSBMultiWrite(pAd, (USHORT) offset, pKey->KeyMaterial,
- ((pKey->KeyLength == LEN_TKIP_KEY) ? 16 : (USHORT)pKey->KeyLength));
-
- offset = SHARED_KEY_TABLE_BASE + (KeyIdx * HW_KEY_ENTRY_SIZE);
- RTUSBMultiWrite(pAd, (USHORT) offset, pKey->KeyMaterial, (USHORT)pKey->KeyLength);
-
- offset = PAIRWISE_IVEIV_TABLE_BASE + (Aid * HW_IVEIV_ENTRY_SIZE);
- NdisZeroMemory(IVEIV, 8);
-
- // IV/EIV
- if ((CipherAlg == CIPHER_TKIP) ||
- (CipherAlg == CIPHER_TKIP_NO_MIC) ||
- (CipherAlg == CIPHER_AES))
- {
- IVEIV[3] = 0x20; // Eiv bit on. keyid always 0 for pairwise key
- }
- // default key idx needs to set.
- // in TKIP/AES KeyIdx = 0 , WEP KeyIdx is default tx key.
- else
- {
- IVEIV[3] |= (KeyIdx<< 6);
- }
- RTUSBMultiWrite(pAd, (USHORT) offset, IVEIV, 8);
-
- // WCID Attribute UDF:3, BSSIdx:3, Alg:3, Keytable:1=PAIRWISE KEY, BSSIdx is 0
- if ((CipherAlg == CIPHER_TKIP) ||
- (CipherAlg == CIPHER_TKIP_NO_MIC) ||
- (CipherAlg == CIPHER_AES))
- {
- WCIDAttri = (CipherAlg<<1)|SHAREDKEYTABLE;
- }
- else
- WCIDAttri = (CipherAlg<<1)|SHAREDKEYTABLE;
-
- offset = MAC_WCID_ATTRIBUTE_BASE + (Aid* HW_WCID_ATTRI_SIZE);
- RTUSBWriteMACRegister(pAd, offset, WCIDAttri);
- RTUSBReadMACRegister(pAd, offset, &Value);
-
- DBGPRINT(RT_DEBUG_TRACE, ("BSSID_WCID : offset = %x, WCIDAttri = %lx\n",
- offset, WCIDAttri));
-
- // pAddr
- // Add Bssid mac address at linkup. not here. check!
- /*offset = MAC_WCID_BASE + (BSSID_WCID * HW_WCID_ENTRY_SIZE);
- *for (i=0; i<MAC_ADDR_LEN; i++)
- {
- RTMP_IO_WRITE8(pAd, offset+i, pKey->BSSID[i]);
- }
- */
-
- DBGPRINT(RT_DEBUG_ERROR, ("AddBSSIDasWCIDEntry: Alg=%s, KeyLength = %d\n",
- CipherName[CipherAlg], pKey->KeyLength));
- DBGPRINT(RT_DEBUG_TRACE, ("Key [idx=%x] [KeyLen = %d]\n",
- pKey->KeyIndex, pKey->KeyLength));
- for(i=0; i<pKey->KeyLength; i++)
- DBGPRINT_RAW(RT_DEBUG_TRACE,(" %x:", pKey->KeyMaterial[i]));
- DBGPRINT(RT_DEBUG_TRACE,(" \n"));
-}
-
-/*
-========================================================================
-Routine Description:
- Get a received packet.
-
-Arguments:
- pAd device control block
- pSaveRxD receive descriptor information
- *pbReschedule need reschedule flag
- *pRxPending pending received packet flag
-
-Return Value:
- the recieved packet
-
-Note:
-========================================================================
-*/
-#define RT2870_RXDMALEN_FIELD_SIZE 4
-PNDIS_PACKET GetPacketFromRxRing(
- IN PRTMP_ADAPTER pAd,
- OUT PRT28XX_RXD_STRUC pSaveRxD,
- OUT BOOLEAN *pbReschedule,
- IN OUT UINT32 *pRxPending)
-{
- PRX_CONTEXT pRxContext;
- PNDIS_PACKET pSkb;
- PUCHAR pData;
- ULONG ThisFrameLen;
- ULONG RxBufferLength;
- PRXWI_STRUC pRxWI;
-
- pRxContext = &pAd->RxContext[pAd->NextRxBulkInReadIndex];
- if ((pRxContext->Readable == FALSE) || (pRxContext->InUse == TRUE))
- return NULL;
-
- RxBufferLength = pRxContext->BulkInOffset - pAd->ReadPosition;
- if (RxBufferLength < (RT2870_RXDMALEN_FIELD_SIZE + sizeof(RXWI_STRUC) + sizeof(RXINFO_STRUC)))
- {
- goto label_null;
- }
-
- pData = &pRxContext->TransferBuffer[pAd->ReadPosition]; /* 4KB */
- // The RXDMA field is 4 bytes, now just use the first 2 bytes. The Length including the (RXWI + MSDU + Padding)
- ThisFrameLen = *pData + (*(pData+1)<<8);
- if (ThisFrameLen == 0)
- {
- DBGPRINT(RT_DEBUG_TRACE, ("BIRIdx(%d): RXDMALen is zero.[%ld], BulkInBufLen = %ld)\n",
- pAd->NextRxBulkInReadIndex, ThisFrameLen, pRxContext->BulkInOffset));
- goto label_null;
- }
- if ((ThisFrameLen&0x3) != 0)
- {
- DBGPRINT(RT_DEBUG_ERROR, ("BIRIdx(%d): RXDMALen not multiple of 4.[%ld], BulkInBufLen = %ld)\n",
- pAd->NextRxBulkInReadIndex, ThisFrameLen, pRxContext->BulkInOffset));
- goto label_null;
- }
-
- if ((ThisFrameLen + 8)> RxBufferLength) // 8 for (RT2870_RXDMALEN_FIELD_SIZE + sizeof(RXINFO_STRUC))
- {
- DBGPRINT(RT_DEBUG_TRACE,("BIRIdx(%d):FrameLen(0x%lx) outranges. BulkInLen=0x%lx, remaining RxBufLen=0x%lx, ReadPos=0x%lx\n",
- pAd->NextRxBulkInReadIndex, ThisFrameLen, pRxContext->BulkInOffset, RxBufferLength, pAd->ReadPosition));
-
- // error frame. finish this loop
- goto label_null;
- }
-
- // skip USB frame length field
- pData += RT2870_RXDMALEN_FIELD_SIZE;
- pRxWI = (PRXWI_STRUC)pData;
-
- if (pRxWI->MPDUtotalByteCount > ThisFrameLen)
- {
- DBGPRINT(RT_DEBUG_ERROR, ("%s():pRxWIMPDUtotalByteCount(%d) large than RxDMALen(%ld)\n",
- __func__, pRxWI->MPDUtotalByteCount, ThisFrameLen));
- goto label_null;
- }
-
- // allocate a rx packet
- pSkb = dev_alloc_skb(ThisFrameLen);
- if (pSkb == NULL)
- {
- DBGPRINT(RT_DEBUG_ERROR,("%s():Cannot Allocate sk buffer for this Bulk-In buffer!\n", __func__));
- goto label_null;
- }
-
- // copy the rx packet
- memcpy(skb_put(pSkb, ThisFrameLen), pData, ThisFrameLen);
- RTPKT_TO_OSPKT(pSkb)->dev = get_netdev_from_bssid(pAd, BSS0);
- RTMP_SET_PACKET_SOURCE(OSPKT_TO_RTPKT(pSkb), PKTSRC_NDIS);
-
- // copy RxD
- *pSaveRxD = *(PRXINFO_STRUC)(pData + ThisFrameLen);
-
- // update next packet read position.
- pAd->ReadPosition += (ThisFrameLen + RT2870_RXDMALEN_FIELD_SIZE + RXINFO_SIZE); // 8 for (RT2870_RXDMALEN_FIELD_SIZE + sizeof(RXINFO_STRUC))
-
- return pSkb;
-
-label_null:
-
- return NULL;
-}
-
-
-/*
-========================================================================
-Routine Description:
- Handle received packets.
-
-Arguments:
- data - URB information pointer
-
-Return Value:
- None
-
-Note:
-========================================================================
-*/
-static void rx_done_tasklet(unsigned long data)
-{
- purbb_t pUrb;
- PRX_CONTEXT pRxContext;
- PRTMP_ADAPTER pAd;
- NTSTATUS Status;
- unsigned int IrqFlags;
-
- pUrb = (purbb_t)data;
- pRxContext = (PRX_CONTEXT)pUrb->context;
- pAd = pRxContext->pAd;
- Status = pUrb->status;
-
-
- RTMP_IRQ_LOCK(&pAd->BulkInLock, IrqFlags);
- pRxContext->InUse = FALSE;
- pRxContext->IRPPending = FALSE;
- pRxContext->BulkInOffset += pUrb->actual_length;
- //NdisInterlockedDecrement(&pAd->PendingRx);
- pAd->PendingRx--;
-
- if (Status == USB_ST_NOERROR)
- {
- pAd->BulkInComplete++;
- pAd->NextRxBulkInPosition = 0;
- if (pRxContext->BulkInOffset) // As jan's comment, it may bulk-in success but size is zero.
- {
- pRxContext->Readable = TRUE;
- INC_RING_INDEX(pAd->NextRxBulkInIndex, RX_RING_SIZE);
- }
- RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags);
- }
- else // STATUS_OTHER
- {
- pAd->BulkInCompleteFail++;
- // Still read this packet although it may comtain wrong bytes.
- pRxContext->Readable = FALSE;
- RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags);
-
- // Parsing all packets. because after reset, the index will reset to all zero.
- if ((!RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS |
- fRTMP_ADAPTER_BULKIN_RESET |
- fRTMP_ADAPTER_HALT_IN_PROGRESS |
- fRTMP_ADAPTER_NIC_NOT_EXIST))))
- {
-
- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Bulk In Failed. Status=%d, BIIdx=0x%x, BIRIdx=0x%x, actual_length= 0x%x\n",
- Status, pAd->NextRxBulkInIndex, pAd->NextRxBulkInReadIndex, pRxContext->pUrb->actual_length));
-
- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKIN_RESET);
- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_IN, NULL, 0);
- }
- }
-
- ASSERT((pRxContext->InUse == pRxContext->IRPPending));
-
- RTUSBBulkReceive(pAd);
-
- return;
-
-}
-
-
-static void rt2870_mgmt_dma_done_tasklet(unsigned long data)
-{
- PRTMP_ADAPTER pAd;
- PTX_CONTEXT pMLMEContext;
- int index;
- PNDIS_PACKET pPacket;
- purbb_t pUrb;
- NTSTATUS Status;
- unsigned long IrqFlags;
-
-
- pUrb = (purbb_t)data;
- pMLMEContext = (PTX_CONTEXT)pUrb->context;
- pAd = pMLMEContext->pAd;
- Status = pUrb->status;
- index = pMLMEContext->SelfIdx;
-
- ASSERT((pAd->MgmtRing.TxDmaIdx == index));
-
- RTMP_IRQ_LOCK(&pAd->BulkOutLock[MGMTPIPEIDX], IrqFlags);
-
-
- if (Status != USB_ST_NOERROR)
- {
- //Bulk-Out fail status handle
- if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) &&
- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) &&
- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) &&
- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)))
- {
- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Bulk Out MLME Failed, Status=%d!\n", Status));
- // TODO: How to handle about the MLMEBulkOut failed issue. Need to resend the mgmt pkt?
- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET);
- pAd->bulkResetPipeid = (MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG);
- }
- }
-
- pAd->BulkOutPending[MGMTPIPEIDX] = FALSE;
- RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[MGMTPIPEIDX], IrqFlags);
-
- RTMP_IRQ_LOCK(&pAd->MLMEBulkOutLock, IrqFlags);
- // Reset MLME context flags
- pMLMEContext->IRPPending = FALSE;
- pMLMEContext->InUse = FALSE;
- pMLMEContext->bWaitingBulkOut = FALSE;
- pMLMEContext->BulkOutSize = 0;
-
- pPacket = pAd->MgmtRing.Cell[index].pNdisPacket;
- pAd->MgmtRing.Cell[index].pNdisPacket = NULL;
-
- // Increase MgmtRing Index
- INC_RING_INDEX(pAd->MgmtRing.TxDmaIdx, MGMT_RING_SIZE);
- pAd->MgmtRing.TxSwFreeIdx++;
- RTMP_IRQ_UNLOCK(&pAd->MLMEBulkOutLock, IrqFlags);
-
- // No-matter success or fail, we free the mgmt packet.
- if (pPacket)
- RTMPFreeNdisPacket(pAd, pPacket);
-
- if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS |
- fRTMP_ADAPTER_HALT_IN_PROGRESS |
- fRTMP_ADAPTER_NIC_NOT_EXIST))))
- {
- // do nothing and return directly.
- }
- else
- {
- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET) &&
- ((pAd->bulkResetPipeid & BULKOUT_MGMT_RESET_FLAG) == BULKOUT_MGMT_RESET_FLAG))
- { // For Mgmt Bulk-Out failed, ignore it now.
- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0);
- }
- else
- {
-
- // Always call Bulk routine, even reset bulk.
- // The protectioon of rest bulk should be in BulkOut routine
- if (pAd->MgmtRing.TxSwFreeIdx < MGMT_RING_SIZE /* pMLMEContext->bWaitingBulkOut == TRUE */)
- {
- RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_MLME);
- }
- RTUSBKickBulkOut(pAd);
- }
- }
-
-}
-
-
-static void rt2870_hcca_dma_done_tasklet(unsigned long data)
-{
- PRTMP_ADAPTER pAd;
- PHT_TX_CONTEXT pHTTXContext;
- UCHAR BulkOutPipeId = 4;
- purbb_t pUrb;
-
- DBGPRINT_RAW(RT_DEBUG_ERROR, ("--->hcca_dma_done_tasklet\n"));
-
- pUrb = (purbb_t)data;
- pHTTXContext = (PHT_TX_CONTEXT)pUrb->context;
- pAd = pHTTXContext->pAd;
-
- rt2870_dataout_complete_tasklet((unsigned long)pUrb);
-
- if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS |
- fRTMP_ADAPTER_HALT_IN_PROGRESS |
- fRTMP_ADAPTER_NIC_NOT_EXIST))))
- {
- // do nothing and return directly.
- }
- else
- {
- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))
- {
- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0);
- }
- else
- { pHTTXContext = &pAd->TxContext[BulkOutPipeId];
- if ((pAd->TxSwQueue[BulkOutPipeId].Number > 0) &&
- /*((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */
- (pAd->DeQueueRunning[BulkOutPipeId] == FALSE) &&
- (pHTTXContext->bCurWriting == FALSE))
- {
- RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId, MAX_TX_PROCESS);
- }
-
- RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL<<4);
- RTUSBKickBulkOut(pAd);
- }
- }
-
- DBGPRINT_RAW(RT_DEBUG_ERROR, ("<---hcca_dma_done_tasklet\n"));
-}
-
-
-static void rt2870_ac3_dma_done_tasklet(unsigned long data)
-{
- PRTMP_ADAPTER pAd;
- PHT_TX_CONTEXT pHTTXContext;
- UCHAR BulkOutPipeId = 3;
- purbb_t pUrb;
-
-
- pUrb = (purbb_t)data;
- pHTTXContext = (PHT_TX_CONTEXT)pUrb->context;
- pAd = pHTTXContext->pAd;
-
- rt2870_dataout_complete_tasklet((unsigned long)pUrb);
-
- if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS |
- fRTMP_ADAPTER_HALT_IN_PROGRESS |
- fRTMP_ADAPTER_NIC_NOT_EXIST))))
- {
- // do nothing and return directly.
- }
- else
- {
- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))
- {
- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0);
- }
- else
- { pHTTXContext = &pAd->TxContext[BulkOutPipeId];
- if ((pAd->TxSwQueue[BulkOutPipeId].Number > 0) &&
- /*((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */
- (pAd->DeQueueRunning[BulkOutPipeId] == FALSE) &&
- (pHTTXContext->bCurWriting == FALSE))
- {
- RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId, MAX_TX_PROCESS);
- }
-
- RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL<<3);
- RTUSBKickBulkOut(pAd);
- }
- }
-
-
- return;
-}
-
-
-static void rt2870_ac2_dma_done_tasklet(unsigned long data)
-{
- PRTMP_ADAPTER pAd;
- PHT_TX_CONTEXT pHTTXContext;
- UCHAR BulkOutPipeId = 2;
- purbb_t pUrb;
-
-
- pUrb = (purbb_t)data;
- pHTTXContext = (PHT_TX_CONTEXT)pUrb->context;
- pAd = pHTTXContext->pAd;
-
- rt2870_dataout_complete_tasklet((unsigned long)pUrb);
-
- if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS |
- fRTMP_ADAPTER_HALT_IN_PROGRESS |
- fRTMP_ADAPTER_NIC_NOT_EXIST))))
- {
- // do nothing and return directly.
- }
- else
- {
- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))
- {
- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0);
- }
- else
- { pHTTXContext = &pAd->TxContext[BulkOutPipeId];
- if ((pAd->TxSwQueue[BulkOutPipeId].Number > 0) &&
- /*((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */
- (pAd->DeQueueRunning[BulkOutPipeId] == FALSE) &&
- (pHTTXContext->bCurWriting == FALSE))
- {
- RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId, MAX_TX_PROCESS);
- }
-
- RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL<<2);
- RTUSBKickBulkOut(pAd);
- }
- }
-
- return;
-}
-
-
-static void rt2870_ac1_dma_done_tasklet(unsigned long data)
-{
- PRTMP_ADAPTER pAd;
- PHT_TX_CONTEXT pHTTXContext;
- UCHAR BulkOutPipeId = 1;
- purbb_t pUrb;
-
-
- pUrb = (purbb_t)data;
- pHTTXContext = (PHT_TX_CONTEXT)pUrb->context;
- pAd = pHTTXContext->pAd;
-
- rt2870_dataout_complete_tasklet((unsigned long)pUrb);
-
- if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS |
- fRTMP_ADAPTER_HALT_IN_PROGRESS |
- fRTMP_ADAPTER_NIC_NOT_EXIST))))
- {
- // do nothing and return directly.
- }
- else
- {
- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))
- {
- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0);
- }
- else
- { pHTTXContext = &pAd->TxContext[BulkOutPipeId];
- if ((pAd->TxSwQueue[BulkOutPipeId].Number > 0) &&
- /*((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */
- (pAd->DeQueueRunning[BulkOutPipeId] == FALSE) &&
- (pHTTXContext->bCurWriting == FALSE))
- {
- RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId, MAX_TX_PROCESS);
- }
-
- RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL<<1);
- RTUSBKickBulkOut(pAd);
- }
- }
-
-
- return;
-}
-
-
-static void rt2870_ac0_dma_done_tasklet(unsigned long data)
-{
- PRTMP_ADAPTER pAd;
- PHT_TX_CONTEXT pHTTXContext;
- UCHAR BulkOutPipeId = 0;
- purbb_t pUrb;
-
-
- pUrb = (purbb_t)data;
- pHTTXContext = (PHT_TX_CONTEXT)pUrb->context;
- pAd = pHTTXContext->pAd;
-
- rt2870_dataout_complete_tasklet((unsigned long)pUrb);
-
- if ((RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS |
- fRTMP_ADAPTER_HALT_IN_PROGRESS |
- fRTMP_ADAPTER_NIC_NOT_EXIST))))
- {
- // do nothing and return directly.
- }
- else
- {
- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET))
- {
- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0);
- }
- else
- { pHTTXContext = &pAd->TxContext[BulkOutPipeId];
- if ((pAd->TxSwQueue[BulkOutPipeId].Number > 0) &&
- /* ((pHTTXContext->CurWritePosition > (pHTTXContext->NextBulkOutPosition + 0x6000)) || (pHTTXContext->NextBulkOutPosition > pHTTXContext->CurWritePosition + 0x6000)) && */
- (pAd->DeQueueRunning[BulkOutPipeId] == FALSE) &&
- (pHTTXContext->bCurWriting == FALSE))
- {
- RTMPDeQueuePacket(pAd, FALSE, BulkOutPipeId, MAX_TX_PROCESS);
- }
-
- RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL);
- RTUSBKickBulkOut(pAd);
- }
- }
-
-
- return;
-
-}
-
-
-static void rt2870_null_frame_complete_tasklet(unsigned long data)
-{
- PRTMP_ADAPTER pAd;
- PTX_CONTEXT pNullContext;
- purbb_t pUrb;
- NTSTATUS Status;
- unsigned long irqFlag;
-
-
- pUrb = (purbb_t)data;
- pNullContext = (PTX_CONTEXT)pUrb->context;
- pAd = pNullContext->pAd;
- Status = pUrb->status;
-
- // Reset Null frame context flags
- RTMP_IRQ_LOCK(&pAd->BulkOutLock[0], irqFlag);
- pNullContext->IRPPending = FALSE;
- pNullContext->InUse = FALSE;
- pAd->BulkOutPending[0] = FALSE;
- pAd->watchDogTxPendingCnt[0] = 0;
-
- if (Status == USB_ST_NOERROR)
- {
- RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag);
-
- RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS);
- }
- else // STATUS_OTHER
- {
- if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) &&
- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) &&
- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) &&
- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)))
- {
- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Bulk Out Null Frame Failed, ReasonCode=%d!\n", Status));
- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET);
- pAd->bulkResetPipeid = (MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG);
- RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag);
- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0);
- }
- else
- {
- RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag);
- }
- }
-
- // Always call Bulk routine, even reset bulk.
- // The protectioon of rest bulk should be in BulkOut routine
- RTUSBKickBulkOut(pAd);
-
-}
-
-
-static void rt2870_rts_frame_complete_tasklet(unsigned long data)
-{
- PRTMP_ADAPTER pAd;
- PTX_CONTEXT pRTSContext;
- purbb_t pUrb;
- NTSTATUS Status;
- unsigned long irqFlag;
-
-
- pUrb = (purbb_t)data;
- pRTSContext = (PTX_CONTEXT)pUrb->context;
- pAd = pRTSContext->pAd;
- Status = pUrb->status;
-
- // Reset RTS frame context flags
- RTMP_IRQ_LOCK(&pAd->BulkOutLock[0], irqFlag);
- pRTSContext->IRPPending = FALSE;
- pRTSContext->InUse = FALSE;
-
- if (Status == USB_ST_NOERROR)
- {
- RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag);
- RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS);
- }
- else // STATUS_OTHER
- {
- if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) &&
- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) &&
- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) &&
- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)))
- {
- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Bulk Out RTS Frame Failed\n"));
- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET);
- pAd->bulkResetPipeid = (MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG);
- RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag);
- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0);
- }
- else
- {
- RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag);
- }
- }
-
- RTMP_SEM_LOCK(&pAd->BulkOutLock[pRTSContext->BulkOutPipeId]);
- pAd->BulkOutPending[pRTSContext->BulkOutPipeId] = FALSE;
- RTMP_SEM_UNLOCK(&pAd->BulkOutLock[pRTSContext->BulkOutPipeId]);
-
- // Always call Bulk routine, even reset bulk.
- // The protectioon of rest bulk should be in BulkOut routine
- RTUSBKickBulkOut(pAd);
-
-}
-
-
-static void rt2870_pspoll_frame_complete_tasklet(unsigned long data)
-{
- PRTMP_ADAPTER pAd;
- PTX_CONTEXT pPsPollContext;
- purbb_t pUrb;
- NTSTATUS Status;
-
-
- pUrb = (purbb_t)data;
- pPsPollContext = (PTX_CONTEXT)pUrb->context;
- pAd = pPsPollContext->pAd;
- Status = pUrb->status;
-
- // Reset PsPoll context flags
- pPsPollContext->IRPPending = FALSE;
- pPsPollContext->InUse = FALSE;
- pAd->watchDogTxPendingCnt[0] = 0;
-
- if (Status == USB_ST_NOERROR)
- {
- RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS);
- }
- else // STATUS_OTHER
- {
- if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) &&
- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) &&
- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) &&
- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET)))
- {
- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Bulk Out PSPoll Failed\n"));
- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET);
- pAd->bulkResetPipeid = (MGMTPIPEIDX | BULKOUT_MGMT_RESET_FLAG);
- RTUSBEnqueueInternalCmd(pAd, CMDTHREAD_RESET_BULK_OUT, NULL, 0);
- }
- }
-
- RTMP_SEM_LOCK(&pAd->BulkOutLock[0]);
- pAd->BulkOutPending[0] = FALSE;
- RTMP_SEM_UNLOCK(&pAd->BulkOutLock[0]);
-
- // Always call Bulk routine, even reset bulk.
- // The protectioon of rest bulk should be in BulkOut routine
- RTUSBKickBulkOut(pAd);
-
-}
-
-
-static void rt2870_dataout_complete_tasklet(unsigned long data)
-{
- PRTMP_ADAPTER pAd;
- purbb_t pUrb;
- POS_COOKIE pObj;
- PHT_TX_CONTEXT pHTTXContext;
- UCHAR BulkOutPipeId;
- NTSTATUS Status;
- unsigned long IrqFlags;
-
-
- pUrb = (purbb_t)data;
- pHTTXContext = (PHT_TX_CONTEXT)pUrb->context;
- pAd = pHTTXContext->pAd;
- pObj = (POS_COOKIE) pAd->OS_Cookie;
- Status = pUrb->status;
-
- // Store BulkOut PipeId
- BulkOutPipeId = pHTTXContext->BulkOutPipeId;
- pAd->BulkOutDataOneSecCount++;
-
- //DBGPRINT(RT_DEBUG_LOUD, ("Done-B(%d):I=0x%lx, CWPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d!\n", BulkOutPipeId, in_interrupt(), pHTTXContext->CurWritePosition,
- // pHTTXContext->NextBulkOutPosition, pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad));
-
- RTMP_IRQ_LOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags);
- pAd->BulkOutPending[BulkOutPipeId] = FALSE;
- pHTTXContext->IRPPending = FALSE;
- pAd->watchDogTxPendingCnt[BulkOutPipeId] = 0;
-
- if (Status == USB_ST_NOERROR)
- {
- pAd->BulkOutComplete++;
-
- RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags);
-
- pAd->Counters8023.GoodTransmits++;
- //RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags);
- FREE_HTTX_RING(pAd, BulkOutPipeId, pHTTXContext);
- //RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags);
-
-
- }
- else // STATUS_OTHER
- {
- PUCHAR pBuf;
-
- pAd->BulkOutCompleteOther++;
-
- pBuf = &pHTTXContext->TransferBuffer->field.WirelessPacket[pHTTXContext->NextBulkOutPosition];
-
- if (!RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS |
- fRTMP_ADAPTER_HALT_IN_PROGRESS |
- fRTMP_ADAPTER_NIC_NOT_EXIST |
- fRTMP_ADAPTER_BULKOUT_RESET)))
- {
- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET);
- pAd->bulkResetPipeid = BulkOutPipeId;
- pAd->bulkResetReq[BulkOutPipeId] = pAd->BulkOutReq;
- }
- RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags);
-
- DBGPRINT_RAW(RT_DEBUG_ERROR, ("BulkOutDataPacket failed: ReasonCode=%d!\n", Status));
- DBGPRINT_RAW(RT_DEBUG_ERROR, ("\t>>BulkOut Req=0x%lx, Complete=0x%lx, Other=0x%lx\n", pAd->BulkOutReq, pAd->BulkOutComplete, pAd->BulkOutCompleteOther));
- DBGPRINT_RAW(RT_DEBUG_ERROR, ("\t>>BulkOut Header:%x %x %x %x %x %x %x %x\n", pBuf[0], pBuf[1], pBuf[2], pBuf[3], pBuf[4], pBuf[5], pBuf[6], pBuf[7]));
- //DBGPRINT_RAW(RT_DEBUG_ERROR, (">>BulkOutCompleteCancel=0x%x, BulkOutCompleteOther=0x%x\n", pAd->BulkOutCompleteCancel, pAd->BulkOutCompleteOther));
-
- }
-
- //
- // bInUse = TRUE, means some process are filling TX data, after that must turn on bWaitingBulkOut
- // bWaitingBulkOut = TRUE, means the TX data are waiting for bulk out.
- //
- //RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags);
- if ((pHTTXContext->ENextBulkOutPosition != pHTTXContext->CurWritePosition) &&
- (pHTTXContext->ENextBulkOutPosition != (pHTTXContext->CurWritePosition+8)) &&
- !RTUSB_TEST_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_FRAG << BulkOutPipeId)))
- {
- // Indicate There is data avaliable
- RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << BulkOutPipeId));
- }
- //RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags);
-
- // Always call Bulk routine, even reset bulk.
- // The protection of rest bulk should be in BulkOut routine
- RTUSBKickBulkOut(pAd);
-}
-
-/* End of 2870_rtmp_init.c */
diff --git a/drivers/staging/rt2870/common/acction.c b/drivers/staging/rt2870/common/acction.c
new file mode 100644
index 000000000000..fd806c3871aa
--- /dev/null
+++ b/drivers/staging/rt2870/common/acction.c
@@ -0,0 +1 @@
+#include "../../rt2860/common/action.c"
diff --git a/drivers/staging/rt2870/common/cmm_aes.c b/drivers/staging/rt2870/common/cmm_aes.c
new file mode 100644
index 000000000000..15d6a14d2d9c
--- /dev/null
+++ b/drivers/staging/rt2870/common/cmm_aes.c
@@ -0,0 +1 @@
+#include "../../rt2860/common/cmm_aes.c"
diff --git a/drivers/staging/rt2870/common/cmm_asic.c b/drivers/staging/rt2870/common/cmm_asic.c
new file mode 100644
index 000000000000..38de817991ff
--- /dev/null
+++ b/drivers/staging/rt2870/common/cmm_asic.c
@@ -0,0 +1 @@
+#include "../../rt2860/common/cmm_asic.c"
diff --git a/drivers/staging/rt2870/common/cmm_cfg.c b/drivers/staging/rt2870/common/cmm_cfg.c
new file mode 100644
index 000000000000..6b2bdd7d44ec
--- /dev/null
+++ b/drivers/staging/rt2870/common/cmm_cfg.c
@@ -0,0 +1 @@
+#include "../../rt2860/common/cmm_cfg.c"
diff --git a/drivers/staging/rt2870/common/cmm_data_2870.c b/drivers/staging/rt2870/common/cmm_data_2870.c
deleted file mode 100644
index 3b63a48310f0..000000000000
--- a/drivers/staging/rt2870/common/cmm_data_2870.c
+++ /dev/null
@@ -1,936 +0,0 @@
-/*
- *************************************************************************
- * Ralink Tech Inc.
- * 5F., No.36, Taiyuan St., Jhubei City,
- * Hsinchu County 302,
- * Taiwan, R.O.C.
- *
- * (c) Copyright 2002-2007, Ralink Technology, Inc.
- *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
- * *
- *************************************************************************
-*/
-/*
- All functions in this file must be USB-depended, or you should out your function
- in other files.
-
-*/
-#include "../rt_config.h"
-
-
-/*
- We can do copy the frame into pTxContext when match following conditions.
- =>
- =>
- =>
-*/
-static inline NDIS_STATUS RtmpUSBCanDoWrite(
- IN RTMP_ADAPTER *pAd,
- IN UCHAR QueIdx,
- IN HT_TX_CONTEXT *pHTTXContext)
-{
- NDIS_STATUS canWrite = NDIS_STATUS_RESOURCES;
-
- if (((pHTTXContext->CurWritePosition) < pHTTXContext->NextBulkOutPosition) && (pHTTXContext->CurWritePosition + LOCAL_TXBUF_SIZE) > pHTTXContext->NextBulkOutPosition)
- {
- DBGPRINT(RT_DEBUG_ERROR,("RtmpUSBCanDoWrite c1!\n"));
- RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << QueIdx));
- }
- else if ((pHTTXContext->CurWritePosition == 8) && (pHTTXContext->NextBulkOutPosition < LOCAL_TXBUF_SIZE))
- {
- DBGPRINT(RT_DEBUG_ERROR,("RtmpUSBCanDoWrite c2!\n"));
- RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << QueIdx));
- }
- else if (pHTTXContext->bCurWriting == TRUE)
- {
- DBGPRINT(RT_DEBUG_ERROR,("RtmpUSBCanDoWrite c3!\n"));
- }
- else
- {
- canWrite = NDIS_STATUS_SUCCESS;
- }
-
-
- return canWrite;
-}
-
-
-USHORT RtmpUSB_WriteSubTxResource(
- IN PRTMP_ADAPTER pAd,
- IN TX_BLK *pTxBlk,
- IN BOOLEAN bIsLast,
- OUT USHORT *FreeNumber)
-{
-
- // Dummy function. Should be removed in the future.
- return 0;
-
-}
-
-USHORT RtmpUSB_WriteFragTxResource(
- IN PRTMP_ADAPTER pAd,
- IN TX_BLK *pTxBlk,
- IN UCHAR fragNum,
- OUT USHORT *FreeNumber)
-{
- HT_TX_CONTEXT *pHTTXContext;
- USHORT hwHdrLen; // The hwHdrLen consist of 802.11 header length plus the header padding length.
- UINT32 fillOffset;
- TXINFO_STRUC *pTxInfo;
- TXWI_STRUC *pTxWI;
- PUCHAR pWirelessPacket = NULL;
- UCHAR QueIdx;
- NDIS_STATUS Status;
- unsigned long IrqFlags;
- UINT32 USBDMApktLen = 0, DMAHdrLen, padding;
- BOOLEAN TxQLastRound = FALSE;
-
- //
- // get Tx Ring Resource & Dma Buffer address
- //
- QueIdx = pTxBlk->QueIdx;
- pHTTXContext = &pAd->TxContext[QueIdx];
-
- RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags);
-
- pHTTXContext = &pAd->TxContext[QueIdx];
- fillOffset = pHTTXContext->CurWritePosition;
-
- if(fragNum == 0)
- {
- // Check if we have enough space for this bulk-out batch.
- Status = RtmpUSBCanDoWrite(pAd, QueIdx, pHTTXContext);
- if (Status == NDIS_STATUS_SUCCESS)
- {
- pHTTXContext->bCurWriting = TRUE;
-
- // Reserve space for 8 bytes padding.
- if ((pHTTXContext->ENextBulkOutPosition == pHTTXContext->CurWritePosition))
- {
- pHTTXContext->ENextBulkOutPosition += 8;
- pHTTXContext->CurWritePosition += 8;
- fillOffset += 8;
- }
- pTxBlk->Priv = 0;
- pHTTXContext->CurWriteRealPos = pHTTXContext->CurWritePosition;
- }
- else
- {
- RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags);
-
- RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_FAILURE);
- return(Status);
- }
- }
- else
- {
- // For sub-sequent frames of this bulk-out batch. Just copy it to our bulk-out buffer.
- Status = ((pHTTXContext->bCurWriting == TRUE) ? NDIS_STATUS_SUCCESS : NDIS_STATUS_FAILURE);
- if (Status == NDIS_STATUS_SUCCESS)
- {
- fillOffset += pTxBlk->Priv;
- }
- else
- {
- RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags);
-
- RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_FAILURE);
- return(Status);
- }
- }
-
- NdisZeroMemory((PUCHAR)(&pTxBlk->HeaderBuf[0]), TXINFO_SIZE);
- pTxInfo = (PTXINFO_STRUC)(&pTxBlk->HeaderBuf[0]);
- pTxWI= (PTXWI_STRUC)(&pTxBlk->HeaderBuf[TXINFO_SIZE]);
-
- pWirelessPacket = &pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset];
-
- // copy TXWI + WLAN Header + LLC into DMA Header Buffer
- //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4);
- hwHdrLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen;
-
- // Build our URB for USBD
- DMAHdrLen = TXWI_SIZE + hwHdrLen;
- USBDMApktLen = DMAHdrLen + pTxBlk->SrcBufLen;
- padding = (4 - (USBDMApktLen % 4)) & 0x03; // round up to 4 byte alignment
- USBDMApktLen += padding;
-
- pTxBlk->Priv += (TXINFO_SIZE + USBDMApktLen);
-
- // For TxInfo, the length of USBDMApktLen = TXWI_SIZE + 802.11 header + payload
- RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(USBDMApktLen), FALSE, FIFO_EDCA, FALSE /*NextValid*/, FALSE);
-
- if (fragNum == pTxBlk->TotalFragNum)
- {
- pTxInfo->USBDMATxburst = 0;
- if ((pHTTXContext->CurWritePosition + pTxBlk->Priv + 3906)> MAX_TXBULK_LIMIT)
- {
- pTxInfo->SwUseLastRound = 1;
- TxQLastRound = TRUE;
- }
- }
- else
- {
- pTxInfo->USBDMATxburst = 1;
- }
-
- NdisMoveMemory(pWirelessPacket, pTxBlk->HeaderBuf, TXINFO_SIZE + TXWI_SIZE + hwHdrLen);
- pWirelessPacket += (TXINFO_SIZE + TXWI_SIZE + hwHdrLen);
- pHTTXContext->CurWriteRealPos += (TXINFO_SIZE + TXWI_SIZE + hwHdrLen);
-
- RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags);
-
- NdisMoveMemory(pWirelessPacket, pTxBlk->pSrcBufData, pTxBlk->SrcBufLen);
-
- // Zero the last padding.
- pWirelessPacket += pTxBlk->SrcBufLen;
- NdisZeroMemory(pWirelessPacket, padding + 8);
-
- if (fragNum == pTxBlk->TotalFragNum)
- {
- RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags);
-
- // Update the pHTTXContext->CurWritePosition. 3906 used to prevent the NextBulkOut is a A-RALINK/A-MSDU Frame.
- pHTTXContext->CurWritePosition += pTxBlk->Priv;
- if (TxQLastRound == TRUE)
- pHTTXContext->CurWritePosition = 8;
- pHTTXContext->CurWriteRealPos = pHTTXContext->CurWritePosition;
-
-
- // Finally, set bCurWriting as FALSE
- pHTTXContext->bCurWriting = FALSE;
-
- RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags);
-
- // succeed and release the skb buffer
- RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_SUCCESS);
- }
-
-
- return(Status);
-
-}
-
-
-USHORT RtmpUSB_WriteSingleTxResource(
- IN PRTMP_ADAPTER pAd,
- IN TX_BLK *pTxBlk,
- IN BOOLEAN bIsLast,
- OUT USHORT *FreeNumber)
-{
- HT_TX_CONTEXT *pHTTXContext;
- USHORT hwHdrLen;
- UINT32 fillOffset;
- TXINFO_STRUC *pTxInfo;
- TXWI_STRUC *pTxWI;
- PUCHAR pWirelessPacket;
- UCHAR QueIdx;
- unsigned long IrqFlags;
- NDIS_STATUS Status;
- UINT32 USBDMApktLen = 0, DMAHdrLen, padding;
- BOOLEAN bTxQLastRound = FALSE;
-
- // For USB, didn't need PCI_MAP_SINGLE()
- //SrcBufPA = PCI_MAP_SINGLE(pAd, (char *) pTxBlk->pSrcBufData, pTxBlk->SrcBufLen, PCI_DMA_TODEVICE);
-
-
- //
- // get Tx Ring Resource & Dma Buffer address
- //
- QueIdx = pTxBlk->QueIdx;
-
- RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags);
- pHTTXContext = &pAd->TxContext[QueIdx];
- fillOffset = pHTTXContext->CurWritePosition;
-
-
-
- // Check ring full.
- Status = RtmpUSBCanDoWrite(pAd, QueIdx, pHTTXContext);
- if(Status == NDIS_STATUS_SUCCESS)
- {
- pHTTXContext->bCurWriting = TRUE;
-
- pTxInfo = (PTXINFO_STRUC)(&pTxBlk->HeaderBuf[0]);
- pTxWI= (PTXWI_STRUC)(&pTxBlk->HeaderBuf[TXINFO_SIZE]);
-
- // Reserve space for 8 bytes padding.
- if ((pHTTXContext->ENextBulkOutPosition == pHTTXContext->CurWritePosition))
- {
- pHTTXContext->ENextBulkOutPosition += 8;
- pHTTXContext->CurWritePosition += 8;
- fillOffset += 8;
- }
- pHTTXContext->CurWriteRealPos = pHTTXContext->CurWritePosition;
-
- pWirelessPacket = &pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset];
-
- // copy TXWI + WLAN Header + LLC into DMA Header Buffer
- //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4);
- hwHdrLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen;
-
- // Build our URB for USBD
- DMAHdrLen = TXWI_SIZE + hwHdrLen;
- USBDMApktLen = DMAHdrLen + pTxBlk->SrcBufLen;
- padding = (4 - (USBDMApktLen % 4)) & 0x03; // round up to 4 byte alignment
- USBDMApktLen += padding;
-
- pTxBlk->Priv = (TXINFO_SIZE + USBDMApktLen);
-
- // For TxInfo, the length of USBDMApktLen = TXWI_SIZE + 802.11 header + payload
- //PS packets use HCCA queue when dequeue from PS unicast queue (WiFi WPA2 MA9_DT1 for Marvell B STA)
- RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(USBDMApktLen), FALSE, FIFO_EDCA, FALSE /*NextValid*/, FALSE);
-
- if ((pHTTXContext->CurWritePosition + 3906 + pTxBlk->Priv) > MAX_TXBULK_LIMIT)
- {
- pTxInfo->SwUseLastRound = 1;
- bTxQLastRound = TRUE;
- }
- NdisMoveMemory(pWirelessPacket, pTxBlk->HeaderBuf, TXINFO_SIZE + TXWI_SIZE + hwHdrLen);
- pWirelessPacket += (TXINFO_SIZE + TXWI_SIZE + hwHdrLen);
-
- // We unlock it here to prevent the first 8 bytes maybe over-writed issue.
- // 1. First we got CurWritePosition but the first 8 bytes still not write to the pTxcontext.
- // 2. An interrupt break our routine and handle bulk-out complete.
- // 3. In the bulk-out compllete, it need to do another bulk-out,
- // if the ENextBulkOutPosition is just the same as CurWritePosition, it will save the first 8 bytes from CurWritePosition,
- // but the payload still not copyed. the pTxContext->SavedPad[] will save as allzero. and set the bCopyPad = TRUE.
- // 4. Interrupt complete.
- // 5. Our interrupted routine go back and fill the first 8 bytes to pTxContext.
- // 6. Next time when do bulk-out, it found the bCopyPad==TRUE and will copy the SavedPad[] to pTxContext->NextBulkOutPosition.
- // and the packet will wrong.
- pHTTXContext->CurWriteRealPos += (TXINFO_SIZE + TXWI_SIZE + hwHdrLen);
- RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags);
-
- NdisMoveMemory(pWirelessPacket, pTxBlk->pSrcBufData, pTxBlk->SrcBufLen);
- pWirelessPacket += pTxBlk->SrcBufLen;
- NdisZeroMemory(pWirelessPacket, padding + 8);
-
- RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags);
-
- pHTTXContext->CurWritePosition += pTxBlk->Priv;
- if (bTxQLastRound)
- pHTTXContext->CurWritePosition = 8;
- pHTTXContext->CurWriteRealPos = pHTTXContext->CurWritePosition;
-
- pHTTXContext->bCurWriting = FALSE;
- }
-
-
- RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags);
-
-
- // succeed and release the skb buffer
- RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_SUCCESS);
-
- return(Status);
-
-}
-
-
-USHORT RtmpUSB_WriteMultiTxResource(
- IN PRTMP_ADAPTER pAd,
- IN TX_BLK *pTxBlk,
- IN UCHAR frameNum,
- OUT USHORT *FreeNumber)
-{
- HT_TX_CONTEXT *pHTTXContext;
- USHORT hwHdrLen; // The hwHdrLen consist of 802.11 header length plus the header padding length.
- UINT32 fillOffset;
- TXINFO_STRUC *pTxInfo;
- TXWI_STRUC *pTxWI;
- PUCHAR pWirelessPacket = NULL;
- UCHAR QueIdx;
- NDIS_STATUS Status;
- unsigned long IrqFlags;
- //UINT32 USBDMApktLen = 0, DMAHdrLen, padding;
-
- //
- // get Tx Ring Resource & Dma Buffer address
- //
- QueIdx = pTxBlk->QueIdx;
- pHTTXContext = &pAd->TxContext[QueIdx];
-
- RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags);
-
- if(frameNum == 0)
- {
- // Check if we have enough space for this bulk-out batch.
- Status = RtmpUSBCanDoWrite(pAd, QueIdx, pHTTXContext);
- if (Status == NDIS_STATUS_SUCCESS)
- {
- pHTTXContext->bCurWriting = TRUE;
-
- pTxInfo = (PTXINFO_STRUC)(&pTxBlk->HeaderBuf[0]);
- pTxWI= (PTXWI_STRUC)(&pTxBlk->HeaderBuf[TXINFO_SIZE]);
-
-
- // Reserve space for 8 bytes padding.
- if ((pHTTXContext->ENextBulkOutPosition == pHTTXContext->CurWritePosition))
- {
-
- pHTTXContext->CurWritePosition += 8;
- pHTTXContext->ENextBulkOutPosition += 8;
- }
- fillOffset = pHTTXContext->CurWritePosition;
- pHTTXContext->CurWriteRealPos = pHTTXContext->CurWritePosition;
-
- pWirelessPacket = &pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset];
-
- //
- // Copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer
- //
- if (pTxBlk->TxFrameType == TX_AMSDU_FRAME)
- //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_AMSDU_SUBFRAMEHEAD, 4)+LENGTH_AMSDU_SUBFRAMEHEAD;
- hwHdrLen = pTxBlk->MpduHeaderLen-LENGTH_AMSDU_SUBFRAMEHEAD + pTxBlk->HdrPadLen + LENGTH_AMSDU_SUBFRAMEHEAD;
- else if (pTxBlk->TxFrameType == TX_RALINK_FRAME)
- //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen-LENGTH_ARALINK_HEADER_FIELD, 4)+LENGTH_ARALINK_HEADER_FIELD;
- hwHdrLen = pTxBlk->MpduHeaderLen-LENGTH_ARALINK_HEADER_FIELD + pTxBlk->HdrPadLen + LENGTH_ARALINK_HEADER_FIELD;
- else
- //hwHdrLen = ROUND_UP(pTxBlk->MpduHeaderLen, 4);
- hwHdrLen = pTxBlk->MpduHeaderLen + pTxBlk->HdrPadLen;
-
- // Update the pTxBlk->Priv.
- pTxBlk->Priv = TXINFO_SIZE + TXWI_SIZE + hwHdrLen;
-
- // pTxInfo->USBDMApktLen now just a temp value and will to correct latter.
- RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(pTxBlk->Priv), FALSE, FIFO_EDCA, FALSE /*NextValid*/, FALSE);
-
- // Copy it.
- NdisMoveMemory(pWirelessPacket, pTxBlk->HeaderBuf, pTxBlk->Priv);
- pHTTXContext->CurWriteRealPos += pTxBlk->Priv;
- pWirelessPacket += pTxBlk->Priv;
- }
- }
- else
- { // For sub-sequent frames of this bulk-out batch. Just copy it to our bulk-out buffer.
-
- Status = ((pHTTXContext->bCurWriting == TRUE) ? NDIS_STATUS_SUCCESS : NDIS_STATUS_FAILURE);
- if (Status == NDIS_STATUS_SUCCESS)
- {
- fillOffset = (pHTTXContext->CurWritePosition + pTxBlk->Priv);
- pWirelessPacket = &pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset];
-
- //hwHdrLen = pTxBlk->MpduHeaderLen;
- NdisMoveMemory(pWirelessPacket, pTxBlk->HeaderBuf, pTxBlk->MpduHeaderLen);
- pWirelessPacket += (pTxBlk->MpduHeaderLen);
- pTxBlk->Priv += pTxBlk->MpduHeaderLen;
- }
- else
- { // It should not happened now unless we are going to shutdown.
- DBGPRINT(RT_DEBUG_ERROR, ("WriteMultiTxResource():bCurWriting is FALSE when handle sub-sequent frames.\n"));
- Status = NDIS_STATUS_FAILURE;
- }
- }
-
-
- // We unlock it here to prevent the first 8 bytes maybe over-write issue.
- // 1. First we got CurWritePosition but the first 8 bytes still not write to the pTxContext.
- // 2. An interrupt break our routine and handle bulk-out complete.
- // 3. In the bulk-out compllete, it need to do another bulk-out,
- // if the ENextBulkOutPosition is just the same as CurWritePosition, it will save the first 8 bytes from CurWritePosition,
- // but the payload still not copyed. the pTxContext->SavedPad[] will save as allzero. and set the bCopyPad = TRUE.
- // 4. Interrupt complete.
- // 5. Our interrupted routine go back and fill the first 8 bytes to pTxContext.
- // 6. Next time when do bulk-out, it found the bCopyPad==TRUE and will copy the SavedPad[] to pTxContext->NextBulkOutPosition.
- // and the packet will wrong.
- RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags);
-
- if (Status != NDIS_STATUS_SUCCESS)
- {
- DBGPRINT(RT_DEBUG_ERROR,("WriteMultiTxResource: CWPos = %ld, NBOutPos = %ld.\n", pHTTXContext->CurWritePosition, pHTTXContext->NextBulkOutPosition));
- goto done;
- }
-
- // Copy the frame content into DMA buffer and update the pTxBlk->Priv
- NdisMoveMemory(pWirelessPacket, pTxBlk->pSrcBufData, pTxBlk->SrcBufLen);
- pWirelessPacket += pTxBlk->SrcBufLen;
- pTxBlk->Priv += pTxBlk->SrcBufLen;
-
-done:
- // Release the skb buffer here
- RELEASE_NDIS_PACKET(pAd, pTxBlk->pPacket, NDIS_STATUS_SUCCESS);
-
- return(Status);
-
-}
-
-
-VOID RtmpUSB_FinalWriteTxResource(
- IN PRTMP_ADAPTER pAd,
- IN TX_BLK *pTxBlk,
- IN USHORT totalMPDUSize,
- IN USHORT TxIdx)
-{
- UCHAR QueIdx;
- HT_TX_CONTEXT *pHTTXContext;
- UINT32 fillOffset;
- TXINFO_STRUC *pTxInfo;
- TXWI_STRUC *pTxWI;
- UINT32 USBDMApktLen, padding;
- unsigned long IrqFlags;
- PUCHAR pWirelessPacket;
-
- QueIdx = pTxBlk->QueIdx;
- pHTTXContext = &pAd->TxContext[QueIdx];
-
- RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags);
-
- if (pHTTXContext->bCurWriting == TRUE)
- {
- fillOffset = pHTTXContext->CurWritePosition;
- if (((pHTTXContext->ENextBulkOutPosition == pHTTXContext->CurWritePosition) || ((pHTTXContext->ENextBulkOutPosition-8) == pHTTXContext->CurWritePosition))
- && (pHTTXContext->bCopySavePad == TRUE))
- pWirelessPacket = (PUCHAR)(&pHTTXContext->SavedPad[0]);
- else
- pWirelessPacket = (PUCHAR)(&pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset]);
-
- //
- // Update TxInfo->USBDMApktLen ,
- // the length = TXWI_SIZE + 802.11_hdr + 802.11_hdr_pad + payload_of_all_batch_frames + Bulk-Out-padding
- //
- pTxInfo = (PTXINFO_STRUC)(pWirelessPacket);
-
- // Calculate the bulk-out padding
- USBDMApktLen = pTxBlk->Priv - TXINFO_SIZE;
- padding = (4 - (USBDMApktLen % 4)) & 0x03; // round up to 4 byte alignment
- USBDMApktLen += padding;
-
- pTxInfo->USBDMATxPktLen = USBDMApktLen;
-
- //
- // Update TXWI->MPDUtotalByteCount ,
- // the length = 802.11 header + payload_of_all_batch_frames
- pTxWI= (PTXWI_STRUC)(pWirelessPacket + TXINFO_SIZE);
- pTxWI->MPDUtotalByteCount = totalMPDUSize;
-
- //
- // Update the pHTTXContext->CurWritePosition
- //
- pHTTXContext->CurWritePosition += (TXINFO_SIZE + USBDMApktLen);
- if ((pHTTXContext->CurWritePosition + 3906)> MAX_TXBULK_LIMIT)
- { // Add 3906 for prevent the NextBulkOut packet size is a A-RALINK/A-MSDU Frame.
- pHTTXContext->CurWritePosition = 8;
- pTxInfo->SwUseLastRound = 1;
- }
- pHTTXContext->CurWriteRealPos = pHTTXContext->CurWritePosition;
-
-
- //
- // Zero the last padding.
- //
- pWirelessPacket = (&pHTTXContext->TransferBuffer->field.WirelessPacket[fillOffset + pTxBlk->Priv]);
- NdisZeroMemory(pWirelessPacket, padding + 8);
-
- // Finally, set bCurWriting as FALSE
- pHTTXContext->bCurWriting = FALSE;
-
- }
- else
- { // It should not happened now unless we are going to shutdown.
- DBGPRINT(RT_DEBUG_ERROR, ("FinalWriteTxResource():bCurWriting is FALSE when handle last frames.\n"));
- }
-
- RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags);
-
-}
-
-
-VOID RtmpUSBDataLastTxIdx(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR QueIdx,
- IN USHORT TxIdx)
-{
- // DO nothing for USB.
-}
-
-
-/*
- When can do bulk-out:
- 1. TxSwFreeIdx < TX_RING_SIZE;
- It means has at least one Ring entity is ready for bulk-out, kick it out.
- 2. If TxSwFreeIdx == TX_RING_SIZE
- Check if the CurWriting flag is FALSE, if it's FALSE, we can do kick out.
-
-*/
-VOID RtmpUSBDataKickOut(
- IN PRTMP_ADAPTER pAd,
- IN TX_BLK *pTxBlk,
- IN UCHAR QueIdx)
-{
- RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << QueIdx));
- RTUSBKickBulkOut(pAd);
-
-}
-
-
-/*
- Must be run in Interrupt context
- This function handle RT2870 specific TxDesc and cpu index update and kick the packet out.
- */
-int RtmpUSBMgmtKickOut(
- IN RTMP_ADAPTER *pAd,
- IN UCHAR QueIdx,
- IN PNDIS_PACKET pPacket,
- IN PUCHAR pSrcBufVA,
- IN UINT SrcBufLen)
-{
- PTXINFO_STRUC pTxInfo;
- ULONG BulkOutSize;
- UCHAR padLen;
- PUCHAR pDest;
- ULONG SwIdx = pAd->MgmtRing.TxCpuIdx;
- PTX_CONTEXT pMLMEContext = (PTX_CONTEXT)pAd->MgmtRing.Cell[SwIdx].AllocVa;
- unsigned long IrqFlags;
-
-
- pTxInfo = (PTXINFO_STRUC)(pSrcBufVA);
-
- // Build our URB for USBD
- BulkOutSize = SrcBufLen;
- BulkOutSize = (BulkOutSize + 3) & (~3);
- RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(BulkOutSize - TXINFO_SIZE), TRUE, EpToQueue[MGMTPIPEIDX], FALSE, FALSE);
-
- BulkOutSize += 4; // Always add 4 extra bytes at every packet.
-
- // If BulkOutSize is multiple of BulkOutMaxPacketSize, add extra 4 bytes again.
- if ((BulkOutSize % pAd->BulkOutMaxPacketSize) == 0)
- BulkOutSize += 4;
-
- padLen = BulkOutSize - SrcBufLen;
- ASSERT((padLen <= RTMP_PKT_TAIL_PADDING));
-
- // Now memzero all extra padding bytes.
- pDest = (PUCHAR)(pSrcBufVA + SrcBufLen);
- skb_put(GET_OS_PKT_TYPE(pPacket), padLen);
- NdisZeroMemory(pDest, padLen);
-
- RTMP_IRQ_LOCK(&pAd->MLMEBulkOutLock, IrqFlags);
-
- pAd->MgmtRing.Cell[pAd->MgmtRing.TxCpuIdx].pNdisPacket = pPacket;
- pMLMEContext->TransferBuffer = (PTX_BUFFER)(GET_OS_PKT_DATAPTR(pPacket));
-
- // Length in TxInfo should be 8 less than bulkout size.
- pMLMEContext->BulkOutSize = BulkOutSize;
- pMLMEContext->InUse = TRUE;
- pMLMEContext->bWaitingBulkOut = TRUE;
-
-
- //for debug
- //hex_dump("RtmpUSBMgmtKickOut", &pMLMEContext->TransferBuffer->field.WirelessPacket[0], (pMLMEContext->BulkOutSize > 16 ? 16 : pMLMEContext->BulkOutSize));
-
- //pAd->RalinkCounters.KickTxCount++;
- //pAd->RalinkCounters.OneSecTxDoneCount++;
-
- //if (pAd->MgmtRing.TxSwFreeIdx == MGMT_RING_SIZE)
- // needKickOut = TRUE;
-
- // Decrease the TxSwFreeIdx and Increase the TX_CTX_IDX
- pAd->MgmtRing.TxSwFreeIdx--;
- INC_RING_INDEX(pAd->MgmtRing.TxCpuIdx, MGMT_RING_SIZE);
-
- RTMP_IRQ_UNLOCK(&pAd->MLMEBulkOutLock, IrqFlags);
-
- RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_MLME);
- //if (needKickOut)
- RTUSBKickBulkOut(pAd);
-
- return 0;
-}
-
-
-VOID RtmpUSBNullFrameKickOut(
- IN RTMP_ADAPTER *pAd,
- IN UCHAR QueIdx,
- IN UCHAR *pNullFrame,
- IN UINT32 frameLen)
-{
- if (pAd->NullContext.InUse == FALSE)
- {
- PTX_CONTEXT pNullContext;
- PTXINFO_STRUC pTxInfo;
- PTXWI_STRUC pTxWI;
- PUCHAR pWirelessPkt;
-
- pNullContext = &(pAd->NullContext);
-
- // Set the in use bit
- pNullContext->InUse = TRUE;
- pWirelessPkt = (PUCHAR)&pNullContext->TransferBuffer->field.WirelessPacket[0];
-
- RTMPZeroMemory(&pWirelessPkt[0], 100);
- pTxInfo = (PTXINFO_STRUC)&pWirelessPkt[0];
- RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(sizeof(HEADER_802_11)+TXWI_SIZE), TRUE, EpToQueue[MGMTPIPEIDX], FALSE, FALSE);
- pTxInfo->QSEL = FIFO_EDCA;
- pTxWI = (PTXWI_STRUC)&pWirelessPkt[TXINFO_SIZE];
- RTMPWriteTxWI(pAd, pTxWI, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, 0, BSSID_WCID, (sizeof(HEADER_802_11)),
- 0, 0, (UCHAR)pAd->CommonCfg.MlmeTransmit.field.MCS, IFS_HTTXOP, FALSE, &pAd->CommonCfg.MlmeTransmit);
- RTMPMoveMemory(&pWirelessPkt[TXWI_SIZE+TXINFO_SIZE], &pAd->NullFrame, sizeof(HEADER_802_11));
- pAd->NullContext.BulkOutSize = TXINFO_SIZE + TXWI_SIZE + sizeof(pAd->NullFrame) + 4;
-
- // Fill out frame length information for global Bulk out arbitor
- //pNullContext->BulkOutSize = TransferBufferLength;
- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - send NULL Frame @%d Mbps...\n", RateIdToMbps[pAd->CommonCfg.TxRate]));
- RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NULL);
-
- // Kick bulk out
- RTUSBKickBulkOut(pAd);
- }
-
-}
-
-/*
- ========================================================================
-
- Routine Description:
- Check Rx descriptor, return NDIS_STATUS_FAILURE if any error dound
-
- Arguments:
- pRxD Pointer to the Rx descriptor
-
- Return Value:
- NDIS_STATUS_SUCCESS No err
- NDIS_STATUS_FAILURE Error
-
- Note:
-
- ========================================================================
-*/
-NDIS_STATUS RTMPCheckRxError(
- IN PRTMP_ADAPTER pAd,
- IN PHEADER_802_11 pHeader,
- IN PRXWI_STRUC pRxWI,
- IN PRT28XX_RXD_STRUC pRxINFO)
-{
- PCIPHER_KEY pWpaKey;
- INT dBm;
-
- if (pAd->bPromiscuous == TRUE)
- return(NDIS_STATUS_SUCCESS);
- if(pRxINFO == NULL)
- return(NDIS_STATUS_FAILURE);
-
- // Phy errors & CRC errors
- if (pRxINFO->Crc)
- {
- // Check RSSI for Noise Hist statistic collection.
- dBm = (INT) (pRxWI->RSSI0) - pAd->BbpRssiToDbmDelta;
- if (dBm <= -87)
- pAd->StaCfg.RPIDensity[0] += 1;
- else if (dBm <= -82)
- pAd->StaCfg.RPIDensity[1] += 1;
- else if (dBm <= -77)
- pAd->StaCfg.RPIDensity[2] += 1;
- else if (dBm <= -72)
- pAd->StaCfg.RPIDensity[3] += 1;
- else if (dBm <= -67)
- pAd->StaCfg.RPIDensity[4] += 1;
- else if (dBm <= -62)
- pAd->StaCfg.RPIDensity[5] += 1;
- else if (dBm <= -57)
- pAd->StaCfg.RPIDensity[6] += 1;
- else if (dBm > -57)
- pAd->StaCfg.RPIDensity[7] += 1;
-
- return(NDIS_STATUS_FAILURE);
- }
-
- // Add Rx size to channel load counter, we should ignore error counts
- pAd->StaCfg.CLBusyBytes += (pRxWI->MPDUtotalByteCount+ 14);
-
- // Drop ToDs promiscous frame, it is opened due to CCX 2 channel load statistics
- if (pHeader->FC.ToDs)
- {
- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Err;FC.ToDs\n"));
- return NDIS_STATUS_FAILURE;
- }
-
- // Paul 04-03 for OFDM Rx length issue
- if (pRxWI->MPDUtotalByteCount > MAX_AGGREGATION_SIZE)
- {
- DBGPRINT_RAW(RT_DEBUG_ERROR, ("received packet too long\n"));
- return NDIS_STATUS_FAILURE;
- }
-
- // Drop not U2M frames, cant's drop here because we will drop beacon in this case
- // I am kind of doubting the U2M bit operation
- // if (pRxD->U2M == 0)
- // return(NDIS_STATUS_FAILURE);
-
- // drop decyption fail frame
- if (pRxINFO->Decrypted && pRxINFO->CipherErr)
- {
-
- //
- // MIC Error
- //
- if ((pRxINFO->CipherErr == 2) && pRxINFO->MyBss)
- {
- pWpaKey = &pAd->SharedKey[BSS0][pRxWI->KeyIndex];
- RTMPReportMicError(pAd, pWpaKey);
- DBGPRINT_RAW(RT_DEBUG_ERROR,("Rx MIC Value error\n"));
- }
-
- if (pRxINFO->Decrypted &&
- (pAd->SharedKey[BSS0][pRxWI->KeyIndex].CipherAlg == CIPHER_AES) &&
- (pHeader->Sequence == pAd->FragFrame.Sequence))
- {
- //
- // Acceptable since the First FragFrame no CipherErr problem.
- //
- return(NDIS_STATUS_SUCCESS);
- }
-
- return(NDIS_STATUS_FAILURE);
- }
-
- return(NDIS_STATUS_SUCCESS);
-}
-
-VOID RT28xxUsbStaAsicForceWakeup(
- IN PRTMP_ADAPTER pAd,
- IN BOOLEAN bFromTx)
-{
- AUTO_WAKEUP_STRUC AutoWakeupCfg;
-
- AutoWakeupCfg.word = 0;
- RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word);
-
- AsicSendCommandToMcu(pAd, 0x31, 0xff, 0x00, 0x02);
-
- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE);
-}
-
-VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
- IN PRTMP_ADAPTER pAd,
- IN USHORT TbttNumToNextWakeUp)
-{
- AUTO_WAKEUP_STRUC AutoWakeupCfg;
-
- // we have decided to SLEEP, so at least do it for a BEACON period.
- if (TbttNumToNextWakeUp == 0)
- TbttNumToNextWakeUp = 1;
-
- AutoWakeupCfg.word = 0;
- RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word);
-
- AutoWakeupCfg.field.NumofSleepingTbtt = TbttNumToNextWakeUp - 1;
- AutoWakeupCfg.field.EnableAutoWakeup = 1;
- AutoWakeupCfg.field.AutoLeadTime = 5;
- RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word);
-
- AsicSendCommandToMcu(pAd, 0x30, 0xff, 0xff, 0x02); // send POWER-SAVE command to MCU. Timeout 40us.
-
- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_DOZE);
-
-}
-
-VOID RT28xxUsbMlmeRadioOn(
- IN PRTMP_ADAPTER pAd)
-{
- DBGPRINT(RT_DEBUG_TRACE,("RT28xxUsbMlmeRadioOn()\n"));
-
- if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF))
- return;
-
- AsicSendCommandToMcu(pAd, 0x31, 0xff, 0x00, 0x02);
- RTMPusecDelay(10000);
-
- NICResetFromError(pAd);
-
- // Enable Tx/Rx
- RTMPEnableRxTx(pAd);
-
-#ifdef RT3070
- if (IS_RT3071(pAd))
- {
- RT30xxReverseRFSleepModeSetup(pAd);
- }
-#endif // RT3070 //
-
- // Clear Radio off flag
- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF);
-
- RTUSBBulkReceive(pAd);
-
- // Set LED
- RTMPSetLED(pAd, LED_RADIO_ON);
-}
-
-VOID RT28xxUsbMlmeRadioOFF(
- IN PRTMP_ADAPTER pAd)
-{
- WPDMA_GLO_CFG_STRUC GloCfg;
- UINT32 Value, i;
-
- DBGPRINT(RT_DEBUG_TRACE,("RT28xxUsbMlmeRadioOFF()\n"));
-
- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF))
- return;
-
- // Set LED
- RTMPSetLED(pAd, LED_RADIO_OFF);
- // Set Radio off flag
- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF);
-
- {
- // Link down first if any association exists
- if (INFRA_ON(pAd) || ADHOC_ON(pAd))
- LinkDown(pAd, FALSE);
- RTMPusecDelay(10000);
-
- //==========================================
- // Clean up old bss table
- BssTableInit(&pAd->ScanTab);
- }
-
- if (pAd->CommonCfg.BBPCurrentBW == BW_40)
- {
- // Must using 40MHz.
- AsicTurnOffRFClk(pAd, pAd->CommonCfg.CentralChannel);
- }
- else
- {
- // Must using 20MHz.
- AsicTurnOffRFClk(pAd, pAd->CommonCfg.Channel);
- }
-
- // Disable Tx/Rx DMA
- RTUSBReadMACRegister(pAd, WPDMA_GLO_CFG, &GloCfg.word); // disable DMA
- GloCfg.field.EnableTxDMA = 0;
- GloCfg.field.EnableRxDMA = 0;
- RTUSBWriteMACRegister(pAd, WPDMA_GLO_CFG, GloCfg.word); // abort all TX rings
-
- // Waiting for DMA idle
- i = 0;
- do
- {
- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word);
- if ((GloCfg.field.TxDMABusy == 0) && (GloCfg.field.RxDMABusy == 0))
- break;
-
- RTMPusecDelay(1000);
- }while (i++ < 100);
-
- // Disable MAC Tx/Rx
- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);
- Value &= (0xfffffff3);
- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);
-
- AsicSendCommandToMcu(pAd, 0x30, 0xff, 0xff, 0x02);
-}
-
diff --git a/drivers/staging/rt2870/common/cmm_data_usb.c b/drivers/staging/rt2870/common/cmm_data_usb.c
new file mode 100644
index 000000000000..704675fccb7d
--- /dev/null
+++ b/drivers/staging/rt2870/common/cmm_data_usb.c
@@ -0,0 +1 @@
+#include "../../rt2860/common/cmm_data_usb.c"
diff --git a/drivers/staging/rt2870/common/cmm_mac_usb.c b/drivers/staging/rt2870/common/cmm_mac_usb.c
new file mode 100644
index 000000000000..b26af4af890b
--- /dev/null
+++ b/drivers/staging/rt2870/common/cmm_mac_usb.c
@@ -0,0 +1 @@
+#include "../../rt2860/common/cmm_mac_usb.c"
diff --git a/drivers/staging/rt2870/common/cmm_profile.c b/drivers/staging/rt2870/common/cmm_profile.c
new file mode 100644
index 000000000000..9926e45aba3c
--- /dev/null
+++ b/drivers/staging/rt2870/common/cmm_profile.c
@@ -0,0 +1 @@
+#include "../../rt2860/common/cmm_profile.c"
diff --git a/drivers/staging/rt2870/common/cmm_tkip.c b/drivers/staging/rt2870/common/cmm_tkip.c
new file mode 100644
index 000000000000..f73c71bafe86
--- /dev/null
+++ b/drivers/staging/rt2870/common/cmm_tkip.c
@@ -0,0 +1 @@
+#include "../../rt2860/common/cmm_tkip.c"
diff --git a/drivers/staging/rt2870/common/cmm_wep.c b/drivers/staging/rt2870/common/cmm_wep.c
new file mode 100644
index 000000000000..5f681078387f
--- /dev/null
+++ b/drivers/staging/rt2870/common/cmm_wep.c
@@ -0,0 +1 @@
+#include "../../rt2860/common/cmm_wep.c"
diff --git a/drivers/staging/rt2870/common/crypt_hmac.c b/drivers/staging/rt2870/common/crypt_hmac.c
new file mode 100644
index 000000000000..24d84e7724fb
--- /dev/null
+++ b/drivers/staging/rt2870/common/crypt_hmac.c
@@ -0,0 +1 @@
+#include "../../rt2860/common/crypt_hmac.c"
diff --git a/drivers/staging/rt2870/common/crypt_md5.c b/drivers/staging/rt2870/common/crypt_md5.c
new file mode 100644
index 000000000000..457a2caca1e3
--- /dev/null
+++ b/drivers/staging/rt2870/common/crypt_md5.c
@@ -0,0 +1 @@
+#include "../../rt2860/common/crypt_md5.c"
diff --git a/drivers/staging/rt2870/common/crypt_sha2.c b/drivers/staging/rt2870/common/crypt_sha2.c
new file mode 100644
index 000000000000..07ffb300c193
--- /dev/null
+++ b/drivers/staging/rt2870/common/crypt_sha2.c
@@ -0,0 +1 @@
+#include "../../rt2860/common/crypt_sha2.c"
diff --git a/drivers/staging/rt2870/common/ee_efuse.c b/drivers/staging/rt2870/common/ee_efuse.c
new file mode 100644
index 000000000000..0e34e65e5f28
--- /dev/null
+++ b/drivers/staging/rt2870/common/ee_efuse.c
@@ -0,0 +1 @@
+#include "../../rt2860/common/ee_efuse.c"
diff --git a/drivers/staging/rt2870/common/rt_channel.c b/drivers/staging/rt2870/common/rt_channel.c
new file mode 100644
index 000000000000..c8ceb4c177d9
--- /dev/null
+++ b/drivers/staging/rt2870/common/rt_channel.c
@@ -0,0 +1 @@
+#include "../../rt2860/common/rt_channel.c"
diff --git a/drivers/staging/rt2870/common/rt_rf.c b/drivers/staging/rt2870/common/rt_rf.c
new file mode 100644
index 000000000000..b81cff34969b
--- /dev/null
+++ b/drivers/staging/rt2870/common/rt_rf.c
@@ -0,0 +1 @@
+#include "../../rt2860/common/rt_rf.c"
diff --git a/drivers/staging/rt2870/common/rtmp_mcu.c b/drivers/staging/rt2870/common/rtmp_mcu.c
new file mode 100644
index 000000000000..20b7f13d60f8
--- /dev/null
+++ b/drivers/staging/rt2870/common/rtmp_mcu.c
@@ -0,0 +1 @@
+#include "../../rt2860/common/rtmp_mcu.c"
diff --git a/drivers/staging/rt2870/common/rtmp_timer.c b/drivers/staging/rt2870/common/rtmp_timer.c
new file mode 100644
index 000000000000..fd4aedcd5e8b
--- /dev/null
+++ b/drivers/staging/rt2870/common/rtmp_timer.c
@@ -0,0 +1 @@
+#include "../../rt2860/common/rtmp_timer.c"
diff --git a/drivers/staging/rt2870/common/rtusb_bulk.c b/drivers/staging/rt2870/common/rtusb_bulk.c
index a4244b516440..379780c72b3c 100644
--- a/drivers/staging/rt2870/common/rtusb_bulk.c
+++ b/drivers/staging/rt2870/common/rtusb_bulk.c
@@ -1,4 +1,4 @@
- /*
+/*
*************************************************************************
* Ralink Tech Inc.
* 5F., No.36, Taiyuan St., Jhubei City,
@@ -37,133 +37,124 @@
*/
+#ifdef RTMP_MAC_USB
+
#include "../rt_config.h"
-// Match total 6 bulkout endpoint to corresponding queue.
-UCHAR EpToQueue[6]={FIFO_EDCA, FIFO_EDCA, FIFO_EDCA, FIFO_EDCA, FIFO_EDCA, FIFO_MGMT};
-
-//static BOOLEAN SingleBulkOut = FALSE;
-
-void RTUSB_FILL_BULK_URB (struct urb *pUrb,
- struct usb_device *pUsb_Dev,
- unsigned int bulkpipe,
- void *pTransferBuf,
- int BufSize,
- usb_complete_t Complete,
- void *pContext)
+/* Match total 6 bulkout endpoint to corresponding queue. */
+u8 EpToQueue[6] =
+ { FIFO_EDCA, FIFO_EDCA, FIFO_EDCA, FIFO_EDCA, FIFO_EDCA, FIFO_MGMT };
+
+/*static BOOLEAN SingleBulkOut = FALSE; */
+
+void RTUSB_FILL_BULK_URB(struct urb *pUrb,
+ struct usb_device *pUsb_Dev,
+ unsigned int bulkpipe,
+ void *pTransferBuf,
+ int BufSize, usb_complete_t Complete, void *pContext)
{
- usb_fill_bulk_urb(pUrb, pUsb_Dev, bulkpipe, pTransferBuf, BufSize, (usb_complete_t)Complete, pContext);
+ usb_fill_bulk_urb(pUrb, pUsb_Dev, bulkpipe, pTransferBuf, BufSize,
+ (usb_complete_t) Complete, pContext);
}
-VOID RTUSBInitTxDesc(
- IN PRTMP_ADAPTER pAd,
- IN PTX_CONTEXT pTxContext,
- IN UCHAR BulkOutPipeId,
- IN usb_complete_t Func)
+void RTUSBInitTxDesc(struct rt_rtmp_adapter *pAd,
+ struct rt_tx_context *pTxContext,
+ u8 BulkOutPipeId, IN usb_complete_t Func)
{
- PURB pUrb;
- PUCHAR pSrc = NULL;
- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie;
+ PURB pUrb;
+ u8 *pSrc = NULL;
+ struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie;
pUrb = pTxContext->pUrb;
ASSERT(pUrb);
- // Store BulkOut PipeId
+ /* Store BulkOut PipeId */
pTxContext->BulkOutPipeId = BulkOutPipeId;
- if (pTxContext->bAggregatible)
- {
+ if (pTxContext->bAggregatible) {
pSrc = &pTxContext->TransferBuffer->Aggregation[2];
- }
- else
- {
- pSrc = (PUCHAR) pTxContext->TransferBuffer->field.WirelessPacket;
+ } else {
+ pSrc =
+ (u8 *)pTxContext->TransferBuffer->field.WirelessPacket;
}
-
- //Initialize a tx bulk urb
+ /*Initialize a tx bulk urb */
RTUSB_FILL_BULK_URB(pUrb,
- pObj->pUsb_Dev,
- usb_sndbulkpipe(pObj->pUsb_Dev, pAd->BulkOutEpAddr[BulkOutPipeId]),
- pSrc,
- pTxContext->BulkOutSize,
- Func,
- pTxContext);
+ pObj->pUsb_Dev,
+ usb_sndbulkpipe(pObj->pUsb_Dev,
+ pAd->BulkOutEpAddr[BulkOutPipeId]),
+ pSrc, pTxContext->BulkOutSize, Func, pTxContext);
if (pTxContext->bAggregatible)
- pUrb->transfer_dma = (pTxContext->data_dma + TX_BUFFER_NORMSIZE + 2);
+ pUrb->transfer_dma =
+ (pTxContext->data_dma + TX_BUFFER_NORMSIZE + 2);
else
- pUrb->transfer_dma = pTxContext->data_dma;
+ pUrb->transfer_dma = pTxContext->data_dma;
pUrb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
}
-VOID RTUSBInitHTTxDesc(
- IN PRTMP_ADAPTER pAd,
- IN PHT_TX_CONTEXT pTxContext,
- IN UCHAR BulkOutPipeId,
- IN ULONG BulkOutSize,
- IN usb_complete_t Func)
+void RTUSBInitHTTxDesc(struct rt_rtmp_adapter *pAd,
+ struct rt_ht_tx_context *pTxContext,
+ u8 BulkOutPipeId,
+ unsigned long BulkOutSize, IN usb_complete_t Func)
{
- PURB pUrb;
- PUCHAR pSrc = NULL;
- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie;
+ PURB pUrb;
+ u8 *pSrc = NULL;
+ struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie;
pUrb = pTxContext->pUrb;
ASSERT(pUrb);
- // Store BulkOut PipeId
+ /* Store BulkOut PipeId */
pTxContext->BulkOutPipeId = BulkOutPipeId;
- pSrc = &pTxContext->TransferBuffer->field.WirelessPacket[pTxContext->NextBulkOutPosition];
-
+ pSrc =
+ &pTxContext->TransferBuffer->field.WirelessPacket[pTxContext->
+ NextBulkOutPosition];
- //Initialize a tx bulk urb
+ /*Initialize a tx bulk urb */
RTUSB_FILL_BULK_URB(pUrb,
- pObj->pUsb_Dev,
- usb_sndbulkpipe(pObj->pUsb_Dev, pAd->BulkOutEpAddr[BulkOutPipeId]),
- pSrc,
- BulkOutSize,
- Func,
- pTxContext);
-
- pUrb->transfer_dma = (pTxContext->data_dma + pTxContext->NextBulkOutPosition);
+ pObj->pUsb_Dev,
+ usb_sndbulkpipe(pObj->pUsb_Dev,
+ pAd->BulkOutEpAddr[BulkOutPipeId]),
+ pSrc, BulkOutSize, Func, pTxContext);
+
+ pUrb->transfer_dma =
+ (pTxContext->data_dma + pTxContext->NextBulkOutPosition);
pUrb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
}
-VOID RTUSBInitRxDesc(
- IN PRTMP_ADAPTER pAd,
- IN PRX_CONTEXT pRxContext)
+void RTUSBInitRxDesc(struct rt_rtmp_adapter *pAd, struct rt_rx_context *pRxContext)
{
- PURB pUrb;
- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie;
- ULONG RX_bulk_size;
-
+ PURB pUrb;
+ struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie;
+ unsigned long RX_bulk_size;
pUrb = pRxContext->pUrb;
ASSERT(pUrb);
- if ( pAd->BulkInMaxPacketSize == 64)
+ if (pAd->BulkInMaxPacketSize == 64)
RX_bulk_size = 4096;
else
RX_bulk_size = MAX_RXBULK_SIZE;
- //Initialize a rx bulk urb
+ /*Initialize a rx bulk urb */
RTUSB_FILL_BULK_URB(pUrb,
- pObj->pUsb_Dev,
- usb_rcvbulkpipe(pObj->pUsb_Dev, pAd->BulkInEpAddr),
- &(pRxContext->TransferBuffer[pAd->NextRxBulkInPosition]),
- RX_bulk_size - (pAd->NextRxBulkInPosition),
- (usb_complete_t)RTUSBBulkRxComplete,
- (void *)pRxContext);
-
- pUrb->transfer_dma = pRxContext->data_dma + pAd->NextRxBulkInPosition;
+ pObj->pUsb_Dev,
+ usb_rcvbulkpipe(pObj->pUsb_Dev, pAd->BulkInEpAddr),
+ &(pRxContext->
+ TransferBuffer[pAd->NextRxBulkInPosition]),
+ RX_bulk_size - (pAd->NextRxBulkInPosition),
+ (usb_complete_t) RTUSBBulkRxComplete,
+ (void *)pRxContext);
+
+ pUrb->transfer_dma = pRxContext->data_dma + pAd->NextRxBulkInPosition;
pUrb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
-
}
/*
@@ -188,177 +179,215 @@ VOID RTUSBInitRxDesc(
if(1 /*!(in_interrupt() & 0xffff0000)*/) \
RTMP_IRQ_UNLOCK((pLock), IrqFlags);
-
-VOID RTUSBBulkOutDataPacket(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR BulkOutPipeId,
- IN UCHAR Index)
+void RTUSBBulkOutDataPacket(struct rt_rtmp_adapter *pAd,
+ u8 BulkOutPipeId, u8 Index)
{
- PHT_TX_CONTEXT pHTTXContext;
- PURB pUrb;
- int ret = 0;
- PTXINFO_STRUC pTxInfo, pLastTxInfo = NULL;
- PTXWI_STRUC pTxWI;
- ULONG TmpBulkEndPos, ThisBulkSize;
- unsigned long IrqFlags = 0, IrqFlags2 = 0;
- PUCHAR pWirelessPkt, pAppendant;
- BOOLEAN bTxQLastRound = FALSE;
- UCHAR allzero[4]= {0x0,0x0,0x0,0x0};
+ struct rt_ht_tx_context *pHTTXContext;
+ PURB pUrb;
+ int ret = 0;
+ struct rt_txinfo *pTxInfo, *pLastTxInfo = NULL;
+ struct rt_txwi * pTxWI;
+ unsigned long TmpBulkEndPos, ThisBulkSize;
+ unsigned long IrqFlags = 0, IrqFlags2 = 0;
+ u8 *pWirelessPkt, *pAppendant;
+ BOOLEAN bTxQLastRound = FALSE;
+ u8 allzero[4] = { 0x0, 0x0, 0x0, 0x0 };
BULK_OUT_LOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags);
- if ((pAd->BulkOutPending[BulkOutPipeId] == TRUE) || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NEED_STOP_TX))
- {
+ if ((pAd->BulkOutPending[BulkOutPipeId] == TRUE)
+ || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NEED_STOP_TX)) {
BULK_OUT_UNLOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags);
return;
}
pAd->BulkOutPending[BulkOutPipeId] = TRUE;
if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)
- )
- {
+ ) {
pAd->BulkOutPending[BulkOutPipeId] = FALSE;
BULK_OUT_UNLOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags);
return;
}
BULK_OUT_UNLOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags);
-
pHTTXContext = &(pAd->TxContext[BulkOutPipeId]);
BULK_OUT_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags2);
- if ((pHTTXContext->ENextBulkOutPosition == pHTTXContext->CurWritePosition)
- || ((pHTTXContext->ENextBulkOutPosition-8) == pHTTXContext->CurWritePosition))
- {
- BULK_OUT_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags2);
+ if ((pHTTXContext->ENextBulkOutPosition ==
+ pHTTXContext->CurWritePosition)
+ || ((pHTTXContext->ENextBulkOutPosition - 8) ==
+ pHTTXContext->CurWritePosition)) {
+ BULK_OUT_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId],
+ IrqFlags2);
BULK_OUT_LOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags);
pAd->BulkOutPending[BulkOutPipeId] = FALSE;
- // Clear Data flag
- RTUSB_CLEAR_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_FRAG << BulkOutPipeId));
- RTUSB_CLEAR_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << BulkOutPipeId));
+ /* Clear Data flag */
+ RTUSB_CLEAR_BULK_FLAG(pAd,
+ (fRTUSB_BULK_OUT_DATA_FRAG <<
+ BulkOutPipeId));
+ RTUSB_CLEAR_BULK_FLAG(pAd,
+ (fRTUSB_BULK_OUT_DATA_NORMAL <<
+ BulkOutPipeId));
BULK_OUT_UNLOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags);
return;
}
-
- // Clear Data flag
- RTUSB_CLEAR_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_FRAG << BulkOutPipeId));
- RTUSB_CLEAR_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << BulkOutPipeId));
-
- //DBGPRINT(RT_DEBUG_TRACE,("BulkOut-B:I=0x%lx, CWPos=%ld, CWRPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d!\n", in_interrupt(),
- // pHTTXContext->CurWritePosition, pHTTXContext->CurWriteRealPos, pHTTXContext->NextBulkOutPosition,
- // pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad));
+ /* Clear Data flag */
+ RTUSB_CLEAR_BULK_FLAG(pAd,
+ (fRTUSB_BULK_OUT_DATA_FRAG << BulkOutPipeId));
+ RTUSB_CLEAR_BULK_FLAG(pAd,
+ (fRTUSB_BULK_OUT_DATA_NORMAL << BulkOutPipeId));
+
+ /*DBGPRINT(RT_DEBUG_TRACE,("BulkOut-B:I=0x%lx, CWPos=%ld, CWRPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d!\n", in_interrupt(), */
+ /* pHTTXContext->CurWritePosition, pHTTXContext->CurWriteRealPos, pHTTXContext->NextBulkOutPosition, */
+ /* pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad)); */
pHTTXContext->NextBulkOutPosition = pHTTXContext->ENextBulkOutPosition;
ThisBulkSize = 0;
TmpBulkEndPos = pHTTXContext->NextBulkOutPosition;
pWirelessPkt = &pHTTXContext->TransferBuffer->field.WirelessPacket[0];
- if ((pHTTXContext->bCopySavePad == TRUE))
- {
- if (RTMPEqualMemory(pHTTXContext->SavedPad, allzero,4))
- {
- DBGPRINT_RAW(RT_DEBUG_ERROR,("e1, allzero : %x %x %x %x %x %x %x %x \n",
- pHTTXContext->SavedPad[0], pHTTXContext->SavedPad[1], pHTTXContext->SavedPad[2],pHTTXContext->SavedPad[3]
- ,pHTTXContext->SavedPad[4], pHTTXContext->SavedPad[5], pHTTXContext->SavedPad[6],pHTTXContext->SavedPad[7]));
+ if ((pHTTXContext->bCopySavePad == TRUE)) {
+ if (RTMPEqualMemory(pHTTXContext->SavedPad, allzero, 4)) {
+ DBGPRINT_RAW(RT_DEBUG_ERROR,
+ ("e1, allzero : %x %x %x %x %x %x %x %x \n",
+ pHTTXContext->SavedPad[0],
+ pHTTXContext->SavedPad[1],
+ pHTTXContext->SavedPad[2],
+ pHTTXContext->SavedPad[3]
+ , pHTTXContext->SavedPad[4],
+ pHTTXContext->SavedPad[5],
+ pHTTXContext->SavedPad[6],
+ pHTTXContext->SavedPad[7]));
}
- NdisMoveMemory(&pWirelessPkt[TmpBulkEndPos], pHTTXContext->SavedPad, 8);
+ NdisMoveMemory(&pWirelessPkt[TmpBulkEndPos],
+ pHTTXContext->SavedPad, 8);
pHTTXContext->bCopySavePad = FALSE;
if (pAd->bForcePrintTX == TRUE)
- DBGPRINT(RT_DEBUG_TRACE,("RTUSBBulkOutDataPacket --> COPY PAD. CurWrite = %ld, NextBulk = %ld. ENextBulk = %ld.\n", pHTTXContext->CurWritePosition, pHTTXContext->NextBulkOutPosition, pHTTXContext->ENextBulkOutPosition));
+ DBGPRINT(RT_DEBUG_TRACE,
+ ("RTUSBBulkOutDataPacket --> COPY PAD. CurWrite = %ld, NextBulk = %ld. ENextBulk = %ld.\n",
+ pHTTXContext->CurWritePosition,
+ pHTTXContext->NextBulkOutPosition,
+ pHTTXContext->ENextBulkOutPosition));
}
- do
- {
- pTxInfo = (PTXINFO_STRUC)&pWirelessPkt[TmpBulkEndPos];
- pTxWI = (PTXWI_STRUC)&pWirelessPkt[TmpBulkEndPos + TXINFO_SIZE];
+ do {
+ pTxInfo = (struct rt_txinfo *)& pWirelessPkt[TmpBulkEndPos];
+ pTxWI =
+ (struct rt_txwi *) & pWirelessPkt[TmpBulkEndPos + TXINFO_SIZE];
if (pAd->bForcePrintTX == TRUE)
- DBGPRINT(RT_DEBUG_TRACE, ("RTUSBBulkOutDataPacket AMPDU = %d.\n", pTxWI->AMPDU));
-
- // add by Iverson, limit BulkOut size to 4k to pass WMM b mode 2T1R test items
- //if ((ThisBulkSize != 0) && (pTxWI->AMPDU == 0))
- if ((ThisBulkSize != 0) && (pTxWI->PHYMODE == MODE_CCK))
- {
- if (((ThisBulkSize&0xffff8000) != 0) || ((ThisBulkSize&0x1000) == 0x1000))
- {
- // Limit BulkOut size to about 4k bytes.
- pHTTXContext->ENextBulkOutPosition = TmpBulkEndPos;
+ DBGPRINT(RT_DEBUG_TRACE,
+ ("RTUSBBulkOutDataPacket AMPDU = %d.\n",
+ pTxWI->AMPDU));
+
+ /* add by Iverson, limit BulkOut size to 4k to pass WMM b mode 2T1R test items */
+ /*if ((ThisBulkSize != 0) && (pTxWI->AMPDU == 0)) */
+ if ((ThisBulkSize != 0) && (pTxWI->PHYMODE == MODE_CCK)) {
+ if (((ThisBulkSize & 0xffff8000) != 0)
+ || ((ThisBulkSize & 0x1000) == 0x1000)) {
+ /* Limit BulkOut size to about 4k bytes. */
+ pHTTXContext->ENextBulkOutPosition =
+ TmpBulkEndPos;
break;
- }
- else if (((pAd->BulkOutMaxPacketSize < 512) && ((ThisBulkSize&0xfffff800) != 0) ) /*|| ( (ThisBulkSize != 0) && (pTxWI->AMPDU == 0))*/)
- {
- // For USB 1.1 or peer which didn't support AMPDU, limit the BulkOut size.
- // For performence in b/g mode, now just check for USB 1.1 and didn't care about the APMDU or not! 2008/06/04.
- pHTTXContext->ENextBulkOutPosition = TmpBulkEndPos;
+ } else
+ if (((pAd->BulkOutMaxPacketSize < 512)
+ && ((ThisBulkSize & 0xfffff800) !=
+ 0))
+ /*|| ( (ThisBulkSize != 0) && (pTxWI->AMPDU == 0)) */
+ ) {
+ /* For USB 1.1 or peer which didn't support AMPDU, limit the BulkOut size. */
+ /* For performence in b/g mode, now just check for USB 1.1 and didn't care about the APMDU or not! 2008/06/04. */
+ pHTTXContext->ENextBulkOutPosition =
+ TmpBulkEndPos;
break;
}
}
- // end Iverson
- else
- {
- if (((ThisBulkSize&0xffff8000) != 0) || ((ThisBulkSize&0x6000) == 0x6000))
- { // Limit BulkOut size to about 24k bytes.
- pHTTXContext->ENextBulkOutPosition = TmpBulkEndPos;
+ /* end Iverson */
+ else {
+ if (((ThisBulkSize & 0xffff8000) != 0) || ((ThisBulkSize & 0x6000) == 0x6000)) { /* Limit BulkOut size to about 24k bytes. */
+ pHTTXContext->ENextBulkOutPosition =
+ TmpBulkEndPos;
break;
- }
- else if (((pAd->BulkOutMaxPacketSize < 512) && ((ThisBulkSize&0xfffff800) != 0) ) /*|| ( (ThisBulkSize != 0) && (pTxWI->AMPDU == 0))*/)
- { // For USB 1.1 or peer which didn't support AMPDU, limit the BulkOut size.
- // For performence in b/g mode, now just check for USB 1.1 and didn't care about the APMDU or not! 2008/06/04.
- pHTTXContext->ENextBulkOutPosition = TmpBulkEndPos;
+ } else if (((pAd->BulkOutMaxPacketSize < 512) && ((ThisBulkSize & 0xfffff800) != 0)) /*|| ( (ThisBulkSize != 0) && (pTxWI->AMPDU == 0)) */ ) { /* For USB 1.1 or peer which didn't support AMPDU, limit the BulkOut size. */
+ /* For performence in b/g mode, now just check for USB 1.1 and didn't care about the APMDU or not! 2008/06/04. */
+ pHTTXContext->ENextBulkOutPosition =
+ TmpBulkEndPos;
break;
}
}
- if (TmpBulkEndPos == pHTTXContext->CurWritePosition)
- {
+ if (TmpBulkEndPos == pHTTXContext->CurWritePosition) {
pHTTXContext->ENextBulkOutPosition = TmpBulkEndPos;
break;
}
- //PS packets use HCCA queue when dequeue from PS unicast queue (WiFi WPA2 MA9_DT1 for Marvell B STA)
- if (pTxInfo->QSEL != FIFO_EDCA)
- {
- printk("%s(): ====> pTxInfo->QueueSel(%d)!= FIFO_EDCA!!!!\n", __func__, pTxInfo->QSEL);
- printk("\tCWPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d!\n", pHTTXContext->CurWritePosition, pHTTXContext->NextBulkOutPosition, pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad);
- hex_dump("Wrong QSel Pkt:", (PUCHAR)&pWirelessPkt[TmpBulkEndPos], (pHTTXContext->CurWritePosition - pHTTXContext->NextBulkOutPosition));
+ if (pTxInfo->QSEL != FIFO_EDCA) {
+ DBGPRINT(RT_DEBUG_ERROR,
+ ("%s(): ====> pTxInfo->QueueSel(%d)!= FIFO_EDCA!!!!\n",
+ __FUNCTION__, pTxInfo->QSEL));
+ DBGPRINT(RT_DEBUG_ERROR,
+ ("\tCWPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d!\n",
+ pHTTXContext->CurWritePosition,
+ pHTTXContext->NextBulkOutPosition,
+ pHTTXContext->ENextBulkOutPosition,
+ pHTTXContext->bCopySavePad));
+ hex_dump("Wrong QSel Pkt:",
+ (u8 *)& pWirelessPkt[TmpBulkEndPos],
+ (pHTTXContext->CurWritePosition -
+ pHTTXContext->NextBulkOutPosition));
}
- if (pTxInfo->USBDMATxPktLen <= 8)
- {
- BULK_OUT_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags2);
- DBGPRINT(RT_DEBUG_ERROR /*RT_DEBUG_TRACE*/,("e2, USBDMATxPktLen==0, Size=%ld, bCSPad=%d, CWPos=%ld, NBPos=%ld, CWRPos=%ld!\n",
- pHTTXContext->BulkOutSize, pHTTXContext->bCopySavePad, pHTTXContext->CurWritePosition, pHTTXContext->NextBulkOutPosition, pHTTXContext->CurWriteRealPos));
+ if (pTxInfo->USBDMATxPktLen <= 8) {
+ BULK_OUT_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId],
+ IrqFlags2);
+ DBGPRINT(RT_DEBUG_ERROR /*RT_DEBUG_TRACE */ ,
+ ("e2, USBDMATxPktLen==0, Size=%ld, bCSPad=%d, CWPos=%ld, NBPos=%ld, CWRPos=%ld!\n",
+ pHTTXContext->BulkOutSize,
+ pHTTXContext->bCopySavePad,
+ pHTTXContext->CurWritePosition,
+ pHTTXContext->NextBulkOutPosition,
+ pHTTXContext->CurWriteRealPos));
{
- DBGPRINT_RAW(RT_DEBUG_ERROR /*RT_DEBUG_TRACE*/,("%x %x %x %x %x %x %x %x \n",
- pHTTXContext->SavedPad[0], pHTTXContext->SavedPad[1], pHTTXContext->SavedPad[2],pHTTXContext->SavedPad[3]
- ,pHTTXContext->SavedPad[4], pHTTXContext->SavedPad[5], pHTTXContext->SavedPad[6],pHTTXContext->SavedPad[7]));
+ DBGPRINT_RAW(RT_DEBUG_ERROR /*RT_DEBUG_TRACE */
+ ,
+ ("%x %x %x %x %x %x %x %x \n",
+ pHTTXContext->SavedPad[0],
+ pHTTXContext->SavedPad[1],
+ pHTTXContext->SavedPad[2],
+ pHTTXContext->SavedPad[3]
+ , pHTTXContext->SavedPad[4],
+ pHTTXContext->SavedPad[5],
+ pHTTXContext->SavedPad[6],
+ pHTTXContext->SavedPad[7]));
}
pAd->bForcePrintTX = TRUE;
- BULK_OUT_LOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags);
+ BULK_OUT_LOCK(&pAd->BulkOutLock[BulkOutPipeId],
+ IrqFlags);
pAd->BulkOutPending[BulkOutPipeId] = FALSE;
- BULK_OUT_UNLOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags);
- //DBGPRINT(RT_DEBUG_LOUD,("Out:pTxInfo->USBDMATxPktLen=%d!\n", pTxInfo->USBDMATxPktLen));
+ BULK_OUT_UNLOCK(&pAd->BulkOutLock[BulkOutPipeId],
+ IrqFlags);
+ /*DBGPRINT(RT_DEBUG_LOUD,("Out:pTxInfo->USBDMATxPktLen=%d!\n", pTxInfo->USBDMATxPktLen)); */
return;
}
-
- // Increase Total transmit byte counter
- pAd->RalinkCounters.OneSecTransmittedByteCount += pTxWI->MPDUtotalByteCount;
- pAd->RalinkCounters.TransmittedByteCount += pTxWI->MPDUtotalByteCount;
+ /* Increase Total transmit byte counter */
+ pAd->RalinkCounters.OneSecTransmittedByteCount +=
+ pTxWI->MPDUtotalByteCount;
+ pAd->RalinkCounters.TransmittedByteCount +=
+ pTxWI->MPDUtotalByteCount;
pLastTxInfo = pTxInfo;
- // Make sure we use EDCA QUEUE.
- pTxInfo->QSEL = FIFO_EDCA; //PS packets use HCCA queue when dequeue from PS unicast queue (WiFi WPA2 MA9_DT1 for Marvell B STA)
- ThisBulkSize += (pTxInfo->USBDMATxPktLen+4);
- TmpBulkEndPos += (pTxInfo->USBDMATxPktLen+4);
+ /* Make sure we use EDCA QUEUE. */
+ pTxInfo->QSEL = FIFO_EDCA;
+ ThisBulkSize += (pTxInfo->USBDMATxPktLen + 4);
+ TmpBulkEndPos += (pTxInfo->USBDMATxPktLen + 4);
if (TmpBulkEndPos != pHTTXContext->CurWritePosition)
pTxInfo->USBDMANextVLD = 1;
- if (pTxInfo->SwUseLastRound == 1)
- {
+ if (pTxInfo->SwUseLastRound == 1) {
if (pHTTXContext->CurWritePosition == 8)
pTxInfo->USBDMANextVLD = 0;
pTxInfo->SwUseLastRound = 0;
@@ -368,68 +397,88 @@ VOID RTUSBBulkOutDataPacket(
break;
}
- }while (TRUE);
- // adjust the pTxInfo->USBDMANextVLD value of last pTxInfo.
- if (pLastTxInfo)
- {
+ } while (TRUE);
+
+ /* adjust the pTxInfo->USBDMANextVLD value of last pTxInfo. */
+ if (pLastTxInfo) {
pLastTxInfo->USBDMANextVLD = 0;
}
/*
- We need to copy SavedPad when following condition matched!
- 1. Not the last round of the TxQueue and
- 2. any match of following cases:
- (1). The End Position of this bulk out is reach to the Currenct Write position and
- the TxInfo and related header already write to the CurWritePosition.
- =>(ENextBulkOutPosition == CurWritePosition) && (CurWriteRealPos > CurWritePosition)
-
- (2). The EndPosition of the bulk out is not reach to the Current Write Position.
- =>(ENextBulkOutPosition != CurWritePosition)
- */
+ We need to copy SavedPad when following condition matched!
+ 1. Not the last round of the TxQueue and
+ 2. any match of following cases:
+ (1). The End Position of this bulk out is reach to the Currenct Write position and
+ the TxInfo and related header already write to the CurWritePosition.
+ =>(ENextBulkOutPosition == CurWritePosition) && (CurWriteRealPos > CurWritePosition)
+
+ (2). The EndPosition of the bulk out is not reach to the Current Write Position.
+ =>(ENextBulkOutPosition != CurWritePosition)
+ */
if ((bTxQLastRound == FALSE) &&
- (((pHTTXContext->ENextBulkOutPosition == pHTTXContext->CurWritePosition) && (pHTTXContext->CurWriteRealPos > pHTTXContext->CurWritePosition)) ||
- (pHTTXContext->ENextBulkOutPosition != pHTTXContext->CurWritePosition))
- )
- {
- NdisMoveMemory(pHTTXContext->SavedPad, &pWirelessPkt[pHTTXContext->ENextBulkOutPosition], 8);
+ (((pHTTXContext->ENextBulkOutPosition ==
+ pHTTXContext->CurWritePosition)
+ && (pHTTXContext->CurWriteRealPos >
+ pHTTXContext->CurWritePosition))
+ || (pHTTXContext->ENextBulkOutPosition !=
+ pHTTXContext->CurWritePosition))
+ ) {
+ NdisMoveMemory(pHTTXContext->SavedPad,
+ &pWirelessPkt[pHTTXContext->
+ ENextBulkOutPosition], 8);
pHTTXContext->bCopySavePad = TRUE;
- if (RTMPEqualMemory(pHTTXContext->SavedPad, allzero,4))
- {
- PUCHAR pBuf = &pHTTXContext->SavedPad[0];
- DBGPRINT_RAW(RT_DEBUG_ERROR,("WARNING-Zero-3:%02x%02x%02x%02x%02x%02x%02x%02x,CWPos=%ld, CWRPos=%ld, bCW=%d, NBPos=%ld, TBPos=%ld, TBSize=%ld\n",
- pBuf[0], pBuf[1], pBuf[2],pBuf[3],pBuf[4], pBuf[5], pBuf[6],pBuf[7], pHTTXContext->CurWritePosition, pHTTXContext->CurWriteRealPos,
- pHTTXContext->bCurWriting, pHTTXContext->NextBulkOutPosition, TmpBulkEndPos, ThisBulkSize));
+ if (RTMPEqualMemory(pHTTXContext->SavedPad, allzero, 4)) {
+ u8 *pBuf = &pHTTXContext->SavedPad[0];
+ DBGPRINT_RAW(RT_DEBUG_ERROR,
+ ("WARNING-Zero-3:%02x%02x%02x%02x%02x%02x%02x%02x,CWPos=%ld, CWRPos=%ld, bCW=%d, NBPos=%ld, TBPos=%ld, TBSize=%ld\n",
+ pBuf[0], pBuf[1], pBuf[2], pBuf[3],
+ pBuf[4], pBuf[5], pBuf[6], pBuf[7],
+ pHTTXContext->CurWritePosition,
+ pHTTXContext->CurWriteRealPos,
+ pHTTXContext->bCurWriting,
+ pHTTXContext->NextBulkOutPosition,
+ TmpBulkEndPos, ThisBulkSize));
pBuf = &pWirelessPkt[pHTTXContext->CurWritePosition];
- DBGPRINT_RAW(RT_DEBUG_ERROR,("\tCWPos=%02x%02x%02x%02x%02x%02x%02x%02x\n", pBuf[0], pBuf[1], pBuf[2],pBuf[3],pBuf[4], pBuf[5], pBuf[6],pBuf[7]));
+ DBGPRINT_RAW(RT_DEBUG_ERROR,
+ ("\tCWPos=%02x%02x%02x%02x%02x%02x%02x%02x\n",
+ pBuf[0], pBuf[1], pBuf[2], pBuf[3],
+ pBuf[4], pBuf[5], pBuf[6], pBuf[7]));
}
- //DBGPRINT(RT_DEBUG_LOUD,("ENPos==CWPos=%ld, CWRPos=%ld, bCSPad=%d!\n", pHTTXContext->CurWritePosition, pHTTXContext->CurWriteRealPos, pHTTXContext->bCopySavePad));
+ /*DBGPRINT(RT_DEBUG_LOUD,("ENPos==CWPos=%ld, CWRPos=%ld, bCSPad=%d!\n", pHTTXContext->CurWritePosition, pHTTXContext->CurWriteRealPos, pHTTXContext->bCopySavePad)); */
}
if (pAd->bForcePrintTX == TRUE)
- DBGPRINT(RT_DEBUG_TRACE,("BulkOut-A:Size=%ld, CWPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d!\n", ThisBulkSize, pHTTXContext->CurWritePosition, pHTTXContext->NextBulkOutPosition, pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad));
- //DBGPRINT(RT_DEBUG_LOUD,("BulkOut-A:Size=%ld, CWPos=%ld, CWRPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d, bLRound=%d!\n", ThisBulkSize, pHTTXContext->CurWritePosition, pHTTXContext->CurWriteRealPos, pHTTXContext->NextBulkOutPosition, pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad, bTxQLastRound));
-
- // USB DMA engine requires to pad extra 4 bytes. This pad doesn't count into real bulkoutsize.
+ DBGPRINT(RT_DEBUG_TRACE,
+ ("BulkOut-A:Size=%ld, CWPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d!\n",
+ ThisBulkSize, pHTTXContext->CurWritePosition,
+ pHTTXContext->NextBulkOutPosition,
+ pHTTXContext->ENextBulkOutPosition,
+ pHTTXContext->bCopySavePad));
+ /*DBGPRINT(RT_DEBUG_LOUD,("BulkOut-A:Size=%ld, CWPos=%ld, CWRPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d, bLRound=%d!\n", ThisBulkSize, pHTTXContext->CurWritePosition, pHTTXContext->CurWriteRealPos, pHTTXContext->NextBulkOutPosition, pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad, bTxQLastRound)); */
+
+ /* USB DMA engine requires to pad extra 4 bytes. This pad doesn't count into real bulkoutsize. */
pAppendant = &pWirelessPkt[TmpBulkEndPos];
NdisZeroMemory(pAppendant, 8);
+ ThisBulkSize += 4;
+ pHTTXContext->LastOne = TRUE;
+ if ((ThisBulkSize % pAd->BulkOutMaxPacketSize) == 0)
ThisBulkSize += 4;
- pHTTXContext->LastOne = TRUE;
- if ((ThisBulkSize % pAd->BulkOutMaxPacketSize) == 0)
- ThisBulkSize += 4;
pHTTXContext->BulkOutSize = ThisBulkSize;
pAd->watchDogTxPendingCnt[BulkOutPipeId] = 1;
BULK_OUT_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags2);
- // Init Tx context descriptor
- RTUSBInitHTTxDesc(pAd, pHTTXContext, BulkOutPipeId, ThisBulkSize, (usb_complete_t)RTUSBBulkOutDataPacketComplete);
+ /* Init Tx context descriptor */
+ RTUSBInitHTTxDesc(pAd, pHTTXContext, BulkOutPipeId, ThisBulkSize,
+ (usb_complete_t) RTUSBBulkOutDataPacketComplete);
pUrb = pHTTXContext->pUrb;
- if((ret = RTUSB_SUBMIT_URB(pUrb))!=0)
- {
- DBGPRINT(RT_DEBUG_ERROR, ("RTUSBBulkOutDataPacket: Submit Tx URB failed %d\n", ret));
+ if ((ret = RTUSB_SUBMIT_URB(pUrb)) != 0) {
+ DBGPRINT(RT_DEBUG_ERROR,
+ ("RTUSBBulkOutDataPacket: Submit Tx URB failed %d\n",
+ ret));
BULK_OUT_LOCK(&pAd->BulkOutLock[BulkOutPipeId], IrqFlags);
pAd->BulkOutPending[BulkOutPipeId] = FALSE;
@@ -446,48 +495,41 @@ VOID RTUSBBulkOutDataPacket(
}
-
-VOID RTUSBBulkOutDataPacketComplete(purbb_t pUrb, struct pt_regs *pt_regs)
+void RTUSBBulkOutDataPacketComplete(struct urb *pUrb, struct pt_regs * pt_regs)
{
- PHT_TX_CONTEXT pHTTXContext;
- PRTMP_ADAPTER pAd;
- POS_COOKIE pObj;
- UCHAR BulkOutPipeId;
+ struct rt_ht_tx_context *pHTTXContext;
+ struct rt_rtmp_adapter *pAd;
+ struct os_cookie *pObj;
+ u8 BulkOutPipeId;
+ pHTTXContext = (struct rt_ht_tx_context *)pUrb->context;
+ pAd = pHTTXContext->pAd;
+ pObj = (struct os_cookie *)pAd->OS_Cookie;
- pHTTXContext = (PHT_TX_CONTEXT)pUrb->context;
- pAd = pHTTXContext->pAd;
- pObj = (POS_COOKIE) pAd->OS_Cookie;
-
- // Store BulkOut PipeId
- BulkOutPipeId = pHTTXContext->BulkOutPipeId;
+ /* Store BulkOut PipeId */
+ BulkOutPipeId = pHTTXContext->BulkOutPipeId;
pAd->BulkOutDataOneSecCount++;
- switch (BulkOutPipeId)
- {
- case 0:
- pObj->ac0_dma_done_task.data = (unsigned long)pUrb;
- tasklet_hi_schedule(&pObj->ac0_dma_done_task);
- break;
- case 1:
- pObj->ac1_dma_done_task.data = (unsigned long)pUrb;
- tasklet_hi_schedule(&pObj->ac1_dma_done_task);
- break;
- case 2:
- pObj->ac2_dma_done_task.data = (unsigned long)pUrb;
- tasklet_hi_schedule(&pObj->ac2_dma_done_task);
- break;
- case 3:
- pObj->ac3_dma_done_task.data = (unsigned long)pUrb;
- tasklet_hi_schedule(&pObj->ac3_dma_done_task);
- break;
- case 4:
- pObj->hcca_dma_done_task.data = (unsigned long)pUrb;
- tasklet_hi_schedule(&pObj->hcca_dma_done_task);
- break;
+ switch (BulkOutPipeId) {
+ case 0:
+ pObj->ac0_dma_done_task.data = (unsigned long)pUrb;
+ tasklet_hi_schedule(&pObj->ac0_dma_done_task);
+ break;
+ case 1:
+ pObj->ac1_dma_done_task.data = (unsigned long)pUrb;
+ tasklet_hi_schedule(&pObj->ac1_dma_done_task);
+ break;
+ case 2:
+ pObj->ac2_dma_done_task.data = (unsigned long)pUrb;
+ tasklet_hi_schedule(&pObj->ac2_dma_done_task);
+ break;
+ case 3:
+ pObj->ac3_dma_done_task.data = (unsigned long)pUrb;
+ tasklet_hi_schedule(&pObj->ac3_dma_done_task);
+ break;
}
-}
+}
/*
========================================================================
@@ -502,17 +544,16 @@ VOID RTUSBBulkOutDataPacketComplete(purbb_t pUrb, struct pt_regs *pt_regs)
========================================================================
*/
-VOID RTUSBBulkOutNullFrame(
- IN PRTMP_ADAPTER pAd)
+void RTUSBBulkOutNullFrame(struct rt_rtmp_adapter *pAd)
{
- PTX_CONTEXT pNullContext = &(pAd->NullContext);
- PURB pUrb;
- int ret = 0;
- unsigned long IrqFlags;
+ struct rt_tx_context *pNullContext = &(pAd->NullContext);
+ PURB pUrb;
+ int ret = 0;
+ unsigned long IrqFlags;
RTMP_IRQ_LOCK(&pAd->BulkOutLock[0], IrqFlags);
- if ((pAd->BulkOutPending[0] == TRUE) || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NEED_STOP_TX))
- {
+ if ((pAd->BulkOutPending[0] == TRUE)
+ || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NEED_STOP_TX)) {
RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], IrqFlags);
return;
}
@@ -521,45 +562,45 @@ VOID RTUSBBulkOutNullFrame(
pNullContext->IRPPending = TRUE;
RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], IrqFlags);
- // Increase Total transmit byte counter
- pAd->RalinkCounters.TransmittedByteCount += pNullContext->BulkOutSize;
+ /* Increase Total transmit byte counter */
+ pAd->RalinkCounters.TransmittedByteCount += pNullContext->BulkOutSize;
-
- // Clear Null frame bulk flag
+ /* Clear Null frame bulk flag */
RTUSB_CLEAR_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NULL);
- // Init Tx context descriptor
- RTUSBInitTxDesc(pAd, pNullContext, 0, (usb_complete_t)RTUSBBulkOutNullFrameComplete);
+ /* Init Tx context descriptor */
+ RTUSBInitTxDesc(pAd, pNullContext, 0,
+ (usb_complete_t) RTUSBBulkOutNullFrameComplete);
pUrb = pNullContext->pUrb;
- if((ret = RTUSB_SUBMIT_URB(pUrb))!=0)
- {
+ if ((ret = RTUSB_SUBMIT_URB(pUrb)) != 0) {
RTMP_IRQ_LOCK(&pAd->BulkOutLock[0], IrqFlags);
pAd->BulkOutPending[0] = FALSE;
pAd->watchDogTxPendingCnt[0] = 0;
pNullContext->IRPPending = FALSE;
RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], IrqFlags);
- DBGPRINT(RT_DEBUG_ERROR, ("RTUSBBulkOutNullFrame: Submit Tx URB failed %d\n", ret));
+ DBGPRINT(RT_DEBUG_ERROR,
+ ("RTUSBBulkOutNullFrame: Submit Tx URB failed %d\n",
+ ret));
return;
}
}
-// NULL frame use BulkOutPipeId = 0
-VOID RTUSBBulkOutNullFrameComplete(purbb_t pUrb, struct pt_regs *pt_regs)
+/* NULL frame use BulkOutPipeId = 0 */
+void RTUSBBulkOutNullFrameComplete(struct urb *pUrb, struct pt_regs * pt_regs)
{
- PRTMP_ADAPTER pAd;
- PTX_CONTEXT pNullContext;
- NTSTATUS Status;
- POS_COOKIE pObj;
-
+ struct rt_rtmp_adapter *pAd;
+ struct rt_tx_context *pNullContext;
+ int Status;
+ struct os_cookie *pObj;
- pNullContext = (PTX_CONTEXT)pUrb->context;
- pAd = pNullContext->pAd;
- Status = pUrb->status;
+ pNullContext = (struct rt_tx_context *)pUrb->context;
+ pAd = pNullContext->pAd;
+ Status = pUrb->status;
- pObj = (POS_COOKIE) pAd->OS_Cookie;
+ pObj = (struct os_cookie *)pAd->OS_Cookie;
pObj->null_frame_complete_task.data = (unsigned long)pUrb;
tasklet_hi_schedule(&pObj->null_frame_complete_task);
}
@@ -577,34 +618,30 @@ VOID RTUSBBulkOutNullFrameComplete(purbb_t pUrb, struct pt_regs *pt_regs)
========================================================================
*/
-VOID RTUSBBulkOutMLMEPacket(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR Index)
+void RTUSBBulkOutMLMEPacket(struct rt_rtmp_adapter *pAd, u8 Index)
{
- PTX_CONTEXT pMLMEContext;
- PURB pUrb;
- int ret = 0;
- unsigned long IrqFlags;
+ struct rt_tx_context *pMLMEContext;
+ PURB pUrb;
+ int ret = 0;
+ unsigned long IrqFlags;
- pMLMEContext = (PTX_CONTEXT)pAd->MgmtRing.Cell[pAd->MgmtRing.TxDmaIdx].AllocVa;
+ pMLMEContext =
+ (struct rt_tx_context *)pAd->MgmtRing.Cell[pAd->MgmtRing.TxDmaIdx].AllocVa;
pUrb = pMLMEContext->pUrb;
if ((pAd->MgmtRing.TxSwFreeIdx >= MGMT_RING_SIZE) ||
- (pMLMEContext->InUse == FALSE) ||
- (pMLMEContext->bWaitingBulkOut == FALSE))
- {
-
+ (pMLMEContext->InUse == FALSE) ||
+ (pMLMEContext->bWaitingBulkOut == FALSE)) {
- // Clear MLME bulk flag
+ /* Clear MLME bulk flag */
RTUSB_CLEAR_BULK_FLAG(pAd, fRTUSB_BULK_OUT_MLME);
return;
}
-
RTMP_IRQ_LOCK(&pAd->BulkOutLock[MGMTPIPEIDX], IrqFlags);
- if ((pAd->BulkOutPending[MGMTPIPEIDX] == TRUE) || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NEED_STOP_TX))
- {
+ if ((pAd->BulkOutPending[MGMTPIPEIDX] == TRUE)
+ || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NEED_STOP_TX)) {
RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[MGMTPIPEIDX], IrqFlags);
return;
}
@@ -615,23 +652,25 @@ VOID RTUSBBulkOutMLMEPacket(
pMLMEContext->bWaitingBulkOut = FALSE;
RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[MGMTPIPEIDX], IrqFlags);
- // Increase Total transmit byte counter
- pAd->RalinkCounters.TransmittedByteCount += pMLMEContext->BulkOutSize;
+ /* Increase Total transmit byte counter */
+ pAd->RalinkCounters.TransmittedByteCount += pMLMEContext->BulkOutSize;
- // Clear MLME bulk flag
+ /* Clear MLME bulk flag */
RTUSB_CLEAR_BULK_FLAG(pAd, fRTUSB_BULK_OUT_MLME);
- // Init Tx context descriptor
- RTUSBInitTxDesc(pAd, pMLMEContext, MGMTPIPEIDX, (usb_complete_t)RTUSBBulkOutMLMEPacketComplete);
+ /* Init Tx context descriptor */
+ RTUSBInitTxDesc(pAd, pMLMEContext, MGMTPIPEIDX,
+ (usb_complete_t) RTUSBBulkOutMLMEPacketComplete);
- //For mgmt urb buffer, because we use sk_buff, so we need to notify the USB controller do dma mapping.
- pUrb->transfer_dma = 0;
+ /*For mgmt urb buffer, because we use sk_buff, so we need to notify the USB controller do dma mapping. */
+ pUrb->transfer_dma = 0;
pUrb->transfer_flags &= (~URB_NO_TRANSFER_DMA_MAP);
pUrb = pMLMEContext->pUrb;
- if((ret = RTUSB_SUBMIT_URB(pUrb))!=0)
- {
- DBGPRINT(RT_DEBUG_ERROR, ("RTUSBBulkOutMLMEPacket: Submit MLME URB failed %d\n", ret));
+ if ((ret = RTUSB_SUBMIT_URB(pUrb)) != 0) {
+ DBGPRINT(RT_DEBUG_ERROR,
+ ("RTUSBBulkOutMLMEPacket: Submit MLME URB failed %d\n",
+ ret));
RTMP_IRQ_LOCK(&pAd->BulkOutLock[MGMTPIPEIDX], IrqFlags);
pAd->BulkOutPending[MGMTPIPEIDX] = FALSE;
pAd->watchDogTxPendingCnt[MGMTPIPEIDX] = 0;
@@ -641,32 +680,29 @@ VOID RTUSBBulkOutMLMEPacket(
return;
}
-
- //DBGPRINT_RAW(RT_DEBUG_INFO, ("<---RTUSBBulkOutMLMEPacket \n"));
-// printk("<---RTUSBBulkOutMLMEPacket,Cpu=%d!, Dma=%d, SwIdx=%d!\n", pAd->MgmtRing.TxCpuIdx, pAd->MgmtRing.TxDmaIdx, pAd->MgmtRing.TxSwFreeIdx);
+ /*DBGPRINT_RAW(RT_DEBUG_INFO, ("<---RTUSBBulkOutMLMEPacket \n")); */
+/* printk("<---RTUSBBulkOutMLMEPacket,Cpu=%d!, Dma=%d, SwIdx=%d!\n", pAd->MgmtRing.TxCpuIdx, pAd->MgmtRing.TxDmaIdx, pAd->MgmtRing.TxSwFreeIdx); */
}
-
-VOID RTUSBBulkOutMLMEPacketComplete(purbb_t pUrb, struct pt_regs *pt_regs)
+void RTUSBBulkOutMLMEPacketComplete(struct urb *pUrb, struct pt_regs * pt_regs)
{
- PTX_CONTEXT pMLMEContext;
- PRTMP_ADAPTER pAd;
- NTSTATUS Status;
- POS_COOKIE pObj;
- int index;
-
- //DBGPRINT_RAW(RT_DEBUG_INFO, ("--->RTUSBBulkOutMLMEPacketComplete\n"));
- pMLMEContext = (PTX_CONTEXT)pUrb->context;
- pAd = pMLMEContext->pAd;
- pObj = (POS_COOKIE)pAd->OS_Cookie;
- Status = pUrb->status;
- index = pMLMEContext->SelfIdx;
+ struct rt_tx_context *pMLMEContext;
+ struct rt_rtmp_adapter *pAd;
+ int Status;
+ struct os_cookie *pObj;
+ int index;
+
+ /*DBGPRINT_RAW(RT_DEBUG_INFO, ("--->RTUSBBulkOutMLMEPacketComplete\n")); */
+ pMLMEContext = (struct rt_tx_context *)pUrb->context;
+ pAd = pMLMEContext->pAd;
+ pObj = (struct os_cookie *)pAd->OS_Cookie;
+ Status = pUrb->status;
+ index = pMLMEContext->SelfIdx;
pObj->mgmt_dma_done_task.data = (unsigned long)pUrb;
tasklet_hi_schedule(&pObj->mgmt_dma_done_task);
}
-
/*
========================================================================
@@ -680,17 +716,16 @@ VOID RTUSBBulkOutMLMEPacketComplete(purbb_t pUrb, struct pt_regs *pt_regs)
========================================================================
*/
-VOID RTUSBBulkOutPsPoll(
- IN PRTMP_ADAPTER pAd)
+void RTUSBBulkOutPsPoll(struct rt_rtmp_adapter *pAd)
{
- PTX_CONTEXT pPsPollContext = &(pAd->PsPollContext);
- PURB pUrb;
- int ret = 0;
- unsigned long IrqFlags;
+ struct rt_tx_context *pPsPollContext = &(pAd->PsPollContext);
+ PURB pUrb;
+ int ret = 0;
+ unsigned long IrqFlags;
RTMP_IRQ_LOCK(&pAd->BulkOutLock[0], IrqFlags);
- if ((pAd->BulkOutPending[0] == TRUE) || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NEED_STOP_TX))
- {
+ if ((pAd->BulkOutPending[0] == TRUE)
+ || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NEED_STOP_TX)) {
RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], IrqFlags);
return;
}
@@ -699,57 +734,57 @@ VOID RTUSBBulkOutPsPoll(
pPsPollContext->IRPPending = TRUE;
RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], IrqFlags);
-
- // Clear PS-Poll bulk flag
+ /* Clear PS-Poll bulk flag */
RTUSB_CLEAR_BULK_FLAG(pAd, fRTUSB_BULK_OUT_PSPOLL);
- // Init Tx context descriptor
- RTUSBInitTxDesc(pAd, pPsPollContext, MGMTPIPEIDX, (usb_complete_t)RTUSBBulkOutPsPollComplete);
+ /* Init Tx context descriptor */
+ RTUSBInitTxDesc(pAd, pPsPollContext, MGMTPIPEIDX,
+ (usb_complete_t) RTUSBBulkOutPsPollComplete);
pUrb = pPsPollContext->pUrb;
- if((ret = RTUSB_SUBMIT_URB(pUrb))!=0)
- {
+ if ((ret = RTUSB_SUBMIT_URB(pUrb)) != 0) {
RTMP_IRQ_LOCK(&pAd->BulkOutLock[0], IrqFlags);
pAd->BulkOutPending[0] = FALSE;
pAd->watchDogTxPendingCnt[0] = 0;
pPsPollContext->IRPPending = FALSE;
RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], IrqFlags);
- DBGPRINT(RT_DEBUG_ERROR, ("RTUSBBulkOutPsPoll: Submit Tx URB failed %d\n", ret));
+ DBGPRINT(RT_DEBUG_ERROR,
+ ("RTUSBBulkOutPsPoll: Submit Tx URB failed %d\n",
+ ret));
return;
}
}
-// PS-Poll frame use BulkOutPipeId = 0
-VOID RTUSBBulkOutPsPollComplete(purbb_t pUrb,struct pt_regs *pt_regs)
+/* PS-Poll frame use BulkOutPipeId = 0 */
+void RTUSBBulkOutPsPollComplete(struct urb *pUrb, struct pt_regs * pt_regs)
{
- PRTMP_ADAPTER pAd;
- PTX_CONTEXT pPsPollContext;
- NTSTATUS Status;
- POS_COOKIE pObj;
-
+ struct rt_rtmp_adapter *pAd;
+ struct rt_tx_context *pPsPollContext;
+ int Status;
+ struct os_cookie *pObj;
- pPsPollContext= (PTX_CONTEXT)pUrb->context;
+ pPsPollContext = (struct rt_tx_context *)pUrb->context;
pAd = pPsPollContext->pAd;
Status = pUrb->status;
- pObj = (POS_COOKIE) pAd->OS_Cookie;
+ pObj = (struct os_cookie *)pAd->OS_Cookie;
pObj->pspoll_frame_complete_task.data = (unsigned long)pUrb;
tasklet_hi_schedule(&pObj->pspoll_frame_complete_task);
}
-VOID DoBulkIn(IN RTMP_ADAPTER *pAd)
+void DoBulkIn(struct rt_rtmp_adapter *pAd)
{
- PRX_CONTEXT pRxContext;
- PURB pUrb;
- int ret = 0;
- unsigned long IrqFlags;
+ struct rt_rx_context *pRxContext;
+ PURB pUrb;
+ int ret = 0;
+ unsigned long IrqFlags;
RTMP_IRQ_LOCK(&pAd->BulkInLock, IrqFlags);
pRxContext = &(pAd->RxContext[pAd->NextRxBulkInIndex]);
- if ((pAd->PendingRx > 0) || (pRxContext->Readable == TRUE) || (pRxContext->InUse == TRUE))
- {
+ if ((pAd->PendingRx > 0) || (pRxContext->Readable == TRUE)
+ || (pRxContext->InUse == TRUE)) {
RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags);
return;
}
@@ -759,13 +794,12 @@ VOID DoBulkIn(IN RTMP_ADAPTER *pAd)
pAd->BulkInReq++;
RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags);
- // Init Rx context descriptor
+ /* Init Rx context descriptor */
NdisZeroMemory(pRxContext->TransferBuffer, pRxContext->BulkInOffset);
RTUSBInitRxDesc(pAd, pRxContext);
pUrb = pRxContext->pUrb;
- if ((ret = RTUSB_SUBMIT_URB(pUrb))!=0)
- { // fail
+ if ((ret = RTUSB_SUBMIT_URB(pUrb)) != 0) { /* fail */
RTMP_IRQ_LOCK(&pAd->BulkInLock, IrqFlags);
pRxContext->InUse = FALSE;
@@ -773,16 +807,14 @@ VOID DoBulkIn(IN RTMP_ADAPTER *pAd)
pAd->PendingRx--;
pAd->BulkInReq--;
RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags);
- DBGPRINT(RT_DEBUG_ERROR, ("RTUSBBulkReceive: Submit Rx URB failed %d\n", ret));
- }
- else
- { // success
+ DBGPRINT(RT_DEBUG_ERROR,
+ ("RTUSBBulkReceive: Submit Rx URB failed %d\n", ret));
+ } else { /* success */
ASSERT((pRxContext->InUse == pRxContext->IRPPending));
- //printk("BIDone, Pend=%d,BIIdx=%d,BIRIdx=%d!\n", pAd->PendingRx, pAd->NextRxBulkInIndex, pAd->NextRxBulkInReadIndex);
+ /*printk("BIDone, Pend=%d,BIIdx=%d,BIRIdx=%d!\n", pAd->PendingRx, pAd->NextRxBulkInIndex, pAd->NextRxBulkInReadIndex); */
}
}
-
/*
========================================================================
@@ -813,44 +845,40 @@ VOID DoBulkIn(IN RTMP_ADAPTER *pAd)
fRTMP_ADAPTER_RADIO_OFF | fRTMP_ADAPTER_RESET_IN_PROGRESS | \
fRTMP_ADAPTER_REMOVE_IN_PROGRESS)
-VOID RTUSBBulkReceive(
- IN PRTMP_ADAPTER pAd)
+void RTUSBBulkReceive(struct rt_rtmp_adapter *pAd)
{
- PRX_CONTEXT pRxContext;
- unsigned long IrqFlags;
-
+ struct rt_rx_context *pRxContext;
+ unsigned long IrqFlags;
/* sanity check */
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NEED_STOP_HANDLE_RX))
return;
- while(1)
- {
+ while (1) {
RTMP_IRQ_LOCK(&pAd->BulkInLock, IrqFlags);
pRxContext = &(pAd->RxContext[pAd->NextRxBulkInReadIndex]);
- if (((pRxContext->InUse == FALSE) && (pRxContext->Readable == TRUE)) &&
- (pRxContext->bRxHandling == FALSE))
- {
+ if (((pRxContext->InUse == FALSE)
+ && (pRxContext->Readable == TRUE))
+ && (pRxContext->bRxHandling == FALSE)) {
pRxContext->bRxHandling = TRUE;
RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags);
- // read RxContext, Since not
+ /* read RxContext, Since not */
STARxDoneInterruptHandle(pAd, TRUE);
- // Finish to handle this bulkIn buffer.
+ /* Finish to handle this bulkIn buffer. */
RTMP_IRQ_LOCK(&pAd->BulkInLock, IrqFlags);
pRxContext->BulkInOffset = 0;
pRxContext->Readable = FALSE;
pRxContext->bRxHandling = FALSE;
pAd->ReadPosition = 0;
pAd->TransferBufferLength = 0;
- INC_RING_INDEX(pAd->NextRxBulkInReadIndex, RX_RING_SIZE);
+ INC_RING_INDEX(pAd->NextRxBulkInReadIndex,
+ RX_RING_SIZE);
RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags);
- }
- else
- {
+ } else {
RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags);
break;
}
@@ -861,7 +889,6 @@ VOID RTUSBBulkReceive(
}
-
/*
========================================================================
@@ -885,27 +912,24 @@ VOID RTUSBBulkReceive(
Always returns STATUS_MORE_PROCESSING_REQUIRED
========================================================================
*/
-VOID RTUSBBulkRxComplete(purbb_t pUrb, struct pt_regs *pt_regs)
+void RTUSBBulkRxComplete(struct urb *pUrb, struct pt_regs *pt_regs)
{
- // use a receive tasklet to handle received packets;
- // or sometimes hardware IRQ will be disabled here, so we can not
- // use spin_lock_bh()/spin_unlock_bh() after IRQ is disabled. :<
- PRX_CONTEXT pRxContext;
- PRTMP_ADAPTER pAd;
- POS_COOKIE pObj;
-
+ /* use a receive tasklet to handle received packets; */
+ /* or sometimes hardware IRQ will be disabled here, so we can not */
+ /* use spin_lock_bh()/spin_unlock_bh() after IRQ is disabled. :< */
+ struct rt_rx_context *pRxContext;
+ struct rt_rtmp_adapter *pAd;
+ struct os_cookie *pObj;
- pRxContext = (PRX_CONTEXT)pUrb->context;
- pAd = pRxContext->pAd;
- pObj = (POS_COOKIE) pAd->OS_Cookie;
+ pRxContext = (struct rt_rx_context *)pUrb->context;
+ pAd = pRxContext->pAd;
+ pObj = (struct os_cookie *)pAd->OS_Cookie;
pObj->rx_done_task.data = (unsigned long)pUrb;
tasklet_hi_schedule(&pObj->rx_done_task);
}
-
-
/*
========================================================================
@@ -919,86 +943,78 @@ VOID RTUSBBulkRxComplete(purbb_t pUrb, struct pt_regs *pt_regs)
========================================================================
*/
-VOID RTUSBKickBulkOut(
- IN PRTMP_ADAPTER pAd)
+void RTUSBKickBulkOut(struct rt_rtmp_adapter *pAd)
{
- // BulkIn Reset will reset whole USB PHY. So we need to make sure fRTMP_ADAPTER_BULKIN_RESET not flaged.
- if (!RTMP_TEST_FLAG(pAd ,fRTMP_ADAPTER_NEED_STOP_TX)
- )
- {
- // 2. PS-Poll frame is next
- if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_PSPOLL))
- {
+ /* BulkIn Reset will reset whole USB PHY. So we need to make sure fRTMP_ADAPTER_BULKIN_RESET not flaged. */
+ if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NEED_STOP_TX)
+ ) {
+ /* 2. PS-Poll frame is next */
+ if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_PSPOLL)) {
RTUSBBulkOutPsPoll(pAd);
}
-
- // 5. Mlme frame is next
- else if ((RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_MLME)) &&
- (pAd->MgmtRing.TxSwFreeIdx < MGMT_RING_SIZE))
- {
+ /* 5. Mlme frame is next */
+ else if ((RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_MLME)) ||
+ (pAd->MgmtRing.TxSwFreeIdx < MGMT_RING_SIZE)) {
RTUSBBulkOutMLMEPacket(pAd, pAd->MgmtRing.TxDmaIdx);
}
-
- // 6. Data frame normal is next
- if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL))
- {
- if (((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) ||
- (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED))
- ))
- {
- RTUSBBulkOutDataPacket(pAd, 0, pAd->NextBulkOutIndex[0]);
+ /* 6. Data frame normal is next */
+ if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL)) {
+ if (((!RTMP_TEST_FLAG
+ (pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS))
+ ||
+ (!OPSTATUS_TEST_FLAG
+ (pAd, fOP_STATUS_MEDIA_STATE_CONNECTED))
+ )) {
+ RTUSBBulkOutDataPacket(pAd, 0,
+ pAd->
+ NextBulkOutIndex[0]);
}
}
- if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL_2))
- {
- if (((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) ||
- (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED))
- ))
- {
- RTUSBBulkOutDataPacket(pAd, 1, pAd->NextBulkOutIndex[1]);
+ if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL_2)) {
+ if (((!RTMP_TEST_FLAG
+ (pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS))
+ ||
+ (!OPSTATUS_TEST_FLAG
+ (pAd, fOP_STATUS_MEDIA_STATE_CONNECTED))
+ )) {
+ RTUSBBulkOutDataPacket(pAd, 1,
+ pAd->
+ NextBulkOutIndex[1]);
}
}
- if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL_3))
- {
- if (((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) ||
- (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED))
- ))
- {
- RTUSBBulkOutDataPacket(pAd, 2, pAd->NextBulkOutIndex[2]);
+ if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL_3)) {
+ if (((!RTMP_TEST_FLAG
+ (pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS))
+ ||
+ (!OPSTATUS_TEST_FLAG
+ (pAd, fOP_STATUS_MEDIA_STATE_CONNECTED))
+ )) {
+ RTUSBBulkOutDataPacket(pAd, 2,
+ pAd->
+ NextBulkOutIndex[2]);
}
}
- if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL_4))
- {
- if (((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) ||
- (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED))
- ))
- {
- RTUSBBulkOutDataPacket(pAd, 3, pAd->NextBulkOutIndex[3]);
+ if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL_4)) {
+ if (((!RTMP_TEST_FLAG
+ (pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS))
+ ||
+ (!OPSTATUS_TEST_FLAG
+ (pAd, fOP_STATUS_MEDIA_STATE_CONNECTED))
+ )) {
+ RTUSBBulkOutDataPacket(pAd, 3,
+ pAd->
+ NextBulkOutIndex[3]);
}
}
-
- //PS packets use HCCA queue when dequeue from PS unicast queue (WiFi WPA2 MA9_DT1 for Marvell B STA)
- if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NORMAL_5))
- {
- if (((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) ||
- (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED))
- ))
- {
- }
- }
-
- // 7. Null frame is the last
- else if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NULL))
- {
- if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS))
- {
+ /* 7. Null frame is the last */
+ else if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_NULL)) {
+ if (!RTMP_TEST_FLAG
+ (pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS)) {
RTUSBBulkOutNullFrame(pAd);
}
}
-
- // 8. No data avaliable
- else
- {
+ /* 8. No data avaliable */
+ else {
}
}
@@ -1017,16 +1033,14 @@ VOID RTUSBKickBulkOut(
========================================================================
*/
-VOID RTUSBCleanUpDataBulkOutQueue(
- IN PRTMP_ADAPTER pAd)
+void RTUSBCleanUpDataBulkOutQueue(struct rt_rtmp_adapter *pAd)
{
- UCHAR Idx;
- PHT_TX_CONTEXT pTxContext;
+ u8 Idx;
+ struct rt_ht_tx_context *pTxContext;
DBGPRINT(RT_DEBUG_TRACE, ("--->CleanUpDataBulkOutQueue\n"));
- for (Idx = 0; Idx < 4; Idx++)
- {
+ for (Idx = 0; Idx < 4; Idx++) {
pTxContext = &pAd->TxContext[Idx];
pTxContext->CurWritePosition = pTxContext->NextBulkOutPosition;
@@ -1052,14 +1066,12 @@ VOID RTUSBCleanUpDataBulkOutQueue(
========================================================================
*/
-VOID RTUSBCleanUpMLMEBulkOutQueue(
- IN PRTMP_ADAPTER pAd)
+void RTUSBCleanUpMLMEBulkOutQueue(struct rt_rtmp_adapter *pAd)
{
DBGPRINT(RT_DEBUG_TRACE, ("--->CleanUpMLMEBulkOutQueue\n"));
DBGPRINT(RT_DEBUG_TRACE, ("<---CleanUpMLMEBulkOutQueue\n"));
}
-
/*
========================================================================
@@ -1069,13 +1081,11 @@ VOID RTUSBCleanUpMLMEBulkOutQueue(
Return Value:
-
Note:
========================================================================
*/
-VOID RTUSBCancelPendingIRPs(
- IN PRTMP_ADAPTER pAd)
+void RTUSBCancelPendingIRPs(struct rt_rtmp_adapter *pAd)
{
RTUSBCancelPendingBulkInIRP(pAd);
RTUSBCancelPendingBulkOutIRP(pAd);
@@ -1094,29 +1104,25 @@ VOID RTUSBCancelPendingIRPs(
========================================================================
*/
-VOID RTUSBCancelPendingBulkInIRP(
- IN PRTMP_ADAPTER pAd)
+void RTUSBCancelPendingBulkInIRP(struct rt_rtmp_adapter *pAd)
{
- PRX_CONTEXT pRxContext;
- UINT i;
+ struct rt_rx_context *pRxContext;
+ u32 i;
DBGPRINT_RAW(RT_DEBUG_TRACE, ("--->RTUSBCancelPendingBulkInIRP\n"));
- for ( i = 0; i < (RX_RING_SIZE); i++)
- {
+ for (i = 0; i < (RX_RING_SIZE); i++) {
pRxContext = &(pAd->RxContext[i]);
- if(pRxContext->IRPPending == TRUE)
- {
+ if (pRxContext->IRPPending == TRUE) {
RTUSB_UNLINK_URB(pRxContext->pUrb);
pRxContext->IRPPending = FALSE;
pRxContext->InUse = FALSE;
- //NdisInterlockedDecrement(&pAd->PendingRx);
- //pAd->PendingRx--;
+ /*NdisInterlockedDecrement(&pAd->PendingRx); */
+ /*pAd->PendingRx--; */
}
}
DBGPRINT_RAW(RT_DEBUG_TRACE, ("<---RTUSBCancelPendingBulkInIRP\n"));
}
-
/*
========================================================================
@@ -1130,83 +1136,74 @@ VOID RTUSBCancelPendingBulkInIRP(
========================================================================
*/
-VOID RTUSBCancelPendingBulkOutIRP(
- IN PRTMP_ADAPTER pAd)
+void RTUSBCancelPendingBulkOutIRP(struct rt_rtmp_adapter *pAd)
{
- PHT_TX_CONTEXT pHTTXContext;
- PTX_CONTEXT pMLMEContext;
- PTX_CONTEXT pBeaconContext;
- PTX_CONTEXT pNullContext;
- PTX_CONTEXT pPsPollContext;
- PTX_CONTEXT pRTSContext;
- UINT i, Idx;
-// unsigned int IrqFlags;
-// NDIS_SPIN_LOCK *pLock;
-// BOOLEAN *pPending;
-
-
-// pLock = &pAd->BulkOutLock[MGMTPIPEIDX];
-// pPending = &pAd->BulkOutPending[MGMTPIPEIDX];
-
- for (Idx = 0; Idx < 4; Idx++)
- {
+ struct rt_ht_tx_context *pHTTXContext;
+ struct rt_tx_context *pMLMEContext;
+ struct rt_tx_context *pBeaconContext;
+ struct rt_tx_context *pNullContext;
+ struct rt_tx_context *pPsPollContext;
+ struct rt_tx_context *pRTSContext;
+ u32 i, Idx;
+/* unsigned int IrqFlags; */
+/* spinlock_t *pLock; */
+/* BOOLEAN *pPending; */
+
+/* pLock = &pAd->BulkOutLock[MGMTPIPEIDX]; */
+/* pPending = &pAd->BulkOutPending[MGMTPIPEIDX]; */
+
+ for (Idx = 0; Idx < 4; Idx++) {
pHTTXContext = &(pAd->TxContext[Idx]);
- if (pHTTXContext->IRPPending == TRUE)
- {
+ if (pHTTXContext->IRPPending == TRUE) {
- // Get the USB_CONTEXT and cancel it's IRP; the completion routine will itself
- // remove it from the HeadPendingSendList and NULL out HeadPendingSendList
- // when the last IRP on the list has been cancelled; that's how we exit this loop
- //
+ /* Get the USB_CONTEXT and cancel it's IRP; the completion routine will itself */
+ /* remove it from the HeadPendingSendList and NULL out HeadPendingSendList */
+ /* when the last IRP on the list has been cancelled; that's how we exit this loop */
+ /* */
RTUSB_UNLINK_URB(pHTTXContext->pUrb);
- // Sleep 200 microseconds to give cancellation time to work
+ /* Sleep 200 microseconds to give cancellation time to work */
RTMPusecDelay(200);
}
pAd->BulkOutPending[Idx] = FALSE;
}
- //RTMP_IRQ_LOCK(pLock, IrqFlags);
- for (i = 0; i < MGMT_RING_SIZE; i++)
- {
- pMLMEContext = (PTX_CONTEXT)pAd->MgmtRing.Cell[i].AllocVa;
- if(pMLMEContext && (pMLMEContext->IRPPending == TRUE))
- {
+ /*RTMP_IRQ_LOCK(pLock, IrqFlags); */
+ for (i = 0; i < MGMT_RING_SIZE; i++) {
+ pMLMEContext = (struct rt_tx_context *)pAd->MgmtRing.Cell[i].AllocVa;
+ if (pMLMEContext && (pMLMEContext->IRPPending == TRUE)) {
- // Get the USB_CONTEXT and cancel it's IRP; the completion routine will itself
- // remove it from the HeadPendingSendList and NULL out HeadPendingSendList
- // when the last IRP on the list has been cancelled; that's how we exit this loop
- //
+ /* Get the USB_CONTEXT and cancel it's IRP; the completion routine will itself */
+ /* remove it from the HeadPendingSendList and NULL out HeadPendingSendList */
+ /* when the last IRP on the list has been cancelled; that's how we exit this loop */
+ /* */
RTUSB_UNLINK_URB(pMLMEContext->pUrb);
pMLMEContext->IRPPending = FALSE;
- // Sleep 200 microsecs to give cancellation time to work
+ /* Sleep 200 microsecs to give cancellation time to work */
RTMPusecDelay(200);
}
}
pAd->BulkOutPending[MGMTPIPEIDX] = FALSE;
- //RTMP_IRQ_UNLOCK(pLock, IrqFlags);
-
+ /*RTMP_IRQ_UNLOCK(pLock, IrqFlags); */
- for (i = 0; i < BEACON_RING_SIZE; i++)
- {
+ for (i = 0; i < BEACON_RING_SIZE; i++) {
pBeaconContext = &(pAd->BeaconContext[i]);
- if(pBeaconContext->IRPPending == TRUE)
- {
+ if (pBeaconContext->IRPPending == TRUE) {
- // Get the USB_CONTEXT and cancel it's IRP; the completion routine will itself
- // remove it from the HeadPendingSendList and NULL out HeadPendingSendList
- // when the last IRP on the list has been cancelled; that's how we exit this loop
- //
+ /* Get the USB_CONTEXT and cancel it's IRP; the completion routine will itself */
+ /* remove it from the HeadPendingSendList and NULL out HeadPendingSendList */
+ /* when the last IRP on the list has been cancelled; that's how we exit this loop */
+ /* */
RTUSB_UNLINK_URB(pBeaconContext->pUrb);
- // Sleep 200 microsecs to give cancellation time to work
+ /* Sleep 200 microsecs to give cancellation time to work */
RTMPusecDelay(200);
}
}
@@ -1223,11 +1220,11 @@ VOID RTUSBCancelPendingBulkOutIRP(
if (pPsPollContext->IRPPending == TRUE)
RTUSB_UNLINK_URB(pPsPollContext->pUrb);
- for (Idx = 0; Idx < 4; Idx++)
- {
+ for (Idx = 0; Idx < 4; Idx++) {
NdisAcquireSpinLock(&pAd->BulkOutLock[Idx]);
pAd->BulkOutPending[Idx] = FALSE;
NdisReleaseSpinLock(&pAd->BulkOutLock[Idx]);
}
}
+#endif /* RTMP_MAC_USB // */
diff --git a/drivers/staging/rt2870/common/rtusb_data.c b/drivers/staging/rt2870/common/rtusb_data.c
index 6b003f63372e..4583764c78d2 100644
--- a/drivers/staging/rt2870/common/rtusb_data.c
+++ b/drivers/staging/rt2870/common/rtusb_data.c
@@ -36,82 +36,102 @@
Jan 03-25-2006 created
*/
+
+#ifdef RTMP_MAC_USB
+
#include "../rt_config.h"
-extern UCHAR Phy11BGNextRateUpward[]; // defined in mlme.c
-extern UCHAR EpToQueue[];
+extern u8 Phy11BGNextRateUpward[]; /* defined in mlme.c */
+extern u8 EpToQueue[];
-VOID REPORT_AMSDU_FRAMES_TO_LLC(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR pData,
- IN ULONG DataSize)
+void REPORT_AMSDU_FRAMES_TO_LLC(struct rt_rtmp_adapter *pAd,
+ u8 *pData, unsigned long DataSize)
{
- PNDIS_PACKET pPacket;
- UINT nMSDU;
- struct sk_buff *pSkb;
+ void *pPacket;
+ u32 nMSDU;
+ struct sk_buff *pSkb;
nMSDU = 0;
/* allocate a rx packet */
pSkb = dev_alloc_skb(RX_BUFFER_AGGRESIZE);
- pPacket = (PNDIS_PACKET)OSPKT_TO_RTPKT(pSkb);
- if (pSkb)
- {
+ pPacket = (void *)OSPKT_TO_RTPKT(pSkb);
+ if (pSkb) {
/* convert 802.11 to 802.3 packet */
pSkb->dev = get_netdev_from_bssid(pAd, BSS0);
RTMP_SET_PACKET_SOURCE(pPacket, PKTSRC_NDIS);
deaggregate_AMSDU_announce(pAd, pPacket, pData, DataSize);
- }
- else
- {
- DBGPRINT(RT_DEBUG_ERROR,("Can't allocate skb\n"));
+ } else {
+ DBGPRINT(RT_DEBUG_ERROR, ("Can't allocate skb\n"));
}
}
-NDIS_STATUS RTUSBFreeDescriptorRequest(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR BulkOutPipeId,
- IN UINT32 NumberRequired)
-{
-// UCHAR FreeNumber = 0;
-// UINT Index;
- NDIS_STATUS Status = NDIS_STATUS_FAILURE;
- unsigned long IrqFlags;
- HT_TX_CONTEXT *pHTTXContext;
+/*
+ ========================================================================
+
+ Routine Description:
+ This subroutine will scan through releative ring descriptor to find
+ out avaliable free ring descriptor and compare with request size.
+ Arguments:
+ pAd Pointer to our adapter
+ RingType Selected Ring
+
+ Return Value:
+ NDIS_STATUS_FAILURE Not enough free descriptor
+ NDIS_STATUS_SUCCESS Enough free descriptor
+
+ Note:
+
+ ========================================================================
+*/
+int RTUSBFreeDescriptorRequest(struct rt_rtmp_adapter *pAd,
+ u8 BulkOutPipeId,
+ u32 NumberRequired)
+{
+/* u8 FreeNumber = 0; */
+/* u32 Index; */
+ int Status = NDIS_STATUS_FAILURE;
+ unsigned long IrqFlags;
+ struct rt_ht_tx_context *pHTTXContext;
pHTTXContext = &pAd->TxContext[BulkOutPipeId];
RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags);
- if ((pHTTXContext->CurWritePosition < pHTTXContext->NextBulkOutPosition) && ((pHTTXContext->CurWritePosition + NumberRequired + LOCAL_TXBUF_SIZE) > pHTTXContext->NextBulkOutPosition))
- {
-
- RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << BulkOutPipeId));
- }
- else if ((pHTTXContext->CurWritePosition == 8) && (pHTTXContext->NextBulkOutPosition < (NumberRequired + LOCAL_TXBUF_SIZE)))
- {
- RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << BulkOutPipeId));
- }
- else if (pHTTXContext->bCurWriting == TRUE)
- {
- DBGPRINT(RT_DEBUG_TRACE,("RTUSBFreeD c3 --> QueIdx=%d, CWPos=%ld, NBOutPos=%ld!\n", BulkOutPipeId, pHTTXContext->CurWritePosition, pHTTXContext->NextBulkOutPosition));
- RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << BulkOutPipeId));
- }
- else
- {
+ if ((pHTTXContext->CurWritePosition < pHTTXContext->NextBulkOutPosition)
+ &&
+ ((pHTTXContext->CurWritePosition + NumberRequired +
+ LOCAL_TXBUF_SIZE) > pHTTXContext->NextBulkOutPosition)) {
+
+ RTUSB_SET_BULK_FLAG(pAd,
+ (fRTUSB_BULK_OUT_DATA_NORMAL <<
+ BulkOutPipeId));
+ } else if ((pHTTXContext->CurWritePosition == 8)
+ && (pHTTXContext->NextBulkOutPosition <
+ (NumberRequired + LOCAL_TXBUF_SIZE))) {
+ RTUSB_SET_BULK_FLAG(pAd,
+ (fRTUSB_BULK_OUT_DATA_NORMAL <<
+ BulkOutPipeId));
+ } else if (pHTTXContext->bCurWriting == TRUE) {
+ DBGPRINT(RT_DEBUG_TRACE,
+ ("RTUSBFreeD c3 --> QueIdx=%d, CWPos=%ld, NBOutPos=%ld!\n",
+ BulkOutPipeId, pHTTXContext->CurWritePosition,
+ pHTTXContext->NextBulkOutPosition));
+ RTUSB_SET_BULK_FLAG(pAd,
+ (fRTUSB_BULK_OUT_DATA_NORMAL <<
+ BulkOutPipeId));
+ } else {
Status = NDIS_STATUS_SUCCESS;
}
RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags);
-
return (Status);
}
-NDIS_STATUS RTUSBFreeDescriptorRelease(
- IN RTMP_ADAPTER *pAd,
- IN UCHAR BulkOutPipeId)
+int RTUSBFreeDescriptorRelease(struct rt_rtmp_adapter *pAd,
+ u8 BulkOutPipeId)
{
- unsigned long IrqFlags;
- HT_TX_CONTEXT *pHTTXContext;
+ unsigned long IrqFlags;
+ struct rt_ht_tx_context *pHTTXContext;
pHTTXContext = &pAd->TxContext[BulkOutPipeId];
RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags);
@@ -121,28 +141,32 @@ NDIS_STATUS RTUSBFreeDescriptorRelease(
return (NDIS_STATUS_SUCCESS);
}
-
-BOOLEAN RTUSBNeedQueueBackForAgg(
- IN RTMP_ADAPTER *pAd,
- IN UCHAR BulkOutPipeId)
+BOOLEAN RTUSBNeedQueueBackForAgg(struct rt_rtmp_adapter *pAd, u8 BulkOutPipeId)
{
- unsigned long IrqFlags;
- HT_TX_CONTEXT *pHTTXContext;
- BOOLEAN needQueBack = FALSE;
+ unsigned long IrqFlags;
+ struct rt_ht_tx_context *pHTTXContext;
+ BOOLEAN needQueBack = FALSE;
pHTTXContext = &pAd->TxContext[BulkOutPipeId];
RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags);
- if ((pHTTXContext->IRPPending == TRUE) /*&& (pAd->TxSwQueue[BulkOutPipeId].Number == 0) */)
- {
- if ((pHTTXContext->CurWritePosition < pHTTXContext->ENextBulkOutPosition) &&
- (((pHTTXContext->ENextBulkOutPosition+MAX_AGGREGATION_SIZE) < MAX_TXBULK_LIMIT) || (pHTTXContext->CurWritePosition > MAX_AGGREGATION_SIZE)))
- {
+ if ((pHTTXContext->IRPPending ==
+ TRUE) /*&& (pAd->TxSwQueue[BulkOutPipeId].Number == 0) */ ) {
+ if ((pHTTXContext->CurWritePosition <
+ pHTTXContext->ENextBulkOutPosition)
+ &&
+ (((pHTTXContext->ENextBulkOutPosition +
+ MAX_AGGREGATION_SIZE) < MAX_TXBULK_LIMIT)
+ || (pHTTXContext->CurWritePosition >
+ MAX_AGGREGATION_SIZE))) {
needQueBack = TRUE;
- }
- else if ((pHTTXContext->CurWritePosition > pHTTXContext->ENextBulkOutPosition) &&
- ((pHTTXContext->ENextBulkOutPosition + MAX_AGGREGATION_SIZE) < pHTTXContext->CurWritePosition))
- {
+ } else
+ if ((pHTTXContext->CurWritePosition >
+ pHTTXContext->ENextBulkOutPosition)
+ &&
+ ((pHTTXContext->ENextBulkOutPosition +
+ MAX_AGGREGATION_SIZE) <
+ pHTTXContext->CurWritePosition)) {
needQueBack = TRUE;
}
}
@@ -152,7 +176,6 @@ BOOLEAN RTUSBNeedQueueBackForAgg(
}
-
/*
========================================================================
@@ -168,21 +191,17 @@ BOOLEAN RTUSBNeedQueueBackForAgg(
========================================================================
*/
-VOID RTUSBRejectPendingPackets(
- IN PRTMP_ADAPTER pAd)
+void RTUSBRejectPendingPackets(struct rt_rtmp_adapter *pAd)
{
- UCHAR Index;
- PQUEUE_ENTRY pEntry;
- PNDIS_PACKET pPacket;
- PQUEUE_HEADER pQueue;
+ u8 Index;
+ struct rt_queue_entry *pEntry;
+ void *pPacket;
+ struct rt_queue_header *pQueue;
-
- for (Index = 0; Index < 4; Index++)
- {
+ for (Index = 0; Index < 4; Index++) {
NdisAcquireSpinLock(&pAd->TxSwQueueLock[Index]);
- while (pAd->TxSwQueue[Index].Head != NULL)
- {
- pQueue = (PQUEUE_HEADER) &(pAd->TxSwQueue[Index]);
+ while (pAd->TxSwQueue[Index].Head != NULL) {
+ pQueue = (struct rt_queue_header *)& (pAd->TxSwQueue[Index]);
pEntry = RemoveHeadQueue(pQueue);
pPacket = QUEUE_ENTRY_TO_PACKET(pEntry);
RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE);
@@ -193,20 +212,46 @@ VOID RTUSBRejectPendingPackets(
}
-VOID RTMPWriteTxInfo(
- IN PRTMP_ADAPTER pAd,
- IN PTXINFO_STRUC pTxInfo,
- IN USHORT USBDMApktLen,
- IN BOOLEAN bWiv,
- IN UCHAR QueueSel,
- IN UCHAR NextValid,
- IN UCHAR TxBurst)
+/*
+ ========================================================================
+
+ Routine Description:
+ Calculates the duration which is required to transmit out frames
+ with given size and specified rate.
+
+ Arguments:
+ pTxD Pointer to transmit descriptor
+ Ack Setting for Ack requirement bit
+ Fragment Setting for Fragment bit
+ RetryMode Setting for retry mode
+ Ifs Setting for IFS gap
+ Rate Setting for transmit rate
+ Service Setting for service
+ Length Frame length
+ TxPreamble Short or Long preamble when using CCK rates
+ QueIdx - 0-3, according to 802.11e/d4.4 June/2003
+
+ Return Value:
+ None
+
+ IRQL = PASSIVE_LEVEL
+ IRQL = DISPATCH_LEVEL
+
+ ========================================================================
+*/
+
+void RTMPWriteTxInfo(struct rt_rtmp_adapter *pAd,
+ struct rt_txinfo *pTxInfo,
+ u16 USBDMApktLen,
+ IN BOOLEAN bWiv,
+ u8 QueueSel, u8 NextValid, u8 TxBurst)
{
pTxInfo->USBDMATxPktLen = USBDMApktLen;
pTxInfo->QSEL = QueueSel;
if (QueueSel != FIFO_EDCA)
- DBGPRINT(RT_DEBUG_TRACE, ("====> QueueSel != FIFO_EDCA<============\n"));
- pTxInfo->USBDMANextVLD = FALSE; //NextValid; // Need to check with Jan about this.
+ DBGPRINT(RT_DEBUG_TRACE,
+ ("====> QueueSel != FIFO_EDCA<============\n"));
+ pTxInfo->USBDMANextVLD = FALSE; /*NextValid; // Need to check with Jan about this. */
pTxInfo->USBDMATxburst = TxBurst;
pTxInfo->WIV = bWiv;
pTxInfo->SwUseLastRound = 0;
@@ -214,3 +259,4 @@ VOID RTMPWriteTxInfo(
pTxInfo->rsv2 = 0;
}
+#endif /* RTMP_MAC_USB // */
diff --git a/drivers/staging/rt2870/common/rtusb_io.c b/drivers/staging/rt2870/common/rtusb_io.c
index 1d69590421a3..34443f2243f1 100644
--- a/drivers/staging/rt2870/common/rtusb_io.c
+++ b/drivers/staging/rt2870/common/rtusb_io.c
@@ -36,8 +36,9 @@
Paul Lin 06-25-2004 created
*/
-#include "../rt_config.h"
+#ifdef RTMP_MAC_USB
+#include "../rt_config.h"
/*
========================================================================
@@ -55,26 +56,18 @@
========================================================================
*/
-NTSTATUS RTUSBFirmwareRun(
- IN PRTMP_ADAPTER pAd)
+static int RTUSBFirmwareRun(struct rt_rtmp_adapter *pAd)
{
- NTSTATUS Status;
-
- Status = RTUSB_VendorRequest(
- pAd,
- USBD_TRANSFER_DIRECTION_OUT,
- DEVICE_VENDOR_REQUEST_OUT,
- 0x01,
- 0x8,
- 0,
- NULL,
- 0);
+ int Status;
+
+ Status = RTUSB_VendorRequest(pAd,
+ USBD_TRANSFER_DIRECTION_OUT,
+ DEVICE_VENDOR_REQUEST_OUT,
+ 0x01, 0x8, 0, NULL, 0);
return Status;
}
-
-
/*
========================================================================
@@ -90,19 +83,16 @@ NTSTATUS RTUSBFirmwareRun(
========================================================================
*/
-NTSTATUS RTUSBFirmwareWrite(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR pFwImage,
- IN ULONG FwLen)
+int RTUSBFirmwareWrite(struct rt_rtmp_adapter *pAd,
+ u8 *pFwImage, unsigned long FwLen)
{
- UINT32 MacReg;
- NTSTATUS Status;
-// ULONG i;
- USHORT writeLen;
+ u32 MacReg;
+ int Status;
+/* unsigned long i; */
+ u16 writeLen;
Status = RTUSBReadMACRegister(pAd, MAC_CSR0, &MacReg);
-
writeLen = FwLen;
RTUSBMultiWrite(pAd, FIRMWARE_IMAGE_BASE, pFwImage, writeLen);
@@ -110,66 +100,28 @@ NTSTATUS RTUSBFirmwareWrite(
Status = RTUSBWriteMACRegister(pAd, 0x701c, 0xffffffff);
Status = RTUSBFirmwareRun(pAd);
+ /*2008/11/28:KH add to fix the dead rf frequency offset bug<-- */
RTMPusecDelay(10000);
- RTUSBWriteMACRegister(pAd,H2M_MAILBOX_CSR,0);
- AsicSendCommandToMcu(pAd, 0x72, 0x00, 0x00, 0x00);//reset rf by MCU supported by new firmware
+ RTUSBWriteMACRegister(pAd, H2M_MAILBOX_CSR, 0);
+ AsicSendCommandToMcu(pAd, 0x72, 0x00, 0x00, 0x00); /*reset rf by MCU supported by new firmware */
+ /*2008/11/28:KH add to fix the dead rf frequency offset bug--> */
return Status;
}
-
-/*
- ========================================================================
-
- Routine Description: Get current firmware operation mode (Return Value)
-
- Arguments:
-
- Return Value:
- 0 or 1 = Downloaded by host driver
- others = Driver doesn't download firmware
-
- IRQL =
-
- Note:
-
- ========================================================================
-*/
-NTSTATUS RTUSBFirmwareOpmode(
- IN PRTMP_ADAPTER pAd,
- OUT PUINT32 pValue)
+int RTUSBVenderReset(struct rt_rtmp_adapter *pAd)
{
- NTSTATUS Status;
-
- Status = RTUSB_VendorRequest(
- pAd,
- (USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK),
- DEVICE_VENDOR_REQUEST_IN,
- 0x1,
- 0x11,
- 0,
- pValue,
- 4);
- return Status;
-}
-NTSTATUS RTUSBVenderReset(
- IN PRTMP_ADAPTER pAd)
-{
- NTSTATUS Status;
+ int Status;
DBGPRINT_RAW(RT_DEBUG_ERROR, ("-->RTUSBVenderReset\n"));
- Status = RTUSB_VendorRequest(
- pAd,
- USBD_TRANSFER_DIRECTION_OUT,
- DEVICE_VENDOR_REQUEST_OUT,
- 0x01,
- 0x1,
- 0,
- NULL,
- 0);
+ Status = RTUSB_VendorRequest(pAd,
+ USBD_TRANSFER_DIRECTION_OUT,
+ DEVICE_VENDOR_REQUEST_OUT,
+ 0x01, 0x1, 0, NULL, 0);
DBGPRINT_RAW(RT_DEBUG_ERROR, ("<--RTUSBVenderReset\n"));
return Status;
}
+
/*
========================================================================
@@ -185,23 +137,16 @@ NTSTATUS RTUSBVenderReset(
========================================================================
*/
-NTSTATUS RTUSBMultiRead(
- IN PRTMP_ADAPTER pAd,
- IN USHORT Offset,
- OUT PUCHAR pData,
- IN USHORT length)
+int RTUSBMultiRead(struct rt_rtmp_adapter *pAd,
+ u16 Offset, u8 *pData, u16 length)
{
- NTSTATUS Status;
-
- Status = RTUSB_VendorRequest(
- pAd,
- (USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK),
- DEVICE_VENDOR_REQUEST_IN,
- 0x7,
- 0,
- Offset,
- pData,
- length);
+ int Status;
+
+ Status = RTUSB_VendorRequest(pAd,
+ (USBD_TRANSFER_DIRECTION_IN |
+ USBD_SHORT_TRANSFER_OK),
+ DEVICE_VENDOR_REQUEST_IN, 0x7, 0, Offset,
+ pData, length);
return Status;
}
@@ -221,77 +166,56 @@ NTSTATUS RTUSBMultiRead(
========================================================================
*/
-NTSTATUS RTUSBMultiWrite_OneByte(
- IN PRTMP_ADAPTER pAd,
- IN USHORT Offset,
- IN PUCHAR pData)
+int RTUSBMultiWrite_OneByte(struct rt_rtmp_adapter *pAd,
+ u16 Offset, u8 *pData)
{
- NTSTATUS Status;
-
- // TODO: In 2870, use this funciton carefully cause it's not stable.
- Status = RTUSB_VendorRequest(
- pAd,
- USBD_TRANSFER_DIRECTION_OUT,
- DEVICE_VENDOR_REQUEST_OUT,
- 0x6,
- 0,
- Offset,
- pData,
- 1);
+ int Status;
+
+ /* TODO: In 2870, use this funciton carefully cause it's not stable. */
+ Status = RTUSB_VendorRequest(pAd,
+ USBD_TRANSFER_DIRECTION_OUT,
+ DEVICE_VENDOR_REQUEST_OUT,
+ 0x6, 0, Offset, pData, 1);
return Status;
}
-NTSTATUS RTUSBMultiWrite(
- IN PRTMP_ADAPTER pAd,
- IN USHORT Offset,
- IN PUCHAR pData,
- IN USHORT length)
+int RTUSBMultiWrite(struct rt_rtmp_adapter *pAd,
+ u16 Offset, u8 *pData, u16 length)
{
- NTSTATUS Status;
-
-
- USHORT index = 0,Value;
- PUCHAR pSrc = pData;
- USHORT resude = 0;
-
- resude = length % 2;
- length += resude;
- do
- {
- Value =(USHORT)( *pSrc | (*(pSrc + 1) << 8));
- Status = RTUSBSingleWrite(pAd,Offset + index,Value);
- index +=2;
- length -= 2;
- pSrc = pSrc + 2;
- }while(length > 0);
+ int Status;
+
+ u16 index = 0, Value;
+ u8 *pSrc = pData;
+ u16 resude = 0;
+
+ resude = length % 2;
+ length += resude;
+ do {
+ Value = (u16)(*pSrc | (*(pSrc + 1) << 8));
+ Status = RTUSBSingleWrite(pAd, Offset + index, Value);
+ index += 2;
+ length -= 2;
+ pSrc = pSrc + 2;
+ } while (length > 0);
return Status;
}
-
-NTSTATUS RTUSBSingleWrite(
- IN RTMP_ADAPTER *pAd,
- IN USHORT Offset,
- IN USHORT Value)
+int RTUSBSingleWrite(struct rt_rtmp_adapter *pAd,
+ u16 Offset, u16 Value)
{
- NTSTATUS Status;
-
- Status = RTUSB_VendorRequest(
- pAd,
- USBD_TRANSFER_DIRECTION_OUT,
- DEVICE_VENDOR_REQUEST_OUT,
- 0x2,
- Value,
- Offset,
- NULL,
- 0);
+ int Status;
+
+ Status = RTUSB_VendorRequest(pAd,
+ USBD_TRANSFER_DIRECTION_OUT,
+ DEVICE_VENDOR_REQUEST_OUT,
+ 0x2, Value, Offset, NULL, 0);
return Status;
}
-
/*
========================================================================
@@ -307,26 +231,19 @@ NTSTATUS RTUSBSingleWrite(
========================================================================
*/
-NTSTATUS RTUSBReadMACRegister(
- IN PRTMP_ADAPTER pAd,
- IN USHORT Offset,
- OUT PUINT32 pValue)
+int RTUSBReadMACRegister(struct rt_rtmp_adapter *pAd,
+ u16 Offset, u32 *pValue)
{
- NTSTATUS Status;
- UINT32 localVal;
-
- Status = RTUSB_VendorRequest(
- pAd,
- (USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK),
- DEVICE_VENDOR_REQUEST_IN,
- 0x7,
- 0,
- Offset,
- &localVal,
- 4);
+ int Status = 0;
+ u32 localVal;
- *pValue = le2cpu32(localVal);
+ Status = RTUSB_VendorRequest(pAd,
+ (USBD_TRANSFER_DIRECTION_IN |
+ USBD_SHORT_TRANSFER_OK),
+ DEVICE_VENDOR_REQUEST_IN, 0x7, 0, Offset,
+ &localVal, 4);
+ *pValue = le2cpu32(localVal);
if (Status < 0)
*pValue = 0xffffffff;
@@ -334,7 +251,6 @@ NTSTATUS RTUSBReadMACRegister(
return Status;
}
-
/*
========================================================================
@@ -350,25 +266,22 @@ NTSTATUS RTUSBReadMACRegister(
========================================================================
*/
-NTSTATUS RTUSBWriteMACRegister(
- IN PRTMP_ADAPTER pAd,
- IN USHORT Offset,
- IN UINT32 Value)
+int RTUSBWriteMACRegister(struct rt_rtmp_adapter *pAd,
+ u16 Offset, u32 Value)
{
- NTSTATUS Status;
- UINT32 localVal;
+ int Status;
+ u32 localVal;
localVal = Value;
- Status = RTUSBSingleWrite(pAd, Offset, (USHORT)(localVal & 0xffff));
- Status = RTUSBSingleWrite(pAd, Offset + 2, (USHORT)((localVal & 0xffff0000) >> 16));
+ Status = RTUSBSingleWrite(pAd, Offset, (u16)(localVal & 0xffff));
+ Status =
+ RTUSBSingleWrite(pAd, Offset + 2,
+ (u16)((localVal & 0xffff0000) >> 16));
return Status;
}
-
-
-#if 1
/*
========================================================================
@@ -384,139 +297,77 @@ NTSTATUS RTUSBWriteMACRegister(
========================================================================
*/
-NTSTATUS RTUSBReadBBPRegister(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR Id,
- IN PUCHAR pValue)
+int RTUSBReadBBPRegister(struct rt_rtmp_adapter *pAd,
+ u8 Id, u8 *pValue)
{
- BBP_CSR_CFG_STRUC BbpCsr;
- UINT i = 0;
- NTSTATUS status;
+ BBP_CSR_CFG_STRUC BbpCsr;
+ u32 i = 0;
+ int status;
- // Verify the busy condition
- do
- {
+ /* Verify the busy condition */
+ do {
status = RTUSBReadMACRegister(pAd, BBP_CSR_CFG, &BbpCsr.word);
- if(status >= 0)
- {
- if (!(BbpCsr.field.Busy == BUSY))
- break;
+ if (status >= 0) {
+ if (!(BbpCsr.field.Busy == BUSY))
+ break;
}
- printk("RTUSBReadBBPRegister(BBP_CSR_CFG_1):retry count=%d!\n", i);
+ DBGPRINT(RT_DEBUG_TRACE,
+ ("RTUSBReadBBPRegister(BBP_CSR_CFG_1):retry count=%d!\n",
+ i));
i++;
- }
- while ((i < RETRY_LIMIT) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)));
-
- if ((i == RETRY_LIMIT) || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)))
- {
- //
- // Read failed then Return Default value.
- //
+ } while ((i < RETRY_LIMIT)
+ && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)));
+
+ if ((i == RETRY_LIMIT)
+ || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) {
+ /* */
+ /* Read failed then Return Default value. */
+ /* */
*pValue = pAd->BbpWriteLatch[Id];
- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Retry count exhausted or device removed!!!\n"));
+ DBGPRINT_RAW(RT_DEBUG_ERROR,
+ ("Retry count exhausted or device removed!!!\n"));
return STATUS_UNSUCCESSFUL;
}
-
- // Prepare for write material
- BbpCsr.word = 0;
- BbpCsr.field.fRead = 1;
- BbpCsr.field.Busy = 1;
- BbpCsr.field.RegNum = Id;
+ /* Prepare for write material */
+ BbpCsr.word = 0;
+ BbpCsr.field.fRead = 1;
+ BbpCsr.field.Busy = 1;
+ BbpCsr.field.RegNum = Id;
RTUSBWriteMACRegister(pAd, BBP_CSR_CFG, BbpCsr.word);
i = 0;
- // Verify the busy condition
- do
- {
+ /* Verify the busy condition */
+ do {
status = RTUSBReadMACRegister(pAd, BBP_CSR_CFG, &BbpCsr.word);
- if (status >= 0)
- {
- if (!(BbpCsr.field.Busy == BUSY))
- {
- *pValue = (UCHAR)BbpCsr.field.Value;
- break;
- }
+ if (status >= 0) {
+ if (!(BbpCsr.field.Busy == BUSY)) {
+ *pValue = (u8)BbpCsr.field.Value;
+ break;
+ }
}
- printk("RTUSBReadBBPRegister(BBP_CSR_CFG_2):retry count=%d!\n", i);
+ DBGPRINT(RT_DEBUG_TRACE,
+ ("RTUSBReadBBPRegister(BBP_CSR_CFG_2):retry count=%d!\n",
+ i));
i++;
- }
- while ((i < RETRY_LIMIT) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)));
-
- if ((i == RETRY_LIMIT) || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)))
- {
- //
- // Read failed then Return Default value.
- //
+ } while ((i < RETRY_LIMIT)
+ && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)));
+
+ if ((i == RETRY_LIMIT)
+ || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) {
+ /* */
+ /* Read failed then Return Default value. */
+ /* */
*pValue = pAd->BbpWriteLatch[Id];
- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Retry count exhausted or device removed!!!\n"));
+ DBGPRINT_RAW(RT_DEBUG_ERROR,
+ ("Retry count exhausted or device removed!!!\n"));
return STATUS_UNSUCCESSFUL;
}
return STATUS_SUCCESS;
}
-#else
-/*
- ========================================================================
-
- Routine Description: Read 8-bit BBP register via firmware
- Arguments:
-
- Return Value:
-
- IRQL =
-
- Note:
-
- ========================================================================
-*/
-NTSTATUS RTUSBReadBBPRegister(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR Id,
- IN PUCHAR pValue)
-{
- BBP_CSR_CFG_STRUC BbpCsr;
- int i, k;
- for (i=0; i<MAX_BUSY_COUNT; i++)
- {
- RTUSBReadMACRegister(pAd, H2M_BBP_AGENT, &BbpCsr.word);
- if (BbpCsr.field.Busy == BUSY)
- {
- continue;
- }
- BbpCsr.word = 0;
- BbpCsr.field.fRead = 1;
- BbpCsr.field.BBP_RW_MODE = 1;
- BbpCsr.field.Busy = 1;
- BbpCsr.field.RegNum = Id;
- RTUSBWriteMACRegister(pAd, H2M_BBP_AGENT, BbpCsr.word);
- AsicSendCommandToMcu(pAd, 0x80, 0xff, 0x0, 0x0);
- for (k=0; k<MAX_BUSY_COUNT; k++)
- {
- RTUSBReadMACRegister(pAd, H2M_BBP_AGENT, &BbpCsr.word);
- if (BbpCsr.field.Busy == IDLE)
- break;
- }
- if ((BbpCsr.field.Busy == IDLE) &&
- (BbpCsr.field.RegNum == Id))
- {
- *pValue = (UCHAR)BbpCsr.field.Value;
- break;
- }
- }
- if (BbpCsr.field.Busy == BUSY)
- {
- DBGPRINT_ERR(("BBP read R%d=0x%x fail\n", Id, BbpCsr.word));
- *pValue = pAd->BbpWriteLatch[Id];
- return STATUS_UNSUCCESSFUL;
- }
- return STATUS_SUCCESS;
-}
-#endif
-
-#if 1
/*
========================================================================
@@ -532,95 +383,46 @@ NTSTATUS RTUSBReadBBPRegister(
========================================================================
*/
-NTSTATUS RTUSBWriteBBPRegister(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR Id,
- IN UCHAR Value)
+int RTUSBWriteBBPRegister(struct rt_rtmp_adapter *pAd,
+ u8 Id, u8 Value)
{
- BBP_CSR_CFG_STRUC BbpCsr;
- UINT i = 0;
- NTSTATUS status;
- // Verify the busy condition
- do
- {
+ BBP_CSR_CFG_STRUC BbpCsr;
+ u32 i = 0;
+ int status;
+ /* Verify the busy condition */
+ do {
status = RTUSBReadMACRegister(pAd, BBP_CSR_CFG, &BbpCsr.word);
- if (status >= 0)
- {
- if (!(BbpCsr.field.Busy == BUSY))
- break;
+ if (status >= 0) {
+ if (!(BbpCsr.field.Busy == BUSY))
+ break;
}
- printk("RTUSBWriteBBPRegister(BBP_CSR_CFG):retry count=%d!\n", i);
+ DBGPRINT(RT_DEBUG_TRACE,
+ ("RTUSBWriteBBPRegister(BBP_CSR_CFG):retry count=%d!\n",
+ i));
i++;
}
- while ((i < RETRY_LIMIT) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)));
+ while ((i < RETRY_LIMIT)
+ && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)));
- if ((i == RETRY_LIMIT) || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)))
- {
- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Retry count exhausted or device removed!!!\n"));
+ if ((i == RETRY_LIMIT)
+ || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) {
+ DBGPRINT_RAW(RT_DEBUG_ERROR,
+ ("Retry count exhausted or device removed!!!\n"));
return STATUS_UNSUCCESSFUL;
}
-
- // Prepare for write material
- BbpCsr.word = 0;
- BbpCsr.field.fRead = 0;
- BbpCsr.field.Value = Value;
- BbpCsr.field.Busy = 1;
- BbpCsr.field.RegNum = Id;
+ /* Prepare for write material */
+ BbpCsr.word = 0;
+ BbpCsr.field.fRead = 0;
+ BbpCsr.field.Value = Value;
+ BbpCsr.field.Busy = 1;
+ BbpCsr.field.RegNum = Id;
RTUSBWriteMACRegister(pAd, BBP_CSR_CFG, BbpCsr.word);
pAd->BbpWriteLatch[Id] = Value;
return STATUS_SUCCESS;
}
-#else
-/*
- ========================================================================
- Routine Description: Write 8-bit BBP register via firmware
-
- Arguments:
-
- Return Value:
-
- IRQL =
-
- Note:
-
- ========================================================================
-*/
-
-NTSTATUS RTUSBWriteBBPRegister(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR Id,
- IN UCHAR Value)
-
-{
- BBP_CSR_CFG_STRUC BbpCsr;
- int BusyCnt;
- for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++)
- {
- RTMP_IO_READ32(pAd, H2M_BBP_AGENT, &BbpCsr.word);
- if (BbpCsr.field.Busy == BUSY)
- continue;
- BbpCsr.word = 0;
- BbpCsr.field.fRead = 0;
- BbpCsr.field.BBP_RW_MODE = 1;
- BbpCsr.field.Busy = 1;
- BbpCsr.field.Value = Value;
- BbpCsr.field.RegNum = Id;
- RTMP_IO_WRITE32(pAd, H2M_BBP_AGENT, BbpCsr.word);
- AsicSendCommandToMcu(pAd, 0x80, 0xff, 0x0, 0x0);
- pAd->BbpWriteLatch[Id] = Value;
- break;
- }
- if (BusyCnt == MAX_BUSY_COUNT)
- {
- DBGPRINT_ERR(("BBP write R%d=0x%x fail\n", Id, BbpCsr.word));
- return STATUS_UNSUCCESSFUL;
- }
- return STATUS_SUCCESS;
-}
-#endif
/*
========================================================================
@@ -636,31 +438,31 @@ NTSTATUS RTUSBWriteBBPRegister(
========================================================================
*/
-NTSTATUS RTUSBWriteRFRegister(
- IN PRTMP_ADAPTER pAd,
- IN UINT32 Value)
+int RTUSBWriteRFRegister(struct rt_rtmp_adapter *pAd, u32 Value)
{
- PHY_CSR4_STRUC PhyCsr4;
- UINT i = 0;
- NTSTATUS status;
+ PHY_CSR4_STRUC PhyCsr4;
+ u32 i = 0;
+ int status;
NdisZeroMemory(&PhyCsr4, sizeof(PHY_CSR4_STRUC));
- do
- {
+ do {
status = RTUSBReadMACRegister(pAd, RF_CSR_CFG0, &PhyCsr4.word);
- if (status >= 0)
- {
- if (!(PhyCsr4.field.Busy))
- break;
+ if (status >= 0) {
+ if (!(PhyCsr4.field.Busy))
+ break;
}
- printk("RTUSBWriteRFRegister(RF_CSR_CFG0):retry count=%d!\n", i);
+ DBGPRINT(RT_DEBUG_TRACE,
+ ("RTUSBWriteRFRegister(RF_CSR_CFG0):retry count=%d!\n",
+ i));
i++;
}
- while ((i < RETRY_LIMIT) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)));
+ while ((i < RETRY_LIMIT)
+ && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)));
- if ((i == RETRY_LIMIT) || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)))
- {
- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Retry count exhausted or device removed!!!\n"));
+ if ((i == RETRY_LIMIT)
+ || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) {
+ DBGPRINT_RAW(RT_DEBUG_ERROR,
+ ("Retry count exhausted or device removed!!!\n"));
return STATUS_UNSUCCESSFUL;
}
@@ -672,57 +474,7 @@ NTSTATUS RTUSBWriteRFRegister(
/*
========================================================================
- Routine Description: Write RT30xx RF register through MAC
-
- Arguments:
-
- Return Value:
-
- IRQL =
-
- Note:
-
- ========================================================================
-*/
-NTSTATUS RT30xxWriteRFRegister(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR RegID,
- IN UCHAR Value)
-{
- RF_CSR_CFG_STRUC rfcsr;
- UINT i = 0;
-
- do
- {
- RTMP_IO_READ32(pAd, RF_CSR_CFG, &rfcsr.word);
-
- if (!rfcsr.field.RF_CSR_KICK)
- break;
- i++;
- }
- while ((i < RETRY_LIMIT) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)));
-
- if ((i == RETRY_LIMIT) || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)))
- {
- DBGPRINT_RAW(RT_DEBUG_ERROR, ("Retry count exhausted or device removed!!!\n"));
- return STATUS_UNSUCCESSFUL;
- }
-
- rfcsr.field.RF_CSR_WR = 1;
- rfcsr.field.RF_CSR_KICK = 1;
- rfcsr.field.TESTCSR_RFACC_REGNUM = RegID;
- rfcsr.field.RF_CSR_DATA = Value;
-
- RTMP_IO_WRITE32(pAd, RF_CSR_CFG, rfcsr.word);
-
- return STATUS_SUCCESS;
-}
-
-
-/*
- ========================================================================
-
- Routine Description: Read RT30xx RF register through MAC
+ Routine Description:
Arguments:
@@ -734,48 +486,18 @@ NTSTATUS RT30xxWriteRFRegister(
========================================================================
*/
-NTSTATUS RT30xxReadRFRegister(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR RegID,
- IN PUCHAR pValue)
+int RTUSBReadEEPROM(struct rt_rtmp_adapter *pAd,
+ u16 Offset, u8 *pData, u16 length)
{
- RF_CSR_CFG_STRUC rfcsr;
- UINT i=0, k=0;
-
- for (i=0; i<MAX_BUSY_COUNT; i++)
- {
- RTMP_IO_READ32(pAd, RF_CSR_CFG, &rfcsr.word);
+ int Status = STATUS_SUCCESS;
- if (rfcsr.field.RF_CSR_KICK == BUSY)
- {
- continue;
- }
- rfcsr.word = 0;
- rfcsr.field.RF_CSR_WR = 0;
- rfcsr.field.RF_CSR_KICK = 1;
- rfcsr.field.TESTCSR_RFACC_REGNUM = RegID;
- RTMP_IO_WRITE32(pAd, RF_CSR_CFG, rfcsr.word);
- for (k=0; k<MAX_BUSY_COUNT; k++)
- {
- RTMP_IO_READ32(pAd, RF_CSR_CFG, &rfcsr.word);
-
- if (rfcsr.field.RF_CSR_KICK == IDLE)
- break;
- }
- if ((rfcsr.field.RF_CSR_KICK == IDLE) &&
- (rfcsr.field.TESTCSR_RFACC_REGNUM == RegID))
- {
- *pValue = (UCHAR)rfcsr.field.RF_CSR_DATA;
- break;
- }
- }
- if (rfcsr.field.RF_CSR_KICK == BUSY)
- {
- DBGPRINT_ERR(("RF read R%d=0x%x fail, i[%d], k[%d]\n", RegID, rfcsr.word,i,k));
- return STATUS_UNSUCCESSFUL;
- }
+ Status = RTUSB_VendorRequest(pAd,
+ (USBD_TRANSFER_DIRECTION_IN |
+ USBD_SHORT_TRANSFER_OK),
+ DEVICE_VENDOR_REQUEST_IN, 0x9, 0, Offset,
+ pData, length);
- return STATUS_SUCCESS;
+ return Status;
}
/*
@@ -793,71 +515,31 @@ NTSTATUS RT30xxReadRFRegister(
========================================================================
*/
-NTSTATUS RTUSBReadEEPROM(
- IN PRTMP_ADAPTER pAd,
- IN USHORT Offset,
- OUT PUCHAR pData,
- IN USHORT length)
+int RTUSBWriteEEPROM(struct rt_rtmp_adapter *pAd,
+ u16 Offset, u8 *pData, u16 length)
{
- NTSTATUS Status = STATUS_SUCCESS;
+ int Status = STATUS_SUCCESS;
- if(pAd->bUseEfuse)
- Status =eFuseRead(pAd, Offset, pData, length);
- else
- {
- Status = RTUSB_VendorRequest(
- pAd,
- (USBD_TRANSFER_DIRECTION_IN | USBD_SHORT_TRANSFER_OK),
- DEVICE_VENDOR_REQUEST_IN,
- 0x9,
- 0,
- Offset,
- pData,
- length);
- }
+ Status = RTUSB_VendorRequest(pAd,
+ USBD_TRANSFER_DIRECTION_OUT,
+ DEVICE_VENDOR_REQUEST_OUT,
+ 0x8, 0, Offset, pData, length);
return Status;
}
-/*
- ========================================================================
-
- Routine Description:
-
- Arguments:
-
- Return Value:
-
- IRQL =
-
- Note:
-
- ========================================================================
-*/
-NTSTATUS RTUSBWriteEEPROM(
- IN PRTMP_ADAPTER pAd,
- IN USHORT Offset,
- IN PUCHAR pData,
- IN USHORT length)
+int RTUSBReadEEPROM16(struct rt_rtmp_adapter *pAd,
+ u16 offset, u16 *pData)
{
- NTSTATUS Status = STATUS_SUCCESS;
+ int status;
+ u16 localData;
- if(pAd->bUseEfuse)
- Status = eFuseWrite(pAd, Offset, pData, length);
- else
- {
- Status = RTUSB_VendorRequest(
- pAd,
- USBD_TRANSFER_DIRECTION_OUT,
- DEVICE_VENDOR_REQUEST_OUT,
- 0x8,
- 0,
- Offset,
- pData,
- length);
- }
+ status = RTUSBReadEEPROM(pAd, offset, (u8 *)(&localData), 2);
+ if (status == STATUS_SUCCESS)
+ *pData = le2cpu16(localData);
+
+ return status;
- return Status;
}
/*
@@ -875,16 +557,15 @@ NTSTATUS RTUSBWriteEEPROM(
========================================================================
*/
-VOID RTUSBPutToSleep(
- IN PRTMP_ADAPTER pAd)
+void RTUSBPutToSleep(struct rt_rtmp_adapter *pAd)
{
- UINT32 value;
+ u32 value;
- // Timeout 0x40 x 50us
- value = (SLEEPCID<<16)+(OWNERMCU<<24)+ (0x40<<8)+1;
+ /* Timeout 0x40 x 50us */
+ value = (SLEEPCID << 16) + (OWNERMCU << 24) + (0x40 << 8) + 1;
RTUSBWriteMACRegister(pAd, 0x7010, value);
RTUSBWriteMACRegister(pAd, 0x404, 0x30);
- //RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS);
+ /*RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS); */
DBGPRINT_RAW(RT_DEBUG_ERROR, ("Sleep Mailbox testvalue %x\n", value));
}
@@ -904,20 +585,14 @@ VOID RTUSBPutToSleep(
========================================================================
*/
-NTSTATUS RTUSBWakeUp(
- IN PRTMP_ADAPTER pAd)
+int RTUSBWakeUp(struct rt_rtmp_adapter *pAd)
{
- NTSTATUS Status;
-
- Status = RTUSB_VendorRequest(
- pAd,
- USBD_TRANSFER_DIRECTION_OUT,
- DEVICE_VENDOR_REQUEST_OUT,
- 0x01,
- 0x09,
- 0,
- NULL,
- 0);
+ int Status;
+
+ Status = RTUSB_VendorRequest(pAd,
+ USBD_TRANSFER_DIRECTION_OUT,
+ DEVICE_VENDOR_REQUEST_OUT,
+ 0x01, 0x09, 0, NULL, 0);
return Status;
}
@@ -937,13 +612,12 @@ NTSTATUS RTUSBWakeUp(
========================================================================
*/
-VOID RTUSBInitializeCmdQ(
- IN PCmdQ cmdq)
+void RTUSBInitializeCmdQ(struct rt_cmdq *cmdq)
{
cmdq->head = NULL;
cmdq->tail = NULL;
cmdq->size = 0;
- cmdq->CmdQState = RT2870_THREAD_INITED;
+ cmdq->CmdQState = RTMP_TASK_STAT_INITED;
}
/*
@@ -961,41 +635,45 @@ VOID RTUSBInitializeCmdQ(
========================================================================
*/
-NDIS_STATUS RTUSBEnqueueCmdFromNdis(
- IN PRTMP_ADAPTER pAd,
- IN NDIS_OID Oid,
- IN BOOLEAN SetInformation,
- IN PVOID pInformationBuffer,
- IN UINT32 InformationBufferLength)
+int RTUSBEnqueueCmdFromNdis(struct rt_rtmp_adapter *pAd,
+ IN NDIS_OID Oid,
+ IN BOOLEAN SetInformation,
+ void *pInformationBuffer,
+ u32 InformationBufferLength)
{
- NDIS_STATUS status;
- PCmdQElmt cmdqelmt = NULL;
- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie;
+ int status;
+ struct rt_cmdqelmt *cmdqelmt = NULL;
+ struct rt_rtmp_os_task *pTask = &pAd->cmdQTask;
- if (pid_nr(pObj->RTUSBCmdThr_pid) > 0)
- return (NDIS_STATUS_RESOURCES);
+#ifdef KTHREAD_SUPPORT
+ if (pTask->kthread_task == NULL)
+#else
+ CHECK_PID_LEGALITY(pTask->taskPID) {
+ }
+ else
+#endif
+ return (NDIS_STATUS_RESOURCES);
- status = RTMPAllocateMemory((PVOID *)&cmdqelmt, sizeof(CmdQElmt));
+ status = os_alloc_mem(pAd, (u8 **) (&cmdqelmt), sizeof(struct rt_cmdqelmt));
if ((status != NDIS_STATUS_SUCCESS) || (cmdqelmt == NULL))
return (NDIS_STATUS_RESOURCES);
- cmdqelmt->buffer = NULL;
- if (pInformationBuffer != NULL)
- {
- status = RTMPAllocateMemory((PVOID *)&cmdqelmt->buffer, InformationBufferLength);
- if ((status != NDIS_STATUS_SUCCESS) || (cmdqelmt->buffer == NULL))
- {
- kfree(cmdqelmt);
- return (NDIS_STATUS_RESOURCES);
- }
- else
- {
- NdisMoveMemory(cmdqelmt->buffer, pInformationBuffer, InformationBufferLength);
- cmdqelmt->bufferlength = InformationBufferLength;
- }
+ cmdqelmt->buffer = NULL;
+ if (pInformationBuffer != NULL) {
+ status =
+ os_alloc_mem(pAd, (u8 **) & cmdqelmt->buffer,
+ InformationBufferLength);
+ if ((status != NDIS_STATUS_SUCCESS)
+ || (cmdqelmt->buffer == NULL)) {
+ kfree(cmdqelmt);
+ return (NDIS_STATUS_RESOURCES);
+ } else {
+ NdisMoveMemory(cmdqelmt->buffer, pInformationBuffer,
+ InformationBufferLength);
+ cmdqelmt->bufferlength = InformationBufferLength;
}
- else
- cmdqelmt->bufferlength = 0;
+ } else
+ cmdqelmt->bufferlength = 0;
cmdqelmt->command = Oid;
cmdqelmt->CmdFromNdis = TRUE;
@@ -1005,28 +683,22 @@ NDIS_STATUS RTUSBEnqueueCmdFromNdis(
cmdqelmt->SetOperation = FALSE;
NdisAcquireSpinLock(&pAd->CmdQLock);
- if (pAd->CmdQ.CmdQState & RT2870_THREAD_CAN_DO_INSERT)
- {
+ if (pAd->CmdQ.CmdQState & RTMP_TASK_CAN_DO_INSERT) {
EnqueueCmd((&pAd->CmdQ), cmdqelmt);
status = NDIS_STATUS_SUCCESS;
- }
- else
- {
+ } else {
status = NDIS_STATUS_FAILURE;
}
NdisReleaseSpinLock(&pAd->CmdQLock);
- if (status == NDIS_STATUS_FAILURE)
- {
+ if (status == NDIS_STATUS_FAILURE) {
if (cmdqelmt->buffer)
- NdisFreeMemory(cmdqelmt->buffer, cmdqelmt->bufferlength, 0);
- NdisFreeMemory(cmdqelmt, sizeof(CmdQElmt), 0);
- }
- else
- RTUSBCMDUp(pAd);
-
+ os_free_mem(pAd, cmdqelmt->buffer);
+ os_free_mem(pAd, cmdqelmt);
+ } else
+ RTUSBCMDUp(pAd);
- return(NDIS_STATUS_SUCCESS);
+ return (NDIS_STATUS_SUCCESS);
}
/*
@@ -1044,37 +716,33 @@ NDIS_STATUS RTUSBEnqueueCmdFromNdis(
========================================================================
*/
-NDIS_STATUS RTUSBEnqueueInternalCmd(
- IN PRTMP_ADAPTER pAd,
- IN NDIS_OID Oid,
- IN PVOID pInformationBuffer,
- IN UINT32 InformationBufferLength)
+int RTUSBEnqueueInternalCmd(struct rt_rtmp_adapter *pAd,
+ IN NDIS_OID Oid,
+ void *pInformationBuffer,
+ u32 InformationBufferLength)
{
- NDIS_STATUS status;
- PCmdQElmt cmdqelmt = NULL;
+ int status;
+ struct rt_cmdqelmt *cmdqelmt = NULL;
-
- status = RTMPAllocateMemory((PVOID *)&cmdqelmt, sizeof(CmdQElmt));
+ status = os_alloc_mem(pAd, (u8 **) & cmdqelmt, sizeof(struct rt_cmdqelmt));
if ((status != NDIS_STATUS_SUCCESS) || (cmdqelmt == NULL))
return (NDIS_STATUS_RESOURCES);
- NdisZeroMemory(cmdqelmt, sizeof(CmdQElmt));
-
- if(InformationBufferLength > 0)
- {
- status = RTMPAllocateMemory((PVOID *)&cmdqelmt->buffer, InformationBufferLength);
- if ((status != NDIS_STATUS_SUCCESS) || (cmdqelmt->buffer == NULL))
- {
- NdisFreeMemory(cmdqelmt, sizeof(CmdQElmt), 0);
+ NdisZeroMemory(cmdqelmt, sizeof(struct rt_cmdqelmt));
+
+ if (InformationBufferLength > 0) {
+ status =
+ os_alloc_mem(pAd, (u8 **) & cmdqelmt->buffer,
+ InformationBufferLength);
+ if ((status != NDIS_STATUS_SUCCESS)
+ || (cmdqelmt->buffer == NULL)) {
+ os_free_mem(pAd, cmdqelmt);
return (NDIS_STATUS_RESOURCES);
- }
- else
- {
- NdisMoveMemory(cmdqelmt->buffer, pInformationBuffer, InformationBufferLength);
+ } else {
+ NdisMoveMemory(cmdqelmt->buffer, pInformationBuffer,
+ InformationBufferLength);
cmdqelmt->bufferlength = InformationBufferLength;
}
- }
- else
- {
+ } else {
cmdqelmt->buffer = NULL;
cmdqelmt->bufferlength = 0;
}
@@ -1082,30 +750,24 @@ NDIS_STATUS RTUSBEnqueueInternalCmd(
cmdqelmt->command = Oid;
cmdqelmt->CmdFromNdis = FALSE;
- if (cmdqelmt != NULL)
- {
+ if (cmdqelmt != NULL) {
NdisAcquireSpinLock(&pAd->CmdQLock);
- if (pAd->CmdQ.CmdQState & RT2870_THREAD_CAN_DO_INSERT)
- {
+ if (pAd->CmdQ.CmdQState & RTMP_TASK_CAN_DO_INSERT) {
EnqueueCmd((&pAd->CmdQ), cmdqelmt);
status = NDIS_STATUS_SUCCESS;
- }
- else
- {
+ } else {
status = NDIS_STATUS_FAILURE;
}
NdisReleaseSpinLock(&pAd->CmdQLock);
- if (status == NDIS_STATUS_FAILURE)
- {
+ if (status == NDIS_STATUS_FAILURE) {
if (cmdqelmt->buffer)
- NdisFreeMemory(cmdqelmt->buffer, cmdqelmt->bufferlength, 0);
- NdisFreeMemory(cmdqelmt, sizeof(CmdQElmt), 0);
- }
- else
- RTUSBCMDUp(pAd);
+ os_free_mem(pAd, cmdqelmt->buffer);
+ os_free_mem(pAd, cmdqelmt);
+ } else
+ RTUSBCMDUp(pAd);
}
- return(NDIS_STATUS_SUCCESS);
+ return (NDIS_STATUS_SUCCESS);
}
/*
@@ -1123,14 +785,11 @@ NDIS_STATUS RTUSBEnqueueInternalCmd(
========================================================================
*/
-VOID RTUSBDequeueCmd(
- IN PCmdQ cmdq,
- OUT PCmdQElmt *pcmdqelmt)
+void RTUSBDequeueCmd(struct rt_cmdq *cmdq, struct rt_cmdqelmt * * pcmdqelmt)
{
*pcmdqelmt = cmdq->head;
- if (*pcmdqelmt != NULL)
- {
+ if (*pcmdqelmt != NULL) {
cmdq->head = cmdq->head->next;
cmdq->size--;
if (cmdq->size == 0)
@@ -1164,7 +823,6 @@ VOID RTUSBDequeueCmd(
method can wait for it to complete. Since you don't have a handle on
the URB used, you can't cancel the request.
-
Routine Description:
Arguments:
@@ -1175,68 +833,109 @@ VOID RTUSBDequeueCmd(
========================================================================
*/
-NTSTATUS RTUSB_VendorRequest(
- IN PRTMP_ADAPTER pAd,
- IN UINT32 TransferFlags,
- IN UCHAR RequestType,
- IN UCHAR Request,
- IN USHORT Value,
- IN USHORT Index,
- IN PVOID TransferBuffer,
- IN UINT32 TransferBufferLength)
+int RTUSB_VendorRequest(struct rt_rtmp_adapter *pAd,
+ u32 TransferFlags,
+ u8 RequestType,
+ u8 Request,
+ u16 Value,
+ u16 Index,
+ void *TransferBuffer,
+ u32 TransferBufferLength)
{
- int ret;
- POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie;
+ int ret = 0;
+ struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie;
- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))
- {
+ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) {
DBGPRINT(RT_DEBUG_ERROR, ("device disconnected\n"));
return -1;
- }
- else if (in_interrupt())
- {
- DBGPRINT(RT_DEBUG_ERROR, ("in_interrupt, RTUSB_VendorRequest Request%02x Value%04x Offset%04x\n",Request,Value,Index));
+ } else if (in_interrupt()) {
+ DBGPRINT(RT_DEBUG_ERROR,
+ ("in_interrupt, RTUSB_VendorRequest Request%02x Value%04x Offset%04x\n",
+ Request, Value, Index));
return -1;
- }
- else
- {
+ } else {
#define MAX_RETRY_COUNT 10
int retryCount = 0;
- void *tmpBuf = TransferBuffer;
+ void *tmpBuf = TransferBuffer;
- // Acquire Control token
- do {
- if( RequestType == DEVICE_VENDOR_REQUEST_OUT)
- ret=usb_control_msg(pObj->pUsb_Dev, usb_sndctrlpipe( pObj->pUsb_Dev, 0 ), Request, RequestType, Value,Index, tmpBuf, TransferBufferLength, CONTROL_TIMEOUT_JIFFIES);
- else if(RequestType == DEVICE_VENDOR_REQUEST_IN)
- ret=usb_control_msg(pObj->pUsb_Dev, usb_rcvctrlpipe( pObj->pUsb_Dev, 0 ), Request, RequestType, Value,Index, tmpBuf, TransferBufferLength, CONTROL_TIMEOUT_JIFFIES);
- else
- {
- DBGPRINT(RT_DEBUG_ERROR, ("vendor request direction is failed\n"));
- ret = -1;
+ ret = down_interruptible(&(pAd->UsbVendorReq_semaphore));
+ if (pAd->UsbVendorReqBuf) {
+ ASSERT(TransferBufferLength < MAX_PARAM_BUFFER_SIZE);
+
+ tmpBuf = (void *)pAd->UsbVendorReqBuf;
+ NdisZeroMemory(pAd->UsbVendorReqBuf,
+ TransferBufferLength);
+
+ if (RequestType == DEVICE_VENDOR_REQUEST_OUT)
+ NdisMoveMemory(tmpBuf, TransferBuffer,
+ TransferBufferLength);
}
+ do {
+ if (RequestType == DEVICE_VENDOR_REQUEST_OUT)
+ ret =
+ usb_control_msg(pObj->pUsb_Dev,
+ usb_sndctrlpipe(pObj->
+ pUsb_Dev,
+ 0), Request,
+ RequestType, Value, Index,
+ tmpBuf,
+ TransferBufferLength,
+ CONTROL_TIMEOUT_JIFFIES);
+ else if (RequestType == DEVICE_VENDOR_REQUEST_IN)
+ ret =
+ usb_control_msg(pObj->pUsb_Dev,
+ usb_rcvctrlpipe(pObj->
+ pUsb_Dev,
+ 0), Request,
+ RequestType, Value, Index,
+ tmpBuf,
+ TransferBufferLength,
+ CONTROL_TIMEOUT_JIFFIES);
+ else {
+ DBGPRINT(RT_DEBUG_ERROR,
+ ("vendor request direction is failed\n"));
+ ret = -1;
+ }
+
retryCount++;
if (ret < 0) {
- printk("#\n");
+ DBGPRINT(RT_DEBUG_OFF, ("#\n"));
RTMPusecDelay(5000);
}
- } while((ret < 0) && (retryCount < MAX_RETRY_COUNT));
-
- if (ret < 0) {
-// DBGPRINT(RT_DEBUG_ERROR, ("USBVendorRequest failed ret=%d \n",ret));
- DBGPRINT(RT_DEBUG_ERROR, ("RTUSB_VendorRequest failed(%d),TxFlags=0x%x, ReqType=%s, Req=0x%x, Index=0x%x\n",
- ret, TransferFlags, (RequestType == DEVICE_VENDOR_REQUEST_OUT ? "OUT" : "IN"), Request, Index));
+ } while ((ret < 0) && (retryCount < MAX_RETRY_COUNT));
+
+ if ((pAd->UsbVendorReqBuf)
+ && (RequestType == DEVICE_VENDOR_REQUEST_IN))
+ NdisMoveMemory(TransferBuffer, tmpBuf,
+ TransferBufferLength);
+ up(&(pAd->UsbVendorReq_semaphore));
+
+ if (ret < 0) {
+ DBGPRINT(RT_DEBUG_ERROR,
+ ("RTUSB_VendorRequest failed(%d),TxFlags=0x%x, ReqType=%s, Req=0x%x, Index=0x%x\n",
+ ret, TransferFlags,
+ (RequestType ==
+ DEVICE_VENDOR_REQUEST_OUT ? "OUT" : "IN"),
+ Request, Index));
if (Request == 0x2)
- DBGPRINT(RT_DEBUG_ERROR, ("\tRequest Value=0x%04x!\n", Value));
+ DBGPRINT(RT_DEBUG_ERROR,
+ ("\tRequest Value=0x%04x!\n", Value));
+
+ if ((TransferBuffer != NULL)
+ && (TransferBufferLength > 0))
+ hex_dump("Failed TransferBuffer value",
+ TransferBuffer, TransferBufferLength);
+ }
- if ((TransferBuffer!= NULL) && (TransferBufferLength > 0))
- hex_dump("Failed TransferBuffer value", TransferBuffer, TransferBufferLength);
- }
}
- return ret;
+
+ if (ret != -1)
+ return STATUS_SUCCESS;
+ else
+ return STATUS_UNSUCCESSFUL;
}
/*
@@ -1255,28 +954,25 @@ NTSTATUS RTUSB_VendorRequest(
========================================================================
*/
-NTSTATUS RTUSB_ResetDevice(
- IN PRTMP_ADAPTER pAd)
+int RTUSB_ResetDevice(struct rt_rtmp_adapter *pAd)
{
- NTSTATUS Status = TRUE;
+ int Status = TRUE;
DBGPRINT_RAW(RT_DEBUG_TRACE, ("--->USB_ResetDevice\n"));
- //RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS);
+ /*RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS); */
return Status;
}
-VOID CMDHandler(
- IN PRTMP_ADAPTER pAd)
+void CMDHandler(struct rt_rtmp_adapter *pAd)
{
- PCmdQElmt cmdqelmt;
- PUCHAR pData;
- NDIS_STATUS NdisStatus = NDIS_STATUS_SUCCESS;
-// ULONG Now = 0;
- NTSTATUS ntStatus;
-// unsigned long IrqFlags;
-
- while (pAd->CmdQ.size > 0)
- {
+ struct rt_cmdqelmt *cmdqelmt;
+ u8 *pData;
+ int NdisStatus = NDIS_STATUS_SUCCESS;
+/* unsigned long Now = 0; */
+ int ntStatus;
+/* unsigned long IrqFlags; */
+
+ while (pAd && pAd->CmdQ.size > 0) {
NdisStatus = NDIS_STATUS_SUCCESS;
NdisAcquireSpinLock(&pAd->CmdQLock);
@@ -1288,591 +984,1129 @@ VOID CMDHandler(
pData = cmdqelmt->buffer;
- if(!(RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST) || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)))
- {
- switch (cmdqelmt->command)
- {
- case CMDTHREAD_CHECK_GPIO:
- {
- UINT32 data;
-
- {
- // Read GPIO pin2 as Hardware controlled radio state
-
- RTUSBReadMACRegister( pAd, GPIO_CTRL_CFG, &data);
-
- if (data & 0x04)
- {
- pAd->StaCfg.bHwRadio = TRUE;
- }
- else
- {
- pAd->StaCfg.bHwRadio = FALSE;
- }
+ if (!
+ (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)
+ || RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS))) {
+ switch (cmdqelmt->command) {
+ case CMDTHREAD_CHECK_GPIO:
+ {
+ u32 data;
- if(pAd->StaCfg.bRadio != (pAd->StaCfg.bHwRadio && pAd->StaCfg.bSwRadio))
- {
- pAd->StaCfg.bRadio = (pAd->StaCfg.bHwRadio && pAd->StaCfg.bSwRadio);
- if(pAd->StaCfg.bRadio == TRUE)
- {
- DBGPRINT_RAW(RT_DEBUG_ERROR, ("!!! Radio On !!!\n"));
-
- MlmeRadioOn(pAd);
- // Update extra information
- pAd->ExtraInfo = EXTRA_INFO_CLEAR;
- }
- else
- {
- DBGPRINT_RAW(RT_DEBUG_ERROR, ("!!! Radio Off !!!\n"));
+ {
+ /* Read GPIO pin2 as Hardware controlled radio state */
+
+ RTUSBReadMACRegister(pAd,
+ GPIO_CTRL_CFG,
+ &data);
+
+ if (data & 0x04) {
+ pAd->StaCfg.bHwRadio =
+ TRUE;
+ } else {
+ pAd->StaCfg.bHwRadio =
+ FALSE;
+ }
- MlmeRadioOff(pAd);
- // Update extra information
- pAd->ExtraInfo = HW_RADIO_OFF;
- }
+ if (pAd->StaCfg.bRadio !=
+ (pAd->StaCfg.bHwRadio
+ && pAd->StaCfg.bSwRadio)) {
+ pAd->StaCfg.bRadio =
+ (pAd->StaCfg.
+ bHwRadio
+ && pAd->StaCfg.
+ bSwRadio);
+ if (pAd->StaCfg.
+ bRadio == TRUE) {
+ DBGPRINT_RAW
+ (RT_DEBUG_ERROR,
+ ("!!! Radio On !!!\n"));
+
+ MlmeRadioOn
+ (pAd);
+ /* Update extra information */
+ pAd->ExtraInfo =
+ EXTRA_INFO_CLEAR;
+ } else {
+ DBGPRINT_RAW
+ (RT_DEBUG_ERROR,
+ ("!!! Radio Off !!!\n"));
+
+ MlmeRadioOff
+ (pAd);
+ /* Update extra information */
+ pAd->ExtraInfo =
+ HW_RADIO_OFF;
}
}
}
- break;
-
- case CMDTHREAD_QKERIODIC_EXECUT:
- {
- StaQuickResponeForRateUpExec(NULL, pAd, NULL, NULL);
- }
- break;
+ }
+ break;
- case CMDTHREAD_RESET_BULK_OUT:
- {
- UINT32 MACValue;
- UCHAR Index;
- int ret=0;
- PHT_TX_CONTEXT pHTTXContext;
-// RTMP_TX_RING *pTxRing;
- unsigned long IrqFlags;
-
- DBGPRINT_RAW(RT_DEBUG_TRACE, ("CmdThread : CMDTHREAD_RESET_BULK_OUT(ResetPipeid=0x%0x)===>\n", pAd->bulkResetPipeid));
- // All transfers must be aborted or cancelled before attempting to reset the pipe.
- //RTUSBCancelPendingBulkOutIRP(pAd);
- // Wait 10ms to let previous packet that are already in HW FIFO to clear. by MAXLEE 12-25-2007
- Index = 0;
- do
- {
- RTUSBReadMACRegister(pAd, TXRXQ_PCNT, &MACValue);
- if ((MACValue & 0xf00000/*0x800000*/) == 0)
- break;
- Index++;
- RTMPusecDelay(10000);
- }while(Index < 100);
- MACValue = 0;
- RTUSBReadMACRegister(pAd, USB_DMA_CFG, &MACValue);
- // To prevent Read Register error, we 2nd check the validity.
- if ((MACValue & 0xc00000) == 0)
- RTUSBReadMACRegister(pAd, USB_DMA_CFG, &MACValue);
- // To prevent Read Register error, we 3rd check the validity.
- if ((MACValue & 0xc00000) == 0)
- RTUSBReadMACRegister(pAd, USB_DMA_CFG, &MACValue);
- MACValue |= 0x80000;
- RTUSBWriteMACRegister(pAd, USB_DMA_CFG, MACValue);
-
- // Wait 1ms to prevent next URB to bulkout before HW reset. by MAXLEE 12-25-2007
- RTMPusecDelay(1000);
-
- MACValue &= (~0x80000);
- RTUSBWriteMACRegister(pAd, USB_DMA_CFG, MACValue);
- DBGPRINT_RAW(RT_DEBUG_TRACE, ("\tSet 0x2a0 bit19. Clear USB DMA TX path\n"));
-
- // Wait 5ms to prevent next URB to bulkout before HW reset. by MAXLEE 12-25-2007
- //RTMPusecDelay(5000);
-
- if ((pAd->bulkResetPipeid & BULKOUT_MGMT_RESET_FLAG) == BULKOUT_MGMT_RESET_FLAG)
- {
- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET);
- if (pAd->MgmtRing.TxSwFreeIdx < MGMT_RING_SIZE /* pMLMEContext->bWaitingBulkOut == TRUE */)
- {
- RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_MLME);
- }
- RTUSBKickBulkOut(pAd);
+ case CMDTHREAD_QKERIODIC_EXECUT:
+ {
+ StaQuickResponeForRateUpExec(NULL, pAd,
+ NULL,
+ NULL);
+ }
+ break;
- DBGPRINT_RAW(RT_DEBUG_TRACE, ("\tTX MGMT RECOVER Done!\n"));
+ case CMDTHREAD_RESET_BULK_OUT:
+ {
+ u32 MACValue;
+ u8 Index;
+ int ret = 0;
+ struct rt_ht_tx_context *pHTTXContext;
+/* struct rt_rtmp_tx_ring *pTxRing; */
+ unsigned long IrqFlags;
+
+ DBGPRINT_RAW(RT_DEBUG_TRACE,
+ ("CmdThread : CMDTHREAD_RESET_BULK_OUT(ResetPipeid=0x%0x)===>\n",
+ pAd->bulkResetPipeid));
+ /* All transfers must be aborted or cancelled before attempting to reset the pipe. */
+ /*RTUSBCancelPendingBulkOutIRP(pAd); */
+ /* Wait 10ms to let previous packet that are already in HW FIFO to clear. by MAXLEE 12-25-2007 */
+ Index = 0;
+ do {
+ RTUSBReadMACRegister(pAd,
+ TXRXQ_PCNT,
+ &MACValue);
+ if ((MACValue & 0xf00000
+ /*0x800000 */ ) == 0)
+ break;
+ Index++;
+ RTMPusecDelay(10000);
+ } while (Index < 100);
+ MACValue = 0;
+ RTUSBReadMACRegister(pAd, USB_DMA_CFG,
+ &MACValue);
+ /* To prevent Read Register error, we 2nd check the validity. */
+ if ((MACValue & 0xc00000) == 0)
+ RTUSBReadMACRegister(pAd,
+ USB_DMA_CFG,
+ &MACValue);
+ /* To prevent Read Register error, we 3rd check the validity. */
+ if ((MACValue & 0xc00000) == 0)
+ RTUSBReadMACRegister(pAd,
+ USB_DMA_CFG,
+ &MACValue);
+ MACValue |= 0x80000;
+ RTUSBWriteMACRegister(pAd, USB_DMA_CFG,
+ MACValue);
+
+ /* Wait 1ms to prevent next URB to bulkout before HW reset. by MAXLEE 12-25-2007 */
+ RTMPusecDelay(1000);
+
+ MACValue &= (~0x80000);
+ RTUSBWriteMACRegister(pAd, USB_DMA_CFG,
+ MACValue);
+ DBGPRINT_RAW(RT_DEBUG_TRACE,
+ ("\tSet 0x2a0 bit19. Clear USB DMA TX path\n"));
+
+ /* Wait 5ms to prevent next URB to bulkout before HW reset. by MAXLEE 12-25-2007 */
+ /*RTMPusecDelay(5000); */
+
+ if ((pAd->
+ bulkResetPipeid &
+ BULKOUT_MGMT_RESET_FLAG) ==
+ BULKOUT_MGMT_RESET_FLAG) {
+ RTMP_CLEAR_FLAG(pAd,
+ fRTMP_ADAPTER_BULKOUT_RESET);
+ if (pAd->MgmtRing.TxSwFreeIdx <
+ MGMT_RING_SIZE
+ /* pMLMEContext->bWaitingBulkOut == TRUE */
+ ) {
+ RTUSB_SET_BULK_FLAG(pAd,
+ fRTUSB_BULK_OUT_MLME);
}
- else
- {
- pHTTXContext = &(pAd->TxContext[pAd->bulkResetPipeid]);
- //NdisAcquireSpinLock(&pAd->BulkOutLock[pAd->bulkResetPipeid]);
- RTMP_INT_LOCK(&pAd->BulkOutLock[pAd->bulkResetPipeid], IrqFlags);
- if ( pAd->BulkOutPending[pAd->bulkResetPipeid] == FALSE)
+ RTUSBKickBulkOut(pAd);
+
+ DBGPRINT_RAW(RT_DEBUG_TRACE,
+ ("\tTX MGMT RECOVER Done!\n"));
+ } else {
+ pHTTXContext =
+ &(pAd->
+ TxContext[pAd->
+ bulkResetPipeid]);
+ /*NdisAcquireSpinLock(&pAd->BulkOutLock[pAd->bulkResetPipeid]); */
+ RTMP_INT_LOCK(&pAd->
+ BulkOutLock[pAd->
+ bulkResetPipeid],
+ IrqFlags);
+ if (pAd->
+ BulkOutPending[pAd->
+ bulkResetPipeid]
+ == FALSE) {
+ pAd->
+ BulkOutPending[pAd->
+ bulkResetPipeid]
+ = TRUE;
+ pHTTXContext->
+ IRPPending = TRUE;
+ pAd->
+ watchDogTxPendingCnt
+ [pAd->
+ bulkResetPipeid] =
+ 1;
+
+ /* no matter what, clean the flag */
+ RTMP_CLEAR_FLAG(pAd,
+ fRTMP_ADAPTER_BULKOUT_RESET);
+
+ /*NdisReleaseSpinLock(&pAd->BulkOutLock[pAd->bulkResetPipeid]); */
+ RTMP_INT_UNLOCK(&pAd->
+ BulkOutLock
+ [pAd->
+ bulkResetPipeid],
+ IrqFlags);
{
- pAd->BulkOutPending[pAd->bulkResetPipeid] = TRUE;
- pHTTXContext->IRPPending = TRUE;
- pAd->watchDogTxPendingCnt[pAd->bulkResetPipeid] = 1;
-
- // no matter what, clean the flag
- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET);
-
- //NdisReleaseSpinLock(&pAd->BulkOutLock[pAd->bulkResetPipeid]);
- RTMP_INT_UNLOCK(&pAd->BulkOutLock[pAd->bulkResetPipeid], IrqFlags);
-/*-----------------------------------------------------------------------------------------------*/
-/*-----------------------------------------------------------------------------------------------*/
- {
- RTUSBInitHTTxDesc(pAd, pHTTXContext, pAd->bulkResetPipeid, pHTTXContext->BulkOutSize, (usb_complete_t)RTUSBBulkOutDataPacketComplete);
-
- if((ret = RTUSB_SUBMIT_URB(pHTTXContext->pUrb))!=0)
- {
- RTMP_INT_LOCK(&pAd->BulkOutLock[pAd->bulkResetPipeid], IrqFlags);
- pAd->BulkOutPending[pAd->bulkResetPipeid] = FALSE;
- pHTTXContext->IRPPending = FALSE;
- pAd->watchDogTxPendingCnt[pAd->bulkResetPipeid] = 0;
- RTMP_INT_UNLOCK(&pAd->BulkOutLock[pAd->bulkResetPipeid], IrqFlags);
-
- DBGPRINT(RT_DEBUG_ERROR, ("CmdThread : CMDTHREAD_RESET_BULK_OUT: Submit Tx URB failed %d\n", ret));
- }
- else
- {
- RTMP_IRQ_LOCK(&pAd->BulkOutLock[pAd->bulkResetPipeid], IrqFlags);
- DBGPRINT_RAW(RT_DEBUG_TRACE,("\tCMDTHREAD_RESET_BULK_OUT: TxContext[%d]:CWPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d, pending=%d!\n",
- pAd->bulkResetPipeid, pHTTXContext->CurWritePosition, pHTTXContext->NextBulkOutPosition,
- pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad, pAd->BulkOutPending[pAd->bulkResetPipeid]));
- DBGPRINT_RAW(RT_DEBUG_TRACE,("\t\tBulkOut Req=0x%lx, Complete=0x%lx, Other=0x%lx\n",
- pAd->BulkOutReq, pAd->BulkOutComplete, pAd->BulkOutCompleteOther));
- RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[pAd->bulkResetPipeid], IrqFlags);
- DBGPRINT_RAW(RT_DEBUG_TRACE, ("\tCMDTHREAD_RESET_BULK_OUT: Submit Tx DATA URB for failed BulkReq(0x%lx) Done, status=%d!\n", pAd->bulkResetReq[pAd->bulkResetPipeid], pHTTXContext->pUrb->status));
-
- }
+ RTUSBInitHTTxDesc
+ (pAd,
+ pHTTXContext,
+ pAd->
+ bulkResetPipeid,
+ pHTTXContext->
+ BulkOutSize,
+ (usb_complete_t)
+ RTUSBBulkOutDataPacketComplete);
+
+ if ((ret =
+ RTUSB_SUBMIT_URB
+ (pHTTXContext->
+ pUrb)) !=
+ 0) {
+ RTMP_INT_LOCK
+ (&pAd->
+ BulkOutLock
+ [pAd->
+ bulkResetPipeid],
+ IrqFlags);
+ pAd->
+ BulkOutPending
+ [pAd->
+ bulkResetPipeid]
+ =
+ FALSE;
+ pHTTXContext->
+ IRPPending
+ =
+ FALSE;
+ pAd->
+ watchDogTxPendingCnt
+ [pAd->
+ bulkResetPipeid]
+ = 0;
+ RTMP_INT_UNLOCK
+ (&pAd->
+ BulkOutLock
+ [pAd->
+ bulkResetPipeid],
+ IrqFlags);
+
+ DBGPRINT
+ (RT_DEBUG_ERROR,
+ ("CmdThread : CMDTHREAD_RESET_BULK_OUT: Submit Tx URB failed %d\n",
+ ret));
+ } else {
+ RTMP_IRQ_LOCK
+ (&pAd->
+ BulkOutLock
+ [pAd->
+ bulkResetPipeid],
+ IrqFlags);
+ DBGPRINT_RAW
+ (RT_DEBUG_TRACE,
+ ("\tCMDTHREAD_RESET_BULK_OUT: TxContext[%d]:CWPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d, pending=%d!\n",
+ pAd->
+ bulkResetPipeid,
+ pHTTXContext->
+ CurWritePosition,
+ pHTTXContext->
+ NextBulkOutPosition,
+ pHTTXContext->
+ ENextBulkOutPosition,
+ pHTTXContext->
+ bCopySavePad,
+ pAd->
+ BulkOutPending
+ [pAd->
+ bulkResetPipeid]));
+ DBGPRINT_RAW
+ (RT_DEBUG_TRACE,
+ ("\t\tBulkOut Req=0x%lx, Complete=0x%lx, Other=0x%lx\n",
+ pAd->
+ BulkOutReq,
+ pAd->
+ BulkOutComplete,
+ pAd->
+ BulkOutCompleteOther));
+ RTMP_IRQ_UNLOCK
+ (&pAd->
+ BulkOutLock
+ [pAd->
+ bulkResetPipeid],
+ IrqFlags);
+ DBGPRINT_RAW
+ (RT_DEBUG_TRACE,
+ ("\tCMDTHREAD_RESET_BULK_OUT: Submit Tx DATA URB for failed BulkReq(0x%lx) Done, status=%d!\n",
+ pAd->
+ bulkResetReq
+ [pAd->
+ bulkResetPipeid],
+ pHTTXContext->
+ pUrb->
+ status));
+
}
}
- else
- {
- //NdisReleaseSpinLock(&pAd->BulkOutLock[pAd->bulkResetPipeid]);
- //RTMP_INT_UNLOCK(&pAd->BulkOutLock[pAd->bulkResetPipeid], IrqFlags);
-
- DBGPRINT_RAW(RT_DEBUG_ERROR, ("CmdThread : TX DATA RECOVER FAIL for BulkReq(0x%lx) because BulkOutPending[%d] is TRUE!\n", pAd->bulkResetReq[pAd->bulkResetPipeid], pAd->bulkResetPipeid));
- if (pAd->bulkResetPipeid == 0)
- {
- UCHAR pendingContext = 0;
- PHT_TX_CONTEXT pHTTXContext = (PHT_TX_CONTEXT)(&pAd->TxContext[pAd->bulkResetPipeid ]);
- PTX_CONTEXT pMLMEContext = (PTX_CONTEXT)(pAd->MgmtRing.Cell[pAd->MgmtRing.TxDmaIdx].AllocVa);
- PTX_CONTEXT pNULLContext = (PTX_CONTEXT)(&pAd->PsPollContext);
- PTX_CONTEXT pPsPollContext = (PTX_CONTEXT)(&pAd->NullContext);
-
- if (pHTTXContext->IRPPending)
- pendingContext |= 1;
- else if (pMLMEContext->IRPPending)
- pendingContext |= 2;
- else if (pNULLContext->IRPPending)
- pendingContext |= 4;
- else if (pPsPollContext->IRPPending)
- pendingContext |= 8;
- else
- pendingContext = 0;
-
- DBGPRINT_RAW(RT_DEBUG_ERROR, ("\tTX Occupied by %d!\n", pendingContext));
- }
-
- // no matter what, clean the flag
- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BULKOUT_RESET);
-
- RTMP_INT_UNLOCK(&pAd->BulkOutLock[pAd->bulkResetPipeid], IrqFlags);
+ } else {
+ /*NdisReleaseSpinLock(&pAd->BulkOutLock[pAd->bulkResetPipeid]); */
+ /*RTMP_INT_UNLOCK(&pAd->BulkOutLock[pAd->bulkResetPipeid], IrqFlags); */
+
+ DBGPRINT_RAW
+ (RT_DEBUG_ERROR,
+ ("CmdThread : TX DATA RECOVER FAIL for BulkReq(0x%lx) because BulkOutPending[%d] is TRUE!\n",
+ pAd->
+ bulkResetReq[pAd->
+ bulkResetPipeid],
+ pAd->
+ bulkResetPipeid));
+ if (pAd->
+ bulkResetPipeid ==
+ 0) {
+ u8
+ pendingContext
+ = 0;
+ struct rt_ht_tx_context *
+ pHTTXContext
+ =
+ (struct rt_ht_tx_context *)
+ (&pAd->
+ TxContext
+ [pAd->
+ bulkResetPipeid]);
+ struct rt_tx_context *
+ pMLMEContext
+ =
+ (struct rt_tx_context *)
+ (pAd->
+ MgmtRing.
+ Cell[pAd->
+ MgmtRing.
+ TxDmaIdx].
+ AllocVa);
+ struct rt_tx_context *
+ pNULLContext
+ =
+ (struct rt_tx_context *)
+ (&pAd->
+ PsPollContext);
+ struct rt_tx_context *
+ pPsPollContext
+ =
+ (struct rt_tx_context *)
+ (&pAd->
+ NullContext);
+
+ if (pHTTXContext->IRPPending)
+ pendingContext
+ |=
+ 1;
+ else if
+ (pMLMEContext->
+ IRPPending)
+ pendingContext
+ |=
+ 2;
+ else if
+ (pNULLContext->
+ IRPPending)
+ pendingContext
+ |=
+ 4;
+ else if
+ (pPsPollContext->
+ IRPPending)
+ pendingContext
+ |=
+ 8;
+ else
+ pendingContext
+ = 0;
- RTUSB_SET_BULK_FLAG(pAd, (fRTUSB_BULK_OUT_DATA_NORMAL << pAd->bulkResetPipeid));
+ DBGPRINT_RAW
+ (RT_DEBUG_ERROR,
+ ("\tTX Occupied by %d!\n",
+ pendingContext));
}
-
- RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS);
- //RTUSBKickBulkOut(pAd);
+ /* no matter what, clean the flag */
+ RTMP_CLEAR_FLAG(pAd,
+ fRTMP_ADAPTER_BULKOUT_RESET);
+
+ RTMP_INT_UNLOCK(&pAd->
+ BulkOutLock
+ [pAd->
+ bulkResetPipeid],
+ IrqFlags);
+
+ RTUSB_SET_BULK_FLAG(pAd,
+ (fRTUSB_BULK_OUT_DATA_NORMAL
+ <<
+ pAd->
+ bulkResetPipeid));
}
+ RTMPDeQueuePacket(pAd, FALSE,
+ NUM_OF_TX_RING,
+ MAX_TX_PROCESS);
+ /*RTUSBKickBulkOut(pAd); */
}
- /*
- // Don't cancel BULKIN.
- while ((atomic_read(&pAd->PendingRx) > 0) &&
- (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)))
- {
- if (atomic_read(&pAd->PendingRx) > 0)
- {
- DBGPRINT_RAW(RT_DEBUG_ERROR, ("BulkIn IRP Pending!!cancel it!\n"));
- RTUSBCancelPendingBulkInIRP(pAd);
- }
- RTMPusecDelay(100000);
- }
- if ((atomic_read(&pAd->PendingRx) == 0) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)))
- {
- UCHAR i;
- RTUSBRxPacket(pAd);
- pAd->NextRxBulkInReadIndex = 0; // Next Rx Read index
- pAd->NextRxBulkInIndex = 0; // Rx Bulk pointer
- for (i = 0; i < (RX_RING_SIZE); i++)
- {
- PRX_CONTEXT pRxContext = &(pAd->RxContext[i]);
+ }
+ /*
+ // Don't cancel BULKIN.
+ while ((atomic_read(&pAd->PendingRx) > 0) &&
+ (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)))
+ {
+ if (atomic_read(&pAd->PendingRx) > 0)
+ {
+ DBGPRINT_RAW(RT_DEBUG_ERROR, ("BulkIn IRP Pending!!cancel it!\n"));
+ RTUSBCancelPendingBulkInIRP(pAd);
+ }
+ RTMPusecDelay(100000);
+ }
+
+ if ((atomic_read(&pAd->PendingRx) == 0) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)))
+ {
+ u8 i;
+ RTUSBRxPacket(pAd);
+ pAd->NextRxBulkInReadIndex = 0; // Next Rx Read index
+ pAd->NextRxBulkInIndex = 0; // Rx Bulk pointer
+ for (i = 0; i < (RX_RING_SIZE); i++)
+ {
+ struct rt_rx_context *pRxContext = &(pAd->RxContext[i]);
+
+ pRxContext->pAd = pAd;
+ pRxContext->InUse = FALSE;
+ pRxContext->IRPPending = FALSE;
+ pRxContext->Readable = FALSE;
+ pRxContext->ReorderInUse = FALSE;
+
+ }
+ RTUSBBulkReceive(pAd);
+ DBGPRINT_RAW(RT_DEBUG_ERROR, ("RTUSBBulkReceive\n"));
+ } */
+ DBGPRINT_RAW(RT_DEBUG_TRACE,
+ ("CmdThread : CMDTHREAD_RESET_BULK_OUT<===\n"));
+ break;
- pRxContext->pAd = pAd;
- pRxContext->InUse = FALSE;
- pRxContext->IRPPending = FALSE;
- pRxContext->Readable = FALSE;
- pRxContext->ReorderInUse = FALSE;
+ case CMDTHREAD_RESET_BULK_IN:
+ DBGPRINT_RAW(RT_DEBUG_TRACE,
+ ("CmdThread : CMDTHREAD_RESET_BULK_IN === >\n"));
- }
- RTUSBBulkReceive(pAd);
- DBGPRINT_RAW(RT_DEBUG_ERROR, ("RTUSBBulkReceive\n"));
- }*/
- DBGPRINT_RAW(RT_DEBUG_TRACE, ("CmdThread : CMDTHREAD_RESET_BULK_OUT<===\n"));
- break;
+ /* All transfers must be aborted or cancelled before attempting to reset the pipe. */
+ {
+ u32 MACValue;
- case CMDTHREAD_RESET_BULK_IN:
- DBGPRINT_RAW(RT_DEBUG_TRACE, ("CmdThread : CMDTHREAD_RESET_BULK_IN === >\n"));
-
- // All transfers must be aborted or cancelled before attempting to reset the pipe.
{
- UINT32 MACValue;
-/*-----------------------------------------------------------------------------------------------*/
-/*-----------------------------------------------------------------------------------------------*/
- {
- //while ((atomic_read(&pAd->PendingRx) > 0) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)))
- if((pAd->PendingRx > 0) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)))
+ /*while ((atomic_read(&pAd->PendingRx) > 0) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) */
+ if ((pAd->PendingRx > 0)
+ &&
+ (!RTMP_TEST_FLAG
+ (pAd,
+ fRTMP_ADAPTER_NIC_NOT_EXIST)))
{
- DBGPRINT_RAW(RT_DEBUG_ERROR, ("BulkIn IRP Pending!!!\n"));
- RTUSBCancelPendingBulkInIRP(pAd);
+ DBGPRINT_RAW
+ (RT_DEBUG_ERROR,
+ ("BulkIn IRP Pending!!!\n"));
+ RTUSBCancelPendingBulkInIRP
+ (pAd);
RTMPusecDelay(100000);
pAd->PendingRx = 0;
}
- }
-
- // Wait 10ms before reading register.
- RTMPusecDelay(10000);
- ntStatus = RTUSBReadMACRegister(pAd, MAC_CSR0, &MACValue);
-
- if ((NT_SUCCESS(ntStatus) == TRUE) &&
- (!(RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | fRTMP_ADAPTER_RADIO_OFF |
- fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)))))
- {
- UCHAR i;
+ }
- if (RTMP_TEST_FLAG(pAd, (fRTMP_ADAPTER_RESET_IN_PROGRESS | fRTMP_ADAPTER_RADIO_OFF |
- fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)))
+ /* Wait 10ms before reading register. */
+ RTMPusecDelay(10000);
+ ntStatus =
+ RTUSBReadMACRegister(pAd, MAC_CSR0,
+ &MACValue);
+
+ if ((NT_SUCCESS(ntStatus) == TRUE) &&
+ (!(RTMP_TEST_FLAG
+ (pAd,
+ (fRTMP_ADAPTER_RESET_IN_PROGRESS
+ | fRTMP_ADAPTER_RADIO_OFF |
+ fRTMP_ADAPTER_HALT_IN_PROGRESS
+ |
+ fRTMP_ADAPTER_NIC_NOT_EXIST)))))
+ {
+ u8 i;
+
+ if (RTMP_TEST_FLAG
+ (pAd,
+ (fRTMP_ADAPTER_RESET_IN_PROGRESS
+ | fRTMP_ADAPTER_RADIO_OFF
+ |
+ fRTMP_ADAPTER_HALT_IN_PROGRESS
+ |
+ fRTMP_ADAPTER_NIC_NOT_EXIST)))
+ break;
+ pAd->NextRxBulkInPosition =
+ pAd->RxContext[pAd->
+ NextRxBulkInIndex].
+ BulkInOffset;
+ DBGPRINT(RT_DEBUG_TRACE,
+ ("BULK_IN_RESET: NBIIdx=0x%x,NBIRIdx=0x%x, BIRPos=0x%lx. BIReq=x%lx, BIComplete=0x%lx, BICFail0x%lx\n",
+ pAd->
+ NextRxBulkInIndex,
+ pAd->
+ NextRxBulkInReadIndex,
+ pAd->
+ NextRxBulkInPosition,
+ pAd->BulkInReq,
+ pAd->BulkInComplete,
+ pAd->
+ BulkInCompleteFail));
+ for (i = 0; i < RX_RING_SIZE;
+ i++) {
+ DBGPRINT(RT_DEBUG_TRACE,
+ ("\tRxContext[%d]: IRPPending=%d, InUse=%d, Readable=%d!\n",
+ i,
+ pAd->
+ RxContext[i].
+ IRPPending,
+ pAd->
+ RxContext[i].
+ InUse,
+ pAd->
+ RxContext[i].
+ Readable));
+ }
+ /*
+
+ DBGPRINT_RAW(RT_DEBUG_ERROR, ("==========================================\n"));
+
+ pAd->NextRxBulkInReadIndex = 0; // Next Rx Read index
+ pAd->NextRxBulkInIndex = 0; // Rx Bulk pointer
+ for (i = 0; i < (RX_RING_SIZE); i++)
+ {
+ struct rt_rx_context *pRxContext = &(pAd->RxContext[i]);
+
+ pRxContext->pAd = pAd;
+ pRxContext->InUse = FALSE;
+ pRxContext->IRPPending = FALSE;
+ pRxContext->Readable = FALSE;
+ pRxContext->ReorderInUse = FALSE;
+
+ } */
+ RTMP_CLEAR_FLAG(pAd,
+ fRTMP_ADAPTER_BULKIN_RESET);
+ for (i = 0;
+ i <
+ pAd->CommonCfg.
+ NumOfBulkInIRP; i++) {
+ /*RTUSBBulkReceive(pAd); */
+ struct rt_rx_context *pRxContext;
+ PURB pUrb;
+ int ret = 0;
+ unsigned long IrqFlags;
+
+ RTMP_IRQ_LOCK(&pAd->
+ BulkInLock,
+ IrqFlags);
+ pRxContext =
+ &(pAd->
+ RxContext[pAd->
+ NextRxBulkInIndex]);
+ if ((pAd->PendingRx > 0)
+ || (pRxContext->
+ Readable ==
+ TRUE)
+ || (pRxContext->
+ InUse ==
+ TRUE)) {
+ RTMP_IRQ_UNLOCK
+ (&pAd->
+ BulkInLock,
+ IrqFlags);
break;
- pAd->NextRxBulkInPosition = pAd->RxContext[pAd->NextRxBulkInIndex].BulkInOffset;
- DBGPRINT(RT_DEBUG_TRACE, ("BULK_IN_RESET: NBIIdx=0x%x,NBIRIdx=0x%x, BIRPos=0x%lx. BIReq=x%lx, BIComplete=0x%lx, BICFail0x%lx\n",
- pAd->NextRxBulkInIndex, pAd->NextRxBulkInReadIndex, pAd->NextRxBulkInPosition, pAd->BulkInReq, pAd->BulkInComplete, pAd->BulkInCompleteFail));
- for (i = 0; i < RX_RING_SIZE; i++)
- {
- DBGPRINT(RT_DEBUG_TRACE, ("\tRxContext[%d]: IRPPending=%d, InUse=%d, Readable=%d!\n"
- , i, pAd->RxContext[i].IRPPending, pAd->RxContext[i].InUse, pAd->RxContext[i].Readable));
}
- /*
-
- DBGPRINT_RAW(RT_DEBUG_ERROR, ("==========================================\n"));
-
- pAd->NextRxBulkInReadIndex = 0; // Next Rx Read index
- pAd->NextRxBulkInIndex = 0; // Rx Bulk pointer
- for (i = 0; i < (RX_RING_SIZE); i++)
- {
- PRX_CONTEXT pRxContext = &(pAd->RxContext[i]);
-
- pRxContext->pAd = pAd;
- pRxContext->InUse = FALSE;
- pRxContext->IRPPending = FALSE;
- pRxContext->Readable = FALSE;
- pRxContext->ReorderInUse = FALSE;
-
- }*/
- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BULKIN_RESET);
- for (i = 0; i < pAd->CommonCfg.NumOfBulkInIRP; i++)
- {
- //RTUSBBulkReceive(pAd);
- PRX_CONTEXT pRxContext;
- PURB pUrb;
- int ret = 0;
- unsigned long IrqFlags;
-
-
- RTMP_IRQ_LOCK(&pAd->BulkInLock, IrqFlags);
- pRxContext = &(pAd->RxContext[pAd->NextRxBulkInIndex]);
- if ((pAd->PendingRx > 0) || (pRxContext->Readable == TRUE) || (pRxContext->InUse == TRUE))
- {
- RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags);
- break;
- }
- pRxContext->InUse = TRUE;
- pRxContext->IRPPending = TRUE;
- pAd->PendingRx++;
- pAd->BulkInReq++;
- RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags);
-
- // Init Rx context descriptor
- RTUSBInitRxDesc(pAd, pRxContext);
- pUrb = pRxContext->pUrb;
- if ((ret = RTUSB_SUBMIT_URB(pUrb))!=0)
- { // fail
-
- RTMP_IRQ_LOCK(&pAd->BulkInLock, IrqFlags);
- pRxContext->InUse = FALSE;
- pRxContext->IRPPending = FALSE;
- pAd->PendingRx--;
- pAd->BulkInReq--;
- RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags);
- DBGPRINT(RT_DEBUG_ERROR, ("CMDTHREAD_RESET_BULK_IN: Submit Rx URB failed(%d), status=%d\n", ret, pUrb->status));
- }
- else
- { // success
- DBGPRINT_RAW(RT_DEBUG_TRACE, ("CMDTHREAD_RESET_BULK_IN: Submit Rx URB Done, status=%d!\n", pUrb->status));
- ASSERT((pRxContext->InUse == pRxContext->IRPPending));
- }
- }
-
- }
- else
- {
- // Card must be removed
- if (NT_SUCCESS(ntStatus) != TRUE)
- {
- RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST);
- DBGPRINT_RAW(RT_DEBUG_ERROR, ("CMDTHREAD_RESET_BULK_IN: Read Register Failed!Card must be removed!!\n\n"));
+ pRxContext->InUse =
+ TRUE;
+ pRxContext->IRPPending =
+ TRUE;
+ pAd->PendingRx++;
+ pAd->BulkInReq++;
+ RTMP_IRQ_UNLOCK(&pAd->
+ BulkInLock,
+ IrqFlags);
+
+ /* Init Rx context descriptor */
+ RTUSBInitRxDesc(pAd,
+ pRxContext);
+ pUrb = pRxContext->pUrb;
+ if ((ret = RTUSB_SUBMIT_URB(pUrb)) != 0) { /* fail */
+
+ RTMP_IRQ_LOCK
+ (&pAd->
+ BulkInLock,
+ IrqFlags);
+ pRxContext->
+ InUse =
+ FALSE;
+ pRxContext->
+ IRPPending =
+ FALSE;
+ pAd->
+ PendingRx--;
+ pAd->
+ BulkInReq--;
+ RTMP_IRQ_UNLOCK
+ (&pAd->
+ BulkInLock,
+ IrqFlags);
+ DBGPRINT
+ (RT_DEBUG_ERROR,
+ ("CMDTHREAD_RESET_BULK_IN: Submit Rx URB failed(%d), status=%d\n",
+ ret,
+ pUrb->
+ status));
+ } else { /* success */
+ /*DBGPRINT(RT_DEBUG_TRACE, ("BIDone, Pend=%d,BIIdx=%d,BIRIdx=%d!\n", */
+ /* pAd->PendingRx, pAd->NextRxBulkInIndex, pAd->NextRxBulkInReadIndex)); */
+ DBGPRINT_RAW
+ (RT_DEBUG_TRACE,
+ ("CMDTHREAD_RESET_BULK_IN: Submit Rx URB Done, status=%d!\n",
+ pUrb->
+ status));
+ ASSERT((pRxContext->InUse == pRxContext->IRPPending));
}
- else
- {
- DBGPRINT_RAW(RT_DEBUG_ERROR, ("CMDTHREAD_RESET_BULK_IN: Cannot do bulk in because flags(0x%lx) on !\n", pAd->Flags));
}
- }
- }
- DBGPRINT_RAW(RT_DEBUG_TRACE, ("CmdThread : CMDTHREAD_RESET_BULK_IN <===\n"));
- break;
- case CMDTHREAD_SET_ASIC_WCID:
- {
- RT_SET_ASIC_WCID SetAsicWcid;
- USHORT offset;
- UINT32 MACValue, MACRValue = 0;
- SetAsicWcid = *((PRT_SET_ASIC_WCID)(pData));
-
- if (SetAsicWcid.WCID >= MAX_LEN_OF_MAC_TABLE)
- return;
-
- offset = MAC_WCID_BASE + ((UCHAR)SetAsicWcid.WCID)*HW_WCID_ENTRY_SIZE;
-
- DBGPRINT_RAW(RT_DEBUG_TRACE, ("CmdThread : CMDTHREAD_SET_ASIC_WCID : WCID = %ld, SetTid = %lx, DeleteTid = %lx.\n", SetAsicWcid.WCID, SetAsicWcid.SetTid, SetAsicWcid.DeleteTid));
- MACValue = (pAd->MacTab.Content[SetAsicWcid.WCID].Addr[3]<<24)+(pAd->MacTab.Content[SetAsicWcid.WCID].Addr[2]<<16)+(pAd->MacTab.Content[SetAsicWcid.WCID].Addr[1]<<8)+(pAd->MacTab.Content[SetAsicWcid.WCID].Addr[0]);
- DBGPRINT_RAW(RT_DEBUG_TRACE, ("1-MACValue= %x,\n", MACValue));
- RTUSBWriteMACRegister(pAd, offset, MACValue);
- // Read bitmask
- RTUSBReadMACRegister(pAd, offset+4, &MACRValue);
- if ( SetAsicWcid.DeleteTid != 0xffffffff)
- MACRValue &= (~SetAsicWcid.DeleteTid);
- if (SetAsicWcid.SetTid != 0xffffffff)
- MACRValue |= (SetAsicWcid.SetTid);
- MACRValue &= 0xffff0000;
-
- MACValue = (pAd->MacTab.Content[SetAsicWcid.WCID].Addr[5]<<8)+pAd->MacTab.Content[SetAsicWcid.WCID].Addr[4];
- MACValue |= MACRValue;
- RTUSBWriteMACRegister(pAd, offset+4, MACValue);
-
- DBGPRINT_RAW(RT_DEBUG_TRACE, ("2-MACValue= %x,\n", MACValue));
+ } else {
+ /* Card must be removed */
+ if (NT_SUCCESS(ntStatus) !=
+ TRUE) {
+ RTMP_SET_FLAG(pAd,
+ fRTMP_ADAPTER_NIC_NOT_EXIST);
+ DBGPRINT_RAW
+ (RT_DEBUG_ERROR,
+ ("CMDTHREAD_RESET_BULK_IN: Read Register Failed!Card must be removed!!\n\n"));
+ } else {
+ DBGPRINT_RAW
+ (RT_DEBUG_ERROR,
+ ("CMDTHREAD_RESET_BULK_IN: Cannot do bulk in because flags(0x%lx) on !\n",
+ pAd->Flags));
+ }
}
- break;
+ }
+ DBGPRINT_RAW(RT_DEBUG_TRACE,
+ ("CmdThread : CMDTHREAD_RESET_BULK_IN <===\n"));
+ break;
- case CMDTHREAD_SET_ASIC_WCID_CIPHER:
- {
- RT_SET_ASIC_WCID_ATTRI SetAsicWcidAttri;
- USHORT offset;
- UINT32 MACRValue = 0;
- SHAREDKEY_MODE_STRUC csr1;
- SetAsicWcidAttri = *((PRT_SET_ASIC_WCID_ATTRI)(pData));
-
- if (SetAsicWcidAttri.WCID >= MAX_LEN_OF_MAC_TABLE)
- return;
-
- offset = MAC_WCID_ATTRIBUTE_BASE + ((UCHAR)SetAsicWcidAttri.WCID)*HW_WCID_ATTRI_SIZE;
-
- DBGPRINT_RAW(RT_DEBUG_TRACE, ("Cmd : CMDTHREAD_SET_ASIC_WCID_CIPHER : WCID = %ld, Cipher = %lx.\n", SetAsicWcidAttri.WCID, SetAsicWcidAttri.Cipher));
- // Read bitmask
- RTUSBReadMACRegister(pAd, offset, &MACRValue);
- MACRValue = 0;
- MACRValue |= (((UCHAR)SetAsicWcidAttri.Cipher) << 1);
-
- RTUSBWriteMACRegister(pAd, offset, MACRValue);
- DBGPRINT_RAW(RT_DEBUG_TRACE, ("2-offset = %x , MACValue= %x,\n", offset, MACRValue));
-
- offset = PAIRWISE_IVEIV_TABLE_BASE + ((UCHAR)SetAsicWcidAttri.WCID)*HW_IVEIV_ENTRY_SIZE;
- MACRValue = 0;
- if ( (SetAsicWcidAttri.Cipher <= CIPHER_WEP128))
- MACRValue |= ( pAd->StaCfg.DefaultKeyId << 30);
- else
- MACRValue |= (0x20000000);
- RTUSBWriteMACRegister(pAd, offset, MACRValue);
- DBGPRINT_RAW(RT_DEBUG_TRACE, ("2-offset = %x , MACValue= %x,\n", offset, MACRValue));
-
- //
- // Update cipher algorithm. WSTA always use BSS0
- //
- // for adhoc mode only ,because wep status slow than add key, when use zero config
- if (pAd->StaCfg.BssType == BSS_ADHOC )
- {
- offset = MAC_WCID_ATTRIBUTE_BASE;
+ case CMDTHREAD_SET_ASIC_WCID:
+ {
+ struct rt_set_asic_wcid SetAsicWcid;
+ u16 offset;
+ u32 MACValue, MACRValue = 0;
+ SetAsicWcid =
+ *((struct rt_set_asic_wcid *)(pData));
+
+ if (SetAsicWcid.WCID >=
+ MAX_LEN_OF_MAC_TABLE)
+ return;
+
+ offset =
+ MAC_WCID_BASE +
+ ((u8)SetAsicWcid.WCID) *
+ HW_WCID_ENTRY_SIZE;
+
+ DBGPRINT_RAW(RT_DEBUG_TRACE,
+ ("CmdThread : CMDTHREAD_SET_ASIC_WCID : WCID = %ld, SetTid = %lx, DeleteTid = %lx.\n",
+ SetAsicWcid.WCID,
+ SetAsicWcid.SetTid,
+ SetAsicWcid.DeleteTid));
+ MACValue =
+ (pAd->MacTab.
+ Content[SetAsicWcid.WCID].
+ Addr[3] << 24) +
+ (pAd->MacTab.
+ Content[SetAsicWcid.WCID].
+ Addr[2] << 16) +
+ (pAd->MacTab.
+ Content[SetAsicWcid.WCID].
+ Addr[1] << 8) +
+ (pAd->MacTab.
+ Content[SetAsicWcid.WCID].Addr[0]);
+ DBGPRINT_RAW(RT_DEBUG_TRACE,
+ ("1-MACValue= %x,\n",
+ MACValue));
+ RTUSBWriteMACRegister(pAd, offset,
+ MACValue);
+ /* Read bitmask */
+ RTUSBReadMACRegister(pAd, offset + 4,
+ &MACRValue);
+ if (SetAsicWcid.DeleteTid != 0xffffffff)
+ MACRValue &=
+ (~SetAsicWcid.DeleteTid);
+ if (SetAsicWcid.SetTid != 0xffffffff)
+ MACRValue |=
+ (SetAsicWcid.SetTid);
+ MACRValue &= 0xffff0000;
+
+ MACValue =
+ (pAd->MacTab.
+ Content[SetAsicWcid.WCID].
+ Addr[5] << 8) +
+ pAd->MacTab.Content[SetAsicWcid.
+ WCID].Addr[4];
+ MACValue |= MACRValue;
+ RTUSBWriteMACRegister(pAd, offset + 4,
+ MACValue);
+
+ DBGPRINT_RAW(RT_DEBUG_TRACE,
+ ("2-MACValue= %x,\n",
+ MACValue));
+ }
+ break;
- RTUSBReadMACRegister(pAd, offset, &MACRValue);
- MACRValue &= (~0xe);
- MACRValue |= (((UCHAR)SetAsicWcidAttri.Cipher) << 1);
+ case CMDTHREAD_SET_ASIC_WCID_CIPHER:
+ {
+ struct rt_set_asic_wcid_attri SetAsicWcidAttri;
+ u16 offset;
+ u32 MACRValue = 0;
+ SHAREDKEY_MODE_STRUC csr1;
+ SetAsicWcidAttri =
+ *((struct rt_set_asic_wcid_attri *)
+ (pData));
+
+ if (SetAsicWcidAttri.WCID >=
+ MAX_LEN_OF_MAC_TABLE)
+ return;
+
+ offset =
+ MAC_WCID_ATTRIBUTE_BASE +
+ ((u8)SetAsicWcidAttri.WCID) *
+ HW_WCID_ATTRI_SIZE;
+
+ DBGPRINT_RAW(RT_DEBUG_TRACE,
+ ("Cmd : CMDTHREAD_SET_ASIC_WCID_CIPHER : WCID = %ld, Cipher = %lx.\n",
+ SetAsicWcidAttri.WCID,
+ SetAsicWcidAttri.Cipher));
+ /* Read bitmask */
+ RTUSBReadMACRegister(pAd, offset,
+ &MACRValue);
+ MACRValue = 0;
+ MACRValue |=
+ (((u8)SetAsicWcidAttri.
+ Cipher) << 1);
+
+ RTUSBWriteMACRegister(pAd, offset,
+ MACRValue);
+ DBGPRINT_RAW(RT_DEBUG_TRACE,
+ ("2-offset = %x , MACValue= %x,\n",
+ offset, MACRValue));
+
+ offset =
+ PAIRWISE_IVEIV_TABLE_BASE +
+ ((u8)SetAsicWcidAttri.WCID) *
+ HW_IVEIV_ENTRY_SIZE;
+ MACRValue = 0;
+ if ((SetAsicWcidAttri.Cipher <=
+ CIPHER_WEP128))
+ MACRValue |=
+ (pAd->StaCfg.
+ DefaultKeyId << 30);
+ else
+ MACRValue |= (0x20000000);
+ RTUSBWriteMACRegister(pAd, offset,
+ MACRValue);
+ DBGPRINT_RAW(RT_DEBUG_TRACE,
+ ("2-offset = %x , MACValue= %x,\n",
+ offset, MACRValue));
+
+ /* */
+ /* Update cipher algorithm. WSTA always use BSS0 */
+ /* */
+ /* for adhoc mode only ,because wep status slow than add key, when use zero config */
+ if (pAd->StaCfg.BssType == BSS_ADHOC) {
+ offset =
+ MAC_WCID_ATTRIBUTE_BASE;
+
+ RTUSBReadMACRegister(pAd,
+ offset,
+ &MACRValue);
+ MACRValue &= (~0xe);
+ MACRValue |=
+ (((u8)SetAsicWcidAttri.
+ Cipher) << 1);
+
+ RTUSBWriteMACRegister(pAd,
+ offset,
+ MACRValue);
+
+ /*Update group key cipher,,because wep status slow than add key, when use zero config */
+ RTUSBReadMACRegister(pAd,
+ SHARED_KEY_MODE_BASE
+ +
+ 4 * (0 /
+ 2),
+ &csr1.
+ word);
+
+ csr1.field.Bss0Key0CipherAlg =
+ SetAsicWcidAttri.Cipher;
+ csr1.field.Bss0Key1CipherAlg =
+ SetAsicWcidAttri.Cipher;
+
+ RTUSBWriteMACRegister(pAd,
+ SHARED_KEY_MODE_BASE
+ +
+ 4 * (0 /
+ 2),
+ csr1.
+ word);
+ }
+ }
+ break;
- RTUSBWriteMACRegister(pAd, offset, MACRValue);
+/*Benson modified for USB interface, avoid in interrupt when write key, 20080724 --> */
+ case RT_CMD_SET_KEY_TABLE: /*General call for AsicAddPairwiseKeyEntry() */
+ {
+ struct rt_add_pairwise_key_entry KeyInfo;
+ KeyInfo =
+ *((struct rt_add_pairwise_key_entry *)
+ (pData));
+ AsicAddPairwiseKeyEntry(pAd,
+ KeyInfo.MacAddr,
+ (u8)KeyInfo.
+ MacTabMatchWCID,
+ &KeyInfo.
+ CipherKey);
+ }
+ break;
- //Update group key cipher,,because wep status slow than add key, when use zero config
- RTUSBReadMACRegister(pAd, SHARED_KEY_MODE_BASE+4*(0/2), &csr1.word);
+ case RT_CMD_SET_RX_WCID_TABLE: /*General call for RTMPAddWcidAttributeEntry() */
+ {
+ struct rt_mac_table_entry *pEntry;
+ u8 KeyIdx = 0;
+ u8 CipherAlg = CIPHER_NONE;
+ u8 ApIdx = BSS0;
+
+ pEntry = (struct rt_mac_table_entry *)(pData);
+
+ RTMPAddWcidAttributeEntry(pAd,
+ ApIdx,
+ KeyIdx,
+ CipherAlg,
+ pEntry);
+ }
+ break;
+/*Benson modified for USB interface, avoid in interrupt when write key, 20080724 <-- */
- csr1.field.Bss0Key0CipherAlg = SetAsicWcidAttri.Cipher;
- csr1.field.Bss0Key1CipherAlg = SetAsicWcidAttri.Cipher;
+ case CMDTHREAD_SET_CLIENT_MAC_ENTRY:
+ {
+ struct rt_mac_table_entry *pEntry;
+ pEntry = (struct rt_mac_table_entry *)pData;
- RTUSBWriteMACRegister(pAd, SHARED_KEY_MODE_BASE+4*(0/2), csr1.word);
+ {
+ AsicRemovePairwiseKeyEntry(pAd,
+ pEntry->
+ apidx,
+ (u8)
+ pEntry->
+ Aid);
+ if ((pEntry->AuthMode <=
+ Ndis802_11AuthModeAutoSwitch)
+ && (pEntry->WepStatus ==
+ Ndis802_11Encryption1Enabled))
+ {
+ u32 uIV = 1;
+ u8 *ptr;
+
+ ptr = (u8 *)& uIV;
+ *(ptr + 3) =
+ (pAd->StaCfg.
+ DefaultKeyId << 6);
+ AsicUpdateWCIDIVEIV(pAd,
+ pEntry->
+ Aid,
+ uIV,
+ 0);
+ AsicUpdateWCIDAttribute
+ (pAd, pEntry->Aid,
+ BSS0,
+ pAd->
+ SharedKey[BSS0]
+ [pAd->StaCfg.
+ DefaultKeyId].
+ CipherAlg, FALSE);
+ } else if (pEntry->AuthMode ==
+ Ndis802_11AuthModeWPANone)
+ {
+ u32 uIV = 1;
+ u8 *ptr;
+
+ ptr = (u8 *)& uIV;
+ *(ptr + 3) =
+ (pAd->StaCfg.
+ DefaultKeyId << 6);
+ AsicUpdateWCIDIVEIV(pAd,
+ pEntry->
+ Aid,
+ uIV,
+ 0);
+ AsicUpdateWCIDAttribute
+ (pAd, pEntry->Aid,
+ BSS0,
+ pAd->
+ SharedKey[BSS0]
+ [pAd->StaCfg.
+ DefaultKeyId].
+ CipherAlg, FALSE);
+ } else {
+ /* */
+ /* Other case, disable engine. */
+ /* Don't worry WPA key, we will add WPA Key after 4-Way handshaking. */
+ /* */
+ u16 offset;
+ offset =
+ MAC_WCID_ATTRIBUTE_BASE
+ +
+ (pEntry->Aid *
+ HW_WCID_ATTRI_SIZE);
+ /* RX_PKEY_MODE:0 for no security; RX_KEY_TAB:0 for shared key table; BSS_IDX:0 */
+ RTUSBWriteMACRegister
+ (pAd, offset, 0);
}
}
- break;
- case CMDTHREAD_SET_CLIENT_MAC_ENTRY:
- {
- MAC_TABLE_ENTRY *pEntry;
- pEntry = (MAC_TABLE_ENTRY *)pData;
- {
- AsicRemovePairwiseKeyEntry(pAd, pEntry->apidx, (UCHAR)pEntry->Aid);
- if ((pEntry->AuthMode <= Ndis802_11AuthModeAutoSwitch) && (pEntry->WepStatus == Ndis802_11Encryption1Enabled))
- {
- UINT32 uIV = 0;
- PUCHAR ptr;
+ AsicUpdateRxWCIDTable(pAd, pEntry->Aid,
+ pEntry->Addr);
+ DBGPRINT(RT_DEBUG_TRACE,
+ ("UpdateRxWCIDTable(): Aid=%d, Addr=%02x:%02x:%02x:%02x:%02x:%02x!\n",
+ pEntry->Aid, pEntry->Addr[0],
+ pEntry->Addr[1],
+ pEntry->Addr[2],
+ pEntry->Addr[3],
+ pEntry->Addr[4],
+ pEntry->Addr[5]));
+ }
+ break;
- ptr = (PUCHAR) &uIV;
- *(ptr + 3) = (pAd->StaCfg.DefaultKeyId << 6);
- AsicUpdateWCIDIVEIV(pAd, pEntry->Aid, uIV, 0);
- AsicUpdateWCIDAttribute(pAd, pEntry->Aid, BSS0, pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg, FALSE);
+/* add by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet */
+ case CMDTHREAD_UPDATE_PROTECT:
+ {
+ AsicUpdateProtect(pAd, 0,
+ (ALLN_SETPROTECT),
+ TRUE, 0);
+ }
+ break;
+/* end johnli */
+
+ case OID_802_11_ADD_WEP:
+ {
+ u32 i;
+ u32 KeyIdx;
+ struct rt_ndis_802_11_wep *pWepKey;
+
+ DBGPRINT(RT_DEBUG_TRACE,
+ ("CmdThread::OID_802_11_ADD_WEP \n"));
+
+ pWepKey = (struct rt_ndis_802_11_wep *)pData;
+ KeyIdx = pWepKey->KeyIndex & 0x0fffffff;
+
+ /* it is a shared key */
+ if ((KeyIdx >= 4)
+ || ((pWepKey->KeyLength != 5)
+ && (pWepKey->KeyLength !=
+ 13))) {
+ NdisStatus =
+ NDIS_STATUS_INVALID_DATA;
+ DBGPRINT(RT_DEBUG_ERROR,
+ ("CmdThread::OID_802_11_ADD_WEP, INVALID_DATA!!\n"));
+ } else {
+ u8 CipherAlg;
+ pAd->SharedKey[BSS0][KeyIdx].
+ KeyLen =
+ (u8)pWepKey->KeyLength;
+ NdisMoveMemory(pAd->
+ SharedKey[BSS0]
+ [KeyIdx].Key,
+ &pWepKey->
+ KeyMaterial,
+ pWepKey->
+ KeyLength);
+ CipherAlg =
+ (pAd->
+ SharedKey[BSS0][KeyIdx].
+ KeyLen ==
+ 5) ? CIPHER_WEP64 :
+ CIPHER_WEP128;
+
+ /* */
+ /* Change the WEP cipher to CKIP cipher if CKIP KP on. */
+ /* Funk UI or Meetinghouse UI will add ckip key from this path. */
+ /* */
+
+ if (pAd->OpMode == OPMODE_STA) {
+ pAd->MacTab.
+ Content[BSSID_WCID].
+ PairwiseKey.
+ CipherAlg =
+ pAd->
+ SharedKey[BSS0]
+ [KeyIdx].CipherAlg;
+ pAd->MacTab.
+ Content[BSSID_WCID].
+ PairwiseKey.KeyLen =
+ pAd->
+ SharedKey[BSS0]
+ [KeyIdx].KeyLen;
+ }
+ pAd->SharedKey[BSS0][KeyIdx].
+ CipherAlg = CipherAlg;
+ if (pWepKey->
+ KeyIndex & 0x80000000) {
+ /* Default key for tx (shared key) */
+ u8 IVEIV[8];
+ u32 WCIDAttri, Value;
+ u16 offset, offset2;
+ NdisZeroMemory(IVEIV,
+ 8);
+ pAd->StaCfg.
+ DefaultKeyId =
+ (u8)KeyIdx;
+ /* Add BSSID to WCTable. because this is Tx wep key. */
+ /* WCID Attribute UDF:3, BSSIdx:3, Alg:3, Keytable:1=PAIRWISE KEY, BSSIdx is 0 */
+ WCIDAttri =
+ (CipherAlg << 1) |
+ SHAREDKEYTABLE;
+
+ offset =
+ MAC_WCID_ATTRIBUTE_BASE
+ +
+ (BSSID_WCID *
+ HW_WCID_ATTRI_SIZE);
+ RTUSBWriteMACRegister
+ (pAd, offset,
+ WCIDAttri);
+ /* 1. IV/EIV */
+ /* Specify key index to find shared key. */
+ IVEIV[3] = (u8)(KeyIdx << 6); /*WEP Eiv bit off. groupkey index is not 0 */
+ offset =
+ PAIRWISE_IVEIV_TABLE_BASE
+ +
+ (BSS0Mcast_WCID *
+ HW_IVEIV_ENTRY_SIZE);
+ offset2 =
+ PAIRWISE_IVEIV_TABLE_BASE
+ +
+ (BSSID_WCID *
+ HW_IVEIV_ENTRY_SIZE);
+ for (i = 0; i < 8;) {
+ Value =
+ IVEIV[i];
+ Value +=
+ (IVEIV
+ [i +
+ 1] << 8);
+ Value +=
+ (IVEIV
+ [i +
+ 2] << 16);
+ Value +=
+ (IVEIV
+ [i +
+ 3] << 24);
+ RTUSBWriteMACRegister
+ (pAd,
+ offset + i,
+ Value);
+ RTUSBWriteMACRegister
+ (pAd,
+ offset2 +
+ i, Value);
+ i += 4;
}
- else if (pEntry->AuthMode == Ndis802_11AuthModeWPANone)
- {
- UINT32 uIV = 0;
- PUCHAR ptr;
- ptr = (PUCHAR) &uIV;
- *(ptr + 3) = (pAd->StaCfg.DefaultKeyId << 6);
- AsicUpdateWCIDIVEIV(pAd, pEntry->Aid, uIV, 0);
- AsicUpdateWCIDAttribute(pAd, pEntry->Aid, BSS0, pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg, FALSE);
- }
- else
- {
- //
- // Other case, disable engine.
- // Don't worry WPA key, we will add WPA Key after 4-Way handshaking.
- //
- USHORT offset;
- offset = MAC_WCID_ATTRIBUTE_BASE + (pEntry->Aid * HW_WCID_ATTRI_SIZE);
- // RX_PKEY_MODE:0 for no security; RX_KEY_TAB:0 for shared key table; BSS_IDX:0
- RTUSBWriteMACRegister(pAd, offset, 0);
- }
- }
+ /* 2. WCID Attribute UDF:3, BSSIdx:3, Alg:3, Keytable:use share key, BSSIdx is 0 */
+ WCIDAttri =
+ (pAd->
+ SharedKey[BSS0]
+ [KeyIdx].
+ CipherAlg << 1) |
+ SHAREDKEYTABLE;
+ offset =
+ MAC_WCID_ATTRIBUTE_BASE
+ +
+ (BSS0Mcast_WCID *
+ HW_WCID_ATTRI_SIZE);
+ DBGPRINT(RT_DEBUG_TRACE,
+ ("BSS0Mcast_WCID : offset = %x, WCIDAttri = %x\n",
+ offset,
+ WCIDAttri));
+ RTUSBWriteMACRegister
+ (pAd, offset,
+ WCIDAttri);
- AsicUpdateRxWCIDTable(pAd, pEntry->Aid, pEntry->Addr);
- printk("UpdateRxWCIDTable(): Aid=%d, Addr=%02x:%02x:%02x:%02x:%02x:%02x!\n", pEntry->Aid,
- pEntry->Addr[0], pEntry->Addr[1], pEntry->Addr[2], pEntry->Addr[3], pEntry->Addr[4], pEntry->Addr[5]);
- }
- break;
- case CMDTHREAD_UPDATE_PROTECT:
- {
- AsicUpdateProtect(pAd, 0, (ALLN_SETPROTECT), TRUE, 0);
+ }
+ AsicAddSharedKeyEntry(pAd, BSS0,
+ (u8)
+ KeyIdx,
+ CipherAlg,
+ pWepKey->
+ KeyMaterial,
+ NULL,
+ NULL);
+ DBGPRINT(RT_DEBUG_TRACE,
+ ("CmdThread::OID_802_11_ADD_WEP (KeyIdx=%d, Len=%d-byte)\n",
+ KeyIdx,
+ pWepKey->KeyLength));
}
- break;
- case OID_802_11_ADD_WEP:
- {
- UINT i;
- UINT32 KeyIdx;
- PNDIS_802_11_WEP pWepKey;
-
- DBGPRINT(RT_DEBUG_TRACE, ("CmdThread::OID_802_11_ADD_WEP \n"));
+ }
+ break;
- pWepKey = (PNDIS_802_11_WEP)pData;
- KeyIdx = pWepKey->KeyIndex & 0x0fffffff;
+ case CMDTHREAD_802_11_COUNTER_MEASURE:
+ break;
- // it is a shared key
- if ((KeyIdx >= 4) || ((pWepKey->KeyLength != 5) && (pWepKey->KeyLength != 13)))
- {
- NdisStatus = NDIS_STATUS_INVALID_DATA;
- DBGPRINT(RT_DEBUG_ERROR, ("CmdThread::OID_802_11_ADD_WEP, INVALID_DATA!!\n"));
- }
- else
- {
- UCHAR CipherAlg;
- pAd->SharedKey[BSS0][KeyIdx].KeyLen = (UCHAR) pWepKey->KeyLength;
- NdisMoveMemory(pAd->SharedKey[BSS0][KeyIdx].Key, &pWepKey->KeyMaterial, pWepKey->KeyLength);
- CipherAlg = (pAd->SharedKey[BSS0][KeyIdx].KeyLen == 5)? CIPHER_WEP64 : CIPHER_WEP128;
-
- //
- // Change the WEP cipher to CKIP cipher if CKIP KP on.
- // Funk UI or Meetinghouse UI will add ckip key from this path.
- //
-
- if (pAd->OpMode == OPMODE_STA)
- {
- pAd->MacTab.Content[BSSID_WCID].PairwiseKey.CipherAlg = pAd->SharedKey[BSS0][KeyIdx].CipherAlg;
- pAd->MacTab.Content[BSSID_WCID].PairwiseKey.KeyLen = pAd->SharedKey[BSS0][KeyIdx].KeyLen;
- }
- pAd->SharedKey[BSS0][KeyIdx].CipherAlg = CipherAlg;
- if (pWepKey->KeyIndex & 0x80000000)
- {
- // Default key for tx (shared key)
- UCHAR IVEIV[8];
- UINT32 WCIDAttri, Value;
- USHORT offset, offset2;
- NdisZeroMemory(IVEIV, 8);
- pAd->StaCfg.DefaultKeyId = (UCHAR) KeyIdx;
- // Add BSSID to WCTable. because this is Tx wep key.
- // WCID Attribute UDF:3, BSSIdx:3, Alg:3, Keytable:1=PAIRWISE KEY, BSSIdx is 0
- WCIDAttri = (CipherAlg<<1)|SHAREDKEYTABLE;
-
- offset = MAC_WCID_ATTRIBUTE_BASE + (BSSID_WCID* HW_WCID_ATTRI_SIZE);
- RTUSBWriteMACRegister(pAd, offset, WCIDAttri);
- // 1. IV/EIV
- // Specify key index to find shared key.
- IVEIV[3] = (UCHAR)(KeyIdx<< 6); //WEP Eiv bit off. groupkey index is not 0
- offset = PAIRWISE_IVEIV_TABLE_BASE + (BSS0Mcast_WCID * HW_IVEIV_ENTRY_SIZE);
- offset2 = PAIRWISE_IVEIV_TABLE_BASE + (BSSID_WCID* HW_IVEIV_ENTRY_SIZE);
- for (i=0; i<8;)
- {
- Value = IVEIV[i];
- Value += (IVEIV[i+1]<<8);
- Value += (IVEIV[i+2]<<16);
- Value += (IVEIV[i+3]<<24);
- RTUSBWriteMACRegister(pAd, offset+i, Value);
- RTUSBWriteMACRegister(pAd, offset2+i, Value);
- i+=4;
- }
+ case CMDTHREAD_SET_GROUP_KEY:
+ WpaStaGroupKeySetting(pAd);
+ break;
- // 2. WCID Attribute UDF:3, BSSIdx:3, Alg:3, Keytable:use share key, BSSIdx is 0
- WCIDAttri = (pAd->SharedKey[BSS0][KeyIdx].CipherAlg<<1)|SHAREDKEYTABLE;
- offset = MAC_WCID_ATTRIBUTE_BASE + (BSS0Mcast_WCID* HW_WCID_ATTRI_SIZE);
- DBGPRINT(RT_DEBUG_TRACE, ("BSS0Mcast_WCID : offset = %x, WCIDAttri = %x\n", offset, WCIDAttri));
- RTUSBWriteMACRegister(pAd, offset, WCIDAttri);
+ case CMDTHREAD_SET_PAIRWISE_KEY:
+ WpaStaPairwiseKeySetting(pAd);
+ break;
- }
- AsicAddSharedKeyEntry(pAd, BSS0, (UCHAR)KeyIdx, CipherAlg, pWepKey->KeyMaterial, NULL, NULL);
- DBGPRINT(RT_DEBUG_TRACE, ("CmdThread::OID_802_11_ADD_WEP (KeyIdx=%d, Len=%d-byte)\n", KeyIdx, pWepKey->KeyLength));
- }
- }
- break;
+ case CMDTHREAD_SET_PSM_BIT:
+ {
+ u16 *pPsm = (u16 *) pData;
+ MlmeSetPsmBit(pAd, *pPsm);
+ }
+ break;
+ case CMDTHREAD_FORCE_WAKE_UP:
+ AsicForceWakeup(pAd, TRUE);
+ break;
- case CMDTHREAD_802_11_COUNTER_MEASURE:
- break;
- default:
- DBGPRINT(RT_DEBUG_ERROR, ("--> Control Thread !! ERROR !! Unknown(cmdqelmt->command=0x%x) !! \n", cmdqelmt->command));
- break;
+ default:
+ DBGPRINT(RT_DEBUG_ERROR,
+ ("--> Control Thread !! ERROR !! Unknown(cmdqelmt->command=0x%x) !! \n",
+ cmdqelmt->command));
+ break;
}
}
- if (cmdqelmt->CmdFromNdis == TRUE)
- {
- if (cmdqelmt->buffer != NULL)
- NdisFreeMemory(cmdqelmt->buffer, cmdqelmt->bufferlength, 0);
-
- NdisFreeMemory(cmdqelmt, sizeof(CmdQElmt), 0);
- }
- else
- {
- if ((cmdqelmt->buffer != NULL) && (cmdqelmt->bufferlength != 0))
- NdisFreeMemory(cmdqelmt->buffer, cmdqelmt->bufferlength, 0);
- {
- NdisFreeMemory(cmdqelmt, sizeof(CmdQElmt), 0);
- }
+ if (cmdqelmt->CmdFromNdis == TRUE) {
+ if (cmdqelmt->buffer != NULL)
+ os_free_mem(pAd, cmdqelmt->buffer);
+ os_free_mem(pAd, cmdqelmt);
+ } else {
+ if ((cmdqelmt->buffer != NULL)
+ && (cmdqelmt->bufferlength != 0))
+ os_free_mem(pAd, cmdqelmt->buffer);
+ os_free_mem(pAd, cmdqelmt);
}
- } /* end of while */
+ } /* end of while */
}
+#endif /* RTMP_MAC_USB // */