mirror of
				https://github.com/AetherDroid/android_kernel_samsung_on5xelte.git
				synced 2025-10-29 23:28:52 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			72 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * 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
 | 
