#include "lock.h" #include "utils.h" #include "addrmap.h" #include "time.h" char locks_pool[LOCKS_POOL_SIZE]; // Automatically zeroed (.bss) void lock_acquire(int lockid) { while(1){ while(locks_pool[lockid]) {} // Lurking stage while(!REG_READ(HARDWARE_LOCK)){} // Acquire HW lock if(!locks_pool[lockid]){ locks_pool[lockid]=1; // Acquire the lock REG_WRITE(HARDWARE_LOCK,0); // Release HW lock break; } REG_WRITE(HARDWARE_LOCK,0); } } void lock_release(int lockid) { while(!REG_READ(HARDWARE_LOCK)){} locks_pool[lockid]=0; REG_WRITE(HARDWARE_LOCK,0); }