interrupts, timers, under construction
[rpikern] / src / rpi.c
index 68f07e6..ec18e96 100644 (file)
--- a/src/rpi.c
+++ b/src/rpi.c
@@ -1,70 +1,12 @@
 #include <stdio.h>
 #include <stdarg.h>
 #include "rpi.h"
+#include "rpi_ioreg.h"
 #include "sysctl.h"
 #include "asm.h"
 #include "serial.h"
 #include "debug.h"
 
-#define IOREG(offs)            (*(volatile uint32_t*)(rpi_iobase | offs))
-
-/* System timer */
-#define STM_CTL_REG            IOREG(0x3000)
-#define STM_STAT_REG   STM_CTL_REG
-#define STM_LCNT_REG   IOREG(0x3004)
-#define STM_HCNT_REG   IOREG(0x3008)
-#define STM_CMP0_REG   IOREG(0x300c)
-#define STM_CMP1_REG   IOREG(0x3010)
-#define STM_CMP2_REG   IOREG(0x3014)
-#define STM_CMP3_REG   IOREG(0x3018)
-
-#define STMCTL_M0              1
-#define STMCTL_M1              2
-#define STMCTL_M2              4
-#define STMCTL_M3              8
-
-/* TIMER */
-#define TM_LOAD_REG            IOREG(0xb400)
-#define TM_VALUE_REG   IOREG(0xb404)
-#define TM_CTL_REG             IOREG(0xb408)
-#define TM_ICLR_REG            IOREG(0xb40c)
-#define TM_IRAW_REG            IOREG(0xb410)
-#define TM_IMSK_REG            IOREG(0xb414)
-#define TM_RELOAD_REG  IOREG(0xb418)
-#define TM_PREDIV_REG  IOREG(0xb41c)
-#define TM_COUNT_REG   IOREG(0xb420)
-
-#define TMCTL_23BIT            0x000002
-#define TMCTL_DIV16            0x000004
-#define TMCTL_DIV256   0x000008
-#define TMCTL_DIV1             0x00000c
-#define TMCTL_IEN              0x000020
-#define TMCTL_EN               0x000080
-#define TMCTL_DBGHALT  0x000100
-#define TMCTL_CNTEN            0x000200
-
-#define TMCTL_PRESCALER(x)     (((uint32_t)(x) & 0xff) << 16)
-
-/* watchdog */
-#define PM_RSTC_REG            IOREG(0x10001c)
-#define PM_WDOG_REG            IOREG(0x100024)
-
-#define PM_PASSWD                      0x5a000000
-#define PMRSTC_WRCFG_FULL_RESET        0x00000020
-#define PMRSTC_WRCFG_CLEAR             0xffffffcf
-
-/* MAILBOX */
-#define MBOX_READ_REG  IOREG(0xb880)
-#define MBOX_POLL_REG  IOREG(0xb890)
-#define MBOX_SENDER_REG        IOREG(0xb894)
-#define MBOX_STATUS_REG        IOREG(0xb898)
-#define MBOX_CFG_REG   IOREG(0xb89c)
-#define MBOX_WRITE_REG IOREG(0xb8a0)
-
-/* the full bit is set when there's no space to append messages */
-#define MBOX_STAT_FULL 0x80000000
-/* the empty bit is set when there are no pending messages to be read */
-#define MBOX_STAT_EMPTY        0x40000000
 
 static int detect(void);