/* esp/slc_regs.h * * ESP8266 SLC register definitions * * Not compatible with ESP SDK register access code. */ #ifndef _ESP_SLC_REGS_H #define _ESP_SLC_REGS_H #include "esp/types.h" #include "common_macros.h" #define SLC_BASE 0x60000b00 #define SLC (*(struct SLC_REGS *)SLC_BASE) struct SLC_REGS { uint32_t volatile CONF0; // 0x00 uint32_t volatile INT_RAW; // 0x04 uint32_t volatile INT_STATUS; // 0x08 uint32_t volatile INT_ENABLE; // 0x0c uint32_t volatile INT_CLEAR; // 0x10 uint32_t volatile RX_STATUS; // 0x14 uint32_t volatile RX_FIFO_PUSH; // 0x18 uint32_t volatile TX_STATUS; // 0x1c uint32_t volatile TX_FIFO_POP; // 0x20 uint32_t volatile RX_LINK; // 0x24 uint32_t volatile TX_LINK; // 0x28 uint32_t volatile INTVEC_TO_HOST; // 0x2c uint32_t volatile TOKEN0; // 0x30 uint32_t volatile TOKEN1; // 0x34 uint32_t volatile CONF1; // 0x38 uint32_t volatile STATE0; // 0x3c uint32_t volatile STATE1; // 0x40 uint32_t volatile BRIDGE_CONF; // 0x44 uint32_t volatile RX_EOF_DESCRIPTOR_ADDR; // 0x48 uint32_t volatile TX_EOF_DESCRIPTOR_ADDR; // 0x4c uint32_t volatile RX_EOF_BUFFER_DESCRIPTOR_ADDR; // 0x50 - Naming uncertain uint32_t volatile AHB_TEST; // 0x54 uint32_t volatile SDIO_STATUS; // 0x58 uint32_t volatile RX_DESCRIPTOR_CONF; // 0x5c uint32_t volatile TX_LINK_DESCRIPTOR; // 0x60 uint32_t volatile TX_LINK_DESCRIPTOR_BF0; // 0x64 uint32_t volatile TX_LINK_DESCRIPTOR_BF1; // 0x68 uint32_t volatile RX_LINK_DESCRIPTOR; // 0x6c uint32_t volatile RX_LINK_DESCRIPTOR_BF0; // 0x70 uint32_t volatile RX_LINK_DESCRIPTOR_BF1; // 0x74 uint32_t volatile DATE; // 0x78 uint32_t volatile ID; // 0x7c uint32_t volatile UNKNOWN_80; // 0x80 uint32_t volatile UNKNOWN_84; // 0x84 uint32_t volatile HOST_INT_RAW; // 0x88 uint32_t volatile UNKNOWN_8C; // 0x8c uint32_t volatile UNKNOWN_90; // 0x90 uint32_t volatile HOST_CONF_W0; // 0x94 uint32_t volatile HOST_CONF_W1; // 0x98 uint32_t volatile HOST_INT_STATUS; // 0x9c uint32_t volatile HOST_CONF_W2; // 0xa0 uint32_t volatile HOST_CONF_W3; // 0xa4 uint32_t volatile HOST_CONF_W4; // 0xa8 uint32_t volatile UNKNOWN_AC; // 0xac uint32_t volatile HOST_INT_CLEAR; // 0xb0 uint32_t volatile HOST_INT_ENABLE; // 0xb4 uint32_t volatile UNKNOWN_B8; // 0xb8 uint32_t volatile HOST_CONF_W5; // 0xbc }; /* Details for CONF0 register */ #define SLC_CONF0_MODE_M 0x00000003 #define SLC_CONF0_MODE_S 12 #define SLC_CONF0_DATA_BURST_ENABLE BIT(9) #define SLC_CONF0_DESCRIPTOR_BURST_ENABLE BIT(8) #define SLC_CONF0_RX_NO_RESTART_CLEAR BIT(7) #define SLC_CONF0_RX_AUTO_WRITE_BACK BIT(6) #define SLC_CONF0_RX_LOOP_TEST BIT(5) #define SLC_CONF0_TX_LOOP_TEST BIT(4) #define SLC_CONF0_AHBM_RESET BIT(3) #define SLC_CONF0_AHBM_FIFO_RESET BIT(2) #define SLC_CONF0_RX_LINK_RESET BIT(1) #define SLC_CONF0_TX_LINK_RESET BIT(0) /* Details for INT_RAW register */ #define SLC_INT_RAW_TX_DSCR_EMPTY BIT(21) #define SLC_INT_RAW_RX_DSCR_ERROR BIT(20) #define SLC_INT_RAW_TX_DSCR_ERROR BIT(19) #define SLC_INT_RAW_TO_HOST BIT(18) #define SLC_INT_RAW_RX_EOF BIT(17) #define SLC_INT_RAW_RX_DONE BIT(16) #define SLC_INT_RAW_TX_EOF BIT(15) #define SLC_INT_RAW_TX_DONE BIT(14) #define SLC_INT_RAW_TOKEN1_1TO0 BIT(13) #define SLC_INT_RAW_TOKEN0_1TO0 BIT(12) #define SLC_INT_RAW_TX_OVERFLOW BIT(11) #define SLC_INT_RAW_RX_UNDEFLOW BIT(10) #define SLC_INT_RAW_TX_START BIT(9) #define SLC_INT_RAW_RX_START BIT(8) #define SLC_INT_RAW_FROM_HOST_BIT7 BIT(7) #define SLC_INT_RAW_FROM_HOST_BIT6 BIT(6) #define SLC_INT_RAW_FROM_HOST_BIT5 BIT(5) #define SLC_INT_RAW_FROM_HOST_BIT4 BIT(4) #define SLC_INT_RAW_FROM_HOST_BIT3 BIT(3) #define SLC_INT_RAW_FROM_HOST_BIT2 BIT(2) #define SLC_INT_RAW_FROM_HOST_BIT1 BIT(1) #define SLC_INT_RAW_FROM_HOST_BIT0 BIT(0) /* Details for INT_STATUS register */ #define SLC_INT_STATUS_TX_DSCR_EMPTY BIT(21) #define SLC_INT_STATUS_RX_DSCR_ERROR BIT(20) #define SLC_INT_STATUS_TX_DSCR_ERROR BIT(19) #define SLC_INT_STATUS_TO_HOST BIT(18) #define SLC_INT_STATUS_RX_EOF BIT(17) #define SLC_INT_STATUS_RX_DONE BIT(16) #define SLC_INT_STATUS_TX_EOF BIT(15) #define SLC_INT_STATUS_TX_DONE BIT(14) #define SLC_INT_STATUS_TOKEN1_1TO0 BIT(13) #define SLC_INT_STATUS_TOKEN0_1TO0 BIT(12) #define SLC_INT_STATUS_TX_OVERFLOW BIT(11) #define SLC_INT_STATUS_RX_UNDEFLOW BIT(10) #define SLC_INT_STATUS_TX_START BIT(9) #define SLC_INT_STATUS_RX_START BIT(8) #define SLC_INT_STATUS_FROM_HOST_BIT7 BIT(7) #define SLC_INT_STATUS_FROM_HOST_BIT6 BIT(6) #define SLC_INT_STATUS_FROM_HOST_BIT5 BIT(5) #define SLC_INT_STATUS_FROM_HOST_BIT4 BIT(4) #define SLC_INT_STATUS_FROM_HOST_BIT3 BIT(3) #define SLC_INT_STATUS_FROM_HOST_BIT2 BIT(2) #define SLC_INT_STATUS_FROM_HOST_BIT1 BIT(1) #define SLC_INT_STATUS_FROM_HOST_BIT0 BIT(0) /* Details for INT_ENABLE register */ #define SLC_INT_ENABLE_TX_DSCR_EMPTY BIT(21) #define SLC_INT_ENABLE_RX_DSCR_ERROR BIT(20) #define SLC_INT_ENABLE_TX_DSCR_ERROR BIT(19) #define SLC_INT_ENABLE_TO_HOST BIT(18) #define SLC_INT_ENABLE_RX_EOF BIT(17) #define SLC_INT_ENABLE_RX_DONE BIT(16) #define SLC_INT_ENABLE_TX_EOF BIT(15) #define SLC_INT_ENABLE_TX_DONE BIT(14) #define SLC_INT_ENABLE_TOKEN1_1TO0 BIT(13) #define SLC_INT_ENABLE_TOKEN0_1TO0 BIT(12) #define SLC_INT_ENABLE_TX_OVERFLOW BIT(11) #define SLC_INT_ENABLE_RX_UNDEFLOW BIT(10) #define SLC_INT_ENABLE_TX_START BIT(9) #define SLC_INT_ENABLE_RX_START BIT(8) #define SLC_INT_ENABLE_FROM_HOST_BIT7 BIT(7) #define SLC_INT_ENABLE_FROM_HOST_BIT6 BIT(6) #define SLC_INT_ENABLE_FROM_HOST_BIT5 BIT(5) #define SLC_INT_ENABLE_FROM_HOST_BIT4 BIT(4) #define SLC_INT_ENABLE_FROM_HOST_BIT3 BIT(3) #define SLC_INT_ENABLE_FROM_HOST_BIT2 BIT(2) #define SLC_INT_ENABLE_FROM_HOST_BIT1 BIT(1) #define SLC_INT_ENABLE_FROM_HOST_BIT0 BIT(0) #define SLC_INT_ENABLE_FROM_HOST_BIT_ALL 0xff /* Details for INT_CLEAR register */ #define SLC_INT_CLEAR_TX_DSCR_EMPTY BIT(21) #define SLC_INT_CLEAR_RX_DSCR_ERROR BIT(20) #define SLC_INT_CLEAR_TX_DSCR_ERROR BIT(19) #define SLC_INT_CLEAR_TO_HOST BIT(18) #define SLC_INT_CLEAR_RX_EOF BIT(17) #define SLC_INT_CLEAR_RX_DONE BIT(16) #define SLC_INT_CLEAR_TX_EOF BIT(15) #define SLC_INT_CLEAR_TX_DONE BIT(14) #define SLC_INT_CLEAR_TOKEN1_1TO0 BIT(13) #define SLC_INT_CLEAR_TOKEN0_1TO0 BIT(12) #define SLC_INT_CLEAR_TX_OVERFLOW BIT(11) #define SLC_INT_CLEAR_RX_UNDEFLOW BIT(10) #define SLC_INT_CLEAR_TX_START BIT(9) #define SLC_INT_CLEAR_RX_START BIT(8) #define SLC_INT_CLEAR_FROM_HOST_BIT7 BIT(7) #define SLC_INT_CLEAR_FROM_HOST_BIT6 BIT(6) #define SLC_INT_CLEAR_FROM_HOST_BIT5 BIT(5) #define SLC_INT_CLEAR_FROM_HOST_BIT4 BIT(4) #define SLC_INT_CLEAR_FROM_HOST_BIT3 BIT(3) #define SLC_INT_CLEAR_FROM_HOST_BIT2 BIT(2) #define SLC_INT_CLEAR_FROM_HOST_BIT1 BIT(1) #define SLC_INT_CLEAR_FROM_HOST_BIT0 BIT(0) /* Details for RX_STATUS register */ #define SLC_RX_STATUS_EMPTY BIT(1) #define SLC_RX_STATUS_FULL BIT(0) /* Details for RX_FIFO_PUSH register */ #define SLC_RX_FIFO_PUSH_FLAG BIT(16) #define SLC_RX_FIFO_PUSH_DATA_M 0x000001ff #define SLC_RX_FIFO_PUSH_DATA_S 0 /* Details for TX_STATUS register */ #define SLC_TX_STATUS_EMPTY BIT(1) #define SLC_TX_STATUS_FULL BIT(0) /* Details for TX_FIFO_POP register */ #define SLC_TX_FIFO_POP_FLAG BIT(16) #define SLC_TX_FIFO_POP_DATA_M 0x000007ff #define SLC_TX_FIFO_POP_DATA_S 0 /* Details for RX_LINK register */ #define SLC_RX_LINK_PARK BIT(31) #define SLC_RX_LINK_RESTART BIT(30) #define SLC_RX_LINK_START BIT(29) #define SLC_RX_LINK_STOP BIT(28) #define SLC_RX_LINK_DESCRIPTOR_ADDR_M 0x000fffff #define SLC_RX_LINK_DESCRIPTOR_ADDR_S 0 /* Details for TX_LINK register */ #define SLC_TX_LINK_PARK BIT(31) #define SLC_TX_LINK_RESTART BIT(30) #define SLC_TX_LINK_START BIT(29) #define SLC_TX_LINK_STOP BIT(28) #define SLC_TX_LINK_DESCRIPTOR_ADDR_M 0x000fffff #define SLC_TX_LINK_DESCRIPTOR_ADDR_S 0 /* Details for INTVEC_TO_HOST register */ #define SLC_INTVEC_TO_HOST_INTVEC_M 0x000000ff #define SLC_INTVEC_TO_HOST_INTVEC_S 0 /* Details for TOKEN0 register */ #define SLC_TOKEN0_M 0x00000fff #define SLC_TOKEN0_S 16 #define SLC_TOKEN0_LOCAL_INC_MORE BIT(14) #define SLC_TOKEN0_LOCAL_INC BIT(13) #define SLC_TOKEN0_LOCAL_WRITE BIT(12) #define SLC_TOKEN0_LOCAL_DATA_M 0x00000FFF #define SLC_TOKEN0_LOCAL_DATA_S 0 /* Details for TOKEN1 register */ #define SLC_TOKEN1_MASK 0x00000fff #define SLC_TOKEN1_S 16 #define SLC_TOKEN1_LOCAL_INC_MORE BIT(14) #define SLC_TOKEN1_LOCAL_INC BIT(13) #define SLC_TOKEN1_LOCAL_WRITE BIT(12) #define SLC_TOKEN1_LOCAL_DATA_M 0x00000fff #define SLC_TOKEN1_LOCAL_DATA_S 0 /* Details for BRIDGE_CONF register */ #define SLC_BRIDGE_CONF_TX_PUSH_IDLE_M 0x0000ffff #define SLC_BRIDGE_CONF_TX_PUSH_IDLE_S 16 #define SLC_BRIDGE_CONF_TX_DUMMY_MODE BIT(12) #define SLC_BRIDGE_CONF_FIFO_MAP_ENABLE_M 0x0000000f #define SLC_BRIDGE_CONF_FIFO_MAP_ENABLE_S 8 #define SLC_BRIDGE_CONF_TX_EOF_ENABLE_M 0x0000003f #define SLC_BRIDGE_CONF_TX_EOF_ENABLE_S 0 /* Details for AHB_TEST register */ #define SLC_AHB_TEST_ADDR_M 0x00000003 #define SLC_AHB_TEST_ADDR_S 4 #define SLC_AHB_TEST_MODE_M 0x00000007 #define SLC_AHB_TEST_MODE_S 0 /* Details for SDIO_STATUS register */ #define SLC_SDIO_STATUS_BUS_M 0x00000007 #define SLC_SDIO_STATUS_BUS_S 12 #define SLC_SDIO_STATUS_WAKEUP BIT(8) #define SLC_SDIO_STATUS_FUNC_M 0x0000000F #define SLC_SDIO_STATUS_FUNC_S 4 #define SLC_SDIO_STATUS_COMMAND_M 0x00000007 #define SLC_SDIO_STATUS_COMMAND_S 0 /* Details for RX_DESCRIPTOR_CONF register */ #define SLC_RX_DESCRIPTOR_CONF_RX_FILL_ENABLE BIT(20) #define SLC_RX_DESCRIPTOR_CONF_RX_EOF_MODE BIT(19) #define SLC_RX_DESCRIPTOR_CONF_RX_FILL_MODE BIT(18) #define SLC_RX_DESCRIPTOR_CONF_INFOR_NO_REPLACE BIT(17) #define SLC_RX_DESCRIPTOR_CONF_TOKEN_NO_REPLACE BIT(16) #define SLC_RX_DESCRIPTOR_CONF_POP_IDLE_COUNT_M 0x0000ffff #define SLC_RX_DESCRIPTOR_CONF_POP_IDLE_COUNT_S 0 struct SLCDescriptor { uint32_t flags; uint32_t buf_ptr; uint32_t next_link_ptr; }; #define SLC_DESCRIPTOR_FLAGS_BLOCKSIZE_M 0x00000fff #define SLC_DESCRIPTOR_FLAGS_BLOCKSIZE_S 0 #define SLC_DESCRIPTOR_FLAGS_DATA_LENGTH_M 0x00000fff #define SLC_DESCRIPTOR_FLAGS_DATA_LENGTH_S 12 #define SLC_DESCRIPTOR_FLAGS_SUB_SOF BIT(29) #define SLC_DESCRIPTOR_FLAGS_EOF BIT(30) #define SLC_DESCRIPTOR_FLAGS_OWNER BIT(31) #define SLC_DESCRIPTOR_FLAGS(blocksize,datalen,sub_sof,eof,owner) ( \ (((blocksize)&SLC_DESCRIPTOR_FLAGS_BLOCKSIZE_M)<