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

📄 oidproc.c

📁 marvell8385 GSPI开发驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
/******************* ?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 + -