📄 initproc.c
字号:
// Status variables
Adapter->HardwareStatus = NdisHardwareStatusInitializing;
// 802.11 specific
Adapter->WEPStatus = Ndis802_11WEPDisabled;
Adapter->AuthenticationMode = Ndis802_11AuthModeOpen;
Adapter->InfrastructureMode = Ndis802_11Infrastructure;
Adapter->PrivacyFilter = Ndis802_11PrivFilterAcceptAll;
Adapter->ulNumOfBSSIDs =0;
Adapter->ulCurrentBSSIDIndex =0;
Adapter->ulAttemptedBSSIDIndex =0;
///Adapter->bAutoAssociation = FALSE;
Adapter->LastRSSI = MRVDRV_RSSI_DEFAULT_NOISE_VALUE;
// Adapter->RxPDIndex = 0;
Adapter->ulLastScanRequestTime =0;
NdisZeroMemory(&(Adapter->CurrentSSID), sizeof(NDIS_802_11_SSID));
NdisZeroMemory(&(Adapter->NullSSID), sizeof(NDIS_802_11_SSID));
NdisZeroMemory(Adapter->NullBSSID, MRVDRV_ETH_ADDR_LEN);
// Initialize RSSI-related variables
Adapter->RSSITriggerValue = MRVDRV_RSSI_TRIGGER_DEFAULT;
Adapter->RSSITriggerCounter = 0;
// Tx related varables
// Adapter->QueuedPacket = NULL; //by dralee
Adapter->SentPacket = NULL;
// Power management state
Adapter->CurPowerState = NdisDeviceStateD0;
// PnP and power profile
Adapter->SurpriseRemoved = FALSE;
for( i=0; i<MRVDRV_TX_POWER_LEVEL_TOTAL ; i++){
Adapter->PowerLevelList[i] =
HostCmd_ACT_TX_POWER_LEVEL_MIN + i * HostCmd_ACT_TX_POWER_LEVEL_GAP;
}
Adapter->SupportTxPowerLevel = MRVDRV_TX_POWER_LEVEL_TOTAL;
Adapter->CurrentTxPowerLevel = HostCmd_ACT_TX_POWER_INDEX_MID;
Adapter->TxPowerLevel = 0;
Adapter->TxPowerLevelIsSetByOS = FALSE;
// Set number of WEP keys
Adapter->NoOfWEPEntry = 0;
// Use system up time (in milli sec) for IV
NdisGetSystemUpTime(&Adapter->IV);
Adapter->SoftwareFilterOn = FALSE;
Adapter->CurrentPacketFilter = NDIS_PACKET_TYPE_DIRECTED | NDIS_PACKET_TYPE_BROADCAST;
Adapter->usMacControlRecord = HostCmd_ACT_MAC_RX_ON |
HostCmd_ACT_MAC_TX_ON |
HostCmd_ACT_MAC_INT_ENABLE|
HostCmd_ACT_MAC_MULTICAST_ENABLE|
HostCmd_ACT_MAC_BROADCAST_ENABLE ;
Adapter->AcceptAnySSID=0x1;
Adapter->AutoConfig=0x1;
Adapter->SetActiveScanSSID=0x0;
Adapter->RadioOn = TRUE;
Adapter->TxAntenna = 2;
Adapter->RxAntenna = 0x0000ffff;
Adapter->DataRate = 0;
Adapter->FragThsd = 2346;
Adapter->RTSThsd = 2346;
Adapter->Preamble = HostCmd_TYPE_LONG_PREAMBLE;
Adapter->TxPowerLevel = 100; // 100 mW
Adapter->Channel = 1;//default
// Power Save
Adapter->PSMode = Ndis802_11PowerModeCAM;
Adapter->psState = PS_STATE_FULL_POWER;
Adapter->ulDTIM = 1;
Adapter->ulAwakeTimeStamp = 0;
#ifdef WPA
Adapter->EncryptionStatus = Ndis802_11EncryptionDisabled;
// setup association information buffer
{
PNDIS_802_11_ASSOCIATION_INFORMATION pAssoInfo;
//ULONG ulLength;
pAssoInfo = (PNDIS_802_11_ASSOCIATION_INFORMATION)
Adapter->AssocInfoBuffer;
// ulLength = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION);
//ulLength = (ulLength) + 3
DBGPRINT(DBG_LOAD, ("pAssoInfo = 0x%x, pAssoInfo->Length = 0x%x\n", pAssoInfo,
&(pAssoInfo->Length)));
// assume the buffer has already been zero-ed
// no variable IE, so both request and response IE are
// pointed to the end of the buffer, 4 byte aligned
pAssoInfo->OffsetRequestIEs =
pAssoInfo->OffsetResponseIEs =
pAssoInfo->Length = ((sizeof(NDIS_802_11_ASSOCIATION_INFORMATION) + 3)
/4) * 4 ;
}
#endif // #ifdef WPA
Adapter->ulDTIM = 10; // assume to be 100 ms
#ifdef DEEP_SLEEP
Adapter->IsDeepSleep = FALSE;
Adapter->IsDeepSleepRequired = FALSE;
#endif
#ifdef ADHOCAES
Adapter->AdhocAESEnabled = FALSE;
#endif
#if defined(SDIO) || defined(IF_SPI)
#ifndef MRVL_WINCE50
#ifdef MRVL_SET_RF_RADIO
Adapter->RadioFlag=0;
Adapter->RadioControl=(USHORT)(Adapter->Preamble|Adapter->RadioOn);
#endif
#ifdef MRVL_MACADDRESS
Adapter->MrvlMacFlag = 0;
#endif
#ifdef MRVL_REGIONCODE
Adapter->MrvlRegionFlag =0;
#endif
#ifdef MRVL_DATARATE
Adapter->MrvlDataRateFlag=0;
#endif
#ifdef MRVL_RXTXANTENNA
//****modify RF_ANTENNA :set initial value
Adapter->MrvlRxAntennaFlag=0;
Adapter->MrvlTxAntennaFlag=0;
#endif
#ifdef MRVL_RFCHANNEL
Adapter->ChannelFlag=0;
#endif
#endif //MRVL_WINCE50
#ifdef MRVL_PSCONFIRM
Adapter->bPSConfirm=FALSE;
#endif
#endif //SDIO
Adapter->bIsPendingReset = FALSE;
Adapter->bIsAssociationBlockedByScan = FALSE;
Adapter->bIsScanWhileConnect = FALSE;
Adapter->bIsConnectToAny = FALSE;
Adapter->bIsScanInProgress = FALSE;
Adapter->bIsAssociateInProgress = FALSE;
#ifdef MRV_CHIP_8385H
Adapter->region_channel[0].Valid = TRUE;
Adapter->region_channel[0].Band = MRVDRV_802_11_BAND_BG;
Adapter->region_channel[0].Region = 0x40; //JPN
Adapter->region_channel[0].CFP = channel_freq_power_JPN_BG;
Adapter->region_channel[0].NrCFP = 14;
Adapter->region_channel[1].Valid = TRUE;
Adapter->region_channel[1].Band = MRVDRV_802_11_BAND_A;
Adapter->region_channel[1].Region = 0x10; //USA
Adapter->region_channel[1].CFP = channel_freq_power_A;
Adapter->region_channel[1].NrCFP = 13;
//lykao, 053005, set Adhoc Initial value
Adapter->AdhocDefaultBand = MRVDRV_802_11_BAND_BG;
#elif defined(MRV_CHIP_8385PN)
#ifdef DEBUG_PARA_ROAMING
Adapter->region_channel[0].Valid = TRUE;
Adapter->region_channel[0].Band = MRVDRV_802_11_BAND_BG;
Adapter->region_channel[0].Region = 0x10; //USA
Adapter->region_channel[0].CFP = channel_freq_power_US_BG;
Adapter->region_channel[0].NrCFP = 11;
//Do NOT support 802.11 a here!
Adapter->region_channel[1].Valid = FALSE;
Adapter->region_channel[1].Band = MRVDRV_802_11_BAND_A;
Adapter->region_channel[1].Region = 0x10; //USA
Adapter->region_channel[1].CFP = channel_freq_power_A;
Adapter->region_channel[1].NrCFP = 13;
#else
Adapter->region_channel[0].Valid = TRUE;
Adapter->region_channel[0].Band = MRVDRV_802_11_BAND_BG;
Adapter->region_channel[0].Region = 0x40; //JPN
Adapter->region_channel[0].CFP = channel_freq_power_JPN_BG;
Adapter->region_channel[0].NrCFP = 14;
#endif
#elif defined(MRV_CHIP_8686PN) //dralee_1209
Adapter->region_channel[0].Valid = TRUE;
Adapter->region_channel[0].Band = MRVDRV_802_11_BAND_BG;
Adapter->region_channel[0].Region = 0x40; //JPN
Adapter->region_channel[0].CFP = channel_freq_power_JPN_BG;
Adapter->region_channel[0].NrCFP = 14;
#elif defined(MRV_CHIP_8399)
Adapter->region_channel[0].Valid = TRUE;
Adapter->region_channel[0].Band = MRVDRV_802_11_BAND_BG;
Adapter->region_channel[0].Region = 0x40; //JPN
Adapter->region_channel[0].CFP = channel_freq_power_JPN_BG;
Adapter->region_channel[0].NrCFP = 14;
#else
Adapter->region_channel[0].Valid = TRUE;
Adapter->region_channel[0].Band = MRVDRV_802_11_BAND_B;
Adapter->region_channel[0].Region = 0x40; //JPN
Adapter->region_channel[0].CFP = channel_freq_power_JPN_BG;
Adapter->region_channel[0].NrCFP = 14;
#endif
Adapter->cur_region_channel = &(Adapter->region_channel[0]);
Adapter->connected_band = MRVDRV_802_11_BAND_BG;
Adapter->connected_channel = 1;
//lykao, 053005, set Adhoc Initial value
Adapter->AdhocDefaultChannel = 6;
Adapter->AdhocWiFiDataRate = 0; //set adhoc Band=MRVDRV_802_11_BAND_B
Adapter->SetSD4BIT =0; //Default setSD1BIT =4 bit mode
#ifdef MRVL_WINCE50
Adapter->RegionTableIndex = 0;
Adapter->RegionCode = 0x10;
#endif
#if defined (IF_SPI)
Adapter->SdioIstThread = 100;
#else
Adapter->SdioIstThread=150;
#endif ///IF_SPI
//Adapter->SendPSFlag=FALSE;
#ifdef REASSOCIATE
Adapter->bIsSystemConnectNow = FALSE;
#endif //REASSOCIATE
#ifdef CONFIG_WLAN_PMU
Adapter->DTIMNum = 1;
#endif
return;
}
/******************************************************************************
*
* Name: AllocateAdapterBuffer()
*
* Description: Device object buffer initialization function
*
* Arguments:
* PMRVDRV_ADAPTER Adapter
*
* Return Value: NDIS_STATUS_SUCCESS or NDIS_STATUS_FAILURE
*
* Notes:
*
*****************************************************************************/
NDIS_STATUS AllocateAdapterBuffer(
IN PMRVDRV_ADAPTER Adapter
)
{
NDIS_STATUS Status;
// ULONG i;
//ULONG ulBufSize;
// PUCHAR pTempVirtualAddr;
// NDIS_PHYSICAL_ADDRESS TempPhyAddr;
//PNDIS_WLAN_BSSID_EX pTempBSSIDList;
//PBSS_DESCRIPTION_SET_ALL_FIELDS pTempBssDescList;
// We are going to use non-cached shared memory for Rx buffers, no need to
// check cache fill size offset
ULONG Offset;
Offset = 0;
Adapter->InitializationStatus |= MRVDRV_INIT_STATUS_MAP_REGISTER_ALLOCATED;
// Build up TxQ
if(AllocateSingleTx(Adapter) != NDIS_STATUS_SUCCESS)
{
FreeAdapterObject(Adapter);
return NDIS_STATUS_RESOURCES;
}
// Build up RxQ
Status = AllocateRxQ(Adapter);
if( Status != NDIS_STATUS_SUCCESS ){
FreeAdapterObject(Adapter);
return NDIS_STATUS_RESOURCES;
}
#ifdef CONFIG_WLAN_PMU
Status = wlan_PMUAllocateTxQ(Adapter);
if( Status != NDIS_STATUS_SUCCESS ){
FreeAdapterObject(Adapter);
return NDIS_STATUS_RESOURCES;
}
#endif
// Build up command buffers
Status = AllocateCmdBuffer(Adapter);
if( Status != NDIS_STATUS_SUCCESS ){
FreeAdapterObject(Adapter);
return NDIS_STATUS_RESOURCES;
}
return NDIS_STATUS_SUCCESS;
}
/******************************************************************************
*
* Name: ReadRegistryInfo()
*
* Description: Device registry read function
*
* Arguments:
* PMRVDRV_ADAPTER Adapter
* NDIS_HANDLE RegHdl
*
*
* Return Value:
* NDIS_STATUS_SUCCESS
* NDIS_STATUS_FAILURE
*
* Notes:
*
*****************************************************************************/
NDIS_STATUS ReadRegistryInfo(
IN PMRVDRV_ADAPTER Adapter,
IN NDIS_HANDLE RegHdl
)
{
NDIS_STATUS Status;
REGINFOTAB *RegInfoTab;
UINT i;
ULONG j;
// ULONG ul;
UINT Value;
PUCHAR pPtr;
PUCHAR pTmp;
// PUCHAR stopstring;
NDIS_CONFIGURATION_PARAMETER NdisConfigParam,*ReturnedValue;
ANSI_STRING DestinationANSIString;
char UnicodeBuffer[512];//to save the UNICODE string.
char AnsiBuffer[128];//to save the ANSI string.
PUCHAR NetworkAddress;
// Read registry network address, if there is a good one, put it itno Adapter->CurrentAddr array
NdisReadNetworkAddress(&Status, &NetworkAddress, &i, RegHdl);
if( Status == NDIS_STATUS_SUCCESS )
{
if( i == MRVDRV_ETH_ADDR_LEN )
{
NdisMoveMemory(Adapter->CurrentAddr, NetworkAddress, MRVDRV_ETH_ADDR_LEN);
DBGPRINT(DBG_LOAD,("*** Got registry soft addr: %2x %2x %2x %2x %2x %2x ***\n",
Adapter->CurrentAddr[0],
Adapter->CurrentAddr[1],
Adapter->CurrentAddr[2],
Adapter->CurrentAddr[3],
Adapter->CurrentAddr[4],
Adapter->CurrentAddr[5]));
}
}
RegInfoTab = MrvDrvRegInfoTab;
ReturnedValue = &NdisConfigParam;
DestinationANSIString.Buffer=AnsiBuffer;
DestinationANSIString.MaximumLength=0x21;
ReturnedValue->ParameterData.StringData.Buffer=(PWSTR)UnicodeBuffer;
for(i=0; i<SIZE_OF_REG_TAB; i++, RegInfoTab++)
{
pPtr = ((PUCHAR)Adapter) + RegInfoTab->Offset;
pTmp = pPtr;
if (RegInfoTab->Type == 0)
{
NdisReadConfiguration(
&Status,
&ReturnedValue,
RegHdl,
&RegInfoTab->ObjNSName,
NdisParameterInteger);
if (Status == NDIS_STATUS_SUCCESS)
{
Value = ReturnedValue->ParameterData.IntegerData;
*((PULONG)pPtr) = (ULONG)Value;
}
}
else if(RegInfoTab->Type == 1)
{
NdisReadConfiguration(
&Status,
&ReturnedValue,
RegHdl,
&RegInfoTab->ObjNSName,
NdisParameterString);
if (Status == NDIS_STATUS_SUCCESS)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -