summaryrefslogtreecommitdiff
path: root/os/manga/mem.h
diff options
context:
space:
mode:
Diffstat (limited to 'os/manga/mem.h')
-rw-r--r--os/manga/mem.h133
1 files changed, 133 insertions, 0 deletions
diff --git a/os/manga/mem.h b/os/manga/mem.h
new file mode 100644
index 00000000..61296039
--- /dev/null
+++ b/os/manga/mem.h
@@ -0,0 +1,133 @@
+/*
+ * Memory and machine-specific definitions. Used in C and assembler.
+ */
+
+/*
+ * Sizes
+ */
+#define BI2BY 8 /* bits per byte */
+#define BI2WD 32 /* bits per word */
+#define BY2WD 4 /* bytes per word */
+#define BY2V 8 /* bytes per double word */
+#define BY2PG 4096 /* bytes per page */
+#define WD2PG (BY2PG/BY2WD) /* words per page */
+#define PGSHIFT 12 /* log(BY2PG) */
+#define ROUND(s, sz) (((s)+(sz-1))&~(sz-1))
+#define PGROUND(s) ROUND(s, BY2PG)
+#define BIT(n) (1<<n)
+#define BITS(a,b) ((1<<(b+1))-(1<<a))
+
+#define MAXMACH 1 /* max # cpus system can run */
+
+/*
+ * Time
+ */
+#define HZ (100) /* clock frequency */
+#define MS2HZ (1000/HZ) /* millisec per clock tick */
+#define TK2SEC(t) ((t)/HZ) /* ticks to seconds */
+#define MS2TK(t) ((t)/MS2HZ) /* milliseconds to ticks */
+
+/*
+ * More accurate time
+ */
+#define CLOCKFREQ 25000000
+#define MS2TMR(t) ((ulong)(((uvlong)(t)*CLOCKFREQ)/1000))
+#define US2TMR(t) ((ulong)(((uvlong)(t)*CLOCKFREQ)/1000000))
+
+/*
+ * Address spaces
+ * nearly everything maps 1-1 with physical addresses
+ * 0 to 1Mb is not mapped
+ * cache strategy varies as needed (see mmu.c)
+ */
+
+#define KZERO 0xC0000000
+#define MACHADDR (KZERO+0x00001000)
+#define KTTB (KZERO+0x00004000)
+#define KTZERO (KZERO+0x00008010)
+#define KSTACK 8192 /* Size of kernel stack */
+#define FLASHMEM 0x50000000 /* map flash to otherwise unused virtual space */
+#define UCDRAMZERO (KZERO+0x08000000) /* base of memory doubly-mapped as uncached */
+#define AIVECADDR 0xFFFF0000 /* alternative interrupt vector address (other is 0) */
+
+/*
+ * Physical addresses
+ */
+#define PHYSDRAM0 0x00000000 /* where firmware puts it */
+#define PHYSFLASH0 0x02800000 /* where firmware puts it */
+#define PHYSSCRINIT 0x03FF0000 /* address at reset */
+#define PHYSSCR PHYSSCRINIT /* where it ends up after manga firmware */
+#define PHYSBRIDGE (PHYSSCR+0x2000) /* PCI-AHB bridge configuration */
+#define PHYSMEMCR (PHYSSCR+0x4000) /* memory controller interface */
+#define PHYSWANDMA (PHYSSCR+0x6000) /* WAN DMA registers */
+#define PHYSLANDMA (PHYSSCR+0x8000) /* LAN DMA registers */
+#define PHYSUART (PHYSSCR+0xE000)
+#define PHYSINTR (PHYSSCR+0xE200) /* interrupt controller */
+#define PHYSTIMER (PHYSSCR+0xE400) /* timer registers */
+#define PHYSGPIO (PHYSSCR+0xE600)
+#define PHYSSWITCH (PHYSSCR+0xE800) /* switch engine configuration */
+#define PHYSMISC (PHYSSCR+0xEA00) /* ``miscellaneous'' registers */
+
+#define PHYSPCIBRIDGE 0x80000000 /* physical address that maps to PCI 0 */
+#define PHYSPCIIO 0x10000000 /* physical address that maps to PCI I/O space */
+
+#define CACHELINELOG 5
+#define CACHELINESZ (1<<CACHELINELOG)
+#define CACHESIZE (8*1024) /* I & D caches are the same size, 4 segment, 64-way associative */
+
+/*
+ * PSR
+ */
+#define PsrMusr 0x10 /* mode */
+#define PsrMfiq 0x11
+#define PsrMirq 0x12
+#define PsrMsvc 0x13
+#define PsrMabt 0x17
+#define PsrMund 0x1B
+#define PsrMsys 0x1F
+#define PsrMask 0x1F
+
+#define PsrDfiq 0x00000040 /* disable FIQ interrupts */
+#define PsrDirq 0x00000080 /* disable IRQ interrupts */
+
+#define PsrV 0x10000000 /* overflow */
+#define PsrC 0x20000000 /* carry/borrow/extend */
+#define PsrZ 0x40000000 /* zero */
+#define PsrN 0x80000000 /* negative/less than */
+
+/*
+ * Internal MMU coprocessor registers (ARM 922)
+ */
+#define CpCPUID 0 /* R: opcode_2 is 0*/
+#define CpCacheID 0 /* R: opcode_2 is 1 */
+#define CpControl 1 /* R/W: control (opcode_2 is 0) */
+#define CpTTB 2 /* R/W: translation table base */
+#define CpDAC 3 /* R/W: domain access control */
+#define CpFSR 5 /* R/W: fault status */
+#define CpFAR 6 /* R/W: fault address */
+#define CpCacheCtl 7 /* W: */
+#define CpTLBops 8 /* W: TLB operations */
+#define CpCacheLk 9 /* W: cache lock down */
+#define CpPID 13 /* R/W: Process ID Virtual Mapping */
+#define CpTest 15 /* R/W: test configuration */
+
+/*
+ * Coprocessors
+ */
+#define CpMMU 15
+
+/*
+ * CpControl bits
+ */
+#define CpCmmu (1<<0) /* M: MMU enable */
+#define CpCalign (1<<1) /* A: alignment fault enable */
+#define CpCDcache (1<<2) /* C: data cache on */
+#define CpCwpd (15<<3) /* W, P, D, must be one */
+#define CpCbe (1<<7) /* B: big-endian operation */
+#define CpCsystem (1<<8) /* S: system permission */
+#define CpCrom (1<<9) /* R: ROM permission */
+#define CpCIcache (1<<12) /* I: Instruction Cache on */
+#define CpCaltivec (1<<13) /* X: exception vector relocation */
+#define CpCrrobin (1<<14) /* RR: round robin replacement */
+#define CpCnotFast (1<<30) /* nF: notFastBus select */
+#define CpCasync (1<<31) /* iA: asynchronous clock select */