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