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