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