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

📄 initproc.c

📁 Windows CE 6.0 BSP for VOIP sample phone. Intel PXA270 platform.
💻 C
📖 第 1 页 / 共 5 页
字号:
// Values for [HKEY_LOCAL_MACHINE\Comm\CF8381P]
REG_VALUE_DESCR CommCF8381PKeyValues[] = {
	{(TEXT ("DisplayName")),		REG_SZ,			(PBYTE) (TEXT("Marvell CF8381P Wireless Card"))},
	{(TEXT ("Group")),				REG_SZ,			(PBYTE) (TEXT("NDIS"))},
	{(TEXT ("ImagePath")),			REG_SZ,			(PBYTE) (TEXT("CF8381P.dll"))},
	{NULL,							0,				NULL}
};

// [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\PCI\Template\CF8381P]
REG_VALUE_DESCR DriversCF8381PPciKeyValues[] = {
	{(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
	PcmciaCF8381PKeyValues,
	PcmciaDetectKeyValues,

	// PCI interface
    	DriversCF8381PPciKeyValues,
    	CommCF8381PKeyValues,
};

LPWSTR KeyNames[] = {
	(TEXT ("Drivers\\PCMCIA\\CF8381P")),
	(TEXT ("Drivers\\PCMCIA\\Detect\\101")),

    	(TEXT ("Drivers\\BuiltIn\\PCI\\Template\\CF8381P")),
    	(TEXT ("Comm\\CF8381P")),
};

#endif // #ifdef MRV_CHIP_8381P



#ifdef MRV_CHIP_8305

// Values for [HKEY_LOCAL_MACHINE\Drivers\PCMCIA\EAGLEND5]
REG_VALUE_DESCR PcmciaEAGLEND5KeyValues[] = {
	{(TEXT ("Dll")),				REG_SZ,			(PBYTE) (TEXT("ndis.dll"))},
	{(TEXT ("Prefix")),				REG_SZ,			(PBYTE) (TEXT("NDS"))},
	{(TEXT ("Miniport")),			REG_SZ,			(PBYTE) (TEXT("EAGLEND5"))},
	{NULL,							0,				NULL}
};

// Values for [HKEY_LOCAL_MACHINE\Drivers\PCMCIA\Detect\101]
REG_VALUE_DESCR PcmciaDetectKeyValues[] = {
	{(TEXT ("Dll")),				REG_SZ,			(PBYTE) (TEXT("eaglend5.dll"))},
	{(TEXT ("Entry")),				REG_SZ,			(PBYTE) (TEXT("DetectMrvDrv"))},
	{NULL,							0,				NULL}
};

// PCI interface

// Values for [HKEY_LOCAL_MACHINE\Comm\EAGLEND5]
REG_VALUE_DESCR CommEAGLEND5KeyValues[] = {
	{(TEXT ("DisplayName")),		REG_SZ,			(PBYTE) (TEXT("Marvell CF-25P Wireless Card"))},
	{(TEXT ("Group")),				REG_SZ,			(PBYTE) (TEXT("NDIS"))},
	{(TEXT ("ImagePath")),			REG_SZ,			(PBYTE) (TEXT("EAGLEND5.dll"))},
	{NULL,							0,				NULL}
};

// [HKEY_LOCAL_MACHINE\Drivers\BuiltIn\PCI\Template\EAGLEND5]
REG_VALUE_DESCR DriversEAGLEND5PciKeyValues[] = {
	{(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
	PcmciaEAGLEND5KeyValues,
	PcmciaDetectKeyValues,

	// PCI interface
    	DriversEAGLEND5PciKeyValues,
   	CommEAGLEND5KeyValues,
};

LPWSTR KeyNames[] = {
	(TEXT ("Drivers\\PCMCIA\\EAGLEND5")),
	(TEXT ("Drivers\\PCMCIA\\Detect\\101")),

    	(TEXT ("Drivers\\BuiltIn\\PCI\\Template\\EAGLEND5")),
    	(TEXT ("Comm\\EAGLEND5")),
};
#endif
#endif // UNDER_CE

#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")));

                     ///RETAILMSG(1, (TEXT("MRVDRVND5: DLL_PROCESS_ATTACH \r\n")));		
					
            		DisableThreadLibraryCalls ((HMODULE)hDLL);
					
            		break;
       	 case DLL_PROCESS_DETACH:
            		DEBUGMSG(1, (TEXT("MRVDRVND5: DLL_PROCESS_DETACH\n")));

			 ///RETAILMSG(1, (TEXT("MRVDRVND5: DLL_PROCESS_DETACH \r\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

// jeff.spurgat 2003-04-02
// Install_Driver is useful for WinCE drivers of PnP devices to install the PnP
// registry settings. This function was taken from samples in Platform Builder.
#ifdef UNDER_CE
//-----------------------------------------------------------------------------
// Description:
//	The Install_Driver routine sets up the registry keys and values required to
//  install this DLL as a Windows CE plug and play network driver.
//
// Arguments:
//  lpPnpId      This is a device's plug & play identifier string. If this
//               is a driver for a PCI adapter and adapter detection is done
//               by the driver, this parameter is ignored.
//	lpRegPath    This is a buffer which contains the newly installed
//               driver's device keys under HKEY_LOCAL_MACHINE in the registry.
//               Windows CE will attempt to load the newly installed device
//               driver upon completion of its Install_Driver function.
//  cRegPathSize Number of bytes in lpRegPath.
//
// Return Value:
//	lpRegPath if successful, NULL for failure.
//
//-----------------------------------------------------------------------------
LPWSTR
Install_Driver (LPWSTR lpPnpId, LPWSTR lpRegPath, DWORD  cRegPathSize)
{
    	UINT uiIndex;

    	//DEBUGMSG(1, (TEXT("MRVDRVND5: Install_Driver PnpId=%s RegPath=%s RegPathSize=%d.\n"), lpPnpId, lpRegPath, cRegPathSize));
	DBGPRINT(DBG_LOAD ,("MRVDRVND5: Install_Driver PnpId=%s RegPath=%s RegPathSize=%d.\n", lpPnpId, lpRegPath, cRegPathSize));

    	for (uiIndex = 0; uiIndex < (sizeof (KeyNames) / sizeof (LPWSTR)); uiIndex++)
	{
        	if (!AddKeyValues(KeyNames[uiIndex], Values[uiIndex]))
		{
			//
			// Clean up after failure.
			//
			for (uiIndex = 0; uiIndex < (sizeof (KeyNames) / sizeof (LPWSTR)); uiIndex++)
				RegDeleteKey(HKEY_LOCAL_MACHINE, KeyNames[uiIndex]);
		    	//DEBUGMSG(1, (TEXT("MRVDRVND5: Install_Driver failed.\n")));
		    	DBGPRINT(DBG_LOAD , ("MRVDRVND5: Install_Driver failed.\n"));
			return (NULL);
		}
    	}

    	//
    	// Return success
    	//
    	wcscpy(lpRegPath, KeyNames[0]);
    	//DEBUGMSG(1, (TEXT("MRVDRVND5: Install_Driver success.\n")));
    	DBGPRINT(DBG_LOAD , ("MRVDRVND5: Install_Driver success.\n"));

	return (lpRegPath);
}
#endif // UNDER_CE

// jeff.spurgat 2003-04-05
// For a generic PC Card driver, which is one that can drive an
// entire class of PC Cards adhering to a specified operating
// standard, you need an additional entry point in the dynamic-link
// library (DLL) for a detection function. The Device Manager uses
// the detection function when a user inserts an unknown PC Card
// with no Plug and Play identifier.
#ifdef UNDER_CE
//-----------------------------------------------------------------------------
// Description:
// Detects device in system.
//
// Arguments:
// hSock      // Socket containing the card to detect
// DevType    // Device type from CISTPL_FUNCID or 0xff for unknown
// DevKey     // Buffer to put name of device key
// DevKeyLen  // Number of characters in buffer parameter
//
// Return Value:
//
//-----------------------------------------------------------------------------
LPTSTR
DetectMrvDrv(
	CARD_SOCKET_HANDLE hSock,
	UCHAR DevType,
	LPTSTR DevKey,
	DWORD DevKeyLen)
{
    	HANDLE hPcmciaDll;
    	GETFIRSTTUPLE pfnGetFirstTuple;
   	GETTUPLEDATA pfnGetTupleData;
    	DWORD cerr;
    	UCHAR buf[sizeof(CARD_DATA_PARMS) + 256];
    	PCARD_DATA_PARMS pParms;
    	PCARD_TUPLE_PARMS pTuple;
    	PUCHAR pData;
    	LPWSTR lpwstrRet = NULL;

	DBGPRINT(DBG_ALLEN | DBG_SP, ("++ DetectMrvDrv\n"));

       ///RETAILMSG(1, (TEXT("++ DetectMrvDrv() \r\n")));		


    	if (DevType!=PCCARD_TYPE_NETWORK)
	{
	    	DBGPRINT(DBG_ALLEN | DBG_SP | DBG_ALLEN, ("MRVDRVND5: DetectMrvDrv incorrect device type.\n"));
        	return NULL;
    	}

    	hPcmciaDll = LoadLibrary(TEXT("PCMCIA.DLL"));
    	if (hPcmciaDll == NULL)
	{
		DBGPRINT(DBG_ALLEN | DBG_SP | DBG_ALLEN, ("MRVDRVND5: DetectMrvDrv PCMCIA.DLL load failed.\n"));
        	return NULL;
    	}

    	pfnGetFirstTuple = (GETFIRSTTUPLE) GetProcAddress(hPcmciaDll, TEXT("CardGetFirstTuple"));
    	pfnGetTupleData = (GETTUPLEDATA) GetProcAddress(hPcmciaDll, TEXT("CardGetTupleData"));
    	if ((pfnGetFirstTuple == NULL) || (pfnGetTupleData == NULL))
	{
		DBGPRINT(DBG_ALLEN | DBG_SP | DBG_ALLEN, ("MRVDRVND5: DetectMrvDrv GetProcAddress failed.\n"));
        	FreeLibrary(hPcmciaDll);

⌨️ 快捷键说明

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