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