📄 initproc.c
字号:
// Allocate spinlock
//NdisAllocateSpinLock(&Adapter->TxSpinLock);
InitializeCriticalSection(&Adapter->TxCriticalSection);
InitializeCriticalSection(&Adapter->IntCriticalSection);
Adapter->hControllerInterruptEvent = CreateEvent(NULL, FALSE, FALSE,NULL);
Adapter->TxResourceControlEvent = CreateEvent(NULL, FALSE, FALSE,NULL);
//tt ++ v5 firmware
Adapter->hOidQueryEvent = CreateEvent(NULL, FALSE, FALSE,NULL);
//tt
//Adapter->hControllerInterruptEvent = CreateEvent(NULL, FALSE, FALSE,NULL);
if (NULL == Adapter->hControllerInterruptEvent)
{
///RETAILMSG(1,(TEXT("Null Interrupt EVENT \n")));
return NDIS_STATUS_FAILURE;
}
// Adapter->hTxEvent = CreateEvent(NULL, FALSE, FALSE,NULL);
//if (NULL == Adapter->hTxEvent)
//{
// RETAILMSG(1,(TEXT("Null Tx EVENT \n")));
// return NDIS_STATUS_FAILURE;
//}
Adapter->hThreadReadyEvent = CreateEvent(NULL, FALSE, FALSE,NULL);
if (NULL == Adapter->hThreadReadyEvent)
{
//RETAILMSG(1,(TEXT("Null ThreadReadyEvent \n")));
return NDIS_STATUS_FAILURE;
}
Adapter->hControllerInterruptThread = CreateThread(NULL,
0,
(LPTHREAD_START_ROUTINE)MrvIstThread,
Adapter,
0,
&threadID);
if (NULL == Adapter->hControllerInterruptThread)
{
//RETAILMSG(1,(TEXT("Null Interrupt Thread \n")));
return NDIS_STATUS_FAILURE;
}
waitStatus = WaitForSingleObject(Adapter->hThreadReadyEvent, INFINITE);
if (WAIT_OBJECT_0 != waitStatus)
{
//RETAILMSG(1,(TEXT("call WaitFor SingleObject Fail : \n")));
return NDIS_STATUS_FAILURE;
}
/*
Adapter->hTxThread = CreateThread(NULL,
0,
(LPTHREAD_START_ROUTINE)MrvTransmitThread,
Adapter,
0,
&threadID);
if (NULL == Adapter->hTxThread)
{
RETAILMSG(1,(TEXT("Null Transmit Thread \n")));
return NDIS_STATUS_FAILURE;
}
waitStatus = WaitForSingleObject(Adapter->hThreadReadyEvent, INFINITE);
if (WAIT_OBJECT_0 != waitStatus)
{
RETAILMSG(1,(TEXT("call WaitFor SingleObject Fail : \n")));
return NDIS_STATUS_FAILURE;
}
*/
//tt ++ ra fail
// NdisMInitializeTimer(
// &Adapter->MrvDrvSendCompleteTimer,
// Adapter->MrvDrvAdapterHdl,
// (PNDIS_TIMER_FUNCTION) BatchIndicateRetQPkts,
// (PVOID) Adapter
// );
//tt --
// Initialize Timer
#ifdef AUTO_REASSOCIATION
Adapter->bIsSendCmdImterSet = FALSE;
NdisMInitializeTimer(
&Adapter->MrvDrvSendCmdTimer,
Adapter->MrvDrvAdapterHdl,
(PNDIS_TIMER_FUNCTION) MrvDrvSendCmdTimerHandler,
(PVOID) Adapter
);
#endif
#ifdef IF_SDIO
//This Timer now is used to work around for interrupt missing issue.
#if 0 //dralee_20060613
NdisMInitializeTimer(
&Adapter->MrvDrvIntWorkAroundTimer,
Adapter->MrvDrvAdapterHdl,
(PNDIS_TIMER_FUNCTION)IntWorkAroundTimer,
(PVOID)Adapter
);
//Adapter->MrvDrvIntWorkAroundTimerIsSet = FALSE;
#endif
//Adapter->MrvDrvSdioIntTimerIsSet = FALSE;
NdisMInitializeTimer(
&Adapter->MrvDrvSdioCheckFWReadyTimer,
Adapter->MrvDrvAdapterHdl,
(PNDIS_TIMER_FUNCTION)MrvDrvSdioCheckFWReadyTimerFunction,
(PVOID)Adapter
);
Adapter->MrvDrvSdioCheckFWReadyTimerIsSet = FALSE;
#endif // IF_SDIO
#ifdef RETQ_TIMER
NdisMInitializeTimer(
&Adapter->MrvRetQTimer,
Adapter->MrvDrvAdapterHdl,
(PNDIS_TIMER_FUNCTION)MrvRetQTimerFunction,
(PVOID)Adapter
);
Adapter->RetQTimerIsSet = 0;
#endif
NdisInitializeWorkItem(
&Adapter->MrvDrvPMWorkItem,
(NDIS_PROC)MrvDrvPMCallback,
(PVOID)Adapter
);
NdisMInitializeTimer(
&Adapter->MrvDrvIndicateConnectStatusTimer,
Adapter->MrvDrvAdapterHdl,
(PNDIS_TIMER_FUNCTION)MrvDrvIndicateConnectStatusTimer,
(PVOID)Adapter
);
Adapter->DisconnectTimerSet = FALSE;
// Initialize the timer for command
NdisMInitializeTimer(
&Adapter->MrvDrvCommandTimer,
Adapter->MrvDrvAdapterHdl,
(PNDIS_TIMER_FUNCTION) MrvDrvCommandTimerFunction,
(PVOID)Adapter
);
Adapter->CommandTimerSet = FALSE;
// Initialize the timer for Tx
NdisMInitializeTimer(
&Adapter->MrvDrvTxPktTimer,
Adapter->MrvDrvAdapterHdl,
(PNDIS_TIMER_FUNCTION) MrvDrvTxPktTimerFunction,
(PVOID)Adapter
);
Adapter->TxPktTimerIsSet = FALSE;
#ifdef TX_PRY_Q
InitializeTxNodeQ(Adapter);
#endif
#ifdef AvoidOidSetScan
// Initialize the timer for avoid scan when 802.1x authentication be not completed
NdisMInitializeTimer(
&Adapter->MrvDrvAvoidScanAfterConnectedTimer,
Adapter->MrvDrvAdapterHdl,
(PNDIS_TIMER_FUNCTION)MrvDrvAvoidScanAfterConnectedTimer,
(PVOID)Adapter
);
Adapter->bAvoidScanAfterConnectedforMSecs = FALSE;
#endif
// Initialize the timer for TX Check queued packed and send
//lykao, 061605
/*
NdisMInitializeTimer(
&Adapter->MrvDrvCheckTxQueueTimer,
Adapter->MrvDrvAdapterHdl,
(PNDIS_TIMER_FUNCTION) MrvDrvCheckTxQueueTimerFunction,
(PVOID)Adapter
);
Adapter->CheckTxQueueTimerIsSet = FALSE;
//lykao, 061505
NdisMSetPeriodicTimer(
&Adapter->MrvDrvCheckTxQueueTimer,
5
);
*/
//NdisMSetPeriodicTimer(
// &Adapter->MrvDrvCheckTxQueueTimer,
// 1
// );
//Adapter->CheckTxQueueTimerIsSet = TRUE;
#ifdef REASSOCIATE
// Initialize the timer for Reconnect
NdisMInitializeTimer(
&Adapter->MrvReConnectTimer,
Adapter->MrvDrvAdapterHdl,
(PNDIS_TIMER_FUNCTION) MrvDrvReConnectTimerFunction,
(PVOID)Adapter
);
Adapter->ReConnectTimerIsSet = FALSE;
DBGPRINT(DBG_LOAD, (" MrvReConnectTimer success \n"));
#endif //REASSOCIATE
#ifdef ACTIVE_ROAMING
// Initialize the timer for ActiveRoaming
NdisMInitializeTimer(
&Adapter->MrvActiveRoamingTimer,
Adapter->MrvDrvAdapterHdl,
(PNDIS_TIMER_FUNCTION) MrvDrvActiveRoamingTimerFunction,
(PVOID)Adapter
);
Adapter->ActiveRoamingTimerIsSet = FALSE;
DBGPRINT(DBG_LOAD, (" MrvReConnectTimer success \n"));
#ifdef BG_SCAN
// Initialize the timer for BGActiveRoaming
NdisMInitializeTimer(
&Adapter->MrvBGActiveRoamingTimer,
Adapter->MrvDrvAdapterHdl,
(PNDIS_TIMER_FUNCTION) MrvDrvBGActiveRoamingTimerFunction,
(PVOID)Adapter
);
Adapter->BGActiveRoamingTimerIsSet = FALSE;
#endif //BG_SCAN
#endif //ACTIVE_ROAMING
if ( (Adapter->DefaultPerChannelScanTime < 20) || (Adapter->DefaultPerChannelScanTime > 1000) )
{
DBGPRINT(DBG_WARNING, ("Default channel time out of range: %d, set to default(%d)!\n",
Adapter->DefaultPerChannelScanTime, HostCmd_SCAN_MAX_CH_TIME));
Adapter->DefaultPerChannelScanTime = HostCmd_SCAN_MAX_CH_TIME;
}
//#ifdef IF_SDIO
// #ifndef MRVL_WINCE50
// NdisAllocateSpinLock(&Adapter->lDPCLock);
// #endif
//NdisAllocateSpinLock(&Adapter->lDPCPendingLock);
//#endif //IF_SDIO
return NDIS_STATUS_SUCCESS;
}
//tt ++ v5 firmware
/*
Does the code need to delay for 10000 ms!!??
*/
VOID BCAInitialization( IN PMRVDRV_ADAPTER Adapter )
{
if ( Adapter->BTMode != 0 )
{
// only send command if BT mode is not 0
DBGPRINT(DBG_LOAD, ("Setting BT Mode parameters:\n"));
DBGPRINT(DBG_LOAD, ("BTMode=0x%x, Antenna Config = 0x%x, Freq Config = 0x%x\n",
Adapter->BTMode, Adapter->BTAntennaConfig, Adapter->BTFrequencyConfig));
DBGPRINT(DBG_LOAD, ("TX Lo = 0x%x, TX Hi = 0x%x, RX Lo = 0x%x, RX Hi = 0x%x\n",
Adapter->BTWLANTxPriorityLo, Adapter->BTWLANTxPriorityHi,
Adapter->BTWLANRxPriorityLo, Adapter->BTWLANRxPriorityHi));
PrepareAndSendCommand(
Adapter,
HostCmd_CMD_BCA_CONFIG,
HostCmd_ACT_GEN_SET,
HostCmd_OPTION_USE_INT,
0,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
NULL );
NdisMSleep(10000);
DBGPRINT( DBG_LOAD, ("TrafficType=%d, TimeShareInterval=%d, BTTime=%d\n",
Adapter->BTTrafficType, Adapter->BTTimeShareInterval, Adapter->BTTime) );
#ifdef BCA
PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_BCA_CONFIG_TIMESHARE,
HostCmd_ACT_GEN_SET,
HostCmd_OPTION_USE_INT,
0,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
NULL );
NdisMSleep(10000);
#endif //BCA
}
}
//tt --
//************************************************************************************
//* Function: PostFwDownload
//* Description: Perform all functions necessary to re-initialize device after a FW
//* download - this will be called from device init, and from
//* power management on wake from S3 sleep state.
//* Arguments: PMRVDRV_ADAPTER Adapter and NDIS_HANDLE WrapperConfigurationContext
//* Returns NDIS_STATUS_SUCCESS or NDIS failure code.
//* Date: 07/10/2003
//************************************************************************************
NDIS_STATUS PostFwDownload ( IN PMRVDRV_ADAPTER Adapter )
{
ULONG BytesWritten,BytesNeeded;
HostCmd_DS_802_11_RADIO_CONTROL RadioControl;
//------------------------------------------------------------------------------------
// PJG: Setup FW with our configured Fragmentation and RTS thresholds.
//------------------------------------------------------------------------------------
DBGPRINT(DBG_LOAD,("Setting fragmentation threshold\n"));
PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_SNMP_MIB,
0,
HostCmd_OPTION_USE_INT,
OID_802_11_FRAGMENTATION_THRESHOLD,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
NULL );
NdisMSleep(10000);
DBGPRINT(DBG_LOAD,("Setting RTS threshold\n"));
PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_SNMP_MIB,
0,
HostCmd_OPTION_USE_INT,
OID_802_11_RTS_THRESHOLD,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
NULL );
NdisMSleep(10000);
// BT Co-existence
//tt ++ v5 firmware
BCAInitialization( Adapter );
//tt --
#if 0 //tt ++ v5 firmware
if ( Adapter->BTMode != 0 )
{
// only send command if BT mode is not 0
DBGPRINT(DBG_LOAD, ("Setting BT Mode parameters:\n"));
DBGPRINT(DBG_LOAD, ("BTMode=0x%x, Antenna Config = 0x%x, Freq Config = 0x%x\n",
Adapter->BTMode, Adapter->BTAntennaConfig, Adapter->BTFrequencyConfig));
DBGPRINT(DBG_LOAD, ("TX Lo = 0x%x, TX Hi = 0x%x, RX Lo = 0x%x, RX Hi = 0x%x\n",
Adapter->BTWLANTxPriorityLo, Adapter->BTWLANTxPriorityHi,
Adapter->BTWLANRxPriorityLo, Adapter->BTWLANRxPriorityHi));
PrepareAndSendCommand(
Adapter,
HostCmd_CMD_BCA_CONFIG,
HostCmd_ACT_GEN_SET,
HostCmd_OPTION_USE_INT,
0,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
NULL );
NdisMSleep(10000);
}
#endif //0 //tt -- firmware
//------------------------------------------------------------------------------------
// PJG: Setup FW for either short, long or automatic preamble
//------------------------------------------------------------------------------------
DBGPRINT(DBG_LOAD,("Setting preamble\n"));
RadioControl.Command=HostCmd_CMD_802_11_RADIO_CONTROL;
RadioControl
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -