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 00000000000..4a73d63e476 --- /dev/null +++ b/arch/x86/um/asm/mm_context.h @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2004 Fujitsu Siemens Computers GmbH + * Licensed under the GPL + * + * Author: Bodo Stroesser <bstroesser@fujitsu-siemens.com> + */ + +#ifndef __ASM_LDT_H +#define __ASM_LDT_H + +#include <linux/mutex.h> +#include <asm/ldt.h> + +extern void ldt_host_info(void); + +#define LDT_PAGES_MAX \ +	((LDT_ENTRIES * LDT_ENTRY_SIZE)/PAGE_SIZE) +#define LDT_ENTRIES_PER_PAGE \ +	(PAGE_SIZE/LDT_ENTRY_SIZE) +#define LDT_DIRECT_ENTRIES \ +	((LDT_PAGES_MAX*sizeof(void *))/LDT_ENTRY_SIZE) + +struct ldt_entry { +	__u32 a; +	__u32 b; +}; + +typedef struct uml_ldt { +	int entry_count; +	struct mutex lock; +	union { +		struct ldt_entry * pages[LDT_PAGES_MAX]; +		struct ldt_entry entries[LDT_DIRECT_ENTRIES]; +	} u; +} uml_ldt_t; + +#define LDT_entry_a(info) \ +	((((info)->base_addr & 0x0000ffff) << 16) | ((info)->limit & 0x0ffff)) + +#define LDT_entry_b(info) \ +	(((info)->base_addr & 0xff000000) | \ +	(((info)->base_addr & 0x00ff0000) >> 16) | \ +	((info)->limit & 0xf0000) | \ +	(((info)->read_exec_only ^ 1) << 9) | \ +	((info)->contents << 10) | \ +	(((info)->seg_not_present ^ 1) << 15) | \ +	((info)->seg_32bit << 22) | \ +	((info)->limit_in_pages << 23) | \ +	((info)->useable << 20) | \ +	0x7000) + +#define _LDT_empty(info) (\ +	(info)->base_addr	== 0	&& \ +	(info)->limit		== 0	&& \ +	(info)->contents	== 0	&& \ +	(info)->read_exec_only	== 1	&& \ +	(info)->seg_32bit	== 0	&& \ +	(info)->limit_in_pages	== 0	&& \ +	(info)->seg_not_present	== 1	&& \ +	(info)->useable		== 0	) + +#ifdef CONFIG_X86_64 +#define LDT_empty(info) (_LDT_empty(info) && ((info)->lm == 0)) +#else +#define LDT_empty(info) (_LDT_empty(info)) +#endif + +struct uml_arch_mm_context { +	uml_ldt_t ldt; +}; + +#endif  | 
