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