i386/x86_64: move headers to include/asm-x86
[sfrench/cifs-2.6.git] / include / asm-x86 / segment_64.h
1 #ifndef _ASM_SEGMENT_H
2 #define _ASM_SEGMENT_H
3
4 #include <asm/cache.h>
5
6 /* Simple and small GDT entries for booting only */
7
8 #define GDT_ENTRY_BOOT_CS               2
9 #define __BOOT_CS       (GDT_ENTRY_BOOT_CS * 8)
10
11 #define GDT_ENTRY_BOOT_DS               (GDT_ENTRY_BOOT_CS + 1)
12 #define __BOOT_DS       (GDT_ENTRY_BOOT_DS * 8)
13
14 #define __KERNEL_CS     0x10
15 #define __KERNEL_DS     0x18
16
17 #define __KERNEL32_CS   0x08
18
19 /* 
20  * we cannot use the same code segment descriptor for user and kernel
21  * -- not even in the long flat mode, because of different DPL /kkeil 
22  * The segment offset needs to contain a RPL. Grr. -AK
23  * GDT layout to get 64bit syscall right (sysret hardcodes gdt offsets) 
24  */
25
26 #define __USER32_CS   0x23   /* 4*8+3 */ 
27 #define __USER_DS     0x2b   /* 5*8+3 */ 
28 #define __USER_CS     0x33   /* 6*8+3 */ 
29 #define __USER32_DS     __USER_DS 
30
31 #define GDT_ENTRY_TSS 8 /* needs two entries */
32 #define GDT_ENTRY_LDT 10 /* needs two entries */
33 #define GDT_ENTRY_TLS_MIN 12
34 #define GDT_ENTRY_TLS_MAX 14
35
36 #define GDT_ENTRY_TLS_ENTRIES 3
37
38 #define GDT_ENTRY_PER_CPU 15    /* Abused to load per CPU data from limit */
39 #define __PER_CPU_SEG   (GDT_ENTRY_PER_CPU * 8 + 3)
40
41 /* TLS indexes for 64bit - hardcoded in arch_prctl */
42 #define FS_TLS 0        
43 #define GS_TLS 1        
44
45 #define GS_TLS_SEL ((GDT_ENTRY_TLS_MIN+GS_TLS)*8 + 3)
46 #define FS_TLS_SEL ((GDT_ENTRY_TLS_MIN+FS_TLS)*8 + 3)
47
48 #define IDT_ENTRIES 256
49 #define GDT_ENTRIES 16
50 #define GDT_SIZE (GDT_ENTRIES * 8)
51 #define TLS_SIZE (GDT_ENTRY_TLS_ENTRIES * 8) 
52
53 #endif