// - Memory Layout
#define MM_USER_MIN 0x00200000
#define USER_STACK_SZ 0x00010000
-#define USER_STACK_TOP 0x00200000
+#define USER_STACK_TOP 0x00800000
#define MM_USER_MAX 0xBC000000
#define MM_PPD_MIN 0xBC000000 // Per-Process Data
#define MM_PPD_VFS 0xBC000000 //
// Uses no advanced features
# define USE_MP 0
# define USE_PAE 0
+#elif ARCH == i486
+// MP Only
+# define USE_MP 1
+# define USE_PAE 0
#elif ARCH == i586
// All Enabled
# define USE_MP 1
# error "Unknown architecture '" #ARCH "'"
#endif
+#if USE_MP
+# define MAX_CPUS 8
+#else
+# define MAX_CPUS 1
+#endif
+
+#if USE_PAE
+# define PHYS_BITS 48
+#else
+# define PHYS_BITS 32
+#endif
+
// === MACROS ===
+typedef volatile int tSpinlock;
#define LOCK(lockptr) do {int v=1;\
while(v)__asm__ __volatile__("lock xchgl %%eax, (%%edi)":"=a"(v):"a"(1),"D"(lockptr));}while(0)
#define RELEASE(lockptr) __asm__ __volatile__("lock andl $0, (%%edi)"::"D"(lockptr));
typedef signed long long Sint64;
typedef Uint size_t;
-#if USE_PAE
typedef Uint64 tPAddr;
-#else
-typedef Uint32 tPAddr;
-#endif
typedef Uint32 tVAddr;
-typedef void (*tThreadFunction)(void*);
-
typedef struct {
Uint gs, fs, es, ds;
Uint edi, esi, ebp, kesp;
Uint EIP, ESP, EBP;
} tTaskState;
-// --- Interface Flags & Macros
-#define CLONE_VM 0x10
-
#endif // !defined(_ARCH_H_)