]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/kern/ia32/shortcut.h
a66e825dce4c092a578e89112ebae90a0f7cb958
[l4.git] / kernel / fiasco / src / kern / ia32 / shortcut.h
1 #ifndef SHORTCUT_H
2 #define SHORTCUT_H
3
4 #include "globalconfig.h"
5
6 // thread_state consts
7 #define Thread_ready                    0x1
8 #define Thread_utcb_ip_sp               0x2
9 #define Thread_receiving                0x4
10 #define Thread_polling                  0x8
11 #define Thread_ipc_in_progress          0x10
12 #define Thread_send_in_progress         0x20
13 #define Thread_busy                     0x40
14 #define Thread_cancel                   0x100
15 #define Thread_dead                     0x200
16 #define Thread_delayed_deadline         0x2000
17 #define Thread_delayed_ipc              0x4000
18 #define Thread_fpu_owner                0x8000
19 #define Thread_alien                    0x10000
20 #define Thread_dis_alien                0x20000
21 #define Thread_transfer_in_progress     0x80000
22
23 #define Thread_ipc_sending_mask        (Thread_send_in_progress         | \
24                                         Thread_polling)
25 #define Thread_ipc_receiving_mask      (Thread_receiving                | \
26                                         Thread_busy                     | \
27                                         Thread_transfer_in_progress)
28 #define Thread_ipc_mask                (Thread_ipc_in_progress          | \
29                                         Thread_ipc_sending_mask         | \
30                                         Thread_ipc_receiving_mask)
31
32 // stackframe structure
33 #ifdef CONFIG_BIT32
34 #define REG_ECX
35 #define REG_EDX (1*4)
36 #define REG_ESI (2*4)
37 #define REG_EDI (3*4)
38 #define REG_EBX (4*4)
39 #define REG_EBP (5*4)
40 #define REG_EAX (6*4)
41 #define REG_EIP (7*4)
42 #define REG_CS  (8*4)
43 #define REG_EFL (9*4)
44 #define REG_ESP (10*4)
45 #define REG_SS  (11*4)
46 #else
47
48
49
50 /*
51 #define REG_RAX         (THREAD_BLOCK_SIZE - 6*8)
52 #define REG_RBP         (THREAD_BLOCK_SIZE - 7*8)
53 #define REG_RBX         (THREAD_BLOCK_SIZE - 8*8)
54 #define REG_RDI         (THREAD_BLOCK_SIZE - 9*8)
55 #define REG_RSI         (THREAD_BLOCK_SIZE - 10*8)
56
57 #define REG_RDX         (THREAD_BLOCK_SIZE - 11*8)      
58 #define REG_RCX         (THREAD_BLOCK_SIZE - 12*8)
59
60 #define REG_R8          (THREAD_BLOCK_SIZE - 13*8)
61 #define REG_R9          (THREAD_BLOCK_SIZE - 14*8)
62 #define REG_R10         (THREAD_BLOCK_SIZE - 15*8)
63 #define REG_R11         (THREAD_BLOCK_SIZE - 16*8)
64 #define REG_R12         (THREAD_BLOCK_SIZE - 17*8)
65 #define REG_R13         (THREAD_BLOCK_SIZE - 18*8)
66 #define REG_R14         (THREAD_BLOCK_SIZE - 19*8)
67 #define REG_R15         (THREAD_BLOCK_SIZE - 20*8)
68 */
69
70 #define REG_R15
71 #define REG_R14 (1*8)
72 #define REG_R13 (2*8)
73 #define REG_R12 (3*8)
74 #define REG_R11 (4*8)
75 #define REG_R10 (5*8)
76 #define REG_R9  (6*8)
77 #define REG_R8  (7*8)
78 #define REG_RCX (8*8)
79 #define REG_RDX (9*8)
80 #define REG_RSI (10*8)
81 #define REG_RDI (11*8)
82 #define REG_RBX (12*8)
83 #define REG_RBP (13*8)
84 #define REG_RAX (14*8)
85 #define REG_RIP (15*8)
86 #define REG_CS  (16*8)
87 #define REG_RFL (17*8)
88 #define REG_RSP (18*8)
89 #define REG_SS  (19*8)
90
91 #endif
92
93 #ifdef CONFIG_ABI_X0
94 #  define RETURN_DOPE 0x6000 // three dwords
95 #  define TCB_ADDRESS_MASK 0x01fff800
96 #else
97 #  define RETURN_DOPE 0x4000 // two dwords
98 #  define TCB_ADDRESS_MASK 0x1ffff800
99 #endif
100
101
102 #if defined(CONFIG_JDB) && defined(CONFIG_JDB_ACCOUNTING)
103
104 #define CNT_CONTEXT_SWITCH      incl (VAL__MEM_LAYOUT__TBUF_STATUS_PAGE+ \
105                                     OFS__TBUF_STATUS__KERNCNTS)
106 #define CNT_ADDR_SPACE_SWITCH   incl (VAL__MEM_LAYOUT__TBUF_STATUS_PAGE+ \
107                                     OFS__TBUF_STATUS__KERNCNTS + 4)
108 #define CNT_SHORTCUT_FAILED     incl (VAL__MEM_LAYOUT__TBUF_STATUS_PAGE+ \
109                                     OFS__TBUF_STATUS__KERNCNTS + 8)
110 #define CNT_SHORTCUT_SUCCESS    incl (VAL__MEM_LAYOUT__TBUF_STATUS_PAGE+ \
111                                     OFS__TBUF_STATUS__KERNCNTS + 12)
112 #define CNT_IOBMAP_TLB_FLUSH    incl (VAL__MEM_LAYOUT__TBUF_STATUS_PAGE+ \
113                                     OFS__TBUF_STATUS__KERNCNTS + 40)
114
115 #else
116
117 #define CNT_CONTEXT_SWITCH
118 #define CNT_ADDR_SPACE_SWITCH
119 #define CNT_SHORTCUT_FAILED
120 #define CNT_SHORTCUT_SUCCESS
121 #define CNT_IOBMAP_TLB_FLUSH
122
123 #endif
124
125 #endif