📄 oidproc.c
字号:
/******************* ?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"
#define DBG_wifi 0
// 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[] = {
///#ifdef CCX
#ifdef FUNK_CCX
{
{0x21190696,0x118D,0x4654,0x9E,0x9A,0xC6,0x9C,0xA7,0xC7,0x95,0xB8}, // GUID
OID_FSW_CCX_CONFIGURATION, // custom OID, see enum above
sizeof(OS_UINT32), // size of data
fNDIS_GUID_TO_OID|fNDIS_GUID_ALLOW_READ|fNDIS_GUID_ALLOW_WRITE // flags go here
},
{
{0x0725E492,0x3025,0x477C,0x91,0xDC,0xD5,0xC1,0x2A,0x4E,0xEC,0x1F},
OID_FSW_CCX_NETWORK_EAP,
sizeof(OS_UINT32),
fNDIS_GUID_TO_OID|fNDIS_GUID_ALLOW_READ|fNDIS_GUID_ALLOW_WRITE
},
{
{0x5858FA82,0x0DFD,0x4A4A,0xBB,0xC9,0xDC,0xC7,0x8F,0x63,0x01,0x70},
OID_FSW_CCX_ROGUE_AP_DETECTED,
sizeof(FSW_CCX_ROGUE_AP_DETECTED),
fNDIS_GUID_TO_OID|fNDIS_GUID_ALLOW_READ|fNDIS_GUID_ALLOW_WRITE
},
{
{0x6E72993A,0x59A7,0x4A3E,0xB1,0x65,0x0C,0xEC,0xB3,0xC5,0x0C,0xDC},
OID_FSW_CCX_REPORT_ROGUE_APS,
0,
fNDIS_GUID_TO_OID|fNDIS_GUID_ALLOW_READ|fNDIS_GUID_ALLOW_WRITE
},
{
{0x55019653,0x0454,0x4309,0xB8,0xCA,0xD2,0xE9,0xF4,0xD0,0xAF,0x83},
// {0x871DBA61,0xF66A,0x426d,0xA0,0x7D,0xAE,0xF9,0x3F,0x36,0x80,0x27},
OID_FSW_CCX_AUTH_SUCCESS,
sizeof(FSW_CCX_AUTH_SUCCESS),
fNDIS_GUID_TO_OID|fNDIS_GUID_ALLOW_READ|fNDIS_GUID_ALLOW_WRITE
},
{
{0x8C389E47,0xE511,0x4D96,0xAE,0xFE,0x2F,0xB7,0x31,0xD8,0x0C,0x05},
// {0xA42D234C,0xABEF,0x4f3c,0x8A,0x34,0x52,0xC4,0x9C,0x46,0x62,0x27},
OID_FSW_CCX_CCKM_START,
-1,
fNDIS_GUID_TO_STATUS|fNDIS_GUID_ALLOW_READ|fNDIS_GUID_ALLOW_WRITE // this one sends status only
},
{
{0x1163FCA7,0x9C1A,0x4E39,0xA8,0x79,0x9F,0x93,0xAD,0x1B,0x84,0x07},
// {0xCD1D414E,0x9CFD,0x4d46,0x8A,0x78,0x88,0x60,0xB3,0x15,0xF0,0x80},
OID_FSW_CCX_CCKM_RESULT,
sizeof(FSW_CCX_CCKM_RESULT),
fNDIS_GUID_TO_OID|fNDIS_GUID_ALLOW_READ|fNDIS_GUID_ALLOW_WRITE
},
{
{0xF5190942,0x6D90,0x4858,0x8A,0xDF,0x08,0x6A,0x2F,0xA5,0xB7,0xEB},
OID_FSW_CCX_CCKM_REQUEST,
//sizeof(FSW_CCX_CCKM_REQUEST),
32,
fNDIS_GUID_TO_OID|fNDIS_GUID_ALLOW_READ|fNDIS_GUID_ALLOW_WRITE
},
#endif ///FUNK_CCX
{ // {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 // #ifndef WPA
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 // #ifdef WPA
/* 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
#ifdef WMM
OID_MRVL_WMM_STATE,
OID_MRVL_WMM_ACK_POLICY,
OID_MRVL_WMM_STATUS,
#ifdef WMM_UAPSD
OID_MRVL_SLEEP_PERIOD,
#endif //WMM_UAPSD
#endif //WMM
//tt ++ v5 firmware
OID_MRVL_LED_CONTROL,
#ifdef CAL_DATA
OID_MRVL_CAL_DATA,
OID_MRVL_CAL_DATA_EXT,
#endif //CAL_DATA
#ifdef BG_SCAN
OID_MRVL_BG_SCAN_QUERY,
OID_MRVL_BG_SCAN_CONFIG,
#endif
#ifdef PA_CFG_EXT
OID_MRVL_POWER_ADAPT_CFG_EXT,
#endif
#ifdef GET_TX_RATE
OID_MRVL_GET_TX_RATE,
#endif
OID_MRVL_GET_RX_INFO,
OID_MRVL_PWR_CFG,
OID_MRVL_TPC_CFG,
OID_MRVL_RATE_ADAPT_RATESET,
//tt --
#ifdef CCX_v4
OID_MRVL_GET_TSF,
OID_MRVL_WMM_ADDTS,
OID_MRVL_WMM_DELTS,
OID_MRVL_WMM_QUEUE_CONFIG,
OID_MRVL_WMM_QUEUE_STATS
#endif ///CCX_v4
};
#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 // end of DGB > 0
/******************************************************************************
*
* 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);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -