]> git.lizzy.rs Git - plan9front.git/blob - sys/src/9/xen/mem.h
kernel: move devether and wifi to port/
[plan9front.git] / sys / src / 9 / xen / mem.h
1 /*
2  * Memory and machine-specific definitions.  Used in C and assembler.
3  */
4
5 #define MIN(a, b)       ((a) < (b)? (a): (b))
6 #define MAX(a, b)       ((a) > (b)? (a): (b))
7
8 /*
9  * Sizes
10  */
11 #define BI2BY           8                       /* bits per byte */
12 #define BI2WD           32                      /* bits per word */
13 #define BY2WD           4                       /* bytes per word */
14 #define BY2V            8                       /* bytes per double word */
15 #define BY2PG           4096                    /* bytes per page */
16 #define WD2PG           (BY2PG/BY2WD)           /* words per page */
17 #define PGSHIFT         12                      /* log(BY2PG) */
18 #define ROUND(s, sz)    (((s)+((sz)-1))&~((sz)-1))
19 #define PGROUND(s)      ROUND(s, BY2PG)
20 #define BLOCKALIGN      8
21 #define FPalign         16                      /* required for FXSAVE */
22
23 #define MAXMACH         8                       /* max # cpus system can run */
24 #define MAX_VIRT_CPUS   MAXMACH
25 #define KSTACK          4096                    /* Size of kernel stack */
26
27 /*
28  * Time
29  */
30 #define HZ              (100)                   /* clock frequency */
31 #define MS2HZ           (1000/HZ)               /* millisec per clock tick */
32 #define TK2SEC(t)       ((t)/HZ)                /* ticks to seconds */
33
34 /*
35  * Fundamental addresses
36  */
37 #define REBOOTADDR      0x00001000              /* reboot code - physical address */
38 #define APBOOTSTRAP     0x80001000              /* AP bootstrap code */
39 #define MACHADDR        0x80002000              /* as seen by current processor */
40 #define CPU0MACH        MACHADDR                /* Mach for bootstrap processor */
41 #define XENCONSOLE      0x80003000              /* xen console ring */
42 #define XENSHARED       0x80004000              /* xen shared page */
43 #define XENBUS          0x80005000              /* xenbus aka xenstore ring */
44 #define XENGRANTTAB     0x80006000              /* grant table */
45
46 #define MACHSIZE        BY2PG
47
48 /*
49  *  Address spaces
50  *
51  *  User is at 0-2GB
52  *  Kernel is at 2GB-4GB
53  */
54 #define UZERO           0                       /* base of user address space */
55 #define UTZERO          (UZERO+BY2PG)           /* first address in user text */
56 #define UTROUND(t)      ROUNDUP((t), BY2PG)
57 #define KZERO           0x80000000              /* base of kernel address space */
58 #define KTZERO          0x80010000              /* first address in kernel text */
59 #define USTKTOP         (KZERO-BY2PG)           /* byte just beyond user stack */
60 #define USTKSIZE        (16*1024*1024)          /* size of user stack */
61 #define TSTKTOP         (USTKTOP-USTKSIZE)      /* end of new stack in sysexec */
62 #define TSTKSIZ         100
63
64 /*
65  *  known x86 segments (in GDT) and their selectors
66  *  using the selectors that xen gives us.
67  */
68 #define KESEL FLAT_KERNEL_CS
69 #define KDSEL FLAT_KERNEL_DS
70 #define UESEL FLAT_USER_CS
71 #define UDSEL FLAT_USER_DS
72
73 #define NPROCSEG        1       /* number of per process descriptors */
74
75 /*
76  *  virtual MMU
77  */
78 #define PTEMAPMEM       (1024*1024)     
79 #define PTEPERTAB       (PTEMAPMEM/BY2PG)
80 #define SEGMAPSIZE      1984
81 #define SSEGMAPSIZE     16
82 #define PPN(x)          ((x)&~(BY2PG-1))
83 #define PGOFF(x)                ((x)&(BY2PG-1))
84
85 /*
86  *  physical MMU
87  */
88 #define PTEVALID        (1<<0)
89 #define PTEWT           (1<<3)
90 #define PTEUNCACHED     (1<<4)
91 #define PTEWRITE        (1<<1)
92 #define PTERONLY        (0<<1)
93 #define PTEKERNEL       (0<<2)
94 #define PTEUSER         (1<<2)
95 #define PTESIZE         (1<<7)
96 #define PTEGLOBAL       (1<<8)
97
98 /*
99  * Macros for calculating offsets within the page directory base
100  * and page tables. 
101  */
102 #define PAX(va)         (paemode? ((ulong)(va)>>29) & 0x6 : 0)
103 #define PDX(va)         (paemode? (((ulong)(va))>>20) & 0x03FE : (((ulong)(va))>>22) & 0x03FF)
104 #define PTX(va)         (paemode? (((ulong)(va))>>11) & 0x03FE : (((ulong)(va))>>12) & 0x03FF)
105 #define PDB(pdb,va)     (paemode? KADDR(MAPPN((pdb)[((ulong)(va)>>29) & 0x6])) : pdb)
106
107 #define getpgcolor(a)   0