forked from Imagelibrary/rtems
m68k/mvme162: Fix warnings
This commit is contained in:
@@ -5,7 +5,9 @@
|
||||
*
|
||||
* To run with interrupt-driven I/O, ensure m360_smc1_interrupt
|
||||
* is set before calling the initialization routine.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* Author:
|
||||
* W. Eric Norum
|
||||
* Saskatchewan Accelerator Laboratory
|
||||
@@ -30,7 +32,7 @@
|
||||
/*
|
||||
* Declare clock speed -- may be overwritten by downloader or debugger
|
||||
*/
|
||||
int m360_clock_rate = 25000000;
|
||||
int m360_clock_rate = 25000000;
|
||||
|
||||
/*
|
||||
* Interrupt-driven input buffer
|
||||
@@ -40,7 +42,7 @@ int console_baud_rate = 9600;
|
||||
|
||||
/*
|
||||
*/
|
||||
#define RXBUFSIZE 16
|
||||
#define RXBUFSIZE 16
|
||||
|
||||
/*
|
||||
* Interrupt-driven callback
|
||||
@@ -64,15 +66,15 @@ static volatile m360BufferDescriptor_t *smcRxBd, *smcTxBd;
|
||||
static int
|
||||
smc1BRGC (int baud)
|
||||
{
|
||||
int divisor;
|
||||
int div16 = 0;
|
||||
int divisor;
|
||||
int div16 = 0;
|
||||
|
||||
divisor = ((m360_clock_rate / 16) + (baud / 2)) / baud;
|
||||
if (divisor > 4096) {
|
||||
div16 = 1;
|
||||
divisor = (divisor + 8) / 16;
|
||||
}
|
||||
return M360_BRG_EN | M360_BRG_EXTC_BRGCLK | ((divisor - 1) << 1) | div16;
|
||||
divisor = ((m360_clock_rate / 16) + (baud / 2)) / baud;
|
||||
if (divisor > 4096) {
|
||||
div16 = 1;
|
||||
divisor = (divisor + 8) / 16;
|
||||
}
|
||||
return M360_BRG_EN | M360_BRG_EXTC_BRGCLK | ((divisor - 1) << 1) | div16;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -95,165 +97,164 @@ smc1SetAttributes (int minor, const struct termios *t)
|
||||
static rtems_isr
|
||||
smc1InterruptHandler (rtems_vector_number v)
|
||||
{
|
||||
/*
|
||||
* Buffer received?
|
||||
*/
|
||||
if (m360.smc1.smce & 0x1) {
|
||||
m360.smc1.smce = 0x1;
|
||||
while ((smcRxBd->status & M360_BD_EMPTY) == 0) {
|
||||
rtems_termios_enqueue_raw_characters (smc1ttyp,
|
||||
(char *)smcRxBd->buffer,
|
||||
smcRxBd->length);
|
||||
smcRxBd->status = M360_BD_EMPTY | M360_BD_WRAP | M360_BD_INTERRUPT;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Buffer received?
|
||||
*/
|
||||
if (m360.smc1.smce & 0x1) {
|
||||
m360.smc1.smce = 0x1;
|
||||
while ((smcRxBd->status & M360_BD_EMPTY) == 0) {
|
||||
rtems_termios_enqueue_raw_characters (smc1ttyp,
|
||||
(char *)smcRxBd->buffer,
|
||||
smcRxBd->length);
|
||||
smcRxBd->status = M360_BD_EMPTY | M360_BD_WRAP | M360_BD_INTERRUPT;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Buffer transmitted?
|
||||
*/
|
||||
if (m360.smc1.smce & 0x2) {
|
||||
m360.smc1.smce = 0x2;
|
||||
if ((smcTxBd->status & M360_BD_READY) == 0)
|
||||
rtems_termios_dequeue_characters (smc1ttyp, smcTxBd->length);
|
||||
}
|
||||
m360.cisr = 1UL << 4; /* Clear SMC1 interrupt-in-service bit */
|
||||
/*
|
||||
* Buffer transmitted?
|
||||
*/
|
||||
if (m360.smc1.smce & 0x2) {
|
||||
m360.smc1.smce = 0x2;
|
||||
if ((smcTxBd->status & M360_BD_READY) == 0)
|
||||
rtems_termios_dequeue_characters (smc1ttyp, smcTxBd->length);
|
||||
}
|
||||
m360.cisr = 1UL << 4; /* Clear SMC1 interrupt-in-service bit */
|
||||
}
|
||||
|
||||
static int
|
||||
smc1Initialize (int major, int minor, void *arg)
|
||||
{
|
||||
/*
|
||||
* Allocate buffer descriptors
|
||||
*/
|
||||
smcRxBd = M360AllocateBufferDescriptors (1);
|
||||
smcTxBd = M360AllocateBufferDescriptors (1);
|
||||
/*
|
||||
* Allocate buffer descriptors
|
||||
*/
|
||||
smcRxBd = M360AllocateBufferDescriptors (1);
|
||||
smcTxBd = M360AllocateBufferDescriptors (1);
|
||||
|
||||
/*
|
||||
* Configure port B pins to enable SMTXD1 and SMRXD1 pins
|
||||
*/
|
||||
m360.pbpar |= 0xC0;
|
||||
m360.pbdir &= ~0xC0;
|
||||
m360.pbodr &= ~0xC0;
|
||||
/*
|
||||
* Configure port B pins to enable SMTXD1 and SMRXD1 pins
|
||||
*/
|
||||
m360.pbpar |= 0xC0;
|
||||
m360.pbdir &= ~0xC0;
|
||||
m360.pbodr &= ~0xC0;
|
||||
|
||||
/*
|
||||
* Set up BRG1 (9,600 baud)
|
||||
*/
|
||||
m360.brgc1 = M360_BRG_RST;
|
||||
m360.brgc1 = smc1BRGC (console_baud_rate);
|
||||
/*
|
||||
* Set up BRG1 (9,600 baud)
|
||||
*/
|
||||
m360.brgc1 = M360_BRG_RST;
|
||||
m360.brgc1 = smc1BRGC (console_baud_rate);
|
||||
|
||||
/*
|
||||
* Put SMC1 in NMSI mode, connect SMC1 to BRG1
|
||||
*/
|
||||
m360.simode |= M360_SI_SMC1_BRG1;
|
||||
/*
|
||||
* Put SMC1 in NMSI mode, connect SMC1 to BRG1
|
||||
*/
|
||||
m360.simode |= M360_SI_SMC1_BRG1;
|
||||
|
||||
/*
|
||||
* Set up SMC1 parameter RAM common to all protocols
|
||||
*/
|
||||
m360.smc1p.rbase = (char *)smcRxBd - (char *)&m360;
|
||||
m360.smc1p.tbase = (char *)smcTxBd - (char *)&m360;
|
||||
m360.smc1p.rfcr = M360_RFCR_MOT | M360_RFCR_DMA_SPACE;
|
||||
m360.smc1p.tfcr = M360_TFCR_MOT | M360_TFCR_DMA_SPACE;
|
||||
if (m360_smc1_interrupt)
|
||||
m360.smc1p.mrblr = RXBUFSIZE;
|
||||
else
|
||||
m360.smc1p.mrblr = 1;
|
||||
/*
|
||||
* Set up SMC1 parameter RAM common to all protocols
|
||||
*/
|
||||
m360.smc1p.rbase = (char *)smcRxBd - (char *)&m360;
|
||||
m360.smc1p.tbase = (char *)smcTxBd - (char *)&m360;
|
||||
m360.smc1p.rfcr = M360_RFCR_MOT | M360_RFCR_DMA_SPACE;
|
||||
m360.smc1p.tfcr = M360_TFCR_MOT | M360_TFCR_DMA_SPACE;
|
||||
if (m360_smc1_interrupt)
|
||||
m360.smc1p.mrblr = RXBUFSIZE;
|
||||
else
|
||||
m360.smc1p.mrblr = 1;
|
||||
|
||||
/*
|
||||
* Set up SMC1 parameter RAM UART-specific parameters
|
||||
*/
|
||||
m360.smc1p.un.uart.max_idl = 10;
|
||||
m360.smc1p.un.uart.brklen = 0;
|
||||
m360.smc1p.un.uart.brkec = 0;
|
||||
m360.smc1p.un.uart.brkcr = 0;
|
||||
/*
|
||||
* Set up SMC1 parameter RAM UART-specific parameters
|
||||
*/
|
||||
m360.smc1p.un.uart.max_idl = 10;
|
||||
m360.smc1p.un.uart.brklen = 0;
|
||||
m360.smc1p.un.uart.brkec = 0;
|
||||
m360.smc1p.un.uart.brkcr = 0;
|
||||
|
||||
/*
|
||||
* Set up the Receive Buffer Descriptor
|
||||
*/
|
||||
smcRxBd->status = M360_BD_EMPTY | M360_BD_WRAP | M360_BD_INTERRUPT;
|
||||
smcRxBd->length = 0;
|
||||
smcRxBd->buffer = rxBuf;
|
||||
/*
|
||||
* Set up the Receive Buffer Descriptor
|
||||
*/
|
||||
smcRxBd->status = M360_BD_EMPTY | M360_BD_WRAP | M360_BD_INTERRUPT;
|
||||
smcRxBd->length = 0;
|
||||
smcRxBd->buffer = rxBuf;
|
||||
|
||||
/*
|
||||
* Setup the Transmit Buffer Descriptor
|
||||
*/
|
||||
smcTxBd->status = M360_BD_WRAP;
|
||||
/*
|
||||
* Setup the Transmit Buffer Descriptor
|
||||
*/
|
||||
smcTxBd->status = M360_BD_WRAP;
|
||||
|
||||
/*
|
||||
* Set up SMC1 general and protocol-specific mode registers
|
||||
*/
|
||||
m360.smc1.smce = ~0; /* Clear any pending events */
|
||||
m360.smc1.smcm = 0; /* Mask all interrupt/event sources */
|
||||
m360.smc1.smcmr = M360_SMCMR_CLEN(9) | M360_SMCMR_SM_UART;
|
||||
/*
|
||||
* Set up SMC1 general and protocol-specific mode registers
|
||||
*/
|
||||
m360.smc1.smce = ~0; /* Clear any pending events */
|
||||
m360.smc1.smcm = 0; /* Mask all interrupt/event sources */
|
||||
m360.smc1.smcmr = M360_SMCMR_CLEN(9) | M360_SMCMR_SM_UART;
|
||||
|
||||
/*
|
||||
* Send "Init parameters" command
|
||||
*/
|
||||
M360ExecuteRISC (M360_CR_OP_INIT_RX_TX | M360_CR_CHAN_SMC1);
|
||||
/*
|
||||
* Send "Init parameters" command
|
||||
*/
|
||||
M360ExecuteRISC (M360_CR_OP_INIT_RX_TX | M360_CR_CHAN_SMC1);
|
||||
|
||||
/*
|
||||
* Enable receiver and transmitter
|
||||
*/
|
||||
m360.smc1.smcmr |= M360_SMCMR_TEN | M360_SMCMR_REN;
|
||||
/*
|
||||
* Enable receiver and transmitter
|
||||
*/
|
||||
m360.smc1.smcmr |= M360_SMCMR_TEN | M360_SMCMR_REN;
|
||||
|
||||
if (m360_smc1_interrupt) {
|
||||
rtems_isr_entry old_handler;
|
||||
rtems_status_code sc;
|
||||
if (m360_smc1_interrupt) {
|
||||
rtems_isr_entry old_handler;
|
||||
|
||||
sc = rtems_interrupt_catch (smc1InterruptHandler,
|
||||
(m360.cicr & 0xE0) | 0x04,
|
||||
&old_handler);
|
||||
m360.smc1.smcm = 3; /* Enable SMC1 TX and RX interrupts */
|
||||
m360.cimr |= 1UL << 4; /* Enable SMC1 interrupts */
|
||||
}
|
||||
(void) rtems_interrupt_catch (smc1InterruptHandler,
|
||||
(m360.cicr & 0xE0) | 0x04,
|
||||
&old_handler);
|
||||
m360.smc1.smcm = 3; /* Enable SMC1 TX and RX interrupts */
|
||||
m360.cimr |= 1UL << 4; /* Enable SMC1 interrupts */
|
||||
}
|
||||
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
smc1PollRead (int minor)
|
||||
{
|
||||
unsigned char c;
|
||||
unsigned char c;
|
||||
|
||||
if (smcRxBd->status & M360_BD_EMPTY)
|
||||
return -1;
|
||||
c = rxBuf[0];
|
||||
smcRxBd->status = M360_BD_EMPTY | M360_BD_WRAP;
|
||||
return c;
|
||||
if (smcRxBd->status & M360_BD_EMPTY)
|
||||
return -1;
|
||||
c = rxBuf[0];
|
||||
smcRxBd->status = M360_BD_EMPTY | M360_BD_WRAP;
|
||||
return c;
|
||||
}
|
||||
|
||||
/*
|
||||
* Device-dependent write routine
|
||||
* Interrupt-driven devices:
|
||||
* Begin transmission of as many characters as possible (minimum is 1).
|
||||
* Begin transmission of as many characters as possible (minimum is 1).
|
||||
* Polling devices:
|
||||
* Transmit all characters.
|
||||
* Transmit all characters.
|
||||
*/
|
||||
static ssize_t
|
||||
smc1InterruptWrite (int minor, const char *buf, size_t len)
|
||||
{
|
||||
if (len > 0) {
|
||||
smcTxBd->buffer = (char *)buf;
|
||||
smcTxBd->length = len;
|
||||
smcTxBd->status = M360_BD_READY | M360_BD_WRAP | M360_BD_INTERRUPT;
|
||||
}
|
||||
if (len > 0) {
|
||||
smcTxBd->buffer = (char *)buf;
|
||||
smcTxBd->length = len;
|
||||
smcTxBd->status = M360_BD_READY | M360_BD_WRAP | M360_BD_INTERRUPT;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static ssize_t
|
||||
smc1PollWrite (int minor, const char *buf, size_t len)
|
||||
{
|
||||
size_t retval = len;
|
||||
while (len--) {
|
||||
static char txBuf;
|
||||
while (smcTxBd->status & M360_BD_READY)
|
||||
continue;
|
||||
txBuf = *buf++;
|
||||
smcTxBd->buffer = &txBuf;
|
||||
smcTxBd->length = 1;
|
||||
smcTxBd->status = M360_BD_READY | M360_BD_WRAP;
|
||||
}
|
||||
return retval;
|
||||
size_t retval = len;
|
||||
while (len--) {
|
||||
static char txBuf;
|
||||
while (smcTxBd->status & M360_BD_READY)
|
||||
continue;
|
||||
txBuf = *buf++;
|
||||
smcTxBd->buffer = &txBuf;
|
||||
smcTxBd->length = 1;
|
||||
smcTxBd->status = M360_BD_READY | M360_BD_WRAP;
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -277,20 +278,20 @@ rtems_device_driver console_initialize(
|
||||
void *arg
|
||||
)
|
||||
{
|
||||
rtems_status_code status;
|
||||
rtems_status_code status;
|
||||
|
||||
/*
|
||||
* Set up TERMIOS
|
||||
*/
|
||||
rtems_termios_initialize ();
|
||||
/*
|
||||
* Set up TERMIOS
|
||||
*/
|
||||
rtems_termios_initialize ();
|
||||
|
||||
/*
|
||||
* Register the device
|
||||
*/
|
||||
status = rtems_io_register_name ("/dev/console", major, 0);
|
||||
if (status != RTEMS_SUCCESSFUL)
|
||||
rtems_fatal_error_occurred (status);
|
||||
return RTEMS_SUCCESSFUL;
|
||||
/*
|
||||
* Register the device
|
||||
*/
|
||||
status = rtems_io_register_name ("/dev/console", major, 0);
|
||||
if (status != RTEMS_SUCCESSFUL)
|
||||
rtems_fatal_error_occurred (status);
|
||||
return RTEMS_SUCCESSFUL;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -302,41 +303,41 @@ rtems_device_driver console_open(
|
||||
void * arg
|
||||
)
|
||||
{
|
||||
rtems_status_code sc;
|
||||
static const rtems_termios_callbacks intrCallbacks = {
|
||||
smc1Initialize, /* firstOpen */
|
||||
NULL, /* lastClose */
|
||||
NULL, /* pollRead */
|
||||
smc1InterruptWrite, /* write */
|
||||
smc1SetAttributes, /* setAttributes */
|
||||
NULL, /* stopRemoteTx */
|
||||
NULL, /* startRemoteTx */
|
||||
1 /* outputUsesInterrupts */
|
||||
};
|
||||
static const rtems_termios_callbacks pollCallbacks = {
|
||||
smc1Initialize, /* firstOpen */
|
||||
NULL, /* lastClose */
|
||||
smc1PollRead, /* pollRead */
|
||||
smc1PollWrite, /* write */
|
||||
smc1SetAttributes, /* setAttributes */
|
||||
NULL, /* stopRemoteTx */
|
||||
NULL, /* startRemoteTx */
|
||||
0 /* outputUsesInterrupts */
|
||||
};
|
||||
rtems_status_code sc;
|
||||
static const rtems_termios_callbacks intrCallbacks = {
|
||||
smc1Initialize, /* firstOpen */
|
||||
NULL, /* lastClose */
|
||||
NULL, /* pollRead */
|
||||
smc1InterruptWrite, /* write */
|
||||
smc1SetAttributes, /* setAttributes */
|
||||
NULL, /* stopRemoteTx */
|
||||
NULL, /* startRemoteTx */
|
||||
1 /* outputUsesInterrupts */
|
||||
};
|
||||
static const rtems_termios_callbacks pollCallbacks = {
|
||||
smc1Initialize, /* firstOpen */
|
||||
NULL, /* lastClose */
|
||||
smc1PollRead, /* pollRead */
|
||||
smc1PollWrite, /* write */
|
||||
smc1SetAttributes, /* setAttributes */
|
||||
NULL, /* stopRemoteTx */
|
||||
NULL, /* startRemoteTx */
|
||||
0 /* outputUsesInterrupts */
|
||||
};
|
||||
|
||||
/*
|
||||
* Do generic termios initialization
|
||||
*/
|
||||
if (m360_smc1_interrupt) {
|
||||
rtems_libio_open_close_args_t *args = arg;
|
||||
/*
|
||||
* Do generic termios initialization
|
||||
*/
|
||||
if (m360_smc1_interrupt) {
|
||||
rtems_libio_open_close_args_t *args = arg;
|
||||
|
||||
sc = rtems_termios_open (major, minor, arg, &intrCallbacks);
|
||||
smc1ttyp = args->iop->data1;
|
||||
}
|
||||
else {
|
||||
sc = rtems_termios_open (major, minor, arg, &pollCallbacks);
|
||||
}
|
||||
return sc;
|
||||
sc = rtems_termios_open (major, minor, arg, &intrCallbacks);
|
||||
smc1ttyp = args->iop->data1;
|
||||
}
|
||||
else {
|
||||
sc = rtems_termios_open (major, minor, arg, &pollCallbacks);
|
||||
}
|
||||
return sc;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -348,7 +349,7 @@ rtems_device_driver console_close(
|
||||
void * arg
|
||||
)
|
||||
{
|
||||
return rtems_termios_close (arg);
|
||||
return rtems_termios_close (arg);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -360,7 +361,7 @@ rtems_device_driver console_read(
|
||||
void * arg
|
||||
)
|
||||
{
|
||||
return rtems_termios_read (arg);
|
||||
return rtems_termios_read (arg);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -372,7 +373,7 @@ rtems_device_driver console_write(
|
||||
void * arg
|
||||
)
|
||||
{
|
||||
return rtems_termios_write (arg);
|
||||
return rtems_termios_write (arg);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -384,5 +385,5 @@ rtems_device_driver console_control(
|
||||
void * arg
|
||||
)
|
||||
{
|
||||
return rtems_termios_ioctl (arg);
|
||||
return rtems_termios_ioctl (arg);
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1038,7 +1038,6 @@ rtems_device_driver SciRead (
|
||||
{
|
||||
rtems_libio_rw_args_t *rw_args; /* ptr to argument struct */
|
||||
char *buffer;
|
||||
uint16_t length;
|
||||
|
||||
rw_args = (rtems_libio_rw_args_t *) arg; /* arguments to read() */
|
||||
|
||||
@@ -1054,8 +1053,6 @@ rtems_device_driver SciRead (
|
||||
|
||||
buffer = rw_args->buffer; /* points to user's buffer */
|
||||
|
||||
length = rw_args->count; /* how many bytes they want */
|
||||
|
||||
/* *buffer = SciReadCharWait(); wait for a character */
|
||||
|
||||
/* if there isn't a character available, wait until one shows up */
|
||||
@@ -1147,7 +1144,6 @@ rtems_device_driver SciControl (
|
||||
{
|
||||
rtems_libio_ioctl_args_t *args = arg; /* rtems arg struct */
|
||||
uint16_t command; /* the cmd to execute */
|
||||
uint16_t unused; /* maybe later */
|
||||
uint16_t *ptr; /* ptr to user data */
|
||||
|
||||
/*printk("%s major=%d minor=%d\r\n", __FUNCTION__,major,minor); */
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
/*
|
||||
* This file contains the MVME162 console IO package.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
*/
|
||||
|
||||
/*
|
||||
* COPYRIGHT (c) 1989-2013.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
@@ -24,19 +26,10 @@
|
||||
|
||||
Ring_buffer_t Console_Buffer[2];
|
||||
|
||||
static bool Console_Is_Initialized = false;
|
||||
|
||||
/* Printk function */
|
||||
static void _162Bug_output_char( char c );
|
||||
static void _BSP_output_char( char c );
|
||||
BSP_output_char_function_type BSP_output_char = _BSP_output_char;
|
||||
|
||||
|
||||
/*
|
||||
* Interrupt handler for receiver interrupts
|
||||
*/
|
||||
|
||||
rtems_isr C_Receive_ISR(rtems_vector_number vector)
|
||||
static rtems_isr C_Receive_ISR(rtems_vector_number vector)
|
||||
{
|
||||
register int ipend, port;
|
||||
|
||||
@@ -55,44 +48,6 @@ rtems_isr C_Receive_ISR(rtems_vector_number vector)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* _162Bug_output_char
|
||||
*
|
||||
* Output a single character using the 162Bug functions. The character
|
||||
* will be written to the default output port.
|
||||
*/
|
||||
|
||||
void _162Bug_output_char( char c )
|
||||
{
|
||||
asm volatile( "moveb %0, -(%%sp)\n\t" /* char to output */
|
||||
"trap #15\n\t" /* Trap to 162Bug */
|
||||
".short 0x20" /* Code for .OUTCHR */
|
||||
:: "d" (c) );
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* _BSP_output_char
|
||||
*
|
||||
* printk() function prototyped in bspIo.h. Does not use termios.
|
||||
*
|
||||
* If we have initialized the console device then use it, otherwise
|
||||
* use the 162Bug routines to send it to the default output port.
|
||||
*/
|
||||
|
||||
void _BSP_output_char(char c)
|
||||
{
|
||||
if (Console_Is_Initialized)
|
||||
putchar(c);
|
||||
else
|
||||
_162Bug_output_char(c);
|
||||
|
||||
if ('\n' == c)
|
||||
_BSP_output_char('\r');
|
||||
}
|
||||
|
||||
|
||||
rtems_device_driver console_initialize(
|
||||
rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
@@ -105,7 +60,6 @@ rtems_device_driver console_initialize(
|
||||
/*
|
||||
* Initialise receiver interrupts on both ports
|
||||
*/
|
||||
|
||||
for (i = 0; i <= 1; i++) {
|
||||
Ring_buffer_Initialize( &Console_Buffer[i] );
|
||||
ZWRITE(i, 2, SCC_VECTOR);
|
||||
@@ -153,7 +107,6 @@ rtems_device_driver console_initialize(
|
||||
/*
|
||||
* Non-blocking char input
|
||||
*/
|
||||
|
||||
bool char_ready(int port, char *ch)
|
||||
{
|
||||
if ( Ring_buffer_Is_empty( &Console_Buffer[port] ) )
|
||||
@@ -167,8 +120,7 @@ bool char_ready(int port, char *ch)
|
||||
/*
|
||||
* Block on char input
|
||||
*/
|
||||
|
||||
char inbyte(int port)
|
||||
static char inbyte(int port)
|
||||
{
|
||||
char tmp_char;
|
||||
|
||||
@@ -180,8 +132,7 @@ char inbyte(int port)
|
||||
* This routine transmits a character out the SCC. It no longer supports
|
||||
* XON/XOFF flow control.
|
||||
*/
|
||||
|
||||
void outbyte(char ch, int port)
|
||||
static void outbyte(char ch, int port)
|
||||
{
|
||||
while (1) {
|
||||
if (ZREAD0(port) & TX_BUFFER_EMPTY) break;
|
||||
@@ -192,7 +143,6 @@ void outbyte(char ch, int port)
|
||||
/*
|
||||
* Open entry point
|
||||
*/
|
||||
|
||||
rtems_device_driver console_open(
|
||||
rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
@@ -205,7 +155,6 @@ rtems_device_driver console_open(
|
||||
/*
|
||||
* Close entry point
|
||||
*/
|
||||
|
||||
rtems_device_driver console_close(
|
||||
rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
@@ -218,7 +167,6 @@ rtems_device_driver console_close(
|
||||
/*
|
||||
* read bytes from the serial port. We only have stdin.
|
||||
*/
|
||||
|
||||
rtems_device_driver console_read(
|
||||
rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
@@ -253,7 +201,6 @@ rtems_device_driver console_read(
|
||||
/*
|
||||
* write bytes to the serial port. Stdout and stderr are the same.
|
||||
*/
|
||||
|
||||
rtems_device_driver console_write(
|
||||
rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
@@ -287,7 +234,6 @@ rtems_device_driver console_write(
|
||||
/*
|
||||
* IO Control entry point
|
||||
*/
|
||||
|
||||
rtems_device_driver console_control(
|
||||
rtems_device_major_number major,
|
||||
rtems_device_minor_number minor,
|
||||
@@ -296,3 +242,33 @@ rtems_device_driver console_control(
|
||||
{
|
||||
return RTEMS_SUCCESSFUL;
|
||||
}
|
||||
|
||||
/*
|
||||
* _162Bug_output_char
|
||||
*
|
||||
* Output a single character using the 162Bug functions. The character
|
||||
* will be written to the default output port.
|
||||
*/
|
||||
static void _162Bug_output_char( char c )
|
||||
{
|
||||
asm volatile( "moveb %0, -(%%sp)\n\t" /* char to output */
|
||||
"trap #15\n\t" /* Trap to 162Bug */
|
||||
".short 0x20" /* Code for .OUTCHR */
|
||||
:: "d" (c) );
|
||||
}
|
||||
|
||||
/*
|
||||
* _BSP_output_char
|
||||
*
|
||||
* printk() function prototyped in bspIo.h. Does not use termios.
|
||||
*
|
||||
* If we have initialized the console device then use it, otherwise
|
||||
* use the 162Bug routines to send it to the default output port.
|
||||
*/
|
||||
static void _BSP_output_char(char c)
|
||||
{
|
||||
_162Bug_output_char(c);
|
||||
}
|
||||
|
||||
/* Printk function */
|
||||
BSP_output_char_function_type BSP_output_char = _BSP_output_char;
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
/* bsp.h
|
||||
*
|
||||
/*
|
||||
* This include file contains all MVME162fx board IO definitions.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-1999.
|
||||
*/
|
||||
|
||||
/*
|
||||
* COPYRIGHT (c) 1989-2014.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
@@ -162,7 +163,6 @@ typedef volatile struct {
|
||||
#define EXTERN extern
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* This value is the default address location of the 162Bug vector table
|
||||
* and is also the default start address of the boards DRAM. This value
|
||||
@@ -194,6 +194,12 @@ rtems_isr_entry set_vector(
|
||||
int type
|
||||
);
|
||||
|
||||
/*
|
||||
* Prototypes for methods in the BSP that cross file boundaries.
|
||||
*/
|
||||
bool char_ready(int port, char *ch);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
/*
|
||||
* This routine returns control to 162Bug.
|
||||
*
|
||||
* COPYRIGHT (c) 1989-2010.
|
||||
*/
|
||||
|
||||
/*
|
||||
* COPYRIGHT (c) 1989-2014.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
@@ -21,9 +23,9 @@
|
||||
#include <rtems/zilog/z8036.h>
|
||||
#include <page_table.h>
|
||||
|
||||
extern void start( void );
|
||||
|
||||
void bsp_return_to_monitor_trap(void)
|
||||
static rtems_isr bsp_return_to_monitor_trap(
|
||||
rtems_vector_number vector
|
||||
)
|
||||
{
|
||||
page_table_teardown();
|
||||
|
||||
@@ -32,18 +34,6 @@ void bsp_return_to_monitor_trap(void)
|
||||
|
||||
__asm__ volatile( "trap #15" ); /* trap to 162Bug */
|
||||
__asm__ volatile( ".short 0x63" ); /* return to 162Bug (.RETURN) */
|
||||
/* restart program */
|
||||
/*
|
||||
* This does not work on the 162....
|
||||
*/
|
||||
#if 0
|
||||
{ register volatile void *start_addr;
|
||||
|
||||
start_addr = start;
|
||||
|
||||
__asm__ volatile ( "jmp %0@" : "=a" (start_addr) : "0" (start_addr) );
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void bsp_fatal_extension(
|
||||
@@ -53,5 +43,5 @@ void bsp_fatal_extension(
|
||||
)
|
||||
{
|
||||
M68Kvec[ 45 ] = bsp_return_to_monitor_trap; /* install handler */
|
||||
__asm__ volatile( "trap #13" ); /* insures SUPV mode */
|
||||
__asm__ volatile( "trap #13" ); /* ensures SUPV mode */
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
uint32_t Ttimer_val;
|
||||
bool benchmark_timer_find_average_overhead;
|
||||
|
||||
rtems_isr timerisr(void);
|
||||
rtems_isr timerisr(rtems_vector_number vector);
|
||||
|
||||
void benchmark_timer_initialize(void)
|
||||
{
|
||||
|
||||
@@ -229,9 +229,8 @@ rtems_isr_entry Prev_modem_isr; /* Previous modem/timer isr */
|
||||
)
|
||||
{
|
||||
unsigned long i = 20000; /* In case clock is off */
|
||||
rtems_interval ticks_per_second, start_ticks, end_ticks, current_ticks;
|
||||
rtems_interval start_ticks, end_ticks, current_ticks;
|
||||
|
||||
ticks_per_second = rtems_clock_get_ticks_per_second();
|
||||
start_ticks = rtems_clock_get_ticks_since_boot();
|
||||
end_ticks = start_ticks + delay;
|
||||
|
||||
|
||||
@@ -31,9 +31,11 @@ rtems_isr bsp_spurious_handler(
|
||||
CPU_Interrupt_frame *isf */
|
||||
)
|
||||
{
|
||||
#if 0
|
||||
printk( "Unexpected interrupt (0x%x)\n", vector );
|
||||
#else
|
||||
char *s;
|
||||
|
||||
printk( "Unexpected interrupt (0x%x)\n", vector );
|
||||
/*
|
||||
printk( "It looks like we got the interrupt at 0x%x\n", isf->interrupted );
|
||||
*/
|
||||
@@ -41,9 +43,7 @@ rtems_isr bsp_spurious_handler(
|
||||
/*
|
||||
* Can we print a name?
|
||||
*/
|
||||
|
||||
s = 0;
|
||||
#if 0
|
||||
if ( vector <= 0x1f ) {
|
||||
switch ( vector ) {
|
||||
case 1: s = "INT0"; break;
|
||||
|
||||
Reference in New Issue
Block a user