| /* |
| ************************************************************************** |
| * Copyright (c) 2015-2018, 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_wifi.h |
| * NSS TO HLOS Wi-Fi interface definitions. |
| */ |
| |
| #ifndef __NSS_WIFI_H |
| #define __NSS_WIFI_H |
| |
| /** |
| * @addtogroup nss_wifi_subsystem |
| * @{ |
| */ |
| |
| #define NSS_WIFI_MGMT_DATA_LEN 128 /**< Size of the Wi-Fi management data. */ |
| #define NSS_WIFI_FW_STATS_DATA_LEN 480 /**< Size of the firmware statictics data. */ |
| #define NSS_WIFI_RAWDATA_MAX_LEN 64 /**< Maximum size of the raw Wi-Fi data. */ |
| #define NSS_WIFI_TX_NUM_TOS_TIDS 8 /**< Number of TIDs. */ |
| #define NSS_WIFI_PEER_STATS_DATA_LEN 232 /**< Size of the peer statistics data. */ |
| #define NSS_WIFI_IPV6_ADDR_LEN 16 /**< Size of the IPv6 address. */ |
| #define NSS_WIFI_MAX_RSSI_CHAINS 4 /**< Maximum number of RSSI chains. */ |
| #define NSS_WIFI_WME_NUM_AC 4 /**< Number of ACs. */ |
| #define NSS_WIFI_MIC_KEY_LEN 8 |
| |
| |
| /** |
| * Maximum number of Wi-Fi peers per radio as a sum of |
| * maximum number of station peers (513), |
| * maximum numbero of AP VAP peers (16), and |
| * maximum number of monitor VAP peers (1). |
| */ |
| #define NSS_WIFI_MAX_PEER 530 |
| |
| /** |
| * nss_wifi_metadata_types |
| * Wi-Fi interface request and response message types. |
| */ |
| enum nss_wifi_metadata_types { |
| NSS_WIFI_INIT_MSG, |
| NSS_WIFI_POST_RECV_MSG, |
| NSS_WIFI_HTT_INIT_MSG, |
| NSS_WIFI_TX_INIT_MSG, |
| NSS_WIFI_RAW_SEND_MSG, |
| NSS_WIFI_MGMT_SEND_MSG, |
| NSS_WIFI_WDS_PEER_ADD_MSG, |
| NSS_WIFI_WDS_PEER_DEL_MSG, |
| NSS_WIFI_STOP_MSG, |
| NSS_WIFI_RESET_MSG, |
| NSS_WIFI_STATS_MSG, |
| NSS_WIFI_PEER_FREELIST_APPEND_MSG, |
| NSS_WIFI_RX_REORDER_ARRAY_FREELIST_APPEND_MSG, |
| NSS_WIFI_SEND_PEER_MEMORY_REQUEST_MSG, |
| NSS_WIFI_SEND_RRA_MEMORY_REQUEST_MSG, |
| NSS_WIFI_FW_STATS_MSG, |
| NSS_WIFI_MONITOR_FILTER_SET_MSG, |
| NSS_WIFI_PEER_BS_STATE_MSG, |
| NSS_WIFI_MSDU_TTL_SET_MSG, |
| NSS_WIFI_RX_VOW_EXTSTATS_SET_MSG, |
| NSS_WIFI_PKTLOG_CFG_MSG, |
| NSS_WIFI_ENABLE_PERPKT_TXSTATS_MSG, |
| NSS_WIFI_IGMP_MLD_TOS_OVERRIDE_MSG, |
| NSS_WIFI_OL_STATS_CFG_MSG, |
| NSS_WIFI_OL_STATS_MSG, |
| NSS_WIFI_TX_QUEUE_CFG_MSG, |
| NSS_WIFI_TX_MIN_THRESHOLD_CFG_MSG, |
| NSS_WIFI_DBDC_PROCESS_ENABLE_MSG, |
| NSS_WIFI_PRIMARY_RADIO_SET_MSG, |
| NSS_WIFI_FORCE_CLIENT_MCAST_TRAFFIC_SET_MSG, |
| NSS_WIFI_STORE_OTHER_PDEV_STAVAP_MSG, |
| NSS_WIFI_STA_KICKOUT_MSG, |
| NSS_WIFI_WNM_PEER_RX_ACTIVITY_MSG, |
| NSS_WIFI_PEER_STATS_MSG, |
| NSS_WIFI_WDS_VENDOR_MSG, |
| NSS_WIFI_TX_CAPTURE_SET_MSG, |
| NSS_WIFI_ALWAYS_PRIMARY_SET_MSG, |
| NSS_WIFI_FLUSH_HTT_CMD_MSG, |
| NSS_WIFI_CMD_MSG, |
| NSS_WIFI_ENABLE_OL_STATSV2_MSG, |
| NSS_WIFI_OL_PEER_TIME_MSG, |
| NSS_WIFI_PEER_SET_VLAN_ID_MSG, |
| NSS_WIFI_PEER_ISOLATION_MSG, |
| NSS_WIFI_PEER_AUTH_MSG, |
| NSS_WIFI_PEER_SECURITY_CFG, |
| NSS_WIFI_MAX_MSG |
| }; |
| |
| /* |
| * wifi_error_types |
| * Wi-Fi error types. |
| */ |
| enum wifi_error_types { |
| NSS_WIFI_EMSG_NONE = 0, |
| NSS_WIFI_EMSG_UNKNOWN, |
| NSS_WIFI_EMSG_MGMT_DLEN, |
| NSS_WIFI_EMSG_MGMT_SEND, |
| NSS_WIFI_EMSG_CE_INIT_FAIL, |
| NSS_WIFI_EMSG_PDEV_INIT_FAIL, |
| NSS_WIFI_EMSG_HTT_INIT_FAIL, |
| NSS_WIFI_EMSG_PEER_ADD, |
| NSS_WIFI_EMSG_WIFI_START_FAIL, |
| NSS_WIFI_EMSG_STATE_NOT_RESET, |
| NSS_WIFI_EMSG_STATE_NOT_INIT_DONE, |
| NSS_WIFI_EMSG_STATE_NULL_CE_HANDLE, |
| NSS_WIFI_EMSG_STATE_NOT_CE_READY, |
| NSS_WIFI_EMSG_STATE_NOT_HTT_READY, |
| NSS_WIFI_EMSG_FW_STATS_DLEN, |
| NSS_WIFI_EMSG_FW_STATS_SEND, |
| NSS_WIFI_EMSG_STATE_TX_INIT_FAILED, |
| NSS_WIFI_EMSG_IGMP_MLD_TOS_OVERRIDE_CFG, |
| NSS_WIFI_EMSG_PDEV_INVALID, |
| NSS_WIFI_EMSG_OTHER_PDEV_STAVAP_INVALID, |
| NSS_WIFI_EMSG_HTT_SEND_FAIL, |
| NSS_WIFI_EMSG_CE_RING_INIT, |
| NSS_WIFI_EMSG_NOTIFY_CB, |
| NSS_WIFI_EMSG_PEERID_INVALID, |
| NSS_WIFI_EMSG_PEER_INVALID, |
| NSS_WIFI_EMSG_UNKNOWN_CMD, |
| NSS_WIFI_EMSG_MAX, |
| }; |
| |
| /** |
| * nss_wifi_ext_data_pkt_type |
| * Exception types for Wi-Fi extended data. |
| */ |
| enum nss_wifi_ext_data_pkt_type { |
| NSS_WIFI_RX_EXT_INV_PEER_TYPE, |
| NSS_WIFI_RX_EXT_PKTLOG_TYPE, |
| NSS_WIFI_RX_STATS_V2_EXCEPTION, |
| NSS_WIFI_RX_MGMT_NULL_TYPE, |
| NSS_WIFI_RX_EXT_MAX_TYPE, |
| }; |
| |
| /** |
| * nss_wifi_cmd |
| * Wi-Fi commands. |
| */ |
| enum nss_wifi_cmd { |
| NSS_WIFI_FILTER_NEIGH_PEERS_CMD, |
| NSS_WIFI_MAX_CMD |
| }; |
| |
| /** |
| * nss_wifi_ce_ring_state_msg |
| * Internal state information for the copy engine ring. |
| */ |
| struct nss_wifi_ce_ring_state_msg { |
| uint32_t nentries; /**< Number of entries in the copy engine ring. */ |
| uint32_t nentries_mask; /**< Number of entry masks. */ |
| uint32_t sw_index; /**< Initial software index. */ |
| uint32_t write_index; /**< Initial write index. */ |
| uint32_t hw_index; /**< Initial hardware index. */ |
| uint32_t base_addr_CE_space; |
| /**< Physical address of the copy engine hardware ring. */ |
| uint32_t base_addr_owner_space; |
| /**< Virtual address of the copy engine hardware ring. */ |
| }; |
| |
| /** |
| * nss_wifi_ce_state_msg |
| * Internal state information for the copy engine. |
| */ |
| struct nss_wifi_ce_state_msg { |
| struct nss_wifi_ce_ring_state_msg src_ring; |
| /**< Source ring information. */ |
| struct nss_wifi_ce_ring_state_msg dest_ring; |
| /**< Destination ring information. */ |
| uint32_t ctrl_addr; |
| /**< Control address relative to PCIe BAR. */ |
| }; |
| |
| /** |
| * nss_wifi_init_msg |
| * Wi-Fi initialization data. |
| */ |
| struct nss_wifi_init_msg { |
| uint32_t radio_id ; /**< Radio index. */ |
| uint32_t pci_mem; /**< PCI memory address. */ |
| uint32_t target_type; /**< Wi-Fi target type. */ |
| uint32_t mu_mimo_enhancement_en; |
| /**< Enable MU-MIMO enhancement. */ |
| struct nss_wifi_ce_state_msg ce_tx_state; |
| /**< Transmit copy engine information. */ |
| struct nss_wifi_ce_state_msg ce_rx_state; |
| /**< Receive copy engine information. */ |
| |
| /** |
| * Indicates whether network processing is bypassed for this radio. |
| */ |
| uint32_t bypass_nw_process; |
| }; |
| |
| /** |
| * nss_wifi_htt_init_msg |
| * Wi-Fi Host-to-Target (HTT) initialization data. |
| */ |
| struct nss_wifi_htt_init_msg { |
| uint32_t radio_id; /**< Radio index. */ |
| uint32_t ringsize; /**< WLAN hardware MAC ring size. */ |
| uint32_t fill_level; /**< Initial fill level. */ |
| uint32_t paddrs_ringptr; |
| /**< Physical address of the WLAN MAC hardware ring. */ |
| uint32_t paddrs_ringpaddr; |
| /**< Virtual address of the WLAN MAC hardware ring. */ |
| uint32_t alloc_idx_vaddr; |
| /**< Virtual address of the hardware ring index. */ |
| uint32_t alloc_idx_paddr; |
| /**< Physical address of the hardware ring index. */ |
| }; |
| |
| /** |
| * nss_wifi_tx_init_msg |
| * Wi-Fi Tx initialization data. |
| */ |
| struct nss_wifi_tx_init_msg { |
| uint32_t radio_id; /**< Radio index. */ |
| uint32_t desc_pool_size; /**< Number of descriptor pools allocated. */ |
| uint32_t tx_desc_array; |
| /**< Host-initialized software WLAN descriptor pool memory. */ |
| uint32_t wlanextdesc_addr; |
| /**< Starting address of the WLAN MAC extenstion descriptor pool. */ |
| uint32_t wlanextdesc_size; |
| /**< Descriptor size of the WLAN MAC extenstion. */ |
| |
| /** |
| * Starting virtual address, as shared by the Wi-Fi firmware, for HTT Tx descriptor memory. |
| */ |
| uint32_t htt_tx_desc_base_vaddr; |
| |
| /** |
| * HTT Tx descriptor memory start physical address as shared by Wi-Fi firmware. |
| */ |
| uint32_t htt_tx_desc_base_paddr; |
| |
| uint32_t htt_tx_desc_offset; |
| /**< Descriptor size of the firmware shared HTT Tx. */ |
| uint32_t pmap_addr; |
| /**< Firmware shared peer or TID map. */ |
| }; |
| |
| /** |
| * nss_wifi_tx_queue_cfg_msg |
| * Wi-Fi Tx queue configuration. |
| */ |
| struct nss_wifi_tx_queue_cfg_msg { |
| uint32_t size; /**< Size of the Tx queue. */ |
| uint32_t range; /**< Peer range. */ |
| }; |
| |
| /** |
| * nss_wifi_tx_min_threshold_cfg_msg |
| * Minimum threshold configuration data for the Wi-Fi Tx queue. |
| */ |
| struct nss_wifi_tx_min_threshold_cfg_msg { |
| uint32_t min_threshold; /**< Minimum threshold value of Tx queue. */ |
| }; |
| |
| /** |
| * nss_wifi_rawsend_msg |
| * Information for Wi-Fi raw data. |
| */ |
| struct nss_wifi_rawsend_msg { |
| uint32_t radio_id ; /**< Radio index. */ |
| uint32_t len; /**< Size of the raw data. */ |
| uint32_t array[NSS_WIFI_RAWDATA_MAX_LEN]; |
| /**< Array of raw data. */ |
| }; |
| |
| /** |
| * nss_wifi_mgmtsend_msg |
| * Information for Wi-Fi management data. |
| */ |
| struct nss_wifi_mgmtsend_msg { |
| uint32_t desc_id; /**< Descriptor index. */ |
| uint32_t len; /**< Size of the management data. */ |
| uint8_t array[NSS_WIFI_MGMT_DATA_LEN]; |
| /**< Array of management data. */ |
| }; |
| |
| /** |
| * nss_wifi_fw_stats_msg |
| * Information for Wi-Fi firmware statistics. |
| */ |
| struct nss_wifi_fw_stats_msg { |
| uint32_t len; /**< Size of the statistics data. */ |
| uint8_t array[NSS_WIFI_FW_STATS_DATA_LEN]; |
| /**< Array of statistics data. */ |
| }; |
| |
| /** |
| * nss_wifi_monitor_set_filter_msg |
| * Wi-Fi Monitor mode for setting filter messages. |
| */ |
| struct nss_wifi_monitor_set_filter_msg { |
| uint32_t filter_type; /**< Type of Monitor mode filter. */ |
| }; |
| |
| /** |
| * nss_wifi_wds_peer_msg |
| * Wi-Fi WDS peer-specific message. |
| */ |
| struct nss_wifi_wds_peer_msg { |
| uint8_t dest_mac[ETH_ALEN]; /**< MAC address of the destination. */ |
| uint8_t reserved[2]; /**< Reserved for 4-byte alignment padding. */ |
| uint8_t peer_mac[ETH_ALEN]; /**< MAC address of the base peer. */ |
| uint8_t reserved1[2]; /**< Reserved for 4-byte alignment padding. */ |
| }; |
| |
| /** |
| * nss_wifi_tx_capture_msg |
| * Wi-Fi Tx data capture configuration. |
| */ |
| struct nss_wifi_tx_capture_msg { |
| uint32_t tx_capture_enable; /**< Enable or disable Tx data capture. */ |
| }; |
| |
| /** |
| * nss_wifi_reset_msg |
| * Message to reset the Wi-Fi Radio. |
| */ |
| struct nss_wifi_reset_msg { |
| uint32_t radio_id; /**< Radio index. */ |
| }; |
| |
| /** |
| * nss_wifi_stop_msg |
| * Message to stop the Wi-Fi Radio. |
| */ |
| struct nss_wifi_stop_msg { |
| uint32_t radio_id; /**< Radio index. */ |
| }; |
| |
| /** |
| * nss_wifi_pktlog_cfg_msg |
| * Configuration information for a Wi-Fi packet log. |
| */ |
| struct nss_wifi_pktlog_cfg_msg { |
| uint32_t enable; /**< Enables or disables a packet log. */ |
| uint32_t bufsize; /**< Size of the packet log buffer. */ |
| uint32_t hdrsize; /**< Size of the packet log header. */ |
| uint32_t msdu_id_offset; /**< Offset for the MSDU ID in the message. */ |
| }; |
| |
| /** |
| * nss_wifi_ol_stats_cfg_msg |
| * Wi-Fi offload statistics configuration. |
| */ |
| struct nss_wifi_ol_stats_cfg_msg { |
| uint32_t stats_cfg; /**< Enable or disable offload statistics configuration. */ |
| }; |
| |
| /** |
| * nss_wifi_enable_perpkt_txstats_msg |
| * Wi-Fi per-packet Tx statistics configuration. |
| */ |
| struct nss_wifi_enable_perpkt_txstats_msg { |
| uint32_t perpkt_txstats_flag; /**< Enable or disable Tx statistics. */ |
| }; |
| |
| /** |
| * nss_wifi_peer_txtime_stats |
| * Peer Tx timestamp statistics per TID. |
| */ |
| struct nss_wifi_peer_txtime_stats { |
| uint32_t sum_tx; /**< Sum of sojourn for each packet. */ |
| uint32_t sum_msdus; /**< Number of MSDU per peer per TID. */ |
| }; |
| |
| /** |
| * nss_wifi_peer_tstamp_stats |
| * Peer ID and timestamp statistics per TID. |
| */ |
| struct nss_wifi_peer_tstamp_stats { |
| uint32_t peer_id; /**< TID value. */ |
| struct nss_wifi_peer_txtime_stats sum[NSS_WIFI_TX_NUM_TOS_TIDS]; |
| /**< Timestamps. */ |
| uint32_t avg[NSS_WIFI_TX_NUM_TOS_TIDS]; /**< Exponential weighted average. */ |
| }; |
| |
| /** |
| * nss_wifi_ol_peer_time_msg |
| * NSS Wi-Fi Tx timestamp message for n number of peers. |
| */ |
| struct nss_wifi_ol_peer_time_msg { |
| uint32_t npeers; /**< Number of peers. */ |
| struct nss_wifi_peer_tstamp_stats tstats[1]; |
| /**< One instance of struct. */ |
| }; |
| |
| /** |
| * nss_wifi_enable_ol_statsv2 |
| * Wi-Fi enable/disable send packet to host. |
| */ |
| struct nss_wifi_enable_ol_statsv2 { |
| uint32_t enable_ol_statsv2; /**< Flag to send packet to host. */ |
| }; |
| |
| /** |
| * nss_wifi_dbdc_process_enable_msg |
| * Wi-Fi DBDC repeater process configuration. |
| */ |
| struct nss_wifi_dbdc_process_enable_msg { |
| uint32_t dbdc_process_enable; /**< Enable or disable the DBDC process. */ |
| }; |
| |
| /** |
| * nss_wifi_primary_radio_set_msg |
| * Wi-Fi primary radio configuration message. |
| */ |
| struct nss_wifi_primary_radio_set_msg { |
| /** |
| * Enable/Disable Flag to set the current radio as primary. |
| */ |
| uint32_t flag; |
| }; |
| |
| /** |
| * nss_wifi_always_primary_set_msg |
| * Always set the Wi-Fi primary radio. |
| * |
| * The primary radio is set using the nss_wifi_primary_radio_set_msg flag. |
| * When the nss_wifi_always_primary_set_msg flag is set: |
| * - Tx -- Do not drop a unicast packet on the secondary station the VAP. Instead, give that |
| * packet to the primary station the VAP. |
| * - Rx -- Do not drop a received unicast packet on the secondary station the VAP. Instead, |
| * give that packet to the bridge by changing the SKB device as the primary station |
| * VAP. |
| * |
| * Primary usage of this feature is to avoid a loopback. |
| */ |
| struct nss_wifi_always_primary_set_msg { |
| /** |
| * Always use the primary radio for Tx and Rx in the DBDC repeater process. |
| */ |
| uint32_t flag; |
| }; |
| |
| /** |
| * nss_wifi_force_client_mcast_traffic_set_msg |
| * Wi-Fi message to set the client multi-cast traffic for a radio. |
| */ |
| struct nss_wifi_force_client_mcast_traffic_set_msg { |
| uint32_t flag; /**< Flag to force set the multi-cast traffic in a radio. */ |
| }; |
| |
| /** |
| * wifi_store_other_pdev_stavap_msg |
| * Store the other radio's station vap. |
| */ |
| struct nss_wifi_store_other_pdev_stavap_msg { |
| int stavap_ifnum; /**< Station VAP interface number of the other radio. */ |
| }; |
| |
| /** |
| * nss_wifi_pl_metadata |
| * Wi-Fi packet log metadata. |
| */ |
| struct nss_wifi_pl_metadata { |
| uint32_t len; /**< Length of single buffer in MSDU. */ |
| uint32_t msdu_len; /**< Total MSDU length. */ |
| uint16_t da_tail; /**< Destination address tail bytes. */ |
| uint16_t sa_tail; /**< Source address tail bytes. */ |
| uint8_t vdev_id; /**< Virtual device ID. */ |
| uint8_t res1; /**< Reserved for alignment. */ |
| uint16_t res2; /**< Reserved for alignment. */ |
| }; |
| |
| /** |
| * nss_wifi_rx_ext_metadata |
| * Wi-Fi Rx extended data plane metadata. |
| */ |
| struct nss_wifi_rx_ext_metadata{ |
| uint16_t peer_id; /**< ID of associated Peer. */ |
| uint8_t htt_rx_status; /**< Rx status of the HTT. */ |
| uint8_t type; /**< Reserved for 4 byte alignment. */ |
| }; |
| |
| /** |
| * nss_wifi_mc_enhance_stats |
| * Wi-Fi multicast enhancement statistics. |
| */ |
| struct nss_wifi_mc_enhance_stats { |
| uint32_t rcvd; /**< Number of multicast frames received for conversion. */ |
| |
| /** |
| * Number of unicast frames sent as part of multicast enhancement conversion. |
| */ |
| uint32_t ucast_converted; |
| |
| /** |
| * Number of multicast enhancement frames dropped because of an allocation |
| * failure. |
| */ |
| uint32_t alloc_fail; |
| |
| /** |
| * Number of multicast enhancement frames dropped because of an enqueue failure. |
| */ |
| uint32_t enqueue_fail; |
| |
| /** |
| * Number of multicast enhancement frames dropped because of a copy failure. |
| */ |
| uint32_t copy_fail; |
| |
| /** |
| * Number of multicast enhancement frames dropped because of a peer flow control |
| * send failure. |
| */ |
| uint32_t peer_flow_ctrl_send_fail; |
| |
| /** |
| * Number of multicast enhancement frames dropped when the destination MAC |
| * address is the same as the source MAC address. |
| */ |
| uint32_t loopback_err; |
| |
| /** |
| * Number of multicast enhancement buffer frames dropped because of an empty |
| * destination MAC address. |
| */ |
| uint32_t dst_addr_err; |
| }; |
| |
| /** |
| * nss_wifi_stats_sync_msg |
| * Wi-Fi synchronization statistics. |
| */ |
| struct nss_wifi_stats_sync_msg { |
| struct nss_cmn_node_stats node_stats; /**< Common node statistics. */ |
| uint32_t tx_transmit_dropped; |
| /**< Number of packets dropped during transmission. */ |
| uint32_t tx_transmit_completions; |
| /**< Number of packets for which Tx completions are received. */ |
| uint32_t tx_mgmt_rcv_cnt; |
| /**< Number of management packets received from the host for Tx. */ |
| uint32_t tx_mgmt_pkts; |
| /**< Number of management packets transmitted over Wi-Fi. */ |
| |
| /** |
| * Number of management packets dropped because of a Tx failure. |
| */ |
| uint32_t tx_mgmt_dropped; |
| |
| /** |
| * Number of management packets for which Tx completions are received. |
| */ |
| uint32_t tx_mgmt_completions; |
| |
| /** |
| * Number of packets for which an Tx enqueue failed because of an invalid peer. |
| */ |
| uint32_t tx_inv_peer_enq_cnt; |
| |
| /** |
| * Number of packets with an invalid peer ID received from Wi-Fi. |
| */ |
| uint32_t rx_inv_peer_rcv_cnt; |
| |
| uint32_t rx_pn_check_failed; |
| /**< Number of Rx packets that failed a packet number check. */ |
| |
| /** |
| * Number of Rx packets that the Wi-Fi driver successfully processed. |
| */ |
| uint32_t rx_pkts_deliverd; |
| |
| /** |
| * Number of Rx bytes that the Wi-Fi driver successfully processed. |
| */ |
| uint32_t rx_bytes_deliverd; |
| |
| uint32_t tx_bytes_transmit_completions; |
| /**< Number of bytes for which Tx completions are received. */ |
| |
| /** |
| * Number of unaligned data packets that were received from Wi-Fi and dropped. |
| */ |
| uint32_t rx_deliver_unaligned_drop_cnt; |
| |
| uint32_t tidq_enqueue_cnt[NSS_WIFI_TX_NUM_TOS_TIDS]; |
| /**< Number of packets enqueued to TID Queue (TIDQ). */ |
| uint32_t tidq_dequeue_cnt[NSS_WIFI_TX_NUM_TOS_TIDS]; |
| /**< Number of packets dequeued from TIDQ. */ |
| uint32_t tidq_enqueue_fail_cnt[NSS_WIFI_TX_NUM_TOS_TIDS]; |
| /**< Number of enqueue failures. */ |
| uint32_t tidq_ttl_expire_cnt[NSS_WIFI_TX_NUM_TOS_TIDS]; |
| /**< Number of packets expired from TIDQ. */ |
| uint32_t tidq_dequeue_req_cnt[NSS_WIFI_TX_NUM_TOS_TIDS]; |
| /**< Number of dequeue requests from the Wi-Fi firmware. */ |
| uint32_t total_tidq_depth; |
| /**< Current queue Depth. */ |
| |
| /** |
| * Total number of HTT fetch messages received from the Wi-Fi firmware. |
| */ |
| uint32_t rx_htt_fetch_cnt; |
| |
| /** |
| * Total number of packets that bypassed TIDQ and are sent to the Wi-Fi |
| * firmware. |
| */ |
| uint32_t total_tidq_bypass_cnt; |
| |
| /** |
| * Total number of packets dropped because of a global queue full condition. |
| */ |
| uint32_t global_q_full_cnt; |
| |
| /** |
| * Total number of packets dropped because of a TID queue full condition. |
| */ |
| uint32_t tidq_full_cnt; |
| |
| struct nss_wifi_mc_enhance_stats mc_enhance_stats; |
| /**< Multicast enhancement statistics. */ |
| |
| /** |
| * Number of times a group entry was not present for multicast enhancement. |
| */ |
| uint32_t mc_enhance_group_entry_miss; |
| |
| /** |
| * Number of times a deny list was hit during multicast enhancement. |
| */ |
| uint32_t mc_enhance_denylist_hit; |
| |
| /** |
| * Total number of data packets dropped for an unauthorized peer. |
| */ |
| uint32_t peer_unauth_rx_pkt_drop; |
| }; |
| |
| /** |
| * nss_wifi_peer_freelist_append_msg |
| * Information for creating a Wi-Fi peer freelist. |
| */ |
| struct nss_wifi_peer_freelist_append_msg { |
| uint32_t addr; /**< Starting address of the peer freelist pool. */ |
| uint32_t length; /**< Size of the peer freelist pool. */ |
| uint32_t num_peers; /**< Maximum peer entries supported in the pool. */ |
| }; |
| |
| /** |
| * nss_wifi_rx_reorder_array_freelist_append_msg |
| * Information for creating a Wi-Fi TIDQ peer freelist array. |
| */ |
| struct nss_wifi_rx_reorder_array_freelist_append_msg { |
| uint32_t addr; /**< Starting address of the TIDQ freelist pool. */ |
| uint32_t length; /**< Size of the TIDQ freelist pool. */ |
| |
| /** |
| * Maximum number of Rx reorder array entries supported in the freelist pool. |
| */ |
| uint32_t num_rra; |
| }; |
| |
| /** |
| * wifi_bs_peer_inactivity |
| * Active state information of the peer. |
| */ |
| struct nss_wifi_bs_peer_activity { |
| uint16_t nentries; /**< Number of entries in the peer ID array. */ |
| uint16_t peer_id[1]; /**< Array holding the peer IDs. */ |
| }; |
| |
| /** |
| * nss_wifi_msdu_ttl_set_msg |
| * Information for setting the Wi-Fi MSDU time-to-live value. |
| */ |
| struct nss_wifi_msdu_ttl_set_msg { |
| uint32_t msdu_ttl; /**< TTL value to be set. */ |
| }; |
| |
| /** |
| * nss_wifi_rx_vow_extstats_set_msg |
| * VoW extended statitics set. |
| */ |
| struct nss_wifi_rx_vow_extstats_set_msg { |
| uint32_t vow_extstats_en; /**< VoW extended statistics enable. */ |
| }; |
| |
| /** |
| * nss_wifi_igmp_mld_override_tos_msg |
| * Information for overriding TOS. |
| */ |
| struct nss_wifi_igmp_mld_override_tos_msg { |
| uint8_t igmp_mld_ovride_tid_en; |
| /**< Flag to enable TID override feature for IGMP/MLD configuration. */ |
| uint8_t igmp_mld_ovride_tid_val; |
| /**< Value of TID to be overriden for IGMP/MLD. */ |
| uint8_t res[2]; /**< Reserved for 4-byte alignment. */ |
| }; |
| |
| /** |
| * nss_wifi_peer_ol_stats |
| * Wi-Fi offload statistics. |
| */ |
| struct nss_wifi_peer_ol_stats { |
| uint32_t peer_id; /**< ID of associated peer. */ |
| uint32_t seq_num; /**< Sequence number of the PPDU. */ |
| uint32_t tx_unaggr; /**< Number of unaggregated packets transmitted. */ |
| uint32_t tx_aggr; /**< Number of aggregated packets transmitted. */ |
| uint32_t tx_mcast; /**< Number of multicast packets sent. */ |
| uint32_t tx_ucast; /**< Number of unicast packets sent. */ |
| uint32_t tx_data; /**< Number data packets sent. */ |
| uint32_t tx_bytes; /**< Number of bytes transmitted. */ |
| uint32_t tx_fail; /**< Number of failed Tx packets. */ |
| uint32_t thrup_bytes; /**< Number of throughput bytes. */ |
| uint32_t tx_bcast_pkts; /**< Number of broadcast packets sent. */ |
| uint32_t tx_bcast_bytes;/**< Number of broadcast bytes sent. */ |
| uint32_t tx_mgmt; /**< Number of Tx management frames. */ |
| uint32_t tx_wme[NSS_WIFI_WME_NUM_AC]; |
| /**< Data frames transmitted per AC. */ |
| uint32_t rx_wme[NSS_WIFI_WME_NUM_AC]; |
| /**< Data frames received per AC. */ |
| uint32_t ppdu_retries; /**< Number of PPDU retries. */ |
| uint32_t rssi_chains[NSS_WIFI_MAX_RSSI_CHAINS]; |
| /**< Acknowledgment RSSI per chain. */ |
| uint32_t rx_msdus; /**< Number of MSDUs received. */ |
| uint32_t rx_bytes; /**< Number of bytes received. */ |
| uint32_t rx_mpdus; /**< Number of MPDUs received. */ |
| uint32_t rx_retries; /**< Number of MPDU retries. */ |
| }; |
| |
| /** |
| * nss_wifi_ol_stats_msg |
| * Wi-Fi offload statistics. |
| */ |
| struct nss_wifi_ol_stats_msg { |
| uint32_t bawadv_cnt; /**< Number of block-acknowledgment window advancements. */ |
| uint32_t bcn_cnt; /**< Number of beacons. */ |
| uint32_t npeers; /**< Number of peer statistics entries. */ |
| struct nss_wifi_peer_ol_stats peer_ol_stats[1]; |
| /**< Array to hold the peer statistics. */ |
| }; |
| |
| /** |
| * nss_wifi_sta_kickout_msg |
| * Station kickout message from NSS firmware. |
| */ |
| struct nss_wifi_sta_kickout_msg { |
| uint32_t peer_id; /**< Peer ID. */ |
| }; |
| |
| /** |
| * nss_wifi_peer_isolation_msg |
| * Peer isolation message |
| */ |
| struct nss_wifi_peer_isolation_msg { |
| uint16_t peer_id; /**< Peer ID. */ |
| uint16_t isolation; /**< Isolation enabled/disabled. */ |
| }; |
| |
| /* |
| * nss_wifi_peer_auth_msg |
| * Peer authentication flag status. |
| */ |
| struct nss_wifi_peer_auth_msg { |
| uint16_t peer_id; /**< Peer ID. */ |
| uint16_t auth_flag; /**< Peer authentication flag. */ |
| }; |
| |
| /** |
| * nss_wifi_wnm_peer_rx_activity_msg |
| * Receive active state information for the peer. |
| */ |
| struct nss_wifi_wnm_peer_rx_activity_msg { |
| uint16_t nentries; /**< Number of entries. */ |
| |
| /** |
| * Array to hold the peer IDs for which the activity is reported. |
| */ |
| uint16_t peer_id[NSS_WIFI_MAX_PEER]; |
| }; |
| |
| /** |
| * nss_wifi_peer_security_type_msg |
| * Wi-fi security type message. |
| */ |
| struct nss_wifi_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_WIFI_MIC_KEY_LEN]; /**< MIC key. */ |
| }; |
| |
| /** |
| * nss_wifi_append_metaheader |
| * Append metaheader after pbuf->data for stats_v2. |
| */ |
| struct nss_wifi_append_statsv2_metahdr { |
| uint32_t rxstatsmagic; /**< Magic to be verified on host. */ |
| uint32_t seq_number; /**< Sequence number of packets sent from NSS. */ |
| uint16_t peer_id; /**< Peer ID of peer. */ |
| uint16_t num_msdus; /**< Number of MSDU in PPDU. */ |
| uint16_t num_retries; /**< Number of retries in PPDU. */ |
| uint16_t num_mpdus; /**< Number of MPDU in PPDU. */ |
| uint32_t num_bytes; /**< Number of bytes in PPDU. */ |
| }; |
| |
| /** |
| * nss_wifi_peer_stats_msg |
| * Wi-Fi peer statistics. |
| */ |
| struct nss_wifi_peer_stats_msg { |
| uint32_t peer_id; /**< Peer ID. */ |
| uint32_t tidq_byte_cnt[NSS_WIFI_TX_NUM_TOS_TIDS]; |
| /**< Number of bytes in each TIDQ. */ |
| uint32_t tidq_queue_max[NSS_WIFI_TX_NUM_TOS_TIDS]; |
| /**< Maximum depth for the TID queue. */ |
| uint32_t tidq_enqueue_cnt[NSS_WIFI_TX_NUM_TOS_TIDS]; |
| /**< Number of packets enqueued to the TIDQ. */ |
| uint32_t tidq_dequeue_cnt[NSS_WIFI_TX_NUM_TOS_TIDS]; |
| /**< Number of packets dequeued from the TIDQ. */ |
| uint32_t tidq_ttl_expire_cnt[NSS_WIFI_TX_NUM_TOS_TIDS]; |
| /**< Number of expired packets from the TIDQ. */ |
| uint32_t tidq_dequeue_req_cnt[NSS_WIFI_TX_NUM_TOS_TIDS]; |
| /**< Number of dequeue requests from the Wi-Fi firmware. */ |
| |
| /** |
| * Total number of packets dropped because the TID queue is full. |
| */ |
| uint32_t tidq_full_cnt[NSS_WIFI_TX_NUM_TOS_TIDS]; |
| }; |
| |
| /** |
| * nss_wifi_wds_extn_peer_cfg_msg |
| * Configuration information when the WDS extension is enabled. |
| */ |
| struct nss_wifi_wds_extn_peer_cfg_msg { |
| uint8_t mac_addr[ETH_ALEN]; /**< Mac address of the peer. */ |
| uint8_t wds_flags; /**< WDS flags populated from the host. */ |
| uint8_t reserved; /**< Alignment padding. */ |
| uint16_t peer_id; /**< ID of the peer. */ |
| }; |
| |
| /** |
| * nss_wifi_cmd_msg |
| * Wi-Fi radio specific special commands to NSS Firmware |
| */ |
| struct nss_wifi_cmd_msg { |
| uint32_t cmd; /**< Type of command message. */ |
| uint32_t value; /**< Value of the command. */ |
| }; |
| |
| /** |
| * nss_wifi_msg |
| * Data for sending and receiving Wi-Fi messages. |
| */ |
| struct nss_wifi_msg { |
| struct nss_cmn_msg cm; /**< Common message header. */ |
| |
| /** |
| * Message Payload. |
| */ |
| union { |
| struct nss_wifi_init_msg initmsg; |
| /**< Wi-Fi Radio initialization message. */ |
| struct nss_wifi_stop_msg stopmsg; |
| /**< Wi-Fi Radio stop message. */ |
| struct nss_wifi_reset_msg resetmsg; |
| /**< Wi-Fi Radio reset message. */ |
| struct nss_wifi_htt_init_msg httinitmsg; |
| /**< HTT initialization message. */ |
| struct nss_wifi_tx_init_msg pdevtxinitmsg; |
| /**< Tx initialization message. */ |
| struct nss_wifi_rawsend_msg rawmsg; |
| /**< Wi-Fi raw data send message. */ |
| struct nss_wifi_mgmtsend_msg mgmtmsg; |
| /**< Wi-Fi management data send message. */ |
| struct nss_wifi_wds_peer_msg pdevwdspeermsg; |
| /**< WDS peer-specific message. */ |
| struct nss_wifi_stats_sync_msg statsmsg; |
| /**< Synchronization statistics. */ |
| struct nss_wifi_peer_freelist_append_msg peer_freelist_append; |
| /**< Message for creating/appending peer freelist memory. */ |
| |
| /** |
| * Message for creating/appending a reorder array for Wi-Fi Receive Defragmentation. |
| */ |
| struct nss_wifi_rx_reorder_array_freelist_append_msg rx_reorder_array_freelist_append; |
| |
| struct nss_wifi_fw_stats_msg fwstatsmsg; |
| /**< Wi-Fi firmware statistics information message. */ |
| struct nss_wifi_monitor_set_filter_msg monitor_filter_msg; |
| /**< Set the filter message for Monitor mode. */ |
| struct nss_wifi_bs_peer_activity peer_activity; |
| /**< Message to get the active peer for a radio. */ |
| struct nss_wifi_msdu_ttl_set_msg msdu_ttl_set_msg; |
| /**< Set MSDU time-to-live. */ |
| struct nss_wifi_rx_vow_extstats_set_msg vow_extstats_msg; |
| /**< Enable VoW extended statistics message. */ |
| struct nss_wifi_pktlog_cfg_msg pcm_msg; |
| /**< Packet log configuration message. */ |
| struct nss_wifi_enable_perpkt_txstats_msg ept_msg; |
| /**< Enable or disable per-packet Tx statistics. */ |
| struct nss_wifi_igmp_mld_override_tos_msg wigmpmldtm_msg; |
| /**< Message to enable TID override for IGMP/MLD. */ |
| struct nss_wifi_ol_stats_cfg_msg scm_msg; |
| /**< Enable or disable offload statistics configuration. */ |
| struct nss_wifi_ol_stats_msg ol_stats_msg; |
| /**< Offload statistics. */ |
| struct nss_wifi_tx_queue_cfg_msg wtxqcm; |
| /**< Tx queue configuration. */ |
| |
| /** |
| * Minimum threshold configuration data for the Tx queue. |
| */ |
| struct nss_wifi_tx_min_threshold_cfg_msg wtx_min_threshold_cm; |
| |
| struct nss_wifi_dbdc_process_enable_msg dbdcpe_msg; |
| /**< Enable or disable the DBDC repeater process. */ |
| struct nss_wifi_primary_radio_set_msg wprs_msg; |
| /**< Set the current radio as the primary radio. */ |
| struct nss_wifi_force_client_mcast_traffic_set_msg wfcmts_msg; |
| /**< Message to force multicast traffic for a radio. */ |
| struct nss_wifi_store_other_pdev_stavap_msg wsops_msg; |
| /**< Message to store the other radio's station vap. */ |
| struct nss_wifi_sta_kickout_msg sta_kickout_msg; |
| /**< Station kickout message from NSS firmware. */ |
| struct nss_wifi_wnm_peer_rx_activity_msg wprm; |
| /**< Rx activity for the peer. */ |
| struct nss_wifi_peer_stats_msg peer_stats_msg; |
| /**< Peer statistics message. */ |
| struct nss_wifi_wds_extn_peer_cfg_msg wpeercfg; |
| /**< Configuartion information message when the WDS extension is enabled. */ |
| struct nss_wifi_tx_capture_msg tx_capture_msg; |
| /**< Enable or disable Tx data capture. */ |
| struct nss_wifi_always_primary_set_msg waps_msg; |
| /**< Message to always set the current radio as primary radio. */ |
| struct nss_wifi_cmd_msg wcmdm; |
| /**< Pdev command information. */ |
| struct nss_wifi_enable_ol_statsv2 wesh_msg; |
| /**< Enable version 2 transmit/receive statistics. */ |
| struct nss_wifi_ol_peer_time_msg wopt_msg; |
| /**< Send per peer/TID timestamp statistics to host. */ |
| struct nss_wifi_peer_isolation_msg isolation_msg; |
| /**< Enable or disable peer isolation. */ |
| struct nss_wifi_peer_auth_msg auth_msg; |
| /**< Enable or disable peer authorization. */ |
| struct nss_wifi_peer_security_type_msg securitymsg; |
| /**< Wifili peer security message. */ |
| } msg; /**< Message Payload. */ |
| }; |
| |
| /** |
| * nss_wifi_get_context |
| * Gets the Wi-Fi context used in NSS GRE transmit. |
| * |
| * @return |
| * Pointer to the NSS core context. |
| */ |
| extern struct nss_ctx_instance *nss_wifi_get_context(void); |
| |
| /** |
| * nss_wifi_tx_msg |
| * Sends a Wi-Fi message to the NSS firmware. |
| * |
| * @datatypes |
| * nss_ctx_instance \n |
| * nss_wifi_if_msg |
| * |
| * @param[in] nss_ctx Pointer to the NSS context. |
| * @param[in] msg Pointer to the message data. |
| * |
| * @return |
| * Status of the Tx operation. |
| */ |
| extern nss_tx_status_t nss_wifi_tx_msg(struct nss_ctx_instance *nss_ctx, struct nss_wifi_msg *msg); |
| |
| /** |
| * Callback function for receiving Wi-Fi messages. |
| * |
| * @datatypes |
| * nss_wifi_msg |
| * |
| * @param[in] app_data Pointer to the application context of the message. |
| * @param[in] msg Pointer to the message data. |
| */ |
| typedef void (*nss_wifi_msg_callback_t)(void *app_data, struct nss_wifi_msg *msg); |
| |
| /** |
| * Callback function for receiving 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. |
| */ |
| typedef void (*nss_wifi_callback_t)(struct net_device *netdev, struct sk_buff *skb, struct napi_struct *napi); |
| |
| /** |
| * nss_register_wifi_if |
| * Registers the Wi-Fi interface with the NSS for sending and receiving messages. |
| * |
| * @datatypes |
| * nss_wifi_callback_t \n |
| * nss_wifi_msg_callback_t \n |
| * net_device |
| * |
| * @param[in] if_num NSS interface number. |
| * @param[in] wifi_callback Callback for the 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 |
| * Pointer to the NSS core context. |
| */ |
| struct nss_ctx_instance *nss_register_wifi_if(uint32_t if_num, nss_wifi_callback_t wifi_callback, |
| nss_wifi_callback_t wifi_ext_callback, nss_wifi_msg_callback_t event_callback, struct net_device *netdev, uint32_t features); |
| |
| /** |
| * nss_unregister_wifi_if |
| * Deregisters the Wi-Fi interface from the NSS. |
| * |
| * @param[in] if_num NSS interface number. |
| * |
| * @return |
| * None. |
| */ |
| void nss_unregister_wifi_if(uint32_t if_num); |
| |
| /** |
| * @} |
| */ |
| |
| #endif /* __NSS_WIFI_H */ |