]> git.lizzy.rs Git - plan9front.git/blob - sys/src/9/bcm64/mem.h
audiohda: fix syntax error
[plan9front.git] / sys / src / 9 / bcm64 / mem.h
1 /*
2  * Memory and machine-specific definitions.  Used in C and assembler.
3  */
4 #define KiB             1024u                   /* Kibi 0x0000000000000400 */
5 #define MiB             1048576u                /* Mebi 0x0000000000100000 */
6 #define GiB             1073741824u             /* Gibi 000000000040000000 */
7
8 /*
9  * Sizes:
10  *      L0      L1      L2      L3
11  *      4K      2M      1G      512G
12  *      16K     32M     64G     128T
13  *      64K     512M    4T      -
14  */
15 #define PGSHIFT         16              /* log(BY2PG) */
16 #define BY2PG           (1ULL<<PGSHIFT) /* bytes per page */
17 #define ROUND(s, sz)    (((s)+(sz-1))&~(sz-1))
18 #define PGROUND(s)      ROUND(s, BY2PG)
19
20 /* effective virtual address space */
21 #define EVASHIFT        34
22 #define EVAMASK         ((1ULL<<EVASHIFT)-1)
23
24 #define PTSHIFT         (PGSHIFT-3)
25 #define PTLEVELS        (((EVASHIFT-PGSHIFT)+PTSHIFT-1)/PTSHIFT)        
26 #define PTLX(v, l)      ((((v) & EVAMASK) >> (PGSHIFT + (l)*PTSHIFT)) & ((1 << PTSHIFT)-1))
27 #define PGLSZ(l)        (1ULL << (PGSHIFT + (l)*PTSHIFT))
28
29 #define PTL1X(v, l)     (L1TABLEX(v, l) | PTLX(v, l))
30 #define L1TABLEX(v, l)  (L1TABLE(v, l) << PTSHIFT)
31 #define L1TABLES        ((-KSEG0+PGLSZ(2)-1)/PGLSZ(2))
32 #define L1TABLE(v, l)   (L1TABLES - ((PTLX(v, 2) % L1TABLES) >> (((l)-1)*PTSHIFT)) + (l)-1)
33 #define L1TOPSIZE       (1ULL << (EVASHIFT - PTLEVELS*PTSHIFT))
34
35 #define MAXMACH         4                       /* max # cpus system can run */
36 #define MACHSIZE        (8*KiB)
37
38 #define KSTACK          (8*KiB)
39 #define STACKALIGN(sp)  ((sp) & ~7)             /* bug: assure with alloc */
40 #define TRAPFRAMESIZE   (38*8)
41
42 #define KSEG0           (0xFFFFFFFC00000000ULL)
43
44 #define KMAP            (0xFFFFFFFC00000000ULL)
45 #define KMAPEND         (0xFFFFFFFF00000000ULL)
46
47 #define FRAMEBUFFER     (0xFFFFFFFFA0000000ULL|PTEWT)
48
49 #define VMAP            (0xFFFFFFFFB0000000ULL)
50
51 #define VIRTIO2         (0xFFFFFFFFBC000000ULL) /* 0x7C000000   -               0xFC000000 */
52 #define VIRTIO1         (0xFFFFFFFFBD000000ULL) /* 0x7D000000   -               0xFD000000 */
53 #define VIRTIO          (0xFFFFFFFFBE000000ULL) /* 0x7E000000   0x3F000000      0xFE000000 */
54 #define ARMLOCAL        (0xFFFFFFFFBF800000ULL) /* -            0x40000000      0xFF800000 */
55
56 #define VGPIO           (0xFFFFFFFFBF900000ULL|PTEUNCACHED)     /* virtual gpio for pi3 ACT LED */
57
58 #define KZERO           (0xFFFFFFFFC0000000ULL) /* kernel address space */
59
60 #define SPINTABLE       (KZERO+0xd8)
61 #define CONFADDR        (KZERO+0x100)
62 #define REBOOTADDR      (0x1c00)                /* reboot code - physical address */
63 #define VCBUFFER        (KZERO+0x3400)          /* videocore mailbox buffer */
64
65 #define L1              (L1TOP-L1SIZE)
66 #define L1SIZE          ((L1TABLES+PTLEVELS-2)*BY2PG)
67 #define L1TOP           ((MACHADDR(MAXMACH-1)-L1TOPSIZE)&-BY2PG)
68
69 #define MACHADDR(n)     (KTZERO-((n)+1)*MACHSIZE)
70
71 #define KTZERO          (KZERO+0x80000)         /* kernel text start */
72
73 #define UZERO           0ULL                    /* user segment */
74 #define UTZERO          (UZERO+0x10000)         /* user text start */
75 #define USTKTOP         ((EVAMASK>>1)-0xFFFF)   /* user segment end +1 */
76 #define USTKSIZE        (16*1024*1024)          /* user stack size */
77
78 #define BLOCKALIGN      64                      /* only used in allocb.c */
79
80 /*
81  * Sizes
82  */
83 #define BI2BY           8                       /* bits per byte */
84 #define BY2SE           4
85 #define BY2WD           8
86 #define BY2V            8                       /* only used in xalloc.c */
87
88 #define PTEMAPMEM       (1024*1024)
89 #define PTEPERTAB       (PTEMAPMEM/BY2PG)
90 #define SEGMAPSIZE      8192
91 #define SSEGMAPSIZE     16
92 #define PPN(x)          ((x)&~(BY2PG-1))
93
94 #define SHARE_NONE      0
95 #define SHARE_OUTER     2
96 #define SHARE_INNER     3
97
98 #define CACHE_UC        0
99 #define CACHE_WB        1
100 #define CACHE_WT        2
101 #define CACHE_WB_NA     3
102
103 #define MA_MEM_WB       0
104 #define MA_MEM_WT       1
105 #define MA_MEM_UC       2
106 #define MA_DEV_nGnRnE   3
107 #define MA_DEV_nGnRE    4
108 #define MA_DEV_nGRE     5
109 #define MA_DEV_GRE      6
110
111 #define PTEVALID        1
112 #define PTEBLOCK        0
113 #define PTETABLE        2
114 #define PTEPAGE         2
115
116 #define PTEMA(x)        ((x)<<2)
117 #define PTEAP(x)        ((x)<<6)
118 #define PTESH(x)        ((x)<<8)
119
120 #define PTEAF           (1<<10)
121 #define PTENG           (1<<11)
122 #define PTEPXN          (1ULL<<53)
123 #define PTEUXN          (1ULL<<54)
124
125 #define PTEKERNEL       PTEAP(0)
126 #define PTEUSER         PTEAP(1)
127 #define PTEWRITE        PTEAP(0)
128 #define PTERONLY        PTEAP(2)
129 #define PTENOEXEC       (PTEPXN|PTEUXN)
130
131 #define PTECACHED       PTEMA(MA_MEM_WB)
132 #define PTEWT           PTEMA(MA_MEM_WT)
133 #define PTEUNCACHED     PTEMA(MA_MEM_UC)
134 #define PTEDEVICE       PTEMA(MA_DEV_nGnRE)
135
136 /*
137  * Physical machine information from here on.
138  *      PHYS addresses as seen from the arm cpu.
139  *      BUS  addresses as seen from the videocore gpu.
140  */
141 #define PHYSDRAM        0
142
143 #define MIN(a, b)       ((a) < (b)? (a): (b))
144 #define MAX(a, b)       ((a) > (b)? (a): (b))