lock.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /*
  2. * SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. */
  6. #pragma once
  7. #include_next <sys/lock.h>
  8. #include "sdkconfig.h"
  9. #ifdef _RETARGETABLE_LOCKING
  10. /* Actual platfrom-specific definition of struct __lock.
  11. * The size here should be sufficient for a FreeRTOS mutex.
  12. * This is checked by a static assertion in locks.c
  13. *
  14. * Note: this might need to be made dependent on whether FreeRTOS
  15. * is included in the build.
  16. */
  17. struct __lock {
  18. #if (CONFIG_FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES && CONFIG_FREERTOS_USE_TRACE_FACILITY)
  19. int reserved[29];
  20. #elif (CONFIG_FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES && !CONFIG_FREERTOS_USE_TRACE_FACILITY)
  21. int reserved[27];
  22. #elif (!CONFIG_FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES && CONFIG_FREERTOS_USE_TRACE_FACILITY)
  23. int reserved[23];
  24. #else
  25. int reserved[21];
  26. #endif /* #if (CONFIG_FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES && CONFIG_FREERTOS_USE_TRACE_FACILITY) */
  27. };
  28. /* Compatibility definitions for the legacy ESP-specific locking implementation.
  29. * These used to be provided by libc/sys/xtensa/sys/lock.h in newlib.
  30. * Newer versions of newlib don't have this ESP-specific lock.h header, and are
  31. * built with _RETARGETABLE_LOCKING enabled, instead.
  32. */
  33. typedef _LOCK_T _lock_t;
  34. void _lock_init(_lock_t *plock);
  35. void _lock_init_recursive(_lock_t *plock);
  36. void _lock_close(_lock_t *plock);
  37. void _lock_close_recursive(_lock_t *plock);
  38. void _lock_acquire(_lock_t *plock);
  39. void _lock_acquire_recursive(_lock_t *plock);
  40. int _lock_try_acquire(_lock_t *plock);
  41. int _lock_try_acquire_recursive(_lock_t *plock);
  42. void _lock_release(_lock_t *plock);
  43. void _lock_release_recursive(_lock_t *plock);
  44. #endif // _RETARGETABLE_LOCKING