]> git.lizzy.rs Git - plan9front.git/blob - sys/src/9/xen/mem.h
audiosb16: cleanup audioprobe(), cast ISAConf.port to ulong
[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
62 /*
63  *  known x86 segments (in GDT) and their selectors
64  *  using the selectors that xen gives us.
65  */
66 #define KESEL FLAT_KERNEL_CS
67 #define KDSEL FLAT_KERNEL_DS
68 #define UESEL FLAT_USER_CS
69 #define UDSEL FLAT_USER_DS
70
71 #define NPROCSEG        1       /* number of per process descriptors */
72
73 /*
74  *  virtual MMU
75  */
76 #define PTEMAPMEM       (1024*1024)     
77 #define PTEPERTAB       (PTEMAPMEM/BY2PG)
78 #define SEGMAPSIZE      1984
79 #define SSEGMAPSIZE     16
80 #define PPN(x)          ((x)&~(BY2PG-1))
81 #define PGOFF(x)                ((x)&(BY2PG-1))
82
83 /*
84  *  physical MMU
85  */
86 #define PTEVALID        (1<<0)
87 #define PTEWT           (1<<3)
88 #define PTEUNCACHED     (1<<4)
89 #define PTECACHED       (0<<4)
90 #define PTEWRITE        (1<<1)
91 #define PTERONLY        (0<<1)
92 #define PTEKERNEL       (0<<2)
93 #define PTEUSER         (1<<2)
94 #define PTESIZE         (1<<7)
95 #define PTEGLOBAL       (1<<8)
96
97 /*
98  * Macros for calculating offsets within the page directory base
99  * and page tables. 
100  */
101 #define PAX(va)         (paemode? ((ulong)(va)>>29) & 0x6 : 0)
102 #define PDX(va)         (paemode? (((ulong)(va))>>20) & 0x03FE : (((ulong)(va))>>22) & 0x03FF)
103 #define PTX(va)         (paemode? (((ulong)(va))>>11) & 0x03FE : (((ulong)(va))>>12) & 0x03FF)
104 #define PDB(pdb,va)     (paemode? KADDR(MAPPN((pdb)[((ulong)(va)>>29) & 0x6])) : pdb)
105
106 #define getpgcolor(a)   0