• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /****************************************************************************
2  ****************************************************************************
3  ***
4  ***   This header was automatically generated from a Linux kernel header
5  ***   of the same name, to make information necessary for userspace to
6  ***   call into the kernel available to libc.  It contains only constants,
7  ***   structures, and macros generated from the original header, and thus,
8  ***   contains no copyrightable information.
9  ***
10  ****************************************************************************
11  ****************************************************************************/
12 #ifndef __ASM_I386_PROCESSOR_H
13 #define __ASM_I386_PROCESSOR_H
14 
15 #include <asm/vm86.h>
16 #include <asm/math_emu.h>
17 #include <asm/segment.h>
18 #include <asm/page.h>
19 #include <asm/types.h>
20 #include <asm/sigcontext.h>
21 #include <asm/cpufeature.h>
22 #include <asm/msr.h>
23 #include <asm/system.h>
24 #include <linux/cache.h>
25 #include <linux/threads.h>
26 #include <asm/percpu.h>
27 #include <linux/cpumask.h>
28 #include <linux/init.h>
29 #include <asm/processor-flags.h>
30 
31 struct desc_struct {
32  unsigned long a,b;
33 };
34 
35 #define desc_empty(desc)   (!((desc)->a | (desc)->b))
36 
37 #define desc_equal(desc1, desc2)   (((desc1)->a == (desc2)->a) && ((desc1)->b == (desc2)->b))
38 
39 #define current_text_addr() ({ void *pc; __asm__("movl $1f,%0\n1:":"=g" (pc)); pc; })
40 
41 struct cpuinfo_x86 {
42  __u8 x86;
43  __u8 x86_vendor;
44  __u8 x86_model;
45  __u8 x86_mask;
46  char wp_works_ok;
47  char hlt_works_ok;
48  char hard_math;
49  char rfu;
50  int cpuid_level;
51  unsigned long x86_capability[NCAPINTS];
52  char x86_vendor_id[16];
53  char x86_model_id[64];
54  int x86_cache_size;
55  int x86_cache_alignment;
56  char fdiv_bug;
57  char f00f_bug;
58  char coma_bug;
59  char pad0;
60  int x86_power;
61  unsigned long loops_per_jiffy;
62  unsigned char x86_max_cores;
63  unsigned char apicid;
64  unsigned short x86_clflush_size;
65 } __attribute__((__aligned__(SMP_CACHE_BYTES)));
66 
67 #define X86_VENDOR_INTEL 0
68 #define X86_VENDOR_CYRIX 1
69 #define X86_VENDOR_AMD 2
70 #define X86_VENDOR_UMC 3
71 #define X86_VENDOR_NEXGEN 4
72 #define X86_VENDOR_CENTAUR 5
73 #define X86_VENDOR_TRANSMETA 7
74 #define X86_VENDOR_NSC 8
75 #define X86_VENDOR_NUM 9
76 #define X86_VENDOR_UNKNOWN 0xff
77 
78 #define cpu_data(cpu) boot_cpu_data
79 #define current_cpu_data boot_cpu_data
80 
81 #define load_cr3(pgdir) write_cr3(__pa(pgdir))
82 
83 #define TASK_SIZE (PAGE_OFFSET)
84 
85 #define TASK_UNMAPPED_BASE (PAGE_ALIGN(TASK_SIZE / 3))
86 
87 #define HAVE_ARCH_PICK_MMAP_LAYOUT
88 
89 #define IO_BITMAP_BITS 65536
90 #define IO_BITMAP_BYTES (IO_BITMAP_BITS/8)
91 #define IO_BITMAP_LONGS (IO_BITMAP_BYTES/sizeof(long))
92 #define IO_BITMAP_OFFSET offsetof(struct tss_struct,io_bitmap)
93 #define INVALID_IO_BITMAP_OFFSET 0x8000
94 #define INVALID_IO_BITMAP_OFFSET_LAZY 0x9000
95 
96 struct i387_fsave_struct {
97  long cwd;
98  long swd;
99  long twd;
100  long fip;
101  long fcs;
102  long foo;
103  long fos;
104  long st_space[20];
105  long status;
106 };
107 
108 struct i387_fxsave_struct {
109  unsigned short cwd;
110  unsigned short swd;
111  unsigned short twd;
112  unsigned short fop;
113  long fip;
114  long fcs;
115  long foo;
116  long fos;
117  long mxcsr;
118  long mxcsr_mask;
119  long st_space[32];
120  long xmm_space[32];
121  long padding[56];
122 } __attribute__ ((aligned (16)));
123 
124 struct i387_soft_struct {
125  long cwd;
126  long swd;
127  long twd;
128  long fip;
129  long fcs;
130  long foo;
131  long fos;
132  long st_space[20];
133  unsigned char ftop, changed, lookahead, no_update, rm, alimit;
134  struct info *info;
135  unsigned long entry_eip;
136 };
137 
138 union i387_union {
139  struct i387_fsave_struct fsave;
140  struct i387_fxsave_struct fxsave;
141  struct i387_soft_struct soft;
142 };
143 
144 typedef struct {
145  unsigned long seg;
146 } mm_segment_t;
147 
148 struct thread_struct;
149 
150 struct i386_hw_tss {
151  unsigned short back_link,__blh;
152  unsigned long esp0;
153  unsigned short ss0,__ss0h;
154  unsigned long esp1;
155  unsigned short ss1,__ss1h;
156  unsigned long esp2;
157  unsigned short ss2,__ss2h;
158  unsigned long __cr3;
159  unsigned long eip;
160  unsigned long eflags;
161  unsigned long eax,ecx,edx,ebx;
162  unsigned long esp;
163  unsigned long ebp;
164  unsigned long esi;
165  unsigned long edi;
166  unsigned short es, __esh;
167  unsigned short cs, __csh;
168  unsigned short ss, __ssh;
169  unsigned short ds, __dsh;
170  unsigned short fs, __fsh;
171  unsigned short gs, __gsh;
172  unsigned short ldt, __ldth;
173  unsigned short trace, io_bitmap_base;
174 } __attribute__((packed));
175 
176 struct tss_struct {
177  struct i386_hw_tss x86_tss;
178 
179  unsigned long io_bitmap[IO_BITMAP_LONGS + 1];
180 
181  unsigned long io_bitmap_max;
182  struct thread_struct *io_bitmap_owner;
183 
184  unsigned long __cacheline_filler[35];
185 
186  unsigned long stack[64];
187 } __attribute__((packed));
188 
189 #define ARCH_MIN_TASKALIGN 16
190 
191 struct thread_struct {
192 
193  struct desc_struct tls_array[GDT_ENTRY_TLS_ENTRIES];
194  unsigned long esp0;
195  unsigned long sysenter_cs;
196  unsigned long eip;
197  unsigned long esp;
198  unsigned long fs;
199  unsigned long gs;
200 
201  unsigned long debugreg[8];
202 
203  unsigned long cr2, trap_no, error_code;
204 
205  union i387_union i387;
206 
207  struct vm86_struct __user * vm86_info;
208  unsigned long screen_bitmap;
209  unsigned long v86flags, v86mask, saved_esp0;
210  unsigned int saved_fs, saved_gs;
211 
212  unsigned long *io_bitmap_ptr;
213  unsigned long iopl;
214 
215  unsigned long io_bitmap_max;
216 };
217 
218 #define INIT_THREAD {   .esp0 = sizeof(init_stack) + (long)&init_stack,   .vm86_info = NULL,   .sysenter_cs = __KERNEL_CS,   .io_bitmap_ptr = NULL,   .fs = __KERNEL_PERCPU,  }
219 
220 #define INIT_TSS {   .x86_tss = {   .esp0 = sizeof(init_stack) + (long)&init_stack,   .ss0 = __KERNEL_DS,   .ss1 = __KERNEL_CS,   .io_bitmap_base = INVALID_IO_BITMAP_OFFSET,   },   .io_bitmap = { [ 0 ... IO_BITMAP_LONGS] = ~0 },  }
221 
222 #define start_thread(regs, new_eip, new_esp) do {   __asm__("movl %0,%%gs": :"r" (0));   regs->xfs = 0;   set_fs(USER_DS);   regs->xds = __USER_DS;   regs->xes = __USER_DS;   regs->xss = __USER_DS;   regs->xcs = __USER_CS;   regs->eip = new_eip;   regs->esp = new_esp;  } while (0)
223 
224 struct task_struct;
225 struct mm_struct;
226 
227 #define THREAD_SIZE_LONGS (THREAD_SIZE/sizeof(unsigned long))
228 #define KSTK_TOP(info)  ({   unsigned long *__ptr = (unsigned long *)(info);   (unsigned long)(&__ptr[THREAD_SIZE_LONGS]);  })
229 
230 #define task_pt_regs(task)  ({   struct pt_regs *__regs__;   __regs__ = (struct pt_regs *)(KSTK_TOP(task_stack_page(task))-8);   __regs__ - 1;  })
231 
232 #define KSTK_EIP(task) (task_pt_regs(task)->eip)
233 #define KSTK_ESP(task) (task_pt_regs(task)->esp)
234 
235 struct microcode_header {
236  unsigned int hdrver;
237  unsigned int rev;
238  unsigned int date;
239  unsigned int sig;
240  unsigned int cksum;
241  unsigned int ldrver;
242  unsigned int pf;
243  unsigned int datasize;
244  unsigned int totalsize;
245  unsigned int reserved[3];
246 };
247 
248 struct microcode {
249  struct microcode_header hdr;
250  unsigned int bits[0];
251 };
252 
253 typedef struct microcode microcode_t;
254 typedef struct microcode_header microcode_header_t;
255 
256 struct extended_signature {
257  unsigned int sig;
258  unsigned int pf;
259  unsigned int cksum;
260 };
261 
262 struct extended_sigtable {
263  unsigned int count;
264  unsigned int cksum;
265  unsigned int reserved[3];
266  struct extended_signature sigs[0];
267 };
268 
269 #define cpu_relax() rep_nop()
270 #define paravirt_enabled() 0
271 #define __cpuid native_cpuid
272 #define get_debugreg(var, register)   (var) = native_get_debugreg(register)
273 #define set_debugreg(value, register)   native_set_debugreg(register, value)
274 #define set_iopl_mask native_set_iopl_mask
275 #define GENERIC_NOP1 ".byte 0x90\n"
276 #define GENERIC_NOP2 ".byte 0x89,0xf6\n"
277 #define GENERIC_NOP3 ".byte 0x8d,0x76,0x00\n"
278 #define GENERIC_NOP4 ".byte 0x8d,0x74,0x26,0x00\n"
279 #define GENERIC_NOP5 GENERIC_NOP1 GENERIC_NOP4
280 #define GENERIC_NOP6 ".byte 0x8d,0xb6,0x00,0x00,0x00,0x00\n"
281 #define GENERIC_NOP7 ".byte 0x8d,0xb4,0x26,0x00,0x00,0x00,0x00\n"
282 #define GENERIC_NOP8 GENERIC_NOP1 GENERIC_NOP7
283 #define K8_NOP1 GENERIC_NOP1
284 #define K8_NOP2 ".byte 0x66,0x90\n"
285 #define K8_NOP3 ".byte 0x66,0x66,0x90\n"
286 #define K8_NOP4 ".byte 0x66,0x66,0x66,0x90\n"
287 #define K8_NOP5 K8_NOP3 K8_NOP2
288 #define K8_NOP6 K8_NOP3 K8_NOP3
289 #define K8_NOP7 K8_NOP4 K8_NOP3
290 #define K8_NOP8 K8_NOP4 K8_NOP4
291 #define K7_NOP1 GENERIC_NOP1
292 #define K7_NOP2 ".byte 0x8b,0xc0\n"
293 #define K7_NOP3 ".byte 0x8d,0x04,0x20\n"
294 #define K7_NOP4 ".byte 0x8d,0x44,0x20,0x00\n"
295 #define K7_NOP5 K7_NOP4 ASM_NOP1
296 #define K7_NOP6 ".byte 0x8d,0x80,0,0,0,0\n"
297 #define K7_NOP7 ".byte 0x8D,0x04,0x05,0,0,0,0\n"
298 #define K7_NOP8 K7_NOP7 ASM_NOP1
299 #define P6_NOP1 GENERIC_NOP1
300 #define P6_NOP2 ".byte 0x66,0x90\n"
301 #define P6_NOP3 ".byte 0x0f,0x1f,0x00\n"
302 #define P6_NOP4 ".byte 0x0f,0x1f,0x40,0\n"
303 #define P6_NOP5 ".byte 0x0f,0x1f,0x44,0x00,0\n"
304 #define P6_NOP6 ".byte 0x66,0x0f,0x1f,0x44,0x00,0\n"
305 #define P6_NOP7 ".byte 0x0f,0x1f,0x80,0,0,0,0\n"
306 #define P6_NOP8 ".byte 0x0f,0x1f,0x84,0x00,0,0,0,0\n"
307 #define ASM_NOP1 GENERIC_NOP1
308 #define ASM_NOP2 GENERIC_NOP2
309 #define ASM_NOP3 GENERIC_NOP3
310 #define ASM_NOP4 GENERIC_NOP4
311 #define ASM_NOP5 GENERIC_NOP5
312 #define ASM_NOP6 GENERIC_NOP6
313 #define ASM_NOP7 GENERIC_NOP7
314 #define ASM_NOP8 GENERIC_NOP8
315 #define ASM_NOP_MAX 8
316 #define ARCH_HAS_PREFETCH
317 #define ARCH_HAS_PREFETCH
318 #define ARCH_HAS_PREFETCHW
319 #define ARCH_HAS_SPINLOCK_PREFETCH
320 #define spin_lock_prefetch(x) prefetchw(x)
321 
322 #define cache_line_size() (boot_cpu_data.x86_cache_alignment)
323 
324 #endif
325