10437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris/*
20437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris * ldt.h
30437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris *
40437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris * Definitions of structures used with the modify_ldt system call.
50437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris */
60437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#ifndef _ASM_X86_LDT_H
70437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define _ASM_X86_LDT_H
80437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
90437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris/* Maximum number of LDT entries supported. */
100437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define LDT_ENTRIES	8192
110437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris/* The size of each LDT entry. */
120437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define LDT_ENTRY_SIZE	8
130437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
140437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#ifndef __ASSEMBLY__
150437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris/*
160437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris * Note on 64bit base and limit is ignored and you cannot set DS/ES/CS
170437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris * not to the default values if you still want to do syscalls. This
180437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris * call is more for 32bit mode therefore.
190437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris */
200437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferrisstruct user_desc {
210437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned int  entry_number;
220437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned int  base_addr;
230437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned int  limit;
240437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned int  seg_32bit:1;
250437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned int  contents:2;
260437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned int  read_exec_only:1;
270437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned int  limit_in_pages:1;
280437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned int  seg_not_present:1;
290437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned int  useable:1;
300437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#ifdef __x86_64__
310437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris	unsigned int  lm:1;
320437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#endif
330437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris};
340437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
350437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define MODIFY_LDT_CONTENTS_DATA	0
360437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define MODIFY_LDT_CONTENTS_STACK	1
370437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#define MODIFY_LDT_CONTENTS_CODE	2
380437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris
390437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#endif /* !__ASSEMBLY__ */
400437c52788a98ab8ea84041c6b1f8d7a93e872f6Christopher Ferris#endif /* _ASM_X86_LDT_H */
41