39#ifndef CYW43_INCLUDED_CYW43_SPI_H
40#define CYW43_INCLUDED_CYW43_SPI_H
43#define TEST_PATTERN 0xFEEDBEADu
46#define SPI_BUS_CONTROL ((uint32_t)0x0000)
47#define SPI_RESPONSE_DELAY ((uint32_t)0x0001)
48#define SPI_STATUS_ENABLE ((uint32_t)0x0002)
49#define SPI_RESET_BP ((uint32_t)0x0003)
50#define SPI_INTERRUPT_REGISTER ((uint32_t)0x0004)
51#define SPI_INTERRUPT_ENABLE_REGISTER ((uint32_t)0x0006)
52#define SPI_STATUS_REGISTER ((uint32_t)0x0008)
53#define SPI_FUNCTION1_INFO ((uint32_t)0x000C)
54#define SPI_FUNCTION2_INFO ((uint32_t)0x000E)
55#define SPI_FUNCTION3_INFO ((uint32_t)0x0010)
56#define SPI_READ_TEST_REGISTER ((uint32_t)0x0014)
57#define SPI_RESP_DELAY_F0 ((uint32_t)0x001c)
58#define SPI_RESP_DELAY_F1 ((uint32_t)0x001d)
59#define SPI_RESP_DELAY_F2 ((uint32_t)0x001e)
60#define SPI_RESP_DELAY_F3 ((uint32_t)0x001f)
63#define SPI_FUNCTIONX_ENABLED (1 << 0)
64#define SPI_FUNCTIONX_READY (1 << 1)
67#define WORD_LENGTH_32 ((uint32_t)0x01)
68#define ENDIAN_BIG ((uint32_t)0x02)
69#define CLOCK_PHASE ((uint32_t)0x04)
70#define CLOCK_POLARITY ((uint32_t)0x08)
71#define HIGH_SPEED_MODE ((uint32_t)0x10)
72#define INTERRUPT_POLARITY_HIGH ((uint32_t)0x20)
73#define WAKE_UP ((uint32_t)0x80)
76#define STATUS_ENABLE ((uint32_t)0x01)
77#define INTR_WITH_STATUS ((uint32_t)0x02)
78#define RESP_DELAY_ALL ((uint32_t)0x04)
79#define DWORD_PKT_LEN_EN ((uint32_t)0x08)
80#define CMD_ERR_CHK_EN ((uint32_t)0x20)
81#define DATA_ERR_CHK_EN ((uint32_t)0x40)
84#define DATA_UNAVAILABLE ((uint32_t)0x0001)
85#define F2_F3_FIFO_RD_UNDERFLOW ((uint32_t)0x0002)
86#define F2_F3_FIFO_WR_OVERFLOW ((uint32_t)0x0004)
87#define COMMAND_ERROR ((uint32_t)0x0008)
88#define DATA_ERROR ((uint32_t)0x0010)
89#define F2_PACKET_AVAILABLE ((uint32_t)0x0020)
90#define F3_PACKET_AVAILABLE ((uint32_t)0x0040)
91#define F1_OVERFLOW ((uint32_t)0x0080)
92#define GSPI_PACKET_AVAILABLE ((uint32_t)0x0100)
93#define MISC_INTR1 ((uint32_t)0x0200)
94#define MISC_INTR2 ((uint32_t)0x0400)
95#define MISC_INTR3 ((uint32_t)0x0800)
96#define MISC_INTR4 ((uint32_t)0x1000)
97#define F1_INTR ((uint32_t)0x2000)
98#define F2_INTR ((uint32_t)0x4000)
99#define F3_INTR ((uint32_t)0x8000)
101#define BUS_OVERFLOW_UNDERFLOW (F1_OVERFLOW | F2_F3_FIFO_RD_UNDERFLOW | F2_F3_FIFO_WR_OVERFLOW)
104#define STATUS_DATA_NOT_AVAILABLE ((uint32_t)0x00000001)
105#define STATUS_UNDERFLOW ((uint32_t)0x00000002)
106#define STATUS_OVERFLOW ((uint32_t)0x00000004)
107#define STATUS_F2_INTR ((uint32_t)0x00000008)
108#define STATUS_F3_INTR ((uint32_t)0x00000010)
109#define STATUS_F2_RX_READY ((uint32_t)0x00000020)
110#define STATUS_F3_RX_READY ((uint32_t)0x00000040)
111#define STATUS_HOST_CMD_DATA_ERR ((uint32_t)0x00000080)
112#define STATUS_F2_PKT_AVAILABLE ((uint32_t)0x00000100)
113#define STATUS_F2_PKT_LEN_MASK ((uint32_t)0x000FFE00)
114#define STATUS_F2_PKT_LEN_SHIFT ((uint32_t)9)
115#define STATUS_F3_PKT_AVAILABLE ((uint32_t)0x00100000)
116#define STATUS_F3_PKT_LEN_MASK ((uint32_t)0xFFE00000)
117#define STATUS_F3_PKT_LEN_SHIFT ((uint32_t)21)
119#define SPI_FRAME_CONTROL ((uint32_t)0x1000D)
122uint32_t read_reg_u32_swap(cyw43_int_t *self, uint32_t fn, uint32_t reg);
123int write_reg_u32_swap(cyw43_int_t *self, uint32_t fn, uint32_t reg, uint32_t val);
126int cyw43_spi_init(cyw43_int_t *self);
127void cyw43_spi_deinit(cyw43_int_t *self);
128void cyw43_spi_gpio_setup(
void);
129void cyw43_spi_reset(
void);
130void cyw43_spi_set_polarity(cyw43_int_t *self,
int pol);
131int cyw43_spi_transfer(cyw43_int_t *self,
const uint8_t *tx,
size_t tx_length, uint8_t *rx,
size_t rx_length);