X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=cfg%2Fos.h;h=41ce8a532933a648586f9a61ed3c7a89f24228fc;hb=8c4f04bc9071d6d5c9fa55fe097cbff72325f5e9;hp=9a8037685f21e55be760f83320ee7088c8fd1f63;hpb=76c53bfa0136be55cf17e57b1ee098e5dfeefa70;p=bertos.git diff --git a/cfg/os.h b/cfg/os.h index 9a803768..41ce8a53 100755 --- a/cfg/os.h +++ b/cfg/os.h @@ -1,7 +1,7 @@ -/*! +/** * \file * * @@ -14,6 +14,33 @@ /*#* *#* $Log$ + *#* Revision 1.11 2007/09/29 16:19:47 bernie + *#* Changes to compile with sparse. + *#* + *#* Revision 1.10 2006/07/19 12:56:25 bernie + *#* Convert to new Doxygen style. + *#* + *#* Revision 1.9 2006/03/22 13:34:34 bernie + *#* MSVC support. + *#* + *#* Revision 1.8 2006/02/23 09:09:28 bernie + *#* Remove Linux specific hack. + *#* + *#* Revision 1.7 2006/02/20 01:46:59 bernie + *#* Port to MacOSX. + *#* + *#* Revision 1.6 2006/02/15 09:12:33 bernie + *#* Don't mask useful user signals on UNIX. + *#* + *#* Revision 1.5 2005/11/27 23:32:42 bernie + *#* Add CPU fallback for OS_ID. + *#* + *#* Revision 1.4 2005/11/27 03:07:13 bernie + *#* IRQ_SAVE_DISABLE(): Really block signals. + *#* + *#* Revision 1.3 2005/11/27 03:02:40 bernie + *#* Add POSIX emulation for IRQ_* macros; Add Qt support. + *#* *#* Revision 1.2 2005/11/04 16:20:01 bernie *#* Fix reference to README.devlib in header. *#* @@ -27,9 +54,9 @@ #ifndef DEVLIB_OS_H #define DEVLIB_OS_H - -/*! Macro to include OS-specific versions of the headers. */ +/** Macro to include OS-specific versions of the headers. */ #define OS_HEADER(module) PP_STRINGIZE(PP_CAT3(module, _, OS_ID).h) +#define OS_CSOURCE(module) PP_STRINGIZE(PP_CAT3(module, _, OS_ID).c) /* * OS autodetection (Some systems trigger multiple OS definitions) @@ -37,14 +64,62 @@ #ifdef _WIN32 #define OS_WIN32 1 #define OS_ID win32 + + // FIXME: Maybe disable Win32 exceptions? + typedef int cpuflags_t; + #define IRQ_DISABLE /* FIXME */ + #define IRQ_ENABLE /* FIXME */ + #define IRQ_SAVE_DISABLE(old_sigs) /* FIXME */ + #define IRQ_RESTORE(old_sigs) /* FIXME */ + #else #define OS_WIN32 0 #endif -#ifdef __unix__ +#if defined(__unix__) || (defined(__APPLE__) && defined(__MACH__)) #define OS_UNIX 1 #define OS_POSIX 1 /* Not strictly UNIX, but no way to autodetect it. */ - #define OS_ID unix + #define OS_ID posix + + /* + * The POSIX moral equivalent of disabling IRQs is disabling signals. + */ + #include + 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) #else #define OS_UNIX 0 #define OS_POSIX 0 @@ -63,28 +138,33 @@ #endif /* - * Summarize hosted environments as OS_HOSTED. + * We want Qt and other frameworks to look like OSes because you would + * tipically want their portable abstractions if you're using one of these. */ -#if OS_WIN32 || OS_UNIX - #define OS_HOSTED 1 +#if defined(_QT) + #define OS_QT 1 + #undef OS_ID + #define OS_ID qt #else - #define OS_HOSTED 0 + #define OS_QT 0 #endif /* - * Summarize embedded environments as OS_EMBEDDED. + * Summarize hosted environments as OS_HOSTED and embedded + * environment with OS_EMBEDDED. */ -#if CPU_AVR || CPU_DSP56K || CPU_I196 || defined(__embedded__) - #define OS_EMBEDDED 1 +#if OS_WIN32 || OS_UNIX || OS_DARWIN || OS_QT + #define OS_HOSTED 1 + #define OS_EMBEDDED 0 #else - #define OS_EMBEDDED 0 -#endif + #define OS_HOSTED 0 + #define OS_EMBEDDED 1 + /* Embedded environments fall back to CPU-specific code. */ + #define OS_ID CPU_ID +#endif /* Self-check for the detection */ -#if CPU_I196 + CPU_X86 + CPU_DSP56K + CPU_AVR == 0 - #error Unknown CPU -#endif #if !defined(OS_ID) #error OS_ID not defined #endif