Lines Matching refs:group
52 static gdma_pair_t *gdma_acquire_pair_handle(gdma_group_t *group, int pair_id);
53 static void gdma_release_group_handle(gdma_group_t *group);
73 gdma_group_t *group = NULL; in gdma_new_channel() local
93 group = pair->group; in gdma_new_channel()
94 portENTER_CRITICAL(&group->spinlock); in gdma_new_channel()
95 group->pair_ref_counts[pair->pair_id]++; // channel obtains a reference to pair in gdma_new_channel()
96 portEXIT_CRITICAL(&group->spinlock); in gdma_new_channel()
101 group = gdma_acquire_group_handle(i); in gdma_new_channel()
102 ESP_GOTO_ON_FALSE(group, ESP_ERR_NO_MEM, err, TAG, "no mem for group(%d)", i); in gdma_new_channel()
104 pair = gdma_acquire_pair_handle(group, j); in gdma_new_channel()
118 gdma_release_group_handle(group); in gdma_new_channel()
119 group = NULL; in gdma_new_channel()
123 assert(pair && group); // pair and group handle shouldn't be NULL in gdma_new_channel()
147 group->group_id, pair->pair_id, *ret_chan); in gdma_new_channel()
160 if (group) { in gdma_new_channel()
161 gdma_release_group_handle(group); in gdma_new_channel()
191 gdma_group_t *group = NULL; in gdma_connect() local
195 group = pair->group; in gdma_connect()
200 portENTER_CRITICAL(&group->spinlock); in gdma_connect()
201 if (group->tx_periph_in_use_mask & (1 << trig_periph.instance_id)) { in gdma_connect()
204 group->tx_periph_in_use_mask |= (1 << trig_periph.instance_id); in gdma_connect()
206 portEXIT_CRITICAL(&group->spinlock); in gdma_connect()
209 gdma_ll_tx_reset_channel(group->hal.dev, pair->pair_id); // reset channel in gdma_connect()
210 …gdma_ll_tx_connect_to_periph(group->hal.dev, pair->pair_id, trig_periph.periph, trig_periph.instan… in gdma_connect()
214 portENTER_CRITICAL(&group->spinlock); in gdma_connect()
215 if (group->rx_periph_in_use_mask & (1 << trig_periph.instance_id)) { in gdma_connect()
218 group->rx_periph_in_use_mask |= (1 << trig_periph.instance_id); in gdma_connect()
220 portEXIT_CRITICAL(&group->spinlock); in gdma_connect()
223 gdma_ll_rx_reset_channel(group->hal.dev, pair->pair_id); // reset channel in gdma_connect()
224 …gdma_ll_rx_connect_to_periph(group->hal.dev, pair->pair_id, trig_periph.periph, trig_periph.instan… in gdma_connect()
236 gdma_group_t *group = NULL; in gdma_disconnect() local
241 group = pair->group; in gdma_disconnect()
246 portENTER_CRITICAL(&group->spinlock); in gdma_disconnect()
247 group->tx_periph_in_use_mask &= ~(1 << save_periph_id); in gdma_disconnect()
248 portEXIT_CRITICAL(&group->spinlock); in gdma_disconnect()
250 gdma_ll_tx_disconnect_from_periph(group->hal.dev, pair->pair_id); in gdma_disconnect()
253 portENTER_CRITICAL(&group->spinlock); in gdma_disconnect()
254 group->rx_periph_in_use_mask &= ~(1 << save_periph_id); in gdma_disconnect()
255 portEXIT_CRITICAL(&group->spinlock); in gdma_disconnect()
257 gdma_ll_rx_disconnect_from_periph(group->hal.dev, pair->pair_id); in gdma_disconnect()
267 gdma_group_t *group = NULL; in gdma_get_free_m2m_trig_id_mask() local
272 group = pair->group; in gdma_get_free_m2m_trig_id_mask()
274 portENTER_CRITICAL(&group->spinlock); in gdma_get_free_m2m_trig_id_mask()
275 free_mask &= ~(group->tx_periph_in_use_mask); in gdma_get_free_m2m_trig_id_mask()
276 free_mask &= ~(group->rx_periph_in_use_mask); in gdma_get_free_m2m_trig_id_mask()
277 portEXIT_CRITICAL(&group->spinlock); in gdma_get_free_m2m_trig_id_mask()
287 gdma_group_t *group = NULL; in gdma_set_transfer_ability() local
291 group = pair->group; in gdma_set_transfer_ability()
323 gdma_ll_tx_enable_data_burst(group->hal.dev, pair->pair_id, true); in gdma_set_transfer_ability()
324 gdma_ll_tx_enable_descriptor_burst(group->hal.dev, pair->pair_id, true); in gdma_set_transfer_ability()
326 gdma_ll_tx_set_block_size_psram(group->hal.dev, pair->pair_id, block_size_index); in gdma_set_transfer_ability()
331 gdma_ll_rx_enable_data_burst(group->hal.dev, pair->pair_id, en_burst); in gdma_set_transfer_ability()
332 gdma_ll_rx_enable_descriptor_burst(group->hal.dev, pair->pair_id, en_burst); in gdma_set_transfer_ability()
334 gdma_ll_rx_set_block_size_psram(group->hal.dev, pair->pair_id, block_size_index); in gdma_set_transfer_ability()
341 …group->group_id, pair->pair_id, sram_alignment, psram_alignment, en_burst ? "enabled" : "disabled"… in gdma_set_transfer_ability()
350 gdma_group_t *group = NULL; in gdma_apply_strategy() local
353 group = pair->group; in gdma_apply_strategy()
356 gdma_ll_tx_enable_owner_check(group->hal.dev, pair->pair_id, config->owner_check); in gdma_apply_strategy()
357 gdma_ll_tx_enable_auto_write_back(group->hal.dev, pair->pair_id, config->auto_update_desc); in gdma_apply_strategy()
359 gdma_ll_rx_enable_owner_check(group->hal.dev, pair->pair_id, config->owner_check); in gdma_apply_strategy()
369 gdma_group_t *group = NULL; in gdma_set_priority() local
372 group = pair->group; in gdma_set_priority()
375 gdma_ll_tx_set_priority(group->hal.dev, pair->pair_id, priority); in gdma_set_priority()
377 gdma_ll_rx_set_priority(group->hal.dev, pair->pair_id, priority); in gdma_set_priority()
388 gdma_group_t *group = NULL; in gdma_register_tx_event_callbacks() local
391 group = pair->group; in gdma_register_tx_event_callbacks()
408 …gdma_ll_tx_enable_interrupt(group->hal.dev, pair->pair_id, GDMA_LL_EVENT_TX_EOF, cbs->on_trans_eof… in gdma_register_tx_event_callbacks()
424 gdma_group_t *group = NULL; in gdma_register_rx_event_callbacks() local
427 group = pair->group; in gdma_register_rx_event_callbacks()
444 …gdma_ll_rx_enable_interrupt(group->hal.dev, pair->pair_id, GDMA_LL_EVENT_RX_SUC_EOF, cbs->on_recv_… in gdma_register_rx_event_callbacks()
459 gdma_group_t *group = NULL; in gdma_start() local
463 group = pair->group; in gdma_start()
467 gdma_ll_rx_set_desc_addr(group->hal.dev, pair->pair_id, desc_base_addr); in gdma_start()
468 gdma_ll_rx_start(group->hal.dev, pair->pair_id); in gdma_start()
470 gdma_ll_tx_set_desc_addr(group->hal.dev, pair->pair_id, desc_base_addr); in gdma_start()
471 gdma_ll_tx_start(group->hal.dev, pair->pair_id); in gdma_start()
481 gdma_group_t *group = NULL; in gdma_stop() local
485 group = pair->group; in gdma_stop()
489 gdma_ll_rx_stop(group->hal.dev, pair->pair_id); in gdma_stop()
491 gdma_ll_tx_stop(group->hal.dev, pair->pair_id); in gdma_stop()
502 gdma_group_t *group = NULL; in gdma_append() local
505 group = pair->group; in gdma_append()
509 gdma_ll_rx_restart(group->hal.dev, pair->pair_id); in gdma_append()
511 gdma_ll_tx_restart(group->hal.dev, pair->pair_id); in gdma_append()
523 gdma_group_t *group = NULL; in gdma_reset() local
526 group = pair->group; in gdma_reset()
530 gdma_ll_rx_reset_channel(group->hal.dev, pair->pair_id); in gdma_reset()
532 gdma_ll_tx_reset_channel(group->hal.dev, pair->pair_id); in gdma_reset()
540 static void gdma_release_group_handle(gdma_group_t *group) in gdma_release_group_handle() argument
542 int group_id = group->group_id; in gdma_release_group_handle()
551 gdma_ll_enable_clock(group->hal.dev, false); in gdma_release_group_handle()
557 free(group); in gdma_release_group_handle()
565 gdma_group_t *group = NULL; in gdma_acquire_group_handle() local
573 group = pre_alloc_group; in gdma_acquire_group_handle()
574 s_platform.groups[group_id] = group; // register to platform in gdma_acquire_group_handle()
575 group->group_id = group_id; in gdma_acquire_group_handle()
576 group->spinlock = (portMUX_TYPE)portMUX_INITIALIZER_UNLOCKED; in gdma_acquire_group_handle()
578 gdma_hal_init(&group->hal, group_id); // initialize HAL context in gdma_acquire_group_handle()
579 gdma_ll_enable_clock(group->hal.dev, true); // enable gdma clock in gdma_acquire_group_handle()
581 group = s_platform.groups[group_id]; in gdma_acquire_group_handle()
588 ESP_LOGD(TAG, "new group (%d) at %p", group->group_id, group); in gdma_acquire_group_handle()
593 return group; in gdma_acquire_group_handle()
598 gdma_group_t *group = pair->group; in gdma_release_pair_handle() local
602 portENTER_CRITICAL(&group->spinlock); in gdma_release_pair_handle()
603 group->pair_ref_counts[pair_id]--; in gdma_release_pair_handle()
604 if (group->pair_ref_counts[pair_id] == 0) { in gdma_release_pair_handle()
605 assert(group->pairs[pair_id]); in gdma_release_pair_handle()
607 group->pairs[pair_id] = NULL; // deregister from pair in gdma_release_pair_handle()
609 portEXIT_CRITICAL(&group->spinlock); in gdma_release_pair_handle()
614 gdma_sleep_retention_deinit(group->group_id, pair_id); in gdma_release_pair_handle()
616 ESP_LOGD(TAG, "del pair (%d,%d)", group->group_id, pair_id); in gdma_release_pair_handle()
617 gdma_release_group_handle(group); in gdma_release_pair_handle()
621 static gdma_pair_t *gdma_acquire_pair_handle(gdma_group_t *group, int pair_id) in gdma_acquire_pair_handle() argument
629 portENTER_CRITICAL(&group->spinlock); in gdma_acquire_pair_handle()
630 if (!group->pairs[pair_id]) { in gdma_acquire_pair_handle()
633 group->pairs[pair_id] = pair; // register to group in gdma_acquire_pair_handle()
634 pair->group = group; in gdma_acquire_pair_handle()
638 pair = group->pairs[pair_id]; in gdma_acquire_pair_handle()
641 group->pair_ref_counts[pair_id]++; in gdma_acquire_pair_handle()
642 portEXIT_CRITICAL(&group->spinlock); in gdma_acquire_pair_handle()
646 s_platform.group_ref_counts[group->group_id]++; // pair obtains a reference to group in gdma_acquire_pair_handle()
650 gdma_sleep_retention_init(group->group_id, pair->pair_id); in gdma_acquire_pair_handle()
652 ESP_LOGD(TAG, "new pair (%d,%d) at %p", group->group_id, pair->pair_id, pair); in gdma_acquire_pair_handle()
663 gdma_group_t *group = pair->group; in gdma_del_tx_channel() local
665 int group_id = group->group_id; in gdma_del_tx_channel()
675 …gdma_ll_tx_enable_interrupt(group->hal.dev, pair_id, UINT32_MAX, false); // disable all interupt e… in gdma_del_tx_channel()
676 …gdma_ll_tx_clear_interrupt_status(group->hal.dev, pair_id, UINT32_MAX); // clear all pending even… in gdma_del_tx_channel()
681 gdma_ll_tx_set_priority(group->hal.dev, pair_id, 0); // reset the priority to 0 (lowest) in gdma_del_tx_channel()
693 gdma_group_t *group = pair->group; in gdma_del_rx_channel() local
695 int group_id = group->group_id; in gdma_del_rx_channel()
705 …gdma_ll_rx_enable_interrupt(group->hal.dev, pair_id, UINT32_MAX, false); // disable all interupt e… in gdma_del_rx_channel()
706 …gdma_ll_rx_clear_interrupt_status(group->hal.dev, pair_id, UINT32_MAX); // clear all pending even… in gdma_del_rx_channel()
711 gdma_ll_rx_set_priority(group->hal.dev, pair_id, 0); // reset the priority to 0 (lowest) in gdma_del_rx_channel()
723 gdma_group_t *group = pair->group; in gdma_default_rx_isr() local
726 uint32_t intr_status = gdma_ll_rx_get_interrupt_status(group->hal.dev, pair->pair_id); in gdma_default_rx_isr()
727 gdma_ll_rx_clear_interrupt_status(group->hal.dev, pair->pair_id, intr_status); in gdma_default_rx_isr()
731 uint32_t eof_addr = gdma_ll_rx_get_success_eof_desc_addr(group->hal.dev, pair->pair_id); in gdma_default_rx_isr()
750 gdma_group_t *group = pair->group; in gdma_default_tx_isr() local
753 uint32_t intr_status = gdma_ll_tx_get_interrupt_status(group->hal.dev, pair->pair_id); in gdma_default_tx_isr()
754 gdma_ll_tx_clear_interrupt_status(group->hal.dev, pair->pair_id, intr_status); in gdma_default_tx_isr()
758 uint32_t eof_addr = gdma_ll_tx_get_eof_desc_addr(group->hal.dev, pair->pair_id); in gdma_default_tx_isr()
777 gdma_group_t *group = pair->group; in gdma_install_rx_interrupt() local
784 …ret = esp_intr_alloc_intrstatus(gdma_periph_signals.groups[group->group_id].pairs[pair->pair_id].r… in gdma_install_rx_interrupt()
785 …(uint32_t)gdma_ll_rx_get_interrupt_status_reg(group->hal.dev, pair->pair_id), GDMA_LL_RX_EVENT_MAS… in gdma_install_rx_interrupt()
791 …gdma_ll_rx_enable_interrupt(group->hal.dev, pair->pair_id, UINT32_MAX, false); // disable all inte… in gdma_install_rx_interrupt()
792 …gdma_ll_rx_clear_interrupt_status(group->hal.dev, pair->pair_id, UINT32_MAX); // clear all pendin… in gdma_install_rx_interrupt()
794 … ESP_LOGD(TAG, "install interrupt service for rx channel (%d,%d)", group->group_id, pair->pair_id); in gdma_install_rx_interrupt()
804 gdma_group_t *group = pair->group; in gdma_install_tx_interrupt() local
811 …ret = esp_intr_alloc_intrstatus(gdma_periph_signals.groups[group->group_id].pairs[pair->pair_id].t… in gdma_install_tx_interrupt()
812 …(uint32_t)gdma_ll_tx_get_interrupt_status_reg(group->hal.dev, pair->pair_id), GDMA_LL_TX_EVENT_MAS… in gdma_install_tx_interrupt()
818 …gdma_ll_tx_enable_interrupt(group->hal.dev, pair->pair_id, UINT32_MAX, false); // disable all inte… in gdma_install_tx_interrupt()
819 …gdma_ll_tx_clear_interrupt_status(group->hal.dev, pair->pair_id, UINT32_MAX); // clear all pendin… in gdma_install_tx_interrupt()
821 … ESP_LOGD(TAG, "install interrupt service for tx channel (%d,%d)", group->group_id, pair->pair_id); in gdma_install_tx_interrupt()