⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 initproc.c

📁 此压缩包为杰得开发得z228的BSP的源代码,可以实现很多功能,尤其是视频解码有很好的效果.
💻 C
📖 第 1 页 / 共 5 页
字号:
/******************* ?Marvell Semiconductor, Inc., 2001-2004 *****************
 *
 *  Purpose:    This module provides the implementaion of NDIS miniport 
 *              dirver initialization, reset and check for hang routines.
 *
 *  $Author: schiu $
 *
 *  $Date: 2005/01/19 $
 *
 *  $Revision: #10 $
 *
 *****************************************************************************/

/*
===============================================================================
            INCLUDE FILES
===============================================================================
*/
#include "precomp.h"

#ifdef IF_GSPI 
#if OMAP
#include "common.h"
#endif	///OMAP
#endif	///IF_GSPI

// 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

#include "If.h"

//#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;  

#ifdef UNDER_CE
FILE     *MrvDbgfp = NULL;
#endif // #ifdef UNDER_CE
                              
//#endif 


//#define NEW_SCHEME_TO_GET_RESOURCES
#ifdef IF_GSPI
///BOOL g_bWLAN_FW_Downloaded = FALSE;
static BOOL isDrvInitialized = FALSE;

#ifdef OMAP
NDIS_HANDLE g_nMiniportAdapterContext;
extern void SPI_Initialize(void);
#endif	///OMAP
#endif	///IF_GSPI
/*
===============================================================================
            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},
//tt ++ v5 firmware
	{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("BTTrafficType"),		"BTTrafficType",		0, FIELD_OFFSET(MRVDRV_ADAPTER, BTWLANRxPriorityHi),		4},
	{NDIS_STRING_CONST("BTTimeShareInterval"),	"BTTimeShareInterval",	0, FIELD_OFFSET(MRVDRV_ADAPTER, BTWLANRxPriorityHi),		4},
	{NDIS_STRING_CONST("BTTime"),				"BTTime",				0, FIELD_OFFSET(MRVDRV_ADAPTER, BTWLANRxPriorityHi),		4},
//tt --
	{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},
  //{NDIS_STRING_CONST("SetSD4BIT"),			"SetSD4BIT",			0, FIELD_OFFSET(MRVDRV_ADAPTER, SetSD4BIT),					4}  
	{NDIS_STRING_CONST("SetSD4BIT"),			"SetSD4BIT",			0, FIELD_OFFSET(MRVDRV_ADAPTER, SetSD4BIT),					4},  
	{NDIS_STRING_CONST("SdioIstThread"),		"SdioIstThread",		0, FIELD_OFFSET(MRVDRV_ADAPTER, SdioIstThread),				4},
#ifdef AvoidOidSetScan
	{NDIS_STRING_CONST("AvoidScanTime"),		"AvoidScanTime",		0, FIELD_OFFSET(MRVDRV_ADAPTER, AvoidScanTime),				4},
#endif
#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},
#endif 
#ifdef NEW_RSSI
	{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
	///crlo:filter_32_ESSID ++
	{NDIS_STRING_CONST("ESSID_32"),				"ESSID_32",				0, FIELD_OFFSET(MRVDRV_ADAPTER, ESSID_32),					4},
	///crlo:filter_32_ESSID --
	///crlo:Multicast ++
	{NDIS_STRING_CONST("Allow_Multicast"),		"Allow_Multicast",		0, FIELD_OFFSET(MRVDRV_ADAPTER, allowMultiCast),			4},
	///crlo:Multicast --
#ifdef BG_SCAN
    {NDIS_STRING_CONST("bActiveRoamingwithBGSCAN"),"bActiveRoamingwithBGSCAN",			0, FIELD_OFFSET(MRVDRV_ADAPTER, bActiveRoamingwithBGSCAN),				4},
#endif /* BG_SCAN */
    };
   
// 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"
//


#define SIZE_OF_REG_TAB (sizeof(MrvDrvRegInfoTab)/sizeof(REGINFOTAB))

/*
===============================================================================
            CODED PUBLIC PROCEDURES
===============================================================================
*/
/* Add the coded public routines here, each with their own prologue. */

// jeff.spurgat 2003-04-02
// DllEntry is required for WinCE driver
#ifdef UNDER_CE
//-----------------------------------------------------------------------------
// Function   : DllEntry
// This function provides the DLL entry point required for the WinCE 
// driver. Since all network drivers are implemented as DLL's in WinCE, 
// this entry point is needed.
//
// Inputs     : HANDLE hDLL, handle identifying this DLL.
//
//              DWORD dwReason, reason of invocation of this entry point.
//
//              LPVOID lpReserved, reserved param
//
// Outputs    : None.
//
// Returns    : TRUE - don't really know what this function is used
//                     for, it has basically been reproduced here from 
//                     the WinCE sample driver. Just safer to return TRUE
//                     than FALSE :-)
//
//-----------------------------------------------------------------------------
BOOL __stdcall
DllEntry( HANDLE hDLL,
          DWORD dwReason,
          LPVOID lpReserved )
{

    switch (dwReason) 
    {
        case DLL_PROCESS_ATTACH:
            DEBUGMSG(1, (TEXT("MRVDRVND5: DLL_PROCESS_ATTACH\n")));
            DisableThreadLibraryCalls ((HMODULE)hDLL);
            break;
        case DLL_PROCESS_DETACH:
            DEBUGMSG(1, (TEXT("MRVDRVND5: DLL_PROCESS_DETACH\n")));
            break;
    }
    return TRUE;
}
#endif

// jeff.spurgat 2003-04-02
// Added AddKeyValues() function, which is used by Install_Driver() to set
// registry key entries. This function was taken from samples in Platform
// Builder.
#ifdef UNDER_CE
/****************************************************************************
 * Function   : AddKeyValues
 * This function adds the specified key and its value into the
 * registry under HKEY_LOCAL_MACHINE.
 *
 * Inputs     : LPWSTR KeyName, name of the key to be added to the registry.
 *
 *              PREG_VALUE_DESCR Vals, value associated with this key.
 *
 * Outputs    : None.
 *
 * NOTE       : 1. This function only supports REG_MULTI_SZ strings with 
 *                 one item.
 *              2. Assumes that input Value for the specified Key is NULL
 *                 terminated.
 *
 * Returns    : TRUE  - if successfully added Key & Value
 *              FALSE - if failed to add Key & Value
 *
 ***************************************************************************/
BOOL
AddKeyValues (LPWSTR KeyName, PREG_VALUE_DESCR Vals)
{
    DWORD Status;
    DWORD dwDisp;
    HKEY hKey;
    PREG_VALUE_DESCR pValue;
    DWORD ValLen;
    PBYTE pVal;
    DWORD dwVal;
    LPWSTR pStr;

    Status = RegCreateKeyEx (HKEY_LOCAL_MACHINE, KeyName, 0, NULL, REG_OPTION_NON_VOLATILE, 0, NULL, &hKey, &dwDisp);

    if (Status != ERROR_SUCCESS)
        return (FALSE);

    pValue = Vals;
    while (pValue->val_name)
  {
    switch (pValue->val_type)
    {
      case REG_DWORD:
        pVal = (PBYTE)&dwVal;
        dwVal = (DWORD)pValue->val_data;
        ValLen = sizeof (DWORD);
        break;
      case REG_SZ:
        pVal = (PBYTE)pValue->val_data;
        ValLen = (wcslen ((LPWSTR)pVal) + 1) * sizeof (WCHAR);
        break;
      case REG_MULTI_SZ:
        dwVal = wcslen ((LPWSTR)pValue->val_data);
        ValLen = (dwVal + 2) * sizeof (WCHAR);
        pVal = LocalAlloc (LPTR, ValLen);
        if (pVal == NULL)
        {
          RegCloseKey (hKey);
          return (FALSE);
        }
        wcscpy ((LPWSTR)pVal, (LPWSTR)pValue->val_data);
        pStr = (LPWSTR)pVal + dwVal;
        pStr[1] = 0;
        break;
    }
    Status = RegSetValueEx (hKey, pValue->val_name, 0, pValue->val_type, pVal, ValLen);
    if (pValue->val_type == REG_MULTI_SZ)
      LocalFree (pVal);
        if (Status != ERROR_SUCCESS)
    {
            RegCloseKey (hKey);
            return (FALSE);
    }
        pValue++;
    }
    RegCloseKey (hKey);
    return (TRUE);
}
#endif // UNDER_CE

///crlo:test ++
/*
DWORD NDL_Init(DWORD dwContext)
{
	static DWORD		pHC=0;
	RETAILMSG(1, (TEXT("Enter %s\n"), TEXT(__FUNCTION__)));

	pHC ++;
	RETAILMSG(1, (TEXT("Exit %s\n"), TEXT(__FUNCTION__)));
	return pHC;
}
BOOL NDL_Deinit(DWORD hDC)
{
	BOOL	result = TRUE;
	RETAILMSG(1, (TEXT("NDL_Deinit\n")));

	

	return result;
}*/
///crlo:test --

/******************************************************************************
 *
 *  Name: DriverEntry()
 *
 *  Description:  
 *    NDIS miniport driver primary driver entry. 
 *
 *  Arguments:
 *      DriverObject - Pointer to driver object created by the system.
 *      RegistryPath - The registry path of this driver
 *    
 *  Return Value:
 *
 *    NDIS_STATUS_SUCCESS 
 *    NDIS_STATUS_BAD_CHARACTERISTICS 
 *    NDIS_STATUS_BAD_VERSION 
 *    NDIS_STATUS_RESOURCES 
 *    NDIS_STATUS_FAILURE
 * 
 *  Notes:                
 *
 *****************************************************************************/
NTSTATUS
DriverEntry(PDRIVER_OBJECT DriverObject,
    PUNICODE_STRING RegistryPath
  )
{
    NDIS_STATUS Status;
    NDIS_HANDLE NdisWrapperHandle;

    NDIS_MINIPORT_CHARACTERISTICS MrvDrvNMC;

    INITDEBUG();

    DBGPRINT(DBG_LOAD,("INIT - Enter DriverEntry\n"));


	///crlo:verdef ++
	//DBGPRINT(DBG_ALL, (TEXT("=== ") TEXT(IFSTRN) TEXT(CHIPSTRN) TEXT("_")  TEXT(RFSTRN) TEXT(" Driver ===")));
	RETAILMSG(1, (TEXT("=== ") TEXT(IFSTRN) TEXT(CHIPSTRN) TEXT("_") TEXT(RFSTRN) TEXT(" Driver ===")));
	#ifdef MRVL_PRINT_FILE_MSG
		MrvPrintFileMSG("[Marvell]DriverEntry === " IFSTRN CHIPSTRN "_" RFSTRN" Driver ===\n");
	#endif
	///crlo:verdef --

    DBGPRINT(DBG_ALL, ("*** Driver version %s ***\n",
                        MRVDRV_DRIVER_BUILD_VERSION));
    DBGPRINT(DBG_ALL, ("*** Built on %s %s ***\n",
                      __DATE__, 
                      __TIME__));

    // Now we must initialize the wrapper, and then register the Miniport
#if DBG
    isrTimeDelay.QuadPart = 0;
#endif 

  
    NdisMInitializeWrapper( 
    &NdisWrapperHandle,
    DriverObject,
        RegistryPath,
        NULL

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -