2011-08-18 20:10:49 +01:00
/*
* Copyright ( C ) 2004 Fujitsu Siemens Computers GmbH
* Licensed under the GPL
*
* Author : Bodo Stroesser < bstroesser @ fujitsu - siemens . com >
*/
2011-08-18 20:09:29 +01:00
2011-08-18 20:10:49 +01:00
# ifndef __ASM_LDT_H
# define __ASM_LDT_H
# include <linux/mutex.h>
2011-08-18 20:09:29 +01:00
# include <asm/ldt.h>
2011-08-18 20:10:49 +01:00
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 ;
2011-08-18 20:09:29 +01:00
# 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))
2011-08-18 20:03:09 +01:00
# else
2011-08-18 20:09:29 +01:00
# define LDT_empty(info) (_LDT_empty(info))
# endif
2011-08-18 20:10:49 +01:00
struct uml_arch_mm_context {
uml_ldt_t ldt ;
} ;
2011-08-18 20:03:09 +01:00
# endif