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) 2082ee67178SXianjun Jiao #define OPENOFDM_RX_REG_STATE_HISTORY_ADDR (20*4) 2092ee67178SXianjun Jiao 2102ee67178SXianjun Jiao enum openofdm_rx_mode { 2112ee67178SXianjun Jiao OPENOFDM_RX_TEST = 0, 2122ee67178SXianjun Jiao OPENOFDM_RX_NORMAL, 2132ee67178SXianjun Jiao }; 2142ee67178SXianjun Jiao 215585a5601SXianjun Jiao #define OPENOFDM_RX_POWER_THRES_INIT 124 216585a5601SXianjun Jiao // Above 118 is based on these test result (2022-03-09) 217585a5601SXianjun Jiao // FMCOMMS3 218585a5601SXianjun Jiao // 2437M 219585a5601SXianjun Jiao // 11a/g BPSK 6M, Rx sensitivity level dmesg report -85dBm 220585a5601SXianjun Jiao // priv->rssi_correction = 153; rssi_half_db/2 = 153-85=68; rssi_half_db = 136 221585a5601SXianjun Jiao // 5180M 222585a5601SXianjun Jiao // 11a/g BPSK 6m, Rx sensitivity level dmesg report -84dBm 223585a5601SXianjun Jiao // priv->rssi_correction = 145; rssi_half_db/2 = 145-84=61; rssi_half_db = 122 224585a5601SXianjun Jiao // 5320M 225585a5601SXianjun Jiao // 11a/g BPSK 6m, Rx sensitivity level dmesg report -86dBm 226585a5601SXianjun Jiao // priv->rssi_correction = 148; rssi_half_db/2 = 148-86=62; rssi_half_db = 124 227585a5601SXianjun Jiao 228585a5601SXianjun Jiao // FMCOMMS2 229585a5601SXianjun Jiao // 2437M 230585a5601SXianjun Jiao // 11a/g BPSK 6M, Rx sensitivity level dmesg report -80dBm 231585a5601SXianjun Jiao // priv->rssi_correction = 153; rssi_half_db/2 = 153-80=73; rssi_half_db = 146 232585a5601SXianjun Jiao // 5180M 233585a5601SXianjun Jiao // 11a/g BPSK 6m, Rx sensitivity level dmesg report -83dBm 234585a5601SXianjun Jiao // priv->rssi_correction = 145; rssi_half_db/2 = 145-83=62; rssi_half_db = 124 235585a5601SXianjun Jiao // 5320M 236585a5601SXianjun Jiao // 11a/g BPSK 6m, Rx sensitivity level dmesg report -86dBm 237585a5601SXianjun Jiao // priv->rssi_correction = 148; rssi_half_db/2 = 148-86=62; rssi_half_db = 124 238585a5601SXianjun Jiao 2397f48aacaSXianjun Jiao #define OPENOFDM_RX_RSSI_DBM_TH_DEFAULT (-95) //the best openwifi reported sensitivity is like -90/-92 240585a5601SXianjun Jiao #define OPENOFDM_RX_DC_RUNNING_SUM_TH_INIT 64 241585a5601SXianjun Jiao #define OPENOFDM_RX_MIN_PLATEAU_INIT 100 242585a5601SXianjun Jiao 243585a5601SXianjun 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 24426825b8bSXianjun Jiao 24526825b8bSXianjun 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 24626825b8bSXianjun Jiao //due to CRC32, at least 4 bytes needed to push out expected CRC result 247585a5601SXianjun Jiao 2482ee67178SXianjun Jiao struct openofdm_rx_driver_api { 2492ee67178SXianjun Jiao u32 (*hw_init)(enum openofdm_rx_mode mode); 2502ee67178SXianjun Jiao 2512ee67178SXianjun Jiao u32 (*reg_read)(u32 reg); 2522ee67178SXianjun Jiao void (*reg_write)(u32 reg, u32 value); 2532ee67178SXianjun Jiao 2542ee67178SXianjun Jiao u32 (*OPENOFDM_RX_REG_STATE_HISTORY_read)(void); 2552ee67178SXianjun Jiao 2562ee67178SXianjun Jiao void (*OPENOFDM_RX_REG_MULTI_RST_write)(u32 value); 2572ee67178SXianjun Jiao void (*OPENOFDM_RX_REG_ENABLE_write)(u32 value); 2582ee67178SXianjun Jiao void (*OPENOFDM_RX_REG_POWER_THRES_write)(u32 value); 2592ee67178SXianjun Jiao void (*OPENOFDM_RX_REG_MIN_PLATEAU_write)(u32 value); 260aed16d05SXianjun Jiao void (*OPENOFDM_RX_REG_SOFT_DECODING_write)(u32 value); 2612ee67178SXianjun Jiao }; 2622ee67178SXianjun Jiao 2632ee67178SXianjun Jiao // ---------------------------------------openofdm tx------------------------------- 2642ee67178SXianjun Jiao const char *openofdm_tx_compatible_str = "sdr,openofdm_tx"; 2652ee67178SXianjun Jiao 2662ee67178SXianjun Jiao #define OPENOFDM_TX_REG_MULTI_RST_ADDR (0*4) 2672ee67178SXianjun Jiao #define OPENOFDM_TX_REG_INIT_PILOT_STATE_ADDR (1*4) 2682ee67178SXianjun Jiao #define OPENOFDM_TX_REG_INIT_DATA_STATE_ADDR (2*4) 2692ee67178SXianjun Jiao 2702ee67178SXianjun Jiao enum openofdm_tx_mode { 2712ee67178SXianjun Jiao OPENOFDM_TX_TEST = 0, 2722ee67178SXianjun Jiao OPENOFDM_TX_NORMAL, 2732ee67178SXianjun Jiao }; 2742ee67178SXianjun Jiao 2752ee67178SXianjun Jiao struct openofdm_tx_driver_api { 2762ee67178SXianjun Jiao u32 (*hw_init)(enum openofdm_tx_mode mode); 2772ee67178SXianjun Jiao 2782ee67178SXianjun Jiao u32 (*reg_read)(u32 reg); 2792ee67178SXianjun Jiao void (*reg_write)(u32 reg, u32 value); 2802ee67178SXianjun Jiao 2812ee67178SXianjun Jiao void (*OPENOFDM_TX_REG_MULTI_RST_write)(u32 value); 2822ee67178SXianjun Jiao void (*OPENOFDM_TX_REG_INIT_PILOT_STATE_write)(u32 value); 2832ee67178SXianjun Jiao void (*OPENOFDM_TX_REG_INIT_DATA_STATE_write)(u32 value); 2842ee67178SXianjun Jiao }; 2852ee67178SXianjun Jiao 2862ee67178SXianjun Jiao // ---------------------------------------xpu low MAC controller------------------------------- 2872ee67178SXianjun Jiao 2882ee67178SXianjun Jiao // extra filter flag together with enum ieee80211_filter_flags in mac80211.h 2892ee67178SXianjun Jiao #define UNICAST_FOR_US (1<<9) 2902ee67178SXianjun Jiao #define BROADCAST_ALL_ONE (1<<10) 2912ee67178SXianjun Jiao #define BROADCAST_ALL_ZERO (1<<11) 2922ee67178SXianjun Jiao #define MY_BEACON (1<<12) 2932ee67178SXianjun Jiao #define MONITOR_ALL (1<<13) 2942ee67178SXianjun Jiao 2952ee67178SXianjun Jiao const char *xpu_compatible_str = "sdr,xpu"; 2962ee67178SXianjun Jiao 2972ee67178SXianjun Jiao #define XPU_REG_MULTI_RST_ADDR (0*4) 2982ee67178SXianjun Jiao #define XPU_REG_SRC_SEL_ADDR (1*4) 2992ee67178SXianjun Jiao #define XPU_REG_TSF_LOAD_VAL_LOW_ADDR (2*4) 3002ee67178SXianjun Jiao #define XPU_REG_TSF_LOAD_VAL_HIGH_ADDR (3*4) 3012ee67178SXianjun Jiao #define XPU_REG_BAND_CHANNEL_ADDR (4*4) 3025deb8d18SXianjun Jiao #define XPU_REG_DIFS_ADVANCE_ADDR (5*4) 303bb0a2c58SXianjun Jiao #define XPU_REG_FORCE_IDLE_MISC_ADDR (6*4) 3042ee67178SXianjun Jiao #define XPU_REG_RSSI_DB_CFG_ADDR (7*4) 3052ee67178SXianjun Jiao #define XPU_REG_LBT_TH_ADDR (8*4) 3062ee67178SXianjun Jiao #define XPU_REG_CSMA_DEBUG_ADDR (9*4) 3072ee67178SXianjun Jiao #define XPU_REG_BB_RF_DELAY_ADDR (10*4) 308913a9e94SXianjun Jiao #define XPU_REG_ACK_CTL_MAX_NUM_RETRANS_ADDR (11*4) 309261bb9eeSmmehari #define XPU_REG_AMPDU_ACTION_ADDR (12*4) 310bc98f5bbSthavinga #define XPU_REG_SPI_DISABLE_ADDR (13*4) 3112ee67178SXianjun Jiao #define XPU_REG_RECV_ACK_COUNT_TOP0_ADDR (16*4) 3122ee67178SXianjun Jiao #define XPU_REG_RECV_ACK_COUNT_TOP1_ADDR (17*4) 3132ee67178SXianjun Jiao #define XPU_REG_SEND_ACK_WAIT_TOP_ADDR (18*4) 3142ee67178SXianjun Jiao #define XPU_REG_CSMA_CFG_ADDR (19*4) 3152ee67178SXianjun Jiao 316838a9007SXianjun Jiao #define XPU_REG_SLICE_COUNT_TOTAL_ADDR (20*4) 317838a9007SXianjun Jiao #define XPU_REG_SLICE_COUNT_START_ADDR (21*4) 318838a9007SXianjun Jiao #define XPU_REG_SLICE_COUNT_END_ADDR (22*4) 3192ee67178SXianjun Jiao 3202ee67178SXianjun Jiao #define XPU_REG_CTS_TO_RTS_CONFIG_ADDR (26*4) 3212ee67178SXianjun Jiao #define XPU_REG_FILTER_FLAG_ADDR (27*4) 3222ee67178SXianjun Jiao #define XPU_REG_BSSID_FILTER_LOW_ADDR (28*4) 3232ee67178SXianjun Jiao #define XPU_REG_BSSID_FILTER_HIGH_ADDR (29*4) 3242ee67178SXianjun Jiao #define XPU_REG_MAC_ADDR_LOW_ADDR (30*4) 3252ee67178SXianjun Jiao #define XPU_REG_MAC_ADDR_HIGH_ADDR (31*4) 3262ee67178SXianjun Jiao 3272ee67178SXianjun Jiao #define XPU_REG_TSF_RUNTIME_VAL_LOW_ADDR (58*4) 3282ee67178SXianjun Jiao #define XPU_REG_TSF_RUNTIME_VAL_HIGH_ADDR (59*4) 3292ee67178SXianjun Jiao 330*6c6cf951SXianjun Jiao #define XPU_REG_MAC_ADDR_READ_BACK_ADDR (62*4) 331*6c6cf951SXianjun Jiao #define XPU_REG_FPGA_GIT_REV_ADDR (63*4) 3322ee67178SXianjun Jiao 3332ee67178SXianjun Jiao enum xpu_mode { 3342ee67178SXianjun Jiao XPU_TEST = 0, 3352ee67178SXianjun Jiao XPU_NORMAL, 3362ee67178SXianjun Jiao }; 3372ee67178SXianjun Jiao 3382ee67178SXianjun Jiao struct xpu_driver_api { 3392ee67178SXianjun Jiao u32 (*hw_init)(enum xpu_mode mode); 3402ee67178SXianjun Jiao 3412ee67178SXianjun Jiao u32 (*reg_read)(u32 reg); 3422ee67178SXianjun Jiao void (*reg_write)(u32 reg, u32 value); 3432ee67178SXianjun Jiao 3442ee67178SXianjun Jiao void (*XPU_REG_MULTI_RST_write)(u32 value); 3452ee67178SXianjun Jiao u32 (*XPU_REG_MULTI_RST_read)(void); 3462ee67178SXianjun Jiao 3472ee67178SXianjun Jiao void (*XPU_REG_SRC_SEL_write)(u32 value); 3482ee67178SXianjun Jiao u32 (*XPU_REG_SRC_SEL_read)(void); 3492ee67178SXianjun Jiao 3502ee67178SXianjun Jiao void (*XPU_REG_RECV_ACK_COUNT_TOP0_write)(u32 value); 3512ee67178SXianjun Jiao u32 (*XPU_REG_RECV_ACK_COUNT_TOP0_read)(void); 3522ee67178SXianjun Jiao 3532ee67178SXianjun Jiao void (*XPU_REG_RECV_ACK_COUNT_TOP1_write)(u32 value); 3542ee67178SXianjun Jiao u32 (*XPU_REG_RECV_ACK_COUNT_TOP1_read)(void); 3552ee67178SXianjun Jiao 3562ee67178SXianjun Jiao void (*XPU_REG_SEND_ACK_WAIT_TOP_write)(u32 value); 3572ee67178SXianjun Jiao u32 (*XPU_REG_SEND_ACK_WAIT_TOP_read)(void); 3582ee67178SXianjun Jiao 3592ee67178SXianjun Jiao void (*XPU_REG_ACK_FC_FILTER_write)(u32 value); 3602ee67178SXianjun Jiao u32 (*XPU_REG_ACK_FC_FILTER_read)(void); 3612ee67178SXianjun Jiao 3622ee67178SXianjun Jiao void (*XPU_REG_CTS_TO_RTS_CONFIG_write)(u32 value); 3632ee67178SXianjun Jiao u32 (*XPU_REG_CTS_TO_RTS_CONFIG_read)(void); 3642ee67178SXianjun Jiao 3652ee67178SXianjun Jiao void (*XPU_REG_FILTER_FLAG_write)(u32 value); 3662ee67178SXianjun Jiao u32 (*XPU_REG_FILTER_FLAG_read)(void); 3672ee67178SXianjun Jiao 3682ee67178SXianjun Jiao void (*XPU_REG_MAC_ADDR_LOW_write)(u32 value); 3692ee67178SXianjun Jiao u32 (*XPU_REG_MAC_ADDR_LOW_read)(void); 3702ee67178SXianjun Jiao 3712ee67178SXianjun Jiao void (*XPU_REG_MAC_ADDR_HIGH_write)(u32 value); 3722ee67178SXianjun Jiao u32 (*XPU_REG_MAC_ADDR_HIGH_read)(void); 3732ee67178SXianjun Jiao 3742ee67178SXianjun Jiao void (*XPU_REG_BSSID_FILTER_LOW_write)(u32 value); 3752ee67178SXianjun Jiao u32 (*XPU_REG_BSSID_FILTER_LOW_read)(void); 3762ee67178SXianjun Jiao 3772ee67178SXianjun Jiao void (*XPU_REG_BSSID_FILTER_HIGH_write)(u32 value); 3782ee67178SXianjun Jiao u32 (*XPU_REG_BSSID_FILTER_HIGH_read)(void); 3792ee67178SXianjun Jiao 3802ee67178SXianjun Jiao void (*XPU_REG_BAND_CHANNEL_write)(u32 value); 3812ee67178SXianjun Jiao u32 (*XPU_REG_BAND_CHANNEL_read)(void); 3822ee67178SXianjun Jiao 3835deb8d18SXianjun Jiao void (*XPU_REG_DIFS_ADVANCE_write)(u32 value); 3845deb8d18SXianjun Jiao u32 (*XPU_REG_DIFS_ADVANCE_read)(void); 3855deb8d18SXianjun Jiao 386bb0a2c58SXianjun Jiao void (*XPU_REG_FORCE_IDLE_MISC_write)(u32 value); 387bb0a2c58SXianjun Jiao u32 (*XPU_REG_FORCE_IDLE_MISC_read)(void); 388bb0a2c58SXianjun Jiao 3892ee67178SXianjun Jiao u32 (*XPU_REG_TRX_STATUS_read)(void); 3902ee67178SXianjun Jiao u32 (*XPU_REG_TX_RESULT_read)(void); 3912ee67178SXianjun Jiao 3922ee67178SXianjun Jiao u32 (*XPU_REG_TSF_RUNTIME_VAL_LOW_read)(void); 3932ee67178SXianjun Jiao u32 (*XPU_REG_TSF_RUNTIME_VAL_HIGH_read)(void); 3942ee67178SXianjun Jiao 3952ee67178SXianjun Jiao void (*XPU_REG_TSF_LOAD_VAL_LOW_write)(u32 value); 3962ee67178SXianjun Jiao void (*XPU_REG_TSF_LOAD_VAL_HIGH_write)(u32 value); 3972ee67178SXianjun Jiao void (*XPU_REG_TSF_LOAD_VAL_write)(u32 high_value, u32 low_value); 3982ee67178SXianjun Jiao 3992ee67178SXianjun Jiao u32 (*XPU_REG_FC_DI_read)(void); 4002ee67178SXianjun Jiao u32 (*XPU_REG_ADDR1_LOW_read)(void); 4012ee67178SXianjun Jiao u32 (*XPU_REG_ADDR1_HIGH_read)(void); 4022ee67178SXianjun Jiao u32 (*XPU_REG_ADDR2_LOW_read)(void); 4032ee67178SXianjun Jiao u32 (*XPU_REG_ADDR2_HIGH_read)(void); 4042ee67178SXianjun Jiao 4052ee67178SXianjun Jiao void (*XPU_REG_LBT_TH_write)(u32 value); 4062ee67178SXianjun Jiao u32 (*XPU_REG_LBT_TH_read)(void); 4072ee67178SXianjun Jiao 4082ee67178SXianjun Jiao void (*XPU_REG_RSSI_DB_CFG_write)(u32 value); 4092ee67178SXianjun Jiao u32 (*XPU_REG_RSSI_DB_CFG_read)(void); 4102ee67178SXianjun Jiao 4112ee67178SXianjun Jiao void (*XPU_REG_CSMA_DEBUG_write)(u32 value); 4122ee67178SXianjun Jiao u32 (*XPU_REG_CSMA_DEBUG_read)(void); 4132ee67178SXianjun Jiao 4142ee67178SXianjun Jiao void (*XPU_REG_CSMA_CFG_write)(u32 value); 4152ee67178SXianjun Jiao u32 (*XPU_REG_CSMA_CFG_read)(void); 4162ee67178SXianjun Jiao 417838a9007SXianjun Jiao void (*XPU_REG_SLICE_COUNT_TOTAL_write)(u32 value); 418838a9007SXianjun Jiao void (*XPU_REG_SLICE_COUNT_START_write)(u32 value); 419838a9007SXianjun Jiao void (*XPU_REG_SLICE_COUNT_END_write)(u32 value); 4202ee67178SXianjun Jiao void (*XPU_REG_SLICE_COUNT_TOTAL1_write)(u32 value); 4212ee67178SXianjun Jiao void (*XPU_REG_SLICE_COUNT_START1_write)(u32 value); 4222ee67178SXianjun Jiao void (*XPU_REG_SLICE_COUNT_END1_write)(u32 value); 4232ee67178SXianjun Jiao 424838a9007SXianjun Jiao u32 (*XPU_REG_SLICE_COUNT_TOTAL_read)(void); 425838a9007SXianjun Jiao u32 (*XPU_REG_SLICE_COUNT_START_read)(void); 426838a9007SXianjun Jiao u32 (*XPU_REG_SLICE_COUNT_END_read)(void); 4272ee67178SXianjun Jiao u32 (*XPU_REG_SLICE_COUNT_TOTAL1_read)(void); 4282ee67178SXianjun Jiao u32 (*XPU_REG_SLICE_COUNT_START1_read)(void); 4292ee67178SXianjun Jiao u32 (*XPU_REG_SLICE_COUNT_END1_read)(void); 4302ee67178SXianjun Jiao 4312ee67178SXianjun Jiao void (*XPU_REG_BB_RF_DELAY_write)(u32 value); 432913a9e94SXianjun Jiao 433913a9e94SXianjun Jiao void (*XPU_REG_ACK_CTL_MAX_NUM_RETRANS_write)(u32 value); 434913a9e94SXianjun Jiao u32 (*XPU_REG_ACK_CTL_MAX_NUM_RETRANS_read)(void); 4352ee67178SXianjun Jiao 436bc98f5bbSthavinga void (*XPU_REG_SPI_DISABLE_write)(u32 value); 437bc98f5bbSthavinga u32 (*XPU_REG_SPI_DISABLE_read)(void); 438bc98f5bbSthavinga 439261bb9eeSmmehari void (*XPU_REG_AMPDU_ACTION_write)(u32 value); 440261bb9eeSmmehari u32 (*XPU_REG_AMPDU_ACTION_read)(void); 441261bb9eeSmmehari 4422ee67178SXianjun Jiao void (*XPU_REG_MAC_ADDR_write)(u8 *mac_addr); 4432ee67178SXianjun Jiao }; 444a7396dd9SXianjun Jiao 445a7396dd9SXianjun Jiao // #endif 446