Viewing: spinlock.h
📄 spinlock.h (Read Only) ⬅ To go back
#ifndef ARCH_MIPS_SPINLOCK_H
#define ARCH_MIPS_SPINLOCK_H

#include <stdint.h>

static inline void cpu_relax(void) {
    __asm__ volatile("pause" ::: "memory");
}

static inline uintptr_t irq_save(void) {
    uintptr_t status;
    __asm__ volatile(
        "mfc0 %0, $12\n\t"
        "di"
        : "=r"(status) :: "memory");
    return status & 1U;
}

static inline void irq_restore(uintptr_t flags) {
    if (flags) {
        __asm__ volatile("ei" ::: "memory");
    }
}

#endif /* ARCH_MIPS_SPINLOCK_H */