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

📄 oidproc.c

📁 marvell wifi driver CF-8385PN-NDIS-ARM4-WINCE50-5.24.17.p5-27.p11.src.zip
💻 C
📖 第 1 页 / 共 5 页
字号:
/******************* ?Marvell Semiconductor, Inc., 2001-2004 *****************
 *
 *  Purpose:    This module provides the implementation of NDIS set and get 
 *              information handler
 *
 *	$Author: achin $
 *
 *	$Date: 2004/12/29 $
 *
 *	$Revision: #12 $
 *
 *****************************************************************************/

#include "precomp.h"

//  Currently, Microsoft still use 802.3 type of frame for 802.11 netowrking
//
static const NDIS_MEDIUM MediaSupported[2] = {NdisMedium802_3, (NDIS_MEDIUM)NULL};

//  WMI support, please check MOF file for GUID definition
//
static const NDIS_GUID GUIDList[] = {
	{ // {3d8f1f43-7c2a-4393-bcf0-ee4e07dc4068} // Set Query
            {0x3d8f1f43, 0x7c2a, 0x4393,  0xbc, 0xf0, 0xee, 0x4e, 0x07, 0xdc, 0x40, 0x68},
            OID_MRVL_OEM_SET_ULONG,
            sizeof(ULONG),
            (fNDIS_GUID_TO_OID)},
	{ // {3d8f1f43-7c2a-4393-bcf0-ee4e07dc4068} // Get Query
            {0x3d8f1f43, 0x7c2a, 0x4393,  0xbc, 0xf0, 0xee, 0x4e, 0x07, 0xdc, 0x40, 0x68},
            OID_MRVL_OEM_GET_ULONG,
            sizeof(ULONG),
            (fNDIS_GUID_TO_OID)},
#ifdef MRVL_WINXP_NDIS51             
    	{ // {3d8f1f43-7c2a-4393-bcf0-ee4e07dc4068} // Get array query
            {0x3d8f1f43, 0x7c2a, 0x4393,  0xbc, 0xf0, 0xee, 0x4e, 0x07, 0xdc, 0x40, 0x68},
            OID_MRVL_OEM_GET_STRING,
            (ULONG) -1, // size is size of each element in the string
            (fNDIS_GUID_TO_OID|fNDIS_GUID_ANSI_STRING|fNDIS_GUID_ALLOW_READ)}
#endif
#ifdef NDIS50_MINIPORT
    	{ // {3d8f1f43-7c2a-4393-bcf0-ee4e07dc4068} // Get array query
            {0x3d8f1f43, 0x7c2a, 0x4393,  0xbc, 0xf0, 0xee, 0x4e, 0x07, 0xdc, 0x40, 0x68},
            OID_MRVL_OEM_GET_STRING,
            (ULONG) -1, // size is size of each element in the string
            (fNDIS_GUID_TO_OID|fNDIS_GUID_ANSI_STRING)}
#endif            
};

// MrvDrv supported ODI list
//
static const UINT MrvDrvGlobalSupportedOids[] =
    {
        	OID_GEN_SUPPORTED_LIST,
        	OID_GEN_HARDWARE_STATUS,
        	OID_GEN_MEDIA_SUPPORTED,
        	OID_GEN_MEDIA_IN_USE,
        	OID_GEN_MAXIMUM_LOOKAHEAD,
        	OID_GEN_MAXIMUM_FRAME_SIZE,
        	OID_GEN_LINK_SPEED,
        	OID_GEN_TRANSMIT_BUFFER_SPACE,
        	OID_GEN_RECEIVE_BUFFER_SPACE,
        	OID_GEN_TRANSMIT_BLOCK_SIZE,
        	OID_GEN_RECEIVE_BLOCK_SIZE,
        	OID_GEN_VENDOR_ID,
        	OID_GEN_VENDOR_DESCRIPTION,
        	OID_GEN_CURRENT_PACKET_FILTER,  // ToDo: Function to set filter
        	OID_GEN_CURRENT_LOOKAHEAD,
        	OID_GEN_DRIVER_VERSION,
	 	OID_GEN_VENDOR_DRIVER_VERSION,
        	OID_GEN_MAXIMUM_TOTAL_SIZE,
        	OID_GEN_PROTOCOL_OPTIONS,       	// ToDo: Function to set protocol option
        	OID_GEN_MAC_OPTIONS,
        	OID_GEN_MEDIA_CONNECT_STATUS,
        	OID_GEN_MAXIMUM_SEND_PACKETS,
        	OID_GEN_SUPPORTED_GUIDS,
        	OID_GEN_XMIT_OK,
        	OID_GEN_RCV_OK,
        	OID_GEN_XMIT_ERROR,
        	OID_GEN_RCV_ERROR,
        	OID_GEN_RCV_NO_BUFFER,
        	OID_GEN_RCV_CRC_ERROR,
        	OID_GEN_TRANSMIT_QUEUE_LENGTH,
	 	OID_GEN_DIRECTED_FRAMES_RCV,
        	OID_802_3_PERMANENT_ADDRESS,
        	OID_802_3_CURRENT_ADDRESS,
        	OID_802_3_MULTICAST_LIST,
        	OID_802_3_MAXIMUM_LIST_SIZE,
        	//For ndis 4 packet priority
        	//OID_802_3_MAC_OPTIONS,
        	OID_802_3_RCV_ERROR_ALIGNMENT,
        	OID_802_3_XMIT_ONE_COLLISION,
        	OID_802_3_XMIT_MORE_COLLISIONS,
        	//OID_802_3_XMIT_DEFERRED,
        	//OID_802_3_XMIT_MAX_COLLISIONS,
        	//OID_802_3_RCV_OVERRUN,
        	//OID_802_3_XMIT_UNDERRUN,
        	//OID_802_3_XMIT_HEARTBEAT_FAILURE,
        	//OID_802_3_XMIT_TIMES_CRS_LOST,
        	//OID_802_3_XMIT_LATE_COLLISIONS,
		//TCP/IP checksum offload 
        	//OID_TCP_TASK_OFFLOAD,
        	//Power management 
        	OID_PNP_CAPABILITIES,
        	OID_PNP_SET_POWER,
        	OID_PNP_QUERY_POWER,
        	OID_PNP_ADD_WAKE_UP_PATTERN,
        	OID_PNP_REMOVE_WAKE_UP_PATTERN,
        	OID_PNP_ENABLE_WAKE_UP,
		//OID_PNP_WAKE_UP_PATTERN_LIST,
#ifdef MRVL_WINXP_NDIS51 // WinXP specific
	 	OID_GEN_MACHINE_NAME,
#endif
		OID_GEN_PHYSICAL_MEDIUM,
		OID_802_11_BSSID,
		OID_802_11_SSID,
		OID_802_11_NETWORK_TYPES_SUPPORTED,  	//(Optional)
		OID_802_11_NETWORK_TYPE_IN_USE,
		OID_802_11_TX_POWER_LEVEL,           		//(Optional)
		OID_802_11_RSSI,
		OID_802_11_RSSI_TRIGGER,             		//(Optional)
		OID_802_11_INFRASTRUCTURE_MODE, 
		OID_802_11_FRAGMENTATION_THRESHOLD,  	//(Optional)
		OID_802_11_RTS_THRESHOLD,            		//(Optional)
		//OID_802_11_NUMBER_OF_ANTENNAS,     	//(Optional)
		OID_802_11_RX_ANTENNA_SELECTED,      		//(Optional)
		OID_802_11_TX_ANTENNA_SELECTED,      		//(Optional)
		OID_802_11_SUPPORTED_RATES,
		OID_802_11_DESIRED_RATES,            		//(Optional) 
		OID_802_11_CONFIGURATION,
		OID_802_11_STATISTICS,               			//(Optional)
		OID_802_11_ADD_WEP,
		OID_802_11_REMOVE_WEP,
		OID_802_11_DISASSOCIATE,
		OID_802_11_POWER_MODE,               
		OID_802_11_BSSID_LIST,
		OID_802_11_AUTHENTICATION_MODE,
		OID_802_11_PRIVACY_FILTER,           		//(optional)
		OID_802_11_BSSID_LIST_SCAN,

#ifndef WPA // mutually exclusive with OID_802_11_ENCRYPTION_STATUS
        	OID_802_11_WEP_STATUS,
#endif 
		OID_802_11_RELOAD_DEFAULTS,
#ifdef WPA
		OID_802_11_ADD_KEY,
		OID_802_11_REMOVE_KEY,
		OID_802_11_ENCRYPTION_STATUS,
		OID_802_11_ASSOCIATION_INFORMATION,
        	OID_802_11_TEST,                     	// not supported
#endif 
              // custom oid WMI support 
		OID_MRVL_OEM_GET_ULONG,
		OID_MRVL_OEM_SET_ULONG,
		OID_MRVL_OEM_GET_STRING,
		// OEM command 
		OID_MRVL_OEM_COMMAND,
        	OID_MRVL_BBP_REG,                    	// access Baseband register
        	OID_MRVL_MAC_REG,                    	// access MAC register
        	OID_MRVL_RF_REG,                     	// access RF register
        	OID_MRVL_EEPROM_ACCESS,            // access flash memory
        	OID_MRVL_TX_MODE,                    	// set card to special TX mode
        	OID_MRVL_RX_MODE,                    	// set card to special RX mode
        	OID_MRVL_MAC_ADDRESS,
        	OID_MRVL_REGION_CODE,
        	OID_MRVL_L2ROAMING,                  	// set L2 roaming parameters
       	OID_MRVL_LED_CONTROL,                 // set LED behavior
        	OID_MRVL_MULTIPLE_DTIM,               // set multiple of DTIM period

        	OID_MRVL_WMM_STATE,
        	OID_MRVL_WMM_ACK_POLICY,
        	OID_MRVL_WMM_STATUS,
                
		OID_MRVL_LED_CONTROL,
		OID_MRVL_CAL_DATA,
		OID_MRVL_CAL_DATA_EXT,
		OID_MRVL_PWR_CFG,
		OID_MRVL_TPC_CFG,
		OID_MRVL_RATE_ADAPT_RATESET
    };

#ifdef MRVL_GUI_INTERFACE
void HWSetMACReg( PMRVDRV_ADAPTER pAdapter, PVOID InformationBuffer);
void HWSetBBPReg( PMRVDRV_ADAPTER pAdapter, PVOID InformationBuffer);
void HWSetRFReg( PMRVDRV_ADAPTER pAdapter, PVOID InformationBuffer);
void HWReadMACReg( PMRVDRV_ADAPTER pAdapter, PVOID InformationBuffer);
void HWReadBBPReg( PMRVDRV_ADAPTER pAdapter, PVOID InformationBuffer);
void HWReadRFReg( PMRVDRV_ADAPTER pAdapter, PVOID InformationBuffer );
#endif //MRVL_GUI_INTERFACE

#if OLD_DBG_SUPPORT
/******************************************************************************
 *
 *  Name: eagleShowOID()
 *
 *  Description:        Display OID name
 *
 *  Conditions for Use: For debugging only
 *
 *  Arguments:
 *      IN char * prefix
 *	    IN NDIS_OID Oid
 *    
 *  Return Value:
 *      None
 * 
 *  Notes:               
 *
 *****************************************************************************/

void MrvDrvShowOID
( 
    	IN  char *prefix,
	IN  NDIS_OID Oid
)
{
    	int ix;
    	int entries;

    	entries = sizeof(MrvDrvGlobalSupportedOids) / sizeof(NDIS_OID);

    	for(ix=0;ix<entries;ix++)
    	{
       	if ( Oid == MrvDrvGlobalSupportedOids[ix] )
        	{
            		DBGPRINT(DBG_OID,("%s %s\n",prefix,MrvDrvSupportedOidNames[ix]));
            		break;
        	}
    	}
}

void MrvDrvDumpEthAddr(PCHAR str, PUCHAR addr)
{
    	int ix;
   	DBGPRINT(DBG_OID,(str));
    	for(ix=0;ix<MRVDRV_ETH_ADDR_LEN;ix++)
    	{
       	DBGPRINT(DBG_OID,("%02x ",*(addr+ix)));
    	}
    	DBGPRINT(DBG_OID | DBG_RAW,("\n"));
}

#endif 

/******************************************************************************
 *
 *  Name: MrvDrvCopyBSSIDList()
 *
 *  Description: Copy BSSID List
 *
 *  Arguments:
 * 	  IN      	PMRVDRV_ADAPTER		   Adapter
 *	  IN OUT  PNDIS_802_11_BSSID_LIST    pScanList
 *      IN      	NDIS_WLAN_BSSID_EX           DriverScanList
 *      IN     	MRV_BSSID_IE_LIST               DriverIEList
 *    
 *  Return Value:
 *      NDIS_STATUS_SUCCESS
 *      NDIS_STATUS_NOT_SUPPORTED
 * 
 *  Notes:               
 *
 *****************************************************************************/
NDIS_STATUS MrvDrvCopyBSSIDList(
    	IN      	PMRVDRV_ADAPTER		Adapter,
 	IN OUT  	NDIS_WLAN_BSSID_EX        *pScanList,
    	IN      	ULONG                           	BufferLength,
   	OUT     	ULONG                           	*BytesNeeded,
    	OUT     	ULONG                           	*BytesWritten,
    	IN      	ULONG                           	ulNumBSSIDs,
    	IN      	NDIS_WLAN_BSSID_EX        *pBSSIDList,
    	IN      	MRV_BSSID_IE_LIST            *pDriverIEList)      
{

    	// check if using the old structure
    	UINT    idx, size;
    	PUCHAR  pCurBuf, pPrevBuf;
    	ULONG   ulRequiredSize;
    	ULONG   ulActualWriteSize = 0;
    	NDIS_STATUS Status = NDIS_STATUS_SUCCESS;

	// Find out the total size required
    	ulRequiredSize = sizeof(NDIS_802_11_BSSID_LIST_EX);

    	for ( idx = 0; idx < ulNumBSSIDs; idx++ )
    	{
       	// 4 byte align
        	size = (((sizeof(NDIS_WLAN_BSSID_EX) + 
                		pBSSIDList[idx].IELength) + 3) << 2) >> 2;
        
        	ulRequiredSize += size;
    	}                
    
    	// Check the buffer size
	if (BufferLength < ulRequiredSize)
    	{			    
		*BytesWritten = 0;
		*BytesNeeded = ulRequiredSize;
		
        	return NDIS_STATUS_INVALID_LENGTH;
	}

    	pPrevBuf = pCurBuf = (PUCHAR)pScanList;

    	// DBGPRINT(DBG_OID, ("Number of AP: %d\n", pNdisBssidList->NumberOfItems));

    	for ( idx =0; idx < ulNumBSSIDs; idx++ )
    	{
       	// copy NDIS_WLAN_BSSID_EX structure
		NdisMoveMemory( pCurBuf, 
						&(pBSSIDList[idx]),
						sizeof(NDIS_WLAN_BSSID_EX));
        
        	if ( pBSSIDList[idx].IELength > 0 )
        	{
            		pCurBuf = ((PNDIS_WLAN_BSSID_EX)pCurBuf)->IEs;
            
            		// copy IE
            		NdisMoveMemory(  pCurBuf, 
                     			       &(pDriverIEList[idx]),
                            			pBSSIDList[idx].IELength);
        	}

        	size = (((sizeof(NDIS_WLAN_BSSID_EX) + 
              		pBSSIDList[idx].IELength) + 3) >> 2) << 2;
        
        	// HexDump(DBG_SCAN, "NDIS_WLAN_BSSID_EX:", (PUCHAR)pPrevBuf, size);

        	// DBGPRINT(DBG_SCAN, ("bssidlist size = %d, sizeof ex structure = "
        	//                    "%d, ielength = %d, size of orig "
        	//                    "structure = %d\n",
        	//                    size, sizeof(NDIS_WLAN_BSSID_EX), 
        	//                    pBSSIDList[idx].IELength,
        	//                    sizeof(NDIS_WLAN_BSSID)));

        	DBGPRINT(DBG_SCAN, ("Copied SSID %s, %2x-%2x-%2x-%2x-%2x-%2x\n", 
              	             			pBSSIDList[idx].Ssid.Ssid,
                     	      			pBSSIDList[idx].MacAddress[0],
                           	      			pBSSIDList[idx].MacAddress[1],
                           	      			pBSSIDList[idx].MacAddress[2],
                           	      			pBSSIDList[idx].MacAddress[3],
                           				pBSSIDList[idx].MacAddress[4],
                           				pBSSIDList[idx].MacAddress[5]));

        	// move the pointers
       	pCurBuf = pPrevBuf + size;
        	ulActualWriteSize += size;
        	pPrevBuf = pCurBuf;
    	}

	*BytesWritten = ulActualWriteSize;
	*BytesNeeded = 0;

	return (Status);
}

#ifdef WPA
/******************************************************************************
 *
 *  Name: MrvDrvSetEncryptionStatus()
 *
 *  Description: process set encryption status OID
 *
 *  Arguments:
 * 		IN PMRVDRV_ADAPTER					Adapter
 *	    	IN NDIS_802_11_ENCRYPTION_STATUS	EncryptionStatus
 *    
 *  Return Value:
 *      	NDIS_STATUS_SUCCESS
 *      	NDIS_STATUS_NOT_SUPPORTED
 * 
 *  Notes:               
 *
 *****************************************************************************/
NDIS_STATUS 
MrvDrvSetEncryptionStatus(
	IN PMRVDRV_ADAPTER					Adapter,
	IN NDIS_802_11_ENCRYPTION_STATUS	EncryptionStatus,
    	IN NDIS_OID 							Oid,                        // not used 
	IN PVOID 							InformationBuffer,  
	OUT PULONG 							BytesRead,		 // not used 
	OUT PULONG 							BytesNeeded          // not used 
)
{
    	NDIS_STATUS     Status;
    	NDIS_802_11_ENCRYPTION_STATUS   PrevEncryptionStatus;

	DBGPRINT(DBG_OID , (" +++ MrvDrvSetEncryptionStatus() \n"));

    	PrevEncryptionStatus = Adapter->EncryptionStatus;

	DBGPRINT(DBG_OID , (" PrevEncryptionStatus = %d, NewEncryptionStatus = %d\n", 
		                           (ULONG)PrevEncryptionStatus, *((ULONG *)InformationBuffer)));

	switch (EncryptionStatus) 
	{
   
	case Ndis802_11Encryption3Enabled:
	case Ndis802_11Encryption3KeyAbsent:	
	case Ndis802_11Encryption2Enabled:
    	case Ndis802_11Encryption2KeyAbsent:

        	if ( (PrevEncryptionStatus == Ndis802_11Encryption1Enabled) || 
             	     (PrevEncryptionStatus == Ndis802_11Encryption1KeyAbsent) )
        	{
            		// disable WEP
                     Adapter->usMacControlRecord |=
                                         ( HostCmd_ACT_MAC_RX_ON | 
					        HostCmd_ACT_MAC_TX_ON |
					        HostCmd_ACT_MAC_INT_ENABLE);
			Adapter->usMacControlRecord &=
                                          ~HostCmd_STATUS_MAC_WEP_ENABLE;		 

			Status = PrepareAndSendCommand(
				        	Adapter,
				        	HostCmd_CMD_MAC_CONTROL,
				        	Adapter->usMacControlRecord,
				        	HostCmd_OPTION_USE_INT,
				        	Oid,
				        	HostCmd_PENDING_ON_NONE,
				        	0,
				        	FALSE,
				        	NULL,
				        	NULL,    

⌨️ 快捷键说明

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