blob: d5bf3bc307b34e2d1fdbb2f55bdd5fd20063a0ad [file] [log] [blame]
/*
**************************************************************************
* Copyright (c) 2017-2021, The Linux Foundation. All rights reserved.
* 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.
**************************************************************************
*/
/**
* @file nss_wifili_if.h
* NSS TO HLOS interface definitions.
* NOTE: Here we will use wifili as a reference to
* the IPQ807x Wi-Fi object.
*/
#ifndef __NSS_WIFILI_H
#define __NSS_WIFILI_H
/**
* @addtogroup nss_wifili_subsystem
* @{
*/
#define NSS_WIFILI_MAX_SRNG_REG_GROUPS_MSG 2
/**< Maximum srng (ring) register groups. */
#define NSS_WIFILI_MAX_NUMBER_OF_PAGE_MSG 32
/**< Maximum number of pages allocated from host. */
#define NSS_WIFILI_MAX_TCL_DATA_RINGS_MSG 4
/**< Maximum number of Transmit Classifier data ring for NSS. */
#define NSS_WIFILI_MAX_REO_DATA_RINGS_MSG 4
/**< Maximum number of Rx reorder data ring for NSS. */
#define NSS_WIFILI_SOC_PER_PACKET_METADATA_OFFSET 4
/**< Metadata area for storing Rx statistics. */
#define NSS_WIFILI_MAX_TXDESC_POOLS_MSG 4
/**< Maximum number of Tx Descriptor software pools. */
#define NSS_WIFILI_MAX_TX_EXT_DESC_POOLS_MSG 4
/**< Maximum number of Tx Descriptor Extended software pools. */
#define NSS_WIFILI_MAX_SOC_NUM 3
/**< Maximum number of SoC devices. */
#define NSS_WIFILI_MAX_PDEV_NUM_MSG 3
/**< Maximum number of pdev devices. */
#define NSS_WIFILI_MAX_MCS 12
/**< Maximum Modulaton And Coding Scheme (MCS) count. */
#define NSS_WIFILI_MAX_MCS_11A 8
/**< Maximum MCS for 11a mode. */
#define NSS_WIFILI_MAX_MCS_11B 7
/**< Maximum MCS for 11b mode. */
#define NSS_WIFILI_MAX_MCS_11AC 10
/**< Maximum MCS for 11ac mode. */
#define NSS_WIFILI_MAX_MCS_11AX 10
/**< Maximum MCS for 11ax mode. */
#define NSS_WIFILI_SS_COUNT 8
/**< Maximum spatial streams count. */
#define NSS_WIFILI_SUPPORTED_BW 4
/**< Maximum number of bandwidth supported. */
#define NSS_WIFILI_REPT_MU_MIMO 1
#define NSS_WIFILI_REPT_MU_OFDMA_MIMO 3
#define NSS_WIFILI_MAX_RESERVED_TYPE 2
/**< Maximum reserved type. */
#define NSS_WIFILI_SOC_PER_PACKET_METADATA_SIZE 60
/**< Metadata area total size. */
#define NSS_WIFILI_MEC_PEER_ID 0xDEAD
/**< MEC (Multicast echo check) peer ID. */
#define NSS_WIFILI_DA_PEER_ID 0xDAAD
/**< Destination address peer ID. */
#define NSS_WIFILI_MIC_KEY_LEN 8
/**< MIC (Message integrity code) key length. */
#define NSS_WIFILI_TQM_RR_MAX 7
/**< Maximum transmit queue release reasons. */
#define NSS_WIFILI_HTT_STATUS_MAX 7
/**< Maximum HTT completion status. */
#define NSS_WIFILI_TQM_STATUS_MAX 9
/**< Maximum TQM completion status. */
#define NSS_WIFILI_REO_CODE_MAX 15
/**< Maximum Rx reorder error codes. */
#define NSS_WIFILI_DMA_CODE_MAX 14
/**< Maximum DMA error codes. */
#define NSS_WIFILI_MAX_TID 8
/**< Maximum TID values. */
#define NSS_WIFILI_DELAY_INDEX_MAX 10
/**< Maximum software enqueue delay buckets. */
#define NSS_WIFILI_MAX_NUMBER_OF_ADDTNL_SEG 64
/**< Maximum number of additional pages allocated from host. */
#define NSS_WIFILI_SOC_ATTACHED_MAX_PDEV_NUM 1
/**< Maximum number of physical devices on the external SoC. */
#define NSS_WIFILI_PEER_AST_FLOWQ_MAX 4
/**< Maximum number of flow queues. */
#define NSS_WIFILI_WBM_INTERNAL_ERR_MAX 5
/**< WBM internal maximum errors. */
/*
* Peer Size in Bytes
*/
#define NSS_WIFILI_PEER_SIZE 1600
/*
* Radio specific flags
*/
#define NSS_WIFILI_PDEV_FLAG_V3_STATS_ENABLED 0x00000008
/**< Flag to enable version 3 statistics. */
/**
* Peer message flags.
*/
#define NSS_WIFILI_PEER_MSG_DISABLE_4ADDR 0x01
#ifdef __KERNEL__ /* only kernel will use. */
/**
* Wireless Multimedia Extention Access Category to TID. @hideinitializer
*/
#define NSS_WIFILI_WME_AC_TO_TID(_ac) ( \
((_ac) == NSS_WIFILI_WME_AC_VO) ? 6 : \
(((_ac) == NSS_WIFILI_WME_AC_VI) ? 5 : \
(((_ac) == NSS_WIFILI_WME_AC_BK) ? 1 : \
0)))
/**
* Wireless TID to Wireless Extension Multimedia Access Category. @hideinitializer
*/
#define NSS_WIFILI_TID_TO_WME_AC(_tid) ( \
(((_tid) == 0) || ((_tid) == 3)) ? NSS_WIFILI_WME_AC_BE : \
((((_tid) == 1) || ((_tid) == 2)) ? NSS_WIFILI_WME_AC_BK : \
((((_tid) == 4) || ((_tid) == 5)) ? NSS_WIFILI_WME_AC_VI : \
NSS_WIFILI_WME_AC_VO)))
#endif /* __KERNEL */
/**
* nss_wifili_thread_scheme_id
* List of thread scheme IDs.
*/
enum nss_wifili_thread_scheme_id {
NSS_WIFILI_THREAD_SCHEME_ID_0, /**< High priority scheme index. */
NSS_WIFILI_THREAD_SCHEME_ID_1, /**< Low priority scheme index. */
NSS_WIFILI_THREAD_SCHEME_ID_2, /**< High priority scheme index. */
NSS_WIFILI_THREAD_SCHEME_ID_MAX /**< Maximum value of scheme index. */
};
/*
* nss_wifili_thread_scheme_priority
* List of wifili thread scheme priority.
*/
enum nss_wifili_thread_scheme_priority {
NSS_WIFILI_LOW_PRIORITY_SCHEME, /**< Low priority scheme. */
NSS_WIFILI_HIGH_PRIORITY_SCHEME, /**< High priority scheme. */
};
/**
* nss_wifili_wme_stream_classes
* WME stream classes.
*/
enum nss_wifili_wme_stream_classes {
NSS_WIFILI_WME_AC_BE, /**< Best effort. */
NSS_WIFILI_WME_AC_BK, /**< Background. */
NSS_WIFILI_WME_AC_VI, /**< Video. */
NSS_WIFILI_WME_AC_VO, /**< Voice. */
NSS_WIFILI_WME_AC_MAX /**< Maximum AC Value. */
};
/**
* nss_wifili_packet_type
* Different Packet Types.
*/
enum nss_wifili_packet_type {
NSS_WIFILI_DOT11_A, /**< 802.11a packet type. */
NSS_WIFILI_DOT11_B, /**< 802.11b packet type. */
NSS_WIFILI_DOT11_N, /**< 802.11n packet type. */
NSS_WIFILI_DOT11_AC, /**< 802.11ac packet type. */
NSS_WIFILI_DOT11_AX , /**< 802.11ax packet type. */
NSS_WIFILI_DOT11_MAX /**< Maximum 802.11 packet types. */
};
/*
* nss_wifili_decap_pkt_type
* Different Decapsulation packet types
*/
enum wifili_decap_pkt_type {
NSS_WIFILI_DECAP_TYPE_RAW, /**< Raw packet type. */
NSS_WIFILI_DECAP_TYPE_NATIVE_WIFI, /**< Native Wi-Fi packet type. */
NSS_WIFILI_DECAP_TYPE_ETHERNET, /**< Ethernet packet type. */
NSS_WIFILI_DECAP_TYPE_MAX, /**< Maximum packet type. */
};
/**
* nss_wifili_msg_types
* NSS wifili messages.
*/
enum nss_wifili_msg_types {
NSS_WIFILI_INIT_MSG,
NSS_WIFILI_SOC_RESET_MSG,
NSS_WIFILI_PDEV_INIT_MSG,
NSS_WIFILI_PDEV_DEINIT_MSG,
NSS_WIFILI_START_MSG,
NSS_WIFILI_STOP_MSG,
NSS_WIFILI_PEER_CREATE_MSG,
NSS_WIFILI_PEER_DELETE_MSG,
NSS_WIFILI_SEND_PEER_MEMORY_REQUEST_MSG,
NSS_WIFILI_PEER_FREELIST_APPEND_MSG,
NSS_WIFILI_STATS_MSG,
NSS_WIFILI_WDS_VENDOR_MSG,
NSS_WIFILI_PEER_STATS_MSG,
NSS_WIFILI_WDS_PEER_ADD_MSG,
NSS_WIFILI_WDS_PEER_DEL_MSG,
NSS_WIFILI_WDS_PEER_MAP_MSG,
NSS_WIFILI_WDS_ACTIVE_INFO_MSG,
NSS_WIFILI_STATS_CFG_MSG,
NSS_WIFILI_TID_REOQ_SETUP_MSG,
NSS_WIFILI_RADIO_CMD_MSG,
NSS_WIFILI_LINK_DESC_INFO_MSG,
NSS_WIFILI_PEER_SECURITY_TYPE_MSG,
NSS_WIFILI_PEER_NAWDS_ENABLE_MSG,
NSS_WIFILI_RADIO_BUF_CFG,
NSS_WIFILI_DBDC_REPEATER_SET_MSG,
NSS_DBDC_REPEATER_AST_FLUSH_MSG,
NSS_WIFILI_SET_HMMC_DSCP_OVERRIDE_MSG,
NSS_WIFILI_SET_HMMC_DSCP_TID_MSG,
NSS_WIFILI_PDEV_STATS_V3_TXRX_SYNC_MSG,
NSS_WIFILI_PDEV_STATS_V3_DELAY_SYNC_MSG,
NSS_WIFILI_ENABLE_V3_STATS_MSG,
NSS_WIFILI_WDS_PEER_UPDATE_MSG,
NSS_WIFILI_STATS_V2_CFG_MSG,
NSS_WIFILI_SOJOURN_STATS_MSG,
NSS_WIFILI_PEER_SET_VLAN_ID,
NSS_WIFILI_UPDATE_PDEV_LMAC_ID_MSG,
NSS_WIFILI_PEER_AST_FLOWID_MAP_MSG,
NSS_WIFILI_PEER_MEC_AGEOUT_MSG,
NSS_WIFILI_JITTER_STATS_MSG,
NSS_WIFILI_ISOLATION_MSG,
NSS_WIFILI_PEER_EXT_STATS_MSG,
NSS_WIFILI_CLR_STATS,
NSS_WIFILI_PEER_4ADDR_EVENT_MSG,
NSS_WIFILI_DBDC_REPEATER_LOOP_DETECTION_MSG,
NSS_WIFILI_PEER_UPDATE_AUTH_FLAG,
NSS_WIFILI_SEND_MESH_CAPABILITY_INFO,
NSS_WIFILI_PDEV_TX_CAPTURE_MSG,
NSS_WIFILI_PEER_TX_CAPTURE_MSG,
NSS_WIFILI_MAX_MSG
};
/**
* nss_wifili_error_types
* Wifili error message types for functions.
*/
enum nss_wifili_error_types {
NSS_WIFILI_EMSG_NONE,
/**< No error. */
NSS_WIFILI_EMSG_INIT_FAIL_IMPROPER_STATE,
/**< Device initialization failure due to improper state of device. */
NSS_WIFILI_EMSG_RINGS_INIT_FAIL,
/**< Device ring initialization failure. */
NSS_WIFILI_EMSG_PDEV_INIT_IMPROPER_STATE_FAIL,
/**< Radio initialization failure due to improper state of device. */
NSS_WIFILI_EMSG_PDEV_INIT_INVALID_RADIOID_FAIL,
/**< Radio initialization failed due to invalid radio ID. */
WIFILI_EMSG_PDEV_INIT_INVALID_TARGETPDEVID_FAIL,
/**< Radio initialization failed due to invalid target physical device ID. */
NSS_WIFILI_EMSG_PDEV_TX_IRQ_ALLOC_FAIL,
/**< IRQ line allocation for radio transmission failed. */
NSS_WIFILI_EMSG_PDEV_RESET_INVALID_RADIOID_FAIL,
/**< Radio reset failed due to invalid radio ID. */
NSS_WIFILI_EMSG_PDEV_RESET_PDEV_NULL_FAIL,
/**< Radio reset failed due to NULL physical device. */
NSS_WIFILI_EMSG_PDEV_RESET_IMPROPER_STATE_FAIL,
/**< Radio reset failed due to improper state of pdev. */
NSS_WIFILI_EMSG_START_IMPROPER_STATE_FAIL,
/**< Device start fail due to improper state */
NSS_WIFILI_EMSG_PEER_CREATE_FAIL,
/**< Peer creation failed. */
NSS_WIFILI_EMSG_PEER_DELETE_FAIL,
/**< Peer deletion failed. */
NSS_WIFILI_EMSG_HASHMEM_INIT_FAIL,
/**< Peer hash memory allocation failed. */
NSS_WIFILI_EMSG_PEER_FREELIST_APPEND_FAIL,
/**< Appending peer to freelist failed. */
NSS_WIFILI_EMSG_PEER_CREATE_INVALID_VDEVID_FAIL,
/**< Peer creation failure due to invalid virtual device ID. */
NSS_WIFILI_EMSG_PEER_CREATE_INVALID_PEER_ID_FAIL,
/**< Peer creation failure due to invalid peer ID. */
NSS_WIFILI_EMSG_PEER_CREATE_VDEV_NULL_FAIL,
/**< Peer creation failure due to NULL virtual device. */
NSS_WIFILI_EMSG_PEER_CREATE_PDEV_NULL_FAIL,
/**< Peer creation failure due to NULL physical device. */
NSS_WIFILI_EMSG_PEER_CREATE_ALLOC_FAIL,
/**< Peer creation failure due to memory allocation failure. */
NSS_WIFILI_EMSG_PEER_DELETE_VAPID_INVALID_FAIL,
/**< Peer deletion failure due to invalid virtual device ID. */
NSS_WIFILI_EMSG_PEER_DELETE_INVALID_PEERID_FAIL,
/**< Peer deletion failed due to invalid peer ID. */
NSS_WIFILI_EMSG_PEER_DELETE_VDEV_NULL_FAIL,
/**< Peer deletion failure due to NULL virtual device. */
NSS_WIFILI_EMSG_PEER_DELETE_PDEV_NULL_FAIL,
/**< Peer deletion failure due to NULL physical device. */
NSS_WIFILI_EMSG_PEER_DELETE_PEER_NULL_FAIL,
/**< Peer deletion failure due to NULL peer. */
NSS_WIFILI_EMSG_PEER_DELETE_PEER_CORRUPTED_FAIL,
/**< Peer creation failure due to corrupted peer. */
NSS_WIFILI_EMSG_PEER_DUPLICATE_AST_INDEX_PEER_ID_FAIL,
/**< AST index provided is duplicate. */
NSS_WIFILI_EMSG_GROUP0_TIMER_ALLOC_FAIL,
/**< Timer allocation failure. */
NSS_WIFILI_EMSG_INSUFFICIENT_WT_FAIL,
/**< Insufficient worker thread error. */
NSS_WIFILI_EMSG_INVALID_NUM_TCL_RING_FAIL,
/**< Invalid number of Transmit Classifier rings provided in initialization message. */
NSS_WIFILI_EMSG_INVALID_NUM_REO_DST_RING_FAIL,
/**< Invalid number of Rx reorder destination ring in initialization message. */
NSS_WIFILI_EMSG_HAL_SRNG_SOC_ALLOC_FAIL,
/**< Srng SoC memory allocation failure. */
NSS_WIFILI_EMSG_HAL_SRNG_INVALID_RING_INFO_FAIL,
/**< Device ring information is invalid. */
NSS_WIFILI_EMSG_HAL_SRNG_TCL_ALLOC_FAIL,
/**< Transmit Classifier srng ring allocation failure. */
NSS_WIFILI_EMSG_HAL_SRNG_TXCOMP_ALLOC_FAIL,
/**< Txcomp srng ring allocation failure. */
NSS_WIFILI_EMSG_HAL_SRNG_REODST_ALLOC_FAIL,
/**< Rx reorder destination srng ring allocation failure. */
NSS_WIFILI_EMSG_HAL_SRNG_REOREINJECT_ALLOC_FAIL,
/**< Rx reorder reinject srng ring allocation failure. */
NSS_WIFILI_EMSG_HAL_SRNG_RXRELEASE_ALLOC_FAIL,
/**< Rx release srng ring allocation failure. */
NSS_WIFILI_EMSG_HAL_SRNG_RXEXCP_ALLOC_FAIL,
/**< Rx exception srng ring allocation failure. */
NSS_WIFILI_EMSG_HAL_TX_MEMALLOC_FAIL,
/**< Tx HAL (hardware abstraction layer) srng ring allocation failure. */
NSS_WIFILI_EMSG_HAL_TX_INVLID_POOL_NUM_FAIL,
/**< Invalid pool number in initialization message. */
NSS_WIFILI_EMSG_HAL_TX_INVALID_PAGE_NUM_FAIL,
/**< Invalid page numner in initialization message. */
NSS_WIFILI_EMSG_HAL_TX_DESC_MEM_ALLOC_FAIL,
/**< Tx descriptor memory allocation failure. */
NSS_WIFILI_EMSG_HAL_RX_MEMALLOC_FAIL,
/**< Rx memory allocation failure. */
NSS_WIFILI_EMSG_PDEV_RXDMA_RING_ALLOC_FAIL,
/**< Rx DMA ring allocation failed. */
NSS_WIFILI_EMSG_NAWDSEN_PEERID_INVALID,
/**< Peer NAWDS enable failure due to invalid peer ID. */
NSS_WIFILI_EMSG_NAWDSEN_PEER_NULL,
/**< Peer NAWDS enable failure due to peer being NULL. */
NSS_WIFILI_EMSG_NAWDSEN_PEER_CORRUPTED,
/**< Peer NAWDS enable failure due to corrupted peer. */
NSS_WIFILI_EMSG_WDS_PEER_CFG_FAIL,
/**< WDS peer configuration failure. */
NSS_WIFILI_EMSG_RESET_NO_STOP,
/**< Reset issued without stopping the device. */
NSS_WIFILI_EMSG_HAL_SRNG_INVALID_RING_BASE_FAIL,
/**< Ring base address is invalid. */
NSS_WIFILI_EMSG_PDEV_RX_INIT_FAIL,
/**< Pdev Rx initialization failure. */
NSS_WIFILI_EMESG_AST_ADD_FAIL,
/**< AST entry addition failure for connected peer. */
NSS_WIFILI_EMESG_AST_REMOVE_FAIL,
/**< AST entry removal failure for connected peer. */
NSS_WIFILI_EMESG_WDS_ADD_FAIL,
/**< WDS peer AST entry addition failure. */
NSS_WIFILI_EMESG_WDS_REMOVE_FAIL,
/**< WDS peer AST entry removal failure. */
NSS_WIFILI_EMESG_WDS_MAP_FAIL,
/**< WDS peer AST entry hardware index mapping failure. */
NSS_WIFILI_EMSG_WDS_INVALID_PEERID_FAIL,
/**< Invalid peer id passed in WDS messages. */
NSS_WIFILI_EMSG_WDS_DUPLICATE_AST_INDEX_PEER_ID_FAIL,
/**< AST entry index is already filled. */
NSS_WIFILI_EMSG_INVALID_RADIO_CMD,
/**< Radio command is invalid. */
NSS_WIFILI_EMSG_INVALID_RADIO_IFNUM,
/**< Radio interface number is invalid. */
NSS_WIFILI_EMSG_PEER_SECURITY_PEER_NULL_FAIL,
/**< Security message failed as peer is NULL for a peer ID. */
NSS_WIFILI_EMSG_PEER_SECURITY_PEER_CORRUPTED_FAIL,
/**< Security message failed as peer is corrupted. */
NSS_WIFILI_EMSG_RADIO_INVALID_BUF_CFG,
/**< Buffer configuration message failed as invalid range value is provided. */
NSS_WIFILI_EMSG_INIT_FAIL_INVALID_TARGET,
/**< Invalid target SoC type from host. */
NSS_WIFILI_EMSG_PDEV_INIT_FAIL_INVALID_LMAC_ID,
/**< Invalid lower MAC ID from host. */
NSS_WIFILI_EMSG_STATE_PDEV_NOT_INITIALIZED,
/**< Configured message issued when radio is not initialized. */
NSS_WIFILI_EMESG_RX_TLV_INVALID,
/**< Invalid TLV length. */
NSS_WIFILI_EMESG_RX_BUF_LEN_INVALID,
/**< Invalid Rx buffer length. */
NSS_WIFILI_EMSG_TX_CAPTURE_MODE_UPDATE_FAIL,
/**< Tx capture mode update failure. */
NSS_WIFILI_EMSG_UNKNOWN
/**< Unknown error message. */
};
/**
* nss_wifili_soc_extended_data_types
* Enumeration of extended data type to host.
*/
enum nss_wifili_soc_extended_data_types {
NSS_WIFILI_SOC_EXT_DATA_PKT_TYPE_NONE, /**< Packet type is none. */
NSS_WIFILI_SOC_EXT_DATA_PKT_MSDU_LINK_DESC, /**< Packet type is MSDU link descriptor. */
NSS_WIFILI_SOC_EXT_DATA_PKT_INVALID_PEER, /**< Packet type is invalid peer. */
NSS_WIFILI_SOC_EXT_DATA_PKT_MIC_ERROR, /**< Packet received with MIC error. */
NSS_WIFILI_SOC_EXT_DATA_PKT_2K_JUMP_ERROR, /**< Packet received with 2K jump in sequence number. */
NSS_WIFILI_SOC_EXT_DATA_PKT_WIFI_PARSE_ERROR, /**< Packet received with Wi-Fi parse error. */
NSS_WIFILI_SOC_EXT_DATA_PKT_TYPE_MAX /**< Maximum extended data types. */
};
/**
* nss_wifili_radio_cmd
* Wi-Fi radio commands for wifili.
*/
enum nss_wifili_radio_cmd {
NSS_WIFILI_RADIO_TX_CAPTURE_CMD, /**< Enable Tx capture. */
NSS_WIFILI_SET_PRIMARY_RADIO, /**< Set current radio as primary. */
NSS_WIFILI_SET_ALWAYS_PRIMARY, /**< Set always primary flag. */
NSS_WIFILI_SET_FORCE_CLIENT_MCAST_TRAFFIC, /**< Flag to force multicast traffic for a radio. */
NSS_WIFILI_SET_DROP_SECONDARY_MCAST, /**< Flag to drop multicast traffic on secondary radio. */
NSS_WIFILI_SET_DBDC_FASTLANE, /**< Flag to set DBDC fast-lane mode. */
NSS_WIFILI_SET_DBDC_NOBACKHAUL_RADIO, /**< Flag to set DBDC to no backhaul radio. */
NSS_WIFILI_RADIO_MAX_CMD /**< Maximum radio command index. */
};
/*
* WARNING: There is a 1:1 mapping between values of enum nss_wifili_stats_txrx and corresponding
* statistics string array in nss_stats.c.
*/
/**
* nss_wifili_stats_txrx
* Wifili Tx or Rx statistics.
*/
enum nss_wifili_stats_txrx {
NSS_WIFILI_STATS_RX_MSDU_ERROR,
/**< Number of Rx packets received from ring with MSDU error. */
NSS_WIFILI_STATS_RX_INV_PEER_RCV,
/**< Number of Rx packets with invalid peer ID. */
NSS_WIFILI_STATS_RX_WDS_SRCPORT_EXCEPTION,
/**< Number of Rx packets exceptioned to host because of source port learn fail. */
NSS_WIFILI_STATS_RX_WDS_SRCPORT_EXCEPTION_FAIL,
/**< Number of Rx source port learn fail packets failed to get enqueued to host. */
NSS_WIFILI_STATS_RX_DELIVERD,
/**< Number of packets wifili has given to next node. */
NSS_WIFILI_STATS_RX_DELIVER_DROPPED,
/**< Number of packets which wifili failed to enqueue to next node. */
NSS_WIFILI_STATS_RX_INTRA_BSS_UCAST,
/**< Number of packets that wifili sent for intra-BSS unicast packet. */
NSS_WIFILI_STATS_RX_INTRA_BSS_UCAST_FAIL,
/**< Number of packets that wifili sent for intra-BSS unicast packet failed. */
NSS_WIFILI_STATS_RX_INTRA_BSS_MCAST,
/**< Number of packets that wifili sent for intra-BSS multicast packet. */
NSS_WIFILI_STATS_RX_INTRA_BSS_MCAST_FAIL,
/**< Number of packets that wifili sent for intra-BSS multicast packet failed. */
NSS_WIFILI_STATS_RX_SG_RCV_SEND,
/**< Number of packets scatter-gather sent. */
NSS_WIFILI_STATS_RX_SG_RCV_FAIL,
/**< Number of packets scatter-gather received failure. */
NSS_STATS_WIFILI_RX_MCAST_ECHO,
/**< Number of multicast echo packets received. */
NSS_STATS_WIFILI_RX_INV_TID,
/**< Number of invalid TID. */
/*
* TODO: Move per TID based
*/
NSS_WIFILI_STATS_RX_FRAG_INV_SC,
/**< Number of fragments with invalid sequence control. */
NSS_WIFILI_STATS_RX_FRAG_INV_FC,
/**< Number of fragments with invalid frame control. */
NSS_WIFILI_STATS_RX_FRAG_NON_FRAG,
/**< Number of non-fragments received in fragments. */
NSS_WIFILI_STATS_RX_FRAG_RETRY,
/**< Number of retries for fragments. */
NSS_WIFILI_STATS_RX_FRAG_OOO,
/**< Number of out-of-order fragments. */
NSS_WIFILI_STATS_RX_FRAG_OOO_SEQ,
/**< Number of out-of-order sequence. */
NSS_WIFILI_STATS_RX_FRAG_ALL_FRAG_RCV,
/**< Number of times all fragments for a sequence has been received. */
NSS_WIFILI_STATS_RX_FRAG_DELIVER,
/**< Number of fragments delivered to host. */
NSS_WIFILI_STATS_TX_ENQUEUE,
/**< Number of packets that got enqueued to wifili. */
NSS_WIFILI_STATS_TX_ENQUEUE_DROP,
/**< Number of packets that dropped during enqueue to wifili. */
NSS_WIFILI_STATS_TX_DEQUEUE,
/**< Number of packets that are dequeued by wifili. */
NSS_WIFILI_STATS_TX_HW_ENQUEUE_FAIL,
/**< Number of Rx packets that NSS Wi-Fi offload path could successfully process. */
NSS_WIFILI_STATS_TX_SENT_COUNT,
/**< Number of Tx packets sent to hardware. */
NSS_WIFILI_STATS_TXRX_MAX,
/**< Number of maximum Tx or Rx statistics. */
};
/*
* WARNING: There is a 1:1 mapping between values of enum nss_wifili_stats_tcl and corresponding
* statistics string array in nss_stats.c.
*/
/**
* nss_wifili_stats_tcl
* Wifili transmit classifier statistics.
*/
enum nss_wifili_stats_tcl {
NSS_WIFILI_STATS_TCL_NO_HW_DESC, /**< Number of transmit classifier hardware descriptor. */
NSS_WIFILI_STATS_TCL_RING_FULL, /**< Number of times transmit classifier ring was full. */
NSS_WIFILI_STATS_TCL_RING_SENT, /**< Number of times transmit classifier descriptor sent. */
NSS_WIFILI_STATS_TCL_MAX, /**< Number of maximum transmit classifier statistics. */
};
/*
* WARNING: There is a 1:1 mapping between values of enum nss_wifili_stats_tx_comp and corresponding
* statistics string array in nss_stats.c.
*/
/**
* nss_wifili_stats_tx_comp
* Wifili Tx completion statistics.
*/
enum nss_wifili_stats_tx_comp {
NSS_WIFILI_STATS_TX_DESC_FREE_INV_BUFSRC, /**< Number of invalid buffer source packets. */
NSS_WIFILI_STATS_TX_DESC_FREE_INV_COOKIE, /**< Number of invalid cookie packets. */
NSS_WIFILI_STATS_TX_DESC_FREE_HW_RING_EMPTY, /**< Number of times hardware ring empty found. */
NSS_WIFILI_STATS_TX_DESC_FREE_REAPED, /**< Number of Tx packets that are reaped out of the Tx completion ring. */
NSS_WIFILI_STATS_TX_CAPTURE_ENQUEUE, /**< Number of Tx packets enqueued to host. */
NSS_WIFILI_STATS_TX_CAPTURE_ENQUEUE_FAIL, /**< Number of Tx packets failed to enqueue to host. */
NSS_WIFILI_STATS_TX_DESC_FREE_MAX, /**< Number of Tx completion statistics. */
};
/*
* WARNING: There is a 1:1 mapping between values of enum nss_wifili_stats_reo and corresponding
* statistics string array in nss_stats.c.
*/
/**
* nss_wifili_stats_reo
* Wifili Rx reorder statistics.
*/
enum nss_wifili_stats_reo {
NSS_WIFILI_STATS_REO_ERROR, /**< Number of reorder error. */
NSS_WIFILI_STATS_REO_REAPED, /**< Number of reorder reaped. */
NSS_WIFILI_STATS_REO_INV_COOKIE, /**< Number of invalid cookie. */
NSS_WIFILI_STATS_REO_FRAG_RCV, /**< Number of fragmented packets received. */
NSS_WIFILI_STATS_REO_MAX, /**< Number of reorder statistics. */
};
/*
* WARNING: There is a 1:1 mapping between values of enum nss_wifili_stats_txsw_pool and corresponding
* statistics string array in nss_stats.c.
*/
/**
* nss_wifili_stats_txsw_pool
* Wifili Tx descriptor statistics.
*/
enum nss_wifili_stats_txsw_pool {
NSS_WIFILI_STATS_TX_DESC_IN_USE, /**< Number of Tx packets that are currently in flight. */
NSS_WIFILI_STATS_TX_DESC_ALLOC_FAIL, /**< Number of Tx software descriptor allocation failures. */
NSS_WIFILI_STATS_TX_DESC_ALREADY_ALLOCATED, /**< Number of Tx software descriptor already allocated. */
NSS_WIFILI_STATS_TX_DESC_INVALID_FREE, /**< Number of Tx software descriptor invalid free. */
NSS_WIFILI_STATS_TX_DESC_FREE_SRC_FW, /**< Number of Tx descriptor for which release source is firmware. */
NSS_WIFILI_STATS_TX_DESC_FREE_COMPLETION, /**< Number of Tx descriptor completion. */
NSS_WIFILI_STATS_TX_DESC_NO_PB, /**< Number of Tx descriptor pbuf is NULL. */
NSS_WIFILI_STATS_TX_QUEUELIMIT_DROP, /**< Number of Tx dropped because of queue limit. */
NSS_WIFILI_STATS_TX_DESC_MAX, /**< Number of Tx descriptor statistics. */
};
/*
* WARNING: There is a 1:1 mapping between values of enum nss_wifili_stats_ext_txsw_pool and corresponding
* statistics string array in nss_stats.c
*/
/**
* nss_wifili_stats_ext_txsw_pool
* Wifili Rx extended descriptor statistics.
*/
enum nss_wifili_stats_ext_txsw_pool {
NSS_WIFILI_STATS_EXT_TX_DESC_IN_USE, /**< Number of extended Tx packets that are currently in flight. */
NSS_WIFILI_STATS_EXT_TX_DESC_ALLOC_FAIL, /**< Number of extended Tx software descriptor allocation failures. */
NSS_WIFILI_STATS_EXT_TX_DESC_ALREADY_ALLOCATED, /**< Number of extended Tx software descriptor already allocated. */
NSS_WIFILI_STATS_EXT_TX_DESC_INVALID_FREE, /**< Number of extended Tx software descriptor invalid free. */
NSS_WIFILI_STATS_EXT_TX_DESC_MAX, /**< Number of extended Tx descriptor statistics. */
};
/*
* WARNING: There is a 1:1 mapping between values of enum nss_wifili_stats_rxdma_pool and corresponding
* statistics string array in nss_stats.c
*/
/**
* nss_wifili_stats_rxdma_pool
* Wifili Rx descriptor statistics.
*/
enum nss_wifili_stats_rxdma_pool {
NSS_WIFILI_STATS_RX_DESC_NO_PB, /**< Number of Rx descriptors that have no pbufs. */
NSS_WIFILI_STATS_RX_DESC_ALLOC_FAIL, /**< Number of Rx descriptor allocation failures. */
NSS_WIFILI_STATS_RX_DESC_IN_USE, /**< Number of Rx descriptor allocations in use. */
NSS_WIFILI_STATS_RX_DESC_MAX, /**< Maximum number of Rx descriptor statistics. */
};
/*
* WARNING: There is a 1:1 mapping between values of enum nss_wifili_stats_rxdma_ring and corresponding
* statistics string array in nss_stats.c.
*/
/**
* nss_wifili_stats_rxdma_ring
* Wifili Rx DMA(Direct Memory Access) ring statistics.
*/
enum nss_wifili_stats_rxdma_ring {
NSS_WIFILI_STATS_RXDMA_DESC_UNAVAILABLE, /**< Number of Rx DMA descriptor unavailable. */
NSS_WIFILI_STATS_RXDMA_BUF_REPLENISHED, /**< Number of Rx DMA buffer replenished. */
NSS_WIFILI_STATS_RXDMA_DESC_MAX, /**< Number of Rx DMA descriptor statistics. */
};
/*
* WARNING: There is a 1:1 mapping between values of enum nss_wifili_stats_wbm and corresponding
* statistics string array in nss_stats.c.
*/
/**
* nss_wifili_stats_wbm
* Wifili WBM(Wireless Buffer Manager) ring statistics.
*/
enum nss_wifili_stats_wbm {
NSS_WIFILI_STATS_WBM_IE_LOCAL_ALLOC_FAIL, /**< Number of Wireless Buffer Manager internal local allocation failures. */
NSS_WIFILI_STATS_WBM_SRC_DMA, /**< Number of receive invalid source DMA. */
NSS_WIFILI_STATS_WBM_SRC_DMA_CODE_INV, /**< Number of receive invalid source DMA. */
NSS_WIFILI_STATS_WBM_SRC_REO, /**< Number of receive invalid source reorder. */
NSS_WIFILI_STATS_WBM_SRC_REO_CODE_NULLQ, /**< Number of receive invalid reorder error with NULL queue. */
NSS_WIFILI_STATS_WBM_SRC_REO_CODE_INV, /**< Number of receive invalid reorder code invalid. */
NSS_WIFILI_STATS_WBM_SRC_INV, /**< Number of receive invalid source invalid. */
NSS_WIFILI_STATS_WBM_MAX, /**< Number of receive Wireless Buffer Manager statistics. */
};
/**
* nss_wifili_stats
* NSS wifili statistics.
*/
struct nss_wifili_stats {
uint64_t stats_txrx[NSS_WIFILI_MAX_PDEV_NUM_MSG][NSS_WIFILI_STATS_TXRX_MAX];
/**< Number of Tx or Rx statistics. */
uint64_t stats_tcl_ring[NSS_WIFILI_MAX_TCL_DATA_RINGS_MSG][NSS_WIFILI_STATS_TCL_MAX];
/**< TCL statistics for each ring. */
uint64_t stats_tx_comp[NSS_WIFILI_MAX_TCL_DATA_RINGS_MSG][NSS_WIFILI_STATS_TX_DESC_FREE_MAX];
/**< Tx completion ring statistics. */
uint64_t stats_tx_desc[NSS_WIFILI_MAX_TXDESC_POOLS_MSG][NSS_WIFILI_STATS_TX_DESC_MAX];
/**< Tx descriptor pool statistics. */
uint64_t stats_ext_tx_desc[NSS_WIFILI_MAX_TX_EXT_DESC_POOLS_MSG][NSS_WIFILI_STATS_EXT_TX_DESC_MAX];
/**< Tx extended descriptor pool statistics. */
uint64_t stats_reo[NSS_WIFILI_MAX_REO_DATA_RINGS_MSG][NSS_WIFILI_STATS_REO_MAX];
/**< Rx reorder ring statistics. */
uint64_t stats_rx_desc[NSS_WIFILI_MAX_PDEV_NUM_MSG][NSS_WIFILI_STATS_RX_DESC_MAX];
/**< Rx software pool statistics. */
uint64_t stats_rxdma[NSS_WIFILI_MAX_PDEV_NUM_MSG][NSS_WIFILI_STATS_RXDMA_DESC_MAX];
/**< Rx DMA ring statistics. */
uint64_t stats_wbm[NSS_WIFILI_STATS_WBM_MAX];
/**< Wireless Buffer Manager error ring statistics. */
};
/*
* NSS wifili soc stats
*/
struct nss_wifili_soc_stats {
uint32_t soc_maxpdev; /**< Maximum number of radios per SoC. */
struct nss_wifili_stats stats_wifili;
/**< Per-SoC statistics. */
};
/**
* nss_wifili_stats_notification
* Data for sending wifili statistics.
*/
struct nss_wifili_stats_notification {
uint32_t core_id; /**< Core ID. */
uint32_t if_num; /**< Interface number for this wifili. */
struct nss_wifili_stats stats; /**< Wifili statistics. */
};
#ifdef __KERNEL__ /* only kernel will use. */
/**
* nss_wifili_hal_srng_info
* Wifili HAL srng information.
*/
struct nss_wifili_hal_srng_info{
uint8_t ring_id;
/**< Ring ID. */
uint8_t mac_id;
/**< Pdev ID. */
uint8_t resv[2];
uint32_t ring_base_paddr;
/**< Physical base address of the ring. */
uint32_t num_entries;
/**< Number of entries in ring. */
uint32_t flags; /**< Miscellaneous flags. */
uint32_t ring_dir;
/**< Ring direction: source or destination. */
uint32_t entry_size;
/**< Ring entry size. */
uint32_t low_threshold;
/**< Low threshold – in number of ring entries (valid for source rings only). */
uint32_t hwreg_base[NSS_WIFILI_MAX_SRNG_REG_GROUPS_MSG];
/**< Hardware ring base address. */
};
/**
* nss_wifili_hal_srng_soc_msg
* Wifili hal srng message.
*/
struct nss_wifili_hal_srng_soc_msg {
uint32_t dev_base_addr;
/**< Base address of WLAN device. */
uint32_t shadow_rdptr_mem_addr;
/**< Shadow read pointer address. */
uint32_t shadow_wrptr_mem_addr;
/**< Shadow write pointer address. */
uint32_t lmac_rings_start_id;
/**< Start ID of LMAC rings. */
};
/**
* struct wifili_tx_desc_addtnl_mem_msg
* Wifili additional host memory message for increeased descriptors
*/
struct nss_wifili_tx_desc_addtnl_mem_msg {
uint32_t num_addtnl_addr;
/**< Number of additional memory pages provided. */
uint32_t addtnl_memory_addr[NSS_WIFILI_MAX_NUMBER_OF_ADDTNL_SEG];
/**< Physical memory addresse of each additional page. */
uint32_t addtnl_memory_size[NSS_WIFILI_MAX_NUMBER_OF_ADDTNL_SEG];
/**< Size of each additional page. */
};
/**
* nss_wifili_tx_desc_init_msg
* Wifili software descriptor pool initialization message.
*/
struct nss_wifili_tx_desc_init_msg {
uint32_t num_tx_desc;
/**< Count of the software descriptors. */
uint32_t num_tx_desc_ext;
/**< Count of software extented descriptors. */
uint32_t num_pool;
/**< Number of descriptor pools. */
uint32_t memory_addr[NSS_WIFILI_MAX_NUMBER_OF_PAGE_MSG];
/**< Memory start address of each page. */
uint32_t memory_size[NSS_WIFILI_MAX_NUMBER_OF_PAGE_MSG];
/**< Memory size. */
uint32_t num_memaddr;
/**< Number of memory address. */
uint32_t ext_desc_page_num;
/**< Extended descriptor page number. */
uint32_t num_tx_desc_2;
/**< Count of the software descriptors for second radio. */
uint32_t num_tx_desc_ext_2;
/**< Count of software extended descriptors for second radio. */
uint32_t num_tx_desc_3;
/**< Count of the software descriptors for third radio. */
uint32_t num_tx_desc_ext_3;
/**< Count of software extended descriptors for third radio. */
uint32_t num_tx_device_limit;
/**< Count of software Tx descriptors for the device. */
};
/**
* nss_wifili_rx_init_param
* Rx initialization parameters.
*/
struct nss_wifili_rx_init_param {
uint16_t tlv_size; /**< Size of Rx TLV structure. */
uint16_t rx_buf_len; /**< Rx buffer length programmed to hardware. */
};
/**
* nss_wifili_init_msg
* Wifili SoC initialization message.
*/
struct nss_wifili_init_msg {
struct nss_wifili_hal_srng_soc_msg hssm;
uint8_t num_tcl_data_rings;
/**< Number of Transmit Classifier data rings. */
uint8_t num_reo_dest_rings;
/**< Number of Rx reorder rings. */
uint8_t flags;
/**< Flags for SoC initialization */
uint8_t soc_mem_profile;
/**< SoC memory profile (256M/512M/1G). */
struct nss_wifili_hal_srng_info tcl_ring_info[NSS_WIFILI_MAX_TCL_DATA_RINGS_MSG];
/**< Transmit Classifier data ring configuration information. */
struct nss_wifili_hal_srng_info tx_comp_ring[NSS_WIFILI_MAX_TCL_DATA_RINGS_MSG];
/**< Tx completion ring configuration information. */
struct nss_wifili_hal_srng_info reo_dest_ring[NSS_WIFILI_MAX_REO_DATA_RINGS_MSG];
/**< Rx reorder destination ring configuration information. */
struct nss_wifili_hal_srng_info reo_exception_ring;
/**< Rx reorder exception ring configuration information. */
struct nss_wifili_hal_srng_info rx_rel_ring;
/**< Wireless Buffer Manager release ring configuration information. */
struct nss_wifili_hal_srng_info reo_reinject_ring;
/**< Reinject ring configuration information. */
struct nss_wifili_tx_desc_init_msg wtdim;
/**< Tx descriptor initialization message. */
uint32_t target_type;
/**< Target type based on SoC. */
struct nss_wifili_rx_init_param wrip;
/**< Rx parameters to initialize Rx context. */
struct nss_wifili_tx_desc_addtnl_mem_msg wtdam;
/**< Tx descriptor additional memory message. */
uint32_t tx_sw_internode_queue_size;
/**< Tx software internode queue size. */
};
/**
* nss_wifili_pdev_deinit_msg
* Wifili pdev deinit message.
*/
struct nss_wifili_pdev_deinit_msg {
uint32_t ifnum; /**< NSS interface number of pdev. */
};
/**
* nss_wifili_pdev_init_msg
* Wifili pdev initialization message.
*/
struct nss_wifili_pdev_init_msg {
struct nss_wifili_hal_srng_info rxdma_ring;
/**< MAC (Media Access Control) ring configuration. */
uint32_t radio_id;
/**< MAC radio ID. */
uint32_t hwmode;
/**< MAC hardware mode. */
uint32_t lmac_id;
/**< Lower MAC ID. */
uint32_t num_rx_swdesc;
/**< Number of descriptors per Rx pool. */
uint32_t target_pdev_id;
/**< Target physical device ID. */
uint8_t scheme_id;
/**< Radio scheme ID. */
uint8_t reserved[3];
/**< Padding for alignment. */
};
/**
* nss_wifili_peer_ast_flowid_map_msg
* Wifili peer AST flow ID map message.
*/
struct nss_wifili_peer_ast_flowid_map_msg {
uint8_t peer_mac_addr[ETH_ALEN];
/**< Peer MAC address. */
uint16_t vdev_id;
/**< VAP ID. */
uint16_t ast_idx[NSS_WIFILI_PEER_AST_FLOWQ_MAX];
/**< Address search table index. */
uint8_t tid_valid_mask[NSS_WIFILI_PEER_AST_FLOWQ_MAX];
/**< TID valid mask for a flow. */
uint8_t is_valid[NSS_WIFILI_PEER_AST_FLOWQ_MAX];
/**< Valid bit. */
uint8_t flowQ[NSS_WIFILI_PEER_AST_FLOWQ_MAX];
/**< Flow queue. */
uint16_t peer_id;
/**< Peer ID. */
uint8_t reserved[2];
/**< Padding for alignment. */
};
/**
* nss_wifili_peer_ast
* Wifili peer creation message.
*/
struct nss_wifili_peer_msg {
uint8_t peer_mac_addr[6];
/**< Peer MAC address. */
uint16_t vdev_id;
/**< VAP ID. */
uint16_t peer_id;
/**< Peer ID. */
uint16_t hw_ast_idx;
/**< Hardware address search table index. */
uint8_t is_nawds;
/**< NAWDS enabled for peer. */
uint8_t pext_stats_valid;
/**< Peer extended statistics valid. */
uint16_t psta_vdev_id;
/**< Proxy station VAP ID. */
uint32_t nss_peer_mem;
/**< Holds peer memory adderss for NSS. */
uint32_t tx_ast_hash;
/**< AST hash to be used during packet transmission. */
uint32_t pext_stats_mem;
/**< Peer extended statistics memory. */
uint32_t flags;
/**< Peer flags. */
};
/**
* nss_wifili_peer_freelist_append_msg
* Peer memory request.
*/
struct nss_wifili_peer_freelist_append_msg {
uint32_t addr;
/**< Starting address of peer_freelist pool. */
uint32_t length;
/**< Length of peer freelist pool. */
uint32_t num_peers;
/**< Maximum number of peer entries supported in pool. */
};
/**
* nss_wifili_wds_extn_peer_cfg_msg
* Configuration information when the WDS vendor extension is enabled.
*/
struct nss_wifili_wds_extn_peer_cfg_msg {
uint8_t peer_mac_addr[ETH_ALEN]; /**< Peer MAC address. */
uint8_t wds_flags; /**< WDS flags populated from the host. */
uint8_t reserved; /**< Alignment padding. */
uint16_t peer_id; /**< Peer ID. */
};
/**
* nss_wifili_tx_stats
* Tx statistics.
*/
struct nss_wifili_tx_stats {
uint32_t tx_enqueue_dropped;
/**< Tx enqueue drop count. */
uint32_t tx_enqueue_cnt;
/**< Tx enqueue succesful count. */
uint32_t tx_dequeue_cnt;
/**< Tx dequeue count. */
uint32_t tx_send_fail_cnt;
/**< Hardware send failure count. */
uint32_t inv_peer;
/**< Invalid peer enqueue count. */
uint32_t inv_peer_drop_byte_cnt;
/**< Invalid peer drop byte count. */
uint32_t tx_input_pkt;
/**< Tx packets ready to sent. */
uint32_t tx_processed_pkt;
/**< Tx numner of packets sent. */
uint32_t tx_processed_bytes;
/**< Tx number of bytes processed. */
};
/**
* nss_wifili_rx_stats
* Rx statistics.
*/
struct nss_wifili_rx_stats {
uint32_t rx_msdu_err;
/**< Rx msdu error count. */
uint32_t rx_inv_peer;
/**< Rx invalid peer count. */
uint32_t rx_scatter_inv_peer;
/**< Rx scatter invalid peer count. */
uint32_t rx_wds_learn_send;
/**< WDS source port learn packet. */
uint32_t rx_wds_learn_send_fail;
/**< WDS source port learn exception send failure count. */
uint32_t rx_send_dropped;
/**< Rx send dropped count. */
uint32_t rx_deliver_cnt;
/**< Rx deliver count to next node. */
uint32_t rx_deliver_cnt_fail;
/**< Rx deliver count failure. */
uint32_t rx_intra_bss_ucast_send;
/**< Intra-BSS unicast sent count. */
uint32_t rx_intra_bss_ucast_send_fail;
/**< Intra-BSS unicast send failure count. */
uint32_t rx_intra_bss_mcast_send;
/**< Intra-BSS multicast send count. */
uint32_t rx_intra_bss_mcast_send_fail;
/**< Intra-BSS multicast send failure count. */
uint32_t rx_sg_recv_send;
/**< Rx scatter-gather receive send count. */
uint32_t rx_sg_recv_fail;
/**< Rx scatter-gather receive failure count. */
uint32_t rx_me_pkts; /**< Rx multicast echo packets count. */
uint32_t rx_inv_tid; /**< Rx invalid TID. */
/*
* TODO: Move per tid based.
*/
uint32_t rx_frag_inv_sc; /**< Rx invalid frame sequence control. */
uint32_t rx_frag_inv_fc; /**< Rx invalid frame control count. */
uint32_t rx_non_frag_err; /**< Rx non-fragment received in fragmention. */
uint32_t rx_repeat_fragno; /**< Rx fragment retry counters. */
uint32_t rx_ooo_frag; /**< Rx out-of-order fragments count. */
uint32_t rx_ooo_frag_seq; /**< Rx out-of-order sequence count. */
uint32_t rx_all_frag_rcv; /**< Rx all fragments received count. */
uint32_t rx_frag_deliver; /**< Rx fragment deliver counters. */
};
/**
* nss_wifili_tx_tcl_ring_stats
* Transmit Classifier ring specific statistics.
*/
struct nss_wifili_tx_tcl_ring_stats {
uint32_t tcl_no_hw_desc; /**< Number of Transmit Classifier hardware descriptors. */
uint32_t tcl_ring_full; /**< Number of times Transmit Classifier ring full. */
uint32_t tcl_ring_sent; /**< Total number of ring sent. */
};
/**
* nss_wifili_tx_comp_ring_stats
* Tx completion ring statistics.
*/
struct nss_wifili_tx_comp_ring_stats {
uint32_t invalid_bufsrc; /**< Tx completion ring descriptor invalid buffer source. */
uint32_t invalid_cookie; /**< Tx completion ring descriptor has invalid cookies. */
uint32_t hw_ring_empty; /**< Tx completion hardware ring empty. */
uint32_t ring_reaped; /**< Tx completion successfull ring reaped. */
uint32_t tx_cap_enqueue_count; /**< Number of Tx packets enqueued to host. */
uint32_t tx_cap_enqueue_fail_count; /**< Number of Tx packets failed to enqueue to host. */
};
/**
* nss_wifili_tx_sw_pool_stats
* Tx completion sw statistics.
*/
struct nss_wifili_tx_sw_pool_stats {
uint32_t desc_alloc; /**< Tx descriptor software pool descriptor in use. */
uint32_t desc_alloc_fail; /**< Tx descriptor software pool allocation failure . */
uint32_t desc_already_allocated; /**< Tx descriptor re-allocation for allocated descriptor. */
uint32_t desc_invalid_free; /**< Tx descriptor freeing of allocated descriptor. */
uint32_t tx_rel_src_fw; /**< Tx descriptor source is firmware. */
uint32_t tx_rel_ext_desc; /**< Tx descriptor scatter-gather. */
uint32_t tx_rel_tx_desc; /**< Tx descriptor source is hardware*/
uint32_t tx_rel_no_pb; /**< Tx descriptor has pbuf present. */
uint32_t tx_queue_limit_drop; /**< Tx number of packets dropped because of queueing limits. */
};
/**
* wifili_tx_ext_sw_pool_stats
* Tx extended descriptor pool.
*/
struct nss_wifili_tx_ext_sw_pool_stats {
uint32_t desc_alloc; /**< Tx extend (scatter gather) descriptor in use. */
uint32_t desc_alloc_fail; /**< Tx extend descriptor allocation failure. */
uint32_t desc_already_allocated; /**< Tx extend descriptor already allocated. */
uint32_t desc_invalid_free; /**< Tx descriptor invalid source. */
};
/**
* nss_wifili_rx_wbm_ring_stats
* WBM (Wireless Buffer Manager) release ring statistics.
*/
struct nss_wifili_rx_wbm_ring_stats {
uint32_t invalid_buf_mgr; /**< Invalid buffer manager. */
uint32_t err_src_rxdma; /**< Wireless Buffer Manager source is Rx DMA ring. */
uint32_t err_src_rxdma_code_inv; /**< Wireless Buffer Manager source DMA reason unknown. */
uint32_t err_src_reo; /**< Wireless Buffer Manager source is receive reorder ring. */
uint32_t err_src_reo_code_nullq; /**< Wireless Buffer Manager source receive reorder ring because of NULL TLV. */
uint32_t err_src_reo_code_inv; /**< Wireless Buffer Manager source receive reorder ring reason unknown. */
uint32_t err_src_invalid; /**< Wireless Buffer Manager source is unknown. */
uint32_t err_reo_codes[NSS_WIFILI_REO_CODE_MAX];
/**< Receive reoder error codes. */
uint32_t err_dma_codes[NSS_WIFILI_DMA_CODE_MAX];
/**< DMA error codes. */
uint32_t err_internal_codes[NSS_WIFILI_WBM_INTERNAL_ERR_MAX];
/**< Wireless Buffer Manager error codes. */
};
/**
* nss_wifili_rx_reo_ring_stats
* Rx reorder error statistics.
*/
struct nss_wifili_rx_reo_ring_stats {
uint32_t ring_error; /**< Rx reorder ring error. */
uint32_t ring_reaped; /**< Number of ring descriptor reaped. */
uint32_t invalid_cookie; /**< Number of invalid cookie. */
uint32_t defrag_reaped; /**< Rx defragment receive count. */
};
/**
* nss_wifili_rx sw_pool_stats
* Wifili DMA sw pool statistics.
*/
struct nss_wifili_rx_sw_pool_stats {
uint32_t rx_no_pb; /**< Rx software descriptor number of buffer available. */
uint32_t desc_alloc; /**< Number of descriptor in use. */
uint32_t desc_alloc_fail; /**< Number of descriptor allocation failure. */
};
/**
* nss_wifili_rx_dma_ring_stats
* Wifili Rx DMA ring statistics.
*/
struct nss_wifili_rx_dma_ring_stats {
uint32_t rx_hw_desc_unavailable; /**< Number of times hardware descriptor is unavailable. */
uint32_t rx_buf_replenished; /**< Number of buffers replenished. */
};
/**
* nss_wifili_dbdc_mode_stats
* Wifili DBDC mode statistics.
*/
struct nss_wifili_dbdc_mode_stats {
uint32_t dbdc_flush_ast_failed;
/**< Number of times DBDC AST flush message send has failed. */
uint32_t dbdc_drop_rx_secmcast;
/**< Number of packets dropped in DBDC Rx for secondary multicast. */
uint32_t dbdc_drop_tx_secmcast;
/**< Number of packets dropped in DBDC Tx for secondary multicast. */
uint32_t dbdc_drop_rx_alwaysprimary;
/**< Number of packets dropped in DBDC Rx for always primary. */
uint32_t dbdc_drop_tx_alwaysprimary;
/**< Number of packets dropped in DBDC Tx for always primary. */
uint32_t dbdc_drop_loop_rx;
/**< Number of packets dropped in DBDC Rx for DBDC loop. */
uint32_t dbdc_drop_loop_tx;
/**< Number of packets dropped in DBDC Tx for DBDC loop. */
};
/**
* nss_wifili_delay_stats
* Wifili delay statistics.
*/
struct nss_wifili_delay_stats {
uint32_t delay_bucket[NSS_WIFILI_DELAY_INDEX_MAX];
/**< Delay buckets for histogram. */
uint32_t min_delay;
/**< Minimum delay. */
uint32_t avg_delay;
/**< Average delay. */
uint32_t max_delay;
/**< Maximum delay. */
};
/**
* nss_wifili_v3_delay_per_tid_stats
* Wifili version 3 delay per TID statistics.
*/
struct nss_wifili_v3_delay_per_tid_stats {
struct nss_wifili_delay_stats swq_delay;
/**< Software enqueue delay. */
struct nss_wifili_delay_stats hwtx_delay;
/**< Hardware transmit delay. */
struct nss_wifili_delay_stats tx_intfrm_delay;
/**< Transmit interframe delay at radio entry. */
struct nss_wifili_delay_stats rx_intfrm_delay;
/**< Receive interframe delay. */
};
/**
* nss_wifili_v3_per_tid_tx_rx_stats
* Wifili version 3 Tx and Rx statistics per TID.
*/
struct nss_wifili_v3_tx_rx_per_tid_stats {
uint32_t radio_ingress_enq_drop_cnt;
/**< Ingress enqueue drop count. */
uint32_t transmit_succes_cnt;
/**< Total successful transmit count. */
uint32_t transmit_fwdrop_cnt;
/**< Firmware drop count. */
uint32_t transmit_hwdrop_cnt;
/**< Hardware drop count. */
uint32_t transmit_desc_fail_cnt;
/**< Transmit descriptor fail count. */
uint32_t transmit_complete_cnt;
/**< Total transmit count. */
uint32_t rx_delivered_cnt;
/**< Total Rx packets delivered to next node. */
uint32_t rx_deliver_fail_cnt;
/**< Rx deliver fail count. */
uint32_t rx_intrabss_cnt;
/**< Intra-BSS Rx count. */
uint32_t rx_intrabss_fail_cnt;
/**< Intra-BSS Rx fail count. */
uint32_t num_msdu_recived;
/**< Number of MSDU received from hardware. */
uint32_t num_mcast_msdu_recived;
/**< Number of broadcast MSDU received. */
uint32_t num_bcast_msdu_recived;
/**< Number of multicast MSDU received. */
uint32_t transmit_tqm_status_cnt[NSS_WIFILI_TQM_STATUS_MAX];
/**< Number of frames with this TQM completion status. */
uint32_t transmit_htt_status_cnt[NSS_WIFILI_HTT_STATUS_MAX];
/**< Number of frames with this HTT completion status. */
};
/**
* nss_wifili_v3_tx_rx_per_ac_stats
* Wifili version 3 Tx and Rx statistics per AC.
*/
struct nss_wifili_v3_tx_rx_per_ac_stats {
uint32_t radio_ingress_enq_cnt;
/**< Ingress enqueue packet count. */
uint32_t radio_ingress_deq_cnt;
/**< Ingress dequeue count. */
uint32_t transmit_enq_cnt;
/**< Transmit enqueue count. */
};
/**
* nss_wifili_radio_tx_rx_stats_v3
* Wifili version 3 radio Tx and Rx statistics.
*/
struct nss_wifili_radio_tx_rx_stats_v3 {
struct nss_wifili_v3_tx_rx_per_tid_stats tid_stats[NSS_WIFILI_MAX_TID];
/**< Per-TID Tx and Rx statistics. */
struct nss_wifili_v3_tx_rx_per_ac_stats ac_stats[NSS_WIFILI_WME_AC_MAX];
/**< Per-Access Category Tx and Rx statistics. */
};
/**
* nss_wifili_radio_delay_stats_v3
* Wifili version 3 radio delay statistics.
*/
struct nss_wifili_radio_delay_stats_v3 {
struct nss_wifili_v3_delay_per_tid_stats v3_delay_stats[NSS_WIFILI_MAX_TID];
/**< Per-TID delay statistics. */
};
/**
* nss_wifili_pdev_v3_tx_rx_stats_sync_msg
* Wifili message to synchronize version 3 Tx and Rx statistics to HLOS.
*/
struct nss_wifili_pdev_v3_tx_rx_stats_sync_msg {
uint32_t radio_id;
/**< Radio ID. */
struct nss_wifili_radio_tx_rx_stats_v3 wlpv3_txrx_stats;
/**< Wifli version 3 Tx and Rx statistics. */
};
/**
* nss_wifili_pdev_v3_delay_stats_sync_msg
* Wifili message to synchronize version 3 delay statistics to HLOS.
*/
struct nss_wifili_pdev_v3_delay_stats_sync_msg {
uint32_t radio_id;
/**< Radio ID. */
struct nss_wifili_radio_delay_stats_v3 wlpv3_delay_stats;
/**< Wifli version 3 delay statistics. */
};
/**
* nss_wifili_device_stats
* Wifili specific statistics.
*/
struct nss_wifili_device_stats {
struct nss_wifili_tx_tcl_ring_stats tcl_stats[NSS_WIFILI_MAX_TCL_DATA_RINGS_MSG];
/**< Transmit Classifier ring statistics. */
struct nss_wifili_tx_comp_ring_stats txcomp_stats[NSS_WIFILI_MAX_TCL_DATA_RINGS_MSG];
/**< Tx completion ring statistics. */
struct nss_wifili_tx_sw_pool_stats tx_sw_pool_stats[NSS_WIFILI_MAX_TXDESC_POOLS_MSG];
/**< Tx software pool statistics. */
struct nss_wifili_tx_ext_sw_pool_stats tx_ext_sw_pool_stats[NSS_WIFILI_MAX_TX_EXT_DESC_POOLS_MSG];
/**< Tx extended software pool statistics. */
struct nss_wifili_tx_stats tx_data_stats[NSS_WIFILI_MAX_PDEV_NUM_MSG];
/**< Tx data statistics for each pdev. */
struct nss_wifili_rx_reo_ring_stats rxreo_stats[NSS_WIFILI_MAX_REO_DATA_RINGS_MSG];
/**< Rx reorder ring statistics. */
struct nss_wifili_rx_sw_pool_stats rx_sw_pool_stats[NSS_WIFILI_MAX_PDEV_NUM_MSG];
/**< Rx DMA software pool statistics. */
struct nss_wifili_rx_stats rx_data_stats[NSS_WIFILI_MAX_PDEV_NUM_MSG];
/**< Rx data statistics for each pdev. */
struct nss_wifili_rx_dma_ring_stats rxdma_stats[NSS_WIFILI_MAX_PDEV_NUM_MSG];
/**< Rx DMA ring statistics. */
struct nss_wifili_rx_wbm_ring_stats rxwbm_stats;
/**< Wireless Buffer Manager ring statistics. */
struct nss_wifili_dbdc_mode_stats dbdc_stats;
/**< DBDC mode statistics. */
};
/**
* nss_wifili_stats_sync_msg
* Wifili SoC statistics synchronization message.
*/
struct nss_wifili_stats_sync_msg {
struct nss_wifili_device_stats stats;
/**< Device statistics. */
};
/**
* nss_wifili_soc_linkdesc_per_packet_metadata
* Link descriptor per packet metadata.
*/
struct nss_wifili_soc_linkdesc_per_packet_metadata
{
uint32_t desc_addr; /**< Link descriptor address. */
};
/**
* nss_wifili_soc_per_packet_metadata
* Per packet special data that has to be sent to host.
*/
struct nss_wifili_soc_per_packet_metadata {
uint16_t pkt_type; /**< Packet type. */
uint8_t pool_id; /**< Pool ID of invalid peer packets. */
uint8_t reserved; /**< Alignment padding. */
/**
* Link descriptor per packet metadata.
*/
union {
struct nss_wifili_soc_linkdesc_per_packet_metadata linkdesc_metadata;
} metadata; /**< Per packet link descriptor metadata. */
};
/**
* nss_wifili_tx_dropped
* Tx peer dropped packets.
*/
struct nss_wifili_tx_dropped {
uint32_t drop_stats[NSS_WIFILI_TQM_RR_MAX]; /**< Discarded by firmware. */
uint32_t tx_nawds_mcast_drop_cnt; /**< Total number of NAWDS multicast packets dropped. */
};
/**
* nss_wifili_tx_ctrl_stats
* Tx peer statistics.
*/
struct nss_wifili_tx_ctrl_stats {
uint32_t ofdma; /**< Number of orthogonal frequency-division multiple
access packets. */
uint32_t non_amsdu_cnt; /**< Number of MSDUs with no MSDU level aggregation. */
uint32_t amsdu_cnt; /**< Number of MSDUs part of AMSDU. */
uint32_t tx_mcast_cnt; /**< Total number of multicast packets sent. */
uint32_t tx_mcast_bytes; /**< Total number of multicast bytes sent. */
uint32_t tx_ucast_cnt; /**< Total number of unicast packets sent. */
uint32_t tx_ucast_bytes; /**< Total number of unicast bytes sent. */
uint32_t tx_bcast_bytes; /**< Total number of broadcast bytes sent. */
uint32_t tx_bcast_cnt; /**< Total number of broadcast packets sent. */
struct nss_wifili_tx_dropped dropped; /**< Tx peer dropped. */
uint32_t tx_success_cnt; /**< Total number of packets sent successfully. */
uint32_t tx_success_bytes; /**< Total number of bytes sent successfully. */
uint32_t tx_nawds_mcast_cnt; /**< Total number of NAWDS multicast packets sent. */
uint32_t tx_nawds_mcast_bytes; /**< Total number of NAWDS multicast bytes sent. */
uint32_t retries; /**< Total number of retries. */
};
/**
* nss_wifili_peer_rx_err
* Rx peer errors.
*/
struct nss_wifili_rx_err {
uint32_t mic_err; /**< Rx MIC errors. */
uint32_t decrypt_err; /**< Rx Decryption errors. */
};
/**
* nss_wifili_rx_ctrl_stats
* Peer Rx statistics.
*/
struct nss_wifili_rx_ctrl_stats {
struct nss_wifili_rx_err err; /**< Rx peer errors. */
uint32_t multipass_rx_pkt_drop; /**< Total number of multipass packets without a VLAN header. */
uint32_t peer_unauth_rx_pkt_drop; /**< Number of receive packets dropped due to an authorized peer. */
uint32_t reserved_type[NSS_WIFILI_MAX_RESERVED_TYPE]; /**< Reserved type for future use. */
uint32_t non_amsdu_cnt; /**< Number of MSDUs with no MSDU level aggregation. */
uint32_t amsdu_cnt; /**< Number of MSDUs part of AMSDU. */
uint32_t mcast_rcv_cnt; /**< Total number of multicast packets received. */
uint32_t mcast_rcv_bytes; /**< Total number of multicast bytes received. */
uint32_t rx_recvd; /**< Total Rx received count. */
uint32_t rx_recvd_bytes; /**< Total Rx received count. */
uint32_t nawds_mcast_drop; /**< Total NAWDS drop count. */
uint32_t nawds_mcast_drop_bytes; /**< Total NAWDS drop count. */
uint32_t rx_intra_bss_pkts_num; /**< Total Intra-BSS packets received. */
uint32_t rx_intra_bss_pkts_bytes; /**< Total Intra-BSS bytes received. */
uint32_t rx_intra_bss_fail_num; /**< Total Intra-BSS packets failed. */
uint32_t rx_intra_bss_fail_bytes; /**< Total Intra-BSS bytes received. */
uint32_t bcast_rcv_cnt; /**< Total number of broadcast packets received. */
uint32_t bcast_rcv_bytes; /**< Total number of broadcast bytes received. */
uint32_t defrag_mcast_drop; /**< Total number of defrag multicast dropped packets. */
};
/**
* nss_wifili_peer_ctrl_stats
* Wifili peer control statistics.
*/
struct nss_wifili_peer_ctrl_stats {
uint32_t peer_id; /**< Peer ID. */
struct nss_wifili_tx_ctrl_stats tx;
/**< Peer Tx control statistics. */
struct nss_wifili_rx_ctrl_stats rx;
/**< Peer Rx control statistics. */
};
/**
* nss_wifili peer_stats
* Wifili peer statistics.
*/
struct nss_wifili_peer_stats {
uint32_t npeers; /**< Number of entries of peer statistics. */
struct nss_wifili_peer_ctrl_stats wpcs[1];
/**< Wifili peer control statistics. */
};
/**
* nss_wifili_peer_stats_msg
* Wifili peer statistics message.
*/
struct nss_wifili_peer_stats_msg {
struct nss_wifili_peer_stats stats;
/**< Wifili peer statistics. */
};
/**
* nss_wifili_sojourn_per_tid_stats
* Wifili sojourn per TID statistics.
*/
struct nss_wifili_sojourn_per_tid_stats {
uint32_t avg_sojourn_msdu; /**< Average per-TID of all time difference. */
uint32_t sum_sojourn_msdu; /**< Sum per-TID of all time difference. */
uint32_t num_msdus; /**< MSDUs per TID. */
};
/**
* nss_wifili_sojourn_peer_stats
* Wifili sojourn peer statistics.
*/
struct nss_wifili_sojourn_peer_stats {
uint32_t peer_id; /**< Peer ID. **/
struct nss_wifili_sojourn_per_tid_stats stats[NSS_WIFILI_MAX_TID]; /**< Statistics per TID. **/
};
/**
* nss_wifili_sojourn_stats_msg
* Wifili sojourn statistics message.
*/
struct nss_wifili_sojourn_stats_msg {
uint32_t npeers; /**< Number of peers. */
struct nss_wifili_sojourn_peer_stats sj_peer_stats[1]; /**< Per-peer sojourn statistics. */
};
/*
* nss_wifili_jitter_tid_stats
* Per TID jitter statistics.
*/
struct nss_wifili_jitter_tid_stats {
uint32_t avg_jitter; /**< Average jitter. */
uint32_t avg_delay; /**< Average delay. */
uint32_t avg_err; /**< Average count error. */
uint32_t success; /**< Transmit success count. */
uint32_t drop; /**< Transmit drop count. */
};
/*
* nss_wifili_jitter_stats
* Wifili jitter statistics.
*/
struct nss_wifili_jitter_stats {
uint32_t peer_id; /**< Peer ID. */
struct nss_wifili_jitter_tid_stats stats[NSS_WIFILI_MAX_TID]; /**< Per-TID jitter statistics. */
};
/*
* nss_wifili_jitter_stats_msg
* Wifili jitter message.
*/
struct nss_wifili_jitter_stats_msg {
uint32_t npeers; /**< Number of peers. */
struct nss_wifili_jitter_stats jitter_stats[1]; /**< Jitter statistics. */
};
/**
* nss_wifili_wds_peer_msg
* Wi-Fi Wireless distribution system (WDS) peer-specific message.
*/
struct nss_wifili_wds_peer_msg {
uint8_t dest_mac[ETH_ALEN]; /**< MAC address of the destination. */
uint8_t peer_mac[ETH_ALEN]; /**< MAC address of the base peer. */
uint8_t ast_type; /**< AST (Address Search Table) type for this peer. */
uint8_t pdev_id; /**< Radio ID for next hop peer. */
uint16_t peer_id; /**< Peer ID of next hop peer. */
};
/**
* nss_wifili_peer_delay_stats
* Per-peer delay statistics.
*/
struct nss_wifili_peer_delay_stats {
struct nss_wifili_delay_stats swq_delay; /**< Software enqueue delay. */
struct nss_wifili_delay_stats hwtx_delay; /**< Hardware transmit delay. */
};
/**
* nss_wifili_peer_ext_stats
* Peer extended statistics.
*/
struct nss_wifili_peer_ext_stats {
uint32_t peer_id; /**< Peer ID. */
struct nss_wifili_peer_delay_stats delay_stats[NSS_WIFILI_MAX_TID];
/**< Delay statistics. */
};
/**
* nss_wifili_peer_ext_stats_msg
* Peer extended statistics message.
*/
struct nss_wifili_peer_ext_stats_msg {
uint32_t npeers; /**< Number of peers. */
struct nss_wifili_peer_ext_stats ext_stats[1]; /**< Extended statistics. */
};
/**
* nss_wifili_stats_cfg_msg
* Wifili stats enable/disable configuration message.
*/
struct nss_wifili_stats_cfg_msg {
uint32_t cfg; /**< Enable or disable configuration. */
};
/**
* nss_wifili_wds_peer_map_msg
* Wi-Fi Wireless distribution system(WDS) peer-specific message.
*/
struct nss_wifili_wds_peer_map_msg {
uint8_t dest_mac[ETH_ALEN]; /**< MAC address of the destination. */
uint16_t peer_id; /**< Connected peer ID for this WDS peer. */
uint16_t ast_idx; /**< AST (address search table) index for this peer in host. */
uint16_t vdev_id;; /**< VAP ID. */
};
/**
* nss_wifili_wds_active_info
* Wi-Fi WDS active information.
*/
struct nss_wifili_wds_active_info {
uint16_t ast_idx; /**< Hardware AST index. */
};
/**
* nss_wifili_wds_active_info_msg
* Wi-Fi Wireless distribution system active information message.
*/
struct nss_wifili_wds_active_info_msg {
uint16_t nentries; /**< Number of WDS entries. */
struct nss_wifili_wds_active_info info[1];
/**< WDS active information. */
};
/**
* nss_wifili_mec_ageout_info
* Wi-Fi multicast echo check ageout information.
*/
struct nss_wifili_mec_ageout_info {
uint8_t mac_addr[6]; /**< MAC address. */
uint8_t radio_id; /**< Radio ID. */
uint8_t pad; /**< Pad for word align structure. */
};
/**
* nss_wifili_mec_ageout_info_msg
* Wi-Fi multicast echo check ageout information message.
*/
struct nss_wifili_mec_ageout_info_msg {
uint16_t nentries; /**< Number of entries. */
struct nss_wifili_mec_ageout_info info[1];
/**< Multicast echo check active information. */
};
/**
* nss_wifili_soc_linkdesc_buf_info_msg
* Link descriptor buffer addresss information.
*/
struct nss_wifili_soc_linkdesc_buf_info_msg {
uint32_t buffer_addr_low; /**< Link descriptor low address. */
uint32_t buffer_addr_high; /**< Link descriptor high address. */
};
/**
* nss_wifili_peer_security_type_msg
* Wifili security type message.
*/
struct nss_wifili_peer_security_type_msg {
uint16_t peer_id; /**< Peer ID. */
uint8_t pkt_type; /**< Unicast or broadcast packet type. */
uint8_t security_type; /**< Security type. */
uint8_t mic_key[NSS_WIFILI_MIC_KEY_LEN];
/**< MIC key. */
};
/**
* nss_wifili_peer_nawds_enable_msg
* Wifili NAWDS enable for this peer.
*/
struct nss_wifili_peer_nawds_enable_msg {
uint16_t peer_id; /**< Peer ID. */
uint16_t is_nawds; /**< Enable NAWDS on this peer. */
};
/**
* nss_wifili_peer_vlan_id_msg
* Wifili peer VLAN ID message.
*/
struct nss_wifili_peer_vlan_id_msg {
uint16_t peer_id; /**< Peer ID. */
uint16_t vlan_id; /**< VLAN ID. */
};
/**
* nss_wifili_peer_isolation_msg
* Wifili peer isolation message.
*/
struct nss_wifili_peer_isolation_msg {
uint16_t peer_id; /**< Peer ID. */
uint16_t isolation; /**< Isolation enabled/disabled. */
};
/**
* nss_wifili_dbdc_repeater_loop_detection_msg
* Wifili DBDC repeater loop detection message.
*/
struct nss_wifili_dbdc_repeater_loop_detection_msg {
bool dbdc_loop_detected; /**< DBDC repeater loop detection flag. */
};
/**
* nss_wifili_dbdc_repeater_set_msg
* Wifili DBDC repeater set message.
*/
struct nss_wifili_dbdc_repeater_set_msg {
uint32_t is_dbdc_en; /**< DBDC enable flag. */
};
/**
* nss_wifili_hmmc_dscp_tid_set_msg
* Wifili Hy-Fi managed multicast DSCP TID set message.
*/
struct nss_wifili_hmmc_dscp_tid_set_msg {
uint16_t radio_id; /**< Radio ID. */
uint16_t value; /**< Hy-Fi managed multicast TID value. */
};
/**
* nss_wifili_hmmc_dscp_override_set_msg
* Wifili Hy-Fi managed multicast DSCP override set message.
*/
struct nss_wifili_hmmc_dscp_override_set_msg {
uint16_t radio_id; /**< Radio ID. */
uint16_t value; /**< Hy-Fi managed multicast DSCP override value. */
};
/**
* nss_wifili_reo_tidq_msg
* Rx reorder TID queue setup message.
*/
struct nss_wifili_reo_tidq_msg {
uint32_t tid; /**< TID (traffic identification) value. */
uint16_t peer_id; /**< Peer ID. */
};
/**
* nss_wifili_enable_v3_stats_msg
* Version 3 statistics enable message.
*/
struct nss_wifili_enable_v3_stats_msg {
uint32_t radio_id; /**< Radio ID. */
uint32_t flag; /**< Flag to enable version 3 statistics. */
};
/**
* nss_wifili_clr_stats_msg
* NSS firmware statistics clear message.
*/
struct nss_wifili_clr_stats_msg {
uint8_t vdev_id;; /**< VAP ID. */
};
/**
* nss_wifili_update_auth_flag
* Peer authentication flag message.
*/
struct nss_wifili_peer_update_auth_flag {
uint16_t peer_id; /**< Peer ID. */
uint8_t auth_flag; /**< Peer authentication flag. */
uint8_t reserved; /**< Alignment padding. */
};
/**
* nss_wifili_update_pdev_lmac_id_msg
* Physical device ID and lower MAC ID update message.
*/
struct nss_wifili_update_pdev_lmac_id_msg {
uint32_t pdev_id; /**< Physical device ID. */
uint32_t lmac_id; /**< Lower MAC ID. */
uint32_t target_pdev_id; /**< Target physical device ID. */
};
/**
* nss_wifili_radio_cmd_msg
* Wi-Fi radio specific special commands.
*/
struct nss_wifili_radio_cmd_msg {
enum nss_wifili_radio_cmd cmd;
/**< Type of command message. */
uint32_t value; /**< Value of the command. */
};
/*
* nss_wifili_pdev_tx_capture_msg
* Tx capture enable per pdev message.
*/
struct nss_wifili_pdev_tx_capture_msg {
uint8_t pdev_id; /**< Physical device ID. */
uint8_t tx_cap_config; /**< Flag to enable or disable Tx capture for physical device. */
};
/*
* nss_wifili_peer_tx_capture_msg
* Tx capture enable per peer message.
*/
struct nss_wifili_peer_tx_capture_msg {
uint16_t peer_id; /**< Peer ID. */
uint8_t tx_cap_config; /**< Flag to enable or disable Tx capture for peer. */
uint8_t reserved; /**< Reserved. */
};
/**
* nss_wifili_radio_buf_cfg_msg
* Wi-Fi Radio buffer requirement configuration.
*
* Number of payloads needed in NSS for multi-client scenarios are configured
* from Wi-Fi driver as per following ranges:
* 0-64 peers range 1.
* 64-128 peers range 2.
* 128-256 peers range 3.
* >256 peers range 4.
* Number of payloads needed in for each peer range is configured by Wi-Fi driver
* for flexibility.
*/
struct nss_wifili_radio_buf_cfg_msg {
uint32_t buf_cnt; /**< Number of buffers required. */
uint32_t range; /**< Peer range. */
};
/**
* nss_wifili_radio_cfg_msg
* Wi-Fi radio specific special configurations.
*/
struct nss_wifili_radio_cfg_msg {
uint32_t radio_if_num; /**< NSS assigned interface number for radio. */
/**
* Wi-Fi radio specific special command message.
*/
union {
struct nss_wifili_radio_cmd_msg radiocmdmsg;
/**< Radio specific commands. */
struct nss_wifili_radio_buf_cfg_msg radiobufcfgmsg;
/**< Radio specific buffer configurations. */
} radiomsg; /**< Wi-Fi radio command message. */
};
/**
* struct wifili_peer_wds_4addr_allow_msg
* Per-peer four address configuration message.
*/
struct nss_wifili_peer_wds_4addr_allow_msg {
uint32_t peer_id; /**< Peer ID. */
uint32_t if_num; /**< Associate virtual interface number. */
bool enable; /**< Boolean flag to enable/disable four address frames. */
};
/**
* struct nss_wifili_mesh_capability_info
* Wi-Fi mesh capability flag.
*/
struct nss_wifili_mesh_capability_info {
bool mesh_enable; /**< Wi-Fi mesh capability flag. */
};
/**
* nss_wifili_msg
* Structure that describes wifili messages.
*/
struct nss_wifili_msg {
struct nss_cmn_msg cm; /**< Common message header. */
/**
* Payload of wifili message.
*/
union {
struct nss_wifili_init_msg init;
/**< Wi-Fi initialization data. */
struct nss_wifili_pdev_init_msg pdevmsg;
/**< Tx initialization data. */
struct nss_wifili_pdev_deinit_msg pdevdeinit;
/**< Tx de-initialization data. */
struct nss_wifili_peer_msg peermsg;
/**< Peer-specific data for the physical device. */
struct nss_wifili_peer_freelist_append_msg peer_freelist_append;
/**< Information for creating a peer freelist. */
struct nss_wifili_stats_sync_msg wlsoc_stats;
/**< Synchronization statistics. */
struct nss_wifili_peer_stats_msg peer_stats;
/**< Wifili peer statistics. */
struct nss_wifili_wds_peer_msg wdspeermsg;
/**< WDS peer-specific message. */
struct nss_wifili_wds_peer_map_msg wdspeermapmsg;
/**< WDS peer-mapping specific message. */
struct nss_wifili_wds_active_info_msg wdsinfomsg;
/**< WDS active information specific message. */
struct nss_wifili_stats_cfg_msg scm;
/**< Wifili peer statistics configuration message. */
struct nss_wifili_reo_tidq_msg reotidqmsg;
/**< Rx reorder TID queue setup message. */
struct nss_wifili_radio_cfg_msg radiocfgmsg;
/**< Radio command message. */
struct nss_wifili_wds_extn_peer_cfg_msg wpeercfg;
/**< WDS vendor configuration message. */
struct nss_wifili_soc_linkdesc_buf_info_msg linkdescinfomsg;
/**< Link descriptor buffer address information. */
struct nss_wifili_peer_security_type_msg securitymsg;
/**< Wifili peer security message. */
struct nss_wifili_peer_nawds_enable_msg nawdsmsg;
/**< Wifili peer enable NAWDS message. */
struct nss_wifili_dbdc_repeater_set_msg dbdcrptrmsg;
/**< Wifili DBDC repeater enable message. */
struct nss_wifili_hmmc_dscp_override_set_msg shmmcdscpmsg;
/**< Wifili Hy-Fi managed multicast DSCP override set message. */
struct nss_wifili_hmmc_dscp_tid_set_msg shmmcdcptidmsg;
/**< Wifili Hy-Fi managed multicast DSCP TID map set message. */
struct nss_wifili_pdev_v3_tx_rx_stats_sync_msg v3_txrx_stats_msg;
/**< Wifili version 3 Tx and Rx statistics message. */
struct nss_wifili_pdev_v3_delay_stats_sync_msg v3_delay_stats_msg;
/**< Wifili version 3 delay statistics message. */
struct nss_wifili_enable_v3_stats_msg enablev3statsmsg;
/**< Wifili version 3 statistics enable message. */
struct nss_wifili_sojourn_stats_msg sj_stats_msg;
/**< Wifili sojourn statistics message. */
struct nss_wifili_peer_vlan_id_msg peervlan;
/**< Wifili peer VLAN ID message. */
struct nss_wifili_update_pdev_lmac_id_msg update_pdev_lmac_id_msg;
/**< Wifili peer update lower MAC ID message. */
struct nss_wifili_peer_ast_flowid_map_msg peer_ast_flowid_msg;
/**< Wifili peer AST index flow ID map message. */
struct nss_wifili_mec_ageout_info_msg mecagemsg;
/**< Multicast echo check active information specific message. */
struct nss_wifili_jitter_stats_msg jt_stats_msg;
/**<Jitter statistics message. */
struct nss_wifili_peer_isolation_msg isolation_msg;
/**< Peer isolation message. */
/**< Jitter statistics message. */
struct nss_wifili_peer_ext_stats_msg pext_msg;
/**< Peer extended statistics message. */
struct nss_wifili_clr_stats_msg clrstats;
/**< Clear NSS firmware statistics. */
struct nss_wifili_peer_wds_4addr_allow_msg wpswm;
/**< Peer four-address event message. */
struct nss_wifili_dbdc_repeater_loop_detection_msg wdrldm;
/**< Wifili DBDC repeater loop detection message. */
struct nss_wifili_peer_update_auth_flag peer_auth;
/**< Peer authentication flag message. */
struct nss_wifili_mesh_capability_info cap_info;
/**< Mesh capability flag. */
struct nss_wifili_pdev_tx_capture_msg pdevtxcapmsg;
/**< Wifili physical device Tx capture message. */
struct nss_wifili_peer_tx_capture_msg peertxcapmsg;
/**< Wifili peer Tx capture message. */
} msg; /**< Message payload. */
};
/**
* nss_wifili_tx_msg
* Send wifili messages.
*
* @datatypes
* nss_ctx_instance \n
* nss_wifili_msg
*
* @param[in] nss_ctx NSS context.
* @param[in] msg NSS Wi-Fi message.
*
* @return
* nss_tx_status_t Tx status
*/
extern nss_tx_status_t nss_wifili_tx_msg(struct nss_ctx_instance *nss_ctx, struct nss_wifili_msg *msg);
/**
* nss_wifili_tx_msg_sync
* Send wifili messages synchronously.
*
* @datatypes
* nss_ctx_instance \n
* nss_wifili_msg
*
* @param[in] nss_ctx NSS context.
* @param[in] msg NSS Wi-Fi message.
*
* @return
* nss_tx_status_t Tx status.
*/
extern nss_tx_status_t nss_wifili_tx_msg_sync(struct nss_ctx_instance *nss_ctx, struct nss_wifili_msg *msg);
/**
* nss_wifili_msg_callback_t
* Callback to receive wifili messages.
*
* @datatypes
* nss_wifili_msg
*
* @param[in] app_data Application context of the message.
* @param[in] msg Message data.
*
* @return
* void
*/
typedef void (*nss_wifili_msg_callback_t)(void *app_data, struct nss_wifili_msg *msg);
/**
* nss_wifili_callback_t
* Callback to receive Wi-Fi data.
*
* @datatypes
* net_device \n
* sk_buff \n
* napi_struct
*
*
* @param[in] netdev Pointer to the associated network device.
* @param[in] skb Pointer to the data socket buffer.
* @param[in] napi Pointer to the NAPI structure.
*
* @return
* void
*/
typedef void (*nss_wifili_callback_t)(struct net_device *netdev, struct sk_buff *skb, struct napi_struct *napi);
/**
* nss_register_wifili_if
* Register to send/receive wifili SoC messages to NSS.
*
* @datatypes
* nss_wifili_callback_t \n
* nss_wifili_msg_callback_t \n
* net_device
*
* @param[in] if_num NSS interface number.
* @param[in] wifi_callback Callback for the Wi-Fi virtual device data.
* @param[in] wifi_ext_callback Callback for the extended data.
* @param[in] event_callback Callback for the message.
* @param[in] netdev Pointer to the associated network device.
* @param[in] features Data socket buffer types supported by this
* interface.
*
* @return
* nss_ctx_instance* NSS context
*/
struct nss_ctx_instance *nss_register_wifili_if(uint32_t if_num, nss_wifili_callback_t wifi_callback,
nss_wifili_callback_t wifi_ext_callback, nss_wifili_msg_callback_t event_callback, struct net_device *netdev, uint32_t features);
/**
* nss_unregister_wifili_if
* Deregister wifili SoC interface with NSS.
*
* @param[in] if_num NSS interface number.
*
* @return
* void
*/
void nss_unregister_wifili_if(uint32_t if_num);
/**
* nss_register_wifili_radio_if
* Register to send/receive wifili radio messages to NSS.
*
* @datatypes
* nss_wifili_callback_t \n
* nss_wifili_msg_callback_t \n
* net_device
*
* @param[in] if_num NSS interface number.
* @param[in] wifi_callback Callback for the Wi-Fi radio virtual device data.
* @param[in] wifi_ext_callback Callback for the extended data.
* @param[in] event_callback Callback for the message.
* @param[in] netdev Pointer to the associated network device.
* @param[in] features Data socket buffer types supported by this
* interface.
*
* @return
* nss_ctx_instance* NSS context
*/
struct nss_ctx_instance *nss_register_wifili_radio_if(uint32_t if_num, nss_wifili_callback_t wifi_callback,
nss_wifili_callback_t wifi_ext_callback, nss_wifili_msg_callback_t event_callback, struct net_device *netdev, uint32_t features);
/**
* nss_unregister_wifili_radio_if
* Deregister wifili radio interface with NSS.
*
* @param[in] if_num NSS interface number
*
* @return
* void
*/
void nss_unregister_wifili_radio_if(uint32_t if_num);
/**
* nss_get_available_wifili_external_if
* Check and return the available external interface.
*
* @return
* External interface number.
*/
nss_if_num_t nss_get_available_wifili_external_if(void);
/**
* nss_wifili_release_external_if
* Release the used interface number
*
* @datatypes
* nss_if_num
*
* @param[in] if_num NSS interface number.
*
* @return
* void
*/
void nss_wifili_release_external_if(nss_if_num_t ifnum);
/**
* nss_wifili_thread_scheme_alloc
* Allocate thread scheme entry and return scheme index.
*
* @param[in] nss_ctx NSS context pointer.
* @param[in] radio_ifnum Radio interface number.
* @param[in] radio_priority Radio Priority requested.
*
* @return
* uint8_t.
*/
uint8_t nss_wifili_thread_scheme_alloc(struct nss_ctx_instance *nss_ctx,
int32_t radio_ifnum,
uint32_t radio_priority);
/**
* nss_wifili_thread_scheme_dealloc
* Release thread scheme database entry.
*
* @param[in] nss_ctx NSS context pointer.
* @param[in] radio_ifnum Radio interface number.
*
* @return
* void.
*/
void nss_wifili_thread_scheme_dealloc(struct nss_ctx_instance *nss_ctx,
int32_t radio_ifnum);
/**
* nss_wifili_get_radio_num
* Get radio number.
*
* @param[in] nss_ctx NSS context pointer.
*
* @return
* uint32_t.
*/
uint32_t nss_wifili_get_radio_num(struct nss_ctx_instance *nss_ctx);
/**
* nss_wifili_stats_register_notifier
* Registers a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or -2 on failure.
*/
extern int nss_wifili_stats_register_notifier(struct notifier_block *nb);
/**
* nss_wifili_stats_unregister_notifier
* Deregisters a statistics notifier.
*
* @datatypes
* notifier_block
*
* @param[in] nb Notifier block.
*
* @return
* 0 on success or -2 on failure.
*/
extern int nss_wifili_stats_unregister_notifier(struct notifier_block *nb);
#endif /*__KERNEL__ */
/**
* @}
*/
#endif /* __NSS_WIFILI_H */