#include "esp_err.h"
#include "esp_log.h"
#include "esp_pm.h"
-#include "esp_ipc.h"
#include "driver/periph_ctrl.h"
#include "soc/rtc.h"
#include "soc/soc_memory_layout.h"
#include "esp32/clk.h"
#include "esp_coexist_internal.h"
-
+#if !CONFIG_FREERTOS_UNICORE
+#include "esp_ipc.h"
+#endif
#if CONFIG_BT_ENABLED
{
esp_err_t err = ESP_OK;
+#if CONFIG_FREERTOS_UNICORE
+ cause_sw_intr((void *)intr_no);
+#else /* CONFIG_FREERTOS_UNICORE */
if (xPortGetCoreID() == core_id) {
cause_sw_intr((void *)intr_no);
} else {
err = esp_ipc_call(core_id, cause_sw_intr, (void *)intr_no);
}
-
+#endif /* !CONFIG_FREERTOS_UNICORE */
return err;
}
#include "soc/soc.h"
#include "soc/gpio_periph.h"
#include "esp_log.h"
+#if !CONFIG_FREERTOS_UNICORE
#include "esp_ipc.h"
+#endif
#define GPIO_CHECK(a, str, ret_val) \
if (!(a)) { \
isr_core_id = xPortGetCoreID();
}
portEXIT_CRITICAL(&gpio_spinlock);
- esp_err_t ret = esp_ipc_call_blocking(isr_core_id, gpio_isr_register_on_core_static, (void *)&p);
+ esp_err_t ret;
+#if CONFIG_FREERTOS_UNICORE
+ gpio_isr_register_on_core_static(&p);
+ ret = ESP_OK;
+#else /* CONFIG_FREERTOS_UNICORE */
+ ret = esp_ipc_call_blocking(isr_core_id, gpio_isr_register_on_core_static, (void *)&p);
+#endif /* !CONFIG_FREERTOS_UNICORE */
if(ret != ESP_OK || p.ret != ESP_OK) {
return ESP_ERR_NOT_FOUND;
}
#include "nvs_flash.h"
#include "esp_event.h"
#include "esp_spi_flash.h"
-#include "esp_ipc.h"
#include "esp_private/crosscore_int.h"
#include "esp_log.h"
#include "esp_vfs_dev.h"
#include "esp_log.h"
#include "esp_intr_alloc.h"
#include "esp_attr.h"
-#include "esp_ipc.h"
#include <limits.h>
#include <assert.h>
+#if !CONFIG_FREERTOS_UNICORE
+#include "esp_ipc.h"
+#endif
static const char* TAG = "intr_alloc";
return ESP_OK;
}
+#if !CONFIG_FREERTOS_UNICORE
static void esp_intr_free_cb(void *arg)
{
(void)esp_intr_free((intr_handle_t)arg);
}
+#endif /* !CONFIG_FREERTOS_UNICORE */
esp_err_t esp_intr_free(intr_handle_t handle)
{
bool free_shared_vector=false;
if (!handle) return ESP_ERR_INVALID_ARG;
+
+#if !CONFIG_FREERTOS_UNICORE
//Assign this routine to the core where this interrupt is allocated on.
if (handle->vector_desc->cpu!=xPortGetCoreID()) {
esp_err_t ret = esp_ipc_call_blocking(handle->vector_desc->cpu, &esp_intr_free_cb, (void *)handle);
return ret == ESP_OK ? ESP_OK : ESP_FAIL;
}
+#endif /* !CONFIG_FREERTOS_UNICORE */
+
portENTER_CRITICAL(&spinlock);
esp_intr_disable(handle);
if (handle->vector_desc->flags&VECDESC_FL_SHARED) {
#include "freertos/task.h"
#include "unity.h"
#include "esp_ipc.h"
+#include "sdkconfig.h"
+#if !CONFIG_FREERTOS_UNICORE
static void test_func_ipc_cb(void *arg)
{
vTaskDelay(50);
TEST_CASE("Test blocking IPC function call", "[ipc]")
{
int val = 0x5a5a;
-#ifdef CONFIG_FREERTOS_UNICORE
- esp_ipc_call_blocking(xPortGetCoreID(), test_func_ipc_cb, &val);
-#else
esp_ipc_call_blocking(!xPortGetCoreID(), test_func_ipc_cb, &val);
-#endif
TEST_ASSERT_EQUAL_HEX(val, 0xa5a5);
}
+#endif /* !CONFIG_FREERTOS_UNICORE */
set_property(TARGET ${COMPONENT_LIB} APPEND PROPERTY INTERFACE_LINK_LIBRARIES "-Wl,--gc-sections")
else()
# Regular app build
- idf_component_register(SRCS "src/dbg_stubs.c"
- "src/esp_err_to_name.c"
- "src/esp_timer.c"
- "src/ets_timer_legacy.c"
- "src/freertos_hooks.c"
- "src/ipc.c"
- "src/pm_locks.c"
- "src/stack_check.c"
+ set(srcs "src/dbg_stubs.c"
+ "src/esp_err_to_name.c"
+ "src/esp_timer.c"
+ "src/ets_timer_legacy.c"
+ "src/freertos_hooks.c"
+ "src/pm_locks.c"
+ "src/stack_check.c")
+
+ # IPC framework is not applicable if freertos unicore config is selected
+ if(NOT CONFIG_FREERTOS_UNICORE)
+ list(APPEND srcs "src/ipc.c")
+ endif()
+
+ idf_component_register(SRCS "${srcs}"
INCLUDE_DIRS include
PRIV_REQUIRES soc)
COMPONENT_ADD_INCLUDEDIRS := include
COMPONENT_SRCDIRS := src
+# IPC framework is not applicable if freertos unicore config is selected
+ifdef CONFIG_FREERTOS_UNICORE
+COMPONENT_OBJEXCLUDE := src/ipc.o
+endif
+
# disable stack protection in files which are involved in initialization of that feature
src/stack_check.o: CFLAGS := $(filter-out -fstack-protector%, $(CFLAGS))