📄 initproc.c
字号:
#else
NdisMSleep(50); // Wait long enough
#endif
NdisFillMemory(Adapter->CurrentAddr, MRVDRV_ETH_ADDR_LEN, 0xff);
NdisFillMemory(Adapter->PermanentAddr, MRVDRV_ETH_ADDR_LEN, 0xff);
//Adapter->gotMACAddress = FALSE;
PrepareAndSendCommand(
Adapter,
HostCmd_CMD_GET_HW_SPEC,
0,
HostCmd_OPTION_USE_INT,
(NDIS_OID)0,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
NULL);
#ifndef IF_SPI
NdisMSleep(2500000);
#else
NdisMSleep(2500);
#endif
/// Power-Save
//dralee_0110
//if ( Adapter->PSMode != 0)
{
Adapter->PSMode = Ndis802_11PowerModeMAX_PSP;
Adapter->PSMode = Ndis802_11PowerModeCAM;
//PSSleep(Adapter);
}
//Plus
//Adapter->PSMode = Ndis802_11PowerModeMAX_PSP;
DBGPRINT(DBG_NEWPS, ("Adapter PSMODE = %d\n", Adapter->PSMode));
#ifdef SDIO
// give the interrupt timer a chance to execute
NdisMSleep(10000);
#endif // SDIO
InitializeWirelessConfig(Adapter);
if ( Adapter->EnableQOS )
{
DBGPRINT(DBG_QOS, ("QOS ENABLED.\n"));
// send down command to enable QOS
PrepareAndSendCommand(Adapter,
HostCmd_CMD_802_11_ENABLE_QOS_WME,
HostCmd_ACT_SET,
HostCmd_OPTION_USE_INT,
0,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
NULL);
}
else
{
DBGPRINT(DBG_QOS, ("QOS DISABLED.\n"));
}
//// L2 Roaming Configration Check ////
if ( Adapter->RoamingMode > MRVL_L2ROAMING_MODE_AUTO )
{
Adapter->RoamingMode = MRVL_L2ROAMING_MODE_OFF;
}
if ( Adapter->RoamingPeriod < MRVL_L2ROAMING_MIN_PERIOD )
{
Adapter->RoamingPeriod = MRVL_L2ROAMING_MIN_PERIOD;
}
DBGPRINT(DBG_L2ROAMING, ("L2Roaming: Mode = %d, Level = %d, period = %d\n",
Adapter->RoamingMode, Adapter->RoamingLevel, Adapter->RoamingPeriod));
/// Add the FW version and Driver Version to Registry
#ifdef UNDER_CE
{ // Add driver version to registry
REG_VALUE_DESCR Vals[2];
Vals[0].val_data = (PBYTE)TEXT(MRVDRV_DRIVER_BUILD_VERSION);
Vals[0].val_name = TEXT("DriverVersion");
Vals[0].val_type = REG_SZ;
Vals[1].val_name = NULL;
#if defined(SDIO)
//AddKeyValues (TEXT("Comm\\EAGLEND5SDIO"), Vals);
//lykao, 053005
#ifdef MRV_CHIP_8381PN
AddKeyValues (TEXT("Comm\\SD8381PN"), Vals);
#endif // #ifdef MRV_CHIP_8381PN
#ifdef MRV_CHIP_8385PN
AddKeyValues (TEXT("Comm\\SD8385PN"), Vals);
#endif // #ifdef MRV_CHIP_8385PN
#ifdef MRV_CHIP_8385H
AddKeyValues (TEXT("Comm\\SD8385H"), Vals);
#endif // #ifdef MRV_CHIP_8385H
#ifdef MRV_CHIP_8305
AddKeyValues (TEXT("Comm\\EAGLEND5SDIO"), Vals);
#endif // #ifdef MRV_CHIP_8305
#ifdef MRV_CHIP_8686PN //dralee_1209
AddKeyValues (TEXT("Comm\\SD8686PN"), Vals);
#endif // #ifdef MRV_CHIP_8686PN
#elif defined (IF_SPI)
///crlo:add ++
#ifdef MRV_CHIP_8381PN
AddKeyValues (TEXT("Comm\\GSPI8381PN"), Vals);
#endif // #ifdef MRV_CHIP_8381PN
#ifdef MRV_CHIP_8385PN
AddKeyValues (TEXT("Comm\\GSPI8385PN"), Vals);
#endif // #ifdef MRV_CHIP_8385PN
#ifdef MRV_CHIP_8385H
AddKeyValues (TEXT("Comm\\GSPI8385H"), Vals);
#endif // #ifdef MRV_CHIP_8385H
///crlo:add --
#else //SDIO
#ifdef MRV_CHIP_8381P
AddKeyValues (TEXT("Comm\\CF8381P"), Vals);
#endif // #ifdef MRV_CHIP_8381P
#ifdef MRV_CHIP_8381PN
AddKeyValues (TEXT("Comm\\CF8381PN"), Vals);
#endif // #ifdef MRV_CHIP_8381PN
#ifdef MRV_CHIP_8385PN
AddKeyValues (TEXT("Comm\\CF8385PN"), Vals);
#endif // #ifdef MRV_CHIP_8385PN
#ifdef MRV_CHIP_8399
AddKeyValues (TEXT("Comm\\SD8399"), Vals);
#endif // #ifdef MRV_CHIP_8385PN
#ifdef MRV_CHIP_8385H
AddKeyValues (TEXT("Comm\\CF8385H"), Vals);
#endif // #ifdef MRV_CHIP_8385H
#ifdef MRV_CHIP_8305
AddKeyValues (TEXT("Comm\\EAGLEND5"), Vals);
#endif // #ifdef MRV_CHIP_8305
#endif //SDIO
}
#endif // UNDER_CE
/// Set DTIM to FW : Need FIX later
#ifdef MRVL_SET_REG_DTIM
DBGPRINT(DBG_OID, ("*****1 reg MRVL_SET_REG_DTIM OK DTIMNum=%d\n",Adapter->DTIMNum));
#ifdef MRVL_USE_MULTIPLE_DTIM
Adapter->DTIMFlag=TRUE;
Status=PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_MULTIPLE_DTIM,
HostCmd_ACT_GET,
HostCmd_OPTION_USE_INT,
0,
HostCmd_PENDING_ON_SET_OID,
0,
FALSE,
NULL,
0,
0,
NULL
);
if (Status == NDIS_STATUS_FAILURE || Status == NDIS_STATUS_RESOURCES)
{ DBGPRINT(DBG_ERROR , ("MRVL_SET_REG_DTIM Fail\n"));
}
else
{
DBGPRINT(DBG_OID, ("2 reg MRVL_SET_REG_DTIM OK DTIMNum=%d\n",Adapter->DTIMNum));
}
#endif
#endif
#ifdef AUTO_REASSOCIATION
Status = SubscribeMacEventForReAssoc( Adapter );
if ( !NDIS_SUCCESS( Status ) )
DBGPRINT( DBG_ERROR, ("[Error] Cannot subscribe events for re-association\n") );
#endif
// indicate to OS that the network is not connected after 1 second
NdisMCancelTimer(&Adapter->MrvDrvIndicateConnectStatusTimer, &timerStatus);
NdisMSetTimer(&Adapter->MrvDrvIndicateConnectStatusTimer, 500);
Adapter->DisconnectTimerSet = TRUE;
// tt ++ v5 firmware test
/*
v5MrvPrintFileW( L"@@@ test oid start\n" );
{
static ULONG ulByteNeeded, ulByteWritten;
{
static NDIS_802_11_RTS_THRESHOLD FregValue;
FregValue = 2520;
MrvDrvSetInformation( Adapter, OID_802_11_RTS_THRESHOLD, &FregValue, sizeof(FregValue), &ulByteWritten, &ulByteNeeded );
Sleep(2000);
}
{
static NDIS_802_11_RTS_THRESHOLD InfoBuf;
InfoBuf = 0;
MrvDrvQueryInformation( Adapter, OID_802_11_RTS_THRESHOLD, &InfoBuf, sizeof(InfoBuf), &ulByteWritten, &ulByteNeeded );
v5MrvPrintFileW( L">>> %d\n", InfoBuf );
Sleep(2000);
}
}
v5MrvPrintFileW( L"@@@ test oid end\n\n\n" );
*/
#ifdef CONFIG_WLAN_PMU_CAL_TX_POWER
// Cal Tx Power
{
unsigned long BytesNeeded;
BytesNeeded = sizeof(wlan_cal_data);
memcpy(&wlan_cal_data[BytesNeeded-MRVDRV_ETH_ADDR_LEN], Adapter->PermanentAddr,MRVDRV_ETH_ADDR_LEN);
Status=PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_CAL_DATA_EXT,
HostCmd_ACT_GEN_SET,
HostCmd_OPTION_USE_INT,
0,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
0,
0,
&BytesNeeded,
&wlan_cal_data[0]
);
if (Status == NDIS_STATUS_FAILURE || Status == NDIS_STATUS_RESOURCES)
{
RETAILMSG(1,(L"PMU ERROR:" L"HostCmd_CMD_802_11_CAL_DATA_EXT failed."));
}
else
{
RETAILMSG(1,(L"PMU TRACE:" L"HostCmd_CMD_802_11_CAL_DATA_EXT successfully."));
}
}
#endif
#ifdef CONFIG_WLAN_PMU_EXT_CLK
{
OID_MRVL_DS_SLEEP_PARAMS Sp;
unsigned long BytesNeeded;
BytesNeeded = sizeof(OID_MRVL_DS_SLEEP_PARAMS);
Sp.Error = 30;
Sp.Offset = 500;
Sp.StableTime = 2000;
Sp.CalControl = 1;
Sp.ExternalSleepClk = 2;
Sp.Reserved = 0;
Status=PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_SLEEP_PARAMS,
HostCmd_ACT_GEN_SET,
HostCmd_OPTION_USE_INT,
0,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
0,
0,
&BytesNeeded,
&Sp
);
if (Status == NDIS_STATUS_FAILURE || Status == NDIS_STATUS_RESOURCES)
{
RETAILMSG(1,(L"PMU ERROR:" L"HostCmd_CMD_802_11_SLEEP_PARAMS failed."));
}
else
{
RETAILMSG(1,(L"PMU TRACE:" L"HostCmd_CMD_802_11_SLEEP_PARAMS successfully."));
}
}
#endif
GetMacAddr();
// tt --
///crlo:add ++
#ifdef CONFIG_WLAN_PMU
wlan_PMUInit(Adapter);
#endif
#if defined(IF_SPI)
isDrvInitialized = TRUE;
#endif ///IF_SPI
///crlo:add --
return NDIS_STATUS_SUCCESS;
}
/******************************************************************************
*
* Name: MrvDrvAllocateComplete()
*
* Description:
* NDIS miniport memory allocation complete event handler
*
* Conditions for Use:
* NDIS wrapper will call this function when an async memory allocation is completed.
*
* Arguments:
*
* NDIS_HANDLE MiniportAdapterContext
* IN PVOID VirtualAddress
* IN PNDIS_PHYSICAL_ADDRESS PhysicalAddress
* IN ULONG Length
* IN PVOID Context
*
* Return Value: None
*
* Notes: This routine is not implemented in this version of driver.
*
*****************************************************************************/
VOID
MrvDrvAllocateComplete(
NDIS_HANDLE MiniportAdapterContext,
IN PVOID VirtualAddress,
IN PNDIS_PHYSICAL_ADDRESS PhysicalAddress,
IN ULONG Length,
IN PVOID Context
)
{
DBGPRINT(DBG_LOAD,("INIT - Enter MrvDrvAllocateComplete \n"));
return;
}
/*
===============================================================================
CODED PRIVATE PROCEDURES
===============================================================================
*/
/******************************************************************************
*
* Name: InitAdapterObject()
*
* Description: Device object initialization function
*
* Arguments:
* PMRVDRV_ADAPTER Adapter
*
* Return Value:
* NDIS_STATUS_SUCCESS
* NDIS_STATUS_FAILURE
*
* Notes:
*
*****************************************************************************/
VOID InitAdapterObject(
IN PMRVDRV_ADAPTER Adapter
)
{
USHORT i;
// Device information
Adapter->VendorID = 0xffffffff; // Will be filled with real data
Adapter->nAssocRspCount = 0; //tt ra fail
#ifdef AUTO_REASSOCIATION
Adapter->ReAssociationInProgress = FALSE;
Adapter->bIsSendCmdImterSet = FALSE;
Adapter->uDelayForReAssociation = 3000;
Adapter->uRetryForReassociation = 5;
Adapter->uCurrentRetryForReassociation = 0;
#endif
// NDIS Timer variables
Adapter->TimerInterval = MRVDRV_DEFAULT_TIMER_INTERVAL;
Adapter->isCommandTimerExpired = FALSE;
// Operation characteristics
Adapter->CurrentLookAhead = (ULONG)MRVDRV_MAXIMUM_ETH_PACKET_SIZE - MRVDRV_ETH_HEADER_SIZE;
Adapter->ProtocolOptions = 0;
Adapter->MACOptions = (ULONG)NDIS_MAC_OPTION_NO_LOOPBACK;
Adapter->MediaConnectStatus = NdisMediaStateDisconnected;
#ifdef DEBUG_PARA_ROAMING_PRINT
RETAILMSG(1,(TEXT("NdisMediaStateDisconnected is caused by InitAdapterObject!...\n")));
#endif
WriteCommonLogFile(WIFI_LOG,"AP is disconnected(Reason=3) (InitAdapterObject)!...\r\n",
strlen("AP is disconnected(Reason=3) (InitAdapterObject)!...\r\n"));
if(g_AssociationDuration != 0)
{
char logstr[200];
sprintf(logstr,"Association Duration is %d seconds\r\n", (GetTickCount() - g_AssociationDuration)/1000);
WriteCommonLogFile(WIFI_LOG,logstr, strlen(logstr));
g_AssociationDuration = 0;
}
Adapter->LinkSpeed = MRVDRV_LINK_SPEED_DEFAULT;//MRVDRV_LINK_SPEED_1mbps;
Adapter->MediaInUse = NdisMedium802_3;
NdisFillMemory(Adapter->CurrentAddr, MRVDRV_ETH_ADDR_LEN, 0xff);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -