Lines Matching refs:host

166     spi_host_t *host;  member
177 static void spi_bus_intr_enable(void *host);
178 static void spi_bus_intr_disable(void *host);
182 static inline bool is_valid_host(spi_host_device_t host) in is_valid_host() argument
186 return host >= SPI1_HOST && host <= SPI3_HOST; in is_valid_host()
188 return host == SPI2_HOST; in is_valid_host()
190 return host >= SPI2_HOST && host <= SPI3_HOST; in is_valid_host()
202 spi_host_t *host = ((spi_ipc_param_t *)args)->spi_host; in ipc_isr_reg_to_core() local
203 const spi_bus_attr_t* bus_attr = host->bus_attr; in ipc_isr_reg_to_core()
204 …c(spicommon_irqsource_for_host(host->id), bus_attr->bus_cfg.intr_flags | ESP_INTR_FLAG_INTRDISABLE… in ipc_isr_reg_to_core()
218 spi_host_t* host = heap_caps_malloc(sizeof(spi_host_t), MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT); in spi_master_init_driver() local
219 if (host == NULL) { in spi_master_init_driver()
224 *host = (spi_host_t) { in spi_master_init_driver()
238 .spi_host = host, in spi_master_init_driver()
245 …(host_id), bus_attr->bus_cfg.intr_flags | ESP_INTR_FLAG_INTRDISABLED, spi_intr, host, &host->intr); in spi_master_init_driver()
264 spi_hal_init(&host->hal, host_id, &hal_config); in spi_master_init_driver()
269 spi_bus_lock_set_bg_control(lock, spi_bus_intr_enable, spi_bus_intr_disable, host); in spi_master_init_driver()
270 spi_bus_register_destroy_func(host_id, spi_master_deinit_driver, host); in spi_master_init_driver()
273 bus_driver_ctx[host_id] = host; in spi_master_init_driver()
277 if (host) { in spi_master_init_driver()
278 spi_hal_deinit(&host->hal); in spi_master_init_driver()
279 if (host->intr) { in spi_master_init_driver()
280 esp_intr_free(host->intr); in spi_master_init_driver()
283 free(host); in spi_master_init_driver()
289 spi_host_t *host = (spi_host_t*)arg; in spi_master_deinit_driver() local
290 SPI_CHECK(host != NULL, "host_id not in use", ESP_ERR_INVALID_STATE); in spi_master_deinit_driver()
292 int host_id = host->id; in spi_master_deinit_driver()
297 SPI_CHECK(host->device[x] == NULL, "not all CSses freed", ESP_ERR_INVALID_STATE); in spi_master_deinit_driver()
300 spi_hal_deinit(&host->hal); in spi_master_deinit_driver()
302 if (host->intr) { in spi_master_deinit_driver()
303 esp_intr_free(host->intr); in spi_master_deinit_driver()
305 free(host); in spi_master_deinit_driver()
354 spi_host_t *host = bus_driver_ctx[host_id]; in spi_bus_add_device() local
355 const spi_bus_attr_t* bus_attr = host->bus_attr; in spi_bus_add_device()
450 host->device[freecs] = dev; in spi_bus_add_device()
452 dev->host= host; in spi_bus_add_device()
497 …SPI_CHECK(handle->host->cur_cs == DEV_NUM_MAX || handle->host->device[handle->host->cur_cs] != han… in spi_bus_remove_device()
517 assert(handle->host->device[handle->id] == handle); in spi_bus_remove_device()
518 handle->host->device[handle->id] = NULL; in spi_bus_remove_device()
544 spi_hal_context_t *hal = &dev->host->hal; in spi_setup_device()
553 static SPI_MASTER_ISR_ATTR spi_device_t *get_acquiring_dev(spi_host_t *host) in get_acquiring_dev() argument
555 spi_bus_lock_dev_handle_t dev_lock = spi_bus_lock_get_acquiring_dev(host->bus_attr->lock); in get_acquiring_dev()
558 return host->device[spi_bus_lock_get_dev_id(dev_lock)]; in get_acquiring_dev()
566 return get_acquiring_dev(dev->host) == dev && dev->host->polling; in spi_bus_device_is_polling()
574 static void SPI_MASTER_ISR_ATTR spi_bus_intr_enable(void *host) in spi_bus_intr_enable() argument
576 esp_intr_enable(((spi_host_t*)host)->intr); in spi_bus_intr_enable()
580 static void SPI_MASTER_ISR_ATTR spi_bus_intr_disable(void *host) in spi_bus_intr_disable() argument
582 esp_intr_disable(((spi_host_t*)host)->intr); in spi_bus_intr_disable()
590 spi_host_t *host = dev->host; in spi_new_trans() local
591 spi_hal_context_t *hal = &(host->hal); in spi_new_trans()
594 host->cur_cs = dev->id; in spi_new_trans()
603 hal_trans.rcv_buffer = (uint8_t*)host->cur_trans_buf.buffer_to_rcv; in spi_new_trans()
604 hal_trans.send_buffer = (uint8_t*)host->cur_trans_buf.buffer_to_send; in spi_new_trans()
647 static void SPI_MASTER_ISR_ATTR spi_post_trans(spi_host_t *host) in spi_post_trans() argument
649 spi_transaction_t *cur_trans = host->cur_trans_buf.trans; in spi_post_trans()
651 spi_hal_fetch_result(&host->hal); in spi_post_trans()
653 spi_device_t* dev = host->device[host->cur_cs]; in spi_post_trans()
656 host->cur_cs = DEV_NUM_MAX; in spi_post_trans()
663 spi_host_t *host = (spi_host_t *)arg; in spi_intr() local
664 const spi_bus_attr_t* bus_attr = host->bus_attr; in spi_intr()
666 assert(spi_hal_usr_is_done(&host->hal)); in spi_intr()
678 assert(host->cur_cs != DEV_NUM_MAX); in spi_intr()
680 const int cs = host->cur_cs; in spi_intr()
691 spi_post_trans(host); in spi_intr()
693 if (!(host->device[cs]->cfg.flags & SPI_DEVICE_NO_RETURN_RESULT)) { in spi_intr()
695 xQueueSendFromISR(host->device[cs]->ret_queue, &host->cur_trans_buf, &do_yield); in spi_intr()
706 assert(host->cur_cs == DEV_NUM_MAX); in spi_intr()
708 spi_bus_lock_handle_t lock = host->bus_attr->lock; in spi_intr()
735 device_to_send = host->device[spi_bus_lock_get_dev_id(desired_dev)]; in spi_intr()
736 … trans_found = xQueueReceiveFromISR(device_to_send->trans_queue, &host->cur_trans_buf, &do_yield); in spi_intr()
744 spi_trans_priv_t *const cur_trans_buf = &host->cur_trans_buf; in spi_intr()
764 spi_host_t *host = handle->host; in check_trans_valid() local
765 const spi_bus_attr_t* bus_attr = host->bus_attr; in check_trans_valid()
781 …SPI_CHECK(!(host->id == SPI3_HOST && trans_desc->flags & SPI_TRANS_MODE_OCT), "SPI3 does not suppo… in check_trans_valid()
890 spi_host_t *host = handle->host; in spi_device_queue_trans() local
896 if (host->device_acquiring_lock != handle && (trans_desc->flags & SPI_TRANS_CS_KEEP_ACTIVE)) { in spi_device_queue_trans()
901 ret = setup_priv_desc(trans_desc, &trans_buf, (host->bus_attr->dma_enabled)); in spi_device_queue_trans()
907 esp_pm_lock_acquire(host->bus_attr->pm_lock); in spi_device_queue_trans()
916 esp_pm_lock_release(host->bus_attr->pm_lock); in spi_device_queue_trans()
975 spi_host_t *const host = device->host; in spi_device_acquire_bus() local
983 host->device_acquiring_lock = device; in spi_device_acquire_bus()
990 esp_pm_lock_acquire(host->bus_attr->pm_lock); in spi_device_acquire_bus()
993 spi_setup_device(host->device[device->id]); in spi_device_acquire_bus()
997 if (host->bus_attr->dma_enabled) { in spi_device_acquire_bus()
999 spicommon_dmaworkaround_transfer_active(host->bus_attr->tx_dma_chan); in spi_device_acquire_bus()
1009 spi_host_t *host = dev->host; in spi_device_release_bus() local
1017 if (host->bus_attr->dma_enabled) { in spi_device_release_bus()
1019 spicommon_dmaworkaround_idle(host->bus_attr->tx_dma_chan); in spi_device_release_bus()
1027 esp_pm_lock_release(host->bus_attr->pm_lock); in spi_device_release_bus()
1031 host->device_acquiring_lock = NULL; in spi_device_release_bus()
1048 spi_host_t *host = handle->host; in spi_device_polling_start() local
1049 if (host->device_acquiring_lock != handle) { in spi_device_polling_start()
1061 ret = setup_priv_desc(trans_desc, &host->cur_trans_buf, (host->bus_attr->dma_enabled)); in spi_device_polling_start()
1065 host->polling = true; in spi_device_polling_start()
1068 spi_new_trans(handle, &host->cur_trans_buf); in spi_device_polling_start()
1076 spi_host_t *host = handle->host; in spi_device_polling_end() local
1078 assert(host->cur_cs == handle->id); in spi_device_polling_end()
1079 assert(handle == get_acquiring_dev(host)); in spi_device_polling_end()
1082 while (!spi_hal_usr_is_done(&host->hal)) { in spi_device_polling_end()
1091 spi_post_trans(host); in spi_device_polling_end()
1093 uninstall_priv_desc(&host->cur_trans_buf); in spi_device_polling_end()
1095 host->polling = false; in spi_device_polling_end()
1099 if (host->device_acquiring_lock != handle) { in spi_device_polling_end()
1100 assert(host->device_acquiring_lock == NULL); in spi_device_polling_end()
1123 spi_host_t *host = bus_driver_ctx[host_id]; in spi_bus_get_max_transaction_len() local
1124 if (host->bus_attr->dma_enabled) { in spi_bus_get_max_transaction_len()
1125 *max_bytes = MIN(host->bus_attr->max_transfer_sz, (SPI_LL_DMA_MAX_BIT_LEN / 8)); in spi_bus_get_max_transaction_len()
1127 *max_bytes = MIN(host->bus_attr->max_transfer_sz, (SPI_LL_CPU_MAX_BIT_LEN / 8)); in spi_bus_get_max_transaction_len()