jehanne/sys/src/kern/amd64/amd64.h

180 lines
7.4 KiB
C

/*
* This file is part of the UCB release of Plan 9. It is subject to the license
* terms in the LICENSE file found in the top-level directory of this
* distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
* part of the UCB release of Plan 9, including this file, may be copied,
* modified, propagated, or distributed except according to the terms contained
* in the LICENSE file.
*/
/* Cr0 */
#define Pe 0x00000001 /* Protected Mode Enable */
#define Mp 0x00000002 /* Monitor Coprocessor */
#define Em 0x00000004 /* Emulate Coprocessor */
#define Ts 0x00000008 /* Task Switched */
#define Et 0x00000010 /* Extension Type */
#define Ne 0x00000020 /* Numeric Error */
#define Wp 0x00010000 /* Write Protect */
#define Am 0x00040000 /* Alignment Mask */
#define Nw 0x20000000 /* Not Writethrough */
#define Cd 0x40000000 /* Cache Disable */
#define Pg 0x80000000 /* Paging Enable */
/* Cr3 */
#define Pwt 0x00000008 /* Page-Level Writethrough */
#define Pcd 0x00000010 /* Page-Level Cache Disable */
/* Cr4 */
#define Vme 0x00000001 /* Virtual-8086 Mode Extensions */
#define Pvi 0x00000002 /* Protected Mode Virtual Interrupts */
#define Tsd 0x00000004 /* Time-Stamp Disable */
#define De 0x00000008 /* Debugging Extensions */
#define Pse 0x00000010 /* Page-Size Extensions */
#define Pae 0x00000020 /* Physical Address Extension */
#define Mce 0x00000040 /* Machine Check Enable */
#define Pge 0x00000080 /* Page-Global Enable */
#define Pce 0x00000100 /* Performance Monitoring Counter Enable */
#define Osfxsr 0x00000200 /* FXSAVE/FXRSTOR Support */
#define Osxmmexcpt 0x00000400 /* Unmasked Exception Support */
/* Rflags */
#define Cf 0x00000001 /* Carry Flag */
#define Pf 0x00000004 /* Parity Flag */
#define Af 0x00000010 /* Auxiliary Flag */
#define Zf 0x00000040 /* Zero Flag */
#define Sf 0x00000080 /* Sign Flag */
#define Tf 0x00000100 /* Trap Flag */
#define If 0x00000200 /* Interrupt Flag */
#define Df 0x00000400 /* Direction Flag */
#define Of 0x00000800 /* Overflow Flag */
#define Iopl0 0x00000000 /* I/O Privilege Level */
#define Iopl1 0x00001000
#define Iopl2 0x00002000
#define Iopl3 0x00003000
#define Nt 0x00004000 /* Nested Task */
#define Rf 0x00010000 /* Resume Flag */
#define Vm 0x00020000 /* Virtual-8086 Mode */
#define Ac 0x00040000 /* Alignment Check */
#define Vif 0x00080000 /* Virtual Interrupt Flag */
#define Vip 0x00100000 /* Virtual Interrupt Pending */
#define Id 0x00200000 /* ID Flag */
/* MSRs */
#define PerfEvtbase 0xc0010000 /* Performance Event Select */
#define PerfCtrbase 0xc0010004 /* Performance Counters */
#define Efer 0xc0000080 /* Extended Feature Enable */
#define Star 0xc0000081 /* Legacy Target IP and [CS]S */
#define Lstar 0xc0000082 /* Long Mode Target IP */
#define Cstar 0xc0000083 /* Compatibility Target IP */
#define Sfmask 0xc0000084 /* SYSCALL Flags Mask */
#define FSbase 0xc0000100 /* 64-bit FS Base Address */
#define GSbase 0xc0000101 /* 64-bit GS Base Address */
#define KernelGSbase 0xc0000102 /* SWAPGS instruction */
/* Efer */
#define Sce 0x00000001 /* System Call Extension */
#define Lme 0x00000100 /* Long Mode Enable */
#define Lma 0x00000400 /* Long Mode Active */
#define Nxe 0x00000800 /* No-Execute Enable */
#define Svme 0x00001000 /* SVM Extension Enable */
#define Ffxsr 0x00004000 /* Fast FXSAVE/FXRSTOR */
/* PML4E/PDPE/PDE/PTE */
#define PteP 0x0000000000000001 /* Present */
#define PteRW 0x0000000000000002 /* Read/Write */
#define PteU 0x0000000000000004 /* User/Supervisor */
#define PtePWT 0x0000000000000008 /* Page-Level Write Through */
#define PtePCD 0x0000000000000010 /* Page Level Cache Disable */
#define PteA 0x0000000000000020 /* Accessed */
#define PteD 0x0000000000000040 /* Dirty */
#define PtePS 0x0000000000000080 /* Page Size */
#define Pte4KPAT PtePS /* PTE PAT */
#define PteG 0x0000000000000100 /* Global */
#define Pte2MPAT 0x0000000000001000 /* PDE PAT */
#define Pte1GPAT Pte2MPAT /* PDPE PAT */
#define PteNX 0x8000000000000000 /* No Execute */
/* Exceptions */
#define IdtDE 0 /* Divide-by-Zero Error */
#define IdtDB 1 /* Debug */
#define IdtNMI 2 /* Non-Maskable-Interrupt */
#define IdtBP 3 /* Breakpoint */
#define IdtOF 4 /* Overflow */
#define IdtBR 5 /* Bound-Range */
#define IdtUD 6 /* Invalid-Opcode */
#define IdtNM 7 /* Device-Not-Available */
#define IdtDF 8 /* Double-Fault */
#define Idt09 9 /* unsupported */
#define IdtTS 10 /* Invalid-TSS */
#define IdtNP 11 /* Segment-Not-Present */
#define IdtSS 12 /* Stack */
#define IdtGP 13 /* General-Protection */
#define IdtPF 14 /* Page-Fault */
#define Idt0F 15 /* reserved */
#define IdtMF 16 /* x87 FPE-Pending */
#define IdtAC 17 /* Alignment-Check */
#define IdtMC 18 /* Machine-Check */
#define IdtXF 19 /* SIMD Floating-Point */
/* Vestigial Segmented Virtual Memory */
#define SdISTM 0x0000000700000000 /* Interrupt Stack Table Mask */
#define SdA 0x0000010000000000 /* Accessed */
#define SdR 0x0000020000000000 /* Readable (Code) */
#define SdW 0x0000020000000000 /* Writeable (Data) */
#define SdE 0x0000040000000000 /* Expand Down */
#define SdaTSS 0x0000090000000000 /* Available TSS */
#define SdbTSS 0x00000b0000000000 /* Busy TSS */
#define SdCG 0x00000c0000000000 /* Call Gate */
#define SdIG 0x00000e0000000000 /* Interrupt Gate */
#define SdTG 0x00000f0000000000 /* Trap Gate */
#define SdCODE 0x0000080000000000 /* Code/Data */
#define SdS 0x0000100000000000 /* System/User */
#define SdDPL0 0x0000000000000000 /* Descriptor Privilege Level */
#define SdDPL1 0x0000200000000000
#define SdDPL2 0x0000400000000000
#define SdDPL3 0x0000600000000000
#define SdP 0x0000800000000000 /* Present */
#define Sd4G 0x000f00000000ffff /* 4G Limit */
#define SdL 0x0020000000000000 /* Long Attribute */
#define SdD 0x0040000000000000 /* Default Operand Size */
#define SdG 0x0080000000000000 /* Granularity */
/* Performance Counter Configuration */
#define PeHo 0x0000020000000000 /* Host only */
#define PeGo 0x0000010000000000 /* Guest only */
#define PeEvMskH 0x0000000f00000000 /* Event mask H */
#define PeCtMsk 0x00000000ff000000 /* Counter mask */
#define PeInMsk 0x0000000000800000 /* Invert mask */
#define PeCtEna 0x0000000000400000 /* Counter enable */
#define PeInEna 0x0000000000100000 /* Interrupt enable */
#define PePnCtl 0x0000000000080000 /* Pin control */
#define PeEdg 0x0000000000040000 /* Edge detect */
#define PeOS 0x0000000000020000 /* OS mode */
#define PeUsr 0x0000000000010000 /* User mode */
#define PeUnMsk 0x000000000000ff00 /* Unit Mask */
#define PeEvMskL 0x00000000000000ff /* Event Mask L */
#define PeEvMsksh 32 /* Event mask shift */
/* Segment Selector */
#define SsRPL0 0x0000 /* Requestor Privilege Level */
#define SsRPL1 0x0001
#define SsRPL2 0x0002
#define SsRPL3 0x0003
#define SsTIGDT 0x0000 /* GDT Table Indicator */
#define SsTILDT 0x0004 /* LDT Table Indicator */
#define SsSIM 0xfff8 /* Selector Index Mask */
#define SSEL(si, tirpl) (((si)<<3)|(tirpl)) /* Segment Selector */
#define SiNULL 0 /* NULL selector index */
#define SiCS 1 /* CS selector index */
#define SiDS 2 /* DS selector index */
#define SiU32CS 3 /* User CS selector index */
#define SiUDS 4 /* User DS selector index */
#define SiUCS 5 /* User CS selector index */
#define SiFS 6 /* FS selector index */
#define SiGS 7 /* GS selector index */
#define SiTSS 8 /* TSS selector index */