📄 initproc.c
字号:
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// Use of this sample source code is subject to the terms of the Microsoft
// license agreement under which you licensed this sample source code. If
// you did not accept the terms of the license agreement, you are not
// authorized to use this sample source code. For the terms of the license,
// please see the license agreement between you and Microsoft or, if applicable,
// see the LICENSE.RTF on your install media or the root of your tools installation.
// THE SAMPLE SOURCE CODE IS PROVIDED "AS IS", WITH NO WARRANTIES OR INDEMNITIES.
//
/** @file initproc.c
* @This module provides the implementaion of NDIS miniport
* dirver initialization
*
* Copyright (c) Marvell Semiconductor, Inc.
*/
/*
===============================================================================
INCLUDE FILES
===============================================================================
*/
#include "precomp.h"
// jeff.spurgat 2003-04-04
#ifdef UNDER_CE
// jeff.spurgat 2003-04-15
// cardservices support
#include <cardserv.h>
#include <cardapi.h>
#include <tuple.h>
#endif
//#if DBG
unsigned char lptRegImage1 = 0;
unsigned char lptRegImage2 = 0;
// PJG: Note if using igxbug in precompiled header
// you need to define the debug vars manually.
LARGE_INTEGER t1Time, t1LastTime, t1CurTime;
LARGE_INTEGER t2Time, t2LastTime, t2CurTime;
LARGE_INTEGER t3Time, t3LastTime, t3CurTime;
LARGE_INTEGER t4Time, t4LastTime, t4CurTime;
LARGE_INTEGER t5Time, t5LastTime, t5CurTime;
LARGE_INTEGER t6Time, t6LastTime, t6CurTime;
LARGE_INTEGER curTime;
LARGE_INTEGER lastTime;
ULONG DebugLevel = DBG_DEFAULT;
LARGE_INTEGER isrTimeDelay;
/// extern CARD_SOCKET_HANDLE GobalHSock;
#ifdef UNDER_CE
FILE *MrvDbgfp = NULL;
#endif // #ifdef UNDER_CE
//#endif
//#define NEW_SCHEME_TO_GET_RESOURCES
/*
===============================================================================
CODED PUBLIC VARIABLE
===============================================================================
*/
//
// Registry table, works with INF file and ReadRegistryInfo() to provide a
// convenient way for device specific registry information reading.
//
static REGINFOTAB MrvDrvRegInfoTab[] = {
///{NDIS_STRING_CONST("DesiredSSID"), "DesiredSSID", 1, FIELD_OFFSET(MRVDRV_ADAPTER, DesiredSSID)+4, 32},
///{NDIS_STRING_CONST("NetWorkMode"), "NetworkMode", 0, FIELD_OFFSET(MRVDRV_ADAPTER, InfrastructureMode), 4},
///{NDIS_STRING_CONST("AuthMode"), "AuthMode", 0, FIELD_OFFSET(MRVDRV_ADAPTER, AuthenticationMode), 4},
///{NDIS_STRING_CONST("TxAntenna"), "TxAntenna", 3, FIELD_OFFSET(MRVDRV_ADAPTER, TxAntenna), 4},
///{NDIS_STRING_CONST("RxAntenna"), "RxAntenna", 3, FIELD_OFFSET(MRVDRV_ADAPTER, RxAntenna), 4},
///{NDIS_STRING_CONST("Channel"), "Channel", 0, FIELD_OFFSET(MRVDRV_ADAPTER, Channel), 4},
///{NDIS_STRING_CONST("DataRate"), "DataRate", 3, FIELD_OFFSET(MRVDRV_ADAPTER, DataRate), 4},
{NDIS_STRING_CONST("FragThsd"), "FragThsd", 0, FIELD_OFFSET(MRVDRV_ADAPTER, FragThsd), 4},
{NDIS_STRING_CONST("RTSThsd"), "RTSThsd", 0, FIELD_OFFSET(MRVDRV_ADAPTER, RTSThsd), 4},
///{NDIS_STRING_CONST("MaxChanTime"), "MaxChanTime", 0, FIELD_OFFSET(MRVDRV_ADAPTER, DefaultPerChannelScanTime), 4},
///{NDIS_STRING_CONST("Preamble"), "Preamble", 0, FIELD_OFFSET(MRVDRV_ADAPTER, Preamble), 4},
{NDIS_STRING_CONST("PowerMode"), "PowerMode", 0, FIELD_OFFSET(MRVDRV_ADAPTER, PSMode), 4},
///{NDIS_STRING_CONST("RoamingMode"), "RoamingMode", 0, FIELD_OFFSET(MRVDRV_ADAPTER, RoamingMode), 1},
///{NDIS_STRING_CONST("RoamingRSSILevel"), "RoamingRSSILevel", 0, FIELD_OFFSET(MRVDRV_ADAPTER, RoamingLevel), 1},
///{NDIS_STRING_CONST("RoamingPeriod"), "RoamingPeriod", 0, FIELD_OFFSET(MRVDRV_ADAPTER, RoamingPeriod), 4},
{NDIS_STRING_CONST("BTMode"), "BTMode", 0, FIELD_OFFSET(MRVDRV_ADAPTER, BTMode), 4},
{NDIS_STRING_CONST("BTAntennaConfig"), "BTAntennaConfig", 0, FIELD_OFFSET(MRVDRV_ADAPTER, BTAntennaConfig), 4},
{NDIS_STRING_CONST("BTFrequencyConfig"), "BTFrequencyConfig", 0, FIELD_OFFSET(MRVDRV_ADAPTER, BTFrequencyConfig), 4},
{NDIS_STRING_CONST("BTWLANTxPriorityLo"), "BTWLANTxPriorityLo", 0, FIELD_OFFSET(MRVDRV_ADAPTER, BTWLANTxPriorityLo), 4},
{NDIS_STRING_CONST("BTWLANTxPriorityHi"), "BTWLANTxPriorityHi", 0, FIELD_OFFSET(MRVDRV_ADAPTER, BTWLANTxPriorityHi), 4},
{NDIS_STRING_CONST("BTWLANRxPriorityLo"),"BTWLANRxPriorityLo", 0, FIELD_OFFSET(MRVDRV_ADAPTER, BTWLANRxPriorityLo), 4},
{NDIS_STRING_CONST("BTWLANRxPriorityHi"), "BTWLANRxPriorityHi", 0, FIELD_OFFSET(MRVDRV_ADAPTER, BTWLANRxPriorityHi), 4},
{NDIS_STRING_CONST("QOS"), "QOS", 0, FIELD_OFFSET(MRVDRV_ADAPTER, EnableQOS), 4},
///{NDIS_STRING_CONST("WepStatus"), "WepStatus", 0, FIELD_OFFSET(MRVDRV_ADAPTER, WEPStatus), 4},
///{NDIS_STRING_CONST("TxWepKey"), "TxWepKey", 0, FIELD_OFFSET(MRVDRV_ADAPTER, TxWepKey), 4},
///{NDIS_STRING_CONST("TxPower"), "TxPower", 0, FIELD_OFFSET(MRVDRV_ADAPTER, TxPower), 4},
///{NDIS_STRING_CONST("WepKey1"), "WepKey1", 1, FIELD_OFFSET(MRVDRV_ADAPTER, WepKey1)+12, 16},
///{NDIS_STRING_CONST("WepKey2"), "WepKey2", 1, FIELD_OFFSET(MRVDRV_ADAPTER, WepKey2)+12, 16},
///{NDIS_STRING_CONST("WepKey3"), "WepKey3", 1, FIELD_OFFSET(MRVDRV_ADAPTER, WepKey3)+12, 16},
///{NDIS_STRING_CONST("WepKey4"), "WepKey4", 1, FIELD_OFFSET(MRVDRV_ADAPTER, WepKey4)+12, 16},
{NDIS_STRING_CONST("AdhocDefaultBand"), "AdhocDefaultBand" , 0, FIELD_OFFSET(MRVDRV_ADAPTER, AdhocDefaultBand), 4},
{NDIS_STRING_CONST("AdhocDefaultChannel"),"AdhocDefaultChannel", 0, FIELD_OFFSET(MRVDRV_ADAPTER, AdhocDefaultChannel), 4},
{NDIS_STRING_CONST("AdhocWiFiDataRate"), "AdhocWiFiDataRate" , 0, FIELD_OFFSET(MRVDRV_ADAPTER, AdhocWiFiDataRate), 4},
#ifdef ACTIVE_ROAMING
{NDIS_STRING_CONST("bActiveRoamingScanOneChannel"), "bActiveRoamingScanOneChannel", 0, FIELD_OFFSET(MRVDRV_ADAPTER, bActiveRoamingScanOneChannel), 4},
{NDIS_STRING_CONST("bLinkLostScanOneChannel"), "bLinkLostScanOneChannel", 0, FIELD_OFFSET(MRVDRV_ADAPTER, bLinkLostScanOneChannel), 4},
{NDIS_STRING_CONST("ulRSSIThresholdTimer"), "ulRSSIThresholdTimer", 0, FIELD_OFFSET(MRVDRV_ADAPTER, ulRSSIThresholdTimer), 4},
{NDIS_STRING_CONST("RSSI_Range"), "RSSI_Range", 0, FIELD_OFFSET(MRVDRV_ADAPTER, RSSI_Range), 4},
#endif
#ifdef ENABLE_802_11D
{NDIS_STRING_CONST("Enable80211D"), "Enable80211D" , 0, FIELD_OFFSET(MRVDRV_ADAPTER, Enable80211D), 4},
{NDIS_STRING_CONST("DefaultRegion"), "DefaultRegion" , 0, FIELD_OFFSET(MRVDRV_ADAPTER, DefaultRegion), 4},
{NDIS_STRING_CONST("DefaultBand"), "DefaultBand" , 0, FIELD_OFFSET(MRVDRV_ADAPTER, DefaultBand), 4},
#endif
{NDIS_STRING_CONST("AvoidScanTime"), "AvoidScanTime" , 0, FIELD_OFFSET(MRVDRV_ADAPTER, AvoidScanTime), 4},
#ifdef BG_SCAN
{NDIS_STRING_CONST("bActiveRoamingwithBGSCAN"), "bActiveRoamingwithBGSCAN", 0, FIELD_OFFSET(MRVDRV_ADAPTER, bActiveRoamingwithBGSCAN), 4},
#endif
};
// jeff.spurgat 20003-04-02
// Registry settings for Install_Driver function (required in WinCE)
//
// The following settings are set as default:
//
// [HKEY_LOCAL_MACHINE\Comm\CF8385PN]
// "DisplayName"="Marvell MrvDrv CF 802.11b"
// "Group"="NDIS"
// "ImagePath"="CF8385PN.dll"
//
// [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\PCI\Template\CF8385PN]
// "Dll"="NDIS.dll"
// "Entry"="NdisPCIBusDeviceInit"
// "IsrDll"="giisr.dll"
// "IsrHandler"="ISRHandler"
// "Class"=dword:02
// "SubClass"=dword:00
// "ProgIF"=dword:0
// "PortIsIO"=dword:0
// "PortOffset"=dword:00
// "PortSize"=dword:0
// "PortMask"=dword:00000000
// "VendorID"=multi_sz:"0000"
// "DeviceID"=multi_sz:"0000"
//
// [HKEY_LOCAL_MACHINE\Drivers\PCMCIA\CF8385PN]
// "Dll"="ndis.dll"
// "Prefix"="NDS"
// "Miniport"="CF8385PN"
//
// [HKEY_LOCAL_MACHINE\Drivers\PCMCIA\Detect\101]
// "Dll"="CF8385PN.dll"
// "Entry"="DetectMrvDrv"
//
#ifdef UNDER_CE
// CompactFlash interface
#ifdef MRV_CHIP_8385H
// Values for [HKEY_LOCAL_MACHINE\Drivers\PCMCIA\CF8385H]
REG_VALUE_DESCR PcmciaCF8385HKeyValues[] = {
{(TEXT ("Dll")), REG_SZ, (PBYTE) (TEXT("ndis.dll"))},
{(TEXT ("Prefix")), REG_SZ, (PBYTE) (TEXT("NDS"))},
{(TEXT ("Miniport")), REG_SZ, (PBYTE) (TEXT("CF8385H"))},
{NULL, 0, NULL}
};
// Values for [HKEY_LOCAL_MACHINE\Drivers\PCMCIA\Detect\101]
REG_VALUE_DESCR PcmciaDetectKeyValues[] = {
{(TEXT ("Dll")), REG_SZ, (PBYTE) (TEXT("CF8385H.dll"))},
{(TEXT ("Entry")), REG_SZ, (PBYTE) (TEXT("DetectMrvDrv"))},
{NULL, 0, NULL}
};
// PCI interface
// Values for [HKEY_LOCAL_MACHINE\Comm\CF8385H]
REG_VALUE_DESCR CommCF8385HKeyValues[] = {
{(TEXT ("DisplayName")), REG_SZ, (PBYTE) (TEXT("Marvell CF8385H Wireless Card"))},
{(TEXT ("Group")), REG_SZ, (PBYTE) (TEXT("NDIS"))},
{(TEXT ("ImagePath")), REG_SZ, (PBYTE) (TEXT("CF8385H.dll"))},
{NULL, 0, NULL}
};
// [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\PCI\Template\CF8385H]
REG_VALUE_DESCR DriversCF8385HPciKeyValues[] = {
{(TEXT ("Dll")), REG_SZ, (PBYTE) (TEXT("NDIS.dll"))},
{(TEXT ("Class")), REG_DWORD, (PBYTE) 2},
{(TEXT ("SubClass")), REG_DWORD, (PBYTE) 0x80},
{(TEXT ("ProgIF")), REG_DWORD, (PBYTE) 0},
{(TEXT ("VendorID")), REG_MULTI_SZ, (PBYTE) (TEXT("1638"))},
{(TEXT ("DeviceID")), REG_MULTI_SZ, (PBYTE) (TEXT("1100"))},
{(TEXT ("Entry")), REG_SZ, (PBYTE) (TEXT("NdisPCIBusDeviceInit"))},
// {(TEXT ("Transceiver")), REG_DWORD, (PBYTE) 3},
{(TEXT ("IsrDll")), REG_SZ, (PBYTE) (TEXT("giisr.dll"))},
{(TEXT ("IsrHandler")), REG_SZ, (PBYTE) (TEXT("ISRHandler"))},
{(TEXT ("PortIsIO")), REG_DWORD, (PBYTE) 0},
{(TEXT ("PortOffset")), REG_DWORD, (PBYTE) 0},
{(TEXT ("PortSize")), REG_DWORD, (PBYTE) 0},
{(TEXT ("PortMask")), REG_DWORD, (PBYTE) 0},
{NULL, 0, NULL}
};
PREG_VALUE_DESCR Values[] = {
// CompactFlash interface
PcmciaCF8385HKeyValues,
PcmciaDetectKeyValues,
// PCI interface
DriversCF8385HPciKeyValues,
CommCF8385HKeyValues,
};
LPWSTR KeyNames[] = {
(TEXT ("Drivers\\PCMCIA\\CF8385H")),
(TEXT ("Drivers\\PCMCIA\\Detect\\101")),
(TEXT ("Drivers\\BuiltIn\\PCI\\Template\\CF8385H")),
(TEXT ("Comm\\CF8385H")),
};
#endif // #ifdef MRV_CHIP_8385H
#ifdef MRV_CHIP_8385PN
// Values for [HKEY_LOCAL_MACHINE\Drivers\PCMCIA\CF8385PN]
REG_VALUE_DESCR PcmciaCF8385PNKeyValues[] = {
{(TEXT ("Dll")), REG_SZ, (PBYTE) (TEXT("ndis.dll"))},
{(TEXT ("Prefix")), REG_SZ, (PBYTE) (TEXT("NDS"))},
{(TEXT ("Miniport")), REG_SZ, (PBYTE) (TEXT("CF8385PN"))},
{NULL, 0, NULL}
};
// Values for [HKEY_LOCAL_MACHINE\Drivers\PCMCIA\Detect\101]
REG_VALUE_DESCR PcmciaDetectKeyValues[] = {
{(TEXT ("Dll")), REG_SZ, (PBYTE) (TEXT("CF8385PN.dll"))},
{(TEXT ("Entry")), REG_SZ, (PBYTE) (TEXT("DetectMrvDrv"))},
{NULL, 0, NULL}
};
// PCI interface
// Values for [HKEY_LOCAL_MACHINE\Comm\CF8385PN]
REG_VALUE_DESCR CommCF8385PNKeyValues[] = {
{(TEXT ("DisplayName")), REG_SZ, (PBYTE) (TEXT("Marvell CF8385 Wireless Card"))},
{(TEXT ("Group")), REG_SZ, (PBYTE) (TEXT("NDIS"))},
{(TEXT ("ImagePath")), REG_SZ, (PBYTE) (TEXT("CF8385PN.dll"))},
{NULL, 0, NULL}
};
// [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\PCI\Template\CF8385PN]
REG_VALUE_DESCR DriversCF8385PNPciKeyValues[] = {
{(TEXT ("Dll")), REG_SZ, (PBYTE) (TEXT("NDIS.dll"))},
{(TEXT ("Class")), REG_DWORD, (PBYTE) 2},
{(TEXT ("SubClass")), REG_DWORD, (PBYTE) 0x80},
{(TEXT ("ProgIF")), REG_DWORD, (PBYTE) 0},
{(TEXT ("VendorID")), REG_MULTI_SZ, (PBYTE) (TEXT("1638"))},
{(TEXT ("DeviceID")), REG_MULTI_SZ, (PBYTE) (TEXT("1100"))},
{(TEXT ("Entry")), REG_SZ, (PBYTE) (TEXT("NdisPCIBusDeviceInit"))},
// {(TEXT ("Transceiver")), REG_DWORD, (PBYTE) 3},
{(TEXT ("IsrDll")), REG_SZ, (PBYTE) (TEXT("giisr.dll"))},
{(TEXT ("IsrHandler")), REG_SZ, (PBYTE) (TEXT("ISRHandler"))},
{(TEXT ("PortIsIO")), REG_DWORD, (PBYTE) 0},
{(TEXT ("PortOffset")), REG_DWORD, (PBYTE) 0},
{(TEXT ("PortSize")), REG_DWORD, (PBYTE) 0},
{(TEXT ("PortMask")), REG_DWORD, (PBYTE) 0},
{NULL, 0, NULL}
};
PREG_VALUE_DESCR Values[] = {
// CompactFlash interface
PcmciaCF8385PNKeyValues,
PcmciaDetectKeyValues,
// PCI interface
DriversCF8385PNPciKeyValues,
CommCF8385PNKeyValues,
};
LPWSTR KeyNames[] = {
(TEXT ("Drivers\\PCMCIA\\CF8385PN")),
(TEXT ("Drivers\\PCMCIA\\Detect\\101")),
(TEXT ("Drivers\\BuiltIn\\PCI\\Template\\CF8385PN")),
(TEXT ("Comm\\CF8385PN")),
};
#endif // #ifdef MRV_CHIP_8385PN
#ifdef MRV_CHIP_8381PN
// Values for [HKEY_LOCAL_MACHINE\Drivers\PCMCIA\CF8381PN]
REG_VALUE_DESCR PcmciaCF8381PNKeyValues[] = {
{(TEXT ("Dll")), REG_SZ, (PBYTE) (TEXT("ndis.dll"))},
{(TEXT ("Prefix")), REG_SZ, (PBYTE) (TEXT("NDS"))},
{(TEXT ("Miniport")), REG_SZ, (PBYTE) (TEXT("CF8381PN"))},
{NULL, 0, NULL}
};
// Values for [HKEY_LOCAL_MACHINE\Drivers\PCMCIA\Detect\101]
REG_VALUE_DESCR PcmciaDetectKeyValues[] = {
{(TEXT ("Dll")), REG_SZ, (PBYTE) (TEXT("CF8381PN.dll"))},
{(TEXT ("Entry")), REG_SZ, (PBYTE) (TEXT("DetectMrvDrv"))},
{NULL, 0, NULL}
};
// PCI interface
// Values for [HKEY_LOCAL_MACHINE\Comm\CF8381PN]
REG_VALUE_DESCR CommCF8381PNKeyValues[] = {
{(TEXT ("DisplayName")), REG_SZ, (PBYTE) (TEXT("Marvell CF8381PN Wireless Card"))},
{(TEXT ("Group")), REG_SZ, (PBYTE) (TEXT("NDIS"))},
{(TEXT ("ImagePath")), REG_SZ, (PBYTE) (TEXT("CF8381PN.dll"))},
{NULL, 0, NULL}
};
// [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\PCI\Template\CF8381PN]
REG_VALUE_DESCR DriversCF8381PNPciKeyValues[] = {
{(TEXT ("Dll")), REG_SZ, (PBYTE) (TEXT("NDIS.dll"))},
{(TEXT ("Class")), REG_DWORD, (PBYTE) 2},
{(TEXT ("SubClass")), REG_DWORD, (PBYTE) 0x80},
{(TEXT ("ProgIF")), REG_DWORD, (PBYTE) 0},
{(TEXT ("VendorID")), REG_MULTI_SZ, (PBYTE) (TEXT("1638"))},
{(TEXT ("DeviceID")), REG_MULTI_SZ, (PBYTE) (TEXT("1100"))},
{(TEXT ("Entry")), REG_SZ, (PBYTE) (TEXT("NdisPCIBusDeviceInit"))},
// {(TEXT ("Transceiver")), REG_DWORD, (PBYTE) 3},
{(TEXT ("IsrDll")), REG_SZ, (PBYTE) (TEXT("giisr.dll"))},
{(TEXT ("IsrHandler")), REG_SZ, (PBYTE) (TEXT("ISRHandler"))},
{(TEXT ("PortIsIO")), REG_DWORD, (PBYTE) 0},
{(TEXT ("PortOffset")), REG_DWORD, (PBYTE) 0},
{(TEXT ("PortSize")), REG_DWORD, (PBYTE) 0},
{(TEXT ("PortMask")), REG_DWORD, (PBYTE) 0},
{NULL, 0, NULL}
};
PREG_VALUE_DESCR Values[] = {
// CompactFlash interface
PcmciaCF8381PNKeyValues,
PcmciaDetectKeyValues,
// PCI interface
DriversCF8381PNPciKeyValues,
CommCF8381PNKeyValues,
};
LPWSTR KeyNames[] = {
(TEXT ("Drivers\\PCMCIA\\CF8381PN")),
(TEXT ("Drivers\\PCMCIA\\Detect\\101")),
(TEXT ("Drivers\\BuiltIn\\PCI\\Template\\CF8381PN")),
(TEXT ("Comm\\CF8381PN")),
};
#endif // #ifdef MRV_CHIP_8381PN
#ifdef MRV_CHIP_8381P
// Values for [HKEY_LOCAL_MACHINE\Drivers\PCMCIA\CF8381P]
REG_VALUE_DESCR PcmciaCF8381PKeyValues[] = {
{(TEXT ("Dll")), REG_SZ, (PBYTE) (TEXT("ndis.dll"))},
{(TEXT ("Prefix")), REG_SZ, (PBYTE) (TEXT("NDS"))},
{(TEXT ("Miniport")), REG_SZ, (PBYTE) (TEXT("CF8381P"))},
{NULL, 0, NULL}
};
// Values for [HKEY_LOCAL_MACHINE\Drivers\PCMCIA\Detect\101]
REG_VALUE_DESCR PcmciaDetectKeyValues[] = {
{(TEXT ("Dll")), REG_SZ, (PBYTE) (TEXT("CF8381P.dll"))},
{(TEXT ("Entry")), REG_SZ, (PBYTE) (TEXT("DetectMrvDrv"))},
{NULL, 0, NULL}
};
// PCI interface
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -