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