From 03261851a10dd2d6900a0a00a7515a0a46fb5d76 Mon Sep 17 00:00:00 2001 From: Ranjith Kumaran Date: Fri, 17 Mar 2000 22:48:54 +0000 Subject: 20000317 sourceware import --- libgloss/mips/jmr3904-io.c | 104 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 libgloss/mips/jmr3904-io.c (limited to 'libgloss/mips/jmr3904-io.c') diff --git a/libgloss/mips/jmr3904-io.c b/libgloss/mips/jmr3904-io.c new file mode 100644 index 000000000..8d4300739 --- /dev/null +++ b/libgloss/mips/jmr3904-io.c @@ -0,0 +1,104 @@ + + +#define READ_UINT8( _register_, _value_ ) \ + ((_value_) = *((volatile unsigned char *)(_register_))) + +#define WRITE_UINT8( _register_, _value_ ) \ + (*((volatile unsigned char *)(_register_)) = (_value_)) + + /* - Board specific addresses for serial chip */ +#define DIAG_BASE 0xfffff300 +#define DIAG_SLCR (DIAG_BASE+0x00) +#define DIAG_SLSR (DIAG_BASE+0x04) +#define DIAG_SLDICR (DIAG_BASE+0x08) +#define DIAG_SLDISR (DIAG_BASE+0x0C) +#define DIAG_SFCR (DIAG_BASE+0x10) +#define DIAG_SBRG (DIAG_BASE+0x14) +#define DIAG_TFIFO (DIAG_BASE+0x20) +#define DIAG_RFIFO (DIAG_BASE+0x30) + +#define BRG_T0 0x0000 +#define BRG_T2 0x0100 +#define BRG_T4 0x0200 +#define BRG_T5 0x0300 + + +#define READ_UINT16( _register_, _value_ ) \ + ((_value_) = *((volatile unsigned short *)(_register_))) + +#define WRITE_UINT16( _register_, _value_ ) \ + (*((volatile unsigned short *)(_register_)) = (_value_)) + +unsigned char +inbyte (void) +{ + unsigned char c; + unsigned short disr; + + for (;;) + { + READ_UINT16 (DIAG_SLDISR, disr); + if (disr & 0x0001) + break; + } + disr = disr & ~0x0001; + READ_UINT8 (DIAG_RFIFO, c); + WRITE_UINT16 (DIAG_SLDISR, disr); + return c; +} + +void +outbyte (unsigned char c) +{ + unsigned short disr; + + for (;;) + { + READ_UINT16 (DIAG_SLDISR, disr); + if (disr & 0x0002) + break; + } + disr = disr & ~0x0002; + WRITE_UINT8 (DIAG_TFIFO, c); + WRITE_UINT16 (DIAG_SLDISR, disr); +} + +/* Stuff required to setup IO on this board */ +void board_serial_init (void) +{ + WRITE_UINT16 (DIAG_SLCR, 0x0020); + WRITE_UINT16 (DIAG_SLDICR, 0x0000); + WRITE_UINT16 (DIAG_SFCR, 0x0000); + WRITE_UINT16 (DIAG_SBRG, BRG_T2 | 5); +} + +/* If you want this to be initialized as part of the stuff which gets called + by crt0, it should be named 'hardware_init_hook'. + Local implementations may want to move or add to this function OR + do the initializations after main() is entered. +*/ +void hardware_init_hook(void) +{ + board_serial_init() ; +} + +/* Structure filled in by get_mem_info. Only the size field is + actually used (by sbrk), so the others aren't even filled in. */ + +struct s_mem +{ + unsigned int size; + unsigned int icsize; + unsigned int dcsize; +}; + +/* mem_size is provided in the linker script so that we don't have to + define it here. */ +extern char _mem_size[]; + +void +get_mem_info (mem) + struct s_mem *mem; +{ + mem->size = (unsigned int)_mem_size; +} -- cgit v1.2.3