?? oidproc.c
字號:
/******************* ?Marvell Semiconductor, Inc., 2001-2004 *****************
*
* Purpose: This module provides the implementation of NDIS set and get
* information handler
*
* $Author: cuizt $
*
* $Date: 2007/07/02 09:10:17 $
*
* $Revision: 1.35.2.3 $
*
*****************************************************************************/
#include "precomp.h"
//////////////added by zhangb////////////////
#include "ParaRoamingProc.h"
//////////////added by zhangb////////////////
#ifdef DEBUG_PARA_ROAMING
extern PRIVATE_PARAROAMING_ADAPTER priv;
extern NDIS_MINIPORT_TIMER g_stRMMRetryPRMLinkupStatusTimer;
#endif
// 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 // #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,
#endif
//tt ++ v5 firmware
OID_MRVL_LED_CONTROL,
#ifdef CAL_DATA
OID_MRVL_CAL_DATA,
OID_MRVL_CAL_DATA_EXT,
#endif //CAL_DATA
OID_MRVL_PWR_CFG,
OID_MRVL_TPC_CFG,
OID_MRVL_RATE_ADAPT_RATESET
//tt --
};
#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);
}
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:
* Due to the new OID operation mechanism, this function can only be called from
* MrvDrvSetInformation(). TT noted.
*
*****************************************************************************/
NDIS_STATUS
MrvDrvSetEncryptionStatus(
IN PMRVDRV_ADAPTER Adapter,
IN NDIS_802_11_ENCRYPTION_STATUS EncryptionStatus,
IN NDIS_OID Oid,
IN PVOID InformationBuffer,
OUT PULONG BytesRead,
OUT PULONG BytesNeeded
)
{
NDIS_STATUS Status;
USHORT Action;
NDIS_802_11_ENCRYPTION_STATUS PrevEncryptionStatus;
PrevEncryptionStatus = Adapter->EncryptionStatus;
switch (EncryptionStatus)
{
case Ndis802_11Encryption3Enabled:
//dralee 081005, V4
//return NDIS_STATUS_NOT_SUPPORTED;
case Ndis802_11Encryption3KeyAbsent:
case Ndis802_11Encryption2Enabled:
case Ndis802_11Encryption2KeyAbsent:
if ( ! FW_IS_WPA_ENABLED(Adapter) )
{
return NDIS_STATUS_NOT_SUPPORTED;
}
if ( (Adapter->MediaConnectStatus == NdisMediaStateConnected) &&
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -