Commit Graph
100 Commits
Author SHA1 Message Date
Darian c60cbcee5c Merge branch 'refactor/freertos_move_idf_specific_functions' into 'master'
refactor(freertos/idf): Move IDF FreeRTOS API additions to header files

Closes IDF-7201, IDF-3873, and IDF-7907

See merge request espressif/esp-idf!25615
2023-09-06 01:13:13 +08:00
Darian Leung 035423eb37 refactor(freertos/idf): Move task creation "PinnedToCore" API to addition headers
This commit moves/merges the IDF FreeRTOS "PinnedToCore" task creation
functions from tasks.c/task.h to idf_additions.h/freertos_task_c_additions.h.

Also updated FreeRTOS Mock component to provide mocks for "idf_additions.h"
headers for our mock tests.
2023-09-05 16:20:59 +08:00
Darian Leung e612db7d32 refactor(freertos/idf): Move weak xTimerCreateTimerTask() to IDF additions header
A weak xTimerCreateTimerTask() was added to tasks.c as a workaround in ESP-IDF
in order to prevent timers.c from being linked when unused.

This commit moves that workaround to `freertos_tasks_c_additions.h`
2023-09-05 16:20:59 +08:00
Darian Leung a5f9a2505e refactor(freertos/idf): Remove application hook prototypes
The following application hook protoypes are defined in task.h from FreeRTOS
V10.4.0 onwwards and no longer need to be declared in tasks.c, thus have been
removed:

- vApplicationStackOverflowHook()
- vApplicationTickHook()
- vApplicationGetIdleTaskMemory()
2023-09-05 16:20:59 +08:00
Darian Leung 7b4dba4ffd refactor(freertos/idf): Move vTaskSetThreadLocalStoragePointerAndDelCallback()
This commit moves vTaskSetThreadLocalStoragePointerAndDelCallback() from
`tasks.c`/`task.h` to `freertos_tasks_c_additions.h`/`idf_additions.h`.
2023-09-05 16:20:59 +08:00
Darian Leung 5de6a9aff6 refactor(freertos/idf): Move compatibility functions
This function moves ulTaskNotifyTake()/xTaskNotifyWait() from IDF FreeRTOS
`tasks.c` to `freertos_compatibility.c`. These functions were kept for
pre-compiled library compatibilty. Move them reduces the kernel source code
difference when compared to upstream FreeRTOS.
2023-09-05 16:20:59 +08:00
Darian Leung 0db40f9e6c refactor(freertos/idf): Move IDF task utility functions to API addition headers
This commit combines various task utility API additions in IDF FreeRTOS and with
their Amazon SMP FreeRTOS addition counterparts. The folloiwng functions have
been moved to freertos_tasks_c_additions.h and idf_additions.h as these API
are considered public:

- xTaskGetCurrentTaskHandleForCPU()
- xTaskGetIdleTaskHandleForCPU()
- xTaskGetAffinity()
- pxTaskGetStackStart()

Also fixed in missing #if macros when vTaskCoreAffinityGet() is called in
Amazon SMP FreerTOS tests.
2023-09-05 16:20:59 +08:00
Darian Leung db9d9658f9 refactor(freertos/idf): Move xTaskIncrementTickOtherCores() to IDF additition headers
This commit moves xTaskIncrementTickOtherCores() to freertos_tasks_c_additions.h
and freertos_idf_additions_priv.h (as API is private). This reduces the code
differences cmpared to upstream FreeRTOS.
2023-09-05 16:20:59 +08:00
Darian Leung 8825c8dda9 refactor(freertos/idf): Move critical section API to IDF addition headers
- The following IDF API additions are moved to freertos_tasks_c_additions.h
(implementation) and freertos_idf_additions_priv.h (declaration) as APIs are
private. This reduces the source code difference from upstream.
    - prvENTER_CRITICAL_OR_SUSPEND_ALL()
    - prvEXIT_CRITICAL_OR_RESUME_ALL()
    - prvENTER_CRITICAL_OR_MASK_ISR()
    - prvEXIT_CRITICAL_OR_UNMASK_ISR()
    - vTaskTakeKernelLock()
    - vTaskReleaseKernelLock()
- Rename vTask[Take/Release]KernelLock() to prv[Take/Release]KernelLock() to
indicate that the this API is private.
2023-09-05 16:20:59 +08:00
Darian Leung 6c66018d5b refactor(freertos/smp): Move vTaskStartSchedulerOtherCores() to API additions to headers
- Move vTaskStartSchedulerOtherCores()
    - implementation to freertos_tasks_c_additions.h
    - declaration to freertos_idf_additions_priv.h as API is private
- Rename vTaskStartSchedulerOtherCores() -> prvStartSchedulerOtherCores() to
indicate that the function is private.
2023-09-05 16:19:42 +08:00
Darian Leung 5227616e57 refactor(freertos/idf): Implicitly include idf_additions.h from FreeRTOS.h
This commit adds an implicit inclusion of `idf_additions.h` to `FreeRTOS.h` in
preparation for moving some IDf specific API to `idf_additions.h`.

This implict inclusion allows existing code to be continue using these
relocated APIs without any changes in header inclusions.

Also removed "#pragma once" directive from "freertos_tasks_c_additions.h" since
that header is included as a source file.
2023-09-05 16:19:42 +08:00
Darian bd9d6b82ab Merge branch 'bugfix/freertos_private_critical_section_macro' into 'master'
fix(freertos): Fixed bug with prvENTER/EXIT_CRITICAL_OR_MASK_ISR() macro

See merge request espressif/esp-idf!25705
2023-09-04 14:18:11 +08:00
Darian Leung 75a3c99581 fix(freertos): Fixed bug with prvENTER/EXIT_CRITICAL_OR_MASK_ISR() macro
Fixed an undiscovered bug with prvENTER_CRITICAL_OR_MASK_ISR() and
prvEXIT_CRITICAL_OR_MASK_ISR() where the `uxInterruptStatus` argument was not
used.

However, all calls of this macro provide a local `uxSavedInterruptStatus`
variable, leading to this bug being hidden.
2023-09-02 02:27:09 +08:00
Darian 57456cc11f Merge branch 'refactor/freertos_format_addition_headers' into 'master'
refactor(freertos): Uncrustify IDF additions header/sources

See merge request espressif/esp-idf!25612
2023-08-31 09:50:24 +08:00
Darian Leung 0a15f28d17 refactor(freertos): Uncrustify and format IDF addition headers
- Uncrustified IDF addition related header/source files
- Reorganized functions into groups
- linker_common.lf updated to adhere to new function organization
2023-08-30 14:11:52 +08:00
Darian Leung a67e8c1972 refactor(freertos): Rename freertos_v8_compat.c to freertos_compatibility.c
Rename API compatibility file to be more general, and add a proper description.
2023-08-30 14:11:52 +08:00
Darian f1c71b75fa Merge branch 'refactor/freertos_task_snapshot_option' into 'master'
refactor(freertos): Remove option for Task Snapshot

See merge request espressif/esp-idf!25610
2023-08-29 14:19:55 +08:00
Darian Leung 6adcb64ad4 refactor(freertos): Uncrustify Task Snapshot header 2023-08-28 20:11:27 +08:00
Darian Leung 659ec67967 refactor(freertos): Remove option for Task Snapshot
Previously, Task Snapshot could be conditionally built based on the
CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT option. However, there is no overhead
with always enabling Task Snapshot functions, as the linker will remove any
functions if they are not called.

This commit...

- removes all ESP-IDF dependencies on the CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT
option so that Task Snapshot functions are always available.
- Makes CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT a hidden option to maintain
compatibility with user code.
- adds documentation regarding Task Snapshot.
2023-08-28 20:11:27 +08:00
Darian ede131ce73 Merge branch 'refactor/freertos_tslfcb_and_coproc_cleanup' into 'master'
refactor(freertos): Remove portCLEAN_UP_COPROC() and TLSP deletion callback kernel changes from IDF FreeRTOS

See merge request espressif/esp-idf!25481
2023-08-25 15:34:40 +08:00
Darian Leung 57eb41ce83 refactor(freertos): Call TLSP deletion callback from portCLEAN_UP_TCB()
Previously, TLSP deletion callbacks were...

- Stored in a seprate TCB member "pvThreadLocalStoragePointersDelCallback"
- Called separately via multipole prvDeleteTLS() insertions in tasks.c

This commit refactors how TLSP deletion callbacks are stored and called:

- TLSP deletion callbacks are now stored in "pvThreadLocalStoragePointers"
directly. configNUM_THREAD_LOCAL_STORAGE_POINTERS is doubled in size so that
the deletion callbacks are stored in the latter half of the array

- The callbacks are now called via "portCLEAN_UP_TCB()". As such, the
prvDeleteTLS() additions are no longer needed and the function can be removed

- Removed some legacy TLSP tests using the old method of storing the callback
pointers.

This commit reduces the source code diff between IDF FreeRTOS and upstream
vanilla FreeRTOS, in preparation for v10.5.1 upgrade.
2023-08-24 19:32:06 +08:00
Darian Leung 5f2443b7d1 refactor(freertos): Remove portCLEAN_UP_COPROC()
portCLEAN_UP_COPROC() was an IDF specific addition to FreeRTOS, where the
macro was called from prvDeleteTCB() to clean up the coprocessor context of a
deleted task.

This commit removes portCLEAN_UP_COPROC(). The coprocessor cleanup routine
(i.e., vPortCleanUpCoprocArea()) is now called via portCLEAN_UP_TCB()->
vPortTCBPreDeleteHook().

This removes a minor code difference between IDF FreeRTOS and upstream.
2023-08-24 19:32:06 +08:00
Darian 4962bb51dc Merge branch 'change/freertos_clean_up_tcb_macro' into 'master'
change(freertos): Deprecate usage of vPortCleanUpTCB() by applications

Closes IDF-7256

See merge request espressif/esp-idf!25480
2023-08-24 01:46:20 +08:00
Darian Leung 39cf3638ae change(freertos): Deprecate usage of vPortCleanUpTCB() by applications
Previously, if CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP was enabled, users
would provide a definition for a vPortCleanUpTCB() hook function that is called
right before a task's memory is freed in prvDeleteTCB(). However,
vPortCleanUpTCB() will be reclaimed by ESP-IDF for internal use in v6.0.

This commit introduces the following changes...

Introduced a new CONFIG_FREERTOS_TASK_PRE_DELETION_HOOK option:

- Provides the same pre-deletion hook functionality. But users now define
vTaskPreDeletionHook() instead.
- CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP still exists, but is marked as
deprecated. This is to maintain compatibility with existing applications
that already define vPortCleanUpTCB().
- Removed redundant --wl --wrap workaround with vPortCleanUpTCB()
- Added todo notes to remove support for user defined vPortCleanUpTCB()
completely in v6.0.
- Updated test cases to use new CONFIG_FREERTOS_TASK_PRE_DELETION_HOOK option

Freed up portCLEAN_UP_TCB() to call a new internal vPortTCBPreDeleteHook():

- vPortTCBPreDeleteHook() now replaces the previous "wrapped" implementation
of vPortCleanUpTCB().
- vPortTCBPreDeleteHook() is an internal task pre-delete hook for IDF FreeRTOS
ports to inject some pre-deletion operations.
- Internal pre-delete hook now invokes user provided vTaskPreDeletionHook()
if enabled.
- Relocated vPortTCBPreDeleteHook() to correct section in port.c
2023-08-23 17:50:08 +08:00
Darian c1cbd9a788 Merge branch 'bugfix/freertos_event_list_removal' into 'master'
FreeRTOS: Fix and optimize event list removal functions

Closes IDFGH-10652

See merge request espressif/esp-idf!25157
2023-08-16 12:22:45 +08:00
Darian Leung 1620d97299 change(freertos): Optimized xTaskRemoveFromEventList()
This commit optimizes xTaskRemoveFromEventList() by removing the
listLIST_IS_EMPTY() check from single core builds. The scenario of the event
list being empty when the function is called can only occur on multi-core
builds.
2023-08-09 16:43:52 +08:00
Darian Leung 5947314431 fix(freertos): Fix vTaskRemoveFromUnorderedEventList()
This commit fixes and optimizes vTaskRemoveFromUnorderedEventList() in the
following ways:

- Fixed bug in single core builds where the unblocked task would be placed on
xPendingReadyList.
    - If an ISR occurs while accessing xPendingReadyList, and the ISR also
      accesses the xPendingReadyList, xPendingReadyList would be corrupted.
    - In single core builds, this function is only called from event groups with
      the scheduler suspended. Thus the function should have exclusive access to
      pxReadyTasksLists instead of xPendingReadyList.
    - The function's single core logic has now been updated to match upstream
      behavior, by always placing the unblocked task on pxReadyTasksLists.

- Optimized the function for single core builds by removing the
taskCAN_BE_SCHEDULED() check.
    - In single core builds, given that the function is always called with the
      scheduler suspended
    - Thus, the taskCAN_BE_SCHEDULED (and the subsequent routine to place the
      unblocked task on the xPendingReadyList) is not necessary for single core
      builds.
    - The function now matches upstream behavior in single core builds.

Closes https://github.com/espressif/esp-idf/issues/11883
2023-08-09 16:43:52 +08:00
Darian Leung fdcab76128 fix(freertos): taskCAN_BE_SCHEDULED macro parenthesis
This commit adds missing parenthesis around the taskCAN_BE_SCHEDULED macro so
that it can properly used with a negation operator.
2023-08-09 15:54:14 +08:00
Darian Leung 9ed58bf564 feat(driver): updated drivers to use CreateWithCaps() API
This commit simplifies various drivers by using the ...CreateWithCaps() API
when creating driver objects in internal RAM.
2023-08-08 04:26:42 +00:00
Darian 84eedefca2 Merge branch 'refactor/freertos_port_types_usage' into 'master'
FreeRTOS: Remove usage of portXXX_TYPE

See merge request espressif/esp-idf!25107
2023-08-01 19:57:32 +08:00
Darian Leung 6fc935e584 refactor(freertos): Refactor usage of portBASE_TYPE to BaseType_t
portBASE_TYPE is an internal macro defined by the porting layer. This commit
changes all references to BaseType_t which is the official type exposed by
FreeRTOS.
2023-07-31 17:10:34 +02:00
Darian Leung 1e51387222 refactor(freertos): Refactor usage of portSTACK_TYPE to StackType_t
portSTACK_TYPE is an internal macro defined by the porting layer. This commit
changes all references to StackType_t which is the official type exposed by
FreeRTOS.
2023-07-31 16:59:41 +02:00
Darian 2032c9029f Merge branch 'bugfix/freertos_1051_remove_croutine' into 'master'
FreeRTOS: Remove croutine.h from v10.5.1

See merge request espressif/esp-idf!24911
2023-07-24 10:35:20 +08:00
Darian Leung 0a77949477 fix(freertos): Removed croutine.h from v10.5.1
Remove croutine.h as is not supported in ESP-IDF
2023-07-19 23:09:19 +03:00
Darian 4fc2e5cb95 Merge branch 'feature/usb_host_restrict_ahb_errata_workaround_to_esp32s2_eco0' into 'master'
USB Host: Restrict ESP32-S2 AHB errata workaround to only ECO0 chips

Closes IDF-3328

See merge request espressif/esp-idf!23873
2023-07-15 19:01:03 +08:00
Darian Leung 8450f3119e soc: Move revision MAX/MIN static assert to esp_hw_support
Previously, "soc/chip_revision.h" contained a static assert to check that the
CONFIG_ESP_REV_MIN_FULL <= CONFIG_ESP_REV_MAX_FULL. There are two issues with
this assert:

- Contained in a header file, so it is only compiled if the "chip_revision.h"
is included somewhere
- CONFIG_ESP_REV_MIN_FULL and CONFIG_ESP_REV_MAX_FULL are defined in
"esp_hw_support", which is a G0 component. This creates a reverse dependency
of G0 on G1.

This commit moves the static assert "revision.c" in "esp_hw_support".
2023-07-13 12:37:35 +02:00
Darian Leung 7d386f68df usb_host: Restrict ESP32-S2 AHB errata workaround to only ECO0 chips 2023-07-13 12:37:35 +02:00
Darian Leung 4a15db126a fix(esp_ringbuf): Fix "USE_AFTER_FREE" coverity issue
Fix false positive in coverity where it thinks memory buffers are freed for
statically created ring buffers, leading to a "USE_AFTER_FREE" warning in
vRingbufferDeleteWithCaps().
2023-07-04 21:53:46 +01:00
Darian 9f5271031d Merge branch 'feature/ringbuf_add_create_with_caps' into 'master'
esp_ringbuf: Add xRingbufferCreateWithCaps()

See merge request espressif/esp-idf!24377
2023-06-27 16:40:33 +08:00
Darian 8c8b28c510 Merge branch 'contrib/github_pr_11640' into 'master'
Docs: Fix typos and formatting in wifi.rst (GitHub PR)

Closes IDFGH-10383

See merge request espressif/esp-idf!24379
2023-06-26 18:45:48 +08:00
Darian Leung 1ebec10d48 wifi: Fix typos and formatting issues with wifi.rst
- Used code-blocks for correct highlighting
- Use inline literals for macros
- Fixed some typos
2023-06-26 16:29:09 +08:00
Darian 464052aa7a Merge branch 'bugfix/twai_install_returns_error_on_intr_alloc_fail' into 'master'
TWAI: twai_driver_install() returns error on interrupt allocation failure (GitHub PR)

Closes IDFGH-10231

See merge request espressif/esp-idf!24364
2023-06-26 15:13:44 +08:00
Darian Leung 7d983fe5a3 esp_ringbuf: Add xRingbufferCreateWithCaps()
This commit adds APIS to create a ring buffer with specific memory caps. The
following APIs have been added:

- xRingbufferGetStaticBuffer()
- xRingbufferCreateWithCaps()
- vRingbufferDeleteWithCaps()
2023-06-26 15:05:29 +08:00
Darian 0e1bbb0138 Merge branch 'bugfix/ringbuf_static_object_size' into 'master'
Ringbuf: Fix ordering of StaticRingbuffer_t

Closes IDFGH-10479

See merge request espressif/esp-idf!24371
2023-06-25 19:28:53 +08:00
Darian Leung b104b52b0e ringbuf: Fix ordering of StaticRingbuffer_t
When building on linux/host compilers (e.g., GCC), the compiler may add padding
depending on the size and order of the member types.

This commit fixes the ordering or the StaticRingbuffer_t such that it matches
the internal Ringbuffer_t. The "_Static_assert" is always enabled for all
compilers.

Closes https://github.com/espressif/esp-idf/issues/11726
2023-06-25 15:30:19 +08:00
Darian 3d35fbe211 Merge branch 'bugfix/usb_hcd_interrupt_alloc_error_return' into 'master'
USB Host: Fix coverity issues with hcd_install()

Closes IDF-7442

See merge request espressif/esp-idf!24360
2023-06-24 03:49:01 +08:00
Darian Leung a1ed398481 usb_host: Fix coverity issues with hcd_install()
- Use single "err_ret" variable for returning errors
- Simplify bail out procedure by using more labels
2023-06-21 17:50:20 +08:00
Darian 94ebc9ba4e Merge branch 'refactor/usb_host_usbh_interface' into 'master'
USB Host:  Refactor USBH interface

See merge request espressif/esp-idf!23330
2023-05-30 01:34:16 +08:00
Darian Leung cbed197e10 usb_host: Run formatting script 2023-05-29 17:30:41 +08:00
Darian Leung 1ffbbf5aef usb_host: Fix spelling errors 2023-05-29 17:30:41 +08:00
Darian Leung bab1c61a4c usb_host: Refactor USBH and USB Host Library calls to HCD
This commit refactors the USBH and the USB Host Library in the following ways:

- USBH now presents an abstraction of an endpoint (via usbh_ep_handle_t)
    - Added separate functions to enqueue/dequeue URBs to a particular endpoint
    - USB Host Library no longer calls HCD API directly. Calls USBH endpoint API
      instead.
- Renamed "notif_cb" to "proc_req_cb" (Processing Request Callback)
    - This is to avoid confusion with FreerTOS task notifications and Host
      Library client event notifications.
    - The processing functions of each layer (i.e., "xxx_process()") request
      calls via the "proc_req_cb"
    - The main handling function (i.e., usb_host_lib_handle_events()) is
      responsible for calling the required "xxx_process()" of each layer
2023-05-29 17:30:41 +08:00
Darian 6281606986 Merge branch 'feature/freertos_add_v10.5.1_files' into 'master'
FreeRTOS: Add v10.5.1 upstream files

See merge request espressif/esp-idf!23502
2023-05-11 16:14:50 +08:00
Darian Leung d044e63b39 freertos(IDF): Update kernel version tag of V10.5.1 source files
This commit updates the kernel version tags of all V10.5.1 source files to
indicate that the source files are modified.
2023-05-10 16:58:57 +08:00
Darian Leung f76194add9 freertos(IDF): Add hidden build option for V10.5.1 kernel
This commit adds a "CONFIG_FREERTOS_USE_KERNEL_10_5_1" hidden option to enable
building of the v10.5.1 kernel for development/testing purposes. Currently
enabling this option will just cause CMake to error out.

Also added a markdown file to record the code changes made to the V10.5.1 source
when porting over SMP behavior.
2023-05-10 16:53:00 +08:00
Darian Leung 74f37f50ec freertos(IDF): Add upstream V10.5.1 files
This commit adds the source files for the FreeRTOS Kernel V10.5.1 in
preparation for upgrading ESP-IDF FreeRTOS Kernel version (files copied from
https://github.com/FreeRTOS/FreeRTOS-Kernel/tree/V10.5.1)

The following modifications were made to the files when copying

- Added "SPDX-FileCopyrightText" and "SPDX-FileContributor" tags to all files
  to pass ESP-IDF pre-commit checks.
- Left out some files unnecessary to ESP-IDF (e.g., URLs, "History.txt", and
"portable" folder).
2023-05-10 16:52:22 +08:00
Darian e1dba0fa9e Merge branch 'refactor/freertos_component_structure' into 'master'
FreeRTOS: Refactor copmonent structure

See merge request espressif/esp-idf!23367
2023-05-08 21:18:37 +08:00
Darian Leung 66499f17a5 freertos: Refactor component structure
This commit refactors the "freertos" component's structure as follows:

- "FreeRTOSConfig.h" related files moved to "./config" directory
- Refactored CMakeLists.txt file in preparation for v10.5.1 upgrade
    - Grouped list appends based on component organization
    - Removed some unecessarily public "include_dirs"
- Removed FreeRTOS-openocd.c
    - uxTopUsedPriority has been added back to tasks.c since v10.4.2
    - Thus the workaround in FreeRTOS-openocd.c is no longer needed and can
      be removed.
2023-05-08 18:40:03 +08:00
Darian 15badb778f Merge branch 'refactor/freertos_xPortSysTickHandler' into 'master'
FreeRTOS: Refactor port_systick

See merge request espressif/esp-idf!23406
2023-04-29 01:08:42 +08:00
Darian Leung 76d4c9f592 freertos: Refactor port_systick
This commit refactors port_systick.c so that all ports (RISC-V vs Xtensa) of
all FreeRTOS implementations (IDF vs Amazon SMP FreeRTOS) use the same set of
tick interrupt functions. Thus, these funcitons are now common:

- vPortSetupTimer() to setup the tick interrupt's timer
- xPortSysTickHandler() that is called on each tick interrupt
2023-04-28 23:03:00 +08:00
Darian Leung cf595293af freertos: Move port_systick to common directory
This commit moves port_systick to a directory that ia accessible to both
IDF FreeRTOS and Amazon SMP FreeRTOS.
2023-04-28 23:03:00 +08:00
Darian 1a5249d7e7 Merge branch 'bugfix/ana_cmpr_negative_enum' into 'master'
driver: Fix ana_cmpr negative enum comparison and bad test

See merge request espressif/esp-idf!23508
2023-04-28 20:05:53 +08:00
Darian Leung 03ce2fbaf0 driver: Fix ana_cmpr negative enum comparison
The C17 standard (sec 6.7.2.2) indicates that the underlying type of an enum is
implementation defined (i.e., can be signed or unsigned). Thus, comparing
"-1 >= some_enum" where "some_enum" is always 0 or largert can return true if
the compiler uses unsigned for enums.

This commit fixes the following issues with ana_cmpr:

- Fixed incorrect comparison in ana_cmpr_del_unit() that relied on enums being
signed, thus would always return true.
- Fixed incorrect expected argument in the "ana_cmpr_unit_install_uninstall"
test. This was not picked up due to the incorrect enum comparison above.
2023-04-28 14:52:50 +08:00
Darian 2fdba8ec19 Merge branch 'feature/freertos_add_create_task_with_caps' into 'master'
FreeRTOS: Add xTaskCreateWithCaps()

Closes IDFGH-9922

See merge request espressif/esp-idf!23191
2023-04-21 22:33:03 +08:00
Darian Leung 948010dc0b freertos: Add task creation with caps functions
This commit adds the corresponding CreateWithCaps functions for tasks:

- xTaskCreatePinnedToCoreWithCaps()
- xTaskCreateWithCaps()
- vTaskDeleteWithCaps()

Documentation and migraiton guide have been updated accordingly.

Closes https://github.com/espressif/esp-idf/issues/11216
2023-04-21 15:43:08 +08:00
Darian 836755679e Merge branch 'feature/bt_uses_creationg_with_caps_functions' into 'master'
BT: Remove "create static" calls from OSI

See merge request espressif/esp-idf!23187
2023-04-21 12:39:10 +08:00
Darian 0bb3342491 Merge branch 'refactor/xtensa_move_common_source_files' into 'master'
Xtensa: Separate files according to Xtensa RTOS porting layer

See merge request espressif/esp-idf!21672
2023-04-19 15:15:21 +08:00
Darian f93bb3a63c Merge branch 'contrib/github_pr_11113' into 'master'
Fix usb enumeration stage error for some device (GitHub PR)

Closes IDFGH-9778

See merge request espressif/esp-idf!23233
2023-04-19 02:19:26 +08:00
Darian Leung 9509c14510 build: Add --longcalls option to clang builds of xtensa targets
This commit adds the --longcalls option to UNIQ_CMAKE_ASM_FLAGS for clang
builds of xtensa targets to prevent "dangerous relocation" errors.
2023-04-18 15:51:38 +08:00
Darian Leung 6587e75251 xtensa: Add bare metal port stub functions for G0 build test
This commit adds "bare metal stubs" xtensa_rtos.h glue layer to mimic a bare
metal OS port. The bare metal stubs don't access any components outside of the
G0 group.
2023-04-18 15:51:38 +08:00
Darian Leung 5fde889a3d xtensa: Remove OS agnostic files from Amazon SMP FreeRTOS port
The previous commit moved the OS agnostic files from the IDF FreeRTOS port to
the xtensa component, thus can be accessed by both IDF and Amazon SMP FreeRTOS.

This commit removes the redudant copies in the Amazon SMP FreeRTOS port.
2023-04-18 15:51:38 +08:00
Darian Leung b2c074bb70 xtensa: Move Xtensa RTOS porting layer files to xtensa component
When porting an RTOS to the Xtensa architecture, there are a few files that
are common to all Xtensa RTOS ports. These files form the Xtensa RTOS porting
layer (e.g., "xtensa_vectors.S", "xtensa_context.S"). An Xtensa RTOS port is
expected to provide an RTOS specific "xtensa_rtos.h" header to interface with
the Xtensa RTOS porting layer.

Previously, the Xtensa RTOS porting layer files were placed in the FreeRTOS
component. This commit does the following:

1. Moves the Xtensa RTOS porting layer files from the `freertos` component to
the `xtensa` component. The following files were moved:

    - xtensa_asm_utils.h
    - xtensa_context.S
    - xtensa_loadstore_handler.S
    - xtensa_vectors.S

2. Refactored xtensa component include paths to separate Xtensa RTOS porting
layer headers.

- Xtensa HAL headers included via `#include <xtensa/...h>`
- Xtensa RTOS porting layer headers included via `#include <...h>`

Note: The xtensa files in the Amazon SMP FreeRTOS port are not moved/deleted in
this commit to ensure the moved files retain a clean diff history.
2023-04-18 15:28:05 +08:00
Darian Leung 525de5bd21 usb_host: Update docs and comments regarding first configuration enumeration
This commit updates some comments and documentation regarding changes made in
PR https://github.com/espressif/esp-idf/pull/11113.
2023-04-17 17:06:54 +08:00
Darian Leung a5b04de565 bt: Remove FreeRTOS static allocation from OSI functions
Previously, the BT OSI would use various FreeRTOS "create static" functions to
ensure that semaphores and queues were always allocated to internal memory.
However, from commit e21ab0332b onwards, all
dynamic memory allocated by FreeRTOS will default to internal RAM.

Thus, the extra "create static" calls can be removed to simply the code.
2023-04-13 15:06:21 +08:00
Darian 4004dff52e Merge branch 'feature/freertos_get_static_buffers' into 'master'
FreeRTOS: Add GetStaticBuffer and CreateWithCaps functions

Closes IDF-5664

See merge request espressif/esp-idf!22859
2023-04-12 18:37:03 +08:00
Darian Leung fa4491a56b freertos: Add unit tests for ...WithCaps() functions 2023-04-12 12:00:53 +08:00
Darian Leung 4e7cd2e706 freertos: Add wrapper functions to create objects with capabilities
This commit adds various ...WithCaps() functions to create FreeRTOS objects
with specific memory capabilities.
2023-04-12 12:00:53 +08:00
Darian Leung 478e041ce5 freertos: Add GetStaticBuffer functions
This commit adds the various ...GetStaticBuffer() functions from upstream
FreeRTOS. See https://github.com/FreeRTOS/FreeRTOS-Kernel/pull/641 for more
details.
2023-04-12 11:45:06 +08:00
Darian Leung 902d8f392d freertos: Fix idf_additions.h include order error
When building for CONFIG_FREERTOS_SMP, "idf_additions.h" was previously
implicitly included by "task.h" so that other ESP-IDF components still have
access to IDF API additions without needing to include "idf_additions.h"
directly.

However, some FreeRTOS headers (e.g., queue.h) will include task.h before
declaring any types (e.g., QueueHandle_t). Thus if any of those types are used
in idf_additions.h, we get a missing type error.

This commit moves the implicity include of idf_additions.h to FreeRTOS.h
2023-04-12 11:45:06 +08:00
Darian 649fbc01f1 Merge branch 'refactor/freertos_additional_api_headers' into 'master'
FreeRTOS: Refactor IDF API addition headers

See merge request espressif/esp-idf!23104
2023-04-07 18:09:57 +08:00
Darian Leung b042ed0495 freertos: Uncrustify idf_additions.h 2023-04-07 15:24:34 +08:00
Darian Leung 3d2e674326 freertos: Move private API additions to "freertos_idf_additions_priv.h"
Previously, some IDF FreeRTOS API additions that were meant to be private were
exposed through the same "idf_additions.h" header. This commit moves those
functions to a separate header included via
"esp_private/freertos_idf_additions_priv.h" so that they are not mistaken as
public API by users.

This commit also fixes some missing include and C++ guards in idf_additions.h
2023-04-07 15:24:34 +08:00
Darian Leung 0c21d59716 freertos: Move freertos_tasks_c_additions.h
freertos_tasks_c_additions.h is technically included as source file. This
commit removes the "private_include" directory of "freertos_tasks_c_additions.h"
and treats it as a source file of "esp_additions".
2023-04-07 15:24:34 +08:00
Darian c71025d6d6 Merge branch 'refactor/freertos_config_files' into 'master'
FreeRTOS: Combine FreeRTOSConfig.h

Closes IDF-6082

See merge request espressif/esp-idf!22815
2023-03-22 22:01:37 +08:00
Darian Leung 54deed0566 freertos: Uncrustify FreeRTOSConfig files 2023-03-22 16:32:29 +08:00
Darian Leung 6895e92fd2 freertos: Combine Amazon SMP FreeRTOS and IDF FreeRTOS config files
This commit merges the "FreeRTOSConfig_smp.h" file into the "FreeRTOSConfig.h".
The configurations for all FreeRTOS implementations are now stored in a single
file.
2023-03-22 16:32:29 +08:00
Darian Leung 63f318b85b freertos: Refactor FreeRTOSConfig_arch.h
This commit removes or adds some misplaced configs from the
FreeRTOSConfig_arch.h headers of each architecture.
2023-03-22 16:32:29 +08:00
Darian Leung 05bda6595d freertos: Move FreeRTOSConfig_arch.h
This commit moves the FreeRTOSConfig_arc.h to the "esp_additions" directory
so that they can also be used for SMP FreeRTOS builds.
2023-03-22 16:32:29 +08:00
Darian bd87e61e6f Merge branch 'refactor/freertos_remove_xTaskRemoveFromUnorderedEventList_define' into 'master'
FreeRTOS: Remove xTaskRemoveFromUnorderedEventList compatibility define

See merge request espressif/esp-idf!22813
2023-03-20 19:01:27 +08:00
Darian Leung 4f8c6c6277 freertos: Remove xTaskRemoveFromUnorderedEventList compatibility define
xTaskRemoveFromUnorderedEventList is a scheduler internal function, thus will
never be called by users. Therefore, the compatbility define is not necessary.
2023-03-17 20:15:13 +08:00
Darian d3d5b77363 Merge branch 'bugfix/flakey_task_snapshot_tests' into 'master'
FreeRTOS: Fix flakey task snapshot tests

See merge request espressif/esp-idf!22743
2023-03-15 15:41:55 +08:00
Darian Leung e5559d7903 freertos: Fix flakey task snapshot tests
The task snapshot tests use esp_cpu_stall() to stall the other CPU before
manually walking the task lists. However, it is possible that the other CPU
was also accessing the task lists when esp_cpu_stall() is called, leading to
flakey tests

This commit fixes the test by using a 2-way handshake instead of
esp_cpu_stall().
2023-03-14 16:51:25 +08:00
Darian a8948eb130 Merge branch 'refactor/xtensa_default_vectors' into 'master'
Xtensa: Move default vectors back into xtensa_vectors.S

Closes IDF-7022

See merge request espressif/esp-idf!20512
2023-03-11 01:00:48 +08:00
Darian Leung 29ec3fbacf xtensa: Move default vectors back into xtensa_vectors.S
The default implementation of some xtensa vectors were previously moved to
"xtensa_vector_defaults.S" as weak functions so that they could be overriden.

This commit moves these default vectors back into "xtensa_vectors.S" in
preparation for further refactoring of the xtensa component.
2023-03-10 13:59:01 +08:00
Darian 77ca79a5e9 Merge branch 'refactor/freertos_check_scheduler_suspend_asserts' into 'master'
FreeRTOS(IDF): Refactor configASSERTs for scheduler suspension

Closes IDF-5889

See merge request espressif/esp-idf!22576
2023-03-09 20:19:57 +08:00
Darian Leung 353b25410a freertos: Refactor configASSERTs for scheduler suspension
This commit adds a common macro for the differing configASSERT() calls that
check if the scheduler is suspended outside a critical section. This macro
allows vanilla behavior to be restored for single core builds. Also added
comments explaining why xTaskGetSchedulerState() is called instead when
building for SMP.
2023-03-07 18:12:15 +08:00
Darian daf4150846 Merge branch 'refactor/freertos_port_malloc_macros' into 'master'
FreeRTOS(IDF): Refactor pvPortMalloc()/vPortFree(), Implement IDF heap wrapper for FreeRTOS.

Closes IDF-3997

See merge request espressif/esp-idf!22565
2023-03-07 17:30:10 +08:00
Darian Leung 4069a62629 freertos(IDF): Remove usage of xPortGetFreeHeapSize() outside FreeRTOS
After heap_idf.c has been added (where the FreeRTOS heap is a subset of the
ESP-IDF heap), xPortGetFreeHeapSize() was updated to only returns the free
size of the FreeRTOS heap and not the entire ESP-IDF heap.

This commit replaces calls of xPortGetFreeHeapSize() with
esp_get_free_heap_size() in places outside of FreeRTOS.
2023-03-07 02:02:28 +08:00
Darian Leung e21ab0332b freertos(IDF): Refactor port heap functions
Vanilla FreeRTOS expects applications to use one of the heap implementations
provided by FreeRTOS (i.e., heap_x.c), where functions such as pvPortMalloc()
and vPortFree() are defined in the heap implementation.

However, ESP-IDF already provides its own heap implementation
(i.e., esp_heap_caps.h). Thus, the pvPortMallc()/vPortFree() functions were
previously overriden by macro to call esp_heap functions directly.

This commit refactors the FreeRTOS port's heap as such:

- Added a heap_idf.c that implements all of the heap related functions required
  by FreeRTOS source
- All dynamic memory allocated by FreeRTOS is from internal memory. Thus, the
  FreeRTOS heap is the internal memory subset of the ESP-IDF heap.
- Removed some old macros to reduce diff from upstream source code.
2023-03-06 16:00:29 +08:00
Darian 640ba3c029 Merge branch 'feature/ringbuf_uses_event_lists' into 'master'
esp_ringbuf: Replace internal semaphores with task event lists

Closes IDF-875

See merge request espressif/esp-idf!22442
2023-03-02 01:58:44 +08:00
Darian Leung a8b9314353 esp_ringbuf: Clarify behavior when sending items of 0 size
Ring buffers permit sending items of 0 size where:

- No-split/allow-split buffers will send an item (i.e., header) but the item
will have a 0 sized data section
- Byte buffers will simply return pdTRUE

This commit fixes an incorrect assert w.r.t 0 item size in
xRingbufferSendAcquire() and also adds a note to the API descriptions regarding
0 item sizes. A test case has also been added.
2023-02-28 23:56:45 +08:00