+ #define OS_ID posix
+
+ /*
+ * The POSIX moral equivalent of disabling IRQs is disabling signals.
+ */
+ #include <signal.h>
+ typedef sigset_t cpuflags_t;
+
+ #define SET_ALL_SIGNALS(sigs) \
+ do { \
+ sigfillset(&sigs); \
+ sigdelset(&sigs, SIGINT); \
+ sigdelset(&sigs, SIGSTOP); \
+ sigdelset(&sigs, SIGCONT); \
+ } while(0)
+
+ #define IRQ_DISABLE \
+ do { \
+ sigset_t sigs; \
+ SET_ALL_SIGNALS(sigs); \
+ sigprocmask(SIG_BLOCK, &sigs, NULL); \
+ } while (0)
+
+ #define IRQ_ENABLE \
+ do { \
+ sigset_t sigs; \
+ SET_ALL_SIGNALS(sigs); \
+ sigprocmask(SIG_UNBLOCK, &sigs, NULL); \
+ } while (0)
+
+ #define IRQ_SAVE_DISABLE(old_sigs) \
+ do { \
+ sigset_t sigs; \
+ SET_ALL_SIGNALS(sigs); \
+ sigprocmask(SIG_BLOCK, &sigs, &old_sigs); \
+ } while (0)
+
+ #define IRQ_RESTORE(old_sigs) \
+ do { \
+ sigprocmask(SIG_SETMASK, &old_sigs, NULL); \
+ } while (0)