diff options
Diffstat (limited to 'arch/x86/um/asm/mm_context.h')
-rw-r--r-- | arch/x86/um/asm/mm_context.h | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/arch/x86/um/asm/mm_context.h b/arch/x86/um/asm/mm_context.h new file mode 100644 index 000000000000..4a73d63e4760 --- /dev/null +++ b/arch/x86/um/asm/mm_context.h | |||
@@ -0,0 +1,72 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2004 Fujitsu Siemens Computers GmbH | ||
3 | * Licensed under the GPL | ||
4 | * | ||
5 | * Author: Bodo Stroesser <bstroesser@fujitsu-siemens.com> | ||
6 | */ | ||
7 | |||
8 | #ifndef __ASM_LDT_H | ||
9 | #define __ASM_LDT_H | ||
10 | |||
11 | #include <linux/mutex.h> | ||
12 | #include <asm/ldt.h> | ||
13 | |||
14 | extern void ldt_host_info(void); | ||
15 | |||
16 | #define LDT_PAGES_MAX \ | ||
17 | ((LDT_ENTRIES * LDT_ENTRY_SIZE)/PAGE_SIZE) | ||
18 | #define LDT_ENTRIES_PER_PAGE \ | ||
19 | (PAGE_SIZE/LDT_ENTRY_SIZE) | ||
20 | #define LDT_DIRECT_ENTRIES \ | ||
21 | ((LDT_PAGES_MAX*sizeof(void *))/LDT_ENTRY_SIZE) | ||
22 | |||
23 | struct ldt_entry { | ||
24 | __u32 a; | ||
25 | __u32 b; | ||
26 | }; | ||
27 | |||
28 | typedef struct uml_ldt { | ||
29 | int entry_count; | ||
30 | struct mutex lock; | ||
31 | union { | ||
32 | struct ldt_entry * pages[LDT_PAGES_MAX]; | ||
33 | struct ldt_entry entries[LDT_DIRECT_ENTRIES]; | ||
34 | } u; | ||
35 | } uml_ldt_t; | ||
36 | |||
37 | #define LDT_entry_a(info) \ | ||
38 | ((((info)->base_addr & 0x0000ffff) << 16) | ((info)->limit & 0x0ffff)) | ||
39 | |||
40 | #define LDT_entry_b(info) \ | ||
41 | (((info)->base_addr & 0xff000000) | \ | ||
42 | (((info)->base_addr & 0x00ff0000) >> 16) | \ | ||
43 | ((info)->limit & 0xf0000) | \ | ||
44 | (((info)->read_exec_only ^ 1) << 9) | \ | ||
45 | ((info)->contents << 10) | \ | ||
46 | (((info)->seg_not_present ^ 1) << 15) | \ | ||
47 | ((info)->seg_32bit << 22) | \ | ||
48 | ((info)->limit_in_pages << 23) | \ | ||
49 | ((info)->useable << 20) | \ | ||
50 | 0x7000) | ||
51 | |||
52 | #define _LDT_empty(info) (\ | ||
53 | (info)->base_addr == 0 && \ | ||
54 | (info)->limit == 0 && \ | ||
55 | (info)->contents == 0 && \ | ||
56 | (info)->read_exec_only == 1 && \ | ||
57 | (info)->seg_32bit == 0 && \ | ||
58 | (info)->limit_in_pages == 0 && \ | ||
59 | (info)->seg_not_present == 1 && \ | ||
60 | (info)->useable == 0 ) | ||
61 | |||
62 | #ifdef CONFIG_X86_64 | ||
63 | #define LDT_empty(info) (_LDT_empty(info) && ((info)->lm == 0)) | ||
64 | #else | ||
65 | #define LDT_empty(info) (_LDT_empty(info)) | ||
66 | #endif | ||
67 | |||
68 | struct uml_arch_mm_context { | ||
69 | uml_ldt_t ldt; | ||
70 | }; | ||
71 | |||
72 | #endif | ||