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