📄 config.c
字号:
//---------------------------------------------------------------------------
// Copyright (C) 2006, Freescale Semiconductor, Inc. All Rights Reserved.
// THIS SOURCE CODE, AND ITS USE AND DISTRIBUTION, IS SUBJECT TO THE TERMS
// AND CONDITIONS OF THE APPLICABLE LICENSE AGREEMENT
//--------------------------------------------------------------------------
//
// File: config.c
// Source file for platform specific SDIO WLAN functions
//------------------------------------------------------------------------------
#include "precomp.h"
extern ULONG ulWINCEmaxDbgFileSize;
/*****************************************************************************/
/*** Types and Defines ***/
/*****************************************************************************/
/*****************************************************************************/
/*** Private Data ***/
/*****************************************************************************/
const NDIS_PHYSICAL_ADDRESS
sHighestPossibleAddress = NDIS_PHYSICAL_ADDRESS_CONST(0, -1);
const NDIS_STRING sCFGbootKeyword = NDIS_STRING_CONST("Bootloader");
const NDIS_STRING asCFGucpuKeyword[CFG_NUM_NET_TYPES] =
{
NDIS_STRING_CONST("STAupper"),
NDIS_STRING_CONST("STAupper"),
NDIS_STRING_CONST("APupper"),
NDIS_STRING_CONST("TESTupper")
};
#ifdef CA_UWA_DOWNLOAD
const NDIS_STRING asCFGuwacpuKeyword[CFG_NUM_NET_TYPES] =
{
NDIS_STRING_CONST("STAuwa"),
NDIS_STRING_CONST("STAuwa"),
NDIS_STRING_CONST("APuwa"),
NDIS_STRING_CONST("TESTuwa")
};
#endif // CA_UWA_DOWNLOAD
const NDIS_STRING sCFGnetworkType = NDIS_STRING_CONST("NetworkType");
const NDIS_STRING sCFGprotocolType = NDIS_STRING_CONST("ProtocolType");
const NDIS_STRING sCFGdomain = NDIS_STRING_CONST("Domain");
const NDIS_STRING sCFGrateSelect = NDIS_STRING_CONST("RateSelect");
const NDIS_STRING sCFGessid = NDIS_STRING_CONST("ESSID");
const NDIS_STRING sCFGmanual = NDIS_STRING_CONST("Manual");
const NDIS_STRING sCFGbssid = NDIS_STRING_CONST("BSSID");
const NDIS_STRING sCFGrestrictedChannel = NDIS_STRING_CONST("RestrictedChannel");
const NDIS_STRING sCFGibss54g = NDIS_STRING_CONST("Ibss54g");
const NDIS_STRING sCFGibssChannel = NDIS_STRING_CONST("IbssChannel");
const NDIS_STRING sCFGmacid = NDIS_STRING_CONST("MACID");
const NDIS_STRING sCFGpowerSaving = NDIS_STRING_CONST("PowerSaving");
const NDIS_STRING sCFGfragmentThreshold = NDIS_STRING_CONST("FragmentThreshold");
const NDIS_STRING sCFGRTSCTSThreshold = NDIS_STRING_CONST("RTSCTSThreshold");
//const NDIS_STRING sCFGbeaconPeriod = NDIS_STRING_CONST("BeaconPeriod");
const NDIS_STRING sCFGlistenInterval = NDIS_STRING_CONST("ListenInterval");
const NDIS_STRING sCFGshortPreamble = NDIS_STRING_CONST("ShortPreamble");
const NDIS_STRING sCFGuwaSensLockout = NDIS_STRING_CONST("UWASensitivityLockout");
const NDIS_STRING sCFGbufferConfig = NDIS_STRING_CONST("BufferConfig");
const NDIS_STRING sCFGdbgMaxFileSize = NDIS_STRING_CONST("DbgMaxFileSize");
const NDIS_STRING sCFGresetEnable = NDIS_STRING_CONST("ResetEnable");
const NDIS_STRING sCFGradio = NDIS_STRING_CONST("Radio");
const NDIS_STRING sCFGcamBckgrndScanInterval11a = NDIS_STRING_CONST("CamBckGrndScanInterval80211a");
const NDIS_STRING sCFGpsBckgrndScanInterval11a = NDIS_STRING_CONST("PsBckGrndScanInterval80211a");
const NDIS_STRING sCFGcamBckgrndScanInterval11bg = NDIS_STRING_CONST("CamBckGrndScanInterval80211bg");
const NDIS_STRING sCFGpsBckgrndScanInterval11bg = NDIS_STRING_CONST("PsBckGrndScanInterval80211bg");
const NDIS_STRING sCFGrssiThr11a = NDIS_STRING_CONST("RoamRssiThreshold80211a");
const NDIS_STRING sCFGrssiHys11a = NDIS_STRING_CONST("RoamRssiHysteresis80211a");
const NDIS_STRING sCFGrssiThr11bg = NDIS_STRING_CONST("RoamRssiThreshold80211bg");
const NDIS_STRING sCFGrssiHys11bg = NDIS_STRING_CONST("RoamRssiHysteresis80211bg");
const NDIS_STRING sCFGmultiDomainCapability = NDIS_STRING_CONST("MultiDomainCapability");
const NDIS_STRING sCFGradioMeasurementCapability = NDIS_STRING_CONST("RadioMeasurementCapability");
const NDIS_STRING sCFGccxCapability = NDIS_STRING_CONST("CcxCapability");
const NDIS_STRING sCFGbluetoothCoexCapability = NDIS_STRING_CONST("BluetoothCoexCapability");
const NDIS_STRING sCFGwmmSupported = NDIS_STRING_CONST("WMMEnabled");
// SDIO block configuration ...
const NDIS_STRING sCFGSupport4BitMode = NDIS_STRING_CONST("SDIOSupport4BitMode");
const NDIS_STRING sCFGSupportBlockMode = NDIS_STRING_CONST("SDIOSupportBlockMode");
const NDIS_STRING sCFGBlockSize = NDIS_STRING_CONST("SDIOBlockSize");
const NDIS_STRING sCFGMaxBlockNumber = NDIS_STRING_CONST("SDIOMaxBlockNumber");
const NDIS_STRING sCFGMaxByteNumber = NDIS_STRING_CONST("SDIOMaxByteNumber");
const NDIS_STRING sCFGMaxClockFreq = NDIS_STRING_CONST("SDIOMaxClockFreq");
char au8CFGessidTerminated[MIB_ESSID_LENGTH+10]; /* ALlow room fro terminator */
/*****************************************************************************/
/*** Private Function Prototypes ***/
/*****************************************************************************/
static NDIS_STATUS
iCFGcreateCodeImage(IN NDIS_HANDLE hRegistryHandle,
IN CONST NDIS_STRING sKeyword,
OUT PCFG_CODE_IMAGE psCodeImage);
static BOOLEAN
boENDreadValue(IN NDIS_HANDLE hRegistryHandle,
OUT PNDIS_CONFIGURATION_PARAMETER *ppsParam,
IN CONST NDIS_STRING sKeyword,
IN NDIS_PARAMETER_TYPE eParamType);
static BOOLEAN
boCFGreadBoolean(IN NDIS_HANDLE hRegistryHandle,
IN CONST NDIS_STRING sKeyword,
OUT PBOOLEAN pboValue);
static BOOLEAN
boCFGreadString(IN NDIS_HANDLE hRegistryHandle,
IN CONST NDIS_STRING sKeyword,
IN ULONG ulMaxLength,
OUT PCHAR pacValue,
OUT PULONG pulLength);
static BOOLEAN
boCFGreadArray(IN NDIS_HANDLE hRegistryHandle,
IN CONST NDIS_STRING sKeyword,
IN ULONG ulLength,
OUT PUCHAR paucValue);
static BOOLEAN
boCFGreadUlong(IN NDIS_HANDLE hRegistryHandle,
IN CONST NDIS_STRING sKeyword,
OUT PULONG pulValue);
static BOOLEAN
boCFGreadInt(IN NDIS_HANDLE hRegistryHandle,
IN CONST NDIS_STRING sKeyword,
OUT PINT piValue);
static BOOLEAN
boCFGunicodeToByteArray(IN NDIS_STRING sString,
OUT PUCHAR paucArray,
IN UINT uiLength);
static VOID
vCFGprintRegReadWarn(IN CONST NDIS_STRING sKeyword);
static VOID
vCFGprintRegReadWarn2(IN CONST NDIS_STRING sKeyword);
/*****************************************************************************/
/*** Public Functions ***/
/*****************************************************************************/
/*****************************************************************************
**
** NAME boCFGextractConfiguration
**
** PARAMETERS psCFG Pointer to the Configuration Block context.
** hRegistryHandle Handle of registry access object for this
** device.
**
** RETURNS boolean
**
** DESCRIPTION This function should be used during initialization to extract
** the device Configuration fromt the registry.
**
******************************************************************************/
BOOLEAN
bCFGextractConfiguration(IN PCFG_CONTEXT psCFG,
IN NDIS_HANDLE hRegistryHandle)
{
const char *apacNetworkType[CFG_NUM_NET_TYPES] =
{
"Infra Station", "Adhoc Station", "Access Point", "Test MAC"
};
BOOLEAN bStatus = TRUE;
ULONG ulNetworkType, ulESSIDlength, ulProtocolType, ulDomain, ulRateSelect;
ULONG ulFragmentThreshold,ulRTSCTSThreshold, ulRestrictedChannel, ulIbssChannel;
ULONG ulListenInterval, ulCamBckGrndScanInterval80211a, ulPsBckGrndScanInterval80211a;
ULONG ulCamBckGrndScanInterval80211bg, ulPsBckGrndScanInterval80211bg;
INT iRssiThresh80211a, iRssiThresh80211bg;
ULONG ulRssiHysteresis80211a, ulRssiHysteresis80211bg;
ASSERT (psCFG != NULL);
DBG_LEV1(("boCFGextractConfiguration()\n"));
if (psCFG != NULL)
{
/*
* Read all the parameters from the registry.
*/
// Read this setting directly into the global that controls CE log
// file size
if ( !boCFGreadUlong(hRegistryHandle, sCFGdbgMaxFileSize, &ulWINCEmaxDbgFileSize) )
{
// If file size not specified in registry, assume debug file unwanted
ulWINCEmaxDbgFileSize = 0;
}
if ( !boCFGreadUlong(hRegistryHandle, sCFGnetworkType, &ulNetworkType) )
{
ulNetworkType = CFG_INFRA_STATION;
}
if ( !boCFGreadUlong(hRegistryHandle, sCFGprotocolType, &ulProtocolType) )
{
vCFGprintRegReadWarn(sCFGprotocolType);
ulProtocolType = CFG_80211G;
}
if ( !boCFGreadUlong(hRegistryHandle, sCFGdomain, &ulDomain) )
{
vCFGprintRegReadWarn(sCFGdomain);
ulDomain = CFG_FCC;
}
if ( !boCFGreadUlong(hRegistryHandle, sCFGrateSelect, &ulRateSelect) )
{
vCFGprintRegReadWarn(sCFGrateSelect);
ulRateSelect = 0;
}
if ( !boCFGreadString(hRegistryHandle, sCFGessid, MIB_ESSID_LENGTH+2,
au8CFGessidTerminated, &ulESSIDlength) )
{
#ifndef NDIS51_MINIPORT
vCFGprintRegReadWarn(sCFGessid);
#endif
ulESSIDlength = 0;
}
if ( !boCFGreadBoolean(hRegistryHandle, sCFGmanual, &psCFG->boManualStart) )
{
psCFG->boManualStart = FALSE;
}
if ( !boCFGreadBoolean(hRegistryHandle, sCFGshortPreamble, &psCFG->boShortPreamble) )
{
vCFGprintRegReadWarn(sCFGshortPreamble);
psCFG->boShortPreamble = TRUE;
}
if ( !boCFGreadBoolean(hRegistryHandle, sCFGuwaSensLockout, &psCFG->boUwaSensLockout) )
{
vCFGprintRegReadWarn(sCFGuwaSensLockout);
psCFG->boUwaSensLockout = FALSE;
}
if ( !boCFGreadUlong(hRegistryHandle, sCFGbufferConfig, &psCFG->ulBufferConfig) )
{
psCFG->ulBufferConfig = 0;
}
if ( !boCFGreadArray(hRegistryHandle, sCFGbssid, sizeof(IEEE_ADDR), psCFG->sBSSID.au8Addr) )
{
#ifndef NDIS51_MINIPORT
vCFGprintRegReadWarn(sCFGbssid);
#endif
OS_MEMZERO( psCFG->sBSSID.au8Addr, sizeof(IEEE_ADDR) );
}
if ( !boCFGreadUlong(hRegistryHandle, sCFGrestrictedChannel, &ulRestrictedChannel) )
{
ulRestrictedChannel = 0;
}
if ( !boCFGreadUlong(hRegistryHandle, sCFGibssChannel, &ulIbssChannel) )
{
vCFGprintRegReadWarn(sCFGibssChannel);
ulIbssChannel = 0;
}
// pcereck 07/13/2005 ---
if ( !boCFGreadBoolean(hRegistryHandle, sCFGibss54g, &psCFG->boIbss54g) )
{
vCFGprintRegReadWarn(sCFGibss54g);
psCFG->boIbss54g = FALSE;
}
if ( !boCFGreadBoolean(hRegistryHandle, sCFGpowerSaving, &psCFG->boPowerSaving) )
{
vCFGprintRegReadWarn(sCFGpowerSaving);
psCFG->boPowerSaving = FALSE;
}
if ( !boCFGreadArray(hRegistryHandle, sCFGmacid, sizeof(IEEE_ADDR), psCFG->sMACID.au8Addr) )
{
OS_MEMZERO( psCFG->sMACID.au8Addr, sizeof(IEEE_ADDR) );
}
if ( !boCFGreadUlong(hRegistryHandle, sCFGfragmentThreshold, &ulFragmentThreshold) )
{
vCFGprintRegReadWarn(sCFGfragmentThreshold);
ulFragmentThreshold = 2346;
}
if ( !boCFGreadUlong(hRegistryHandle, sCFGRTSCTSThreshold, &ulRTSCTSThreshold) )
{
vCFGprintRegReadWarn(sCFGRTSCTSThreshold);
ulRTSCTSThreshold = 2347;
}
// if ( !boCFGreadUlong(hRegistryHandle, sCFGbeaconPeriod, &ulBeaconPeriod) )
// {
// vCFGprintRegReadWarn(sCFGbeaconPeriod);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -