c353089a53b9afea1b216d4f56817113a11be761
[tpg/acess2.git] / Kernel / arch / x86_64 / include / arch.h
1 /*
2  * Acess2 x86-64 Architecure Module
3  * - By John Hodge (thePowersGang)
4  */
5 #ifndef _ARCH_H_
6 #define _ARCH_H_
7
8 //#include <stdint.h>
9 //#define KERNEL_BASE   0xFFFF8000##00000000
10 #define KERNEL_BASE     0xFFFFFFFF##80000000
11 #define BITS    64
12
13 //#define INT_MAX       0x7FFFFFFF
14 //#define UINT_MAX      0xFFFFFFFF
15
16 // === Core Types ===
17 typedef signed char     Sint8;
18 typedef unsigned char   Uint8;
19 typedef signed short    Sint16;
20 typedef unsigned short  Uint16;
21 typedef signed int      Sint32;
22 typedef unsigned int    Uint32;
23 #if __WORDSIZE == 64
24 typedef signed long int Sint64;
25 typedef unsigned long int       Uint64;
26 #else
27 typedef signed long long int    Sint64;
28 typedef unsigned long long int  Uint64;
29 #endif
30
31 typedef Sint64  Sint;
32 typedef Uint64  Uint;
33 typedef Uint64  tPAddr;
34 typedef Uint64  tVAddr;
35
36 typedef Uint64  size_t;
37 typedef char    BOOL;
38
39 #define __ASM__ __asm__ __volatile__
40
41 // === MACROS ===
42 /**
43  * \brief Halt the CPU
44  */
45 #define HALT()  __asm__ __volatile__ ("hlt")
46 /**
47  * \brief Fire a magic breakpoint (bochs)
48  */
49 #define MAGIC_BREAK()   __asm__ __volatile__ ("xchg %bx, %bx")
50
51 // Systemcall Registers
52 // TODO: Fix this structure
53 typedef struct sSyscallRegs
54 {
55         union {
56                 Uint    Num;
57                 Uint    Return;
58         };      // RAX
59         Uint    Arg4;   // RCX
60         Uint    Arg3;   // RDX
61         Uint    Error;  // RBX
62         Uint    Resvd1[2];      // Kernel RSP, RBP
63         Uint    Arg2;   // RSI
64         Uint    Arg1;   // RDI
65         Uint    Arg5;   // R8
66         Uint    Arg6;   // R9
67         Uint    Resvd2[6];      // R10 - R15
68         Uint    Resvd3[5];      // IntNum, ErrCode, RIP, CS, RFLAGS
69         
70         Uint    Resvd4[5];      // Int, Err, rip, CS, ...
71         Uint    StackPointer;   // RSP
72         Uint    Resvd5[1];      // SS   
73 }       tSyscallRegs;
74
75 /**
76  * \brief Short Spinlock structure
77  */
78 struct sShortSpinlock {
79         #if STACKED_LOCKS == 2
80         volatile void   *Lock;  //!< Lock value
81         #else
82         volatile int    Lock;   //!< Lock value
83         #endif
84         
85         #if LOCK_DISABLE_INTS
86          int    IF;     //!< Interrupt state on call to SHORTLOCK
87         #endif
88         #if STACKED_LOCKS
89          int    Depth;
90         #endif
91 };
92
93 // === FUNCTIONS ===
94 extern int      IS_LOCKED(struct sShortSpinlock *Lock);
95 extern int      CPU_HAS_LOCK(struct sShortSpinlock *Lock);
96 extern void     SHORTLOCK(struct sShortSpinlock *Lock);
97 extern void     SHORTREL(struct sShortSpinlock *Lock);
98
99 #endif
100

UCC git Repository :: git.ucc.asn.au