Annotation of Gnu-Mach/linux/src/include/asm-i386/processor.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * include/asm-i386/processor.h
                      3:  *
                      4:  * Copyright (C) 1994 Linus Torvalds
                      5:  */
                      6: 
                      7: #ifndef __ASM_I386_PROCESSOR_H
                      8: #define __ASM_I386_PROCESSOR_H
                      9: 
                     10: #include <asm/vm86.h>
                     11: #include <asm/math_emu.h>
                     12: 
                     13: /*
                     14:  * System setup and hardware bug flags..
                     15:  * [Note we don't test the 386 multiply bug or popad bug]
                     16:  */
                     17: 
                     18: extern char hard_math;
                     19: extern char x86;               /* lower 4 bits */
                     20: extern char x86_vendor_id[13];
                     21: extern char x86_model;         /* lower 4 bits */
                     22: extern char x86_mask;          /* lower 4 bits */
                     23: extern int  x86_capability;    /* field of flags */
                     24: extern int  fdiv_bug;          
                     25: extern char ignore_irq13;
                     26: extern char wp_works_ok;       /* doesn't work on a 386 */
                     27: extern char hlt_works_ok;      /* problems on some 486Dx4's and old 386's */
                     28: extern int  have_cpuid;                /* We have a CPUID */
                     29: 
                     30: extern unsigned long cpu_hz;   /* CPU clock frequency from time.c */
                     31: 
                     32: /*
                     33:  *     Detection of CPU model (CPUID).
                     34:  */
                     35: extern inline void cpuid(int op, int *eax, int *ebx, int *ecx, int *edx)
                     36: {
                     37:        __asm__("cpuid"
                     38:                : "=a" (*eax),
                     39:                  "=b" (*ebx),
                     40:                  "=c" (*ecx),
                     41:                  "=d" (*edx)
                     42:                : "a" (op)
                     43:                : "cc");
                     44: }
                     45: 
                     46: /*
                     47:  * Cyrix CPU register indexes (use special macros to access these)
                     48:  */
                     49: #define CX86_CCR2 0xc2
                     50: #define CX86_CCR3 0xc3
                     51: #define CX86_CCR4 0xe8
                     52: #define CX86_CCR5 0xe9
                     53: #define CX86_DIR0 0xfe
                     54: #define CX86_DIR1 0xff
                     55: 
                     56: /*
                     57:  * Cyrix CPU register access macros
                     58:  */
                     59: 
                     60: extern inline unsigned char getCx86(unsigned char reg)
                     61: {
                     62:        unsigned char data;
                     63: 
                     64:        __asm__ __volatile__("movb %1,%%al\n\t"
                     65:                      "outb %%al,$0x22\n\t"
                     66:                      "inb $0x23,%%al" : "=a" (data) : "q" (reg));
                     67:        return data;
                     68: }
                     69: 
                     70: extern inline void setCx86(unsigned char reg, unsigned char data)
                     71: {
                     72:        __asm__ __volatile__("outb %%al,$0x22\n\t"
                     73:             "movb %1,%%al\n\t"
                     74:             "outb %%al,$0x23" : : "a" (reg), "q" (data));
                     75: }
                     76: 
                     77: /*
                     78:  * Bus types (default is ISA, but people can check others with these..)
                     79:  * MCA_bus hardcoded to 0 for now.
                     80:  */
                     81: extern int EISA_bus;
                     82: #define MCA_bus 0
                     83: #define MCA_bus__is_a_macro /* for versions in ksyms.c */
                     84: 
                     85: /*
                     86:  * User space process size: 3GB. This is hardcoded into a few places,
                     87:  * so don't change it unless you know what you are doing.
                     88:  */
                     89: #define TASK_SIZE      (0xC0000000UL)
                     90: #define MAX_USER_ADDR  TASK_SIZE
                     91: #define MMAP_SEARCH_START (TASK_SIZE/3)
                     92: 
                     93: /*
                     94:  * Size of io_bitmap in longwords: 32 is ports 0-0x3ff.
                     95:  */
                     96: #define IO_BITMAP_SIZE 32
                     97: 
                     98: struct i387_hard_struct {
                     99:        long    cwd;
                    100:        long    swd;
                    101:        long    twd;
                    102:        long    fip;
                    103:        long    fcs;
                    104:        long    foo;
                    105:        long    fos;
                    106:        long    st_space[20];   /* 8*10 bytes for each FP-reg = 80 bytes */
                    107:        long    status;         /* software status information */
                    108: };
                    109: 
                    110: struct i387_soft_struct {
                    111:        long    cwd;
                    112:        long    swd;
                    113:        long    twd;
                    114:        long    fip;
                    115:        long    fcs;
                    116:        long    foo;
                    117:        long    fos;
                    118:        long    top;
                    119:        struct fpu_reg  regs[8];        /* 8*16 bytes for each FP-reg = 128 bytes */
                    120:        unsigned char   lookahead;
                    121:        struct info     *info;
                    122:        unsigned long   entry_eip;
                    123: };
                    124: 
                    125: union i387_union {
                    126:        struct i387_hard_struct hard;
                    127:        struct i387_soft_struct soft;
                    128: };
                    129: 
                    130: struct thread_struct {
                    131:        unsigned short  back_link,__blh;
                    132:        unsigned long   esp0;
                    133:        unsigned short  ss0,__ss0h;
                    134:        unsigned long   esp1;
                    135:        unsigned short  ss1,__ss1h;
                    136:        unsigned long   esp2;
                    137:        unsigned short  ss2,__ss2h;
                    138:        unsigned long   cr3;
                    139:        unsigned long   eip;
                    140:        unsigned long   eflags;
                    141:        unsigned long   eax,ecx,edx,ebx;
                    142:        unsigned long   esp;
                    143:        unsigned long   ebp;
                    144:        unsigned long   esi;
                    145:        unsigned long   edi;
                    146:        unsigned short  es, __esh;
                    147:        unsigned short  cs, __csh;
                    148:        unsigned short  ss, __ssh;
                    149:        unsigned short  ds, __dsh;
                    150:        unsigned short  fs, __fsh;
                    151:        unsigned short  gs, __gsh;
                    152:        unsigned short  ldt, __ldth;
                    153:        unsigned short  trace, bitmap;
                    154:        unsigned long   io_bitmap[IO_BITMAP_SIZE+1];
                    155:        unsigned long   tr;
                    156:        unsigned long   cr2, trap_no, error_code;
                    157: /* floating point info */
                    158:        union i387_union i387;
                    159: /* virtual 86 mode info */
                    160:        struct vm86_struct * vm86_info;
                    161:        unsigned long screen_bitmap;
                    162:        unsigned long v86flags, v86mask, v86mode;
                    163: };
                    164: 
                    165: #define INIT_MMAP { &init_mm, 0, 0x40000000, PAGE_SHARED, VM_READ | VM_WRITE | VM_EXEC }
                    166: 
                    167: #define INIT_TSS  { \
                    168:        0,0, \
                    169:        sizeof(init_kernel_stack) + (long) &init_kernel_stack, \
                    170:        KERNEL_DS, 0, \
                    171:        0,0,0,0,0,0, \
                    172:        (long) &swapper_pg_dir, \
                    173:        0,0,0,0,0,0,0,0,0,0, \
                    174:        USER_DS,0,USER_DS,0,USER_DS,0,USER_DS,0,USER_DS,0,USER_DS,0, \
                    175:        _LDT(0),0, \
                    176:        0, 0x8000, \
                    177:        {~0, }, /* ioperm */ \
                    178:        _TSS(0), 0, 0,0, \
                    179:        { { 0, }, },  /* 387 state */ \
                    180:        NULL, 0, 0, 0, 0 /* vm86_info */ \
                    181: }
                    182: 
                    183: #define alloc_kernel_stack()    __get_free_page(GFP_KERNEL)
                    184: #define free_kernel_stack(page) free_page((page))
                    185: 
                    186: static inline void start_thread(struct pt_regs * regs, unsigned long eip, unsigned long esp)
                    187: {
                    188:        regs->cs = USER_CS;
                    189:        regs->ds = regs->es = regs->ss = regs->fs = regs->gs = USER_DS;
                    190:        regs->eip = eip;
                    191:        regs->esp = esp;
                    192: }
                    193: 
                    194: /*
                    195:  * Return saved PC of a blocked thread.
                    196:  */
                    197: extern inline unsigned long thread_saved_pc(struct thread_struct *t)
                    198: {
                    199:        return ((unsigned long *)t->esp)[3];
                    200: }
                    201: 
                    202: #endif /* __ASM_I386_PROCESSOR_H */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.