/*
 **************************************************************************
 * 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 */
