Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 19 additions & 7 deletions arch/risc-v/src/esp32c3/esp_wifi_adapter.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
#include "esp_hr_timer.h"

#include "esp_log.h"
#include "esp_intr_alloc.h"
#include "esp_mac.h"
#include "esp_random.h"
#include "esp_private/wifi_os_adapter.h"
Expand Down Expand Up @@ -85,6 +86,12 @@ struct vector_desc_t
vector_desc_t *next;
};

/* From esp_hw_support/intr_alloc.c: returns a pointer to a HAL-owned
* vector descriptor for some intno and cpu.
*/

extern vector_desc_t *get_desc_for_int(int intno, int cpu);

/****************************************************************************
* Private Function Prototypes
****************************************************************************/
Expand Down Expand Up @@ -532,7 +539,9 @@ static void wifi_delete_queue_wrapper(void *queue)
* Name: set_intr_wrapper
*
* Description:
* Do nothing
* Route the Wi-Fi interrupt source and attach a handle that uses the HAL
* global vector descriptor list. Mark the CPU line as non-IRAM so
* esp_intr_noniram_disable() masks it while SPI flash holds the cache off.
*
* Input Parameters:
* cpu_no - The CPU which the interrupt number belongs.
Expand All @@ -550,6 +559,7 @@ static void set_intr_wrapper(int32_t cpu_no, uint32_t intr_source,
{
intr_handle_t handle;
int irq = ESP_SOURCE2IRQ(intr_source);
esp_err_t err;

wlinfo("cpu_no=%" PRId32 ", intr_source=%" PRIu32
", intr_num=%" PRIu32 ", intr_prio=%" PRId32 "\n",
Expand All @@ -566,22 +576,24 @@ static void set_intr_wrapper(int32_t cpu_no, uint32_t intr_source,
return;
}

handle->vector_desc = kmm_calloc(1, sizeof(vector_desc_t));
handle->vector_desc = get_desc_for_int(intr_num, cpu_no);
if (handle->vector_desc == NULL)
{
wlerr("Failed to kmm_calloc\n");
wlerr("get_desc_for_int failed\n");
kmm_free(handle);
return;
}

handle->vector_desc->intno = intr_num;
handle->vector_desc->cpu = cpu_no;
handle->vector_desc->source = intr_source;
handle->vector_desc->shared_vec_info = NULL;
handle->vector_desc->next = NULL;
handle->shared_vector_desc = NULL;

esp_set_handle(cpu_no, irq, handle);

err = esp_intr_set_in_iram(handle, false);
if (err != ESP_OK)
{
wlerr("esp_intr_set_in_iram failed: %d\n", err);
}
}

/****************************************************************************
Expand Down
25 changes: 18 additions & 7 deletions arch/risc-v/src/esp32c6/esp_wifi_adapter.c
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,12 @@ struct vector_desc_t
vector_desc_t *next;
};

/* From esp_hw_support/intr_alloc.c: returns a pointer to a HAL-owned
* vector descriptor for some intno and cpu.
*/

extern vector_desc_t *get_desc_for_int(int intno, int cpu);

/****************************************************************************
* Private Function Prototypes
****************************************************************************/
Expand Down Expand Up @@ -566,7 +572,9 @@ static void wifi_delete_queue_wrapper(void *queue)
* Name: set_intr_wrapper
*
* Description:
* Do nothing
* Route the Wi-Fi interrupt source and attach a handle that uses the HAL
* global vector descriptor list. Mark the CPU line as non-IRAM so
* esp_intr_noniram_disable() masks it while SPI flash holds the cache off.
*
* Input Parameters:
* cpu_no - The CPU which the interrupt number belongs.
Expand All @@ -584,6 +592,7 @@ static void set_intr_wrapper(int32_t cpu_no, uint32_t intr_source,
{
intr_handle_t handle;
int irq = ESP_SOURCE2IRQ(intr_source);
esp_err_t err;

wlinfo("cpu_no=%" PRId32 ", intr_source=%" PRIu32
", intr_num=%" PRIu32 ", intr_prio=%" PRId32 "\n",
Expand All @@ -600,22 +609,24 @@ static void set_intr_wrapper(int32_t cpu_no, uint32_t intr_source,
return;
}

handle->vector_desc = kmm_calloc(1, sizeof(vector_desc_t));
handle->vector_desc = get_desc_for_int(intr_num, cpu_no);
if (handle->vector_desc == NULL)
{
wlerr("Failed to kmm_calloc\n");
wlerr("get_desc_for_int failed\n");
kmm_free(handle);
return;
}

handle->vector_desc->intno = intr_num;
handle->vector_desc->cpu = cpu_no;
handle->vector_desc->source = intr_source;
handle->vector_desc->shared_vec_info = NULL;
handle->vector_desc->next = NULL;
handle->shared_vector_desc = NULL;

esp_set_handle(cpu_no, irq, handle);

err = esp_intr_set_in_iram(handle, false);
if (err != ESP_OK)
{
wlerr("esp_intr_set_in_iram failed: %d\n", err);
}
}

/****************************************************************************
Expand Down
20 changes: 19 additions & 1 deletion arch/xtensa/src/esp32/esp32_wifi_adapter.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
#include "esp32_wifi_adapter.h"
#include "esp_hr_timer.h"
#include "esp_irq.h"
#include "esp_intr_alloc.h"
#include "esp_cpu.h"
#include "espressif/esp_wireless.h"
#include "espressif/esp_wifi_utils.h"
Expand Down Expand Up @@ -1752,7 +1753,9 @@ static bool wifi_env_is_chip(void)
* Name: set_intr_wrapper
*
* Description:
* Do nothing
* Route the Wi-Fi interrupt source and attach a handle that uses the HAL
* global vector descriptor list. Mark the CPU line as non-IRAM so
* esp_intr_noniram_disable() masks it while SPI flash holds the cache off.
*
* Input Parameters:
* cpu_no - The CPU which the interrupt number belongs.
Expand All @@ -1770,6 +1773,7 @@ static void set_intr_wrapper(int32_t cpu_no, uint32_t intr_source,
{
intr_handle_t handle;
int irq = ESP_SOURCE2IRQ(intr_source);
esp_err_t err;

wlinfo("cpu_no=%" PRId32 ", intr_source=%" PRIu32
", intr_num=%" PRIu32 ", intr_prio=%" PRId32 "\n",
Expand All @@ -1785,11 +1789,25 @@ static void set_intr_wrapper(int32_t cpu_no, uint32_t intr_source,
}

handle->vector_desc = get_desc_for_int(intr_num, cpu_no);
if (handle->vector_desc == NULL)
{
wlerr("get_desc_for_int failed\n");
kmm_free(handle);
return;
}

handle->vector_desc->source = intr_source;
handle->shared_vector_desc = NULL;

/* Register the handle - it contains all needed information (cpuint, cpu) */

esp_set_handle(cpu_no, irq, handle);

err = esp_intr_set_in_iram(handle, false);
if (err != OK)
{
wlerr("esp_intr_set_in_iram failed: %d\n", err);
}
}

/****************************************************************************
Expand Down
26 changes: 19 additions & 7 deletions arch/xtensa/src/esp32s2/esp32s2_wifi_adapter.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
#include "xtensa.h"
#include "esp_attr.h"
#include "esp_irq.h"
#include "esp_intr_alloc.h"
#include "esp_cpu.h"
#include "hardware/esp32s2_system.h"
#include "soc/rtc_cntl_reg.h"
Expand Down Expand Up @@ -95,6 +96,12 @@ struct vector_desc_t
vector_desc_t *next;
};

/* From esp_hw_support/intr_alloc.c: returns a pointer to a HAL-owned
* vector descriptor for some intno and cpu.
*/

extern vector_desc_t *get_desc_for_int(int intno, int cpu);

/****************************************************************************
* Private Function Prototypes
****************************************************************************/
Expand Down Expand Up @@ -1604,7 +1611,9 @@ static bool wifi_env_is_chip(void)
* Name: set_intr_wrapper
*
* Description:
* Do nothing
* Route the Wi-Fi interrupt source and attach a handle that uses the HAL
* global vector descriptor list. Mark the CPU line as non-IRAM so
* esp_intr_noniram_disable() masks it while SPI flash holds the cache off.
*
* Input Parameters:
* cpu_no - The CPU which the interrupt number belongs.
Expand All @@ -1622,6 +1631,7 @@ static void set_intr_wrapper(int32_t cpu_no, uint32_t intr_source,
{
intr_handle_t handle;
int irq = ESP_SOURCE2IRQ(intr_source);
esp_err_t err;

wlinfo("cpu_no=%" PRId32 ", intr_source=%" PRIu32
", intr_num=%" PRIu32 ", intr_prio=%" PRId32 "\n",
Expand All @@ -1636,24 +1646,26 @@ static void set_intr_wrapper(int32_t cpu_no, uint32_t intr_source,
return;
}

handle->vector_desc = kmm_calloc(1, sizeof(vector_desc_t));
handle->vector_desc = get_desc_for_int(intr_num, cpu_no);
if (handle->vector_desc == NULL)
{
wlerr("Failed to kmm_calloc\n");
wlerr("get_desc_for_int failed\n");
kmm_free(handle);
return;
}

handle->vector_desc->intno = intr_num;
handle->vector_desc->cpu = cpu_no;
handle->vector_desc->source = intr_source;
handle->vector_desc->shared_vec_info = NULL;
handle->vector_desc->next = NULL;
handle->shared_vector_desc = NULL;

/* Register the handle - it contains all needed information (cpuint, cpu) */

esp_set_handle(cpu_no, irq, handle);

err = esp_intr_set_in_iram(handle, false);
if (err != OK)
{
wlerr("esp_intr_set_in_iram failed: %d\n", err);
}
}

/****************************************************************************
Expand Down
23 changes: 22 additions & 1 deletion arch/xtensa/src/esp32s3/esp32s3_wifi_adapter.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
#include "xtensa.h"
#include "esp_attr.h"
#include "esp_irq.h"
#include "esp_intr_alloc.h"
#include "esp_cpu.h"
#include "hardware/esp32s3_system.h"
#include "soc/rtc_cntl_reg.h"
Expand Down Expand Up @@ -267,6 +268,10 @@ static int coex_schm_flexible_period_set_wrapper(uint8_t period);
static uint8_t coex_schm_flexible_period_get_wrapper(void);
static void * coex_schm_get_phase_by_idx_wrapper(int phase_idx);

/* From esp_hw_support/intr_alloc.c: returns a pointer to a HAL-owned
* vector descriptor for some intno and cpu.
*/

extern vector_desc_t *get_desc_for_int(int intno, int cpu);

/****************************************************************************
Expand Down Expand Up @@ -1738,7 +1743,9 @@ static bool wifi_env_is_chip(void)
* Name: set_intr_wrapper
*
* Description:
* Do nothing
* Route the Wi-Fi interrupt source and attach a handle that uses the HAL
* global vector descriptor list. Mark the CPU line as non-IRAM so
* esp_intr_noniram_disable() masks it while SPI flash holds the cache off.
*
* Input Parameters:
* cpu_no - The CPU which the interrupt number belongs.
Expand All @@ -1756,6 +1763,7 @@ static void set_intr_wrapper(int32_t cpu_no, uint32_t intr_source,
{
intr_handle_t handle;
int irq = ESP_SOURCE2IRQ(intr_source);
esp_err_t err;

wlinfo("cpu_no=%" PRId32 ", intr_source=%" PRIu32
", intr_num=%" PRIu32 ", intr_prio=%" PRId32 "\n",
Expand All @@ -1771,12 +1779,25 @@ static void set_intr_wrapper(int32_t cpu_no, uint32_t intr_source,
}

handle->vector_desc = get_desc_for_int(intr_num, cpu_no);
if (handle->vector_desc == NULL)
{
wlerr("get_desc_for_int failed\n");
kmm_free(handle);
return;
}

handle->vector_desc->source = intr_source;
handle->shared_vector_desc = NULL;

/* Register the handle - it contains all needed information (cpuint, cpu) */

esp_set_handle(cpu_no, irq, handle);

err = esp_intr_set_in_iram(handle, false);
if (err != OK)
{
wlerr("esp_intr_set_in_iram failed: %d\n", err);
}
}

/****************************************************************************
Expand Down
Loading