xref: /openwifi/driver/hw_def.h (revision 5deb8d18f6d13bc809afd5109593e0982888373c)
12ee67178SXianjun Jiao // Xianjun jiao. [email protected]; [email protected]
22ee67178SXianjun Jiao 
32ee67178SXianjun Jiao const char *sdr_compatible_str = "sdr,sdr";
42ee67178SXianjun Jiao 
52ee67178SXianjun Jiao enum openwifi_band {
62ee67178SXianjun Jiao 	BAND_900M = 0,
72ee67178SXianjun Jiao 	BAND_2_4GHZ,
82ee67178SXianjun Jiao 	BAND_3_65GHZ,
92ee67178SXianjun Jiao 	BAND_5_0GHZ,
102ee67178SXianjun Jiao 	BAND_5_8GHZ,
112ee67178SXianjun Jiao 	BAND_5_9GHZ,
122ee67178SXianjun Jiao 	BAND_60GHZ,
132ee67178SXianjun Jiao };
142ee67178SXianjun Jiao 
152ee67178SXianjun Jiao // ------------------------------------tx interface----------------------------------------
162ee67178SXianjun Jiao const char *tx_intf_compatible_str = "sdr,tx_intf";
172ee67178SXianjun Jiao 
182ee67178SXianjun Jiao #define TX_INTF_REG_MULTI_RST_ADDR                 (0*4)
192ee67178SXianjun Jiao #define TX_INTF_REG_MIXER_CFG_ADDR                 (1*4)
202ee67178SXianjun Jiao #define TX_INTF_REG_WIFI_TX_MODE_ADDR              (2*4)
212ee67178SXianjun Jiao #define TX_INTF_REG_IQ_SRC_SEL_ADDR                (3*4)
222ee67178SXianjun Jiao #define TX_INTF_REG_CTS_TOSELF_CONFIG_ADDR         (4*4)
232ee67178SXianjun Jiao #define TX_INTF_REG_START_TRANS_TO_PS_MODE_ADDR    (5*4)
242ee67178SXianjun Jiao #define TX_INTF_REG_CTS_TOSELF_WAIT_SIFS_TOP_ADDR  (6*4)
252ee67178SXianjun Jiao #define TX_INTF_REG_MISC_SEL_ADDR                  (7*4)
262ee67178SXianjun Jiao #define TX_INTF_REG_NUM_DMA_SYMBOL_TO_PL_ADDR      (8*4)
272ee67178SXianjun Jiao #define TX_INTF_REG_NUM_DMA_SYMBOL_TO_PS_ADDR      (9*4)
282ee67178SXianjun Jiao #define TX_INTF_REG_CFG_DATA_TO_ANT_ADDR           (10*4)
29838a9007SXianjun Jiao #define TX_INTF_REG_S_AXIS_FIFO_TH_ADDR            (11*4)
30febc5adfSXianjun Jiao #define TX_INTF_REG_TX_HOLD_THRESHOLD_ADDR         (12*4)
312ee67178SXianjun Jiao #define TX_INTF_REG_BB_GAIN_ADDR                   (13*4)
322ee67178SXianjun Jiao #define TX_INTF_REG_INTERRUPT_SEL_ADDR             (14*4)
332ee67178SXianjun Jiao #define TX_INTF_REG_ANT_SEL_ADDR                   (16*4)
34838a9007SXianjun Jiao #define TX_INTF_REG_S_AXIS_FIFO_NO_ROOM_ADDR       (21*4)
352ee67178SXianjun Jiao #define TX_INTF_REG_PKT_INFO_ADDR                  (22*4)
362ee67178SXianjun Jiao #define TX_INTF_REG_QUEUE_FIFO_DATA_COUNT_ADDR     (24*4)
372ee67178SXianjun Jiao 
382ee67178SXianjun Jiao #define TX_INTF_NUM_ANTENNA                        2
392ee67178SXianjun Jiao #define TX_INTF_NUM_BYTE_PER_DMA_SYMBOL            (64/8)
402ee67178SXianjun Jiao #define TX_INTF_NUM_BYTE_PER_DMA_SYMBOL_IN_BITS    3
412ee67178SXianjun Jiao 
422ee67178SXianjun Jiao enum tx_intf_mode {
432ee67178SXianjun Jiao 	TX_INTF_AXIS_LOOP_BACK = 0,
442ee67178SXianjun Jiao 	TX_INTF_BYPASS,
452ee67178SXianjun Jiao 	TX_INTF_BW_20MHZ_AT_0MHZ_ANT0,
462ee67178SXianjun Jiao 	TX_INTF_BW_20MHZ_AT_0MHZ_ANT1,
472ee67178SXianjun Jiao 	TX_INTF_BW_20MHZ_AT_N_10MHZ_ANT0,
482ee67178SXianjun Jiao 	TX_INTF_BW_20MHZ_AT_P_10MHZ_ANT0,
492ee67178SXianjun Jiao 	TX_INTF_BW_20MHZ_AT_N_10MHZ_ANT1,
502ee67178SXianjun Jiao 	TX_INTF_BW_20MHZ_AT_P_10MHZ_ANT1,
512ee67178SXianjun Jiao };
522ee67178SXianjun Jiao 
532ee67178SXianjun Jiao const int tx_intf_fo_mapping[] = {0, 0, 0, 0,-10,10,-10,10};
54838a9007SXianjun Jiao const u32 dma_symbol_fifo_size_hw_queue[] = {4*1024, 4*1024, 4*1024, 4*1024}; // !!!make sure align to fifo in tx_intf_s_axis.v
552ee67178SXianjun Jiao 
562ee67178SXianjun Jiao struct tx_intf_driver_api {
572ee67178SXianjun Jiao 	u32 (*hw_init)(enum tx_intf_mode mode, u32 num_dma_symbol_to_pl, u32 num_dma_symbol_to_ps);
582ee67178SXianjun Jiao 
592ee67178SXianjun Jiao 	u32 (*reg_read)(u32 reg);
602ee67178SXianjun Jiao 	void (*reg_write)(u32 reg, u32 value);
612ee67178SXianjun Jiao 
622ee67178SXianjun Jiao 	u32 (*TX_INTF_REG_MULTI_RST_read)(void);
632ee67178SXianjun Jiao 	u32 (*TX_INTF_REG_MIXER_CFG_read)(void);
642ee67178SXianjun Jiao 	u32 (*TX_INTF_REG_WIFI_TX_MODE_read)(void);
652ee67178SXianjun Jiao 	u32 (*TX_INTF_REG_IQ_SRC_SEL_read)(void);
662ee67178SXianjun Jiao 	u32 (*TX_INTF_REG_CTS_TOSELF_CONFIG_read)(void);
672ee67178SXianjun Jiao 	u32 (*TX_INTF_REG_START_TRANS_TO_PS_MODE_read)(void);
682ee67178SXianjun Jiao 	u32 (*TX_INTF_REG_CTS_TOSELF_WAIT_SIFS_TOP_read)(void);
692ee67178SXianjun Jiao 	u32 (*TX_INTF_REG_MISC_SEL_read)(void);
702ee67178SXianjun Jiao 	u32 (*TX_INTF_REG_NUM_DMA_SYMBOL_TO_PL_read)(void);
712ee67178SXianjun Jiao 	u32 (*TX_INTF_REG_NUM_DMA_SYMBOL_TO_PS_read)(void);
722ee67178SXianjun Jiao 	u32 (*TX_INTF_REG_CFG_DATA_TO_ANT_read)(void);
73838a9007SXianjun Jiao 	u32 (*TX_INTF_REG_S_AXIS_FIFO_TH_read)(void);
74febc5adfSXianjun Jiao 	u32 (*TX_INTF_REG_TX_HOLD_THRESHOLD_read)(void);
752ee67178SXianjun Jiao 	u32 (*TX_INTF_REG_INTERRUPT_SEL_read)(void);
762ee67178SXianjun Jiao 	u32 (*TX_INTF_REG_BB_GAIN_read)(void);
772ee67178SXianjun Jiao 	u32 (*TX_INTF_REG_ANT_SEL_read)(void);
78838a9007SXianjun Jiao 	u32 (*TX_INTF_REG_S_AXIS_FIFO_NO_ROOM_read)(void);
792ee67178SXianjun Jiao 	u32 (*TX_INTF_REG_PKT_INFO_read)(void);
802ee67178SXianjun Jiao 	u32 (*TX_INTF_REG_QUEUE_FIFO_DATA_COUNT_read)(void);
812ee67178SXianjun Jiao 
822ee67178SXianjun Jiao 	void (*TX_INTF_REG_MULTI_RST_write)(u32 value);
832ee67178SXianjun Jiao 	void (*TX_INTF_REG_MIXER_CFG_write)(u32 value);
842ee67178SXianjun Jiao 	void (*TX_INTF_REG_WIFI_TX_MODE_write)(u32 value);
852ee67178SXianjun Jiao 	void (*TX_INTF_REG_IQ_SRC_SEL_write)(u32 value);
862ee67178SXianjun Jiao 	void (*TX_INTF_REG_CTS_TOSELF_CONFIG_write)(u32 value);
872ee67178SXianjun Jiao 	void (*TX_INTF_REG_START_TRANS_TO_PS_MODE_write)(u32 value);
882ee67178SXianjun Jiao 	void (*TX_INTF_REG_CTS_TOSELF_WAIT_SIFS_TOP_write)(u32 value);
892ee67178SXianjun Jiao 	void (*TX_INTF_REG_MISC_SEL_write)(u32 value);
902ee67178SXianjun Jiao 	void (*TX_INTF_REG_NUM_DMA_SYMBOL_TO_PL_write)(u32 value);
912ee67178SXianjun Jiao 	void (*TX_INTF_REG_NUM_DMA_SYMBOL_TO_PS_write)(u32 value);
922ee67178SXianjun Jiao 	void (*TX_INTF_REG_CFG_DATA_TO_ANT_write)(u32 value);
93838a9007SXianjun Jiao 	void (*TX_INTF_REG_S_AXIS_FIFO_TH_write)(u32 value);
94febc5adfSXianjun Jiao 	void (*TX_INTF_REG_TX_HOLD_THRESHOLD_write)(u32 value);
952ee67178SXianjun Jiao 	void (*TX_INTF_REG_INTERRUPT_SEL_write)(u32 value);
962ee67178SXianjun Jiao 	void (*TX_INTF_REG_BB_GAIN_write)(u32 value);
972ee67178SXianjun Jiao 	void (*TX_INTF_REG_ANT_SEL_write)(u32 value);
98838a9007SXianjun Jiao 	void (*TX_INTF_REG_S_AXIS_FIFO_NO_ROOM_write)(u32 value);
992ee67178SXianjun Jiao 	void (*TX_INTF_REG_PKT_INFO_write)(u32 value);
1002ee67178SXianjun Jiao };
1012ee67178SXianjun Jiao 
1022ee67178SXianjun Jiao // ------------------------------------rx interface----------------------------------------
1032ee67178SXianjun Jiao const char *rx_intf_compatible_str = "sdr,rx_intf";
1042ee67178SXianjun Jiao 
1052ee67178SXianjun Jiao #define RX_INTF_REG_MULTI_RST_ADDR                 (0*4)
1062ee67178SXianjun Jiao #define RX_INTF_REG_MIXER_CFG_ADDR                 (1*4)
1072ee67178SXianjun Jiao #define RX_INTF_REG_INTERRUPT_TEST_ADDR            (2*4)
1082ee67178SXianjun Jiao #define RX_INTF_REG_IQ_SRC_SEL_ADDR                (3*4)
1092ee67178SXianjun Jiao #define RX_INTF_REG_IQ_CTRL_ADDR                   (4*4)
1102ee67178SXianjun Jiao #define RX_INTF_REG_START_TRANS_TO_PS_MODE_ADDR    (5*4)
1112ee67178SXianjun Jiao #define RX_INTF_REG_START_TRANS_TO_PS_ADDR         (6*4)
1122ee67178SXianjun Jiao #define RX_INTF_REG_START_TRANS_TO_PS_SRC_SEL_ADDR (7*4)
1132ee67178SXianjun Jiao #define RX_INTF_REG_NUM_DMA_SYMBOL_TO_PL_ADDR      (8*4)
1142ee67178SXianjun Jiao #define RX_INTF_REG_NUM_DMA_SYMBOL_TO_PS_ADDR      (9*4)
1152ee67178SXianjun Jiao #define RX_INTF_REG_CFG_DATA_TO_ANT_ADDR           (10*4)
116b73660adSXianjun Jiao #define RX_INTF_REG_BB_GAIN_ADDR                   (11*4)
1172ee67178SXianjun Jiao #define RX_INTF_REG_TLAST_TIMEOUT_TOP_ADDR         (12*4)
1182ee67178SXianjun Jiao #define RX_INTF_REG_S2MM_INTR_DELAY_COUNT_ADDR     (13*4)
1192ee67178SXianjun Jiao #define RX_INTF_REG_ANT_SEL_ADDR                   (16*4)
1202ee67178SXianjun Jiao 
1212ee67178SXianjun Jiao #define RX_INTF_NUM_ANTENNA                        2
1222ee67178SXianjun Jiao #define RX_INTF_NUM_BYTE_PER_DMA_SYMBOL            (64/8)
1232ee67178SXianjun Jiao #define RX_INTF_NUM_BYTE_PER_DMA_SYMBOL_IN_BITS    3
1242ee67178SXianjun Jiao 
1252ee67178SXianjun Jiao enum rx_intf_mode {
1262ee67178SXianjun Jiao 	RX_INTF_AXIS_LOOP_BACK = 0,
1272ee67178SXianjun Jiao 	RX_INTF_BYPASS,
1282ee67178SXianjun Jiao 	RX_INTF_BW_20MHZ_AT_0MHZ_ANT0,
1292ee67178SXianjun Jiao 	RX_INTF_BW_20MHZ_AT_0MHZ_ANT1,
1302ee67178SXianjun Jiao 	RX_INTF_BW_20MHZ_AT_N_10MHZ_ANT0,
1312ee67178SXianjun Jiao 	RX_INTF_BW_20MHZ_AT_N_10MHZ_ANT1,
1322ee67178SXianjun Jiao 	RX_INTF_BW_20MHZ_AT_P_10MHZ_ANT0,
1332ee67178SXianjun Jiao 	RX_INTF_BW_20MHZ_AT_P_10MHZ_ANT1,
1342ee67178SXianjun Jiao };
1352ee67178SXianjun Jiao 
1362ee67178SXianjun Jiao const int rx_intf_fo_mapping[] = {0,0,0,0,-10,-10,10,10};
1372ee67178SXianjun Jiao 
1382ee67178SXianjun Jiao struct rx_intf_driver_api {
1392ee67178SXianjun Jiao 	u32 io_start;
1402ee67178SXianjun Jiao 	u32 base_addr;
1412ee67178SXianjun Jiao 
1422ee67178SXianjun Jiao 	u32 (*hw_init)(enum rx_intf_mode mode, u32 num_dma_symbol_to_pl, u32 num_dma_symbol_to_ps);
1432ee67178SXianjun Jiao 
1442ee67178SXianjun Jiao 	u32 (*reg_read)(u32 reg);
1452ee67178SXianjun Jiao 	void (*reg_write)(u32 reg, u32 value);
1462ee67178SXianjun Jiao 
1472ee67178SXianjun Jiao 	u32 (*RX_INTF_REG_MULTI_RST_read)(void);
1482ee67178SXianjun Jiao 	u32 (*RX_INTF_REG_MIXER_CFG_read)(void);
1492ee67178SXianjun Jiao 	u32 (*RX_INTF_REG_IQ_SRC_SEL_read)(void);
1502ee67178SXianjun Jiao 	u32 (*RX_INTF_REG_IQ_CTRL_read)(void);
1512ee67178SXianjun Jiao 	u32 (*RX_INTF_REG_START_TRANS_TO_PS_MODE_read)(void);
1522ee67178SXianjun Jiao 	u32 (*RX_INTF_REG_START_TRANS_TO_PS_read)(void);
1532ee67178SXianjun Jiao 	u32 (*RX_INTF_REG_START_TRANS_TO_PS_SRC_SEL_read)(void);
1542ee67178SXianjun Jiao 	u32 (*RX_INTF_REG_NUM_DMA_SYMBOL_TO_PL_read)(void);
1552ee67178SXianjun Jiao 	u32 (*RX_INTF_REG_NUM_DMA_SYMBOL_TO_PS_read)(void);
1562ee67178SXianjun Jiao 	u32 (*RX_INTF_REG_CFG_DATA_TO_ANT_read)(void);
1572ee67178SXianjun Jiao 	u32 (*RX_INTF_REG_ANT_SEL_read)(void);
1582ee67178SXianjun Jiao 	u32 (*RX_INTF_REG_INTERRUPT_TEST_read)(void);
1592ee67178SXianjun Jiao 	void (*RX_INTF_REG_MULTI_RST_write)(u32 value);
1602ee67178SXianjun Jiao 	void (*RX_INTF_REG_MIXER_CFG_write)(u32 value);
1612ee67178SXianjun Jiao 	void (*RX_INTF_REG_IQ_SRC_SEL_write)(u32 value);
1622ee67178SXianjun Jiao 	void (*RX_INTF_REG_IQ_CTRL_write)(u32 value);
1632ee67178SXianjun Jiao 	void (*RX_INTF_REG_START_TRANS_TO_PS_MODE_write)(u32 value);
1642ee67178SXianjun Jiao 	void (*RX_INTF_REG_START_TRANS_TO_PS_write)(u32 value);
1652ee67178SXianjun Jiao 	void (*RX_INTF_REG_START_TRANS_TO_PS_SRC_SEL_write)(u32 value);
1662ee67178SXianjun Jiao 	void (*RX_INTF_REG_NUM_DMA_SYMBOL_TO_PL_write)(u32 value);
1672ee67178SXianjun Jiao 	void (*RX_INTF_REG_NUM_DMA_SYMBOL_TO_PS_write)(u32 value);
1682ee67178SXianjun Jiao 	void (*RX_INTF_REG_CFG_DATA_TO_ANT_write)(u32 value);
169b73660adSXianjun Jiao 	void (*RX_INTF_REG_BB_GAIN_write)(u32 value);
1702ee67178SXianjun Jiao 	void (*RX_INTF_REG_ANT_SEL_write)(u32 value);
1712ee67178SXianjun Jiao 	void (*RX_INTF_REG_INTERRUPT_TEST_write)(u32 value);
1722ee67178SXianjun Jiao 
1732ee67178SXianjun Jiao 	void (*RX_INTF_REG_M_AXIS_RST_write)(u32 value);
1742ee67178SXianjun Jiao 	void (*RX_INTF_REG_S2MM_INTR_DELAY_COUNT_write)(u32 value);
1752ee67178SXianjun Jiao 	void (*RX_INTF_REG_TLAST_TIMEOUT_TOP_write)(u32 value);
1762ee67178SXianjun Jiao };
1772ee67178SXianjun Jiao 
1782ee67178SXianjun Jiao // ----------------------------------openofdm rx-------------------------------
1792ee67178SXianjun Jiao const char *openofdm_rx_compatible_str = "sdr,openofdm_rx";
1802ee67178SXianjun Jiao 
1812ee67178SXianjun Jiao #define OPENOFDM_RX_REG_MULTI_RST_ADDR     (0*4)
1822ee67178SXianjun Jiao #define OPENOFDM_RX_REG_ENABLE_ADDR        (1*4)
1832ee67178SXianjun Jiao #define OPENOFDM_RX_REG_POWER_THRES_ADDR   (2*4)
1842ee67178SXianjun Jiao #define OPENOFDM_RX_REG_MIN_PLATEAU_ADDR   (3*4)
1852ee67178SXianjun Jiao #define OPENOFDM_RX_REG_STATE_HISTORY_ADDR (20*4)
1862ee67178SXianjun Jiao 
1872ee67178SXianjun Jiao enum openofdm_rx_mode {
1882ee67178SXianjun Jiao 	OPENOFDM_RX_TEST = 0,
1892ee67178SXianjun Jiao 	OPENOFDM_RX_NORMAL,
1902ee67178SXianjun Jiao };
1912ee67178SXianjun Jiao 
1922ee67178SXianjun Jiao struct openofdm_rx_driver_api {
1932ee67178SXianjun Jiao 	u32 power_thres;
1942ee67178SXianjun Jiao 	u32 min_plateau;
1952ee67178SXianjun Jiao 
1962ee67178SXianjun Jiao 	u32 (*hw_init)(enum openofdm_rx_mode mode);
1972ee67178SXianjun Jiao 
1982ee67178SXianjun Jiao 	u32 (*reg_read)(u32 reg);
1992ee67178SXianjun Jiao 	void (*reg_write)(u32 reg, u32 value);
2002ee67178SXianjun Jiao 
2012ee67178SXianjun Jiao 	u32 (*OPENOFDM_RX_REG_STATE_HISTORY_read)(void);
2022ee67178SXianjun Jiao 
2032ee67178SXianjun Jiao 	void (*OPENOFDM_RX_REG_MULTI_RST_write)(u32 value);
2042ee67178SXianjun Jiao 	void (*OPENOFDM_RX_REG_ENABLE_write)(u32 value);
2052ee67178SXianjun Jiao 	void (*OPENOFDM_RX_REG_POWER_THRES_write)(u32 value);
2062ee67178SXianjun Jiao 	void (*OPENOFDM_RX_REG_MIN_PLATEAU_write)(u32 value);
2072ee67178SXianjun Jiao };
2082ee67178SXianjun Jiao 
2092ee67178SXianjun Jiao // ---------------------------------------openofdm tx-------------------------------
2102ee67178SXianjun Jiao const char *openofdm_tx_compatible_str = "sdr,openofdm_tx";
2112ee67178SXianjun Jiao 
2122ee67178SXianjun Jiao #define OPENOFDM_TX_REG_MULTI_RST_ADDR                 (0*4)
2132ee67178SXianjun Jiao #define OPENOFDM_TX_REG_INIT_PILOT_STATE_ADDR          (1*4)
2142ee67178SXianjun Jiao #define OPENOFDM_TX_REG_INIT_DATA_STATE_ADDR           (2*4)
2152ee67178SXianjun Jiao 
2162ee67178SXianjun Jiao enum openofdm_tx_mode {
2172ee67178SXianjun Jiao 	OPENOFDM_TX_TEST = 0,
2182ee67178SXianjun Jiao 	OPENOFDM_TX_NORMAL,
2192ee67178SXianjun Jiao };
2202ee67178SXianjun Jiao 
2212ee67178SXianjun Jiao struct openofdm_tx_driver_api {
2222ee67178SXianjun Jiao 	u32 (*hw_init)(enum openofdm_tx_mode mode);
2232ee67178SXianjun Jiao 
2242ee67178SXianjun Jiao 	u32 (*reg_read)(u32 reg);
2252ee67178SXianjun Jiao 	void (*reg_write)(u32 reg, u32 value);
2262ee67178SXianjun Jiao 
2272ee67178SXianjun Jiao 	void (*OPENOFDM_TX_REG_MULTI_RST_write)(u32 value);
2282ee67178SXianjun Jiao 	void (*OPENOFDM_TX_REG_INIT_PILOT_STATE_write)(u32 value);
2292ee67178SXianjun Jiao 	void (*OPENOFDM_TX_REG_INIT_DATA_STATE_write)(u32 value);
2302ee67178SXianjun Jiao };
2312ee67178SXianjun Jiao 
2322ee67178SXianjun Jiao // ---------------------------------------xpu low MAC controller-------------------------------
2332ee67178SXianjun Jiao 
2342ee67178SXianjun Jiao // extra filter flag together with enum ieee80211_filter_flags in mac80211.h
2352ee67178SXianjun Jiao #define UNICAST_FOR_US     (1<<9)
2362ee67178SXianjun Jiao #define BROADCAST_ALL_ONE  (1<<10)
2372ee67178SXianjun Jiao #define BROADCAST_ALL_ZERO (1<<11)
2382ee67178SXianjun Jiao #define MY_BEACON          (1<<12)
2392ee67178SXianjun Jiao #define MONITOR_ALL        (1<<13)
2402ee67178SXianjun Jiao 
2412ee67178SXianjun Jiao const char *xpu_compatible_str = "sdr,xpu";
2422ee67178SXianjun Jiao 
2432ee67178SXianjun Jiao #define XPU_REG_MULTI_RST_ADDR            (0*4)
2442ee67178SXianjun Jiao #define XPU_REG_SRC_SEL_ADDR              (1*4)
2452ee67178SXianjun Jiao #define XPU_REG_TSF_LOAD_VAL_LOW_ADDR     (2*4)
2462ee67178SXianjun Jiao #define XPU_REG_TSF_LOAD_VAL_HIGH_ADDR    (3*4)
2472ee67178SXianjun Jiao #define XPU_REG_BAND_CHANNEL_ADDR         (4*4)
248*5deb8d18SXianjun Jiao #define XPU_REG_DIFS_ADVANCE_ADDR         (5*4)
2492ee67178SXianjun Jiao #define XPU_REG_RSSI_DB_CFG_ADDR          (7*4)
2502ee67178SXianjun Jiao #define XPU_REG_LBT_TH_ADDR               (8*4)
2512ee67178SXianjun Jiao #define XPU_REG_CSMA_DEBUG_ADDR           (9*4)
2522ee67178SXianjun Jiao #define XPU_REG_BB_RF_DELAY_ADDR          (10*4)
2532ee67178SXianjun Jiao #define XPU_REG_MAX_NUM_RETRANS_ADDR      (11*4)
2542ee67178SXianjun Jiao #define XPU_REG_RECV_ACK_COUNT_TOP0_ADDR  (16*4)
2552ee67178SXianjun Jiao #define XPU_REG_RECV_ACK_COUNT_TOP1_ADDR  (17*4)
2562ee67178SXianjun Jiao #define XPU_REG_SEND_ACK_WAIT_TOP_ADDR    (18*4)
2572ee67178SXianjun Jiao #define XPU_REG_CSMA_CFG_ADDR             (19*4)
2582ee67178SXianjun Jiao 
259838a9007SXianjun Jiao #define XPU_REG_SLICE_COUNT_TOTAL_ADDR   (20*4)
260838a9007SXianjun Jiao #define XPU_REG_SLICE_COUNT_START_ADDR   (21*4)
261838a9007SXianjun Jiao #define XPU_REG_SLICE_COUNT_END_ADDR     (22*4)
2622ee67178SXianjun Jiao 
2632ee67178SXianjun Jiao #define XPU_REG_CTS_TO_RTS_CONFIG_ADDR    (26*4)
2642ee67178SXianjun Jiao #define XPU_REG_FILTER_FLAG_ADDR          (27*4)
2652ee67178SXianjun Jiao #define XPU_REG_BSSID_FILTER_LOW_ADDR     (28*4)
2662ee67178SXianjun Jiao #define XPU_REG_BSSID_FILTER_HIGH_ADDR    (29*4)
2672ee67178SXianjun Jiao #define XPU_REG_MAC_ADDR_LOW_ADDR         (30*4)
2682ee67178SXianjun Jiao #define XPU_REG_MAC_ADDR_HIGH_ADDR        (31*4)
2692ee67178SXianjun Jiao 
2702ee67178SXianjun Jiao #define XPU_REG_FC_DI_ADDR                (34*4)
2712ee67178SXianjun Jiao #define XPU_REG_ADDR1_LOW_ADDR            (35*4)
2722ee67178SXianjun Jiao #define XPU_REG_ADDR1_HIGH_ADDR           (36*4)
2732ee67178SXianjun Jiao #define XPU_REG_ADDR2_LOW_ADDR            (37*4)
2742ee67178SXianjun Jiao #define XPU_REG_ADDR2_HIGH_ADDR           (38*4)
2752ee67178SXianjun Jiao #define XPU_REG_ADDR3_LOW_ADDR            (39*4)
2762ee67178SXianjun Jiao #define XPU_REG_ADDR3_HIGH_ADDR           (40*4)
2772ee67178SXianjun Jiao 
2782ee67178SXianjun Jiao #define XPU_REG_SC_LOW_ADDR               (41*4)
2792ee67178SXianjun Jiao #define XPU_REG_ADDR4_HIGH_ADDR           (42*4)
2802ee67178SXianjun Jiao #define XPU_REG_ADDR4_LOW_ADDR            (43*4)
2812ee67178SXianjun Jiao 
2822ee67178SXianjun Jiao #define XPU_REG_TRX_STATUS_ADDR           (50*4)
2832ee67178SXianjun Jiao #define XPU_REG_TX_RESULT_ADDR            (51*4)
2842ee67178SXianjun Jiao 
2852ee67178SXianjun Jiao #define XPU_REG_TSF_RUNTIME_VAL_LOW_ADDR  (58*4)
2862ee67178SXianjun Jiao #define XPU_REG_TSF_RUNTIME_VAL_HIGH_ADDR (59*4)
2872ee67178SXianjun Jiao 
2882ee67178SXianjun Jiao #define XPU_REG_RSSI_HALF_DB_ADDR         (60*4)
2892ee67178SXianjun Jiao #define XPU_REG_IQ_RSSI_HALF_DB_ADDR      (61*4)
2902ee67178SXianjun Jiao 
2912ee67178SXianjun Jiao enum xpu_mode {
2922ee67178SXianjun Jiao 	XPU_TEST = 0,
2932ee67178SXianjun Jiao 	XPU_NORMAL,
2942ee67178SXianjun Jiao };
2952ee67178SXianjun Jiao 
2962ee67178SXianjun Jiao struct xpu_driver_api {
2972ee67178SXianjun Jiao 	u32 (*hw_init)(enum xpu_mode mode);
2982ee67178SXianjun Jiao 
2992ee67178SXianjun Jiao 	u32 (*reg_read)(u32 reg);
3002ee67178SXianjun Jiao 	void (*reg_write)(u32 reg, u32 value);
3012ee67178SXianjun Jiao 
3022ee67178SXianjun Jiao 	void (*XPU_REG_MULTI_RST_write)(u32 value);
3032ee67178SXianjun Jiao 	u32  (*XPU_REG_MULTI_RST_read)(void);
3042ee67178SXianjun Jiao 
3052ee67178SXianjun Jiao 	void (*XPU_REG_SRC_SEL_write)(u32 value);
3062ee67178SXianjun Jiao 	u32  (*XPU_REG_SRC_SEL_read)(void);
3072ee67178SXianjun Jiao 
3082ee67178SXianjun Jiao 	void (*XPU_REG_RECV_ACK_COUNT_TOP0_write)(u32 value);
3092ee67178SXianjun Jiao 	u32  (*XPU_REG_RECV_ACK_COUNT_TOP0_read)(void);
3102ee67178SXianjun Jiao 
3112ee67178SXianjun Jiao 	void (*XPU_REG_RECV_ACK_COUNT_TOP1_write)(u32 value);
3122ee67178SXianjun Jiao 	u32  (*XPU_REG_RECV_ACK_COUNT_TOP1_read)(void);
3132ee67178SXianjun Jiao 
3142ee67178SXianjun Jiao 	void (*XPU_REG_SEND_ACK_WAIT_TOP_write)(u32 value);
3152ee67178SXianjun Jiao 	u32  (*XPU_REG_SEND_ACK_WAIT_TOP_read)(void);
3162ee67178SXianjun Jiao 
3172ee67178SXianjun Jiao 	void (*XPU_REG_ACK_FC_FILTER_write)(u32 value);
3182ee67178SXianjun Jiao 	u32  (*XPU_REG_ACK_FC_FILTER_read)(void);
3192ee67178SXianjun Jiao 
3202ee67178SXianjun Jiao 	void (*XPU_REG_CTS_TO_RTS_CONFIG_write)(u32 value);
3212ee67178SXianjun Jiao 	u32  (*XPU_REG_CTS_TO_RTS_CONFIG_read)(void);
3222ee67178SXianjun Jiao 
3232ee67178SXianjun Jiao 	void (*XPU_REG_FILTER_FLAG_write)(u32 value);
3242ee67178SXianjun Jiao 	u32  (*XPU_REG_FILTER_FLAG_read)(void);
3252ee67178SXianjun Jiao 
3262ee67178SXianjun Jiao 	void (*XPU_REG_MAC_ADDR_LOW_write)(u32 value);
3272ee67178SXianjun Jiao 	u32  (*XPU_REG_MAC_ADDR_LOW_read)(void);
3282ee67178SXianjun Jiao 
3292ee67178SXianjun Jiao 	void (*XPU_REG_MAC_ADDR_HIGH_write)(u32 value);
3302ee67178SXianjun Jiao 	u32  (*XPU_REG_MAC_ADDR_HIGH_read)(void);
3312ee67178SXianjun Jiao 
3322ee67178SXianjun Jiao 	void (*XPU_REG_BSSID_FILTER_LOW_write)(u32 value);
3332ee67178SXianjun Jiao 	u32  (*XPU_REG_BSSID_FILTER_LOW_read)(void);
3342ee67178SXianjun Jiao 
3352ee67178SXianjun Jiao 	void (*XPU_REG_BSSID_FILTER_HIGH_write)(u32 value);
3362ee67178SXianjun Jiao 	u32  (*XPU_REG_BSSID_FILTER_HIGH_read)(void);
3372ee67178SXianjun Jiao 
3382ee67178SXianjun Jiao 	void (*XPU_REG_BAND_CHANNEL_write)(u32 value);
3392ee67178SXianjun Jiao 	u32  (*XPU_REG_BAND_CHANNEL_read)(void);
3402ee67178SXianjun Jiao 
341*5deb8d18SXianjun Jiao 	void (*XPU_REG_DIFS_ADVANCE_write)(u32 value);
342*5deb8d18SXianjun Jiao 	u32  (*XPU_REG_DIFS_ADVANCE_read)(void);
343*5deb8d18SXianjun Jiao 
3442ee67178SXianjun Jiao 	u32  (*XPU_REG_TRX_STATUS_read)(void);
3452ee67178SXianjun Jiao 	u32  (*XPU_REG_TX_RESULT_read)(void);
3462ee67178SXianjun Jiao 
3472ee67178SXianjun Jiao 	u32  (*XPU_REG_TSF_RUNTIME_VAL_LOW_read)(void);
3482ee67178SXianjun Jiao 	u32  (*XPU_REG_TSF_RUNTIME_VAL_HIGH_read)(void);
3492ee67178SXianjun Jiao 
3502ee67178SXianjun Jiao 	void (*XPU_REG_TSF_LOAD_VAL_LOW_write)(u32 value);
3512ee67178SXianjun Jiao 	void (*XPU_REG_TSF_LOAD_VAL_HIGH_write)(u32 value);
3522ee67178SXianjun Jiao 	void (*XPU_REG_TSF_LOAD_VAL_write)(u32 high_value, u32 low_value);
3532ee67178SXianjun Jiao 
3542ee67178SXianjun Jiao 	u32  (*XPU_REG_FC_DI_read)(void);
3552ee67178SXianjun Jiao 	u32  (*XPU_REG_ADDR1_LOW_read)(void);
3562ee67178SXianjun Jiao 	u32  (*XPU_REG_ADDR1_HIGH_read)(void);
3572ee67178SXianjun Jiao 	u32  (*XPU_REG_ADDR2_LOW_read)(void);
3582ee67178SXianjun Jiao 	u32  (*XPU_REG_ADDR2_HIGH_read)(void);
3592ee67178SXianjun Jiao 
3602ee67178SXianjun Jiao 	void (*XPU_REG_LBT_TH_write)(u32 value);
3612ee67178SXianjun Jiao 	u32  (*XPU_REG_LBT_TH_read)(void);
3622ee67178SXianjun Jiao 
3632ee67178SXianjun Jiao 	void (*XPU_REG_RSSI_DB_CFG_write)(u32 value);
3642ee67178SXianjun Jiao 	u32  (*XPU_REG_RSSI_DB_CFG_read)(void);
3652ee67178SXianjun Jiao 
3662ee67178SXianjun Jiao 	void (*XPU_REG_CSMA_DEBUG_write)(u32 value);
3672ee67178SXianjun Jiao 	u32  (*XPU_REG_CSMA_DEBUG_read)(void);
3682ee67178SXianjun Jiao 
3692ee67178SXianjun Jiao 	void (*XPU_REG_CSMA_CFG_write)(u32 value);
3702ee67178SXianjun Jiao 	u32  (*XPU_REG_CSMA_CFG_read)(void);
3712ee67178SXianjun Jiao 
372838a9007SXianjun Jiao 	void (*XPU_REG_SLICE_COUNT_TOTAL_write)(u32 value);
373838a9007SXianjun Jiao 	void (*XPU_REG_SLICE_COUNT_START_write)(u32 value);
374838a9007SXianjun Jiao 	void (*XPU_REG_SLICE_COUNT_END_write)(u32 value);
3752ee67178SXianjun Jiao 	void (*XPU_REG_SLICE_COUNT_TOTAL1_write)(u32 value);
3762ee67178SXianjun Jiao 	void (*XPU_REG_SLICE_COUNT_START1_write)(u32 value);
3772ee67178SXianjun Jiao 	void (*XPU_REG_SLICE_COUNT_END1_write)(u32 value);
3782ee67178SXianjun Jiao 
379838a9007SXianjun Jiao 	u32 (*XPU_REG_SLICE_COUNT_TOTAL_read)(void);
380838a9007SXianjun Jiao 	u32 (*XPU_REG_SLICE_COUNT_START_read)(void);
381838a9007SXianjun Jiao 	u32 (*XPU_REG_SLICE_COUNT_END_read)(void);
3822ee67178SXianjun Jiao 	u32 (*XPU_REG_SLICE_COUNT_TOTAL1_read)(void);
3832ee67178SXianjun Jiao 	u32 (*XPU_REG_SLICE_COUNT_START1_read)(void);
3842ee67178SXianjun Jiao 	u32 (*XPU_REG_SLICE_COUNT_END1_read)(void);
3852ee67178SXianjun Jiao 
3862ee67178SXianjun Jiao 	void (*XPU_REG_BB_RF_DELAY_write)(u32 value);
3872ee67178SXianjun Jiao 	void (*XPU_REG_MAX_NUM_RETRANS_write)(u32 value);
3882ee67178SXianjun Jiao 
3892ee67178SXianjun Jiao 	void (*XPU_REG_MAC_ADDR_write)(u8 *mac_addr);
3902ee67178SXianjun Jiao };
391