From 7deeb1684082843487c36ee1a0bb6adac1bd535b Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Mon, 22 Jun 1998 11:49:38 +0000 Subject: Added initial part of iniitialization. --- c/src/lib/libchip/serial/mc68681.c | 34 ++++++++++++++++++++++++++++------ c/src/lib/libchip/serial/mc68681.h | 10 ++++++++-- c/src/libchip/serial/mc68681.c | 34 ++++++++++++++++++++++++++++------ c/src/libchip/serial/mc68681.h | 10 ++++++++-- 4 files changed, 72 insertions(+), 16 deletions(-) (limited to 'c/src') diff --git a/c/src/lib/libchip/serial/mc68681.c b/c/src/lib/libchip/serial/mc68681.c index 1a0c36cbf1..f63e3552ab 100644 --- a/c/src/lib/libchip/serial/mc68681.c +++ b/c/src/lib/libchip/serial/mc68681.c @@ -84,6 +84,7 @@ static boolean mc68681_probe(int minor) static void mc68681_init(int minor) { /* XXX */ + unsigned32 pMC68681_port; unsigned32 pMC68681; unsigned8 ucTrash; unsigned8 ucDataByte; @@ -102,11 +103,32 @@ ulBaudDivisor = ucDataByte = ucTrash = 0; pmc68681Context->ucModemCtrl = SP_MODEM_IRQ; #endif - pMC68681 = Console_Port_Tbl[minor].ulCtrlPort1; - setReg = Console_Port_Tbl[minor].setRegister; - getReg = Console_Port_Tbl[minor].getRegister; + pMC68681_port = Console_Port_Tbl[minor].ulCtrlPort1; + pMC68681 = Console_Port_Tbl[minor].ulCtrlPort2; + setReg = Console_Port_Tbl[minor].setRegister; + getReg = Console_Port_Tbl[minor].getRegister; + + + /* + * Reset Receiver + */ + + (*setReg)( pMC68681, MC68681_COMMAND, MC68681_MODE_REG_RESET_RX ); + (*setReg)( pMC68681, MC68681_COMMAND, MC68681_MODE_REG_RESET_RX ); + + /* + * Reset Transmitter + */ + + (*setReg)( pMC68681, MC68681_COMMAND, MC68681_MODE_REG_RESET_TX ); + (*setReg)( pMC68681, MC68681_COMMAND, MC68681_MODE_REG_RESET_TX ); + + (*setReg)( pMC68681, MC68681_MODE_REG_1A, 0x00 ); + (*setReg)( pMC68681, MC68681_MODE_REG_2A, 0x02 ); + #if 0 + /* FOM NS16550 */ /* Clear the divisor latch, clear all interrupt enables, * and reset and * disable the FIFO's. @@ -208,7 +230,7 @@ static void mc68681_write_polled( * wait for transmitter holding register to be empty */ iTimeout = 1000; - ucLineStatus = (*getReg)(pMC68681, MC68681_STATUS_REG); + ucLineStatus = (*getReg)(pMC68681, MC68681_STATUS); while ((ucLineStatus & MC68681_TX_READY) == 0) { /* @@ -218,7 +240,7 @@ static void mc68681_write_polled( if(_System_state_Is_up(_System_state_Get())) { rtems_task_wake_after(RTEMS_YIELD_PROCESSOR); } - ucLineStatus = (*getReg)(pMC68681, MC68681_STATUS_REG); + ucLineStatus = (*getReg)(pMC68681, MC68681_STATUS); if(!--iTimeout) { break; } @@ -644,7 +666,7 @@ static int mc68681_inbyte_nonblocking_polled( getReg = Console_Port_Tbl[minor].getRegister; getData = Console_Port_Tbl[minor].getData; - ucLineStatus = (*getReg)(pMC68681, MC68681_STATUS_REG); + ucLineStatus = (*getReg)(pMC68681, MC68681_STATUS); if(ucLineStatus & MC68681_RX_READY) { cChar = (*getData)(pMC68681); return (int)cChar; diff --git a/c/src/lib/libchip/serial/mc68681.h b/c/src/lib/libchip/serial/mc68681.h index b092eadb1b..64b8d9800b 100644 --- a/c/src/lib/libchip/serial/mc68681.h +++ b/c/src/lib/libchip/serial/mc68681.h @@ -20,10 +20,16 @@ extern "C" { /* * These are just used in the interface between this driver and - * the read/write register routines. + * the read/write register routines when accessing the first + * control port. */ -#define MC68681_STATUS_REG 0xFF +#define MC68681_STATUS 1 +#define MC68681_RX_BUFFER 2 + +#define MC68681_CLOCK_SELECT 1 +#define MC68681_COMMAND 2 +#define MC68681_TX_BUFFER 3 /* * Driver function table diff --git a/c/src/libchip/serial/mc68681.c b/c/src/libchip/serial/mc68681.c index 1a0c36cbf1..f63e3552ab 100644 --- a/c/src/libchip/serial/mc68681.c +++ b/c/src/libchip/serial/mc68681.c @@ -84,6 +84,7 @@ static boolean mc68681_probe(int minor) static void mc68681_init(int minor) { /* XXX */ + unsigned32 pMC68681_port; unsigned32 pMC68681; unsigned8 ucTrash; unsigned8 ucDataByte; @@ -102,11 +103,32 @@ ulBaudDivisor = ucDataByte = ucTrash = 0; pmc68681Context->ucModemCtrl = SP_MODEM_IRQ; #endif - pMC68681 = Console_Port_Tbl[minor].ulCtrlPort1; - setReg = Console_Port_Tbl[minor].setRegister; - getReg = Console_Port_Tbl[minor].getRegister; + pMC68681_port = Console_Port_Tbl[minor].ulCtrlPort1; + pMC68681 = Console_Port_Tbl[minor].ulCtrlPort2; + setReg = Console_Port_Tbl[minor].setRegister; + getReg = Console_Port_Tbl[minor].getRegister; + + + /* + * Reset Receiver + */ + + (*setReg)( pMC68681, MC68681_COMMAND, MC68681_MODE_REG_RESET_RX ); + (*setReg)( pMC68681, MC68681_COMMAND, MC68681_MODE_REG_RESET_RX ); + + /* + * Reset Transmitter + */ + + (*setReg)( pMC68681, MC68681_COMMAND, MC68681_MODE_REG_RESET_TX ); + (*setReg)( pMC68681, MC68681_COMMAND, MC68681_MODE_REG_RESET_TX ); + + (*setReg)( pMC68681, MC68681_MODE_REG_1A, 0x00 ); + (*setReg)( pMC68681, MC68681_MODE_REG_2A, 0x02 ); + #if 0 + /* FOM NS16550 */ /* Clear the divisor latch, clear all interrupt enables, * and reset and * disable the FIFO's. @@ -208,7 +230,7 @@ static void mc68681_write_polled( * wait for transmitter holding register to be empty */ iTimeout = 1000; - ucLineStatus = (*getReg)(pMC68681, MC68681_STATUS_REG); + ucLineStatus = (*getReg)(pMC68681, MC68681_STATUS); while ((ucLineStatus & MC68681_TX_READY) == 0) { /* @@ -218,7 +240,7 @@ static void mc68681_write_polled( if(_System_state_Is_up(_System_state_Get())) { rtems_task_wake_after(RTEMS_YIELD_PROCESSOR); } - ucLineStatus = (*getReg)(pMC68681, MC68681_STATUS_REG); + ucLineStatus = (*getReg)(pMC68681, MC68681_STATUS); if(!--iTimeout) { break; } @@ -644,7 +666,7 @@ static int mc68681_inbyte_nonblocking_polled( getReg = Console_Port_Tbl[minor].getRegister; getData = Console_Port_Tbl[minor].getData; - ucLineStatus = (*getReg)(pMC68681, MC68681_STATUS_REG); + ucLineStatus = (*getReg)(pMC68681, MC68681_STATUS); if(ucLineStatus & MC68681_RX_READY) { cChar = (*getData)(pMC68681); return (int)cChar; diff --git a/c/src/libchip/serial/mc68681.h b/c/src/libchip/serial/mc68681.h index b092eadb1b..64b8d9800b 100644 --- a/c/src/libchip/serial/mc68681.h +++ b/c/src/libchip/serial/mc68681.h @@ -20,10 +20,16 @@ extern "C" { /* * These are just used in the interface between this driver and - * the read/write register routines. + * the read/write register routines when accessing the first + * control port. */ -#define MC68681_STATUS_REG 0xFF +#define MC68681_STATUS 1 +#define MC68681_RX_BUFFER 2 + +#define MC68681_CLOCK_SELECT 1 +#define MC68681_COMMAND 2 +#define MC68681_TX_BUFFER 3 /* * Driver function table -- cgit v1.2.3