root / lab4 / .minix-src / include / i386 / vm.h @ 14
History | View | Annotate | Download (4.04 KB)
1 | 13 | up20180614 | #ifndef __SYS_VM_386_H__
|
---|---|---|---|
2 | #define __SYS_VM_386_H__
|
||
3 | /*
|
||
4 | i386/vm.h
|
||
5 | */
|
||
6 | |||
7 | #define I386_PAGE_SIZE 4096 |
||
8 | #define I386_BIG_PAGE_SIZE (I386_PAGE_SIZE*I386_VM_PT_ENTRIES)
|
||
9 | |||
10 | /* i386 paging constants */
|
||
11 | #define I386_VM_PRESENT 0x001 /* Page is present */ |
||
12 | #define I386_VM_WRITE 0x002 /* Read/write access allowed */ |
||
13 | #define I386_VM_READ 0x000 /* Read access only */ |
||
14 | #define I386_VM_USER 0x004 /* User access allowed */ |
||
15 | #define I386_VM_PWT 0x008 /* Write through */ |
||
16 | #define I386_VM_PCD 0x010 /* Cache disable */ |
||
17 | #define I386_VM_ACC 0x020 /* Accessed */ |
||
18 | #define I386_VM_ADDR_MASK 0xFFFFF000 /* physical address */ |
||
19 | #define I386_VM_ADDR_MASK_4MB 0xFFC00000 /* physical address */ |
||
20 | #define I386_VM_OFFSET_MASK_4MB 0x003FFFFF /* physical address */ |
||
21 | |||
22 | /* Page directory specific flags. */
|
||
23 | #define I386_VM_BIGPAGE 0x080 /* 4MB page */ |
||
24 | |||
25 | /* Page table specific flags. */
|
||
26 | #define I386_VM_DIRTY (1L<< 6) /* Dirty */ |
||
27 | #define I386_VM_PS (1L<< 7) /* Page size. */ |
||
28 | #define I386_VM_GLOBAL (1L<< 8) /* Global. */ |
||
29 | #define I386_VM_PTAVAIL1 (1L<< 9) /* Available for use. */ |
||
30 | #define I386_VM_PTAVAIL2 (1L<<10) /* Available for use. */ |
||
31 | #define I386_VM_PTAVAIL3 (1L<<11) /* Available for use. */ |
||
32 | |||
33 | #define I386_VM_PT_ENT_SIZE 4 /* Size of a page table entry */ |
||
34 | #define I386_VM_DIR_ENTRIES 1024 /* Number of entries in a page dir */ |
||
35 | #define I386_VM_DIR_ENT_SHIFT 22 /* Shift to get entry in page dir. */ |
||
36 | #define I386_VM_PT_ENT_SHIFT 12 /* Shift to get entry in page table */ |
||
37 | #define I386_VM_PT_ENT_MASK 0x3FF /* Mask to get entry in page table */ |
||
38 | #define I386_VM_PT_ENTRIES 1024 /* Number of entries in a page table */ |
||
39 | #define I386_VM_PFA_SHIFT 22 /* Page frame address shift */ |
||
40 | |||
41 | /* CR0 bits */
|
||
42 | #define I386_CR0_PE 0x00000001 /* Protected mode */ |
||
43 | #define I386_CR0_MP 0x00000002 /* Monitor Coprocessor */ |
||
44 | #define I386_CR0_EM 0x00000004 /* Emulate */ |
||
45 | #define I386_CR0_TS 0x00000008 /* Task Switched */ |
||
46 | #define I386_CR0_ET 0x00000010 /* Extension Type */ |
||
47 | #define I386_CR0_WP 0x00010000 /* Enable paging */ |
||
48 | #define I386_CR0_PG 0x80000000 /* Enable paging */ |
||
49 | |||
50 | /* some CR4 bits */
|
||
51 | #define I386_CR4_VME 0x00000001 /* Virtual 8086 */ |
||
52 | #define I386_CR4_PVI 0x00000002 /* Virtual ints */ |
||
53 | #define I386_CR4_TSD 0x00000004 /* RDTSC privileged */ |
||
54 | #define I386_CR4_DE 0x00000008 /* Debugging extensions */ |
||
55 | #define I386_CR4_PSE 0x00000010 /* Page size extensions */ |
||
56 | #define I386_CR4_PAE 0x00000020 /* Physical addr extens. */ |
||
57 | #define I386_CR4_MCE 0x00000040 /* Machine check enable */ |
||
58 | #define I386_CR4_PGE 0x00000080 /* Global page flag enable */ |
||
59 | |||
60 | /* i386 paging 'functions' */
|
||
61 | #define I386_VM_PTE(v) (((v) >> I386_VM_PT_ENT_SHIFT) & I386_VM_PT_ENT_MASK)
|
||
62 | #define I386_VM_PDE(v) ( (v) >> I386_VM_DIR_ENT_SHIFT)
|
||
63 | #define I386_VM_PFA(e) ( (e) & I386_VM_ADDR_MASK)
|
||
64 | #define I386_VM_PAGE(v) ( (v) >> I386_VM_PFA_SHIFT)
|
||
65 | |||
66 | /* i386 pagefault error code bits */
|
||
67 | #define I386_VM_PFE_P 0x01 /* Pagefault caused by non-present page. |
||
68 | * (otherwise protection violation.)
|
||
69 | */
|
||
70 | #define I386_VM_PFE_W 0x02 /* Caused by write (otherwise read) */ |
||
71 | #define I386_VM_PFE_U 0x04 /* CPU in user mode (otherwise supervisor) */ |
||
72 | |||
73 | /* CPUID flags */
|
||
74 | #define CPUID1_EDX_FPU (1L) /* FPU presence */ |
||
75 | #define CPUID1_EDX_PSE (1L << 3) /* Page Size Extension */ |
||
76 | #define CPUID1_EDX_SYSENTER (1L << 11) /* Intel SYSENTER */ |
||
77 | #define CPUID1_EDX_PAE (1L << 6) /* Physical Address Extension */ |
||
78 | #define CPUID1_EDX_PGE (1L << 13) /* Page Global (bit) Enable */ |
||
79 | #define CPUID1_EDX_APIC_ON_CHIP (1L << 9) /* APIC is present on the chip */ |
||
80 | #define CPUID1_EDX_TSC (1L << 4) /* Timestamp counter present */ |
||
81 | #define CPUID1_EDX_HTT (1L << 28) /* Supports HTT */ |
||
82 | #define CPUID1_EDX_FXSR (1L << 24) |
||
83 | #define CPUID1_EDX_SSE (1L << 25) |
||
84 | #define CPUID1_EDX_SSE2 (1L << 26) |
||
85 | #define CPUID1_ECX_SSE3 (1L) |
||
86 | #define CPUID1_ECX_SSSE3 (1L << 9) |
||
87 | #define CPUID1_ECX_SSE4_1 (1L << 19) |
||
88 | #define CPUID1_ECX_SSE4_2 (1L << 20) |
||
89 | |||
90 | #define CPUID_EF_EDX_SYSENTER (1L << 11) /* Intel SYSENTER */ |
||
91 | |||
92 | #ifndef __ASSEMBLY__
|
||
93 | |||
94 | #include <minix/type.h> |
||
95 | |||
96 | /* structure used by VM to pass data to the kernel while enabling paging */
|
||
97 | struct vm_ep_data {
|
||
98 | struct mem_map * mem_map;
|
||
99 | vir_bytes data_seg_limit; |
||
100 | }; |
||
101 | #endif
|
||
102 | |||
103 | #endif /* __SYS_VM_386_H__ */ |