xref: /openwifi/driver/hw_def.h (revision 441850b11313dc03b2de1c5c275bd5910e6c0f3c)
1d5f8d0d6SJiao Xianjun // Author: Xianjun jiao, Michael Mehari, Wei Liu
2d5f8d0d6SJiao Xianjun // SPDX-FileCopyrightText: 2019 UGent
3a6085186SLina Ceballos // SPDX-License-Identifier: AGPL-3.0-or-later
42ee67178SXianjun Jiao 
5a7396dd9SXianjun Jiao // #ifndef __HW_DEF_H_FILE__
6a7396dd9SXianjun Jiao // #define __HW_DEF_H_FILE__
72ee67178SXianjun Jiao const char *sdr_compatible_str = "sdr,sdr";
82ee67178SXianjun Jiao 
96e3730c0Smmehari enum openwifi_fpga_type {
106e3730c0Smmehari 	SMALL_FPGA = 0,
116e3730c0Smmehari 	LARGE_FPGA = 1,
126e3730c0Smmehari };
136e3730c0Smmehari 
142ee67178SXianjun Jiao enum openwifi_band {
152ee67178SXianjun Jiao 	BAND_900M = 0,
162ee67178SXianjun Jiao 	BAND_2_4GHZ,
172ee67178SXianjun Jiao 	BAND_3_65GHZ,
182ee67178SXianjun Jiao 	BAND_5_0GHZ,
192ee67178SXianjun Jiao 	BAND_5_8GHZ,
202ee67178SXianjun Jiao 	BAND_5_9GHZ,
212ee67178SXianjun Jiao 	BAND_60GHZ,
222ee67178SXianjun Jiao };
232ee67178SXianjun Jiao 
242ee67178SXianjun Jiao // ------------------------------------tx interface----------------------------------------
252ee67178SXianjun Jiao const char *tx_intf_compatible_str = "sdr,tx_intf";
262ee67178SXianjun Jiao 
272ee67178SXianjun Jiao #define TX_INTF_REG_MULTI_RST_ADDR                 (0*4)
28f6ba34deSXianjun Jiao #define TX_INTF_REG_ARBITRARY_IQ_ADDR              (1*4)
292ee67178SXianjun Jiao #define TX_INTF_REG_WIFI_TX_MODE_ADDR              (2*4)
302ee67178SXianjun Jiao #define TX_INTF_REG_CTS_TOSELF_CONFIG_ADDR         (4*4)
31d14d06e5SXianjun Jiao #define TX_INTF_REG_CSI_FUZZER_ADDR                (5*4)
322ee67178SXianjun Jiao #define TX_INTF_REG_CTS_TOSELF_WAIT_SIFS_TOP_ADDR  (6*4)
33f6ba34deSXianjun Jiao #define TX_INTF_REG_ARBITRARY_IQ_CTL_ADDR          (7*4)
34f738aefaSmmehari #define TX_INTF_REG_TX_CONFIG_ADDR                 (8*4)
352ee67178SXianjun Jiao #define TX_INTF_REG_NUM_DMA_SYMBOL_TO_PS_ADDR      (9*4)
362ee67178SXianjun Jiao #define TX_INTF_REG_CFG_DATA_TO_ANT_ADDR           (10*4)
37838a9007SXianjun Jiao #define TX_INTF_REG_S_AXIS_FIFO_TH_ADDR            (11*4)
38febc5adfSXianjun Jiao #define TX_INTF_REG_TX_HOLD_THRESHOLD_ADDR         (12*4)
392ee67178SXianjun Jiao #define TX_INTF_REG_BB_GAIN_ADDR                   (13*4)
402ee67178SXianjun Jiao #define TX_INTF_REG_INTERRUPT_SEL_ADDR             (14*4)
41f738aefaSmmehari #define TX_INTF_REG_AMPDU_ACTION_CONFIG_ADDR       (15*4)
422ee67178SXianjun Jiao #define TX_INTF_REG_ANT_SEL_ADDR                   (16*4)
43f738aefaSmmehari #define TX_INTF_REG_PHY_HDR_CONFIG_ADDR            (17*4)
44838a9007SXianjun Jiao #define TX_INTF_REG_S_AXIS_FIFO_NO_ROOM_ADDR       (21*4)
45f738aefaSmmehari #define TX_INTF_REG_PKT_INFO1_ADDR                 (22*4)
46f738aefaSmmehari #define TX_INTF_REG_PKT_INFO2_ADDR                 (23*4)
47f738aefaSmmehari #define TX_INTF_REG_PKT_INFO3_ADDR                 (24*4)
48f738aefaSmmehari #define TX_INTF_REG_PKT_INFO4_ADDR                 (25*4)
49f738aefaSmmehari #define TX_INTF_REG_QUEUE_FIFO_DATA_COUNT_ADDR     (26*4)
502ee67178SXianjun Jiao 
512ee67178SXianjun Jiao #define TX_INTF_NUM_ANTENNA                        2
522ee67178SXianjun Jiao #define TX_INTF_NUM_BYTE_PER_DMA_SYMBOL            (64/8)
532ee67178SXianjun Jiao #define TX_INTF_NUM_BYTE_PER_DMA_SYMBOL_IN_BITS    3
542ee67178SXianjun Jiao 
552ee67178SXianjun Jiao enum tx_intf_mode {
562ee67178SXianjun Jiao 	TX_INTF_AXIS_LOOP_BACK = 0,
572ee67178SXianjun Jiao 	TX_INTF_BYPASS,
582ee67178SXianjun Jiao 	TX_INTF_BW_20MHZ_AT_0MHZ_ANT0,
592ee67178SXianjun Jiao 	TX_INTF_BW_20MHZ_AT_0MHZ_ANT1,
604d39160bSXianjun Jiao 	TX_INTF_BW_20MHZ_AT_0MHZ_ANT_BOTH,
612ee67178SXianjun Jiao 	TX_INTF_BW_20MHZ_AT_N_10MHZ_ANT0,
622ee67178SXianjun Jiao 	TX_INTF_BW_20MHZ_AT_P_10MHZ_ANT0,
632ee67178SXianjun Jiao 	TX_INTF_BW_20MHZ_AT_N_10MHZ_ANT1,
642ee67178SXianjun Jiao 	TX_INTF_BW_20MHZ_AT_P_10MHZ_ANT1,
652ee67178SXianjun Jiao };
662ee67178SXianjun Jiao 
67a7396dd9SXianjun Jiao const int tx_intf_fo_mapping[] = {0, 0, 0, 0, 0, -10, 10, -10, 10};
68838a9007SXianjun 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
692ee67178SXianjun Jiao 
702ee67178SXianjun Jiao struct tx_intf_driver_api {
710c0d5d82Smmehari 	u32 (*hw_init)(enum tx_intf_mode mode, u32 tx_config, u32 num_dma_symbol_to_ps, enum openwifi_fpga_type fpga_type);
722ee67178SXianjun Jiao 
732ee67178SXianjun Jiao 	u32 (*reg_read)(u32 reg);
742ee67178SXianjun Jiao 	void (*reg_write)(u32 reg, u32 value);
752ee67178SXianjun Jiao 
762ee67178SXianjun Jiao 	u32 (*TX_INTF_REG_MULTI_RST_read)(void);
77469b96d3SXianjun Jiao 	u32 (*TX_INTF_REG_ARBITRARY_IQ_read)(void);
782ee67178SXianjun Jiao 	u32 (*TX_INTF_REG_WIFI_TX_MODE_read)(void);
792ee67178SXianjun Jiao 	u32 (*TX_INTF_REG_CTS_TOSELF_CONFIG_read)(void);
80d14d06e5SXianjun Jiao 	u32 (*TX_INTF_REG_CSI_FUZZER_read)(void);
812ee67178SXianjun Jiao 	u32 (*TX_INTF_REG_CTS_TOSELF_WAIT_SIFS_TOP_read)(void);
82469b96d3SXianjun Jiao 	u32 (*TX_INTF_REG_ARBITRARY_IQ_CTL_read)(void);
83f738aefaSmmehari 	u32 (*TX_INTF_REG_TX_CONFIG_read)(void);
842ee67178SXianjun Jiao 	u32 (*TX_INTF_REG_NUM_DMA_SYMBOL_TO_PS_read)(void);
852ee67178SXianjun Jiao 	u32 (*TX_INTF_REG_CFG_DATA_TO_ANT_read)(void);
86838a9007SXianjun Jiao 	u32 (*TX_INTF_REG_S_AXIS_FIFO_TH_read)(void);
87febc5adfSXianjun Jiao 	u32 (*TX_INTF_REG_TX_HOLD_THRESHOLD_read)(void);
882ee67178SXianjun Jiao 	u32 (*TX_INTF_REG_INTERRUPT_SEL_read)(void);
89f738aefaSmmehari 	u32 (*TX_INTF_REG_AMPDU_ACTION_CONFIG_read)(void);
902ee67178SXianjun Jiao 	u32 (*TX_INTF_REG_BB_GAIN_read)(void);
912ee67178SXianjun Jiao 	u32 (*TX_INTF_REG_ANT_SEL_read)(void);
92f738aefaSmmehari 	u32 (*TX_INTF_REG_PHY_HDR_CONFIG_read)(void);
93838a9007SXianjun Jiao 	u32 (*TX_INTF_REG_S_AXIS_FIFO_NO_ROOM_read)(void);
94f738aefaSmmehari 	u32 (*TX_INTF_REG_PKT_INFO1_read)(void);
95f738aefaSmmehari 	u32 (*TX_INTF_REG_PKT_INFO2_read)(void);
96f738aefaSmmehari 	u32 (*TX_INTF_REG_PKT_INFO3_read)(void);
97f738aefaSmmehari 	u32 (*TX_INTF_REG_PKT_INFO4_read)(void);
982ee67178SXianjun Jiao 	u32 (*TX_INTF_REG_QUEUE_FIFO_DATA_COUNT_read)(void);
992ee67178SXianjun Jiao 
1002ee67178SXianjun Jiao 	void (*TX_INTF_REG_MULTI_RST_write)(u32 value);
101469b96d3SXianjun Jiao 	void (*TX_INTF_REG_ARBITRARY_IQ_write)(u32 value);
1022ee67178SXianjun Jiao 	void (*TX_INTF_REG_WIFI_TX_MODE_write)(u32 value);
1032ee67178SXianjun Jiao 	void (*TX_INTF_REG_CTS_TOSELF_CONFIG_write)(u32 value);
104d14d06e5SXianjun Jiao 	void (*TX_INTF_REG_CSI_FUZZER_write)(u32 value);
1052ee67178SXianjun Jiao 	void (*TX_INTF_REG_CTS_TOSELF_WAIT_SIFS_TOP_write)(u32 value);
106469b96d3SXianjun Jiao 	void (*TX_INTF_REG_ARBITRARY_IQ_CTL_write)(u32 value);
107f738aefaSmmehari 	void (*TX_INTF_REG_TX_CONFIG_write)(u32 value);
1082ee67178SXianjun Jiao 	void (*TX_INTF_REG_NUM_DMA_SYMBOL_TO_PS_write)(u32 value);
1092ee67178SXianjun Jiao 	void (*TX_INTF_REG_CFG_DATA_TO_ANT_write)(u32 value);
110838a9007SXianjun Jiao 	void (*TX_INTF_REG_S_AXIS_FIFO_TH_write)(u32 value);
111febc5adfSXianjun Jiao 	void (*TX_INTF_REG_TX_HOLD_THRESHOLD_write)(u32 value);
1122ee67178SXianjun Jiao 	void (*TX_INTF_REG_INTERRUPT_SEL_write)(u32 value);
113f738aefaSmmehari 	void (*TX_INTF_REG_AMPDU_ACTION_CONFIG_write)(u32 value);
1142ee67178SXianjun Jiao 	void (*TX_INTF_REG_BB_GAIN_write)(u32 value);
1152ee67178SXianjun Jiao 	void (*TX_INTF_REG_ANT_SEL_write)(u32 value);
116f738aefaSmmehari 	void (*TX_INTF_REG_PHY_HDR_CONFIG_write)(u32 value);
117838a9007SXianjun Jiao 	void (*TX_INTF_REG_S_AXIS_FIFO_NO_ROOM_write)(u32 value);
118f738aefaSmmehari 	void (*TX_INTF_REG_PKT_INFO1_write)(u32 value);
119f738aefaSmmehari 	void (*TX_INTF_REG_PKT_INFO2_write)(u32 value);
120f738aefaSmmehari 	void (*TX_INTF_REG_PKT_INFO3_write)(u32 value);
121f738aefaSmmehari 	void (*TX_INTF_REG_PKT_INFO4_write)(u32 value);
1222ee67178SXianjun Jiao };
1232ee67178SXianjun Jiao 
1242ee67178SXianjun Jiao // ------------------------------------rx interface----------------------------------------
1252ee67178SXianjun Jiao const char *rx_intf_compatible_str = "sdr,rx_intf";
1262ee67178SXianjun Jiao 
1272ee67178SXianjun Jiao #define RX_INTF_REG_MULTI_RST_ADDR                 (0*4)
1282ee67178SXianjun Jiao #define RX_INTF_REG_MIXER_CFG_ADDR                 (1*4)
1292ee67178SXianjun Jiao #define RX_INTF_REG_INTERRUPT_TEST_ADDR            (2*4)
1302ee67178SXianjun Jiao #define RX_INTF_REG_IQ_SRC_SEL_ADDR                (3*4)
1312ee67178SXianjun Jiao #define RX_INTF_REG_IQ_CTRL_ADDR                   (4*4)
1322ee67178SXianjun Jiao #define RX_INTF_REG_START_TRANS_TO_PS_MODE_ADDR    (5*4)
1332ee67178SXianjun Jiao #define RX_INTF_REG_START_TRANS_TO_PS_ADDR         (6*4)
1342ee67178SXianjun Jiao #define RX_INTF_REG_START_TRANS_TO_PS_SRC_SEL_ADDR (7*4)
1352ee67178SXianjun Jiao #define RX_INTF_REG_NUM_DMA_SYMBOL_TO_PL_ADDR      (8*4)
1362ee67178SXianjun Jiao #define RX_INTF_REG_NUM_DMA_SYMBOL_TO_PS_ADDR      (9*4)
1372ee67178SXianjun Jiao #define RX_INTF_REG_CFG_DATA_TO_ANT_ADDR           (10*4)
138b73660adSXianjun Jiao #define RX_INTF_REG_BB_GAIN_ADDR                   (11*4)
1392ee67178SXianjun Jiao #define RX_INTF_REG_TLAST_TIMEOUT_TOP_ADDR         (12*4)
1402ee67178SXianjun Jiao #define RX_INTF_REG_S2MM_INTR_DELAY_COUNT_ADDR     (13*4)
1412ee67178SXianjun Jiao #define RX_INTF_REG_ANT_SEL_ADDR                   (16*4)
1422ee67178SXianjun Jiao 
1432ee67178SXianjun Jiao #define RX_INTF_NUM_ANTENNA                        2
1442ee67178SXianjun Jiao #define RX_INTF_NUM_BYTE_PER_DMA_SYMBOL            (64/8)
1452ee67178SXianjun Jiao #define RX_INTF_NUM_BYTE_PER_DMA_SYMBOL_IN_BITS    3
1462ee67178SXianjun Jiao 
1472ee67178SXianjun Jiao enum rx_intf_mode {
1482ee67178SXianjun Jiao 	RX_INTF_AXIS_LOOP_BACK = 0,
1492ee67178SXianjun Jiao 	RX_INTF_BYPASS,
1502ee67178SXianjun Jiao 	RX_INTF_BW_20MHZ_AT_0MHZ_ANT0,
1512ee67178SXianjun Jiao 	RX_INTF_BW_20MHZ_AT_0MHZ_ANT1,
1522ee67178SXianjun Jiao 	RX_INTF_BW_20MHZ_AT_N_10MHZ_ANT0,
1532ee67178SXianjun Jiao 	RX_INTF_BW_20MHZ_AT_N_10MHZ_ANT1,
1542ee67178SXianjun Jiao 	RX_INTF_BW_20MHZ_AT_P_10MHZ_ANT0,
1552ee67178SXianjun Jiao 	RX_INTF_BW_20MHZ_AT_P_10MHZ_ANT1,
1562ee67178SXianjun Jiao };
1572ee67178SXianjun Jiao 
1582ee67178SXianjun Jiao const int rx_intf_fo_mapping[] = {0,0,0,0,-10,-10,10,10};
1592ee67178SXianjun Jiao 
1602ee67178SXianjun Jiao struct rx_intf_driver_api {
1612ee67178SXianjun Jiao 	u32 io_start;
1622ee67178SXianjun Jiao 	u32 base_addr;
1632ee67178SXianjun Jiao 
1642ee67178SXianjun Jiao 	u32 (*hw_init)(enum rx_intf_mode mode, u32 num_dma_symbol_to_pl, u32 num_dma_symbol_to_ps);
1652ee67178SXianjun Jiao 
1662ee67178SXianjun Jiao 	u32 (*reg_read)(u32 reg);
1672ee67178SXianjun Jiao 	void (*reg_write)(u32 reg, u32 value);
1682ee67178SXianjun Jiao 
1692ee67178SXianjun Jiao 	u32 (*RX_INTF_REG_MULTI_RST_read)(void);
1702ee67178SXianjun Jiao 	u32 (*RX_INTF_REG_MIXER_CFG_read)(void);
1712ee67178SXianjun Jiao 	u32 (*RX_INTF_REG_IQ_SRC_SEL_read)(void);
1722ee67178SXianjun Jiao 	u32 (*RX_INTF_REG_IQ_CTRL_read)(void);
1732ee67178SXianjun Jiao 	u32 (*RX_INTF_REG_START_TRANS_TO_PS_MODE_read)(void);
1742ee67178SXianjun Jiao 	u32 (*RX_INTF_REG_START_TRANS_TO_PS_read)(void);
1752ee67178SXianjun Jiao 	u32 (*RX_INTF_REG_START_TRANS_TO_PS_SRC_SEL_read)(void);
1762ee67178SXianjun Jiao 	u32 (*RX_INTF_REG_NUM_DMA_SYMBOL_TO_PL_read)(void);
1772ee67178SXianjun Jiao 	u32 (*RX_INTF_REG_NUM_DMA_SYMBOL_TO_PS_read)(void);
1782ee67178SXianjun Jiao 	u32 (*RX_INTF_REG_CFG_DATA_TO_ANT_read)(void);
1792ee67178SXianjun Jiao 	u32 (*RX_INTF_REG_ANT_SEL_read)(void);
1802ee67178SXianjun Jiao 	u32 (*RX_INTF_REG_INTERRUPT_TEST_read)(void);
1812ee67178SXianjun Jiao 	void (*RX_INTF_REG_MULTI_RST_write)(u32 value);
1822ee67178SXianjun Jiao 	void (*RX_INTF_REG_MIXER_CFG_write)(u32 value);
1832ee67178SXianjun Jiao 	void (*RX_INTF_REG_IQ_SRC_SEL_write)(u32 value);
1842ee67178SXianjun Jiao 	void (*RX_INTF_REG_IQ_CTRL_write)(u32 value);
1852ee67178SXianjun Jiao 	void (*RX_INTF_REG_START_TRANS_TO_PS_MODE_write)(u32 value);
1862ee67178SXianjun Jiao 	void (*RX_INTF_REG_START_TRANS_TO_PS_write)(u32 value);
1872ee67178SXianjun Jiao 	void (*RX_INTF_REG_START_TRANS_TO_PS_SRC_SEL_write)(u32 value);
1882ee67178SXianjun Jiao 	void (*RX_INTF_REG_NUM_DMA_SYMBOL_TO_PL_write)(u32 value);
1892ee67178SXianjun Jiao 	void (*RX_INTF_REG_NUM_DMA_SYMBOL_TO_PS_write)(u32 value);
1902ee67178SXianjun Jiao 	void (*RX_INTF_REG_CFG_DATA_TO_ANT_write)(u32 value);
191b73660adSXianjun Jiao 	void (*RX_INTF_REG_BB_GAIN_write)(u32 value);
1922ee67178SXianjun Jiao 	void (*RX_INTF_REG_ANT_SEL_write)(u32 value);
1932ee67178SXianjun Jiao 	void (*RX_INTF_REG_INTERRUPT_TEST_write)(u32 value);
1942ee67178SXianjun Jiao 
1952ee67178SXianjun Jiao 	void (*RX_INTF_REG_M_AXIS_RST_write)(u32 value);
1962ee67178SXianjun Jiao 	void (*RX_INTF_REG_S2MM_INTR_DELAY_COUNT_write)(u32 value);
1972ee67178SXianjun Jiao 	void (*RX_INTF_REG_TLAST_TIMEOUT_TOP_write)(u32 value);
1982ee67178SXianjun Jiao };
1992ee67178SXianjun Jiao 
2002ee67178SXianjun Jiao // ----------------------------------openofdm rx-------------------------------
2012ee67178SXianjun Jiao const char *openofdm_rx_compatible_str = "sdr,openofdm_rx";
2022ee67178SXianjun Jiao 
2032ee67178SXianjun Jiao #define OPENOFDM_RX_REG_MULTI_RST_ADDR     (0*4)
2042ee67178SXianjun Jiao #define OPENOFDM_RX_REG_ENABLE_ADDR        (1*4)
2052ee67178SXianjun Jiao #define OPENOFDM_RX_REG_POWER_THRES_ADDR   (2*4)
2062ee67178SXianjun Jiao #define OPENOFDM_RX_REG_MIN_PLATEAU_ADDR   (3*4)
207aed16d05SXianjun Jiao #define OPENOFDM_RX_REG_SOFT_DECODING_ADDR (4*4)
208e273351bSXianjun Jiao #define OPENOFDM_RX_REG_FFT_WIN_SHIFT_ADDR (5*4)
2092ee67178SXianjun Jiao #define OPENOFDM_RX_REG_STATE_HISTORY_ADDR (20*4)
2102ee67178SXianjun Jiao 
2112ee67178SXianjun Jiao enum openofdm_rx_mode {
2122ee67178SXianjun Jiao 	OPENOFDM_RX_TEST = 0,
2132ee67178SXianjun Jiao 	OPENOFDM_RX_NORMAL,
2142ee67178SXianjun Jiao };
2152ee67178SXianjun Jiao 
216585a5601SXianjun Jiao #define OPENOFDM_RX_POWER_THRES_INIT 124
217585a5601SXianjun Jiao // Above 118 is based on these test result (2022-03-09)
218585a5601SXianjun Jiao // FMCOMMS3
219585a5601SXianjun Jiao // 2437M
220585a5601SXianjun Jiao // 11a/g BPSK 6M, Rx sensitivity level dmesg report -85dBm
221585a5601SXianjun Jiao // priv->rssi_correction = 153; rssi_half_db/2 = 153-85=68; rssi_half_db = 136
222585a5601SXianjun Jiao // 5180M
223585a5601SXianjun Jiao // 11a/g BPSK 6m, Rx sensitivity level dmesg report -84dBm
224585a5601SXianjun Jiao // priv->rssi_correction = 145; rssi_half_db/2 = 145-84=61; rssi_half_db = 122
225585a5601SXianjun Jiao // 5320M
226585a5601SXianjun Jiao // 11a/g BPSK 6m, Rx sensitivity level dmesg report -86dBm
227585a5601SXianjun Jiao // priv->rssi_correction = 148; rssi_half_db/2 = 148-86=62; rssi_half_db = 124
228585a5601SXianjun Jiao 
229585a5601SXianjun Jiao // FMCOMMS2
230585a5601SXianjun Jiao // 2437M
231585a5601SXianjun Jiao // 11a/g BPSK 6M, Rx sensitivity level dmesg report -80dBm
232585a5601SXianjun Jiao // priv->rssi_correction = 153; rssi_half_db/2 = 153-80=73; rssi_half_db = 146
233585a5601SXianjun Jiao // 5180M
234585a5601SXianjun Jiao // 11a/g BPSK 6m, Rx sensitivity level dmesg report -83dBm
235585a5601SXianjun Jiao // priv->rssi_correction = 145; rssi_half_db/2 = 145-83=62; rssi_half_db = 124
236585a5601SXianjun Jiao // 5320M
237585a5601SXianjun Jiao // 11a/g BPSK 6m, Rx sensitivity level dmesg report -86dBm
238585a5601SXianjun Jiao // priv->rssi_correction = 148; rssi_half_db/2 = 148-86=62; rssi_half_db = 124
239585a5601SXianjun Jiao 
240*a0972944SXianjun Jiao #define OPENOFDM_RX_RSSI_DBM_TH_DEFAULT (-85) //-85 will remove lots of false alarm. the best openwifi reported sensitivity is like -90/-92 (set it manually if conductive test with wifi tester)
241585a5601SXianjun Jiao #define OPENOFDM_RX_DC_RUNNING_SUM_TH_INIT 64
242585a5601SXianjun Jiao #define OPENOFDM_RX_MIN_PLATEAU_INIT 100
243e273351bSXianjun Jiao #define OPENOFDM_RX_FFT_WIN_SHIFT_INIT 1
2442a5da37cSXianjun Jiao #define OPENOFDM_RX_SMALL_EQ_OUT_COUNTER_TH 48
245585a5601SXianjun Jiao 
246585a5601SXianjun Jiao #define OPENWIFI_MAX_SIGNAL_LEN_TH 1700 //Packet longer  than this threshold will result in receiver early termination. It goes to openofdm_rx/xpu/rx_intf
24726825b8bSXianjun Jiao 
24826825b8bSXianjun Jiao #define OPENWIFI_MIN_SIGNAL_LEN_TH 14   //Packet shorter than this threshold will result in receiver early termination. It goes to openofdm_rx/xpu/rx_intf
24926825b8bSXianjun Jiao                                         //due to CRC32, at least 4 bytes needed to push out expected CRC result
250585a5601SXianjun Jiao 
2512ee67178SXianjun Jiao struct openofdm_rx_driver_api {
2522ee67178SXianjun Jiao 	u32 (*hw_init)(enum openofdm_rx_mode mode);
2532ee67178SXianjun Jiao 
2542ee67178SXianjun Jiao 	u32 (*reg_read)(u32 reg);
2552ee67178SXianjun Jiao 	void (*reg_write)(u32 reg, u32 value);
2562ee67178SXianjun Jiao 
2572ee67178SXianjun Jiao 	u32 (*OPENOFDM_RX_REG_STATE_HISTORY_read)(void);
2582ee67178SXianjun Jiao 
2592ee67178SXianjun Jiao 	void (*OPENOFDM_RX_REG_MULTI_RST_write)(u32 value);
2602ee67178SXianjun Jiao 	void (*OPENOFDM_RX_REG_ENABLE_write)(u32 value);
2612ee67178SXianjun Jiao 	void (*OPENOFDM_RX_REG_POWER_THRES_write)(u32 value);
2622ee67178SXianjun Jiao 	void (*OPENOFDM_RX_REG_MIN_PLATEAU_write)(u32 value);
263aed16d05SXianjun Jiao 	void (*OPENOFDM_RX_REG_SOFT_DECODING_write)(u32 value);
264e273351bSXianjun Jiao 	void (*OPENOFDM_RX_REG_FFT_WIN_SHIFT_write)(u32 value);
2652ee67178SXianjun Jiao };
2662ee67178SXianjun Jiao 
2672ee67178SXianjun Jiao // ---------------------------------------openofdm tx-------------------------------
2682ee67178SXianjun Jiao const char *openofdm_tx_compatible_str = "sdr,openofdm_tx";
2692ee67178SXianjun Jiao 
2702ee67178SXianjun Jiao #define OPENOFDM_TX_REG_MULTI_RST_ADDR                 (0*4)
2712ee67178SXianjun Jiao #define OPENOFDM_TX_REG_INIT_PILOT_STATE_ADDR          (1*4)
2722ee67178SXianjun Jiao #define OPENOFDM_TX_REG_INIT_DATA_STATE_ADDR           (2*4)
2732ee67178SXianjun Jiao 
2742ee67178SXianjun Jiao enum openofdm_tx_mode {
2752ee67178SXianjun Jiao 	OPENOFDM_TX_TEST = 0,
2762ee67178SXianjun Jiao 	OPENOFDM_TX_NORMAL,
2772ee67178SXianjun Jiao };
2782ee67178SXianjun Jiao 
2792ee67178SXianjun Jiao struct openofdm_tx_driver_api {
2802ee67178SXianjun Jiao 	u32 (*hw_init)(enum openofdm_tx_mode mode);
2812ee67178SXianjun Jiao 
2822ee67178SXianjun Jiao 	u32 (*reg_read)(u32 reg);
2832ee67178SXianjun Jiao 	void (*reg_write)(u32 reg, u32 value);
2842ee67178SXianjun Jiao 
2852ee67178SXianjun Jiao 	void (*OPENOFDM_TX_REG_MULTI_RST_write)(u32 value);
2862ee67178SXianjun Jiao 	void (*OPENOFDM_TX_REG_INIT_PILOT_STATE_write)(u32 value);
2872ee67178SXianjun Jiao 	void (*OPENOFDM_TX_REG_INIT_DATA_STATE_write)(u32 value);
2882ee67178SXianjun Jiao };
2892ee67178SXianjun Jiao 
2902ee67178SXianjun Jiao // ---------------------------------------xpu low MAC controller-------------------------------
2912ee67178SXianjun Jiao 
2922ee67178SXianjun Jiao // extra filter flag together with enum ieee80211_filter_flags in mac80211.h
2932ee67178SXianjun Jiao #define UNICAST_FOR_US     (1<<9)
2942ee67178SXianjun Jiao #define BROADCAST_ALL_ONE  (1<<10)
2952ee67178SXianjun Jiao #define BROADCAST_ALL_ZERO (1<<11)
2962ee67178SXianjun Jiao #define MY_BEACON          (1<<12)
2972ee67178SXianjun Jiao #define MONITOR_ALL        (1<<13)
2982ee67178SXianjun Jiao 
2992ee67178SXianjun Jiao const char *xpu_compatible_str = "sdr,xpu";
3002ee67178SXianjun Jiao 
3012ee67178SXianjun Jiao #define XPU_REG_MULTI_RST_ADDR            		(0*4)
3022ee67178SXianjun Jiao #define XPU_REG_SRC_SEL_ADDR              		(1*4)
3032ee67178SXianjun Jiao #define XPU_REG_TSF_LOAD_VAL_LOW_ADDR     		(2*4)
3042ee67178SXianjun Jiao #define XPU_REG_TSF_LOAD_VAL_HIGH_ADDR    		(3*4)
3052ee67178SXianjun Jiao #define XPU_REG_BAND_CHANNEL_ADDR         		(4*4)
3065deb8d18SXianjun Jiao #define XPU_REG_DIFS_ADVANCE_ADDR         		(5*4)
307bb0a2c58SXianjun Jiao #define XPU_REG_FORCE_IDLE_MISC_ADDR      		(6*4)
3082ee67178SXianjun Jiao #define XPU_REG_RSSI_DB_CFG_ADDR          		(7*4)
3092ee67178SXianjun Jiao #define XPU_REG_LBT_TH_ADDR               		(8*4)
3102ee67178SXianjun Jiao #define XPU_REG_CSMA_DEBUG_ADDR           		(9*4)
3112ee67178SXianjun Jiao #define XPU_REG_BB_RF_DELAY_ADDR         		(10*4)
312913a9e94SXianjun Jiao #define XPU_REG_ACK_CTL_MAX_NUM_RETRANS_ADDR	(11*4)
313261bb9eeSmmehari #define XPU_REG_AMPDU_ACTION_ADDR        		(12*4)
314bc98f5bbSthavinga #define XPU_REG_SPI_DISABLE_ADDR        		(13*4)
3152ee67178SXianjun Jiao #define XPU_REG_RECV_ACK_COUNT_TOP0_ADDR  		(16*4)
3162ee67178SXianjun Jiao #define XPU_REG_RECV_ACK_COUNT_TOP1_ADDR  		(17*4)
3172ee67178SXianjun Jiao #define XPU_REG_SEND_ACK_WAIT_TOP_ADDR    		(18*4)
3182ee67178SXianjun Jiao #define XPU_REG_CSMA_CFG_ADDR             		(19*4)
3192ee67178SXianjun Jiao 
320838a9007SXianjun Jiao #define XPU_REG_SLICE_COUNT_TOTAL_ADDR    (20*4)
321838a9007SXianjun Jiao #define XPU_REG_SLICE_COUNT_START_ADDR    (21*4)
322838a9007SXianjun Jiao #define XPU_REG_SLICE_COUNT_END_ADDR      (22*4)
3232ee67178SXianjun Jiao 
3242ee67178SXianjun Jiao #define XPU_REG_CTS_TO_RTS_CONFIG_ADDR    (26*4)
3252ee67178SXianjun Jiao #define XPU_REG_FILTER_FLAG_ADDR          (27*4)
3262ee67178SXianjun Jiao #define XPU_REG_BSSID_FILTER_LOW_ADDR     (28*4)
3272ee67178SXianjun Jiao #define XPU_REG_BSSID_FILTER_HIGH_ADDR    (29*4)
3282ee67178SXianjun Jiao #define XPU_REG_MAC_ADDR_LOW_ADDR         (30*4)
3292ee67178SXianjun Jiao #define XPU_REG_MAC_ADDR_HIGH_ADDR        (31*4)
3302ee67178SXianjun Jiao 
3312ee67178SXianjun Jiao #define XPU_REG_TSF_RUNTIME_VAL_LOW_ADDR  (58*4)
3322ee67178SXianjun Jiao #define XPU_REG_TSF_RUNTIME_VAL_HIGH_ADDR (59*4)
3332ee67178SXianjun Jiao 
3346c6cf951SXianjun Jiao #define XPU_REG_MAC_ADDR_READ_BACK_ADDR   (62*4)
3356c6cf951SXianjun Jiao #define XPU_REG_FPGA_GIT_REV_ADDR         (63*4)
3362ee67178SXianjun Jiao 
3372ee67178SXianjun Jiao enum xpu_mode {
3382ee67178SXianjun Jiao 	XPU_TEST = 0,
3392ee67178SXianjun Jiao 	XPU_NORMAL,
3402ee67178SXianjun Jiao };
3412ee67178SXianjun Jiao 
3422ee67178SXianjun Jiao struct xpu_driver_api {
3432ee67178SXianjun Jiao 	u32 (*hw_init)(enum xpu_mode mode);
3442ee67178SXianjun Jiao 
3452ee67178SXianjun Jiao 	u32 (*reg_read)(u32 reg);
3462ee67178SXianjun Jiao 	void (*reg_write)(u32 reg, u32 value);
3472ee67178SXianjun Jiao 
3482ee67178SXianjun Jiao 	void (*XPU_REG_MULTI_RST_write)(u32 value);
3492ee67178SXianjun Jiao 	u32  (*XPU_REG_MULTI_RST_read)(void);
3502ee67178SXianjun Jiao 
3512ee67178SXianjun Jiao 	void (*XPU_REG_SRC_SEL_write)(u32 value);
3522ee67178SXianjun Jiao 	u32  (*XPU_REG_SRC_SEL_read)(void);
3532ee67178SXianjun Jiao 
3542ee67178SXianjun Jiao 	void (*XPU_REG_RECV_ACK_COUNT_TOP0_write)(u32 value);
3552ee67178SXianjun Jiao 	u32  (*XPU_REG_RECV_ACK_COUNT_TOP0_read)(void);
3562ee67178SXianjun Jiao 
3572ee67178SXianjun Jiao 	void (*XPU_REG_RECV_ACK_COUNT_TOP1_write)(u32 value);
3582ee67178SXianjun Jiao 	u32  (*XPU_REG_RECV_ACK_COUNT_TOP1_read)(void);
3592ee67178SXianjun Jiao 
3602ee67178SXianjun Jiao 	void (*XPU_REG_SEND_ACK_WAIT_TOP_write)(u32 value);
3612ee67178SXianjun Jiao 	u32  (*XPU_REG_SEND_ACK_WAIT_TOP_read)(void);
3622ee67178SXianjun Jiao 
3632ee67178SXianjun Jiao 	void (*XPU_REG_ACK_FC_FILTER_write)(u32 value);
3642ee67178SXianjun Jiao 	u32  (*XPU_REG_ACK_FC_FILTER_read)(void);
3652ee67178SXianjun Jiao 
3662ee67178SXianjun Jiao 	void (*XPU_REG_CTS_TO_RTS_CONFIG_write)(u32 value);
3672ee67178SXianjun Jiao 	u32  (*XPU_REG_CTS_TO_RTS_CONFIG_read)(void);
3682ee67178SXianjun Jiao 
3692ee67178SXianjun Jiao 	void (*XPU_REG_FILTER_FLAG_write)(u32 value);
3702ee67178SXianjun Jiao 	u32  (*XPU_REG_FILTER_FLAG_read)(void);
3712ee67178SXianjun Jiao 
3722ee67178SXianjun Jiao 	void (*XPU_REG_MAC_ADDR_LOW_write)(u32 value);
3732ee67178SXianjun Jiao 	u32  (*XPU_REG_MAC_ADDR_LOW_read)(void);
3742ee67178SXianjun Jiao 
3752ee67178SXianjun Jiao 	void (*XPU_REG_MAC_ADDR_HIGH_write)(u32 value);
3762ee67178SXianjun Jiao 	u32  (*XPU_REG_MAC_ADDR_HIGH_read)(void);
3772ee67178SXianjun Jiao 
3782ee67178SXianjun Jiao 	void (*XPU_REG_BSSID_FILTER_LOW_write)(u32 value);
3792ee67178SXianjun Jiao 	u32  (*XPU_REG_BSSID_FILTER_LOW_read)(void);
3802ee67178SXianjun Jiao 
3812ee67178SXianjun Jiao 	void (*XPU_REG_BSSID_FILTER_HIGH_write)(u32 value);
3822ee67178SXianjun Jiao 	u32  (*XPU_REG_BSSID_FILTER_HIGH_read)(void);
3832ee67178SXianjun Jiao 
3842ee67178SXianjun Jiao 	void (*XPU_REG_BAND_CHANNEL_write)(u32 value);
3852ee67178SXianjun Jiao 	u32  (*XPU_REG_BAND_CHANNEL_read)(void);
3862ee67178SXianjun Jiao 
3875deb8d18SXianjun Jiao 	void (*XPU_REG_DIFS_ADVANCE_write)(u32 value);
3885deb8d18SXianjun Jiao 	u32  (*XPU_REG_DIFS_ADVANCE_read)(void);
3895deb8d18SXianjun Jiao 
390bb0a2c58SXianjun Jiao 	void (*XPU_REG_FORCE_IDLE_MISC_write)(u32 value);
391bb0a2c58SXianjun Jiao 	u32  (*XPU_REG_FORCE_IDLE_MISC_read)(void);
392bb0a2c58SXianjun Jiao 
3932ee67178SXianjun Jiao 	u32  (*XPU_REG_TRX_STATUS_read)(void);
3942ee67178SXianjun Jiao 	u32  (*XPU_REG_TX_RESULT_read)(void);
3952ee67178SXianjun Jiao 
3962ee67178SXianjun Jiao 	u32  (*XPU_REG_TSF_RUNTIME_VAL_LOW_read)(void);
3972ee67178SXianjun Jiao 	u32  (*XPU_REG_TSF_RUNTIME_VAL_HIGH_read)(void);
3982ee67178SXianjun Jiao 
3992ee67178SXianjun Jiao 	void (*XPU_REG_TSF_LOAD_VAL_LOW_write)(u32 value);
4002ee67178SXianjun Jiao 	void (*XPU_REG_TSF_LOAD_VAL_HIGH_write)(u32 value);
4012ee67178SXianjun Jiao 	void (*XPU_REG_TSF_LOAD_VAL_write)(u32 high_value, u32 low_value);
4022ee67178SXianjun Jiao 
4032ee67178SXianjun Jiao 	u32  (*XPU_REG_FC_DI_read)(void);
4042ee67178SXianjun Jiao 	u32  (*XPU_REG_ADDR1_LOW_read)(void);
4052ee67178SXianjun Jiao 	u32  (*XPU_REG_ADDR1_HIGH_read)(void);
4062ee67178SXianjun Jiao 	u32  (*XPU_REG_ADDR2_LOW_read)(void);
4072ee67178SXianjun Jiao 	u32  (*XPU_REG_ADDR2_HIGH_read)(void);
4082ee67178SXianjun Jiao 
4092ee67178SXianjun Jiao 	void (*XPU_REG_LBT_TH_write)(u32 value);
4102ee67178SXianjun Jiao 	u32  (*XPU_REG_LBT_TH_read)(void);
4112ee67178SXianjun Jiao 
4122ee67178SXianjun Jiao 	void (*XPU_REG_RSSI_DB_CFG_write)(u32 value);
4132ee67178SXianjun Jiao 	u32  (*XPU_REG_RSSI_DB_CFG_read)(void);
4142ee67178SXianjun Jiao 
4152ee67178SXianjun Jiao 	void (*XPU_REG_CSMA_DEBUG_write)(u32 value);
4162ee67178SXianjun Jiao 	u32  (*XPU_REG_CSMA_DEBUG_read)(void);
4172ee67178SXianjun Jiao 
4182ee67178SXianjun Jiao 	void (*XPU_REG_CSMA_CFG_write)(u32 value);
4192ee67178SXianjun Jiao 	u32  (*XPU_REG_CSMA_CFG_read)(void);
4202ee67178SXianjun Jiao 
421838a9007SXianjun Jiao 	void (*XPU_REG_SLICE_COUNT_TOTAL_write)(u32 value);
422838a9007SXianjun Jiao 	void (*XPU_REG_SLICE_COUNT_START_write)(u32 value);
423838a9007SXianjun Jiao 	void (*XPU_REG_SLICE_COUNT_END_write)(u32 value);
4242ee67178SXianjun Jiao 	void (*XPU_REG_SLICE_COUNT_TOTAL1_write)(u32 value);
4252ee67178SXianjun Jiao 	void (*XPU_REG_SLICE_COUNT_START1_write)(u32 value);
4262ee67178SXianjun Jiao 	void (*XPU_REG_SLICE_COUNT_END1_write)(u32 value);
4272ee67178SXianjun Jiao 
428838a9007SXianjun Jiao 	u32 (*XPU_REG_SLICE_COUNT_TOTAL_read)(void);
429838a9007SXianjun Jiao 	u32 (*XPU_REG_SLICE_COUNT_START_read)(void);
430838a9007SXianjun Jiao 	u32 (*XPU_REG_SLICE_COUNT_END_read)(void);
4312ee67178SXianjun Jiao 	u32 (*XPU_REG_SLICE_COUNT_TOTAL1_read)(void);
4322ee67178SXianjun Jiao 	u32 (*XPU_REG_SLICE_COUNT_START1_read)(void);
4332ee67178SXianjun Jiao 	u32 (*XPU_REG_SLICE_COUNT_END1_read)(void);
4342ee67178SXianjun Jiao 
4352ee67178SXianjun Jiao 	void (*XPU_REG_BB_RF_DELAY_write)(u32 value);
436913a9e94SXianjun Jiao 
437913a9e94SXianjun Jiao 	void (*XPU_REG_ACK_CTL_MAX_NUM_RETRANS_write)(u32 value);
438913a9e94SXianjun Jiao 	u32  (*XPU_REG_ACK_CTL_MAX_NUM_RETRANS_read)(void);
4392ee67178SXianjun Jiao 
440bc98f5bbSthavinga 	void (*XPU_REG_SPI_DISABLE_write)(u32 value);
441bc98f5bbSthavinga 	u32  (*XPU_REG_SPI_DISABLE_read)(void);
442bc98f5bbSthavinga 
443261bb9eeSmmehari 	void (*XPU_REG_AMPDU_ACTION_write)(u32 value);
444261bb9eeSmmehari 	u32  (*XPU_REG_AMPDU_ACTION_read)(void);
445261bb9eeSmmehari 
4462ee67178SXianjun Jiao 	void (*XPU_REG_MAC_ADDR_write)(u8 *mac_addr);
4472ee67178SXianjun Jiao };
448a7396dd9SXianjun Jiao 
449a7396dd9SXianjun Jiao // #endif
450