39 lines
739 B
C
39 lines
739 B
C
#include "includes.h"
|
|
#include "ipc_spin_lock.h"
|
|
|
|
void ipc_spin_lock_init()
|
|
{
|
|
for (u8 i = 0; i < 16; i++) {
|
|
P11_RESLOCK->LOCK[i] = 0;
|
|
}
|
|
}
|
|
|
|
|
|
volatile u16 ipc_debug_bit;
|
|
|
|
|
|
AT(.ipc_spin_lock.text.cache.L1)
|
|
__attribute__((noinline))
|
|
void ipc_spin_lock(enum ipc_spin_lock_event event)//0~15
|
|
{
|
|
ASSERT(event <= 15);
|
|
|
|
if (cpu_in_irq()) {
|
|
ipc_debug_bit |= BIT(event);
|
|
} else {
|
|
if (ipc_debug_bit & BIT(event)) {
|
|
ASSERT(cpu_irq_disable(), "%x\n", event);
|
|
}
|
|
}
|
|
|
|
while (P11_RESLOCK->LOCK[event]);
|
|
}
|
|
AT(.ipc_spin_lock.text.cache.L1)
|
|
__attribute__((noinline))
|
|
void ipc_spin_unlock(enum ipc_spin_lock_event event)//0~15
|
|
{
|
|
ASSERT(event <= 15);
|
|
P11_RESLOCK->LOCK[event] = 0;
|
|
}
|
|
|