📄 initproc.c
字号:
Adapter->MrvDrvWrapperConfigurationContext = WrapperConfigurationContext;
#ifdef MRVL_WINXP_NDIS51
NdisMSetAttributesEx(
Adapter->MrvDrvAdapterHdl,
(NDIS_HANDLE) Adapter,
MRVL_CHECK_FOR_HANG_TIME,
(ULONG)NDIS_ATTRIBUTE_SURPRISE_REMOVE_OK,
NdisInterfacePcMcia);
#else
NdisMSetAttributesEx(
Adapter->MrvDrvAdapterHdl,
(NDIS_HANDLE) Adapter,
6,
0,
NdisInterfacePcMcia);
#endif
/// Read configuration from registry
NdisOpenConfiguration(
&Status,
&RegHdl,
WrapperConfigurationContext);
if (Status != NDIS_STATUS_SUCCESS)
{
DBGPRINT(DBG_LOAD ,(" NdisOpenConfiguration error\n"));
FreeAdapter(Adapter);
NdisTerminateWrapper(WrapperConfigurationContext, NULL);
gNdisWrapperHandle=NULL;
return NDIS_STATUS_FAILURE;
}
Status = ReadRegistryInfo(Adapter, RegHdl);
if (Status != NDIS_STATUS_SUCCESS )
{
DBGPRINT(DBG_LOAD ,(" ReadRegistryInfo error\n"));
FreeAdapter(Adapter);
NdisTerminateWrapper(WrapperConfigurationContext, NULL);
gNdisWrapperHandle=NULL;
return NDIS_STATUS_FAILURE;
}
NdisCloseConfiguration(RegHdl);
/// Initialize sync object
InitSyncObjects(Adapter);
/// Set up NIC HW (include firmwware download)
Status = SetUpStationHW(Adapter, WrapperConfigurationContext );
if( Status != NDIS_STATUS_SUCCESS )
{
DBGPRINT(DBG_LOAD ,(" SetUpStationHW error\n"));
FreeAdapter(Adapter);
NdisTerminateWrapper(WrapperConfigurationContext, NULL);
gNdisWrapperHandle=NULL;
return NDIS_STATUS_FAILURE;
}
{
DWORD dwWaitStatus;
dwWaitStatus = WaitForSingleObject( Adapter->hWaitForGetHwSpecEvent, 10000 );
}
/// Power-Save
if ( Adapter->PSMode != 0)
{
Adapter->PSMode = Ndis802_11PowerModeMAX_PSP;
}
DBGPRINT(DBG_NEWPS, ("Adapter PSMODE = %d\n", Adapter->PSMode));
/// Other paramenters
InitializeWirelessConfig(Adapter);
/// Add the FW version and Driver Version to Registry
#ifdef UNDER_CE
{
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;
#ifdef MRV_CHIP_8381P
AddKeyValues (TEXT("Comm\\CF8381P"), Vals);
#endif
#ifdef MRV_CHIP_8381PN
AddKeyValues (TEXT("Comm\\CF8381PN"), Vals);
#endif
#ifdef MRV_CHIP_8385PN
AddKeyValues (TEXT("Comm\\CF8385PN"), Vals);
#endif
#ifdef MRV_CHIP_8385H
AddKeyValues (TEXT("Comm\\CF8385H"), Vals);
#endif
#ifdef MRV_CHIP_8305
AddKeyValues (TEXT("Comm\\EAGLEND5"), Vals);
#endif
}
#endif
/// indicate to OS that the network is not connected after 1 second
/// Maay be we don't need the timer : FIX Later
//NdisMSetTimer(&Adapter->MrvDrvIndicateConnectStatusTimer, 500);
//Adapter->DisconnectTimerSet = TRUE;
DBGPRINT(DBG_LOAD ,("<<< INIT - Enter MrvDrvInitialize \n"));
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
===============================================================================
*/
PMRVDRV_ADAPTER AllocateAdapter()
{
NDIS_STATUS Status;
PMRVDRV_ADAPTER Adapter;
DBGPRINT(DBG_LOAD, (">>> AllocateAdapter() \n"));
//
/// Allocate adapter handler
//
Status = MRVDRV_ALLOC_MEM(&Adapter, sizeof(MRVDRV_ADAPTER));
if ( Status != NDIS_STATUS_SUCCESS )
{
DBGPRINT(DBG_ERROR | DBG_LOAD, ("Unable to allocate adapter memory, "
"Status = 0x%x\n", Status));
goto err1;
}
NdisZeroMemory(Adapter, sizeof(MRVDRV_ADAPTER));
DBGPRINT(DBG_LOAD, ("MRVDRV_ALLOC_MEM () success \n"));
// Assign default adapter object value and allocate buffer
InitAdapterObject(Adapter);
//
/// Allocate spinlock
//
// command
NdisAllocateSpinLock(&Adapter->FreeQSpinLock);
NdisAllocateSpinLock(&Adapter->PriorityQSpinLock);
// rx
#ifdef USE_RX_QUEUE
NdisAllocateSpinLock(&Adapter->RxQueueSpinLock);
#endif
NdisAllocateSpinLock(&Adapter->RxSpinLock);
// tx
NdisAllocateSpinLock(&Adapter->TxSpinLock);
NdisAllocateSpinLock(&Adapter->lCFInterfaceLock);
//
/// Allocate Tx, Rx, Command data structure
//
Status = AllocateAdapterBuffer(Adapter);
if ( Status != NDIS_STATUS_SUCCESS )
{ DBGPRINT(DBG_LOAD, ("AllocateAdapterBuffer () error \n"));
goto err2;
}
DBGPRINT(DBG_LOAD, ("<<<< AllocateAdapter() success \n"));
return Adapter;
err2:
NdisFreeSpinLock(&Adapter->FreeQSpinLock);
NdisFreeSpinLock(&Adapter->PriorityQSpinLock);
#ifdef USE_RX_QUEUE
NdisFreeSpinLock(&Adapter->RxQueueSpinLock);
#endif
NdisFreeSpinLock(&Adapter->RxSpinLock);
NdisFreeSpinLock(&Adapter->TxSpinLock);
NdisFreeSpinLock(&Adapter->lCFInterfaceLock);
/// Free the adapter object
MRVDRV_FREE_MEM((PVOID)Adapter, sizeof(MRVDRV_ADAPTER));
err1:
DBGPRINT(DBG_LOAD, ("AllocateAdapter() failed \n"));
return NULL;
}
/******************************************************************************
*
* 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
#ifdef MRVL_MIC_ERROR
Adapter->bMicErrorIsHappened = FALSE;
Adapter->ulMicErrorStartTime = 0;
#endif
#ifdef PMKID_CACHE_CAP
ResetPmkidCache( Adapter );
Adapter->RSNStatusIndicated.StatusType = Ndis802_11StatusTypeMax;
#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;
Adapter->LinkSpeed = MRVDRV_LINK_SPEED_1mbps;
Adapter->MediaInUse = NdisMedium802_3;
NdisFillMemory(Adapter->CurrentAddr, MRVDRV_ETH_ADDR_LEN, 0xff);
// 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;
Adapter->SentPacket = NULL;
Adapter->IsReturnResources = FALSE;
// 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;
Adapter->CurrentPacketFilter = NDIS_PACKET_TYPE_DIRECTED | NDIS_PACKET_TYPE_BROADCAST| NDIS_PACKET_TYPE_MULTICAST;
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->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
Adapter->DTIMNum = 1;
Adapter->DTIMFlag = FALSE;
Adapter->ulDTIM = 10;
#ifdef DEEP_SLEEP
Adapter->IsDeepSleep = FALSE;
Adapter->IsDeepSleepRequired = FALSE;
#endif
#ifdef ADHOCAES
Adapter->AdhocAESEnabled = FALSE;
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -