summaryrefslogtreecommitdiff
path: root/os/ks32/io.h
diff options
context:
space:
mode:
authorCharles.Forsyth <devnull@localhost>2006-12-22 21:39:35 +0000
committerCharles.Forsyth <devnull@localhost>2006-12-22 21:39:35 +0000
commit74a4d8c26dd3c1e9febcb717cfd6cb6512991a7a (patch)
treec6e220ba61db3a6ea4052e6841296d829654e664 /os/ks32/io.h
parent46439007cf417cbd9ac8049bb4122c890097a0fa (diff)
20060303
Diffstat (limited to 'os/ks32/io.h')
-rw-r--r--os/ks32/io.h168
1 files changed, 168 insertions, 0 deletions
diff --git a/os/ks32/io.h b/os/ks32/io.h
new file mode 100644
index 00000000..5e172140
--- /dev/null
+++ b/os/ks32/io.h
@@ -0,0 +1,168 @@
+/*
+ * Memory Map for Samsung ks32c50100
+ */
+
+#define SFRbase 0x7ff0000
+
+#define SYSCFG (*(ulong *)(SFRbase + 0))
+
+#define IOPbase (SFRbase + 0x5000)
+#define IOPMOD (*(ulong *)(IOPbase + 0))
+#define IOPCON (*(ulong *)(IOPbase + 4))
+#define IOPDATA (*(ulong *)(IOPbase + 8))
+
+#define MaxIRQbit 20 /* Maximum IRQ */
+#define EXT0bit 0
+#define EXT1bit 1
+#define EXT2bit 2
+#define EXT3bit 3
+#define UART0TXbit 4
+#define UART0RXbit 5
+#define UART1TXbit 6
+#define UART1RXbit 7
+#define GDMA0 8
+#define GDMA1 9
+#define TIMER0bit 10
+#define TIMER1bit 11
+#define HDLCATXbit 12
+#define HDLCARXbit 13
+#define HDLCBTXbit 14
+#define HDLCBRXbit 15
+#define ETHBDMATXbit 16
+#define ETHBDMARXbit 17
+#define ETHMACRXint 18
+#define ETHMAXTXint 19
+#define IICbit 20
+
+#define TIMERbit(n) (TIMER0bit + n)
+#define UARTTXbit(n) (UART0TXbit + (n) * 2)
+#define UARTRXbit(n) (UART0RXbit + (n) * 2)
+
+/*
+ * Interrupt controller
+ */
+
+#define INTbase (SFRbase + 0x4000)
+#define INTREG ((IntReg *)INTbase)
+
+typedef struct IntReg IntReg;
+struct IntReg {
+ ulong mod; /* 00 */
+ ulong pnd; /* 04 */
+ ulong msk; /* 08 */
+ ulong pri[6]; /* 0c */
+ ulong offset; /* 24 */
+ ulong pndpri; /* 28 */
+ ulong pndtst; /* 2c */
+ ulong oset_fiq; /* 30 */
+ ulong oset_irq; /* 34 */
+};
+
+/*
+ * UARTs
+ */
+#define UART0base (SFRbase + 0xd000)
+#define UART1base (SFRbase + 0xe000)
+#define UARTREG ((UartReg *)UART0base)
+
+typedef struct UartReg UartReg;
+struct UartReg {
+ ulong lcon; /* 00 */
+ ulong con; /* 04 */
+ ulong stat; /* 08 */
+ ulong txbuf; /* 0c */
+ ulong rxbuf; /* 10 */
+ ulong brdiv; /* 14 */
+ ulong pad[(UART1base - UART0base - 0x18) / 4];
+};
+
+#define ULCON_WLMASK 0x03
+#define ULCON_WL5 0x00
+#define ULCON_WL6 0x01
+#define ULCON_WL7 0x02
+#define ULCON_WL8 0x03
+
+#define ULCON_STOPMASK 0x04
+#define ULCON_STOP1 0x00
+#define ULCON_STOP2 0x04
+
+#define ULCON_PMDMASK 0x38
+#define ULCON_PMDNONE 0x00
+#define ULCON_PMDODD (4 << 3)
+#define ULCON_PMDEVEN (5 << 3)
+#define ULCON_PMDFORCE1 (6 << 3)
+#define ULCON_PMDFORCE0 (7 << 3)
+
+#define ULCON_CLOCKMASK 0x40
+#define ULCON_CLOCKMCLK 0x00
+#define ULCON_CLOCKUCLK (1 << 6)
+
+#define ULCON_IRMASK 0x80
+#define ULCON_IROFF 0x00
+#define ULCON_IRON 0x80
+
+#define UCON_RXMDMASK 0x03
+#define UCON_RXMDOFF 0x00
+#define UCON_RXMDINT 0x01
+#define UCON_RXMDGDMA0 0x02
+#define UCON_RXMDGDMA1 0x03
+
+#define UCON_SINTMASK 0x04
+#define UCON_SINTOFF 0x00
+#define UCON_SINTON 0x04
+
+#define UCON_TXMDMASK 0x18
+#define UCON_TXMDOFF (0 << 3)
+#define UCON_TXMDINT (1 << 3)
+#define UCON_TXMDGDMA0 (2 << 3)
+#define UCON_TXMDGDMA1 (3 << 3)
+
+#define UCON_DSRMASK 0x20
+#define UCON_DSRON (1 << 5)
+#define UCON_DSROFF (0 << 5)
+
+#define UCON_BRKMASK 0x40
+#define UCON_BRKON (1 << 6)
+#define UCON_BRKOFF (0 << 6)
+
+#define UCON_LOOPMASK 0x80
+#define UCON_LOOPON 0x80
+#define UCON_LOOPOFF 0x00
+
+#define USTAT_OV 0x01
+#define USTAT_PE 0x02
+#define USTAT_FE 0x04
+#define USTAT_BKD 0x08
+#define USTAT_DTR 0x10
+#define USTAT_RDR 0x20
+#define USTAT_TBE 0x40
+#define USTAT_TC 0x80
+
+/*
+ * Timers
+ */
+#define TIMERbase (SFRbase + 0x6000)
+#define TIMERREG ((TimerReg *)TIMERbase)
+
+typedef struct TimerReg TimerReg;
+struct TimerReg {
+ ulong mod;
+ ulong data[2];
+ ulong cnt[2];
+};
+
+/*
+ * PC compatibility support for PCMCIA drivers
+ */
+
+extern ulong ins(ulong); /* return ulong to prevent unecessary compiler shifting */
+void outs(ulong, int);
+#define inb(addr) (*((uchar*)(addr)))
+#define inl(addr) (*((ulong*)(addr)))
+ulong ins(ulong);
+#define outb(addr, val) *((uchar*)(addr)) = (val)
+#define outl(addr, val) *((ulong*)(addr)) = (val)
+
+void inss(ulong, void*, int);
+void outss(ulong, void*, int);
+