/*
 * Copyright (c) 2012-2013, 2016-2017, 2019 The Linux Foundation. All rights reserved.
 *
 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
 *
 *
 * Permission to use, copy, modify, and/or distribute this software for
 * any purpose with or without fee is hereby granted, provided that the
 * above copyright notice and this permission notice appear in all
 * copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 * PERFORMANCE OF THIS SOFTWARE.
 */

/*
 * This file was originally distributed by Qualcomm Atheros, Inc.
 * under proprietary terms before Copyright ownership was assigned
 * to the Linux Foundation.
 */




/*
 * This file wniApi.h contains message definitions exported by
 * Sirius software modules.
 * NOTE: See projects/sirius/include/sirApi.h for structure
 * definitions of the host/FW messages.
 *
 * Author:        Chandra Modumudi
 * Date:          04/11/2002
 * History:-
 * Date           Modified by    Modification Information
 * --------------------------------------------------------------------
 */

#ifndef __WNI_API_H
#define __WNI_API_H

// DPH return error codes
#define ANI_DPH_SUCCESS            0

#define ANI_DPH_RX_STA_INVALID     1

#define ANI_DPH_DO_TKIP 2

#define ANI_DPH_PORT_BLOCKED 3
#define ANI_DPH_TX_PUSH_ERROR      10
#define ANI_DPH_TX_MAC_HDR_ERROR   11
#define ANI_DPH_TX_INVALID_PAYLOAD 12
#define ANI_DPH_TX_STA_INVALID     13
#define ANI_DPH_TX_HASH_MISS       14
#define ANI_DPH_TX_UNINITIALIZED   15
#define ANI_DPH_TX_RADIO_IN_DIAG_MODE 16
#define ANI_DPH_WMM_DROP 17
#define ANI_DPH_APSD_DROP 18
#define ANI_DPH_UNKNOWN_STA 19

/// HDD type for special handling of BDs in the TX pkts
/// Used in the structure ani_mod_info_t->bd_spl_proc_type
#define ANI_HDD_NO_SPL_PROC             0
#define ANI_HDD_DUMMY_PKT_SPL_PROC      1
#define ANI_HDD_PRE_DUMMY_PKT_SPL_PROC  2
#define ANI_HDD_WNS_L2_UPDATE_SPL_PROC  3
#define ANI_HDD_DUMMY_DATA              4
#ifdef WMM_APSD
#define ANI_HDD_EOSP_PKT                5
#endif

/// Message offset for the cmd to enqueue a dummy pkt to HDD TD ring
#define ANI_DUMMY_PKT_MSG_TYPE_OFFSET    0
#define ANI_DUMMY_PKT_MSG_LEN_OFFSET     2
#define ANI_DUMMY_PKT_MAC_ADDR_OFFSET    4
#define ANI_DUMMY_PKT_STA_ID_OFFSET      10
#define ANI_DUMMY_PKT_RT_FL_OFFSET       12
#define ANI_DUMMY_PKT_MSG_LEN            16
#define ANI_DUMMY_DATA_PAYLOAD_OFFSET    10

/**
 * Product IDs stored in the EEPROM for the different types of AP radio cards
 * supported by Polaris
 */
#define AGN1323AR_00      4
#define AGN1323AR_01      5
#define AGN1223AR_00      6
#define AGN1223AR_01      7
#define AGN1223AR_02      8
#define AGN_EEP_PRODUCT_ID_MAX   8

#define SIR_SME_MODULE_ID 0x16

/// Start of Sirius/Host message types
#define WNI_HOST_MSG_START             0x1500

enum eWniMsgTypes
{
    /// CFG message types
    eWNI_CFG_MSG_TYPES_BEGIN=WNI_HOST_MSG_START,
    eWNI_CFG_MSG_TYPES_END=eWNI_CFG_MSG_TYPES_BEGIN+0xFF,

    /// SME message types
    eWNI_SME_MSG_TYPES_BEGIN=eWNI_CFG_MSG_TYPES_END,
    eWNI_SME_START_REQ,
    eWNI_SME_START_RSP,
    eWNI_SME_SYS_READY_IND,
    eWNI_SME_SCAN_REQ,
    eWNI_SME_SCAN_ABORT_IND,
    eWNI_SME_SCAN_RSP,
#ifdef FEATURE_OEM_DATA_SUPPORT
    eWNI_SME_OEM_DATA_REQ,
    eWNI_SME_OEM_DATA_RSP,
#endif
    eWNI_SME_JOIN_REQ,
    eWNI_SME_JOIN_RSP,
    eWNI_SME_SETCONTEXT_REQ,
    eWNI_SME_SETCONTEXT_RSP,
    eWNI_SME_REASSOC_REQ,
    eWNI_SME_REASSOC_RSP,
    eWNI_SME_AUTH_REQ,
    eWNI_SME_AUTH_RSP,
    eWNI_SME_DISASSOC_REQ,
    eWNI_SME_DISASSOC_RSP,
    eWNI_SME_DISASSOC_IND,
    eWNI_SME_DISASSOC_CNF,
    eWNI_SME_DEAUTH_REQ,
    eWNI_SME_DEAUTH_RSP,
    eWNI_SME_DEAUTH_IND,
    eWNI_SME_DISCONNECT_DONE_IND,
    eWNI_SME_WM_STATUS_CHANGE_NTF,
    eWNI_SME_IBSS_NEW_PEER_IND,
    eWNI_SME_IBSS_PEER_DEPARTED_IND,
    eWNI_SME_START_BSS_REQ,
    eWNI_SME_START_BSS_RSP,
    eWNI_SME_AUTH_IND,
    eWNI_SME_ASSOC_IND,
    eWNI_SME_ASSOC_CNF,
    eWNI_SME_REASSOC_IND,
    eWNI_SME_REASSOC_CNF,
    eWNI_SME_SWITCH_CHL_REQ,
    eWNI_SME_SWITCH_CHL_RSP,
    eWNI_SME_STOP_BSS_REQ,
    eWNI_SME_STOP_BSS_RSP,
    eWNI_SME_DEL_BA_PEER_IND,
    eWNI_SME_DEFINE_QOS_REQ,
    eWNI_SME_DEFINE_QOS_RSP,
    eWNI_SME_DELETE_QOS_REQ,
    eWNI_SME_DELETE_QOS_RSP,
    eWNI_SME_PROMISCUOUS_MODE_REQ,
    eWNI_SME_PROMISCUOUS_MODE_RSP,
    eWNI_SME_LINK_TEST_START_REQ,
    eWNI_SME_LINK_TEST_START_RSP,
    eWNI_SME_LINK_TEST_STOP_REQ,
    eWNI_SME_LINK_TEST_STOP_RSP,
    eWNI_SME_LINK_TEST_REPORT_IND,
    eWNI_SME_NEIGHBOR_BSS_IND,
    eWNI_SME_MEASUREMENT_REQ,
    eWNI_SME_MEASUREMENT_RSP,
    eWNI_SME_MEASUREMENT_IND,
    eWNI_SME_SET_WDS_INFO_REQ,
    eWNI_SME_SET_WDS_INFO_RSP,
    eWNI_SME_WDS_INFO_IND,
    eWNI_SME_SET_POWER_REQ,
    eWNI_SME_SET_POWER_RSP,
    eWNI_SME_CLIENT_SIDE_LOAD_BALANCE_REQ,
    eWNI_SME_CLIENT_SIDE_LOAD_BALANCE_RSP,
    eWNI_SME_SELECT_CHANNEL_REQ,
    eWNI_SME_SELECT_CHANNEL_RSP,
    eWNI_SME_SET_PROPRIETARY_IE_REQ,
    eWNI_SME_SET_PROPRIETARY_IE_RSP, // #endif
    eWNI_SME_DISCARD_SKB_NTF,  // Used to cleanup SKBs by HDD
    eWNI_SME_DEAUTH_CNF,
    eWNI_SME_MIC_FAILURE_IND,
    eWNI_SME_ADDTS_REQ,
    eWNI_SME_ADDTS_RSP,
    eWNI_SME_ADDTS_CNF,
    eWNI_SME_ADDTS_IND,
    eWNI_SME_DELTS_REQ,
    eWNI_SME_DELTS_RSP,
    eWNI_SME_DELTS_IND,
    eWNI_SME_SET_BACKGROUND_SCAN_MODE_REQ,
    eWNI_SME_SWITCH_CHL_CB_PRIMARY_REQ,
    eWNI_SME_SWITCH_CHL_CB_PRIMARY_RSP,
    eWNI_SME_SWITCH_CHL_CB_SECONDARY_REQ,
    eWNI_SME_SWITCH_CHL_CB_SECONDARY_RSP,
    eWNI_SME_PROBE_REQ,
    eWNI_SME_STA_STAT_REQ,
    eWNI_SME_STA_STAT_RSP,
    eWNI_SME_AGGR_STAT_REQ,
    eWNI_SME_AGGR_STAT_RSP,
    eWNI_SME_GLOBAL_STAT_REQ,
    eWNI_SME_GLOBAL_STAT_RSP,
    eWNI_SME_STAT_SUMM_REQ,
    eWNI_SME_STAT_SUMM_RSP,
    eWNI_SME_REMOVEKEY_REQ,
    eWNI_SME_REMOVEKEY_RSP,
    eWNI_SME_GET_SCANNED_CHANNEL_REQ,
    eWNI_SME_GET_SCANNED_CHANNEL_RSP,
    eWNI_SME_SET_TX_POWER_REQ,
    eWNI_SME_SET_TX_POWER_RSP,
    eWNI_SME_GET_TX_POWER_REQ,
    eWNI_SME_GET_TX_POWER_RSP,
    eWNI_SME_GET_NOISE_REQ,
    eWNI_SME_GET_NOISE_RSP,
    eWNI_SME_LOW_RSSI_IND,
    eWNI_SME_GET_STATISTICS_REQ,
    eWNI_SME_GET_STATISTICS_RSP,
    eWNI_SME_GET_RSSI_REQ,
    eWNI_SME_GET_ROAM_RSSI_REQ,
    eWNI_SME_GET_ROAM_RSSI_RSP,
    eWNI_SME_GET_ASSOC_STAS_REQ,
    eWNI_SME_TKIP_CNTR_MEAS_REQ,
    eWNI_SME_UPDATE_APWPSIE_REQ,
    eWNI_SME_GET_WPSPBC_SESSION_REQ,
    eWNI_SME_WPS_PBC_PROBE_REQ_IND,
    eWNI_SME_SET_APWPARSNIEs_REQ,
    eWNI_SME_UPPER_LAYER_ASSOC_CNF,
    eWNI_SME_HIDE_SSID_REQ,
    eWNI_SME_CHNG_MCC_BEACON_INTERVAL,
    eWNI_SME_REMAIN_ON_CHANNEL_REQ,
    eWNI_SME_REMAIN_ON_CHN_IND,
    eWNI_SME_REMAIN_ON_CHN_RSP,
    eWNI_SME_REMAIN_ON_CHN_RDY_IND,
    eWNI_SME_SEND_ACTION_FRAME_IND,
    eWNI_SME_ACTION_FRAME_SEND_CNF,
    eWNI_SME_ABORT_REMAIN_ON_CHAN_IND,
    eWNI_SME_UPDATE_NOA,
    eWNI_SME_CLEAR_DFS_CHANNEL_LIST,
    eWNI_SME_PRE_CHANNEL_SWITCH_FULL_POWER,
    eWNI_SME_GET_SNR_REQ,
    eWNI_SME_LOST_LINK_PARAMS_IND,
    //General Power Save Messages
    eWNI_PMC_MSG_TYPES_BEGIN,
    eWNI_PMC_PWR_SAVE_CFG,

    //BMPS Messages
    eWNI_PMC_ENTER_BMPS_REQ,
    eWNI_PMC_ENTER_BMPS_RSP,
    eWNI_PMC_EXIT_BMPS_REQ,
    eWNI_PMC_EXIT_BMPS_RSP,
    eWNI_PMC_EXIT_BMPS_IND,

    //IMPS Messages.
    eWNI_PMC_ENTER_IMPS_REQ,
    eWNI_PMC_ENTER_IMPS_RSP,
    eWNI_PMC_EXIT_IMPS_REQ,
    eWNI_PMC_EXIT_IMPS_RSP,

    //UAPSD Messages
    eWNI_PMC_ENTER_UAPSD_REQ,
    eWNI_PMC_ENTER_UAPSD_RSP,
    eWNI_PMC_EXIT_UAPSD_REQ,
    eWNI_PMC_EXIT_UAPSD_RSP,

    //WOWL Messages
    eWNI_PMC_SMPS_STATE_IND,

    //WoWLAN Messages
    eWNI_PMC_WOWL_ADD_BCAST_PTRN,
    eWNI_PMC_WOWL_DEL_BCAST_PTRN,
    eWNI_PMC_ENTER_WOWL_REQ,
    eWNI_PMC_ENTER_WOWL_RSP,
    eWNI_PMC_EXIT_WOWL_REQ,
    eWNI_PMC_EXIT_WOWL_RSP,

#ifdef WLAN_FEATURE_PACKET_FILTERING
    eWNI_PMC_PACKET_COALESCING_FILTER_MATCH_COUNT_RSP,
#endif // WLAN_FEATURE_PACKET_FILTERING

#if defined WLAN_FEATURE_VOWIFI
    eWNI_SME_RRM_MSG_TYPE_BEGIN,

    eWNI_SME_NEIGHBOR_REPORT_REQ_IND,
    eWNI_SME_NEIGHBOR_REPORT_IND,
    eWNI_SME_BEACON_REPORT_REQ_IND,
    eWNI_SME_BEACON_REPORT_RESP_XMIT_IND,

#endif
    eWNI_SME_ADD_STA_SELF_REQ,
    eWNI_SME_ADD_STA_SELF_RSP,
    eWNI_SME_DEL_STA_SELF_REQ,
    eWNI_SME_DEL_STA_SELF_RSP,

#if defined WLAN_FEATURE_VOWIFI_11R
    eWNI_SME_FT_PRE_AUTH_REQ,
    eWNI_SME_FT_PRE_AUTH_RSP,
    eWNI_SME_FT_UPDATE_KEY,
    eWNI_SME_FT_AGGR_QOS_REQ,
    eWNI_SME_FT_AGGR_QOS_RSP,
#endif

#if defined FEATURE_WLAN_ESE
    eWNI_SME_ESE_ADJACENT_AP_REPORT,
#endif

    eWNI_SME_REGISTER_MGMT_FRAME_REQ,

    eWNI_SME_COEX_IND,

#ifdef FEATURE_WLAN_SCAN_PNO
    eWNI_SME_PREF_NETWORK_FOUND_IND,
#endif // FEATURE_WLAN_SCAN_PNO

    eWNI_SME_TX_PER_HIT_IND,

    eWNI_SME_CHANGE_COUNTRY_CODE,
    eWNI_SME_GENERIC_CHANGE_COUNTRY_CODE,
    eWNI_SME_PRE_SWITCH_CHL_IND,
    eWNI_SME_POST_SWITCH_CHL_IND,

    eWNI_SME_MAX_ASSOC_EXCEEDED,

    eWNI_SME_BTAMP_LOG_LINK_IND,//to serialize the create/accpet LL req from HCI


#ifdef WLAN_WAKEUP_EVENTS
    eWNI_SME_WAKE_REASON_IND,
#endif // WLAN_WAKEUP_EVENTS
    eWNI_SME_EXCLUDE_UNENCRYPTED,
    eWNI_SME_RSSI_IND, //RSSI indication from TL to be serialized on MC thread
#ifdef FEATURE_WLAN_TDLS
    eWNI_SME_TDLS_SEND_MGMT_REQ,    
    eWNI_SME_TDLS_SEND_MGMT_RSP,    
    eWNI_SME_TDLS_ADD_STA_REQ,    
    eWNI_SME_TDLS_ADD_STA_RSP,    
    eWNI_SME_TDLS_DEL_STA_REQ,    
    eWNI_SME_TDLS_DEL_STA_RSP,
    eWNI_SME_TDLS_DEL_STA_IND,
    eWNI_SME_TDLS_DEL_ALL_PEER_IND,
    eWNI_SME_MGMT_FRM_TX_COMPLETION_IND,
    eWNI_SME_TDLS_LINK_ESTABLISH_REQ,
    eWNI_SME_TDLS_LINK_ESTABLISH_RSP,
// tdlsoffchan
    eWNI_SME_TDLS_CHANNEL_SWITCH_REQ,
    eWNI_SME_TDLS_CHANNEL_SWITCH_RSP,
#endif
    //NOTE: If you are planning to add more mesages, please make sure that 
    //SIR_LIM_ITC_MSG_TYPES_BEGIN is moved appropriately. It is set as
    //SIR_LIM_MSG_TYPES_BEGIN+0xB0 = 12B0 (which means max of 176 messages and
    //eWNI_SME_TDLS_DEL_STA_RSP = 175.
    //Should fix above issue to enable TDLS_INTERNAL
    eWNI_SME_SET_BCN_FILTER_REQ,
    eWNI_SME_RESET_AP_CAPS_CHANGED,
#ifdef WLAN_FEATURE_11W
    eWNI_SME_UNPROT_MGMT_FRM_IND,
#endif
#ifdef WLAN_FEATURE_GTK_OFFLOAD
    eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP,
#endif // WLAN_FEATURE_GTK_OFFLOAD
    eWNI_SME_CANDIDATE_FOUND_IND, /*ROAM candidate indication from FW*/
    eWNI_SME_HANDOFF_REQ,/*upper layer requested handoff to driver in STA mode*/
    eWNI_SME_ROAM_SCAN_OFFLOAD_RSP,/*Fwd the LFR scan offload rsp from FW to SME*/
#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
    eWNI_SME_ROAM_SCAN_TRIGGER_RSP,
#endif
#ifdef FEATURE_WLAN_LPHB
    eWNI_SME_LPHB_IND,
#endif /* FEATURE_WLAN_LPHB */
#ifdef WLAN_FEATURE_RMC
    eWNI_SME_ENABLE_RMC_REQ,
    eWNI_SME_DISABLE_RMC_REQ,
    eWNI_SME_IBSS_PEER_INFO_RSP,
#endif /* WLAN_FEATURE_RMC */
    eWNI_SME_GET_TSM_STATS_REQ,
    eWNI_SME_GET_TSM_STATS_RSP,
    eWNI_SME_TSM_IE_IND,

#ifdef FEATURE_WLAN_CH_AVOID
   eWNI_SME_CH_AVOID_IND,
#endif /* FEATURE_WLAN_CH_AVOID */
    eWNI_SME_HT40_OBSS_SCAN_IND, /* START and UPDATE OBSS SCAN Indication*/
    eWNI_SME_HT40_STOP_OBSS_SCAN_IND, /* STOP OBSS SCAN indication */
#ifdef WLAN_FEATURE_AP_HT40_24G
    eWNI_SME_SET_HT_2040_MODE, /* HT 20/40 indication in SAP case for 2.4GHz*/
    eWNI_SME_2040_COEX_IND, /* HT20/40 Coex indication in SAP case for 2.4GHz*/
#endif
    eWNI_SME_MAC_SPOOF_ADDR_IND,
    eWNI_SME_ENCRYPT_MSG_RSP,
    eWNI_SME_UPDATE_MAX_RATE_IND,
    eWNI_SME_NAN_EVENT,
    eWNI_SME_SET_TDLS_2040_BSSCOEX_REQ,
    eWNI_SME_DEL_ALL_TDLS_PEERS,
    eWNI_SME_REGISTER_MGMT_FRAME_CB,
    eWNI_SME_CAP_TSF_REQ,
    eWNI_SME_GET_TSF_REQ,

#ifdef WLAN_FEATURE_LFR_MBB
    eWNI_SME_MBB_PRE_AUTH_REASSOC_REQ,
    eWNI_SME_MBB_PRE_AUTH_REASSOC_RSP,
#endif

    eWNI_SME_DEL_BA_SES_REQ,
    eWNI_SME_SET_CHAN_SW_IE_REQ,
    eWNI_SME_ECSA_IE_BEACON_COMP_IND,
    eWNI_SME_ECSA_CHAN_CHANGE_REQ,
    eWNI_SME_ECSA_CHAN_CHANGE_RSP,
    eWNI_SME_STA_DEL_BA_REQ,
    eWNI_SME_TRIGGER_SAE,
    eWNI_SME_SEND_MGMT_FRAME_TX,
    eWNI_SME_SEND_SAE_MSG,
#ifdef FEATURE_WLAN_SW_PTA
    eWNI_SME_SW_PTA_RESP,
    eWNI_SME_TEARDOWN_LINK_WITH_AP,
#endif
    eWNI_SME_MSG_TYPES_END
};

#define WNI_CFG_MSG_TYPES_BEGIN        0x1200

/*---------------------------------------------------------------------*/
/* CFG Module Definitions                                              */
/*---------------------------------------------------------------------*/


/*---------------------------------------------------------------------*/
/* CFG message definitions                                             */
/*---------------------------------------------------------------------*/
#define WNI_CFG_MSG_HDR_MASK    0xffff0000
#define WNI_CFG_MSG_LEN_MASK    0x0000ffff
#define WNI_CFG_MB_HDR_LEN      4
#define WNI_CFG_MAX_PARAM_NUM   32


/*---------------------------------------------------------------------*/
/* CFG to HDD message types                                            */
/*---------------------------------------------------------------------*/
#define WNI_CFG_PARAM_UPDATE_IND       (WNI_CFG_MSG_TYPES_BEGIN | 0x00)
#define WNI_CFG_DNLD_REQ               (WNI_CFG_MSG_TYPES_BEGIN | 0x01)
#define WNI_CFG_DNLD_CNF               (WNI_CFG_MSG_TYPES_BEGIN | 0x02)
#define WNI_CFG_GET_RSP                (WNI_CFG_MSG_TYPES_BEGIN | 0x03)
#define WNI_CFG_SET_CNF                (WNI_CFG_MSG_TYPES_BEGIN | 0x04)
#define WNI_CFG_GET_ATTRIB_RSP         (WNI_CFG_MSG_TYPES_BEGIN | 0x05)
#define WNI_CFG_ADD_GRP_ADDR_CNF       (WNI_CFG_MSG_TYPES_BEGIN | 0x06)
#define WNI_CFG_DEL_GRP_ADDR_CNF       (WNI_CFG_MSG_TYPES_BEGIN | 0x07)

#define ANI_CFG_GET_RADIO_STAT_RSP     (WNI_CFG_MSG_TYPES_BEGIN | 0x08)
#define ANI_CFG_GET_PER_STA_STAT_RSP   (WNI_CFG_MSG_TYPES_BEGIN | 0x09)
#define ANI_CFG_GET_AGG_STA_STAT_RSP   (WNI_CFG_MSG_TYPES_BEGIN | 0x0a)
#define ANI_CFG_CLEAR_STAT_RSP         (WNI_CFG_MSG_TYPES_BEGIN | 0x0b)


/*---------------------------------------------------------------------*/
/* CFG to HDD message paramter indices                                 */

/*   The followings are word indices starting from the message body    */

/*   WNI_CFG_xxxx_xxxx_xxxx:         index of parameter                */
/*                                                                     */
/*   WNI_CFG_xxxx_xxxx_NUM:          number of parameters in message   */
/*                                                                     */
/*   WNI_CFG_xxxx_xxxx_LEN:          byte length of message including  */
/*                                   MB header                         */
/*                                                                     */
/*   WNI_CFG_xxxx_xxxx_PARTIAL_LEN:  byte length of message including  */
/*                                   parameters and MB header but      */
/*                                   excluding variable data length    */
/*---------------------------------------------------------------------*/

// Parameter update indication
#define WNI_CFG_PARAM_UPDATE_IND_PID   0

#define WNI_CFG_PARAM_UPDATE_IND_NUM   1
#define WNI_CFG_PARAM_UPDATE_IND_LEN   (WNI_CFG_MB_HDR_LEN + \
                                       (WNI_CFG_PARAM_UPDATE_IND_NUM << 2))

// Configuration download request
#define WNI_CFG_DNLD_REQ_NUM           0
#define WNI_CFG_DNLD_REQ_LEN           WNI_CFG_MB_HDR_LEN

// Configuration download confirm
#define WNI_CFG_DNLD_CNF_RES           0

#define WNI_CFG_DNLD_CNF_NUM           1
#define WNI_CFG_DNLD_CNF_LEN           (WNI_CFG_MB_HDR_LEN + \
                                       (WNI_CFG_DNLD_CNF_NUM << 2))
// Get response
#define WNI_CFG_GET_RSP_RES            0
#define WNI_CFG_GET_RSP_PID            1
#define WNI_CFG_GET_RSP_PLEN           2

#define WNI_CFG_GET_RSP_NUM            3
#define WNI_CFG_GET_RSP_PARTIAL_LEN    (WNI_CFG_MB_HDR_LEN + \
                                       (WNI_CFG_GET_RSP_NUM << 2))
// Set confirm
#define WNI_CFG_SET_CNF_RES            0
#define WNI_CFG_SET_CNF_PID            1

#define WNI_CFG_SET_CNF_NUM            2
#define WNI_CFG_SET_CNF_LEN            (WNI_CFG_MB_HDR_LEN + \
                                       (WNI_CFG_SET_CNF_NUM << 2))
// Get attribute response
#define WNI_CFG_GET_ATTRIB_RSP_RES     0
#define WNI_CFG_GET_ATTRIB_RSP_PID     1
#define WNI_CFG_GET_ATTRIB_RSP_TYPE    2
#define WNI_CFG_GET_ATTRIB_RSP_PLEN    3
#define WNI_CFG_GET_ATTRIB_RSP_RW      4

#define WNI_CFG_GET_ATTRIB_RSP_NUM     5
#define WNI_CFG_GET_ATTRIB_RSP_LEN     (WNI_CFG_MB_HDR_LEN + \
                                       (WNI_CFG_GET_ATTRIB_RSP_NUM << 2))

// Add group address confirm
#define WNI_CFG_ADD_GRP_ADDR_CNF_RES   0

#define WNI_CFG_ADD_GRP_ADDR_CNF_NUM   1
#define WNI_CFG_ADD_GRP_ADDR_CNF_LEN   (WNI_CFG_MB_HDR_LEN + \
                                       (WNI_CFG_ADD_GRP_ADDR_CNF_NUM << 2))

// Delete group address confirm
#define WNI_CFG_DEL_GRP_ADDR_CNF_RES   0

#define WNI_CFG_DEL_GRP_ADDR_CNF_NUM   1
#define WNI_CFG_DEL_GRP_ADDR_CNF_LEN   (WNI_CFG_MB_HDR_LEN + \
                                       (WNI_CFG_DEL_GRP_ADDR_CNF_NUM <<2))


#define IS_CFG_MSG(msg) ((msg & 0xff00) == WNI_CFG_MSG_TYPES_BEGIN)

// Clear stats types.
#define ANI_CLEAR_ALL_STATS          0
#define ANI_CLEAR_RX_STATS           1
#define ANI_CLEAR_TX_STATS           2
#define ANI_CLEAR_PER_STA_STATS      3
#define ANI_CLEAR_AGGR_PER_STA_STATS 4
#define ANI_CLEAR_STAT_TYPES_END     5

/*---------------------------------------------------------------------*/
/* HDD to CFG message types                                            */
/*---------------------------------------------------------------------*/
#define WNI_CFG_DNLD_RSP               (WNI_CFG_MSG_TYPES_BEGIN | 0x80)
#define WNI_CFG_GET_REQ                (WNI_CFG_MSG_TYPES_BEGIN | 0x81)
#define WNI_CFG_SET_REQ                (WNI_CFG_MSG_TYPES_BEGIN | 0x82)
#define WNI_CFG_SET_REQ_NO_RSP         (WNI_CFG_MSG_TYPES_BEGIN | 0x83) //No RSP for this set

// Shall be removed after stats integration


/*---------------------------------------------------------------------*/
/* HDD to CFG message paramter indices                                 */
/*                                                                     */
/*   The followings are word indices starting from the message body    */
/*                                                                     */
/*   WNI_CFG_xxxx_xxxx_xxxx:         index of parameter                */
/*                                                                     */
/*   WNI_CFG_xxxx_xxxx_NUM:          number of parameters in message   */
/*                                                                     */
/*   WNI_CFG_xxxx_xxxx_LEN:          byte length of message including  */
/*                                   MB header                         */
/*                                                                     */
/*   WNI_CFG_xxxx_xxxx_PARTIAL_LEN:  byte length of message including  */
/*                                   parameters and MB header but      */
/*                                   excluding variable data length    */
/*---------------------------------------------------------------------*/

// Download response
#define WNI_CFG_DNLD_RSP_BIN_LEN       0

#define WNI_CFG_DNLD_RSP_NUM           1
#define WNI_CFG_DNLD_RSP_PARTIAL_LEN   (WNI_CFG_MB_HDR_LEN + \
                                       (WNI_CFG_DNLD_RSP_NUM << 2))

// Set parameter request
#define WNI_CFG_SET_REQ_PID            0
#define WNI_CFG_SET_REQ_PLEN           1

/*
// Get attribute request
//#define WNI_CFG_GET_ATTRIB_REQ_PID   0

//#define WNI_CFG_GET_ATTRIB_REQ_NUM     1
//#define WNI_CFG_GET_ATTRIB_REQ_LEN     (WNI_CFG_MB_HDR_LEN + \
                                       (WNI_CFG_GET_ATTRIB_REQ_NUM << 2))
// Add group address request
#define WNI_CFG_ADD_GRP_ADDR_REQ_MAC_ADDR    0

#define WNI_CFG_ADD_GRP_ADDR_REQ_NUM   1
#define WNI_CFG_ADD_GRP_ADDR_REQ_LEN   (WNI_CFG_MB_HDR_LEN + \
                                       (WNI_CFG_ADD_GRP_ADDR_REQ_NUM << 2))
// Delete group address request
#define WNI_CFG_DEL_GRP_ADDR_REQ_MAC_ADDR    0

#define WNI_CFG_DEL_GRP_ADDR_REQ_NUM   1
#define WNI_CFG_DEL_GRP_ADDR_REQ_LEN   (WNI_CFG_MB_HDR_LEN + \
                                       (WNI_CFG_DEL_GRP_ADDR_REQ_NUM << 2))
*/


/*---------------------------------------------------------------------*/
/* CFG return values                                                   */
/*---------------------------------------------------------------------*/
#define WNI_CFG_SUCCESS             1
#define WNI_CFG_NOT_READY           2
#define WNI_CFG_INVALID_PID         3
#define WNI_CFG_INVALID_LEN         4
#define WNI_CFG_RO_PARAM            5
#define WNI_CFG_WO_PARAM            6
#define WNI_CFG_INVALID_STAID       7
#define WNI_CFG_OTHER_ERROR         8
#define WNI_CFG_NEED_RESTART        9
#define WNI_CFG_NEED_RELOAD        10


/*---------------------------------------------------------------------*/
/* CFG definitions                                                     */
/*---------------------------------------------------------------------*/
#define WNI_CFG_TYPE_STR            0x0000000
#define WNI_CFG_TYPE_INT            0x0000001
#define WNI_CFG_HOST_RE             0x0000002
#define WNI_CFG_HOST_WE             0x0000004


// Shall be removed after integration of stats.
// Get statistic response
#define WNI_CFG_GET_STAT_RSP_RES       0
#define WNI_CFG_GET_STAT_RSP_PARAMID   1
#define WNI_CFG_GET_STAT_RSP_VALUE     2

#define WNI_CFG_GET_STAT_RSP_NUM       3
#define WNI_CFG_GET_STAT_RSP_LEN       (WNI_CFG_MB_HDR_LEN + \
                                        (WNI_CFG_GET_STAT_RSP_NUM <<2))
// Get per station statistic response
#define WNI_CFG_GET_PER_STA_STAT_RSP_RES                        0
#define WNI_CFG_GET_PER_STA_STAT_RSP_STAID                      1
#define WNI_CFG_GET_PER_STA_STAT_RSP_FIRST_PARAM                2

// Per STA statistic structure
typedef struct sAniCfgPerStaStatStruct
{
       unsigned long     sentAesBlksUcastHi;
       unsigned long     sentAesBlksUcastLo;

       unsigned long     recvAesBlksUcastHi;
       unsigned long     recvAesBlksUcastLo;

       unsigned long     aesFormatErrorUcastCnts;

       unsigned long     aesReplaysUcast;

       unsigned long     aesDecryptErrUcast;

       unsigned long     singleRetryPkts;

       unsigned long     failedTxPkts;

       unsigned long     ackTimeouts;

       unsigned long     multiRetryPkts;

       unsigned long     fragTxCntsHi;
       unsigned long     fragTxCntsLo;

       unsigned long     transmittedPktsHi;
       unsigned long     transmittedPktsLo;

       unsigned long     phyStatHi;
       unsigned long     phyStatLo;
} tCfgPerStaStatStruct, *tpAniCfgPerStaStatStruct;

#define WNI_CFG_GET_PER_STA_STAT_RSP_NUM                       23
#define WNI_CFG_GET_PER_STA_STAT_RSP_LEN    (WNI_CFG_MB_HDR_LEN + \
                                   (WNI_CFG_GET_PER_STA_STAT_RSP_NUM << 2))


// Shall be removed after integrating stats.
#define WNI_CFG_GET_STAT_RSP           (WNI_CFG_MSG_TYPES_BEGIN | 0x08)
#define WNI_CFG_GET_PER_STA_STAT_RSP   (WNI_CFG_MSG_TYPES_BEGIN | 0x09)
#define WNI_CFG_GET_AGG_STA_STAT_RSP   (WNI_CFG_MSG_TYPES_BEGIN | 0x0a)
#define WNI_CFG_GET_TX_RATE_CTR_RSP    (WNI_CFG_MSG_TYPES_BEGIN | 0x0b)

#define WNI_CFG_GET_AGG_STA_STAT_RSP_NUM    21
#define WNI_CFG_GET_AGG_STA_STAT_RSP_LEN    (WNI_CFG_MB_HDR_LEN + \
                                   (WNI_CFG_GET_AGG_STA_STAT_RSP_NUM << 2))
#define WNI_CFG_GET_AGG_STA_STAT_RSP_RES 0

  // Get TX rate based stats
#define WNI_CFG_GET_TX_RATE_CTR_RSP_RES                        0

typedef struct sAniCfgTxRateCtrs
{
// add the rate counters here
    unsigned long TxFrames_1Mbps;
    unsigned long TxFrames_2Mbps;
    unsigned long TxFrames_5_5Mbps;
    unsigned long TxFrames_6Mbps;
    unsigned long TxFrames_9Mbps;
    unsigned long TxFrames_11Mbps;
    unsigned long TxFrames_12Mbps;
    unsigned long TxFrames_18Mbps;
    unsigned long TxFrames_24Mbps;
    unsigned long TxFrames_36Mbps;
    unsigned long TxFrames_48Mbps;
    unsigned long TxFrames_54Mbps;
    unsigned long TxFrames_72Mbps;
    unsigned long TxFrames_96Mbps;
    unsigned long TxFrames_108Mbps;

} tAniCfgTxRateCtrs, *tpAniCfgTxRateCtrs;


#define WNI_CFG_GET_STAT_REQ           (WNI_CFG_MSG_TYPES_BEGIN | 0x86)
#define WNI_CFG_GET_PER_STA_STAT_REQ   (WNI_CFG_MSG_TYPES_BEGIN | 0x87)
#define WNI_CFG_GET_AGG_STA_STAT_REQ   (WNI_CFG_MSG_TYPES_BEGIN | 0x88)
#define WNI_CFG_GET_TX_RATE_CTR_REQ    (WNI_CFG_MSG_TYPES_BEGIN | 0x89)

// Get statistic request
#define WNI_CFG_GET_STAT_REQ_PARAMID   0

#define WNI_CFG_GET_STAT_REQ_NUM       1
#define WNI_CFG_GET_STAT_REQ_LEN       (WNI_CFG_MB_HDR_LEN + \
                                       (WNI_CFG_GET_STAT_REQ_NUM << 2))

  // Get per station statistic request
#define WNI_CFG_GET_PER_STA_STAT_REQ_STAID 0

#define WNI_CFG_GET_PER_STA_STAT_REQ_NUM   1
#define WNI_CFG_GET_PER_STA_STAT_REQ_LEN   (WNI_CFG_MB_HDR_LEN + \
                                   (WNI_CFG_GET_PER_STA_STAT_REQ_NUM << 2))




#define DYNAMIC_CFG_TYPE_SELECTED_REGISTRAR   (0)
#define DYNAMIC_CFG_TYPE_WPS_STATE            (1)

#endif /* __WNI_API_H */

