Chicken and egg problem, solved
[tpg/acess2.git] / Kernel / arch / x86_64 / include / mm_virt.h
1 /*
2  * Acess2 x86_64 Architecture Code
3  *
4  * This file is published under the terms of the Acess Licence.
5  * See the file COPYING for more details
6  *
7  * vmem.h - Virtual Memory Functions & Definitions
8  */
9 #ifndef _VMEM_H_
10 #define _VMEM_H_
11
12 #include <arch.h>
13
14 // === Memory Location Definitions ===
15 /*
16  * Userland - Lower Half
17  * Kernel land - Upper Half
18  * 
19  *    START ADDRESS          END ADDRESS       BITS   SIZE      NAME
20  * 0x00000000 00000000 - 0x00007FFF FFFFFFFF    47      128 TiB User Space
21  * 0x00008000 00000000 - 0xFFFF7FFF FFFFFFFF    --- SIGN EXTENSION NULL ZONE
22  * 0xFFFF8000 00000000 - 0xFFFFFFFF FFFFFFFF    47      128 TiB Kernel Range
23  *       8000 00000000 -       8000 7FFFFFFF    31      2   GiB Identity Map
24  *       8000 80000000 -       9000 00000000    ~44     16  TiB Kernel Heap
25  *       9000 00000000 -       9800 00000000    43      8   TiB Module Space
26  *       9800 00000000 -       9A00 00000000    41      2   TiB Kernel VFS
27  *       A000 00000000 -       B000 00000000    44      16  TiB Kernel Stacks
28  *       C000 00000000 -       D000 00000000    44      16  TiB Hardware Mappings
29  *       D000 00000000 -       D080 00000000    39      512     GiB     Per-Process Data
30  *       D080 00000000 -       D100 00000000    39      512     GiB     Kernel Supplied User Code
31  *       E000 00000000 -       E400 00000000    42      4       TiB     Physical Page Reference Counts (2**40 = 2**52 bytes)
32  *       E400 00000000 -       E480 00000000    39      512     GiB     Physical Page Bitmap (1 page per bit)
33  *       E480 00000000 -       E500 00000000    39      512     GiB     Physical Page DblAlloc Bitmap (1 page per bit)
34  *       E500 00000000 -       E500 80000000    31      2       GiB     Physical Page Super Bitmap (64 pages per bit)
35  *       FD00 00000000 -       FD80 00000000    39      512 GiB Local APIC
36  *       FE00 00000000 -       FE80 00000000    39      512 GiB Fractal Mapping (PML4 510)
37  *       FE80 00000000 -       FF00 00000000    39      512 GiB Temp Fractal Mapping
38  */
39
40 #define MM_USER_MIN     0x00000000##00010000
41 #define USER_LIB_MAX    0x00007000##00000000
42 #define USER_STACK_SZ   0x00000000##00020000    // 64 KiB
43 #define USER_STACK_TOP  0x00007FFF##FFFFF000
44 #define MM_USER_MAX     0x00007FFF##FFFFF000
45 //#define       KERNEL_BASE     0xFFFF8000##00000000
46 #define MM_KHEAP_BASE   (KERNEL_BASE|(0x8000##80000000))
47 #define MM_KHEAP_MAX    (KERNEL_BASE|(0x9000##00000000))
48 #define MM_MODULE_MIN   (KERNEL_BASE|(0x9000##00000000))
49 #define MM_MODULE_MAX   (KERNEL_BASE|(0x9800##00000000))
50 #define MM_KERNEL_VFS   (KERNEL_BASE|(0x9800##00000000))
51 #define MM_KSTACK_BASE  (KERNEL_BASE|(0xA000##00000000))
52 #define MM_KSTACK_TOP   (KERNEL_BASE|(0xB000##00000000))
53
54 #define MM_HWMAP_BASE   (KERNEL_BASE|(0xC000##00000000))
55 #define MM_HWMAP_TOP    (KERNEL_BASE|(0xD000##00000000))
56 #define MM_PPD_BASE     (KERNEL_BASE|(0xD000##00000000))
57 #define MM_PPD_CFG      MM_PPD_BASE
58 #define MM_PPD_VFS      (KERNEL_BASE|(0xD008##00000000))
59 #define MM_USER_CODE    (KERNEL_BASE|(0xD080##00000000))
60
61 #define MM_PAGE_COUNTS  (KERNEL_BASE|(0xE000##00000000))
62 #define MM_PAGE_BITMAP  (KERNEL_BASE|(0xE400##00000000))
63 #define MM_PAGE_DBLBMP  (KERNEL_BASE|(0xE480##00000000))
64 #define MM_PAGE_SUPBMP  (KERNEL_BASE|(0xE500##00000000))
65
66 #define MM_LOCALAPIC    (KERNEL_BASE|(0xFD00##00000000))
67 #define MM_FRACTAL_BASE (KERNEL_BASE|(0xFE00##00000000))
68 #define MM_TMPFRAC_BASE (KERNEL_BASE|(0xFE80##00000000))
69
70
71 // === FUNCTIONS ===
72 void    MM_FinishVirtualInit(void);
73 tVAddr  MM_NewKStack(void);
74 tVAddr  MM_Clone(void);
75 tVAddr  MM_NewWorkerStack(void);
76
77 #endif

UCC git Repository :: git.ucc.asn.au