Lines Matching refs:hal

46 static void s_spi_slave_hd_hal_dma_init_config(const spi_slave_hd_hal_context_t *hal)  in s_spi_slave_hd_hal_dma_init_config()  argument
48 spi_dma_ll_rx_enable_burst_data(hal->dma_in, hal->rx_dma_chan, 1); in s_spi_slave_hd_hal_dma_init_config()
49 spi_dma_ll_tx_enable_burst_data(hal->dma_out, hal->tx_dma_chan, 1); in s_spi_slave_hd_hal_dma_init_config()
50 spi_dma_ll_rx_enable_burst_desc(hal->dma_in, hal->rx_dma_chan, 1); in s_spi_slave_hd_hal_dma_init_config()
51 spi_dma_ll_tx_enable_burst_desc(hal->dma_out, hal->tx_dma_chan, 1); in s_spi_slave_hd_hal_dma_init_config()
52 spi_dma_ll_enable_out_auto_wrback(hal->dma_out, hal->tx_dma_chan, 1); in s_spi_slave_hd_hal_dma_init_config()
53 spi_dma_ll_set_out_eof_generation(hal->dma_out, hal->tx_dma_chan, 1); in s_spi_slave_hd_hal_dma_init_config()
56 void spi_slave_hd_hal_init(spi_slave_hd_hal_context_t *hal, const spi_slave_hd_hal_config_t *hal_co… in spi_slave_hd_hal_init() argument
59 hal->dev = hw; in spi_slave_hd_hal_init()
60 hal->dma_in = hal_config->dma_in; in spi_slave_hd_hal_init()
61 hal->dma_out = hal_config->dma_out; in spi_slave_hd_hal_init()
62 hal->dma_enabled = hal_config->dma_enabled; in spi_slave_hd_hal_init()
63 hal->tx_dma_chan = hal_config->tx_dma_chan; in spi_slave_hd_hal_init()
64 hal->rx_dma_chan = hal_config->rx_dma_chan; in spi_slave_hd_hal_init()
65 hal->append_mode = hal_config->append_mode; in spi_slave_hd_hal_init()
66 hal->rx_cur_desc = hal->dmadesc_rx; in spi_slave_hd_hal_init()
67 hal->tx_cur_desc = hal->dmadesc_tx; in spi_slave_hd_hal_init()
68 STAILQ_NEXT(&hal->tx_dummy_head.desc, qe) = &hal->dmadesc_tx->desc; in spi_slave_hd_hal_init()
69 hal->tx_dma_head = &hal->tx_dummy_head; in spi_slave_hd_hal_init()
70 STAILQ_NEXT(&hal->rx_dummy_head.desc, qe) = &hal->dmadesc_rx->desc; in spi_slave_hd_hal_init()
71 hal->rx_dma_head = &hal->rx_dummy_head; in spi_slave_hd_hal_init()
75 s_spi_slave_hd_hal_dma_init_config(hal); in spi_slave_hd_hal_init()
93 hal->intr_not_triggered |= SPI_EV_RECV; in spi_slave_hd_hal_init()
97 hal->intr_not_triggered |= SPI_EV_SEND; in spi_slave_hd_hal_init()
119 spi_ll_slave_set_seg_mode(hal->dev, true); in spi_slave_hd_hal_init()
122 uint32_t spi_salve_hd_hal_get_max_bus_size(spi_slave_hd_hal_context_t *hal) in spi_salve_hd_hal_get_max_bus_size() argument
124 return hal->dma_desc_num * LLDESC_MAX_NUM_PER_DESC; in spi_salve_hd_hal_get_max_bus_size()
127 uint32_t spi_slave_hd_hal_get_total_desc_size(spi_slave_hd_hal_context_t *hal, uint32_t bus_size) in spi_slave_hd_hal_get_total_desc_size() argument
134 hal->dma_desc_num = dma_desc_ct; in spi_slave_hd_hal_get_total_desc_size()
136 return hal->dma_desc_num * sizeof(spi_slave_hd_hal_desc_append_t); in spi_slave_hd_hal_get_total_desc_size()
139 void spi_slave_hd_hal_rxdma(spi_slave_hd_hal_context_t *hal, uint8_t *out_buf, size_t len) in spi_slave_hd_hal_rxdma() argument
141 lldesc_setup_link(&hal->dmadesc_rx->desc, out_buf, len, true); in spi_slave_hd_hal_rxdma()
143 spi_ll_dma_rx_fifo_reset(hal->dev); in spi_slave_hd_hal_rxdma()
144 spi_dma_ll_rx_reset(hal->dma_in, hal->rx_dma_chan); in spi_slave_hd_hal_rxdma()
145 spi_ll_slave_reset(hal->dev); in spi_slave_hd_hal_rxdma()
146 spi_ll_infifo_full_clr(hal->dev); in spi_slave_hd_hal_rxdma()
147 spi_ll_clear_intr(hal->dev, SPI_LL_INTR_CMD7); in spi_slave_hd_hal_rxdma()
149 spi_ll_dma_rx_enable(hal->dev, 1); in spi_slave_hd_hal_rxdma()
150 spi_dma_ll_rx_start(hal->dma_in, hal->rx_dma_chan, &hal->dmadesc_rx->desc); in spi_slave_hd_hal_rxdma()
153 void spi_slave_hd_hal_txdma(spi_slave_hd_hal_context_t *hal, uint8_t *data, size_t len) in spi_slave_hd_hal_txdma() argument
155 lldesc_setup_link(&hal->dmadesc_tx->desc, data, len, false); in spi_slave_hd_hal_txdma()
157 spi_ll_dma_tx_fifo_reset(hal->dev); in spi_slave_hd_hal_txdma()
158 spi_dma_ll_tx_reset(hal->dma_out, hal->tx_dma_chan); in spi_slave_hd_hal_txdma()
159 spi_ll_slave_reset(hal->dev); in spi_slave_hd_hal_txdma()
160 spi_ll_outfifo_empty_clr(hal->dev); in spi_slave_hd_hal_txdma()
161 spi_ll_clear_intr(hal->dev, SPI_LL_INTR_CMD8); in spi_slave_hd_hal_txdma()
163 spi_ll_dma_tx_enable(hal->dev, 1); in spi_slave_hd_hal_txdma()
164 spi_dma_ll_tx_start(hal->dma_out, hal->tx_dma_chan, &hal->dmadesc_tx->desc); in spi_slave_hd_hal_txdma()
167 static spi_ll_intr_t get_event_intr(spi_slave_hd_hal_context_t *hal, spi_event_t ev) in get_event_intr() argument
171 if ((ev & SPI_EV_SEND) && hal->append_mode) intr |= SPI_LL_INTR_OUT_EOF; in get_event_intr()
173 if ((ev & SPI_EV_SEND) && !hal->append_mode) intr |= SPI_LL_INTR_CMD8; in get_event_intr()
183 bool spi_slave_hd_hal_check_clear_event(spi_slave_hd_hal_context_t *hal, spi_event_t ev) in spi_slave_hd_hal_check_clear_event() argument
185 spi_ll_intr_t intr = get_event_intr(hal, ev); in spi_slave_hd_hal_check_clear_event()
186 if (spi_ll_get_intr(hal->dev, intr)) { in spi_slave_hd_hal_check_clear_event()
187 spi_ll_clear_intr(hal->dev, intr); in spi_slave_hd_hal_check_clear_event()
193 bool spi_slave_hd_hal_check_disable_event(spi_slave_hd_hal_context_t *hal, spi_event_t ev) in spi_slave_hd_hal_check_disable_event() argument
196 spi_ll_intr_t intr = get_event_intr(hal, ev); in spi_slave_hd_hal_check_disable_event()
199 uint32_t missing_intr = hal->intr_not_triggered & ev; in spi_slave_hd_hal_check_disable_event()
201 if ((missing_intr & SPI_EV_RECV) && spi_ll_get_intr(hal->dev, SPI_LL_INTR_CMD7)) { in spi_slave_hd_hal_check_disable_event()
202 hal->intr_not_triggered &= ~SPI_EV_RECV; in spi_slave_hd_hal_check_disable_event()
204 if ((missing_intr & SPI_EV_SEND) && spi_ll_get_intr(hal->dev, SPI_LL_INTR_CMD8)) { in spi_slave_hd_hal_check_disable_event()
205 hal->intr_not_triggered &= ~SPI_EV_SEND; in spi_slave_hd_hal_check_disable_event()
207 if (spi_ll_get_intr(hal->dev, SPI_LL_INTR_TRANS_DONE)) { in spi_slave_hd_hal_check_disable_event()
208 spi_ll_disable_intr(hal->dev, SPI_LL_INTR_TRANS_DONE); in spi_slave_hd_hal_check_disable_event()
212 if (spi_ll_get_intr(hal->dev, intr)) { in spi_slave_hd_hal_check_disable_event()
213 spi_ll_disable_intr(hal->dev, intr); in spi_slave_hd_hal_check_disable_event()
219 void spi_slave_hd_hal_enable_event_intr(spi_slave_hd_hal_context_t *hal, spi_event_t ev) in spi_slave_hd_hal_enable_event_intr() argument
221 spi_ll_intr_t intr = get_event_intr(hal, ev); in spi_slave_hd_hal_enable_event_intr()
222 spi_ll_enable_intr(hal->dev, intr); in spi_slave_hd_hal_enable_event_intr()
225 void spi_slave_hd_hal_invoke_event_intr(spi_slave_hd_hal_context_t *hal, spi_event_t ev) in spi_slave_hd_hal_invoke_event_intr() argument
227 spi_ll_intr_t intr = get_event_intr(hal, ev); in spi_slave_hd_hal_invoke_event_intr()
230 if (hal->intr_not_triggered & ev & (SPI_EV_RECV | SPI_EV_SEND)) { in spi_slave_hd_hal_invoke_event_intr()
234 spi_ll_enable_intr(hal->dev, intr); in spi_slave_hd_hal_invoke_event_intr()
237 void spi_slave_hd_hal_read_buffer(spi_slave_hd_hal_context_t *hal, int addr, uint8_t *out_data, siz… in spi_slave_hd_hal_read_buffer() argument
239 spi_ll_read_buffer_byte(hal->dev, addr, out_data, len); in spi_slave_hd_hal_read_buffer()
242 void spi_slave_hd_hal_write_buffer(spi_slave_hd_hal_context_t *hal, int addr, uint8_t *data, size_t… in spi_slave_hd_hal_write_buffer() argument
244 spi_ll_write_buffer_byte(hal->dev, addr, data, len); in spi_slave_hd_hal_write_buffer()
247 int spi_slave_hd_hal_get_last_addr(spi_slave_hd_hal_context_t *hal) in spi_slave_hd_hal_get_last_addr() argument
249 return spi_ll_slave_hd_get_last_addr(hal->dev); in spi_slave_hd_hal_get_last_addr()
252 int spi_slave_hd_hal_get_rxlen(spi_slave_hd_hal_context_t *hal) in spi_slave_hd_hal_get_rxlen() argument
255 return spi_ll_slave_get_rx_byte_len(hal->dev); in spi_slave_hd_hal_get_rxlen()
258 int spi_slave_hd_hal_rxdma_seg_get_len(spi_slave_hd_hal_context_t *hal) in spi_slave_hd_hal_rxdma_seg_get_len() argument
260 lldesc_t *desc = &hal->dmadesc_rx->desc; in spi_slave_hd_hal_rxdma_seg_get_len()
264 bool spi_slave_hd_hal_get_tx_finished_trans(spi_slave_hd_hal_context_t *hal, void **out_trans) in spi_slave_hd_hal_get_tx_finished_trans() argument
266 …if ((uint32_t)&hal->tx_dma_head->desc == spi_dma_ll_get_out_eof_desc_addr(hal->dma_out, hal->tx_dm… in spi_slave_hd_hal_get_tx_finished_trans()
270 hal->tx_dma_head = (spi_slave_hd_hal_desc_append_t *)STAILQ_NEXT(&hal->tx_dma_head->desc, qe); in spi_slave_hd_hal_get_tx_finished_trans()
271 *out_trans = hal->tx_dma_head->arg; in spi_slave_hd_hal_get_tx_finished_trans()
272 hal->tx_recycled_desc_cnt++; in spi_slave_hd_hal_get_tx_finished_trans()
277 bool spi_slave_hd_hal_get_rx_finished_trans(spi_slave_hd_hal_context_t *hal, void **out_trans, size… in spi_slave_hd_hal_get_rx_finished_trans() argument
279 …if ((uint32_t)&hal->rx_dma_head->desc == spi_dma_ll_get_in_suc_eof_desc_addr(hal->dma_in, hal->rx_… in spi_slave_hd_hal_get_rx_finished_trans()
283 hal->rx_dma_head = (spi_slave_hd_hal_desc_append_t *)STAILQ_NEXT(&hal->rx_dma_head->desc, qe); in spi_slave_hd_hal_get_rx_finished_trans()
284 *out_trans = hal->rx_dma_head->arg; in spi_slave_hd_hal_get_rx_finished_trans()
285 *out_len = hal->rx_dma_head->desc.length; in spi_slave_hd_hal_get_rx_finished_trans()
286 hal->rx_recycled_desc_cnt++; in spi_slave_hd_hal_get_rx_finished_trans()
322 esp_err_t spi_slave_hd_hal_txdma_append(spi_slave_hd_hal_context_t *hal, uint8_t *data, size_t len,… in spi_slave_hd_hal_txdma_append() argument
326 int not_recycled_desc_num = hal->tx_used_desc_cnt - hal->tx_recycled_desc_cnt; in spi_slave_hd_hal_txdma_append()
327 int available_desc_num = hal->dma_desc_num - not_recycled_desc_num; in spi_slave_hd_hal_txdma_append()
332 spi_slave_hd_hal_link_append_desc(hal->tx_cur_desc, data, len, false, arg); in spi_slave_hd_hal_txdma_append()
334 if (!hal->tx_dma_started) { in spi_slave_hd_hal_txdma_append()
335 hal->tx_dma_started = true; in spi_slave_hd_hal_txdma_append()
337 hal->tx_dma_tail = hal->tx_cur_desc; in spi_slave_hd_hal_txdma_append()
338 spi_ll_dma_tx_fifo_reset(hal->dma_out); in spi_slave_hd_hal_txdma_append()
339 spi_ll_outfifo_empty_clr(hal->dev); in spi_slave_hd_hal_txdma_append()
340 spi_dma_ll_tx_reset(hal->dma_out, hal->tx_dma_chan); in spi_slave_hd_hal_txdma_append()
341 spi_ll_dma_tx_enable(hal->dev, 1); in spi_slave_hd_hal_txdma_append()
342 spi_dma_ll_tx_start(hal->dma_out, hal->tx_dma_chan, &hal->tx_cur_desc->desc); in spi_slave_hd_hal_txdma_append()
345 STAILQ_NEXT(&hal->tx_dma_tail->desc, qe) = &hal->tx_cur_desc->desc; in spi_slave_hd_hal_txdma_append()
346 hal->tx_dma_tail = hal->tx_cur_desc; in spi_slave_hd_hal_txdma_append()
347 spi_dma_ll_tx_restart(hal->dma_out, hal->tx_dma_chan); in spi_slave_hd_hal_txdma_append()
352 hal->tx_used_desc_cnt++; in spi_slave_hd_hal_txdma_append()
353 hal->tx_cur_desc++; in spi_slave_hd_hal_txdma_append()
354 if (hal->tx_cur_desc == hal->dmadesc_tx + hal->dma_desc_num) { in spi_slave_hd_hal_txdma_append()
355 hal->tx_cur_desc = hal->dmadesc_tx; in spi_slave_hd_hal_txdma_append()
362 esp_err_t spi_slave_hd_hal_rxdma_append(spi_slave_hd_hal_context_t *hal, uint8_t *data, size_t len,… in spi_slave_hd_hal_rxdma_append() argument
366 int not_recycled_desc_num = hal->rx_used_desc_cnt - hal->rx_recycled_desc_cnt; in spi_slave_hd_hal_rxdma_append()
367 int available_desc_num = hal->dma_desc_num - not_recycled_desc_num; in spi_slave_hd_hal_rxdma_append()
372 spi_slave_hd_hal_link_append_desc(hal->rx_cur_desc, data, len, false, arg); in spi_slave_hd_hal_rxdma_append()
374 if (!hal->rx_dma_started) { in spi_slave_hd_hal_rxdma_append()
375 hal->rx_dma_started = true; in spi_slave_hd_hal_rxdma_append()
377 hal->rx_dma_tail = hal->rx_cur_desc; in spi_slave_hd_hal_rxdma_append()
378 spi_dma_ll_rx_reset(hal->dma_in, hal->rx_dma_chan); in spi_slave_hd_hal_rxdma_append()
379 spi_ll_dma_rx_fifo_reset(hal->dma_in); in spi_slave_hd_hal_rxdma_append()
380 spi_ll_infifo_full_clr(hal->dev); in spi_slave_hd_hal_rxdma_append()
381 spi_ll_dma_rx_enable(hal->dev, 1); in spi_slave_hd_hal_rxdma_append()
382 spi_dma_ll_rx_start(hal->dma_in, hal->rx_dma_chan, &hal->rx_cur_desc->desc); in spi_slave_hd_hal_rxdma_append()
385 STAILQ_NEXT(&hal->rx_dma_tail->desc, qe) = &hal->rx_cur_desc->desc; in spi_slave_hd_hal_rxdma_append()
386 hal->rx_dma_tail = hal->rx_cur_desc; in spi_slave_hd_hal_rxdma_append()
387 spi_dma_ll_rx_restart(hal->dma_in, hal->rx_dma_chan); in spi_slave_hd_hal_rxdma_append()
392 hal->rx_used_desc_cnt++; in spi_slave_hd_hal_rxdma_append()
393 hal->rx_cur_desc++; in spi_slave_hd_hal_rxdma_append()
394 if (hal->rx_cur_desc == hal->dmadesc_rx + hal->dma_desc_num) { in spi_slave_hd_hal_rxdma_append()
395 hal->rx_cur_desc = hal->dmadesc_rx; in spi_slave_hd_hal_rxdma_append()