i386.h (2252B)
1 /* Copyright 1998-1999, Brian J. Swetland. All rights reserved. 2 ** Distributed under the terms of the OpenBLT License 3 */ 4 5 #ifndef _I386_H 6 #define _I386_H 7 8 typedef struct 9 { 10 uint16 link, __unused0; 11 uint32 esp0; 12 uint16 ss0, __unused1; 13 uint32 esp1; 14 uint16 ss1, __unused2; 15 uint32 esp2; 16 uint16 ss2, __unused3; 17 uint32 cr3,eip,eflags,eax,ecx,edx,ebx,esp,ebp,esi,edi; 18 uint16 es, __unused4; 19 uint16 cs, __unused5; 20 uint16 ss, __unused6; 21 uint16 ds, __unused7; 22 uint16 fs, __unused8; 23 uint16 gs, __unused9; 24 uint16 ldts, __unused10; 25 uint16 debugtrap, iomapbase; 26 } TSS; 27 28 typedef struct { uint32 edi, esi, ebp, esp, ebx, edx, ecx, eax; } regs; 29 30 /* rights bits options */ 31 #define i386rPRESENT 0x80 /* segment is present */ 32 33 #define i386rDPL0 0x00 34 #define i386rDPL1 0x20 35 #define i386rDPL2 0x40 36 #define i386rDPL3 0x60 37 38 /* for Data/Code/TSS segments */ 39 #define i386rDATA 0x12 /* segment is data, read/write */ 40 #define i386rDATAro 0x10 /* segment is data, read only */ 41 #define i386rCODE 0x1A /* segment is code, read/exec */ 42 #define i386rCODExo 0x18 /* segment is code, read only */ 43 44 #define i386rTSS 0x09 /* segment is an i386 TSS */ 45 46 /* gran bits options */ 47 #define i386g4K 0x80 /* segment gran is 4K (else 1B) */ 48 #define i386g32BIT 0x40 /* segment default is 32bit (else 16bit) */ 49 #define i386gAVL 0x10 /* segment AVL is set */ 50 51 void i386SetSegment(void *entry, 52 uint32 base, uint32 limit, 53 uint8 rights, uint8 gran); 54 void i386SetTaskGate(void *entry, uint16 selector, uint8 rights); 55 56 void i386ltr(uint32 selector); 57 void i386lidt(uint32 base, uint32 limit); 58 void i386lgdt(uint32 base, uint32 limit); 59 uint32 *i386sgdt(uint32 *limit); 60 61 #define I386_PAGING_ON() asm("push %eax; mov %cr0, %eax; orl $0x80000000,%eax ; mov %eax, %cr0 ; pop %eax"); 62 #define I386_PAGING_OFF() asm("push %eax; mov %cr0, %eax; andl $0x7FFFFFFF,%eax ; mov %eax, %cr0 ; pop %eax"); 63 64 void unmap_irqs(void); 65 void remap_irqs(void); 66 void unmask_irq(int irq); 67 void mask_irq(int irq); 68 void init_timer(void); 69 70 void cli (void); 71 void sti (void); 72 void local_flush_tlb (void); 73 void local_flush_pte (unsigned int addr); 74 75 #endif /* _I386_H */ 76