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

📄 message.c

📁 Freescale ARM11系列CPU MX31的WINCE 5.0下的BSP
💻 C
📖 第 1 页 / 共 5 页
字号:
//---------------------------------------------------------------------------
// Copyright (C) 2006, Freescale Semiconductor, Inc. All Rights Reserved.
// THIS SOURCE CODE, AND ITS USE AND DISTRIBUTION, IS SUBJECT TO THE TERMS
// AND CONDITIONS OF THE APPLICABLE LICENSE AGREEMENT 
//--------------------------------------------------------------------------
//
// File:  message.c
// Source file for platform specific SDIO WLAN functions
//------------------------------------------------------------------------------
 

//------------------------------------------------------------------------------
// INCLUDE FILES  
//------------------------------------------------------------------------------

#include "precomp.h"

//------------------------------------------------------------------------------
// GLOBAL DEFINITIONS  
//------------------------------------------------------------------------------

typedef enum {
	DATA_TYPE_BYTE = 0,
	DATA_TYPE_SINT8,
	DATA_TYPE_UINT16,
	DATA_TYPE_ULONG,
	DATA_TYPE_STRING,
	DATA_TYPE_ADDRESS,
} DATA_TYPE_E;

typedef struct MIB_ID_LOOKUP_TABLE {
	ULONG ulMibId;
	DATA_TYPE_E eDataType;
	ULONG ulSize;
} MIB_ID_LOOKUP_TABLE_S;

//------------------------------------------------------------------------------
// GLOBAL OR STATIC VARIABLES  
//------------------------------------------------------------------------------
extern 	NDIS_STATUS	iCurOIDStatus;
extern 	MIB_ID		u16MibID_GetMIBAttr;

// For storage of incomplete debug output.
#if !defined (RUNNING_LOG) //binary encoding of debug msgs
static uint8 au8DebugBuffer[UMI_DEBUG_BLOCK_SIZE+1];
static uint8 * pcWriteChar;
#endif

// External function to add RSN IE fields.
extern uint8 *pu8WPAaddRsnIePayloadFields(const UMI_RSN_CAPS *psRsnCaps, uint8 *pOutRsnIeData);

// External function to calculate Max Tx Power Level
extern VOID vENDselectMaxTxPower(IN PWLAN_CONTEXT psWlan, IN PWLAN_BSSID_ENTRY psBssEntry);


static MIB_ID_LOOKUP_TABLE_S sMibIdLookupTable[] = {
	{MIB_COUNTRY_STRING, DATA_TYPE_STRING, sizeof(MIB_COUNTRY)}
	,
	{MIB_IEEE_ADDRESS, DATA_TYPE_ADDRESS, IEEE_ADDR_LEN}
	,
	{MIB_RTS_THRESHOLD, DATA_TYPE_UINT16, sizeof(UINT16)}
	,
	{MIB_FRAGMENT_THRESHOLD, DATA_TYPE_UINT16, sizeof(UINT16)}
	,
	{MIB_MANUFACTURER_ID, DATA_TYPE_STRING, sizeof(MIB_MAN_ID)}
	,
	{MIB_PRODUCT_ID, DATA_TYPE_STRING, sizeof(MIB_PROD_ID)}
	,
	{MIB_MANUFACTURER_OUI, DATA_TYPE_STRING, sizeof(MIB_OUI)}
	,
	{MIB_UWA_PROGRAM_VER, DATA_TYPE_UINT16, sizeof(UINT16)}
	,
	{MIB_RX_BUF_OVERFLOW_COUNT, DATA_TYPE_ULONG, sizeof(ULONG)}
	,
	{MIB_UWA_RX_STATS, DATA_TYPE_BYTE, 4 * MIB_UWA_RX_STATS_SEGM_LENGTH}
	,
	{MIB_UWA_RX_STATS_SEGM2, DATA_TYPE_BYTE,
	 4 * MIB_UWA_RX_STATS_SEGM_LENGTH}
	,
	{MIB_UWA_RX_STATS_SEGM3, DATA_TYPE_BYTE,
	 4 * MIB_UWA_RX_STATS_SEGM_LENGTH}
	,
	{MIB_REG_DOMAINS_SUPPORTED, DATA_TYPE_BYTE, sizeof(MIB_SET_OF_U8)}
	,
	{MIB_SUPPORTED_TX_ANTENNAS, DATA_TYPE_BYTE, sizeof(MIB_LIST_OF_U8)}
	,
	{MIB_SUPPORTED_RX_ANTENNAS, DATA_TYPE_BYTE, sizeof(MIB_LIST_OF_U8)}
	,
	{MIB_MAX_TX_POWER_LEVEL, DATA_TYPE_SINT8, sizeof(UCHAR)}
	,
	{MIB_TPC_PARAMS_2_4_GHZ_TABLE, DATA_TYPE_BYTE,
	 sizeof(MIB_TPC_BG_TABLE_S)}
	,
	{MIB_TPC_PARAMS_5_GHZ_TABLE, DATA_TYPE_BYTE, sizeof(MIB_TPC_A_TABLE_S)}
	,
	{MIB_CURRENT_CHANNEL_NUMBER, DATA_TYPE_UINT16, sizeof(UINT16)}
	,
	{MIB_IBSS_CHANNEL_NUMBER, DATA_TYPE_UINT16, sizeof(UINT16)}
	,
	{MIB_RESTRICTED_CHANNEL_NUMBER, DATA_TYPE_UINT16, sizeof(UINT16)}
	,
	{MIB_CHANNEL_SET, DATA_TYPE_BYTE, sizeof(MIB_SET_OF_U8)}
	,
	{MIB_SNR, DATA_TYPE_ULONG, sizeof(ULONG)}
	,
	{MIB_UWA_RX_STATS_MASK, DATA_TYPE_ULONG,
	 sizeof(MIB_UWA_RX_STATS_MASK_TYPE)}
	,
	{MIB_UWA_POLLING_RATE, DATA_TYPE_UINT16, sizeof(UINT16)}
	,
	{MIB_TX_THROUGHPUT_TIMER, DATA_TYPE_UINT16, sizeof(UINT16)}
	,
	{MIB_POWER_SAVING_CONTROL_MODE, DATA_TYPE_UINT16, sizeof(UINT16)}
	,
	{MIB_DESIRED_ESSID, DATA_TYPE_BYTE, sizeof(MIB_ESS_ID)}
	,
	{MIB_SCAN_TYPE, DATA_TYPE_UINT16, sizeof(UINT16)}
	,
	{MIB_BSSID, DATA_TYPE_ADDRESS, IEEE_ADDR_LEN}
	,
	{MIB_ESSID, DATA_TYPE_BYTE, sizeof(MIB_ESS_ID)}
	,
	{MIB_BEACON_PERIOD, DATA_TYPE_UINT16, sizeof(UINT16)}
	,
	{MIB_DTIM_PERIOD, DATA_TYPE_UINT16, sizeof(UINT16)}
	,
	{MIB_ATIM_WINDOW, DATA_TYPE_UINT16, sizeof(UINT16)}
	,
	{MIB_ALL_RATE_SET, DATA_TYPE_BYTE, sizeof(MIB_SET_OF_U8)}
	,
	{MIB_BSS_BASIC_RATE_SET, DATA_TYPE_ULONG, sizeof(ULONG)}
	,
	{MIB_OPERATIONAL_RATE_SET, DATA_TYPE_ULONG, sizeof(ULONG)}
	,
	{MIB_SHORT_PREAMBLE_SUPPORT_FOR_EACH_RATE, DATA_TYPE_BYTE,
	 sizeof(MIB_SET_OF_U8)}
	,
	{MIB_LISTEN_INTERVAL, DATA_TYPE_UINT16, sizeof(UINT16)}
	,
	{MIB_SOFTWARE_CONFIG, DATA_TYPE_ULONG, sizeof(ULONG)}
	,
	{MIB_STATION_AID, DATA_TYPE_UINT16, sizeof(UINT16)}
	,
	{MIB_SW_VERSION, DATA_TYPE_UINT16, sizeof(UINT16)}
	,
	{MIB_ASIC_VER, DATA_TYPE_ULONG, sizeof(MIB_ASIC_VER_TYPE)}
	,
	{MIB_BOOT_VER, DATA_TYPE_UINT16, sizeof(UINT16)}
	,
	{MIB_CA_DEVICE_CAPS, DATA_TYPE_ULONG, sizeof(ULONG)}
	,
	{MIB_CHECK_ROAMING_TIMEOUT, DATA_TYPE_UINT16, sizeof(UINT16)}
	,
	{MIB_RSSITH, DATA_TYPE_UINT16, sizeof(UINT16)}
	,
	{MIB_RSSI_ROAM_HYS, DATA_TYPE_UINT16, sizeof(UINT16)}
	,
	{MIB_FORCE_RATE, DATA_TYPE_UINT16, sizeof(UINT16)}
	,
	{MIB_BSS_PHY_CAPS, DATA_TYPE_UINT16, sizeof(UINT16)}
	,
	{MIB_WME_DAMPING_FACTORS, DATA_TYPE_UINT16, sizeof(WME_3WORD_ARRAY)}
	,
	{MIB_RSN_CONTROL, DATA_TYPE_BYTE, sizeof(RSNMIB_CONTROL)}
	,
	{MIB_RSN_PAIRWISE_ALERT_THRESHOLDS, DATA_TYPE_UINT16,
	 sizeof(RSNMIB_PAIRWISE_ALERT_THRESHOLDS)}
	,
	{MIB_RSN_GROUP_ALERT_THRESHOLDS, DATA_TYPE_UINT16,
	 sizeof(RSNMIB_GROUP_ALERT_THRESHOLDS)}
	,
	{MIB_RSN_IE, DATA_TYPE_BYTE, sizeof(MIB_RSN_IE_PARAMS)}
	,
	{MIB_BACKGROUND_SCAN_PARAMS, DATA_TYPE_UINT16,
	 sizeof(MIB_BACKGROUND_SCAN_PARAMS_S)}
	,
	{0, DATA_TYPE_BYTE, sizeof(UCHAR)}	// Default value - Keep this always at the end.
};

#define SIZEOF_MIB_ID_LOOKUP_TABLE (sizeof(sMibIdLookupTable)/sizeof(MIB_ID_LOOKUP_TABLE_S))

#define MIB_ID_MAX MIB_TPC_PARAMS_5_GHZ_TABLE

//-----------------------------------------------------------------------------
//
// NAME        vHALMessageResponse
//
// PARAMETERS  psHAL    Pointer to HAL context.
//          psMsg    Message structure pointer.
//
// DESCRIPTION Make a response to the indication message.
//
//-----------------------------------------------------------------------------
VOID
vHALMessageResponse( IN PHAL_CONTEXT psHAL, IN UMI_MSG * psMsg )
{
    // Toggle the direction bit, change indication message to response.
    MSG_MAKE_REPLY( psMsg->u16MsgId );
   
    if ( !boHALsendMessage( psHAL, psMsg ) )
    {
        DBG_LEV0(("ERROR: Failed to send the response message, id = 0x%x.\n", psMsg->u16MsgId));
    }
}


//-----------------------------------------------------------------------------
//
// NAME        vHALsendGetStatsReq
//
// PARAMETERS  psHAL    Pointer to HAL context.
//
// DESCRIPTION This function sends a Get 802.11 Stats request message to Target.
//
//-----------------------------------------------------------------------------
VOID
vHALsendGetStatsReq( IN PHAL_CONTEXT psHAL )
{
    UMI_MSG              *psMsg;
    UMI_GET_802_11_STATS *psGetStats;

    psMsg = psHALnewReqMessage( psHAL, MSG_MAN );

    if ( psMsg != NULL )
    {
        psGetStats = (UMI_GET_802_11_STATS *)psMsg->abData;
        psGetStats->u16Status = UMI_OK;

        psMsg->u16MsgId = UM_MAN_GET_802_11_STATS_REQ;
        boHALsendMessage( psHAL, psMsg );
    }
}


//-----------------------------------------------------------------------------
//
// NAME        vHALhandleGetStatsCfm
//
// PARAMETERS  psHAL    Pointer to HAL context.
//          psMsg    Confirm message to be processed.
//
// DESCRIPTION This function handles Get 802.11 Stats confirm message.
//
//-----------------------------------------------------------------------------
VOID
vHALhandleGetStatsCfm( IN PHAL_CONTEXT psHAL, IN UMI_MSG * psMsg )
{
    UMI_GET_802_11_STATS *psGetStats;
    PWLAN_CONTEXT        psWlan = &psHAL->psAdapter->sWlan;
    PNDIS_802_11_STATISTICS psStats = &psWlan->sStatistics;


    PPENDING_OID         psPendingOID = &psHAL->psAdapter->sPendingOID;
    NDIS_STATUS          iStatus = NDIS_STATUS_NOT_ACCEPTED;

   
    psGetStats = (UMI_GET_802_11_STATS *)psMsg->abData;

    if ( psGetStats->u16Status == UMI_OK )
    {

        psStats->TransmittedFragmentCount.QuadPart = psGetStats->u32TxFragCount;
        psStats->MulticastTransmittedFrameCount.QuadPart = psGetStats->u32TxMulticastCount;
        psStats->FailedCount.QuadPart = psGetStats->u32TxFailedCount;
        psStats->RetryCount.QuadPart = psGetStats->u32TxRetryCount;
        psStats->FrameDuplicateCount.QuadPart = psGetStats->u32RxDuplicateCount;
        psStats->ReceivedFragmentCount.QuadPart = psGetStats->u32RxFragCount;
        psStats->MulticastReceivedFrameCount.QuadPart = psGetStats->u32RxMulticastCount;
        psStats->FCSErrorCount.QuadPart = psGetStats->u32RxFcsErrorCount;

        psStats->Length = sizeof( NDIS_802_11_STATISTICS );

        DBG_LEV2(("Successfully Get 802.11 Stats.\n"));
    }
    else
    {
        DBG_LEV0(("ERROR: Get 802.11 Stats failed, %d.\n", psGetStats->u16Status));
    }


    if ( psPendingOID->ulOid == OID_802_11_STATISTICS )
    {
        // Clear the pending OID flag.
        psPendingOID->ulOid = 0;

        if ( psGetStats->u16Status == UMI_OK )
        {
            OS_MEMCPY( psPendingOID->pvBuffer, psStats, psStats->Length );
            *psPendingOID->pulBytesWritten = psStats->Length;

            iStatus = NDIS_STATUS_SUCCESS;
        }

        // Complete the prior pending OID request.
        NdisMQueryInformationComplete( psHAL->psAdapter->hMiniportAdapterHandle, iStatus );
	iCurOIDStatus = iStatus;
	
        DBG_LEV2(("PENDING Query Completed for OID 0x%x\n", psPendingOID->ulOid));
    }

}


//-----------------------------------------------------------------------------
//
// NAME        vHALsendClearUwaStatsReq
//
// PARAMETERS  psHAL    Pointer to HAL context.
//
// DESCRIPTION This function sends a Clear Stats request message to Target.
//
//-----------------------------------------------------------------------------
VOID
vHALsendClearUwaStatsReq( IN PHAL_CONTEXT psHAL )
{
    UMI_MSG     *psMsg;
    UMI_UWA_CLEAR_STATS     *psClearStats;

    psMsg = psHALnewReqMessage( psHAL, MSG_MAN );

    if ( psMsg != NULL )
    {
        // we just clear them all so set the clearall ID
        psClearStats = (UMI_UWA_CLEAR_STATS *)psMsg->abData;
        psClearStats->u8StatId = UMI_UWA_CLEARSTATS_CLEARALL_ID;

        DBG_LEV1(("Sent clear stats\n"));
        psMsg->u16MsgId = UM_MAN_CLEAR_STATS_REQ;
        boHALsendMessage( psHAL, psMsg );
    }
}


//-----------------------------------------------------------------------------
//
// NAME        vHALhandleClearStatsCfm
//
// PARAMETERS  psHAL    Pointer to HAL context.
//          psMsg    Confirm message to be processed.
//
// DESCRIPTION This function handles Clear Stats confirm messages received 
//          from the device.
//
//-----------------------------------------------------------------------------
VOID
vHALhandleClearStatsCfm( IN PHAL_CONTEXT psHAL, IN UMI_MSG * psMsg )
{
    UMI_UWA_CLEAR_STATS  *psClearStats;

    psClearStats = (UMI_UWA_CLEAR_STATS *)psMsg->abData;

    DBG_LEV1(("Successfully cleared stats\n"));
}

//-----------------------------------------------------------------------------
//
// NAME        vHALsendGetGenStatsReq
//
// PARAMETERS  psHAL    Pointer to HAL context.
//
// DESCRIPTION This function sends a Get Generic Stats request message to Target.
//
//-----------------------------------------------------------------------------
VOID
vHALsendGetGenStatsReq( IN PHAL_CONTEXT psHAL )
{
    UMI_MSG     *psMsg;
    UMI_GET_GEN_STATS *psGetStats;

    psMsg = psHALnewReqMessage( psHAL, MSG_MAN );

    if ( psMsg != NULL )
    {
        psGetStats = (UMI_GET_GEN_STATS *)psMsg->abData;
        psGetStats->u16Status = UMI_OK;

        psMsg->u16MsgId = UM_MAN_GET_GEN_STATS_REQ;
        boHALsendMessage( psHAL, psMsg );
    }
}

⌨️ 快捷键说明

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