00001 
00002 
00003 #ifndef _CORE_SHARED_HPP
00004 #define _CORE_SHARED_HPP
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 #include "src/common/types.hpp"
00016 #include "src/common/errno.hpp"
00017 #include "src/common/error.hpp"
00018 #include "src/common/profiler.hpp"
00019 #include "src/sandbox.hpp"
00020 
00021 #define MIN(a,b)        ({typeof(a) _a = (a); \
00022                      typeof(b) _b = (b); \
00023                      _a < _b ? _a : _b;})
00024 
00025 #define MAX(a,b)  ({typeof(a) _a = (a); \
00026                      typeof(b) _b = (b); \
00027                      _a > _b ? _a : _b;})
00028 #define ABS(a)          ((unsigned typeof(a))( (a) > 0 ? (a) : -(a) ))
00029 
00030 #define LOWORD(l)       ((uint16)(uint32)(l))
00031 #define HIWORD(l)       ((uint16)((((uint32)(l))>>16)&0xFFFF))
00032 
00033 #define ENTER_CRITICAL(fl) do { asm volatile("pushf\npopl %0\ncli":"=g"(fl));  } while(0)
00034 #define LEAVE_CRITICAL(fl) do { asm volatile("pushl %0\npopf"::"g"(fl)); } while(0)
00035 
00042 #include "src/common/println.hpp"
00043 
00044 
00045 
00046 void reboot() __attribute__((noreturn)); 
00047 
00048 #define freeze(x) do { lnDbg ; while(1)  asm volatile("cli\nhlt"); } while(0)
00049 
00050 inline void print() {}
00051 
00052 inline void print(uint32 x) { kprintf("0x%x", x); }
00053 
00054 
00055 #if 0
00056 void print(char n[]);
00057 #endif
00058 
00059 
00060 template <typename T>
00061 void print(T* v) {
00062    kprintf("0x%x", reinterpret_cast<uint32>(v));
00063 }
00064 
00065 template <>
00066 inline void print<const char>(const char* v) { kprintf("%s", v); }
00067 
00068 template <>
00069 inline void print<char>(char *v) { kprintf("%s", v); }
00070 
00071 
00072 #if 0
00073 inline void print() { }
00074 inline void print(char n[]) { kprintf("%s", n); }
00075 
00076 inline void print(uint32 v) {
00077    kprintf("0x%x", v);
00078 }
00079 
00080 #if 1
00081 template<typename T>
00082 inline void print(T* v) {
00083    print(reinterpret_cast<uint32>(v));
00084 }
00085 
00086 #if 1
00087 template<>
00088 inline void print<char>(char* v) {
00089    kprintf("%s",v);
00090 }
00091 #endif
00092 #endif
00093 #endif
00094 
00095 
00098 #define null (0)
00099 
00100 
00101 
00102 
00103 
00104 
00105 
00106 
00107 
00108 
00109 
00110 
00111 
00112 
00113 
00114 
00115 
00116 
00117 
00118 
00119 
00120 #define BOCHSHALT __asm__ __volatile__ (      \
00121    "pushl %ecx\n\t"            \
00122    "xor %ecx,%ecx\n"         \
00123    "0:\n\t"               \
00124    "jecxz 0b\n\t"            \
00125    "popl %ecx\n\t"            \
00126 )
00127 
00128 
00129 
00130 
00131 
00132 
00133 
00134 
00135 void dbPrintInt(uint32 n);
00136 void dbSetRow(uint32 n) ;
00137 char digitOfUint(uint32 n, uint32 div);
00138 
00139 
00140 #endif