📄 rtusb_init.c
字号:
1: memory are equal
0: memory are not equal
Note:
========================================================================
*/
ULONG RTMPEqualMemory(
IN PVOID pSrc1,
IN PVOID pSrc2,
IN ULONG Length)
{
PUCHAR pMem1;
PUCHAR pMem2;
ULONG Index = 0;
pMem1 = (PUCHAR) pSrc1;
pMem2 = (PUCHAR) pSrc2;
for (Index = 0; Index < Length; Index++)
{
if (pMem1[Index] != pMem2[Index])
{
break;
}
}
if (Index == Length)
{
return (1);
}
else
{
return (0);
}
}
/*
========================================================================
Routine Description:
Compare two memory block
Arguments:
Adapter Pointer to our adapter
Return Value:
0: memory is equal
1: pSrc1 memory is larger
2: pSrc2 memory is larger
Note:
========================================================================
*/
ULONG RTMPCompareMemory(
IN PVOID pSrc1,
IN PVOID pSrc2,
IN ULONG Length)
{
PUCHAR pMem1;
PUCHAR pMem2;
ULONG Index = 0;
pMem1 = (PUCHAR) pSrc1;
pMem2 = (PUCHAR) pSrc2;
for (Index = 0; Index < Length; Index++)
{
if (pMem1[Index] > pMem2[Index])
return (1);
else if (pMem1[Index] < pMem2[Index])
return (2);
}
// Equal
return (0);
}
/*
========================================================================
Routine Description:
Arguments:
Return Value:
Note:
========================================================================
*/
VOID RTMPZeroMemory(
IN PVOID pSrc,
IN ULONG Length)
{
PUCHAR pMem;
ULONG Index = 0;
pMem = (PUCHAR) pSrc;
for (Index = 0; Index < Length; Index++)
{
pMem[Index] = 0x00;
}
}
/*
========================================================================
Routine Description:
Arguments:
Return Value:
Note:
========================================================================
*/
VOID RTMPFillMemory(
IN PVOID pSrc,
IN ULONG Length,
IN UCHAR Fill)
{
PUCHAR pMem;
ULONG Index = 0;
pMem = (PUCHAR) pSrc;
for (Index = 0; Index < Length; Index++)
{
pMem[Index] = Fill;
}
}
/*
========================================================================
Routine Description:
Arguments:
Return Value:
Note:
========================================================================
*/
VOID RTMPMoveMemory(
OUT PVOID pDest,
IN PVOID pSrc,
IN ULONG Length)
{
PUCHAR pMem1;
PUCHAR pMem2;
ULONG Index = 0;
pMem1 = (PUCHAR) pDest;
pMem2 = (PUCHAR) pSrc;
for (Index = 0; Index < Length; Index++)
{
pMem1[Index] = pMem2[Index];
}
}
VOID CreateThreads( struct net_device *net_dev )
{
PRT2570ADAPTER pAdapter = (PRT2570ADAPTER) net_dev->priv;
// Creat MLME Thread
pAdapter->MLMEThr_pid= -1;
pAdapter->MLMEThr_pid = kernel_thread(MlmeThread, pAdapter, CLONE_VM);
if (pAdapter->MLMEThr_pid < 0) {
printk (KERN_WARNING "%s: unable to start mlme thread\n",pAdapter->net->name);
}
// Creat Command Thread
pAdapter->RTUSBCmdThr_pid= -1;
pAdapter->RTUSBCmdThr_pid = kernel_thread(RTUSBCmdThread, pAdapter, CLONE_VM);
if (pAdapter->RTUSBCmdThr_pid < 0) {
printk (KERN_WARNING "%s: unable to start RTUSBCmd thread\n",pAdapter->net->name);
}
/* Wait for the thread to start */
//wait_for_completion(&(pAdapter->notify));
}
NDIS_STATUS RTMPAllocAdapterBlock( PRT2570ADAPTER *ppAdapter )
{
NDIS_STATUS Status=NDIS_STATUS_SUCCESS;
#if 0
PRT2570ADAPTER pAdapter;
DBGPRINT(RT_DEBUG_TRACE,"--> RTMPAllocAdapterBlock\n");
*ppAdapter = NULL;
do
{
pAdapter = (PRT2570ADAPTER) kmalloc(sizeof(RT2570ADAPTER), GFP_KERNEL);
if (!pAdapter) {
DBGPRINT(RT_DEBUG_ERROR,"Not enough memory\n");
Status = NDIS_STATUS_RESOURCES;
break;
}
memset((PUCHAR) pAdapter, 0, sizeof(RT2570ADAPTER));
} while (FALSE);
*ppAdapter = pAdapter;
DBGPRINT(RT_DEBUG_ERROR,"<-- RTMPAllocAdapterBlock, Status=%x\n", Status);
#endif
return Status;
}
NDIS_STATUS NICInitTransmit( PRT2570ADAPTER pAdapter )
{
UCHAR i;
NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
PTX_CONTEXT pPsPollContext = &(pAdapter->PsPollContext);
PTX_CONTEXT pNullContext = &(pAdapter->NullContext);
DBGPRINT(RT_DEBUG_TRACE,"--> NICInitTransmit\n");
// Initialize all Transmit releated queues
InitializeQueueHeader(&pAdapter->SendTxWaitQueue);
// Init Ring index pointer
pAdapter->NextRxBulkInIndex = 0;
pAdapter->NextTxIndex = 0;
pAdapter->NextBulkOutIndex = 0; // Next Local tx ring pointer waiting for buck out
pAdapter->NextMLMEIndex = 0;
pAdapter->PushMgmtIndex = 0;
pAdapter->PopMgmtIndex = 0;
atomic_set(&pAdapter->MgmtQueueSize,0);
pAdapter->BulkOutPending = FALSE;
pAdapter->PrioRingFirstIndex = 0;
pAdapter->PrioRingTxCnt = 0;
do
{
for ( i= 0; i < TX_RING_SIZE; i++ )
{
PTX_CONTEXT pTxContext = &(pAdapter->TxContext[i]);
//Allocate URB
pTxContext->pUrb = RT2570_USB_ALLOC_URB(0);
if(pTxContext->pUrb == NULL){
Status = NDIS_STATUS_RESOURCES;
goto done;
}
pTxContext->TransferBuffer= (PTX_BUFFER) kmalloc(sizeof(TX_BUFFER), GFP_KERNEL);
Status = NDIS_STATUS_SUCCESS;
if(!pTxContext->TransferBuffer){
DBGPRINT(RT_DEBUG_ERROR,"Not enough memory\n");
Status = NDIS_STATUS_RESOURCES;
goto out1;
}
NdisZeroMemory(pTxContext->TransferBuffer, sizeof(TX_BUFFER));
pTxContext->pAdapter = pAdapter;
pTxContext->InUse = FALSE;
pTxContext->IRPPending = FALSE;
}
for ( i= 0; i < PRIO_RING_SIZE; i++ )
{
PTX_CONTEXT pMLMEContext = &(pAdapter->MLMEContext[i]);
pMLMEContext->pUrb = RT2570_USB_ALLOC_URB(0);
if(pMLMEContext->pUrb == NULL){
Status = NDIS_STATUS_RESOURCES;
goto out1;
}
pMLMEContext->TransferBuffer= (PTX_BUFFER) kmalloc(sizeof(TX_BUFFER), GFP_KERNEL);
if(!pMLMEContext->TransferBuffer){
DBGPRINT(RT_DEBUG_ERROR,"Not enough memory\n");
Status = NDIS_STATUS_RESOURCES;
goto out2;
}
NdisZeroMemory(pMLMEContext->TransferBuffer, sizeof(TX_BUFFER));
pMLMEContext->pAdapter = pAdapter;
pMLMEContext->InUse = FALSE;
pMLMEContext->IRPPending = FALSE;
}
for (i = 0; i < BEACON_RING_SIZE; i++)
{
PTX_CONTEXT pBeaconContext = &(pAdapter->BeaconContext[i]);
pBeaconContext->pUrb = RT2570_USB_ALLOC_URB(0);
if(pBeaconContext->pUrb == NULL){
Status = NDIS_STATUS_RESOURCES;
goto out2;
}
pBeaconContext->TransferBuffer= (PTX_BUFFER) kmalloc(sizeof(TX_BUFFER), GFP_KERNEL);
if(!pBeaconContext->TransferBuffer){
DBGPRINT(RT_DEBUG_ERROR,"Not enough memory\n");
Status = NDIS_STATUS_RESOURCES;
goto out3;
}
NdisZeroMemory(pBeaconContext->TransferBuffer, sizeof(TX_BUFFER));
pBeaconContext->pAdapter = pAdapter;
pBeaconContext->InUse = FALSE;
pBeaconContext->IRPPending = FALSE;
}
pNullContext->pUrb = RT2570_USB_ALLOC_URB(0);
if(pNullContext->pUrb == NULL){
Status = NDIS_STATUS_RESOURCES;
goto out3;
}
pNullContext->TransferBuffer= (PTX_BUFFER) kmalloc(sizeof(TX_BUFFER), GFP_KERNEL);
if(!pNullContext->TransferBuffer){
DBGPRINT(RT_DEBUG_ERROR,"Not enough memory\n");
Status = NDIS_STATUS_RESOURCES;
goto out4;
}
NdisZeroMemory(pNullContext->TransferBuffer, sizeof(TX_BUFFER));
pNullContext->pAdapter = pAdapter;
pNullContext->InUse = FALSE;
pNullContext->IRPPending = FALSE;
pPsPollContext->pUrb = RT2570_USB_ALLOC_URB(0);
if(pPsPollContext->pUrb == NULL){
Status = NDIS_STATUS_RESOURCES;
goto out4;
}
pPsPollContext->TransferBuffer= (PTX_BUFFER) kmalloc(sizeof(TX_BUFFER), GFP_KERNEL);
if(!pPsPollContext->TransferBuffer){
DBGPRINT(RT_DEBUG_ERROR,"Not enough memory\n");
Status = NDIS_STATUS_RESOURCES;
goto out5;
}
NdisZeroMemory(pPsPollContext->TransferBuffer, sizeof(TX_BUFFER));
pPsPollContext->pAdapter = pAdapter;
pPsPollContext->InUse = FALSE;
pPsPollContext->IRPPending = FALSE;
#if 0
//Allocate URB
pWpaPskContext->pUrb = RT2570_USB_ALLOC_URB(0);
if(pWpaPskContext->pUrb == NULL){
Status = NDIS_STATUS_RESOURCES;
goto done;
}
pWpaPskContext->TransferBuffer= (PWPAPSK_BUFFER) kmalloc(sizeof(WPAPSK_BUFFER), GFP_KERNEL);
Status = NDIS_STATUS_SUCCESS;
if(!pWpaPskContext->TransferBuffer){
DBGPRINT(RT_DEBUG_ERROR,"Not enough memory\n");
Status = NDIS_STATUS_RESOURCES;
goto done;
}
NdisZeroMemory(pWpaPskContext->TransferBuffer, sizeof(WPAPSK_BUFFER));
pWpaPskContext->pAdapter = pAdapter;
pWpaPskContext->InUse = FALSE;
pWpaPskContext->IRPPending = FALSE;
#endif
#ifdef TEST_MODE_SUPPORT
Status = RT2570AllocateMemory(&(pAdapter->pTxUrb), sizeof(struct _URB_BULK_OR_INTERRUPT_TRANSFER));
if ((Status != NDIS_STATUS_SUCCESS) || (pAdapter->pTxUrb == NULL))
{
Status = NDIS_STATUS_RESOURCES;
goto done;
}
Status = RT2570AllocateMemory(&(pAdapter->TxBuffer), BUFFER_SIZE);
if ((Status != NDIS_STATUS_SUCCESS) || (pAdapter->TxBuffer == NULL))
{
Status = NDIS_STATUS_RESOURCES;
goto done;
}
NdisZeroMemory(pAdapter->TxBuffer, BUFFER_SIZE);
stackSize = pAdapter->pNextDeviceObject->StackSize + 1;
pAdapter->pTxIrp = IoAllocateIrp(stackSize, FALSE);
#endif
}
while (FALSE);
return Status;
out5:
if (NULL != pPsPollContext->pUrb)
{
usb_unlink_urb(pPsPollContext->pUrb);
usb_free_urb(pPsPollContext->pUrb);
pPsPollContext->pUrb = NULL;
}
if (NULL != pPsPollContext->TransferBuffer)
{
FreeMemory(pPsPollContext->TransferBuffer);
pPsPollContext->TransferBuffer = NULL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -