blob: 1d881603409eb97cb8109f767b8cc5acc2d0a277 [file] [log] [blame]
/*
**************************************************************************
* Copyright (c) 2015-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_vdev.h
* NSS-to-HLOS Wi-Fi virtual device interface definitions.
*/
#ifndef __NSS_WIFI_VDEV_H
#define __NSS_WIFI_VDEV_H
/**
* @addtogroup nss_wifi_vdev_subsystem
* @{
*/
#define NSS_WIFI_HTT_TRANSFER_HDRSIZE_WORD 6 /**< Size of the Host-To-Target (HTT) message transfer header. */
#define NSS_WIFI_VDEV_PER_PACKET_METADATA_OFFSET 4
/**< Offset of the metadata in a virtual device message. */
#define NSS_WIFI_VDEV_DSCP_MAP_LEN 64 /**< Length of the DSCP MAP field. */
#define NSS_WIFI_VDEV_IPV6_ADDR_LENGTH 16 /**< Size of the IPv6 address field. */
#define NSS_WIFI_MAX_SRCS 4 /**< Maximum number of multicast sources. */
#define NSS_WIFI_VDEV_MAX_ME_ENTRIES 32 /**< Maximum number of multicast enhancement entries. */
/**
* nss_wifi_vdev_msg_types
* Wi-Fi virtual device messages.
*/
enum nss_wifi_vdev_msg_types {
NSS_WIFI_VDEV_INTERFACE_CONFIGURE_MSG = NSS_IF_MAX_MSG_TYPES + 1,
NSS_WIFI_VDEV_INTERFACE_UP_MSG,
NSS_WIFI_VDEV_INTERFACE_DOWN_MSG,
NSS_WIFI_VDEV_INTERFACE_CMD_MSG,
NSS_WIFI_VDEV_SNOOPLIST_GRP_LIST_CREATE_MSG,
NSS_WIFI_VDEV_SNOOPLIST_GRP_LIST_DELETE_MSG,
NSS_WIFI_VDEV_SNOOPLIST_GRP_MEMBER_ADD_MSG,
NSS_WIFI_VDEV_SNOOPLIST_GRP_MEMBER_REMOVE_MSG,
NSS_WIFI_VDEV_SNOOPLIST_GRP_MEMBER_UPDATE_MSG,
NSS_WIFI_VDEV_SNOOPLIST_DENY_MEMBER_ADD_MSG,
NSS_WIFI_VDEV_SNOOPLIST_DENY_LIST_DELETE_MSG,
NSS_WIFI_VDEV_SNOOPLIST_DENY_LIST_DUMP_MSG,
NSS_WIFI_VDEV_SNOOPLIST_DUMP_MSG,
NSS_WIFI_VDEV_SNOOPLIST_RESET_MSG,
NSS_WIFI_VDEV_SPECIAL_DATA_TX_MSG,
NSS_WIFI_VDEV_VOW_DBG_CFG_MSG,
NSS_WIFI_VDEV_VOW_DBG_STATS_REQ_MSG,
NSS_WIFI_VDEV_DSCP_TID_MAP_MSG,
NSS_WIFI_VDEV_SNOOPLIST_TOGGLE_MSG,
NSS_WIFI_VDEV_UPDATECHDR_MSG,
NSS_WIFI_VDEV_ME_SYNC_MSG,
NSS_WIFI_VDEV_STATS_MSG,
NSS_WIFI_VDEV_SET_NEXT_HOP,
NSS_WIFI_VDEV_DSCP_TID_MAP_ID_MSG,
NSS_WIFI_VDEV_EXTAP_ADD_ENTRY,
NSS_WIFI_VDEV_EXTAP_REMOVE_ENTRY,
NSS_WIFI_VDEV_QWRAP_PSTA_DELETE_ENTRY,
NSS_WIFI_VDEV_QWRAP_PSTA_ADD_ENTRY,
NSS_WIFI_VDEV_QWRAP_ISOLATION_ENABLE,
NSS_WIFI_VDEV_SET_PEER_NEXT_HOP,
NSS_WIFI_VDEV_CONFIG_VLAN_ID_MSG,
NSS_WIFI_VDEV_CONFIG_VLAN_MODE_MSG,
NSS_WIFI_VDEV_INTERFACE_RECOVERY_RESET_MSG,
NSS_WIFI_VDEV_INTERFACE_RECOVERY_RECONF_MSG,
NSS_WIFI_VDEV_SET_GROUP_KEY,
NSS_WIFI_VDEV_HMMC_MEMBER_ADD_MSG,
NSS_WIFI_VDEV_HMMC_MEMBER_DEL_MSG,
NSS_WIFI_VDEV_MAX_MSG
};
/**
* nss_wifi_vdev_err_types
* Error types for a Wi-Fi virtual device.
*/
enum nss_wifi_vdev_err_types {
NSS_WIFI_VDEV_ENONE,
NSS_WIFI_VDEV_EUNKNOWN_MSG,
NSS_WIFI_VDEV_EINV_VID_CONFIG,
NSS_WIFI_VDEV_EINV_EPID_CONFIG,
NSS_WIFI_VDEV_EINV_DL_CONFIG,
NSS_WIFI_VDEV_EINV_CMD,
NSS_WIFI_VDEV_EINV_ENCAP,
NSS_WIFI_VDEV_EINV_DECAP,
NSS_WIFI_VDEV_EINV_RX_NXTN,
NSS_WIFI_VDEV_EINV_VID_INDEX,
NSS_WIFI_VDEV_EINV_MC_CFG,
NSS_WIFI_VDEV_SNOOPTABLE_FULL,
NSS_WIFI_VDEV_SNOOPTABLE_ENOMEM,
NSS_WIFI_VDEV_SNOOPTABLE_GRP_LIST_UNAVAILABLE,
NSS_WIFI_VDEV_SNOOPTABLE_GRP_MEMBER_UNAVAILABLE,
NSS_WIFI_VDEV_SNOOPTABLE_PEER_UNAVAILABLE,
NSS_WIFI_VDEV_SNOOPTABLE_GRP_LIST_ENOMEM,
NSS_WIFI_VDEV_SNOOPTABLE_GRP_LIST_EXIST,
NSS_WIFI_VDEV_ME_ENOMEM,
NSS_WIFI_VDEV_EINV_NAWDS_CFG,
NSS_WIFI_VDEV_EINV_EXTAP_CFG,
NSS_WIFI_VDEV_EINV_VOW_DBG_CFG,
NSS_WIFI_VDEV_EINV_DSCP_TID_MAP,
NSS_WIFI_VDEV_INVALID_ETHER_TYPE,
NSS_WIFI_VDEV_SNOOPTABLE_GRP_MEMBER_EXIST,
NSS_WIFI_VDEV_ME_INVALID_NSRCS,
NSS_WIFI_VDEV_EINV_RADIO_ID,
NSS_WIFI_VDEV_RADIO_NOT_PRESENT,
NSS_WIFI_VDEV_CHDRUPD_FAIL,
NSS_WIFI_VDEV_ME_DENY_GRP_MAX_RCHD,
NSS_WIFI_VDEV_EINV_NEXT_HOP,
NSS_WIFI_VDEV_EINV_DSCP_TID_MAP_ID,
NSS_WIFI_VDEV_EINV_TID_VALUE,
NSS_WIFI_VDEV_EINV_EXTAP_TABLE,
NSS_WIFI_VDEV_EXTAP_ENTRY_UPDATE_FAIL,
NSS_WIFI_VDEV_QWRAP_PSTA_ADD_FAIL,
NSS_WIFI_VDEV_QWRAP_PSTA_DEL_FAIL,
NSS_WIFI_VDEV_QWRAP_ISOLATION_EN_FAIL,
NSS_WIFI_VDEV_QWRAP_ALLOC_FAIL,
NSS_WIFI_VDEV_PEER_NOT_FOUND_BY_MAC,
NSS_WIFI_VDEV_PEER_NEXT_HOP_NOT_FOUND,
NSS_VDEV_EUNKNOWN_NEXT_HOP,
NSS_WIFI_VDEV_VLAN_ID_CONFIG_FAIL,
NSS_WIFI_VDEV_VLAN_MODE_CONFIG_FAIL,
NSS_WIFI_VDEV_RECOVERY_RESET_FAIL,
NSS_WIFI_VDEV_RECOVERY_RECONF_FAIL,
NSS_WIFI_VDEV_CONFIG_GROUP_KEY_FAIL,
NSS_WIFI_VDEV_MULTIPASS_NOT_ENABLED,
NSS_WIFI_VDEV_ALLOC_VLAN_MAP_FAILED,
NSS_WIFI_VDEV_MTU_CHANGE_FAIL,
NSS_WIFI_VDEV_MAC_ADDR_CHANGE_FAIL,
NSS_WIFI_VDEV_PPE_PORT_CREATE_FAIL,
NSS_WIFI_VDEV_PPE_PORT_DESTROY_FAIL,
NSS_WIFI_VDEV_PPE_VSI_ASSIGN_FAIL,
NSS_WIFI_VDEV_PPE_VSI_UNASSIGN_FAIL,
NSS_WIFI_VDEV_EINV_MAX_CFG
};
/**
* nss_wifi_vdev_ext_data_pkt_type
* Types of extended data plane packets sent from the NSS to the host.
*/
enum nss_wifi_vdev_ext_data_pkt_type {
NSS_WIFI_VDEV_EXT_DATA_PKT_TYPE_NONE = 0,
NSS_WIFI_VDEV_EXT_DATA_PKT_TYPE_IGMP = 1, /**< IGMP packets. */
NSS_WIFI_VDEV_EXT_DATA_PKT_TYPE_MESH = 2, /**< MESH packets. */
NSS_WIFI_VDEV_EXT_DATA_PKT_TYPE_INSPECT = 3, /**< Host inspect packets. */
NSS_WIFI_VDEV_EXT_DATA_PKT_TYPE_TXINFO = 4, /**< Tx completion information packets. */
NSS_WIFI_VDEV_EXT_DATA_PKT_TYPE_MPSTA_TX = 5, /**< MP station Tx metadata. */
NSS_WIFI_VDEV_EXT_DATA_PKT_TYPE_MPSTA_RX = 6, /**< MP station Rx metadata. */
NSS_WIFI_VDEV_EXT_DATA_PKT_TYPE_RX_ERR = 7, /**< Rx error packets metadata. */
NSS_WIFI_VDEV_EXT_DATA_PKT_TYPE_EXTAP_TX = 8, /**< ExtAP Tx metadata. */
NSS_WIFI_VDEV_EXT_DATA_PKT_TYPE_EXTAP_RX = 9, /**< ExtAP Rx metadata. */
NSS_WIFI_VDEV_EXT_DATA_PKT_TYPE_WNM_TFS = 10, /**< WNM TFS related metadata. */
NSS_WIFI_VDEV_EXT_TX_COMPL_PKT_TYPE = 11, /**< Tx completion. */
NSS_WIFI_VDEV_EXT_DATA_PKT_TYPE_WDS_LEARN = 12, /**< WDS source port learning command. */
NSS_WIFI_VDEV_EXT_DATA_PPDU_INFO = 13, /**< PPDU metadata information. */
NSS_WIFI_VDEV_EXT_DATA_PKT_TYPE_MCBC_RX = 14, /**< Multicast/broadcast packet received. */
NSS_WIFI_VDEV_MESH_EXT_DATA_PKT_TYPE_RX_SPL_PACKET = 15,
/**< Mesh link VAP special packet. */
NSS_WIFI_VDEV_MESH_EXT_DATA_PKT_TYPE_RX_MCAST_EXC = 16,
/**< Mesh link VAP multicast packet. */
NSS_WIFI_VDEV_EXT_DATA_PKT_TYPE_4ADDR = 17, /**< 4 address exception to host. */
NSS_WIFI_VDEV_EXT_DATA_MPDU_INFO = 18, /**< MPDU metadata information. */
NSS_WIFI_VDEV_EXT_DATA_PKT_TYPE_MAX
};
/**
* nss_wifi_vdev_cmd
* Commands for the Wi-Fi virtual device.
*/
enum nss_wifi_vdev_cmd {
NSS_WIFI_VDEV_DROP_UNENC_CMD, /**< Configuration to drop unencrypted frames on VAP. */
NSS_WIFI_VDEV_ENCAP_TYPE_CMD, /**< Configuration to set encapsulation type on VAP. */
NSS_WIFI_VDEV_DECAP_TYPE_CMD, /**< Configuration to set decapsulation type on VAP. */
NSS_WIFI_VDEV_ENABLE_ME_CMD, /**< Configuration to set multicast enhancement on VAP. */
NSS_WIFI_VDEV_NAWDS_MODE_CMD, /**< Configuration to set NAWDS mode on VAP. */
NSS_WIFI_VDEV_EXTAP_CONFIG_CMD, /**< Configuration to set extended AP mode on VAP. */
NSS_WIFI_VDEV_CFG_BSTEER_CMD, /**< Configuration to set bandsteering on VAP. */
NSS_WIFI_VDEV_VOW_DBG_MODE_CMD, /**< Configuration to set video over wireless (VOW) debug mode on VAP. */
NSS_WIFI_VDEV_VOW_DBG_RST_STATS_CMD,
/**< Configuration to reset video over wireless (VOW) debug mode on VAP. */
NSS_WIFI_VDEV_CFG_DSCP_OVERRIDE_CMD,
/**< Configuration to set DSCP/TID value override on VAP. */
NSS_WIFI_VDEV_CFG_WNM_CAP_CMD, /**< Configuration to set wireless network management (WNM) capability on VAP. */
NSS_WIFI_VDEV_CFG_WNM_TFS_CMD, /**< Configuration to set WNM traffic filtering and sleep mode (TFS) capability on VAP. */
NSS_WIFI_VDEV_CFG_WDS_EXT_ENABLE_CMD,
/**< Configuration to set WDS extention capability on VAP. */
NSS_WIFI_VDEV_CFG_WDS_CMD, /**< Configuration to set WDS on VAP. */
NSS_WIFI_VDEV_CFG_AP_BRIDGE_CMD, /**< Configuration to enable/disable client isolation. */
NSS_WIFI_VDEV_SECURITY_TYPE_CMD, /**< Configuration to set security type per VAP. */
NSS_WIFI_VDEV_CFG_AST_OVERRIDE_CMD, /**< Configuration to set AST (Address Search Table) override on VAP. */
NSS_WIFI_VDEV_CFG_SON_CAP_CMD, /**< Configuration to set software defined network capability on VAP. */
NSS_WIFI_VDEV_CFG_MULTIPASS_CMD, /**< Configuration to enable multipass phrase capability on VAP. */
NSS_WIFI_VDEV_CFG_HLOS_TID_OVERRIDE_CMD,
/**< Configuration to enable HLOS TID override on VAP. */
NSS_WIFI_VDEV_ENABLE_IGMP_ME_CMD, /**< Configuration to set IGMP multicast enhancement on VAP. */
NSS_WIFI_VDEV_CFG_WDS_BACKHAUL_CMD,
/**< Configuration to set WDS backhaul extension on VAP. */
NSS_WIFI_VDEV_CFG_MCBC_EXC_TO_HOST_CMD, /**< Configuration to set multicast/broadcast exception to host on VAP. */
NSS_WIFI_VDEV_MAX_CMD
};
/**
* nss_wifi_vdev_dp_type
* Virtual device datapath types.
*/
enum nss_wifi_vdev_dp_type {
NSS_WIFI_VDEV_DP_ACCELERATED, /**< Wi-Fi accelerated VAP type. */
NSS_WIFI_VDEV_DP_NON_ACCELERATED, /**< Wi-Fi non-acclerated VAP type. */
NSS_WIFI_VDEV_DP_TYPE_MAX /**< Wi-Fi maximum VAP type. */
};
/**
* nss_wifi_vdev_vlan_tagging_mode
* Supported VLAN tagging modes.
*/
enum nss_wifi_vdev_vlan_tagging_mode {
NSS_WIFI_VDEV_VLAN_NONE, /**< VLAN support disabled. */
/**
* Default VLAN mode to add VLAN tag in Rx path and
* remove VLAN tag only when matching with configured
* VLAN tag in Tx path.
*/
NSS_WIFI_VDEV_VLAN_INGRESS_ADD_EGRESS_STRIP_ON_ID_MATCH,
/**
* Port-based VLAN mode to add VLAN tag in Rx path
* and remove any VLAN tag in Tx path.
*/
NSS_WIFI_VDEV_VLAN_INGRESS_ADD_EGRESS_STRIP_ALWAYS,
NSS_WIFI_VDEV_VLAN_MAX /**< Wi-Fi maximum VLAN support type. */
};
enum vap_ext_mode {
WIFI_VDEV_EXT_MODE_MESH_LINK = 1, /* Wi-Fi mesh VAP mode */
WIFI_VDEV_EXT_MODE_MAX, /* Wi-Fi maximum VAP mode */
};
/**
* nss_wifi_vdev_config_msg
* Virtual device configuration.
*/
struct nss_wifi_vdev_config_msg {
uint8_t mac_addr[ETH_ALEN]; /**< MAC address. */
uint16_t radio_ifnum; /**< Corresponding radio interface number. */
uint32_t vdev_id; /**< Virtual device ID. */
uint32_t epid; /**< Endpoint ID of the copy engine. */
uint32_t downloadlen; /**< Size of the header download length. */
uint32_t hdrcachelen; /**< Size of the header cache. */
uint32_t hdrcache[NSS_WIFI_HTT_TRANSFER_HDRSIZE_WORD];
/**< Cached per descriptor metedata shared with NSS Firmware. */
uint32_t opmode; /**< VAP operating mode: Access-Point (AP) or Station (STA). */
uint32_t mesh_mode_en; /**< Mesh mode is enabled. */
uint8_t is_mpsta;
/**< Specifies whether the station is a VAP Master-Proxy (MP) station. */
uint8_t is_psta;
/**< Specifies whether the station is a proxy station. */
uint8_t special_vap_mode;
/**< Special VAP for monitoring received management packets. */
uint8_t smartmesh_mode_en;
/**< VAP is configured as a smart monitor VAP. */
uint8_t is_wrap; /**< Specifies whether the VAP is a WRAP-AP. */
uint8_t is_nss_qwrap_en; /**< VAP is configured for NSS firmware QWRAP logic. */
uint8_t tx_per_pkt_vdev_id_check; /**< Transmit per-packet virtual device ID check. */
uint8_t align_pad; /**< Reserved field. */
uint32_t vap_ext_mode; /**< Different VAP extended modes. */
};
/**
* nss_wifi_vdev_enable_msg
* Enable a message for a virtual device.
*/
struct nss_wifi_vdev_enable_msg {
uint8_t mac_addr[ETH_ALEN]; /**< MAC address. */
uint8_t reserved[2]; /**< Reserved for 4-byte alignment padding. */
};
/**
* nss_wifi_vdev_disable_msg
* Disable message for a virtual device.
*/
struct nss_wifi_vdev_disable_msg {
uint32_t reserved; /**< Placeholder for future enhancement. */
};
/**
* nss_wifi_vdev_recovery_msg
* Recovery message for a virtual device.
*/
struct nss_wifi_vdev_recovery_msg {
uint32_t reserved; /**< Placeholder for future enhancement. */
};
/**
* nss_wifi_vdev_set_next_hop_msg
* Set next hop for Wi-Fi virtual device.
*/
struct nss_wifi_vdev_set_next_hop_msg {
uint32_t ifnumber; /**< Next hop interface number. */
};
/**
* nss_wifi_vdev_extap_map
* Wi-Fi EXTAP map for IPv4/IPv6 addresses.
*/
struct nss_wifi_vdev_extap_map {
uint16_t ip_version; /**< IPv4 or IPv6 address. */
uint8_t h_dest[ETH_ALEN]; /**< MAC address of original backend. */
union {
uint8_t IPv4[4]; /**< IPv4 address of the backend. */
uint8_t IPv6[NSS_WIFI_VDEV_IPV6_ADDR_LENGTH]; /**< IPv6 group IP address. */
} u;
};
/**
* nss_wifi_vdev_cmd_msg
* Virtual device commands.
*/
struct nss_wifi_vdev_cmd_msg {
uint32_t cmd; /**< Command type. */
uint32_t value; /**< Command value. */
};
/**
* nss_wifi_vdev_me_snptbl_grp_create_msg
* Information for creating the snooptable group of a virtual device.
*/
struct nss_wifi_vdev_me_snptbl_grp_create_msg {
uint32_t ether_type; /**< Ether type of the multicast group. */
/**
* IP address of a multicast group.
*/
union {
uint32_t grpaddr_ip4;
/**< IPv4 address. */
uint8_t grpaddr_ip6[NSS_WIFI_VDEV_IPV6_ADDR_LENGTH];
/**< IPv6 address. */
} u; /**< IP address of the multicast group. */
uint8_t grp_addr[ETH_ALEN];
/**< MAC address of the multicast group. */
};
/**
* nss_wifi_vdev_me_snptbl_grp_delete_msg
* Information for deleting a snooplist group list.
*/
struct nss_wifi_vdev_me_snptbl_grp_delete_msg {
uint32_t ether_type; /**< Ether type of the multicast group. */
/**
* IP address of the multicast group.
*/
union {
uint32_t grpaddr_ip4;
/**< IPv4 address. */
uint8_t grpaddr_ip6[NSS_WIFI_VDEV_IPV6_ADDR_LENGTH];
/**< IPv6 address. */
} u; /**< IP address of the multicast group. */
uint8_t grp_addr[ETH_ALEN]; /**< MAC address of the multicast group. */
};
/**
* struct nss_wifi_vdev_me_mbr_ra_info
* Address details of receiver members.
*/
struct nss_wifi_vdev_me_mbr_ra_info {
bool dup;
/**< Duplicate bit to identify if next hop address is present. */
uint8_t ramac[ETH_ALEN];
/**< MAC address of receiver. */
};
/**
* nss_wifi_vdev_me_snptbl_grp_mbr_add_msg
* Information for adding a snooplist group member.
*/
struct nss_wifi_vdev_me_snptbl_grp_mbr_add_msg {
uint32_t ether_type; /**< Ether type of the multicast group. */
/**
* IP address of the multicast group.
*/
union {
uint32_t grpaddr_ip4;
/**< IPv4 address. */
uint8_t grpaddr_ip6[NSS_WIFI_VDEV_IPV6_ADDR_LENGTH];
/**< IPv6 address. */
} u; /**< IP address of the multicast group. */
uint32_t peer_id; /**< Peer ID. */
uint8_t grp_addr[ETH_ALEN];
/**< MAC address of the multicast group. */
uint8_t grp_member_addr[ETH_ALEN];
/**< MAC address of the multicast group member. */
uint8_t mode; /**< Multicast enhancement mode - mode 2 and mode 5. */
uint8_t nsrcs; /**< Number of source IP addresses for selective source multicast. */
uint8_t src_ip_addr[NSS_WIFI_VDEV_IPV6_ADDR_LENGTH * NSS_WIFI_MAX_SRCS];
/**< Source IP address. */
struct nss_wifi_vdev_me_mbr_ra_info ra_entry;
/**< Receiver address entry corresponding to the member. */
};
/**
* nss_wifi_vdev_me_snptbl_grp_mbr_delete_msg
* Information for removing a snooplist group member.
*/
struct nss_wifi_vdev_me_snptbl_grp_mbr_delete_msg {
uint32_t ether_type; /**< Ether type of the multicast group. */
/**
* IP address of the multicast group.
*/
union {
uint32_t grpaddr_ip4;
/**< IPv4 address. */
uint8_t grpaddr_ip6[NSS_WIFI_VDEV_IPV6_ADDR_LENGTH];
/**< IPv6 address. */
}u; /**< IP address of the multicast group. */
uint8_t grp_addr[ETH_ALEN];
/**< MAC address of the multicast group. */
uint8_t grp_member_addr[ETH_ALEN];
/**< MAC address of the multicast group member. */
};
/**
* nss_wifi_vdev_me_snptbl_grp_mbr_update_msg
* Information for updating a snooplist group member.
*/
struct nss_wifi_vdev_me_snptbl_grp_mbr_update_msg {
uint32_t ether_type; /**< Ether type of the multicast group. */
/**
* IP address of the multicast group.
*/
union {
uint32_t grpaddr_ip4;
/**< IPv4 address. */
uint8_t grpaddr_ip6[NSS_WIFI_VDEV_IPV6_ADDR_LENGTH];
/**< IPv6 address. */
}u; /**< IP address of the multicast group. */
uint8_t grp_addr[ETH_ALEN];
/**< MAC address of the multicast group. */
uint8_t grp_member_addr[ETH_ALEN];
/**< MAC address of the multicast group member. */
uint8_t mode; /**< Multicast enhancement mode - mode 2 and mode 5. */
uint8_t nsrcs; /**< Number of source IP addresses for selective source multicast. */
uint8_t src_ip_addr[NSS_WIFI_VDEV_IPV6_ADDR_LENGTH * NSS_WIFI_MAX_SRCS];
/**< Source IP address. */
};
/**
* nss_wifi_vdev_me_hmmc_add_msg
* Information for adding an entry into the host-managed multicast list.
*/
struct nss_wifi_vdev_me_hmmc_add_msg {
uint32_t ether_type; /**< IPv4 or IPv6. */
union {
uint32_t ipv4_addr;
/**< IPv4 multicast group address. */
uint8_t ipv6_addr[NSS_WIFI_VDEV_IPV6_ADDR_LENGTH];
/**< IPv6 multicast group address. */
} u; /**< Type of group addresses. */
uint32_t netmask; /**< IP subnet netmask. */
};
/**
* nss_wifi_vdev_me_hmmc_del_msg
* Information for deleting an entry from the host-managed multicast list.
*/
struct nss_wifi_vdev_me_hmmc_del_msg {
uint32_t ether_type; /**< IPv4 or IPv6. */
union {
uint32_t ipv4_addr;
/**< IPv4 multicast group address. */
uint8_t ipv6_addr[NSS_WIFI_VDEV_IPV6_ADDR_LENGTH];
/**< IPv6 multicast group address. */
} u; /**< Type of group addresses. */
uint32_t netmask; /**< IP subnet netmask. */
};
/**
* nss_wifi_vdev_me_deny_ip_add_msg
* Information for adding an entry into the denylist.
*/
struct nss_wifi_vdev_me_deny_ip_add_msg {
uint32_t ether_type; /**< IPv4 or IPv6. */
union {
uint32_t ipv4_addr;
/**< IPv4 multicast group address. */
uint8_t ipv6_addr[NSS_WIFI_VDEV_IPV6_ADDR_LENGTH];
/**< IPv6 multicast group address. */
} u; /**< Type of group addresses. */
uint32_t netmask; /**< IP subnet netmask. */
};
/**
* nss_wifi_vdev_me_deny_ip_del_msg
* Information for deleting an entry from the denylist.
*/
struct nss_wifi_vdev_me_deny_ip_del_msg {
uint32_t ether_type; /**< IPv4 or IPv6. */
union {
uint32_t ipv4_addr;
/**< IPv4 multicast group address. */
uint8_t ipv6_addr[NSS_WIFI_VDEV_IPV6_ADDR_LENGTH];
/**< IPv6 multicast group address. */
} u; /**< Type of group addresses. */
uint32_t netmask; /**< IP subnet netmask. */
};
/**
* nss_wifi_vdev_me_snptbl_deny_grp_add_msg
* Information for adding a snooplist member to a deny list.
*/
struct nss_wifi_vdev_me_snptbl_deny_grp_add_msg {
uint32_t grpaddr; /**< IP address of the multicast group. */
};
/**
* nss_wifi_vdev_txmsg
* Information for transmitting special data.
*/
struct nss_wifi_vdev_txmsg {
uint16_t peer_id; /**< Peer ID. */
uint16_t tid; /**< Traffic ID. */
};
/**
* nss_wifi_vdev_vow_dbg_stats
* Types of VoW debug statistics.
*/
struct nss_wifi_vdev_vow_dbg_stats {
uint32_t rx_vow_dbg_counters; /**< VoW Rx debug counter. */
uint32_t tx_vow_dbg_counters[8]; /**< VoW Tx debug counter. */
};
/**
* nss_wifi_vdev_vow_dbg_cfg_msg
* Information for configuring VoW debug statistics.
*/
struct nss_wifi_vdev_vow_dbg_cfg_msg {
uint8_t vow_peer_list_idx; /**< Index of the peer list. */
uint8_t tx_dbg_vow_peer_mac4; /**< MAC address 4 for the peer. */
uint8_t tx_dbg_vow_peer_mac5; /**< MAC address 5 for the peer. */
};
/**
* nss_wifi_vdev_dscp_tid_map
* DSCP-to-TID mapping.
*/
struct nss_wifi_vdev_dscp_tid_map {
uint32_t dscp_tid_map[NSS_WIFI_VDEV_DSCP_MAP_LEN];
/**< Array holding the DSCP-to-TID mapping. */
};
/**
* nss_wifi_vdev_dscptid_map_id
* DSCP-to-TID map ID.
*/
struct nss_wifi_vdev_dscptid_map_id {
uint8_t dscp_tid_map_id;
/**< DSCP-to-TID mapping ID to be used. */
};
/**
* nss_wifi_vdev_set_peer_next_hop
* Set per peer next hop.
*/
struct nss_wifi_vdev_set_peer_next_hop_msg {
uint8_t peer_mac_addr[ETH_ALEN]; /**< MAC peer address. */
uint16_t reserved; /**< Reserved. */
uint32_t if_num; /**< Next hop interface number. */
};
/**
* nss_wifi_vdev_qwrap_psta_msg
* PSTA VAP entry map in QWRAP mode.
*/
struct nss_wifi_vdev_qwrap_psta_msg {
uint8_t oma[ETH_ALEN]; /**< Original MAC address of PSTA VAP. */
uint8_t vma[ETH_ALEN]; /**< Virtual MAC address of PSTA VAP. */
uint8_t vdev_id; /**< ID of PSTA VAP. */
uint8_t is_wired; /**< Is the entry for wired PSTA VAP. */
uint8_t reserved[2]; /**< Reserved for 4-byte alignment. */
};
/**
* nss_wifi_vdev_qwrap_isolation_en_msg
* Qwrap isolation mode enable.
*/
struct nss_wifi_vdev_qwrap_isolation_en_msg {
uint8_t isolation_enable; /**< QWRAP isolation mode enable. */
uint8_t reserved[3]; /**< Reserved for 4-byte alignment. */
};
/**
* nss_wifi_vdev_igmp_per_packet_metadata
* Per-packet metadata for IGMP packets.
*/
struct nss_wifi_vdev_igmp_per_packet_metadata {
uint32_t tid; /**< TID. */
uint32_t tsf32; /**< TSF value. */
uint8_t peer_mac_addr[ETH_ALEN];
/**< Peer MAC address. */
uint8_t reserved[2]; /**< Reserved for 4-byte alignment. */
};
/**
* nss_wifi_vdev_mesh_per_packet_metadata
* Per-packet metadata for Mesh packets.
*/
struct nss_wifi_vdev_mesh_per_packet_metadata {
uint32_t status; /**< Meshmode Status. */
uint32_t rssi; /**< Received signal strength indication. */
uint32_t tsf; /**< Tx expiry time. */
uint16_t tx_retries; /**< Retry count. */
};
/**
* nss_wifi_vdev_vlan_config_msg
* Enable special handling on this VAP where VLAN tagging is added in Rx and removed in Tx.
*/
struct nss_wifi_vdev_vlan_config_msg {
uint16_t vlan_id; /**< VLAN ID configured. */
uint8_t reserved[2]; /**< Reserved for 4-byte alignment. */
};
/**
* nss_wifi_vdev_vlan_enable_msg
* Enable VLAN tagging mode on this VAP.
*/
struct nss_wifi_vdev_vlan_enable_msg {
uint8_t vlan_tagging_mode; /**< Flag to enable default or port-based VLAN tagging mode. */
uint8_t reserved[3]; /**< Reserved for 4-byte alignment. */
};
/**
* nss_wifi_vdev_set_vlan_group_key
* Set VLAN ID for special peer.
*/
struct nss_wifi_vdev_set_vlan_group_key {
uint16_t vlan_id; /**< VLAN ID. */
uint16_t group_key; /**< Group key. */
};
/**
* nss_wifi_vdev_txinfo_per_packet_metadata
* Per-packet metadata for Tx completion information packets.
*/
struct nss_wifi_vdev_txinfo_per_packet_metadata {
uint32_t status; /**< Tx completion status. */
uint16_t msdu_count; /**< Count of MSDUs in the MSDU list. */
uint16_t num_msdu; /**< Sequence Number of MSDU in the MSDU list. */
uint32_t msdu_q_time; /**< Time spent by an MSDU in the Wi-Fi firmware. */
uint32_t ppdu_rate; /**< PPDU rate in code rate. */
uint8_t ppdu_num_mpdus_success;
/**< Number of successful MPDUs. */
uint8_t ppdu_num_mpdus_fail;
/**< Number of failed MPDUs. */
uint16_t ppdu_num_msdus_success;
/**< Number of successful MSDUs. */
uint32_t ppdu_bytes_success;
/**< Number of successful bytes. */
uint32_t ppdu_duration; /**< Estimated air time. */
uint8_t ppdu_retries; /**< Number of times a PPDU is retried. */
uint8_t ppdu_is_aggregate;
/**< Flag to check whether a PPDU is aggregated. */
uint16_t start_seq_num; /**< Starting MSDU ID for this PPDU. */
uint16_t version; /**< PPDU statistics version. */
uint32_t ppdu_ack_timestamp;
/**< Timestamp (in ms) when an acknowledgement was received. */
uint32_t ppdu_bmap_enqueued_lo;
/**< Bitmap of packets enqueued to the hardware (LSB). */
uint32_t ppdu_bmap_enqueued_hi;
/**< Bitmap of packets enqueued to the hardware (MSB). */
uint32_t ppdu_bmap_tried_lo;
/**< Bitmap of packets sent over the air (LSB). */
uint32_t ppdu_bmap_tried_hi;
/**< Bitmap of packets sent over the air (MSB). */
uint32_t ppdu_bmap_failed_lo;
/**< Bitmap of packets that failed to be acknowledged (LSB). */
uint32_t ppdu_bmap_failed_hi;
/**< Bitmap of packets that failed to be acknowledged (MSB). */
};
/**
* nss_wifi_vdev_qwrap_tx_metadata_types
* Per-packet metadata types for Qwrap Tx packets.
*/
enum nss_wifi_vdev_qwrap_tx_metadata_types {
NSS_WIFI_VDEV_QWRAP_TYPE_NONE = 0,
NSS_WIFI_VDEV_QWRAP_TYPE_TX = 1,
NSS_WIFI_VDEV_QWRAP_TYPE_RX_TO_TX = 2
};
/**
* nss_wifi_vdev_extap_pkt_types
* Per-packet metadata types for ExtAP Tx packets.
*/
enum nss_wifi_vdev_extap_pkt_types {
NSS_WIFI_VDEV_EXTAP_PKT_TYPE_NONE = 0,
NSS_WIFI_VDEV_EXTAP_PKT_TYPE_TX = 1,
NSS_WIFI_VDEV_EXTAP_PKT_TYPE_RX_TO_TX = 2
};
/**
* nss_wifi_vdev_mpsta_per_packet_tx_metadata
* Per-packet metadata for transmitting packets to an MP station.
*/
struct nss_wifi_vdev_mpsta_per_packet_tx_metadata {
uint16_t vdev_id; /**< Virtual device ID. */
uint16_t metadata_type; /**< Tx metadata type. */
};
/**
* nss_wifi_vdev_mpsta_per_packet_rx_metadata
* Per-packet metadata for receiving packets from an MP station.
*/
struct nss_wifi_vdev_mpsta_per_packet_rx_metadata {
uint16_t vdev_id; /**< Virtual device ID. */
uint16_t peer_id; /**< Peer ID. */
};
/**
* nss_wifi_vdev_rx_err_per_packet_metadata
* Per-packet metadata for error packets received.
*/
struct nss_wifi_vdev_rx_err_per_packet_metadata {
uint8_t peer_mac_addr[ETH_ALEN];
/**< Peer MAC address. */
uint8_t tid; /**< TID. */
uint8_t vdev_id; /**< Virtual device ID. */
uint8_t err_type; /**< Error type. */
uint8_t rsvd[3]; /**< Reserved for future enhancement. */
};
/**
* nss_wifi_vdev_extap_per_packet_metadata
* Per-packet metadata for ExtAP.
*/
struct nss_wifi_vdev_extap_per_packet_metadata {
uint16_t pkt_type; /**< ExtAP packet type. */
uint8_t res[2]; /**< Reserved for 4-byte alignment. */
};
/**
* nss_wifi_vdev_tx_compl_metadata
* Per-packet metadata for Tx completion message.
*/
struct nss_wifi_vdev_tx_compl_metadata {
uint8_t ta[ETH_ALEN]; /**< Transmitter MAC address. */
uint8_t ra[ETH_ALEN]; /**< Receiver MAC address. */
uint16_t ppdu_id; /**< PPDU ID. */
uint16_t peer_id; /**< Peer ID. */
};
/**
* nss_wifi_vdev_wds_info_type
* Specifies the type of WDS notification information.
*/
enum wifi_vdev_ext_wds_info_type {
NSS_WIFI_VDEV_WDS_TYPE_NONE = 0,
NSS_WIFI_VDEV_WDS_TYPE_RX, /**< Rx WDS entry. */
NSS_WIFI_VDEV_WDS_TYPE_MEC, /**< Multicast Tx WDS entry. */
NSS_WIFI_VDEV_WDS_TYPE_DA /**< Rx WDS entry for destination address. */
};
/**
* nss_wifi_vdev_per_packet_metadata
* Payload of per-packet metadata.
*/
struct nss_wifi_vdev_wds_per_packet_metadata {
uint16_t peer_id; /**< Peer ID. */
uint8_t is_sa_valid; /**< Specifies whether source address is valid. */
uint8_t reserved; /**< Reserve bytes for alignment. */
enum wifi_vdev_ext_wds_info_type wds_type;
/**< WDS message type. */
uint8_t addr4_valid; /**< 802.11 4th address valid flag. */
uint8_t rsvd; /**< Reserve bytes for alignment. */
uint16_t sa_idx; /**< Source address index. */
uint16_t sa_sw_peer_id; /**< Software/Address-Search-Table peer ID. */
};
/**
* nss_wifi_vdev_ppdu_mdata_dir
* Physical layer protocol data unit (PPDU) metadata direction.
*/
enum nss_wifi_vdev_ppdu_mdata_dir {
WIFI_VDEV_PPDU_MDATA_TX, /**< PPDU metadata for transmit direction. */
WIFI_VDEV_PPDU_MDATA_RX /**< PPDU metadata for receive direction. */
};
/**
* nss_wifi_vdev_ppdu_metadata
* PPDU metadata.
*/
struct nss_wifi_vdev_ppdu_metadata {
uint32_t dir; /**< Data direction for metadata. */
uint32_t ppdu_id; /**< PPDU ID. */
uint16_t peer_id; /**< Peer ID. */
uint8_t first_msdu; /**< First MSDU. */
uint8_t last_msdu; /**< Last MSDU. */
};
/*
* nss_wifi_vdev_peer_mpdu_metadata
* MPDU metadata.
*/
struct nss_wifi_vdev_peer_mpdu_metadata {
uint16_t peer_id; /* Corresponding peer ID. */
uint8_t tid; /* TID of the flow or MPDU queue. */
uint8_t msdu_info; /* First or last MSDU information. */
uint32_t ppdu_id; /* PPDU ID. */
uint32_t tsf; /* Timing synchronization function. */
uint8_t transmit_cnt; /* Transmission count. */
uint8_t status; /* Frame acknowledged/failed. */
uint16_t reserved; /* Reserved. */
};
/**
* nss_wifi_vdev_addr4_data_metadata
* Address 4 metadata
*/
struct nss_wifi_vdev_addr4_data_metadata {
uint16_t peer_id; /**< Peer ID. */
uint8_t sa_valid; /**< Source address is valid. */
uint8_t addr4_valid; /**< Address 4 is valid. */
};
/**
* nss_wifi_vdev_per_packet_metadata
* Wi-Fi per packet metadata content.
*/
struct nss_wifi_vdev_per_packet_metadata {
uint32_t pkt_type; /**< Type of packet. */
/**
* Metadata payload for special data receive messages.
*/
union {
struct nss_wifi_vdev_igmp_per_packet_metadata igmp_metadata;
/**< Per packet metadata structure for IGMP. */
struct nss_wifi_vdev_mesh_per_packet_metadata mesh_metadata;
/**< Per packet metadata structure for mesh mode. */
struct nss_wifi_vdev_txinfo_per_packet_metadata txinfo_metadata;
/**< Per packet metadata structure for Tx information. */
struct nss_wifi_vdev_mpsta_per_packet_tx_metadata mpsta_tx_metadata;
/**< Per packet Tx metadata structure for master-proxy station. */
struct nss_wifi_vdev_mpsta_per_packet_rx_metadata mpsta_rx_metadata;
/**< Per packet Rx metadata structure for master-proxy station. */
struct nss_wifi_vdev_rx_err_per_packet_metadata rx_err_metadata;
/**< Per packet metadata structure for Rx error. */
struct nss_wifi_vdev_tx_compl_metadata tx_compl_metadata;
/**< Per packet Tx metadata structure for Tx completion. */
struct nss_wifi_vdev_wds_per_packet_metadata wds_metadata;
/**< Per packet Tx metadata structure for wireless distribution system mode. */
struct nss_wifi_vdev_ppdu_metadata ppdu_metadata;
/**< Per packet PPDU metadata needed for per PPDU copy mode. */
struct nss_wifi_vdev_addr4_data_metadata addr4_metadata;
/**< Create metadata for the WDS extension interface. */
struct nss_wifi_vdev_peer_mpdu_metadata mpdu_metadata;
/**< Per packet Tx metadata structure for Tx capture info per MPDU. */
} metadata;
/**< Metadata payload for special data receive message. */
};
/**
* nss_wifi_vdev_meshmode_rx_metadata
* Metadata payload for Mesh mode receive.
*/
struct nss_wifi_vdev_meshmode_rx_metadata {
uint16_t rs_ratephy_lo; /**< PHY rate lower order bytes. */
uint16_t rs_ratephy_hi; /**< PHY rate higher order bytes. */
uint16_t cntr_chan_freq; /** Center channel frequency. */
uint16_t vdev_id; /**< Virtual device ID. */
uint16_t peer_id; /**< Peer ID. */
uint16_t rs_rssi; /**< Received signal strength indication (noise floor adjusted). */
uint8_t rs_flags; /**< First/last MSDU flags. */
uint8_t rs_channel; /**< Operational channel. */
uint8_t rs_keyix; /**< Key index. */
uint8_t padd; /**< Padding to ensure alignment. */
};
/**
* nss_wifi_vdev_rawmode_rx_metadata
* Metadata payload for Raw Mode receive.
*/
struct nss_wifi_vdev_rawmode_rx_metadata {
uint16_t vdev_id; /**< Virtual device ID. */
uint16_t peer_id; /**< Peer ID. */
};
/**
* nss_wifi_vdev_updchdr_msg
* Information for updating a cache header.
*/
struct nss_wifi_vdev_updchdr_msg {
uint32_t hdrcache[NSS_WIFI_HTT_TRANSFER_HDRSIZE_WORD];
/**< Updated header cache. */
uint32_t vdev_id; /**< Virtual device ID. */
};
/**
* nss_wifi_vdev_me_host_sync_grp_entry
* Multicast enhancement host synchronization group table.
*/
struct nss_wifi_vdev_me_host_sync_grp_entry {
uint8_t group_addr[ETH_ALEN]; /**< Group address for this list. */
uint8_t grp_member_addr[ETH_ALEN]; /**< MAC address of the multicast group member. */
/**
* Type of group addresses.
*/
union {
uint32_t grpaddr_ip4;
/**< IPv4 group address. */
uint8_t grpaddr_ip6[NSS_WIFI_VDEV_IPV6_ADDR_LENGTH];
/**< IPv6 group address. */
} u; /**< Type of group addresses. */
uint32_t src_ip_addr;
/**< Source IP address. */
};
/**
* wifi_vdev_me_host_sync_msg
* Synchronization message for a multicast enhancement host group.
*/
struct nss_wifi_vdev_me_host_sync_msg {
uint16_t vdev_id; /**< Virtual device ID. */
uint8_t nentries; /**< Number of group entries carried by this message. */
uint8_t radio_ifnum; /**< Interface number of the Wi-Fi radio. */
struct nss_wifi_vdev_me_host_sync_grp_entry grp_entry[NSS_WIFI_VDEV_MAX_ME_ENTRIES];
/**< Array for multicast group entries. */
};
/**
* nss_wifi_vdev_mcast_enhance_stats
* Multicast enhancement-related statistics.
*/
struct nss_wifi_vdev_mcast_enhance_stats {
/**
* Number of multicast packets recieved for multicast enhancement conversion.
*/
uint32_t mcast_rcvd;
/**
* Number of unicast packets sent as part of multicast enhancement conversion.
*/
uint32_t mcast_ucast_converted;
/**
* Number of multicast enhancement frames dropped because of a
* buffer allocation failure.
*/
uint32_t mcast_alloc_fail;
/**
* Number of multicast enhancement frames dropped because of a
* buffer enqueue failure.
*/
uint32_t mcast_pbuf_enq_fail;
/**
* Number of multicast enhancement frames dropped because of a
* buffer copy failure.
*/
uint32_t mcast_pbuf_copy_fail;
/**
* Number of multicast enhancement frames dropped because of a
* failure in sending flow control to a peer.
*/
uint32_t mcast_peer_flow_ctrl_send_fail;
/**
* Number of multicast enhancement buffer frames dropped when
* destination MAC is the same as source MAC.
*/
uint32_t mcast_loopback_err;
/**
* Number of multicast enhancement buffer frames dropped
* because of an empty destination MAC.
*/
uint32_t mcast_dst_address_err;
/**
* Number of multicast enhancement buffer frames dropped
* because no member is listening on the group.
*/
uint32_t mcast_no_enhance_drop_cnt;
/**
* Number of multicast bytes received for multicast enhancement.
*/
uint32_t mcast_rcvd_bytes;
/**
* Number of IGMP packets received for conversion to unicast.
*/
uint32_t igmp_rcvd;
/**
* Number of IGMP packets converted to unicast as a part of
* VoW IGMP improvements.
*/
uint32_t igmp_ucast_converted;
};
/**
* nss_wifi_vdev_stats_sync_msg
* Message to get virtual device statistics from NSS Firmware to Host.
*/
struct nss_wifi_vdev_stats_sync_msg {
uint32_t dropped; /**< Number of dropped packets. */
uint32_t tx_enqueue_cnt; /**< Transmit pnode enqueue count. */
uint32_t tx_enqueue_fail_cnt; /**< Transmit pnode enqueue count. */
uint32_t tx_intra_bss_enqueue_cnt; /**< Intra BSS enqueue count. */
uint32_t tx_intra_bss_enqueue_fail_cnt;
/**< Intra BSS enqueue fail count. */
uint32_t tx_intra_bss_mcast_send_cnt;
/**< Virual device multicast/broadcast packet count in AP mode. */
uint32_t tx_intra_bss_mcast_send_fail_cnt;
/**< Virtual device multicast/broadcast packet count in AP mode. */
uint32_t tx_enqueue_bytes; /**< Transmit enqueue bytes count. */
uint32_t rx_enqueue_cnt; /**< Ethernet node enqueue count. */
uint32_t rx_enqueue_fail_cnt; /**< Ethernet node enqueue fail count. */
uint32_t rx_except_enqueue_cnt; /**< N2H (NSS to Host) node enqueue count. */
uint32_t rx_except_enqueue_fail_cnt; /**< N2H (NSS to Host) node enqueue fail count. */
uint32_t rx_enqueue_bytes; /**< Receive enqueue bytes count. */
uint32_t rx_wds_learn_send_cnt; /**< Virtual device WDS source port learn count. */
uint32_t rx_wds_learn_send_fail_cnt; /**< Virtual device WDS source count fail. */
struct nss_wifi_vdev_mcast_enhance_stats wvmes;
/**< Multicast enhancement statistics. */
uint32_t num_tx_exception; /**< Number of Tx exception to firmware. */
uint32_t tx_dma_map_fail; /**< DMA map failure. */
uint32_t tx_desc_alloc_fail; /**< Descriptor allocation failure. */
uint32_t tx_hw_ring_full; /**< Hardware ring is full. */
uint32_t tx_tso_pkt; /**< Number of TSO packets. */
uint32_t tx_num_seg; /**< Number of segments in TSO packets. */
uint32_t tx_rcvd; /**< Number of packets received from host. */
uint32_t tx_rcvd_bytes; /**< Number of bytes received from host. */
uint32_t cce_classified;
/**< Number of packets that are classified and sent to firmware as an exception. */
uint32_t cce_classified_raw;
/**< Number of raw packets that are classified and sent to firmware as an exception. */
uint32_t tx_eapol_cnt; /**< Number of EAPoL frames in transmit direction. */
uint32_t nawds_tx_mcast_cnt; /**< Number of NAWDS packets sent. */
uint32_t nawds_tx_mcast_bytes; /**< Number of NAWDS bytes sent. */
uint32_t per_pkt_vdev_check_fail; /**< Number of packets that failed vdev id check in Tx. */
uint32_t rx_mcast_cnt; /**< Receive multicast packet count. */
uint32_t rx_mcast_bytes; /**< Receive multicast bytes count. */
uint32_t rx_decrypt_err; /**< Receive decryption error */
uint32_t rx_mic_err; /**< Receive MIC error */
uint32_t mcbc_exc_host_fail_cnt;
/**< Number of multicast/broadcast packets failed to send to host through exception path. */
uint32_t addr4_exc_fail; /**< Number of failed 4 address exceptions. */
uint32_t addr4_exc_pass; /**< Number of successful 4 address exceptions. */
};
/**
* nss_wifi_vdev_msg
* Data for sending and receiving virtual device specific messages.
*/
struct nss_wifi_vdev_msg {
struct nss_cmn_msg cm; /**< Common message header. */
/**
* Payload of a virtual device specific message.
*/
union {
struct nss_wifi_vdev_config_msg vdev_config;
/**< Virtual device configuration. */
struct nss_wifi_vdev_enable_msg vdev_enable;
/**< Enable a message for a virtual device. */
struct nss_wifi_vdev_cmd_msg vdev_cmd;
/**< Command message for a virtual device. */
struct nss_wifi_vdev_me_snptbl_grp_create_msg vdev_grp_list_create;
/**< Creates the snooptable group of a virtual device. */
struct nss_wifi_vdev_me_snptbl_grp_delete_msg vdev_grp_list_delete;
/**< Deletes a snooplist group list. */
struct nss_wifi_vdev_me_snptbl_grp_mbr_add_msg vdev_grp_member_add;
/**< Adds a snooplist group member. */
struct nss_wifi_vdev_me_snptbl_grp_mbr_delete_msg vdev_grp_member_remove;
/**< Removes a snooplist group member. */
struct nss_wifi_vdev_me_snptbl_grp_mbr_update_msg vdev_grp_member_update;
/**< Updates a snooplist group member. */
struct nss_wifi_vdev_me_snptbl_deny_grp_add_msg vdev_deny_member_add;
/**< Add a snooplist member to the deny list. */
struct nss_wifi_vdev_me_hmmc_add_msg vdev_hmmc_member_add;
/**< Adds a member to the HMMC list. */
struct nss_wifi_vdev_me_hmmc_del_msg vdev_hmmc_member_del;
/**< Deletes a member from the HMMC list. */
struct nss_wifi_vdev_me_deny_ip_add_msg vdev_deny_list_member_add;
/**< Adds a member to the denylist. */
struct nss_wifi_vdev_me_deny_ip_del_msg vdev_deny_list_member_del;
/**< Deletes a member from the denylist. */
struct nss_wifi_vdev_txmsg vdev_txmsgext;
/**< Transmits special data. */
struct nss_wifi_vdev_vow_dbg_cfg_msg vdev_vow_dbg_cfg;
/**< Configures VoW debug statistics. */
struct nss_wifi_vdev_vow_dbg_stats vdev_vow_dbg_stats;
/**< Types of VoW debug statistics. */
struct nss_wifi_vdev_dscp_tid_map vdev_dscp_tid_map;
/**< DSCP-to-TID mapping. */
struct nss_wifi_vdev_updchdr_msg vdev_updchdr;
/**< Updates a cache header. */
struct nss_wifi_vdev_me_host_sync_msg vdev_me_sync;
/**< Message for a multicast enhancement host group table synchronization. */
struct nss_wifi_vdev_stats_sync_msg vdev_stats;
/**< Message to get virtual device statistics from NSS firmware to host. */
struct nss_wifi_vdev_set_next_hop_msg next_hop;
/**< Next hop message for virtual device. */
struct nss_wifi_vdev_dscptid_map_id vdev_dscp_tid_map_id;
/**< Message to get DSCP-to-TID mapping id to be used on virtual device. */
struct nss_wifi_vdev_extap_map vdev_extap_map;
/**< Message to add entry in EXTAP table on virtual device. */
struct nss_wifi_vdev_qwrap_psta_msg vdev_qwrap_psta_map;
/**< Message to get PSTA VAP details in QWRAP mode. */
struct nss_wifi_vdev_qwrap_isolation_en_msg vdev_qwrap_isolation_en;
/**< Message to enable QWRAP isolation mode. */
struct nss_wifi_vdev_set_peer_next_hop_msg vdev_set_peer_next_hp;
/**< Message to set next hop per peer. */
struct nss_wifi_vdev_vlan_config_msg vdev_vlan_config;
/**< Message to set VLAN configured on a particular virtual device. */
struct nss_wifi_vdev_vlan_enable_msg vdev_vlan_enable;
/**< Message to enable VLAN tagging support on a particular virtual device. */
struct nss_wifi_vdev_set_vlan_group_key vlan_group_key;
/**< Message to set group key for peer. */
} msg; /**< Virtual device message payload. */
};
/**
* nss_wifi_vdev_tx_msg
* Sends a Wi-Fi message to the NSS interface.
*
* @datatypes
* nss_ctx_instance \n
* nss_wifi_vdev_msg
*
* @param[in] nss_ctx Pointer to the NSS core context.
* @param[in] msg Pointer to the message data.
*
* @return
* Status of the Tx operation.
*/
nss_tx_status_t nss_wifi_vdev_tx_msg(struct nss_ctx_instance *nss_ctx,
struct nss_wifi_vdev_msg *msg);
/**
* nss_wifi_vdev_base_tx_msg
* Sends a Wi-Fi message to the NSS VAP interface.
*
* @datatypes
* nss_ctx_instance \n
* nss_wifi_vdev_msg
*
* @param[in] nss_ctx Pointer to the NSS core context.
* @param[in] msg Pointer to the message data.
*
* @return
* Status of the Tx operation.
*/
nss_tx_status_t nss_wifi_vdev_base_tx_msg(struct nss_ctx_instance *nss_ctx,
struct nss_wifi_vdev_msg *msg);
/**
* nss_wifi_vdev_tx_buf
* Sends a Wi-Fi data packet to the NSS interface.
*
* @datatypes
* nss_ctx_instance \n
* sk_buff
*
* @param[in] nss_ctx Pointer to the NSS core context.
* @param[in] os_buf Pointer to the OS data buffer.
* @param[in] if_num NSS interface number.
*
* @return
* Status of the Tx operation.
*/
nss_tx_status_t nss_wifi_vdev_tx_buf(struct nss_ctx_instance *nss_ctx,
struct sk_buff *os_buf, uint32_t if_num);
/**
* Callback function for receiving Wi-Fi virtual device messages.
*
* @datatypes
* nss_cmn_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_vdev_msg_callback_t)(void *app_data,
struct nss_cmn_msg *msg);
/**
* Callback function for receiving Wi-Fi virtual device 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_vdev_callback_t)(struct net_device *netdev,
struct sk_buff *skb, struct napi_struct *napi);
/**
* Callback function for receiving extended data plane Wi-Fi virtual device 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.
* @param[in] netdev Pointer to the associated network device.
*/
typedef void (*nss_wifi_vdev_ext_data_callback_t)(struct net_device *netdev,
struct sk_buff *skb, struct napi_struct *napi);
/**
* nss_wifi_vdev_msg_init
* Initializes a Wi-Fi virtual device message.
*
* @datatypes
* nss_wifi_vdev_msg \n
* nss_wifi_vdev_msg_callback_t
*
* @param[in] nim Pointer to the NSS interface message.
* @param[in] if_num NSS interface number.
* @param[in] type Type of message.
* @param[in] len Length of message.
* @param[in] cb Message callback.
* @param[in] app_data Pointer to the application context of the message.
*
* @return
* None.
*/
void nss_wifi_vdev_msg_init(struct nss_wifi_vdev_msg *nim, uint32_t if_num, uint32_t type, uint32_t len,
nss_wifi_vdev_msg_callback_t *cb, void *app_data);
/**
* nss_register_wifi_vdev_if
* Registers a Wi-Fi virtual device interface with the NSS interface.
*
* @datatypes
* nss_ctx_instance \n
* nss_wifi_vdev_callback_t \n
* nss_wifi_vdev_ext_data_callback_t \n
* nss_wifi_vdev_msg_callback_t \n
* net_device
*
* @param[in,out] nss_ctx Pointer to the NSS core context.
* @param[in] if_num NSS interface number.
* @param[in] wifi_data_callback Callback for the Wi-Fi virtual device data.
* @param[in] vdev_ext_data_callback Callback for the extended data.
* @param[in] wifi_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
* None.
*/
uint32_t nss_register_wifi_vdev_if(struct nss_ctx_instance *nss_ctx, int32_t if_num, nss_wifi_vdev_callback_t wifi_data_callback,
nss_wifi_vdev_ext_data_callback_t vdev_ext_data_callback, nss_wifi_vdev_msg_callback_t wifi_event_callback,
struct net_device *netdev, uint32_t features);
/**
* nss_unregister_wifi_vdev_if
* Deregisters a Wi-Fi virtual device interface from the NSS interface.
*
* @param[in] if_num NSS interface number.
*
* @return
* None.
*/
void nss_unregister_wifi_vdev_if(uint32_t if_num);
/**
* nss_wifi_vdev_tx_msg_ext
* Sends Wi-Fi data packet along with metadata as message to the NSS.
*
* @datatypes
* nss_ctx_instance \n
* sk_buff
*
* @param[in,out] nss_ctx Pointer to the NSS core context.
* @param[in] os_buf Pointer to the OS data buffer.
*
* @return
* Status of the Tx operation.
*/
nss_tx_status_t nss_wifi_vdev_tx_msg_ext(struct nss_ctx_instance *nss_ctx, struct sk_buff *os_buf);
/**
* nss_wifi_vdev_set_next_hop
* Send next hop message to Wi-Fi virtual device.
*
* @datatypes
* nss_ctx_instance
*
* @param[in] nss_ctx Pointer to the NSS core context.
* @param[in] if_num NSS interface number.
* @param[in] next_hop Next hop interface number.
*
* @return
* Status of the Tx operation.
*/
nss_tx_status_t nss_wifi_vdev_set_next_hop(struct nss_ctx_instance *nss_ctx, int if_num, int next_hop);
/**
* nss_wifi_vdev_base_set_next_hop
* Sends the next hop message to Wi-Fi virtual access point.
*
* @datatypes
* nss_ctx_instance
*
* @param[in] nss_ctx Pointer to the NSS core context.
* @param[in] next_hop Next hop interface number.
*
* @return
* Status of the Tx operation.
*/
nss_tx_status_t nss_wifi_vdev_base_set_next_hop(struct nss_ctx_instance *nss_ctx, int next_hop);
/**
* nss_wifi_vdev_set_peer_next_hop
* Sends the peer next hop message to Wi-Fi virtual device.
*
* @datatypes
* nss_ctx_instance
*
* @param[in] nss_ctx Pointer to the NSS core context.
* @param[in] nss_if NSS interface number.
* @param[in] addr Peer MAC address.
* @param[in] next_hop_if Next hop interface number.
*
* @return
* Status of the Tx operation.
*/
nss_tx_status_t nss_wifi_vdev_set_peer_next_hop(struct nss_ctx_instance *nss_ctx, uint32_t nss_if, uint8_t *addr, uint32_t next_hop_if);
/*
* nss_wifi_vdev_set_dp_type
* Sets the datapath type for virtual device.
*
* @datatypes
* nss_ctx_instance \n
* net_device \n
* uint32_t \n
* enum nss_wifi_vdev_dp_type
*
* @param[in] nss_ctx Pointer to the NSS core context.
* @param[in] netdev Pointer to the associated network device.
* @param[in] if_num Interface number of the VAP.
* @param[in] dp_type Datapath type of the VAP.
*
* @return
* True if a success, or false if a failure.
*/
bool nss_wifi_vdev_set_dp_type(struct nss_ctx_instance *nss_ctx, struct net_device *netdev,
uint32_t if_num, enum nss_wifi_vdev_dp_type dp_type);
/**
* @}
*/
#endif /* __NSS_WIFI_VDEV_H */