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

📄 oidproc.c

📁 此压缩包为杰得开发得z228的BSP的源代码,可以实现很多功能,尤其是视频解码有很好的效果.
💻 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"

#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 + -