/** @file */
/******************************************************************************
 *
 * Copyright(c) 2019 Realtek Corporation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of version 2 of the GNU General Public License as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
 * more details.
 *
 ******************************************************************************/

#ifndef _MAC_AX_TYPE_H_
#define _MAC_AX_TYPE_H_

#include "mac_def.h"
#include "mac_reg.h"
#include "mac_hw_info.h"
#include "txdesc.h"
#include "rxdesc.h"

#include "mac_ax/mac_ax_dfs.h"
#include "mac_ax/mac_ax_mac_info.h"
#include "mac_ax/mac_txccxrpt.h"

#if MAC_AX_FEATURE_DBGPKG
#include "mac_ax/dbgpkg.h"
#endif

#if MAC_AX_FEATURE_HV
#include "hv_type.h"
#endif

/*--------------------Define -------------------------------------------*/

#ifdef CONFIG_NEW_HALMAC_INTERFACE
#define PLTFM_SDIO_CMD52_R8(addr)                                              \
	hal_sdio_cmd52_r8(adapter->drv_adapter, addr)
#define PLTFM_SDIO_CMD53_R8(addr)                                              \
	hal_sdio_cmd53_r8(adapter->drv_adapter, addr)
#define PLTFM_SDIO_CMD53_R16(addr)                                             \
	hal_sdio_cmd53_r16(adapter->drv_adapter, addr)
#define PLTFM_SDIO_CMD53_R32(addr)                                             \
	hal_sdio_cmd53_r32(adapter->drv_adapter, addr)
#define PLTFM_SDIO_CMD53_RN(addr, size, val)                                   \
	hal_sdio_cmd53_rn(adapter->drv_adapter, addr, size, val)
#define PLTFM_SDIO_CMD52_W8(addr, val)                                         \
	hal_sdio_cmd52_w8(adapter->drv_adapter, addr, val)
#define PLTFM_SDIO_CMD53_W8(addr, val)                                         \
	hal_sdio_cmd53_w8(adapter->drv_adapter, addr, val)
#define PLTFM_SDIO_CMD53_WN(addr, size, val)                                   \
	hal_sdio_cmd53_wn(adapter->drv_adapter, addr, size, val)
#define PLTFM_SDIO_CMD53_W16(addr, val)                                        \
	hal_sdio_cmd53_w16(adapter->drv_adapter, addr, val)
#define PLTFM_SDIO_CMD53_W32(addr, val)                                        \
	hal_sdio_cmd53_w32(adapter->drv_adapter, addr, val)
#define PLTFM_SDIO_CMD52_CIA_R8(addr)                                          \
	hal_sdio_read_cia_r8(adapter->drv_adapter, addr)

#define PLTFM_TX(buf, len)                                                     \
	hal_tx(adapter->drv_adapter, buf, len)

#define PLTFM_FREE(buf, size)                                                  \
	hal_mem_free(adapter->drv_adapter, buf, size)
#define PLTFM_MALLOC(size)                                                     \
	hal_mem_alloc(adapter->drv_adapter, size)
#define PLTFM_MEMCPY(dest, src, size)                                          \
	hal_mem_cpy(adapter->drv_adapter, dest, src, size)
#define PLTFM_MEMSET(addr, value, size)                                        \
	hal_mem_set(adapter->drv_adapter, addr, value, size)
#define PLTFM_MEMCMP(ptr1, ptr2, num)                                          \
	hal_mem_cmp(adapter->drv_adapter, ptr1, ptr2, num)

#define PLTFM_DELAY_US(us)                                                     \
	hal_udelay(adapter->drv_adapter, us)
#define PLTFM_DELAY_MS(ms)                                                     \
	hal_mdelay(adapter->drv_adapter, ms)
#define PLTFM_MUTEX_INIT(mutex)                                                \
	hal_mutex_init(adapter->drv_adapter, mutex)
#define PLTFM_MUTEX_DEINIT(mutex)                                              \
	hal_mutex_deinit(adapter->drv_adapter, mutex)
#define PLTFM_MUTEX_LOCK(mutex)                                                \
	hal_mutex_lock(adapter->drv_adapter, mutex)
#define PLTFM_MUTEX_UNLOCK(mutex)                                              \
	hal_mutex_unlock(adapter->drv_adapter, mutex)

#define PLTFM_MSG_PRINT(...)	\
	hal_mac_msg_print(drv_adapter, __VA_ARGS__)

#define adapter_to_mac_ops(adapter) ((struct mac_ax_ops *)((adapter)->ops))
#define adapter_to_intf_ops(adapter)                                           \
	((struct mac_ax_intf_ops *)((adapter)->ops->intf_ops))

#define PLTFM_REG_R8(addr)                                                     \
	hal_read8(adapter->drv_adapter, addr)
#define PLTFM_REG_R16(addr)                                                    \
	hal_read16(adapter->drv_adapter, addr)
#define PLTFM_REG_R32(addr)                                                    \
	hal_read32(adapter->drv_adapter, addr)
#define PLTFM_REG_W8(addr, val)                                                \
	hal_write8(adapter->drv_adapter, addr, val)
#define PLTFM_REG_W16(addr, val)                                               \
	hal_write16(adapter->drv_adapter, addr, val)
#define PLTFM_REG_W32(addr, val)                                               \
	hal_write32(adapter->drv_adapter, addr, val)

#define MAC_REG_R8(addr) hal_read8(adapter->drv_adapter, addr)
#define MAC_REG_R16(addr) hal_read16(adapter->drv_adapter, addr)
#define MAC_REG_R32(addr) hal_read32(adapter->drv_adapter, addr)
#define MAC_REG_W8(addr, val) hal_write8(adapter->drv_adapter, addr, val)
#define MAC_REG_W16(addr, val) hal_write16(adapter->drv_adapter, addr, val)
#define MAC_REG_W32(addr, val) hal_write32(adapter->drv_adapter, addr, val)

#if MAC_AX_FEATURE_DBGCMD
#define PLTFM_SNPRINTF(s, sz, fmt, ...)                                               \
	hal_sprintf(adapter->drv_adapter, s, sz, fmt, ##__VA_ARGS__)
#define PLTFM_STRCMP(s1, s2)                                               \
	hal_strcmp(adapter->drv_adapter, s1, s2)
#define PLTFM_STRSEP(s, ct)                                               \
	hal_strsep(adapter->drv_adapter, s, ct)
#define PLTFM_STRLEN(s)                                               \
	hal_strlen(adapter->drv_adapter, s)
#define PLTFM_STRCPY(dest, src)                                               \
	hal_strcpy(adapter->drv_adapter, dest, src)
#define PLTFM_STRPBRK(cs, ct)                                               \
	hal_strpbrk(adapter->drv_adapter, cs, ct)
#define PLTFM_STRTOUL(buf, base)                                               \
	hal_strtoul(adapter->drv_adapter, buf, base)
#endif
#else

/* platform callback */
#define PLTFM_SDIO_CMD52_R8(addr)                                              \
	adapter->pltfm_cb->sdio_cmd52_r8(adapter->drv_adapter, addr)
#define PLTFM_SDIO_CMD53_R8(addr)                                              \
	adapter->pltfm_cb->sdio_cmd53_r8(adapter->drv_adapter, addr)
#define PLTFM_SDIO_CMD53_R16(addr)                                             \
	adapter->pltfm_cb->sdio_cmd53_r16(adapter->drv_adapter, addr)
#define PLTFM_SDIO_CMD53_R32(addr)                                             \
	adapter->pltfm_cb->sdio_cmd53_r32(adapter->drv_adapter, addr)
#define PLTFM_SDIO_CMD53_RN(addr, size, val)                                   \
	adapter->pltfm_cb->sdio_cmd53_rn(adapter->drv_adapter, addr, size, val)
#define PLTFM_SDIO_CMD52_W8(addr, val)                                         \
	adapter->pltfm_cb->sdio_cmd52_w8(adapter->drv_adapter, addr, val)
#define PLTFM_SDIO_CMD53_W8(addr, val)                                         \
	adapter->pltfm_cb->sdio_cmd53_w8(adapter->drv_adapter, addr, val)
#define PLTFM_SDIO_CMD53_W16(addr, val)                                        \
	adapter->pltfm_cb->sdio_cmd53_w16(adapter->drv_adapter, addr, val)
#define PLTFM_SDIO_CMD53_W32(addr, val)                                        \
	adapter->pltfm_cb->sdio_cmd53_w32(adapter->drv_adapter, addr, val)
#define PLTFM_SDIO_CMD53_WN(addr, size, val)                                   \
	adapter->pltfm_cb->sdio_cmd53_wn(adapter->drv_adapter, addr, size, val)
#define PLTFM_SDIO_CMD52_CIA_R8(addr)                                          \
	adapter->pltfm_cb->sdio_cmd52_cia_r8(adapter->drv_adapter, addr)

#define PLTFM_REG_R8(addr)                                                     \
	adapter->pltfm_cb->reg_r8(adapter->drv_adapter, addr)
#define PLTFM_REG_R16(addr)                                                    \
	adapter->pltfm_cb->reg_r16(adapter->drv_adapter, addr)
#define PLTFM_REG_R32(addr)                                                    \
	adapter->pltfm_cb->reg_r32(adapter->drv_adapter, addr)
#define PLTFM_REG_W8(addr, val)                                                \
	adapter->pltfm_cb->reg_w8(adapter->drv_adapter, addr, val)
#define PLTFM_REG_W16(addr, val)                                               \
	adapter->pltfm_cb->reg_w16(adapter->drv_adapter, addr, val)
#define PLTFM_REG_W32(addr, val)                                               \
	adapter->pltfm_cb->reg_w32(adapter->drv_adapter, addr, val)

#if MAC_AX_PHL_H2C
#define PLTFM_TX(buf)                                                          \
	adapter->pltfm_cb->tx(adapter->phl_adapter, adapter->drv_adapter, buf)
#define PLTFM_QUERY_H2C(type)                                                  \
	adapter->pltfm_cb->rtl_query_h2c(adapter->phl_adapter,                 \
					 adapter->drv_adapter, type)
#else
#define PLTFM_TX(buf, len)                                                     \
	adapter->pltfm_cb->tx(adapter->drv_adapter, buf, len)
#endif
#define PLTFM_FREE(buf, size)                                                  \
	adapter->pltfm_cb->rtl_free(adapter->drv_adapter, buf, size)
#define PLTFM_MALLOC(size)                                                     \
	adapter->pltfm_cb->rtl_malloc(adapter->drv_adapter, size)
#define PLTFM_MEMCPY(dest, src, size)                                          \
	adapter->pltfm_cb->rtl_memcpy(adapter->drv_adapter, dest, src, size)
#define PLTFM_MEMSET(addr, value, size)                                        \
	adapter->pltfm_cb->rtl_memset(adapter->drv_adapter, addr, value, size)
#define PLTFM_MEMCMP(ptr1, ptr2, num)                                          \
	adapter->pltfm_cb->rtl_memcmp(adapter->drv_adapter, ptr1, ptr2, num)
#define PLTFM_DELAY_US(us)                                                     \
	adapter->pltfm_cb->rtl_delay_us(adapter->drv_adapter, us)
#define PLTFM_DELAY_MS(ms)                                                     \
	adapter->pltfm_cb->rtl_delay_ms(adapter->drv_adapter, ms)

#define PLTFM_MUTEX_INIT(mutex)                                                \
	adapter->pltfm_cb->rtl_mutex_init(adapter->drv_adapter, mutex)
#define PLTFM_MUTEX_DEINIT(mutex)                                              \
	adapter->pltfm_cb->rtl_mutex_deinit(adapter->drv_adapter, mutex)
#define PLTFM_MUTEX_LOCK(mutex)                                                \
	adapter->pltfm_cb->rtl_mutex_lock(adapter->drv_adapter, mutex)
#define PLTFM_MUTEX_UNLOCK(mutex)                                              \
	adapter->pltfm_cb->rtl_mutex_unlock(adapter->drv_adapter, mutex)
#define PLTFM_EVENT_NOTIFY(mac_ft, stat, buf, size)                            \
	adapter->pltfm_cb->event_notify(adapter->drv_adapter, mac_ft, stat,    \
					buf, size)
#define PLTFM_L2_NOTIFY(void)                                                  \
	adapter->pltfm_cb->ser_l2_notify(adapter->phl_adapter, adapter->drv_adapter)

#define PLTFM_LD_FW_SYMBOL(name, buf, buf_size) \
	adapter->pltfm_cb->ld_fw_symbol(adapter->phl_adapter, adapter->drv_adapter,\
	name, buf, buf_size)

#define adapter_to_mac_ops(adapter) ((struct mac_ax_ops *)((adapter)->ops))
#define adapter_to_intf_ops(adapter)                                           \
	((struct mac_ax_intf_ops *)((adapter)->ops->intf_ops))

#define MAC_REG_R8(addr) ops->reg_read8(adapter, addr)
#define MAC_REG_R16(addr) ops->reg_read16(adapter, addr)
#define MAC_REG_R32(addr) ops->reg_read32(adapter, addr)
#define MAC_REG_W8(addr, val) ops->reg_write8(adapter, addr, val)
#define MAC_REG_W16(addr, val) ops->reg_write16(adapter, addr, val)
#define MAC_REG_W32(addr, val) ops->reg_write32(adapter, addr, val)

#if MAC_AX_FEATURE_DBGCMD
#define PLTFM_SNPRINTF(s, sz, fmt, ...)                                               \
	adapter->pltfm_cb->rtl_sprintf(adapter->drv_adapter, s, sz, fmt, ##__VA_ARGS__)
#define PLTFM_STRCMP(s1, s2)                                               \
	adapter->pltfm_cb->rtl_strcmp(adapter->drv_adapter, s1, s2)
#define PLTFM_STRSEP(s, ct)                                               \
	adapter->pltfm_cb->rtl_strsep(adapter->drv_adapter, s, ct)
#define PLTFM_STRLEN(s)                                               \
	adapter->pltfm_cb->rtl_strlen(adapter->drv_adapter, s)
#define PLTFM_STRCPY(dest, src)                                               \
	adapter->pltfm_cb->rtl_strcpy(adapter->drv_adapter, dest, src)
#define PLTFM_STRPBRK(cs, ct)                                               \
	adapter->pltfm_cb->rtl_strpbrk(adapter->drv_adapter, cs, ct)
#define PLTFM_STRTOUL(buf, base)                                               \
	adapter->pltfm_cb->rtl_strtoul(adapter->drv_adapter, buf, base)
#endif
#endif /*CONFIG_NEW_HALMAC_INTERFACE*/

#define MAC_AX_WMM0_SEL		0
#define MAC_AX_WMM1_SEL		1
#define MAC_AX_WMM2_SEL		2
#define MAC_AX_WMM3_SEL		3

#define MAC_AX_HI0_SEL		17
#define MAC_AX_MG0_SEL		18
#define MAC_AX_HI1_SEL		25
#define MAC_AX_MG1_SEL		26

#define MAC_AX_HFC_CH_NUM	12
#define MAC_AX_IECAM_NUM	12

#define MAC_AX_R32_EA		0xEAEAEAEA
#define MAC_AX_R32_DEAD		0xDEADBEEF
#define MAC_AX_R32_DEAD2	0xDEADDEAD
#define MAC_AX_R32_FF		0xFFFFFFFF
#define MAC_AX_R16_DEAD		0xDEAD

#define MAC_REG_POOL_COUNT	10
#define MAC_REG_OFFSET16	2
#define MAC_REG_OFFSET		4
#define MAC_REG_OFFSET_SH	8
#define MAC_REG_OFFSET_SH_2	3
#define R_AX_CMAC_REG_END	0xFFFF

/* SRAM mem dump */
#define R_AX_INDIR_ACCESS_ENTRY 0x40000
#define MAC_MEM_DUMP_PAGE_SIZE	0x40000

#define CPU_LOCAL_BASE_ADDR		0x18003000
#define AXIDMA_BASE_ADDR		0x18006000
#define	STA_SCHED_BASE_ADDR		0x18808000
#define	RXPLD_FLTR_CAM_BASE_ADDR	0x18813000
#define	SEC_CAM_BASE_ADDR		0x18814000
#define	WOW_CAM_BASE_ADDR		0x18815000
#define	CMAC_TBL_BASE_ADDR		0x18840000
#define	ADDR_CAM_BASE_ADDR		0x18850000
#define	BSSID_CAM_BASE_ADDR		0x18853000
#define	BA_CAM_BASE_ADDR		0x18854000
#define	BCN_IE_CAM0_BASE_ADDR		0x18855000
#define	SHARED_BUF_BASE_ADDR		0x18700000
#define	DMAC_TBL_BASE_ADDR		0x18800000
#define	SHCUT_MACHDR_BASE_ADDR		0x18800800
#define	BCN_IE_CAM1_BASE_ADDR		0x188A0000
#define	TXD_FIFO_0_BASE_ADDR		0x18856200
#define	TXD_FIFO_1_BASE_ADDR		0x188A1080

#define CCTL_INFO_SIZE		32
#define DCTL_INFO_SIZE		16
#define DCTL_INFO_SIZE_V1	32
#define MACHDR_SIZE		56
#define BA_CAM_SIZE		64
#define BA_CAM_NUM_SH		3
#define BCN_IE_CAM_SIZE		8
#define BCN_IE_CAM_NUM		12
#define AXIDMA_REG_SIZE		0x1000

/*--------------------Define Enum---------------------------------------*/

/**
 * @enum mac_ax_dma_ch
 *
 * @brief mac_ax_dma_ch
 *
 * @var mac_ax_dma_ch::MAC_AX_DMA_ACH0
 * Please Place Description here.
 * @var mac_ax_dma_ch::MAC_AX_DMA_ACH1
 * Please Place Description here.
 * @var mac_ax_dma_ch::MAC_AX_DMA_ACH2
 * Please Place Description here.
 * @var mac_ax_dma_ch::MAC_AX_DMA_ACH3
 * Please Place Description here.
 * @var mac_ax_dma_ch::MAC_AX_DMA_ACH4
 * Please Place Description here.
 * @var mac_ax_dma_ch::MAC_AX_DMA_ACH5
 * Please Place Description here.
 * @var mac_ax_dma_ch::MAC_AX_DMA_ACH6
 * Please Place Description here.
 * @var mac_ax_dma_ch::MAC_AX_DMA_ACH7
 * Please Place Description here.
 * @var mac_ax_dma_ch::MAC_AX_DMA_B0MG
 * Please Place Description here.
 * @var mac_ax_dma_ch::MAC_AX_DMA_B0HI
 * Please Place Description here.
 * @var mac_ax_dma_ch::MAC_AX_DMA_B1MG
 * Please Place Description here.
 * @var mac_ax_dma_ch::MAC_AX_DMA_B1HI
 * Please Place Description here.
 * @var mac_ax_dma_ch::MAC_AX_DMA_H2C
 * Please Place Description here.
 * @var mac_ax_dma_ch::MAC_AX_DMA_CH_NUM
 * Please Place Description here.
 */
enum mac_ax_dma_ch {
	MAC_AX_DMA_ACH0 = 0,
	MAC_AX_DMA_ACH1,
	MAC_AX_DMA_ACH2,
	MAC_AX_DMA_ACH3,
	MAC_AX_DMA_ACH4,
	MAC_AX_DMA_ACH5,
	MAC_AX_DMA_ACH6,
	MAC_AX_DMA_ACH7,
	MAC_AX_DMA_B0MG,
	MAC_AX_DMA_B0HI,
	MAC_AX_DMA_B1MG,
	MAC_AX_DMA_B1HI,
	MAC_AX_DMA_H2C,
	MAC_AX_DMA_CH_NUM
};

/**
 * @enum mac_ax_data_ch
 *
 * @brief mac_ax_data_ch
 *
 * @var mac_ax_data_ch::MAC_AX_DATA_CH0
 * Please Place Description here.
 * @var mac_ax_data_ch::MAC_AX_DATA_CH1
 * Please Place Description here.
 * @var mac_ax_data_ch::MAC_AX_DATA_CH2
 * Please Place Description here.
 * @var mac_ax_data_ch::MAC_AX_DATA_CH3
 * Please Place Description here.
 * @var mac_ax_data_ch::MAC_AX_DATA_CH4
 * Please Place Description here.
 * @var mac_ax_data_ch::MAC_AX_DATA_CH5
 * Please Place Description here.
 * @var mac_ax_data_ch::MAC_AX_DATA_CH6
 * Please Place Description here.
 * @var mac_ax_data_ch::MAC_AX_DATA_CH7
 * Please Place Description here.
 * @var mac_ax_data_ch::MAC_AX_DATA_HIQ
 * Please Place Description here.
 */

/**
 * @enum mac_ax_data_ch
 *
 * @brief mac_ax_data_ch
 *
 * @var mac_ax_data_ch::MAC_AX_DATA_CH0
 * Please Place Description here.
 * @var mac_ax_data_ch::MAC_AX_DATA_CH1
 * Please Place Description here.
 * @var mac_ax_data_ch::MAC_AX_DATA_CH2
 * Please Place Description here.
 * @var mac_ax_data_ch::MAC_AX_DATA_CH3
 * Please Place Description here.
 * @var mac_ax_data_ch::MAC_AX_DATA_CH4
 * Please Place Description here.
 * @var mac_ax_data_ch::MAC_AX_DATA_CH5
 * Please Place Description here.
 * @var mac_ax_data_ch::MAC_AX_DATA_CH6
 * Please Place Description here.
 * @var mac_ax_data_ch::MAC_AX_DATA_CH7
 * Please Place Description here.
 * @var mac_ax_data_ch::MAC_AX_DATA_MGN
 * Please Place Description here.
 * @var mac_ax_data_ch::MAC_AX_DATA_HIQ
 * Please Place Description here.
 */
enum mac_ax_data_ch {
	MAC_AX_DATA_CH0 = 0,
	MAC_AX_DATA_CH1 = 1,
	MAC_AX_DATA_CH2 = 2,
	MAC_AX_DATA_CH3 = 3,
	MAC_AX_DATA_CH4 = 4,
	MAC_AX_DATA_CH5 = 5,
	MAC_AX_DATA_CH6 = 6,
	MAC_AX_DATA_CH7 = 7,
	MAC_AX_DATA_MGN = 8,
	MAC_AX_DATA_HIQ = 9
};

/**
 * @enum mac_ax_pcie_phy
 *
 * @brief mac_ax_pcie_phy
 *
 * @var mac_ax_pcie_phy::MAC_AX_PCIE_PHY_GEN1
 * Please Place Description here.
 * @var mac_ax_pcie_phy::MAC_AX_PCIE_PHY_GEN2
 * Please Place Description here.
 * @var mac_ax_pcie_phy::MAC_AX_PCIE_PHY_GEN1_UNDEFINE
 * Please Place Description here.
 */
enum mac_ax_pcie_phy {
	MAC_AX_PCIE_PHY_GEN1,
	MAC_AX_PCIE_PHY_GEN2,
	MAC_AX_PCIE_PHY_GEN1_UNDEFINE = 0x7F,
};

/**
 * @enum mac_ax_data_rate
 *
 * @brief mac_ax_data_rate
 *
 * @var mac_ax_data_rate::MAC_AX_CCK1
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_CCK2
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_CCK5_5
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_CCK11
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_OFDM6
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_OFDM9
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_OFDM12
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_OFDM18
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_OFDM24
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_OFDM36
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_OFDM48
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_OFDM54
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS0
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS1
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS2
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS3
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS4
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS5
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS6
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS7
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS8
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS9
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS10
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS11
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS12
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS13
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS14
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS15
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS16
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS17
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS18
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS19
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS20
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS21
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS22
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS23
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS24
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS25
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS26
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS27
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS28
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS29
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS30
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_MCS31
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS1_MCS0
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS1_MCS1
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS1_MCS2
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS1_MCS3
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS1_MCS4
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS1_MCS5
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS1_MCS6
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS1_MCS7
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS1_MCS8
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS1_MCS9
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS2_MCS0
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS2_MCS1
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS2_MCS2
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS2_MCS3
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS2_MCS4
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS2_MCS5
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS2_MCS6
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS2_MCS7
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS2_MCS8
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS2_MCS9
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS3_MCS0
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS3_MCS1
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS3_MCS2
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS3_MCS3
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS3_MCS4
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS3_MCS5
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS3_MCS6
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS3_MCS7
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS3_MCS8
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS3_MCS9
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS4_MCS0
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS4_MCS1
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS4_MCS2
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS4_MCS3
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS4_MCS4
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS4_MCS5
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS4_MCS6
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS4_MCS7
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS4_MCS8
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_VHT_NSS4_MCS9
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS1_MCS0
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS1_MCS1
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS1_MCS2
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS1_MCS3
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS1_MCS4
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS1_MCS5
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS1_MCS6
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS1_MCS7
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS1_MCS8
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS1_MCS9
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS1_MCS10
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS1_MCS11
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS2_MCS0
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS2_MCS1
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS2_MCS2
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS2_MCS3
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS2_MCS4
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS2_MCS5
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS2_MCS6
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS2_MCS7
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS2_MCS8
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS2_MCS9
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS2_MCS10
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS2_MCS11
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS3_MCS0
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS3_MCS1
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS3_MCS2
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS3_MCS3
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS3_MCS4
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS3_MCS5
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS3_MCS6
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS3_MCS7
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS3_MCS8
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS3_MCS9
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS3_MCS10
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS3_MCS11
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS4_MCS0
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS4_MCS1
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS4_MCS2
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS4_MCS3
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS4_MCS4
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS4_MCS5
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS4_MCS6
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS4_MCS7
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS4_MCS8
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS4_MCS9
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS4_MCS10
 * Please Place Description here.
 * @var mac_ax_data_rate::MAC_AX_HE_NSS4_MCS11
 * Please Place Description here.
 */
enum mac_ax_data_rate {
	MAC_AX_CCK1		= 0x0,
	MAC_AX_CCK2		= 0x1,
	MAC_AX_CCK5_5		= 0x2,
	MAC_AX_CCK11		= 0x3,
	MAC_AX_OFDM6		= 0x4,
	MAC_AX_OFDM9		= 0x5,
	MAC_AX_OFDM12		= 0x6,
	MAC_AX_OFDM18		= 0x7,
	MAC_AX_OFDM24		= 0x8,
	MAC_AX_OFDM36		= 0x9,
	MAC_AX_OFDM48		= 0xA,
	MAC_AX_OFDM54		= 0xB,
	MAC_AX_MCS0		= 0x80,
	MAC_AX_MCS1		= 0x81,
	MAC_AX_MCS2		= 0x82,
	MAC_AX_MCS3		= 0x83,
	MAC_AX_MCS4		= 0x84,
	MAC_AX_MCS5		= 0x85,
	MAC_AX_MCS6		= 0x86,
	MAC_AX_MCS7		= 0x87,
	MAC_AX_MCS8		= 0x88,
	MAC_AX_MCS9		= 0x89,
	MAC_AX_MCS10		= 0x8A,
	MAC_AX_MCS11		= 0x8B,
	MAC_AX_MCS12		= 0x8C,
	MAC_AX_MCS13		= 0x8D,
	MAC_AX_MCS14		= 0x8E,
	MAC_AX_MCS15		= 0x8F,
	MAC_AX_MCS16		= 0x90,
	MAC_AX_MCS17		= 0x91,
	MAC_AX_MCS18		= 0x92,
	MAC_AX_MCS19		= 0x93,
	MAC_AX_MCS20		= 0x94,
	MAC_AX_MCS21		= 0x95,
	MAC_AX_MCS22		= 0x96,
	MAC_AX_MCS23		= 0x97,
	MAC_AX_MCS24		= 0x98,
	MAC_AX_MCS25		= 0x99,
	MAC_AX_MCS26		= 0x9A,
	MAC_AX_MCS27		= 0x9B,
	MAC_AX_MCS28		= 0x9C,
	MAC_AX_MCS29		= 0x9D,
	MAC_AX_MCS30		= 0x9E,
	MAC_AX_MCS31		= 0x9F,
	MAC_AX_VHT_NSS1_MCS0	= 0x100,
	MAC_AX_VHT_NSS1_MCS1	= 0x101,
	MAC_AX_VHT_NSS1_MCS2	= 0x102,
	MAC_AX_VHT_NSS1_MCS3	= 0x103,
	MAC_AX_VHT_NSS1_MCS4	= 0x104,
	MAC_AX_VHT_NSS1_MCS5	= 0x105,
	MAC_AX_VHT_NSS1_MCS6	= 0x106,
	MAC_AX_VHT_NSS1_MCS7	= 0x107,
	MAC_AX_VHT_NSS1_MCS8	= 0x108,
	MAC_AX_VHT_NSS1_MCS9	= 0x109,
	MAC_AX_VHT_NSS2_MCS0	= 0x110,
	MAC_AX_VHT_NSS2_MCS1	= 0x111,
	MAC_AX_VHT_NSS2_MCS2	= 0x112,
	MAC_AX_VHT_NSS2_MCS3	= 0x113,
	MAC_AX_VHT_NSS2_MCS4	= 0x114,
	MAC_AX_VHT_NSS2_MCS5	= 0x115,
	MAC_AX_VHT_NSS2_MCS6	= 0x116,
	MAC_AX_VHT_NSS2_MCS7	= 0x117,
	MAC_AX_VHT_NSS2_MCS8	= 0x118,
	MAC_AX_VHT_NSS2_MCS9	= 0x119,
	MAC_AX_VHT_NSS3_MCS0	= 0x120,
	MAC_AX_VHT_NSS3_MCS1	= 0x121,
	MAC_AX_VHT_NSS3_MCS2	= 0x122,
	MAC_AX_VHT_NSS3_MCS3	= 0x123,
	MAC_AX_VHT_NSS3_MCS4	= 0x124,
	MAC_AX_VHT_NSS3_MCS5	= 0x125,
	MAC_AX_VHT_NSS3_MCS6	= 0x126,
	MAC_AX_VHT_NSS3_MCS7	= 0x127,
	MAC_AX_VHT_NSS3_MCS8	= 0x128,
	MAC_AX_VHT_NSS3_MCS9	= 0x129,
	MAC_AX_VHT_NSS4_MCS0	= 0x130,
	MAC_AX_VHT_NSS4_MCS1	= 0x131,
	MAC_AX_VHT_NSS4_MCS2	= 0x132,
	MAC_AX_VHT_NSS4_MCS3	= 0x133,
	MAC_AX_VHT_NSS4_MCS4	= 0x134,
	MAC_AX_VHT_NSS4_MCS5	= 0x135,
	MAC_AX_VHT_NSS4_MCS6	= 0x136,
	MAC_AX_VHT_NSS4_MCS7	= 0x137,
	MAC_AX_VHT_NSS4_MCS8	= 0x138,
	MAC_AX_VHT_NSS4_MCS9	= 0x139,
	MAC_AX_HE_NSS1_MCS0	= 0x180,
	MAC_AX_HE_NSS1_MCS1	= 0x181,
	MAC_AX_HE_NSS1_MCS2	= 0x182,
	MAC_AX_HE_NSS1_MCS3	= 0x183,
	MAC_AX_HE_NSS1_MCS4	= 0x184,
	MAC_AX_HE_NSS1_MCS5	= 0x185,
	MAC_AX_HE_NSS1_MCS6	= 0x186,
	MAC_AX_HE_NSS1_MCS7	= 0x187,
	MAC_AX_HE_NSS1_MCS8	= 0x188,
	MAC_AX_HE_NSS1_MCS9	= 0x189,
	MAC_AX_HE_NSS1_MCS10	= 0x18A,
	MAC_AX_HE_NSS1_MCS11	= 0x18B,
	MAC_AX_HE_NSS2_MCS0	= 0x190,
	MAC_AX_HE_NSS2_MCS1	= 0x191,
	MAC_AX_HE_NSS2_MCS2	= 0x192,
	MAC_AX_HE_NSS2_MCS3	= 0x193,
	MAC_AX_HE_NSS2_MCS4	= 0x194,
	MAC_AX_HE_NSS2_MCS5	= 0x195,
	MAC_AX_HE_NSS2_MCS6	= 0x196,
	MAC_AX_HE_NSS2_MCS7	= 0x197,
	MAC_AX_HE_NSS2_MCS8	= 0x198,
	MAC_AX_HE_NSS2_MCS9	= 0x199,
	MAC_AX_HE_NSS2_MCS10	= 0x19A,
	MAC_AX_HE_NSS2_MCS11	= 0x19B,
	MAC_AX_HE_NSS3_MCS0	= 0x1A0,
	MAC_AX_HE_NSS3_MCS1	= 0x1A1,
	MAC_AX_HE_NSS3_MCS2	= 0x1A2,
	MAC_AX_HE_NSS3_MCS3	= 0x1A3,
	MAC_AX_HE_NSS3_MCS4	= 0x1A4,
	MAC_AX_HE_NSS3_MCS5	= 0x1A5,
	MAC_AX_HE_NSS3_MCS6	= 0x1A6,
	MAC_AX_HE_NSS3_MCS7	= 0x1A7,
	MAC_AX_HE_NSS3_MCS8	= 0x1A8,
	MAC_AX_HE_NSS3_MCS9	= 0x1A9,
	MAC_AX_HE_NSS3_MCS10	= 0x1AA,
	MAC_AX_HE_NSS3_MCS11	= 0x1AB,
	MAC_AX_HE_NSS4_MCS0	= 0x1B0,
	MAC_AX_HE_NSS4_MCS1	= 0x1B1,
	MAC_AX_HE_NSS4_MCS2	= 0x1B2,
	MAC_AX_HE_NSS4_MCS3	= 0x1B3,
	MAC_AX_HE_NSS4_MCS4	= 0x1B4,
	MAC_AX_HE_NSS4_MCS5	= 0x1B5,
	MAC_AX_HE_NSS4_MCS6	= 0x1B6,
	MAC_AX_HE_NSS4_MCS7	= 0x1B7,
	MAC_AX_HE_NSS4_MCS8	= 0x1B8,
	MAC_AX_HE_NSS4_MCS9	= 0x1B9,
	MAC_AX_HE_NSS4_MCS10	= 0x1BA,
	MAC_AX_HE_NSS4_MCS11	= 0x1BB
};

/**
 * @struct wd_body_t
 * @brief wd_body_t
 *
 * @var wd_body_t::dword0
 * Please Place Description here.
 * @var wd_body_t::dword1
 * Please Place Description here.
 * @var wd_body_t::dword2
 * Please Place Description here.
 * @var wd_body_t::dword3
 * Please Place Description here.
 * @var wd_body_t::dword4
 * Please Place Description here.
 * @var wd_body_t::dword5
 * Please Place Description here.
 */
struct wd_body_t {
	u32 dword0;
	u32 dword1;
	u32 dword2;
	u32 dword3;
	u32 dword4;
	u32 dword5;
};

/**
 * @struct wd_info_t
 * @brief wd_info_t
 *
 * @var wd_info_t::dword0
 * Please Place Description here.
 * @var wd_info_t::dword1
 * Please Place Description here.
 * @var wd_info_t::dword2
 * Please Place Description here.
 * @var wd_info_t::dword3
 * Please Place Description here.
 * @var wd_info_t::dword4
 * Please Place Description here.
 * @var wd_info_t::dword5
 * Please Place Description here.
 */
struct wd_info_t {
	u32 dword0;
	u32 dword1;
	u32 dword2;
	u32 dword3;
	u32 dword4;
	u32 dword5;
};

#define WD_BODY_LEN	(sizeof(struct wd_body_t))
#define WD_INFO_LEN	(sizeof(struct wd_info_t))

/**
 * @struct wd_body_t_v1
 * @brief wd_body_t_v1
 *
 * @var wd_body_t::dword0
 * Please Place Description here.
 * @var wd_body_t::dword1
 * Please Place Description here.
 * @var wd_body_t::dword2
 * Please Place Description here.
 * @var wd_body_t::dword3
 * Please Place Description here.
 * @var wd_body_t::dword4
 * Please Place Description here.
 * @var wd_body_t::dword5
 * Please Place Description here.
 * @var wd_body_t::dword6
 * Please Place Description here.
 * @var wd_body_t::dword7
 * Please Place Description here.
 */
struct wd_body_t_v1 {
	u32 dword0;
	u32 dword1;
	u32 dword2;
	u32 dword3;
	u32 dword4;
	u32 dword5;
	u32 dword6;
	u32 dword7;
};

#define WD_BODY_LEN_V1	(sizeof(struct wd_body_t_v1))

/**
 * @struct rxd_short_t
 * @brief rxd_short_t
 *
 * @var rxd_short_t::dword0
 * Please Place Description here.
 * @var rxd_short_t::dword1
 * Please Place Description here.
 * @var rxd_short_t::dword2
 * Please Place Description here.
 * @var rxd_short_t::dword3
 * Please Place Description here.
 */
struct rxd_short_t {
	u32 dword0;
	u32 dword1;
	u32 dword2;
	u32 dword3;
};

/**
 * @struct rxd_long_t
 * @brief rxd_long_t
 *
 * @var rxd_long_t::dword0
 * Please Place Description here.
 * @var rxd_long_t::dword1
 * Please Place Description here.
 * @var rxd_long_t::dword2
 * Please Place Description here.
 * @var rxd_long_t::dword3
 * Please Place Description here.
 * @var rxd_long_t::dword4
 * Please Place Description here.
 * @var rxd_long_t::dword5
 * Please Place Description here.
 * @var rxd_long_t::dword6
 * Please Place Description here.
 * @var rxd_long_t::dword7
 * Please Place Description here.
 */
struct rxd_long_t {
	u32 dword0;
	u32 dword1;
	u32 dword2;
	u32 dword3;
	u32 dword4;
	u32 dword5;
	u32 dword6;
	u32 dword7;
};

#define RXD_SHORT_LEN	(sizeof(struct rxd_short_t))
#define RXD_LONG_LEN	(sizeof(struct rxd_long_t))

/**
 * @struct txd_proc_type
 * @brief txd_proc_type
 *
 * @var txd_proc_type::type
 * Please Place Description here.
 * @var txd_proc_type::handler
 * Please Place Description here.
 */
struct txd_proc_type {
	enum rtw_packet_type type;
	u32 (*handler)(struct mac_ax_adapter *adapter,
		       struct rtw_t_meta_data *info, u8 *buf, u32 len);
};

/**
 * @struct rxd_parse_type
 * @brief rxd_parse_type
 *
 * @var rxd_parse_type::type
 * Please Place Description here.
 * @var rxd_parse_type::handler
 * Please Place Description here.
 */
struct rxd_parse_type {
	u8 type;
	u32 (*handler)(struct mac_ax_adapter *adapter,
		       struct mac_ax_rxpkt_info *info, u8 *buf, u32 len);
};

/**
 * @enum mac_ax_bw
 *
 * @brief mac_ax_bw
 *
 * @var mac_ax_bw::MAC_AX_BW_20M
 * Please Place Description here.
 * @var mac_ax_bw::MAC_AX_BW_40M
 * Please Place Description here.
 * @var mac_ax_bw::MAC_AX_BW_80M
 * Please Place Description here.
 * @var mac_ax_bw::MAC_AX_BW_160M
 * Please Place Description here.
 * @var mac_ax_bw::MAC_AX_BW_UNDEFINE
 * Please Place Description here.
 */
enum mac_ax_bw {
	MAC_AX_BW_20M = 0,
	MAC_AX_BW_40M = 1,
	MAC_AX_BW_80M = 2,
	MAC_AX_BW_160M = 3,
	MAC_AX_BW_UNDEFINE = 0x7F
};

/**
 * @enum mac_ax_gi_ltf
 *
 * @brief mac_ax_gi_ltf
 *
 * @var mac_ax_gi_ltf::MAC_AX_LGI_4XHE32
 * Please Place Description here.
 * @var mac_ax_gi_ltf::MAC_AX_SGI_4XHE08
 * Please Place Description here.
 * @var mac_ax_gi_ltf::MAC_AX_2XHE16
 * Please Place Description here.
 * @var mac_ax_gi_ltf::MAC_AX_2XHE08
 * Please Place Description here.
 * @var mac_ax_gi_ltf::MAC_AX_1XHE16
 * Please Place Description here.
 * @var mac_ax_gi_ltf::MAC_AX_1XHE08
 * Please Place Description here.
 */
enum mac_ax_gi_ltf {
	MAC_AX_LGI_4XHE32 = 0,
	MAC_AX_SGI_4XHE08 = 1,
	MAC_AX_2XHE16 = 2,
	MAC_AX_2XHE08 = 3,
	MAC_AX_1XHE16 = 4,
	MAC_AX_1XHE08 = 5
};

/**
 * @enum mac_ax_stbc
 *
 * @brief mac_ax_stbc
 *
 * @var mac_ax_stbc::MAC_AX_STBC_DIS
 * Please Place Description here.
 * @var mac_ax_stbc::MAC_AX_STBC_EN
 * Please Place Description here.
 * @var mac_ax_stbc::MAC_AX_STBC_HT2
 * Please Place Description here.
 */
enum mac_ax_stbc {
	MAC_AX_STBC_DIS = 0,
	MAC_AX_STBC_EN = 1,
	MAC_AX_STBC_HT2 = 2
};

/**
 * @enum mac_ax_delay_tx_en
 *
 * @brief mac_ax_delay_tx_en
 *
 * @var mac_ax_delay_tx_en::MAC_AX_DELAY_TX_DIS
 * Please Place Description here.
 * @var mac_ax_delay_tx_en::MAC_AX_DELAY_TX_B0
 * Please Place Description here.
 * @var mac_ax_delay_tx_en::MAC_AX_DELAY_TX_B1
 * Please Place Description here.
 * @var mac_ax_delay_tx_en::MAC_AX_DELAY_TX_BOTH
 * Please Place Description here.
 */
enum mac_ax_delay_tx_en {
	MAC_AX_DELAY_TX_DIS = 0,
	MAC_AX_DELAY_TX_B0 = 1,
	MAC_AX_DELAY_TX_B1 = 2,
	MAC_AX_DELAY_TX_BOTH = 3,
};

/**
 * @enum mac_ax_hcifc_mode
 *
 * @brief mac_ax_hcifc_mode
 *
 * @var mac_ax_hcifc_mode::MAC_AX_HCIFC_POH
 * Please Place Description here.
 * @var mac_ax_hcifc_mode::MAC_AX_HCIFC_STF
 * Please Place Description here.
 * @var mac_ax_hcifc_mode::MAC_AX_HCIFC_SDIO
 * Please Place Description here.
 * @var mac_ax_hcifc_mode::MAC_AX_HCIFC_LAST
 * Please Place Description here.
 * @var mac_ax_hcifc_mode::MAC_AX_HCIFC_MODE_MAX
 * Please Place Description here.
 * @var mac_ax_hcifc_mode::MAC_AX_HCIFC_MODE_INVALID
 * Please Place Description here.
 */
enum mac_ax_hcifc_mode {
	MAC_AX_HCIFC_POH = 0,
	MAC_AX_HCIFC_STF = 1,
	MAC_AX_HCIFC_SDIO = 2,

	/* keep last */
	MAC_AX_HCIFC_LAST,
	MAC_AX_HCIFC_MODE_MAX = MAC_AX_HCIFC_LAST,
	MAC_AX_HCIFC_MODE_INVALID = MAC_AX_HCIFC_LAST,
};

/**
 * @enum mac_ax_bcn_hit_rule
 *
 * @brief mac_ax_bcn_hit_rule
 *
 * @var mac_ax_bcn_hit_rule::MAC_AX_A3
 * Please Place Description here.
 * @var mac_ax_bcn_hit_rule::MAC_AX_A2
 * Please Place Description here.
 * @var mac_ax_bcn_hit_rule::MAC_AX_A2_AND_A3
 * Please Place Description here.
 * @var mac_ax_bcn_hit_rule::MAC_AX_A2_OR_A3
 * Please Place Description here.
 */
enum mac_ax_bcn_hit_rule {
	MAC_AX_A3,
	MAC_AX_A2,
	MAC_AX_A2_AND_A3,
	MAC_AX_A2_OR_A3
};

/**
 * @enum mac_ax_hit_rule
 *
 * @brief mac_ax_hit_rule
 *
 * @var mac_ax_hit_rule::MAC_AX_A1_AND_A2
 * Please Place Description here.
 * @var mac_ax_hit_rule::MAC_AX_A1_AND_A3
 * Please Place Description here.
 */
enum mac_ax_hit_rule {
	MAC_AX_A1_AND_A2,
	MAC_AX_A1_AND_A3
};

/**
 * @enum mac_ax_bb_sel
 *
 * @brief mac_ax_bb_sel
 *
 * @var mac_ax_bb_sel::MAC_AX_PHY_0
 * Please Place Description here.
 * @var mac_ax_bb_sel::MAC_AX_PHY_1
 * Please Place Description here.
 */
enum mac_ax_bb_sel {
	MAC_AX_PHY_0,
	MAC_AX_PHY_1
};

/**
 * @enum mac_ax_pps_sel
 *
 * @brief mac_ax_pps_sel
 *
 * @var mac_ax_pps_sel::MAC_AX_PPS_0
 * Please Place Description here.
 * @var mac_ax_pps_sel::MAC_AX_PPS_1
 * Please Place Description here.
 * @var mac_ax_pps_sel::MAC_AX_PPS_LAST
 * Please Place Description here.
 * @var mac_ax_pps_sel::MAC_AX_PPS_MAX
 * Please Place Description here.
 * @var mac_ax_pps_sel::MAC_AX_PPS_INVALID
 * Please Place Description here.
 */
enum mac_ax_pps_sel {
	MAC_AX_PPS_0 = 0,
	MAC_AX_PPS_1,

	/* keep last */
	MAC_AX_PPS_LAST,
	MAC_AX_PPS_MAX = MAC_AX_PPS_LAST,
	MAC_AX_PPS_INVALID = MAC_AX_PPS_LAST,
};

/**
 * @enum mac_ax_tgt_ind
 *
 * @brief mac_ax_tgt_ind
 *
 * @var mac_ax_tgt_ind::MAC_AX_TO_HOST
 * Please Place Description here.
 * @var mac_ax_tgt_ind::MAC_AX_TO_WLAN_CPU
 * Please Place Description here.
 * @var mac_ax_tgt_ind::MAC_AX_TO_DRIVER
 * Please Place Description here.
 */
enum mac_ax_tgt_ind {
	MAC_AX_TO_HOST,
	MAC_AX_TO_WLAN_CPU,
	MAC_AX_TO_DRIVER
};

/**
 * @enum mac_ax_frm_tgt_ind
 *
 * @brief mac_ax_frm_tgt_ind
 *
 * @var mac_ax_frm_tgt_ind::MAC_AX_DIS_FRAM_TGT
 * Please Place Description here.
 * @var mac_ax_frm_tgt_ind::MAC_AX_MGT_FRAM_TGT
 * Please Place Description here.
 * @var mac_ax_frm_tgt_ind::MAC_AX_CTL_FRAM_TGT
 * Please Place Description here.
 * @var mac_ax_frm_tgt_ind::MAC_AX_MGT_CTL_FRAM_TGT
 * Please Place Description here.
 * @var mac_ax_frm_tgt_ind::MAC_AX_DATA_FRAM_TGT
 * Please Place Description here.
 * @var mac_ax_frm_tgt_ind::MAC_AX_MGT_DATA_FRAM_TGT
 * Please Place Description here.
 * @var mac_ax_frm_tgt_ind::MAC_AX_CTL_DATA_FRAM_TGT
 * Please Place Description here.
 * @var mac_ax_frm_tgt_ind::MAC_AX_MGT_CTL_DATA_FRAM_TGT
 * Please Place Description here.
 */
enum mac_ax_frm_tgt_ind {
	MAC_AX_DIS_FRAM_TGT,
	MAC_AX_MGT_FRAM_TGT,
	MAC_AX_CTL_FRAM_TGT,
	MAC_AX_MGT_CTL_FRAM_TGT,
	MAC_AX_DATA_FRAM_TGT,
	MAC_AX_MGT_DATA_FRAM_TGT,
	MAC_AX_CTL_DATA_FRAM_TGT,
	MAC_AX_MGT_CTL_DATA_FRAM_TGT,
};

/**
 * @enum mac_ax_txcnt_sel
 *
 * @brief mac_ax_txcnt_sel
 *
 * @var mac_ax_txcnt_sel::MAC_AX_TXCNT_LCCK
 * Please Place Description here.
 * @var mac_ax_txcnt_sel::MAC_AX_TXCNT_SCCK
 * Please Place Description here.
 * @var mac_ax_txcnt_sel::MAC_AX_TXCNT_OFDM
 * Please Place Description here.
 * @var mac_ax_txcnt_sel::MAC_AX_TXCNT_HT
 * Please Place Description here.
 * @var mac_ax_txcnt_sel::MAC_AX_TXCNT_HTGF
 * Please Place Description here.
 * @var mac_ax_txcnt_sel::MAC_AX_TXCNT_VHTSU
 * Please Place Description here.
 * @var mac_ax_txcnt_sel::MAC_AX_TXCNT_VHTMU
 * Please Place Description here.
 * @var mac_ax_txcnt_sel::MAC_AX_TXCNT_HESU
 * Please Place Description here.
 * @var mac_ax_txcnt_sel::MAC_AX_TXCNT_HEERSU
 * Please Place Description here.
 * @var mac_ax_txcnt_sel::MAC_AX_TXCNT_HEMU
 * Please Place Description here.
 * @var mac_ax_txcnt_sel::MAC_AX_TXCNT_HETB
 * Please Place Description here.
 */
enum mac_ax_txcnt_sel {
	MAC_AX_TXCNT_LCCK = 0,
	MAC_AX_TXCNT_SCCK = 1,
	MAC_AX_TXCNT_OFDM = 2,
	MAC_AX_TXCNT_HT = 3,
	MAC_AX_TXCNT_HTGF = 4,
	MAC_AX_TXCNT_VHTSU = 5,
	MAC_AX_TXCNT_VHTMU = 6,
	MAC_AX_TXCNT_HESU = 7,
	MAC_AX_TXCNT_HEERSU = 8,
	MAC_AX_TXCNT_HEMU = 9,
	MAC_AX_TXCNT_HETB = 0xA
};

/**
 * @enum mac_ax_rxcnt_sel
 *
 * @brief mac_ax_rxcnt_sel
 *
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_OFDM_OK
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_OFDM_FAIL
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_OFDM_FAM
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_CCK_OK
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_CCK_FAIL
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_CCK_FAM
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_HT_OK
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_HT_FAIL
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_HT_PPDU
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_HT_FAM
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_VHTSU_OK
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_VHTSU_FAIL
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_VHTSU_PPDU
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_VHTSU_FAM
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_VHTMU_OK
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_VHTMU_FAIL
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_VHTMU_PPDU
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_VHTMU_FAM
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_HESU_OK
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_HESU_FAIL
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_HESU_PPDU
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_HESU_FAM
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_HEMU_OK
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_HEMU_FAIL
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_HEMU_PPDU
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_HEMU_FAM
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_HETB_OK
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_HETB_FAIL
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_HETB_PPDU
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_HETB_FAM
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_INVD
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_RECCA
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_FULLDRP
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_FULLDRP_PKT
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_RXDMA
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_USER0
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_USER1
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_USER2
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_USER3
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_CONT_FCS
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_PKTFLTR_DRP
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_CSIPKT_DMA_OK
 * Please Place Description here.
 * @var mac_ax_rxcnt_sel::MAC_AX_RXCNT_CSIPKT_DMA_DROP
 * Please Place Description here.
 */
enum mac_ax_rxcnt_sel {
	MAC_AX_RXCNT_OFDM_OK = 0,
	MAC_AX_RXCNT_OFDM_FAIL = 1,
	MAC_AX_RXCNT_OFDM_FAM = 2,
	MAC_AX_RXCNT_CCK_OK = 3,
	MAC_AX_RXCNT_CCK_FAIL = 4,
	MAC_AX_RXCNT_CCK_FAM = 5,
	MAC_AX_RXCNT_HT_OK = 6,
	MAC_AX_RXCNT_HT_FAIL = 7,
	MAC_AX_RXCNT_HT_PPDU = 8,
	MAC_AX_RXCNT_HT_FAM = 9,
	MAC_AX_RXCNT_VHTSU_OK = 0xA,
	MAC_AX_RXCNT_VHTSU_FAIL = 0xB,
	MAC_AX_RXCNT_VHTSU_PPDU = 0xC,
	MAC_AX_RXCNT_VHTSU_FAM = 0xD,
	MAC_AX_RXCNT_VHTMU_OK = 0xE,
	MAC_AX_RXCNT_VHTMU_FAIL = 0xF,
	MAC_AX_RXCNT_VHTMU_PPDU = 0x10,
	MAC_AX_RXCNT_VHTMU_FAM = 0x11,
	MAC_AX_RXCNT_HESU_OK = 0x12,
	MAC_AX_RXCNT_HESU_FAIL = 0x13,
	MAC_AX_RXCNT_HESU_PPDU = 0x14,
	MAC_AX_RXCNT_HESU_FAM = 0x15,
	MAC_AX_RXCNT_HEMU_OK = 0x16,
	MAC_AX_RXCNT_HEMU_FAIL = 0x17,
	MAC_AX_RXCNT_HEMU_PPDU = 0x18,
	MAC_AX_RXCNT_HEMU_FAM = 0x19,
	MAC_AX_RXCNT_HETB_OK = 0x1A,
	MAC_AX_RXCNT_HETB_FAIL = 0x1B,
	MAC_AX_RXCNT_HETB_PPDU = 0x1C,
	MAC_AX_RXCNT_HETB_FAM = 0x1D,
	MAC_AX_RXCNT_INVD = 0x1E,
	MAC_AX_RXCNT_RECCA = 0x1F,
	MAC_AX_RXCNT_FULLDRP = 0x20,
	MAC_AX_RXCNT_FULLDRP_PKT = 0x21,
	MAC_AX_RXCNT_RXDMA = 0x22,
	MAC_AX_RXCNT_USER0 = 0x23,
	MAC_AX_RXCNT_USER1 = 0x24,
	MAC_AX_RXCNT_USER2 = 0x25,
	MAC_AX_RXCNT_USER3 = 0x26,
	MAC_AX_RXCNT_CONT_FCS = 0x27,
	MAC_AX_RXCNT_PKTFLTR_DRP = 0x28,
	MAC_AX_RXCNT_CSIPKT_DMA_OK = 0x29,
	MAC_AX_RXCNT_CSIPKT_DMA_DROP = 0x2A
};

/**
 * @enum mac_ax_wde_pg_size
 *
 * @brief mac_ax_wde_pg_size
 *
 * @var mac_ax_wde_pg_size::MAC_AX_WDE_PG_64
 * Please Place Description here.
 * @var mac_ax_wde_pg_size::MAC_AX_WDE_PG_128
 * Please Place Description here.
 * @var mac_ax_wde_pg_size::MAC_AX_WDE_PG_256
 * Please Place Description here.
 */
enum mac_ax_wde_pg_size {
	MAC_AX_WDE_PG_64 = 64,
	MAC_AX_WDE_PG_128 = 128,
	MAC_AX_WDE_PG_256 = 256
};

/**
 * @enum mac_ax_ple_pg_size
 *
 * @brief mac_ax_ple_pg_size
 *
 * @var mac_ax_ple_pg_size::MAC_AX_PLE_PG_64
 * Please Place Description here.
 * @var mac_ax_ple_pg_size::MAC_AX_PLE_PG_128
 * Please Place Description here.
 * @var mac_ax_ple_pg_size::MAC_AX_PLE_PG_256
 * Please Place Description here.
 */
enum mac_ax_ple_pg_size {
	MAC_AX_PLE_PG_64 = 64,
	MAC_AX_PLE_PG_128 = 128,
	MAC_AX_PLE_PG_256 = 256
};

/**
 * @enum mac_ax_iecam_type
 *
 * @brief mac_ax_iecam_type
 *
 * @var mac_ax_iecam_type::MAC_AX_IECAM_UNAVAL
 * Please Place Description here.
 * @var mac_ax_iecam_type::MAC_AX_IECAM_IESHW
 * Please Place Description here.
 * @var mac_ax_iecam_type::MAC_AX_IECAM_SPEOFT
 * Please Place Description here.
 * @var mac_ax_iecam_type::MAC_AX_IECAM_CRC
 * Please Place Description here.
 */
enum mac_ax_iecam_type {
	MAC_AX_IECAM_UNAVAL = 0,
	MAC_AX_IECAM_IESHW = 1,
	MAC_AX_IECAM_SPEOFT = 2,
	MAC_AX_IECAM_CRC = 3
};

/**
 * @enum mac_ax_tcpip_chksum_ofd_status
 *
 * @brief mac_ax_tcpip_chksum_ofd_status
 *
 * @var mac_ax_tcpip_chksum_ofd_status::MAC_AX_CHKSUM_OFD_IPV4_TCP_OK
 * Please Place Description here.
 * @var mac_ax_tcpip_chksum_ofd_status::MAC_AX_CHKSUM_OFD_IPV6_TCP_OK
 * Please Place Description here.
 * @var mac_ax_tcpip_chksum_ofd_status::MAC_AX_CHKSUM_OFD_IPV4_UDP_OK
 * Please Place Description here.
 * @var mac_ax_tcpip_chksum_ofd_status::MAC_AX_CHKSUM_OFD_IPV6_UDP_OK
 * Please Place Description here.
 * @var mac_ax_tcpip_chksum_ofd_status::MAC_AX_CHKSUM_OFD_CHKSUM_ERR
 * Please Place Description here.
 * @var mac_ax_tcpip_chksum_ofd_status::MAC_AX_CHKSUM_OFD_HW_NO_SUPPORT
 * Please Place Description here.
 * @var mac_ax_tcpip_chksum_ofd_status::MAC_AX_CHKSUM_OFD_INVALID
 * Please Place Description here.
 */
enum mac_ax_tcpip_chksum_ofd_status {
	MAC_AX_CHKSUM_OFD_IPV4_TCP_OK = 0,
	MAC_AX_CHKSUM_OFD_IPV6_TCP_OK = 1,
	MAC_AX_CHKSUM_OFD_IPV4_UDP_OK = 2,
	MAC_AX_CHKSUM_OFD_IPV6_UDP_OK = 3,
	MAC_AX_CHKSUM_OFD_CHKSUM_ERR = 4,
	MAC_AX_CHKSUM_OFD_HW_NO_SUPPORT = 5,
	MAC_AX_CHKSUM_OFD_INVALID = 6,
};

/**
 * @enum mac_ax_io_byte_sel
 *
 * @brief mac_ax_io_byte_sel
 *
 * @var mac_ax_io_byte_sel::MAC_AX_BYTE_SEL_1
 * Please Place Description here.
 * @var mac_ax_io_byte_sel::MAC_AX_BYTE_SEL_2
 * Please Place Description here.
 * @var mac_ax_io_byte_sel::MAC_AX_BYTE_SEL_4
 * Please Place Description here.
 * @var mac_ax_io_byte_sel::MAC_AX_BYTE_SEL_LAST
 * Please Place Description here.
 * @var mac_ax_io_byte_sel::MAC_AX_BYTE_SEL_MAX
 * Please Place Description here.
 * @var mac_ax_io_byte_sel::MAC_AX_BYTE_SEL_INVALID
 * Please Place Description here.
 */
enum mac_ax_io_byte_sel {
	MAC_AX_BYTE_SEL_1 = 0,
	MAC_AX_BYTE_SEL_2,
	MAC_AX_BYTE_SEL_4,

	/* keep last */
	MAC_AX_BYTE_SEL_LAST,
	MAC_AX_BYTE_SEL_MAX = MAC_AX_BYTE_SEL_LAST,
	MAC_AX_BYTE_SEL_INVALID = MAC_AX_BYTE_SEL_LAST,
};

/**
 * @enum RW_OFLD_BLOCK_ID
 *
 * @brief RW_OFLD_BLOCK_ID
 *
 * @var RW_OFLD_BLOCK_ID::RW_OFLD_UART
 * Please Place Description here.
 * @var RW_OFLD_BLOCK_ID::RW_OFLD_CPU_LOCAL
 * Please Place Description here.
 * @var RW_OFLD_BLOCK_ID::RW_OFLD_SPIC
 * Please Place Description here.
 * @var RW_OFLD_BLOCK_ID::RW_OFLD_RXI300
 * Please Place Description here.
 * @var RW_OFLD_BLOCK_ID::RW_OFLD_AXIDMA
 * Please Place Description here.
 * @var RW_OFLD_BLOCK_ID::RW_OFLD_HIOE
 * Please Place Description here.
 * @var RW_OFLD_BLOCK_ID::RW_OFLD_IDDMA
 * Please Place Description here.
 * @var RW_OFLD_BLOCK_ID::RW_OFLD_IPSEC
 * Please Place Description here.
 * @var RW_OFLD_BLOCK_ID::RW_OFLD_DMAC_CTRL
 * Please Place Description here.
 * @var RW_OFLD_BLOCK_ID::RW_OFLD_SCR_MACHDR
 * Please Place Description here.
 * @var RW_OFLD_BLOCK_ID::RW_OFLD_STA_SCH_AIRTIME
 * Please Place Description here.
 * @var RW_OFLD_BLOCK_ID::RW_OFLD_STA_SCH_CAP
 * Please Place Description here.
 * @var RW_OFLD_BLOCK_ID::RW_OFLD_STA_DL_GRP_TBL
 * Please Place Description here.
 * @var RW_OFLD_BLOCK_ID::RW_OFLD_STA_UL_GRP_TBL
 * Please Place Description here.
 * @var RW_OFLD_BLOCK_ID::RW_OFLD_RX_FILTER_CAM
 * Please Place Description here.
 * @var RW_OFLD_BLOCK_ID::RW_OFLD_SEC_CAM
 * Please Place Description here.
 * @var RW_OFLD_BLOCK_ID::RW_OFLD_WOW_CAM
 * Please Place Description here.
 * @var RW_OFLD_BLOCK_ID::RW_OFLD_CMAC_CTRL
 * Please Place Description here.
 * @var RW_OFLD_BLOCK_ID::RW_OFLD_ADDR_CAM
 * Please Place Description here.
 * @var RW_OFLD_BLOCK_ID::RW_OFLD_BSSID_CAM
 * Please Place Description here.
 * @var RW_OFLD_BLOCK_ID::RW_OFLD_BA_CAM
 * Please Place Description here.
 * @var RW_OFLD_BLOCK_ID::RW_OFLD_BCN_IE_CAM
 * Please Place Description here.
 * @var RW_OFLD_BLOCK_ID::RW_OFLD_MAX
 * Please Place Description here.
 */
enum RW_OFLD_BLOCK_ID {
	RW_OFLD_UART = 0,
	RW_OFLD_CPU_LOCAL = 1,
	RW_OFLD_SPIC,
	RW_OFLD_RXI300,
	RW_OFLD_AXIDMA,
	RW_OFLD_HIOE,
	RW_OFLD_IDDMA,
	RW_OFLD_IPSEC,
	RW_OFLD_DMAC_CTRL,
	RW_OFLD_SCR_MACHDR,
	RW_OFLD_STA_SCH_AIRTIME,
	RW_OFLD_STA_SCH_CAP,
	RW_OFLD_STA_DL_GRP_TBL,
	RW_OFLD_STA_UL_GRP_TBL,
	RW_OFLD_RX_FILTER_CAM,
	RW_OFLD_SEC_CAM,
	RW_OFLD_WOW_CAM,
	RW_OFLD_CMAC_CTRL,
	RW_OFLD_ADDR_CAM,
	RW_OFLD_BSSID_CAM,
	RW_OFLD_BA_CAM,
	RW_OFLD_BCN_IE_CAM,
	RW_OFLD_MAX
};

/**
 * @enum mac_ax_cca
 *
 * @brief mac_ax_cca
 *
 * @var mac_ax_cca::MAC_AX_CCA
 * Please Place Description here.
 * @var mac_ax_cca::MAC_AX_SEC20_CCA
 * Please Place Description here.
 * @var mac_ax_cca::MAC_AX_SEC40_CCA
 * Please Place Description here.
 * @var mac_ax_cca::MAC_AX_SEC80_CCA
 * Please Place Description here.
 * @var mac_ax_cca::MAC_AX_EDCCA
 * Please Place Description here.
 * @var mac_ax_cca::MAC_AX_BTCCA
 * Please Place Description here.
 * @var mac_ax_cca::MAC_AX_CCA_LAST
 * Please Place Description here.
 * @var mac_ax_cca::MAC_AX_CCA_MAX
 * Please Place Description here.
 * @var mac_ax_cca::MAC_AX_CCA_INVALID
 * Please Place Description here.
 */
enum mac_ax_block_tx_sel {
	MAC_AX_CCA,
	MAC_AX_SEC20_CCA,
	MAC_AX_SEC40_CCA,
	MAC_AX_SEC80_CCA,
	MAC_AX_EDCCA,
	MAC_AX_BTCCA,
	MAC_AX_TX_NAV,

	/* keep last */
	MAC_AX_CCA_LAST,
	MAC_AX_CCA_MAX = MAC_AX_CCA_LAST,
	MAC_AX_CCA_INVALID = MAC_AX_CCA_LAST,
};

/**
 * struct mac_ax_pkt_data - packet information of data type
 * @hdr_len: Length of header+LLC.
 *	For example,
 *	1. 802.11 MPDU without encryption
 *	    HEADERwLLC_LEN = (MAC header (without IV ) + LLC ) / 2
 *	2. 802.11 MPDU encryption without HW_AES_IV
 *	    HEADERwLLC_LEN = (MAC header (without IV ) + LLC ) / 2
 *	3.802.11MPDU encryption with HW_AES_IV
 *	   HEADERwLLC_LEN = (MAC header(reserved IV length)+LLC)/2
 *	4.ETHERNET II MSDU without encryption
 *	   HEADERwLLC_LEN = (DA+SA+TYPE) /2
 *	5.ETHERNET II MSDU encryption without HW_AES_IV
 *	   HEADERwLLC_LEN = (DA+SA+TYPE) /2
 *	6.ETHERNET II MSDU encryption with HW_AES_IV
 *	   HEADERwLLC_LEN = (DA+SA+TYPE) /2
 *	7.SNAP MSDU without encryption
 *	   HEADERwLLC_LEN = (DA+SA+LEN+LLC) /2
 *	8.SNAP MSDU encryption without HW_AES_IV
 *	   HEADERwLLC_LEN = (DA+SA+LEN+LLC) /2
 *	9.SNAP MSDU encryption with HW_AES_IV
 *	   HEADERwLLC_LEN = (DA+SA+LEN+LLC) /2
 * @ch: Channel index, MAC_AX_CH_DMA_CH0~MAC_AX_CH_DMA_CH11.
 * @macid: MAC ID.
 */
/*--------------------Define Struct-------------------------------------*/

/**
 * @struct sec_checker
 * @brief sec_checker
 *
 * @var sec_checker::rx_desc_hw_dec
 * Please Place Description here.
 * @var sec_checker::rx_desc_sec_type
 * Please Place Description here.
 * @var sec_checker::rx_desc_icv_err
 * Please Place Description here.
 */
struct sec_checker {
	u8 rx_desc_hw_dec;
	u8 rx_desc_sec_type;
	u8 rx_desc_icv_err;
};

/**
 * @struct mac_ax_delay_tx_cfg
 * @brief mac_ax_delay_tx_cfg
 *
 * @var mac_ax_delay_tx_cfg::en
 * Please Place Description here.
 * @var mac_ax_delay_tx_cfg::vovi_to_b0
 * Please Place Description here.
 * @var mac_ax_delay_tx_cfg::bebk_to_b0
 * Please Place Description here.
 * @var mac_ax_delay_tx_cfg::vovi_to_b1
 * Please Place Description here.
 * @var mac_ax_delay_tx_cfg::bebk_to_b1
 * Please Place Description here.
 * @var mac_ax_delay_tx_cfg::vovi_len_b0
 * Please Place Description here.
 * @var mac_ax_delay_tx_cfg::bebk_len_b0
 * Please Place Description here.
 * @var mac_ax_delay_tx_cfg::vovi_len_b1
 * Please Place Description here.
 * @var mac_ax_delay_tx_cfg::bebk_len_b1
 * Please Place Description here.
 */
struct mac_ax_delay_tx_cfg {
	enum mac_ax_delay_tx_en en;
	u8 vovi_to_b0;
	u8 bebk_to_b0;
	u8 vovi_to_b1;
	u8 bebk_to_b1;
	u8 vovi_len_b0;
	u8 bebk_len_b0;
	u8 vovi_len_b1;
	u8 bebk_len_b1;
};

/**
 * @struct mac_ax_ofld_hdr
 * @brief mac_ax_ofld_hdr
 *
 * @var mac_ax_ofld_hdr::ls
 * Please Place Description here.
 * @var mac_ax_ofld_hdr::masken
 * Please Place Description here.
 * @var mac_ax_ofld_hdr::polling
 * Please Place Description here.
 * @var mac_ax_ofld_hdr::rsvd1
 * Please Place Description here.
 * @var mac_ax_ofld_hdr::value_len
 * Please Place Description here.
 * @var mac_ax_ofld_hdr::ofld_id
 * Please Place Description here.
 * @var mac_ax_ofld_hdr::entry_num
 * Please Place Description here.
 * @var mac_ax_ofld_hdr::offset
 * Please Place Description here.
 * @var mac_ax_ofld_hdr::rsvd2
 * Please Place Description here.
 */
struct mac_ax_ofld_hdr {
//Segment Hdr
	u16 ls:1;
	u16 masken:1;
	u16 polling:1;
	u16 rsvd1:2;
	u16 value_len:11;
	u8 ofld_id;
	u8 entry_num;
	u16 offset;
	u16 rsvd2;
};

/**
 * @struct mac_ax_outsrc_h2c_hdr
 * @brief mac_ax_outsrc_h2c_hdr
 *
 * @var mac_ax_outsrc_h2c_hdr::h2c_class
 * Please Place Description here.
 * @var mac_ax_outsrc_h2c_hdr::h2c_func
 * Please Place Description here.
 * @var mac_ax_outsrc_h2c_hdr::seq_valid
 * Please Place Description here.
 * @var mac_ax_outsrc_h2c_hdr::seq
 * Please Place Description here.
 * @var mac_ax_outsrc_h2c_hdr::seq_stop
 * Please Place Description here.
 * @var mac_ax_outsrc_h2c_hdr::rec_ack
 * Please Place Description here.
 * @var mac_ax_outsrc_h2c_hdr::done_ack
 * Please Place Description here.
 * @var mac_ax_outsrc_h2c_hdr::rsvd1
 * Please Place Description here.
 * @var mac_ax_outsrc_h2c_hdr::content_len
 * Please Place Description here.
 * @var mac_ax_outsrc_h2c_hdr::rsvd2
 * Please Place Description here.
 */
struct mac_ax_outsrc_h2c_hdr {
	u8 h2c_class; //0x0~0x7: Phydm; 0x8~0xF: RF; 0x10~0x17: BTC
	u8 h2c_func;
	u8 seq_valid:1;
	u8 seq:3;
	u8 seq_stop:1;
	u8 rec_ack:1; //Ack when receive H2C
	u8 done_ack:1; //Ack when FW execute H2C cmd done
	u8 rsvd1:1;
	u16 content_len:12;
	u16 rsvd2:4;
};

/**
 * @struct mac_ax_lps_info
 * @brief mac_ax_lps_info
 *
 * @var mac_ax_lps_info::listen_bcn_mode
 * Please Place Description here.
 * @var mac_ax_lps_info::awake_interval
 * Please Place Description here.
 * @var mac_ax_lps_info::smart_ps_mode
 * Please Place Description here.
 */
struct mac_ax_lps_info {
	enum mac_ax_listern_bcn_mode listen_bcn_mode;
	u8 awake_interval;
	enum mac_ax_smart_ps_mode smart_ps_mode;
};

/**
 * @struct mac_ax_wmmps_info
 * @brief mac_ax_wmmps_info
 *
 * @var mac_ax_wmmps_info::listen_bcn_mode
 * Please Place Description here.
 * @var mac_ax_wmmps_info::awake_interval
 * Please Place Description here.
 * @var mac_ax_wmmps_info::vo_uapsd_en
 * Please Place Description here.
 * @var mac_ax_wmmps_info::vi_uapsd_en
 * Please Place Description here.
 * @var mac_ax_wmmps_info::be_uapsd_en
 * Please Place Description here.
 * @var mac_ax_wmmps_info::bk_uapsd_en
 * Please Place Description here.
 * @var mac_ax_wmmps_info::rsvd
 * Please Place Description here.
 */
struct mac_ax_wmmps_info {
	enum mac_ax_listern_bcn_mode listen_bcn_mode;
	u8 awake_interval;
	u8 vo_uapsd_en: 1;
	u8 vi_uapsd_en: 1;
	u8 be_uapsd_en: 1;
	u8 bk_uapsd_en: 1;
	u8 rsvd: 4;
};

/**
 * @struct mac_ax_err_status
 * @brief mac_ax_err_status
 *
 * @var mac_ax_err_status::err
 * Please Place Description here.
 * @var mac_ax_err_status::rst_en
 * Please Place Description here.
 */
struct mac_ax_err_status {
	enum mac_ax_err_info err;
	u8 rst_en;
};

#endif
