forked from ROMEO/obsw
66 lines
1.9 KiB
C
66 lines
1.9 KiB
C
#include "lwip/sys.h"
|
|
|
|
#include "FreeRTOS.h"
|
|
#include "task.h"
|
|
|
|
extern volatile uint32_t ulPortInterruptNesting;
|
|
|
|
#if SYS_LIGHTWEIGHT_PROT
|
|
|
|
sys_prot_t
|
|
sys_arch_protect_ca0(void)
|
|
{
|
|
#if LWIP_FREERTOS_SYS_ARCH_PROTECT_USES_MUTEX
|
|
BaseType_t ret;
|
|
LWIP_ASSERT("sys_arch_protect_mutex != NULL", sys_arch_protect_mutex != NULL);
|
|
|
|
ret = xSemaphoreTakeRecursive(sys_arch_protect_mutex, portMAX_DELAY);
|
|
LWIP_ASSERT("sys_arch_protect failed to take the mutex", ret == pdTRUE);
|
|
#else /* LWIP_FREERTOS_SYS_ARCH_PROTECT_USES_MUTEX */
|
|
if ( ulPortInterruptNesting == 0) {
|
|
taskENTER_CRITICAL();
|
|
} else {
|
|
taskENTER_CRITICAL_FROM_ISR();
|
|
}
|
|
#endif /* LWIP_FREERTOS_SYS_ARCH_PROTECT_USES_MUTEX */
|
|
#if LWIP_FREERTOS_SYS_ARCH_PROTECT_SANITY_CHECK
|
|
{
|
|
/* every nested call to sys_arch_protect() returns an increased number */
|
|
sys_prot_t ret = sys_arch_protect_nesting;
|
|
sys_arch_protect_nesting++;
|
|
LWIP_ASSERT("sys_arch_protect overflow", sys_arch_protect_nesting > ret);
|
|
return ret;
|
|
}
|
|
#else
|
|
return 1;
|
|
#endif
|
|
}
|
|
|
|
void
|
|
sys_arch_unprotect_ca0(sys_prot_t pval)
|
|
{
|
|
#if LWIP_FREERTOS_SYS_ARCH_PROTECT_USES_MUTEX
|
|
BaseType_t ret;
|
|
#endif
|
|
#if LWIP_FREERTOS_SYS_ARCH_PROTECT_SANITY_CHECK
|
|
LWIP_ASSERT("unexpected sys_arch_protect_nesting", sys_arch_protect_nesting > 0);
|
|
sys_arch_protect_nesting--;
|
|
LWIP_ASSERT("unexpected sys_arch_protect_nesting", sys_arch_protect_nesting == pval);
|
|
#endif
|
|
|
|
#if LWIP_FREERTOS_SYS_ARCH_PROTECT_USES_MUTEX
|
|
LWIP_ASSERT("sys_arch_protect_mutex != NULL", sys_arch_protect_mutex != NULL);
|
|
|
|
ret = xSemaphoreGiveRecursive(sys_arch_protect_mutex);
|
|
LWIP_ASSERT("sys_arch_unprotect failed to give the mutex", ret == pdTRUE);
|
|
#else /* LWIP_FREERTOS_SYS_ARCH_PROTECT_USES_MUTEX */
|
|
if ( ulPortInterruptNesting == 0) {
|
|
taskEXIT_CRITICAL();
|
|
} else {
|
|
taskEXIT_CRITICAL_FROM_ISR(0);
|
|
}
|
|
#endif /* LWIP_FREERTOS_SYS_ARCH_PROTECT_USES_MUTEX */
|
|
LWIP_UNUSED_ARG(pval);
|
|
}
|
|
|
|
#endif /* SYS_LIGHTWEIGHT_PROT */ |