Lines Matching refs:context
169 .recv_reg_list = TAILQ_HEAD_INITIALIZER(context.recv_reg_list), \
173 static sdio_context_t context = CONTEXT_INIT_VAL; variable
208 context.config = (sdio_slave_config_t){}; in deinit_context()
210 if (context.events[i] != NULL) { in deinit_context()
211 vSemaphoreDelete(context.events[i]); in deinit_context()
212 context.events[i] = NULL; in deinit_context()
215 if (context.ret_queue != NULL) { in deinit_context()
216 vQueueDelete(context.ret_queue); in deinit_context()
217 context.ret_queue = NULL; in deinit_context()
219 if (context.remain_cnt != NULL) vSemaphoreDelete(context.remain_cnt); in deinit_context()
220 free(context.hal->send_desc_queue.data); in deinit_context()
221 context.hal->send_desc_queue.data = NULL; in deinit_context()
222 free(context.hal); in deinit_context()
223 context.hal = NULL; in deinit_context()
228 …SDIO_SLAVE_CHECK(*(uint32_t*)&context.config == 0, "sdio slave already initialized", ESP_ERR_INVAL… in init_context()
229 context = (sdio_context_t)CONTEXT_INIT_VAL; in init_context()
230 context.config = *config; in init_context()
233 …context.hal = (sdio_slave_context_t*)heap_caps_calloc(sizeof(sdio_slave_context_t), 1, MALLOC_CAP_… in init_context()
234 if (context.hal == NULL) goto no_mem; in init_context()
236 context.hal->sending_mode = config->sending_mode; in init_context()
237 context.hal->timing = config->timing; in init_context()
238 context.hal->send_queue_size = config->send_queue_size; in init_context()
239 context.hal->recv_buffer_size = config->recv_buffer_size; in init_context()
241 sdio_ringbuf_t *buf = &(context.hal->send_desc_queue); in init_context()
247 sdio_slave_hal_init(context.hal); in init_context()
251 context.recv_event = xSemaphoreCreateCounting(UINT32_MAX, 0); in init_context()
254 context.events[i] = xSemaphoreCreateBinary(); in init_context()
256 if (context.events[i] == NULL) { in init_context()
262 …context.remain_cnt = xSemaphoreCreateCounting(context.config.send_queue_size, context.config.send_… in init_context()
263 if (context.remain_cnt == NULL) goto no_mem; in init_context()
265 context.ret_queue = xQueueCreate(config->send_queue_size, sizeof(void*)); in init_context()
266 if (context.ret_queue == NULL) goto no_mem; in init_context()
313 sdio_slave_hal_hw_init(context.hal); in sdio_slave_hw_init()
351 context.intr_handle = intr_handle; in sdio_slave_initialize()
367 TAILQ_FOREACH_SAFE(desc, &context.recv_reg_list, te, temp_desc) { in sdio_slave_deinit()
368 TAILQ_REMOVE(&context.recv_reg_list, desc, te); in sdio_slave_deinit()
373 desc = (recv_desc_t*)sdio_slave_hal_recv_unload_desc(context.hal); in sdio_slave_deinit()
377 esp_err_t ret = esp_intr_free(context.intr_handle); in sdio_slave_deinit()
379 context.intr_handle = NULL; in sdio_slave_deinit()
387 sdio_slave_hal_hostint_clear(context.hal, &intr); in sdio_slave_start()
388 ret = sdio_slave_hal_send_start(context.hal); in sdio_slave_start()
392 sdio_slave_hal_recv_start(context.hal); in sdio_slave_start()
397 sdio_slave_hal_set_ioready(context.hal, true); in sdio_slave_start()
409 err = sdio_slave_hal_send_reset_counter(context.hal); in sdio_slave_reset()
420 sdio_slave_hal_recv_reset_counter(context.hal); in sdio_slave_reset()
428 sdio_slave_hal_set_ioready(context.hal, false); in sdio_slave_stop()
429 sdio_slave_hal_send_stop(context.hal); in sdio_slave_stop()
430 sdio_slave_hal_recv_stop(context.hal); in sdio_slave_stop()
446 sdio_slave_hal_slvint_fetch_clear(context.hal, &int_val); in sdio_intr_host()
450 if (context.config.event_cb != NULL) (*context.config.event_cb)(i); in sdio_intr_host()
451 xSemaphoreGiveFromISR(context.events[i], &yield); in sdio_intr_host()
460 return xSemaphoreTake(context.events[pos], wait); in sdio_slave_wait_int()
467 return sdio_slave_hal_host_get_reg(context.hal, pos); in sdio_slave_read_reg()
481 portENTER_CRITICAL(&context.reg_spinlock); in sdio_slave_write_reg()
482 sdio_slave_hal_host_set_reg(context.hal, pos, reg); in sdio_slave_write_reg()
483 portEXIT_CRITICAL(&context.reg_spinlock); in sdio_slave_write_reg()
490 sdio_slave_hal_hostint_get_ena(context.hal, &host_int); in sdio_slave_get_host_intena()
496 sdio_slave_hal_hostint_set_ena(context.hal, &mask); in sdio_slave_set_host_intena()
501 sdio_slave_hal_hostint_clear(context.hal, &mask); in sdio_slave_clear_host_int()
513 sdio_slave_hal_hostint_send(context.hal, &intr); in sdio_slave_send_host_int()
532 sdio_slave_hal_send_handle_isr_invoke(context.hal); in sdio_intr_send()
535 if (sdio_slave_hal_send_eof_happened(context.hal)) { in sdio_intr_send()
541 … err = sdio_slave_hal_send_get_next_finished_arg(context.hal, &finished_arg, &returned_cnt); in sdio_intr_send()
548 ret = xQueueSendFromISR(context.ret_queue, &finished_arg, &yield); in sdio_intr_send()
553 portBASE_TYPE ret = xSemaphoreGiveFromISR(context.remain_cnt, &yield); in sdio_intr_send()
558 sdio_slave_hal_send_new_packet_if_exist(context.hal); in sdio_intr_send()
569 portBASE_TYPE cnt_ret = xSemaphoreTake(context.remain_cnt, wait); in sdio_slave_send_queue()
572 portENTER_CRITICAL(&context.write_spinlock); in sdio_slave_send_queue()
573 esp_err_t ret = sdio_slave_hal_send_queue(context.hal, addr, len, arg); in sdio_slave_send_queue()
574 portEXIT_CRITICAL(&context.write_spinlock); in sdio_slave_send_queue()
583 portBASE_TYPE err = xQueueReceive(context.ret_queue, &arg, wait); in sdio_slave_send_get_finished()
611 err = sdio_slave_hal_send_flush_next_buffer(context.hal, &finished_arg, &return_cnt); in send_flush_data()
613 portBASE_TYPE ret = xQueueSend(context.ret_queue, &finished_arg, portMAX_DELAY); in send_flush_data()
616 portBASE_TYPE ret = xSemaphoreGive(context.remain_cnt); in send_flush_data()
641 portENTER_CRITICAL(&context.recv_spinlock); in critical_enter_recv()
646 portEXIT_CRITICAL(&context.recv_spinlock); in critical_exit_recv()
653 portBASE_TYPE ret = xSemaphoreTake(context.recv_event, 0); in recv_flush_data()
656 sdio_slave_hal_recv_flush_one_buffer(context.hal); in recv_flush_data()
665 while (sdio_slave_hal_recv_done(context.hal)) { in sdio_intr_recv()
666 portENTER_CRITICAL_ISR(&context.recv_spinlock); in sdio_intr_recv()
667 bool has_next_item = sdio_slave_hal_recv_has_next_item(context.hal); in sdio_intr_recv()
668 portEXIT_CRITICAL_ISR(&context.recv_spinlock); in sdio_intr_recv()
671 xSemaphoreGiveFromISR(context.recv_event, &yield); in sdio_intr_recv()
687 TAILQ_REMOVE(&context.recv_reg_list, desc, te); in sdio_slave_recv_load_buf()
689 sdio_slave_hal_load_buf(context.hal, &desc->hal_desc); in sdio_slave_recv_load_buf()
705 sdio_slave_hal_recv_init_desc(context.hal, &desc->hal_desc, start); in sdio_slave_recv_register_buf()
707 TAILQ_INSERT_TAIL(&context.recv_reg_list, desc, te); in sdio_slave_recv_register_buf()
715 portBASE_TYPE ret = xSemaphoreTake(context.recv_event, wait); in sdio_slave_recv()
720 recv_desc_t *desc = (recv_desc_t*)sdio_slave_hal_recv_unload_desc(context.hal); in sdio_slave_recv()
722 TAILQ_INSERT_TAIL(&context.recv_reg_list, desc, te); in sdio_slave_recv()
737 TAILQ_REMOVE(&context.recv_reg_list, desc, te); in sdio_slave_recv_unregister_buf()