* mvme5500/irq/irq.h, psim/irq/irq.h, shared/console/uart.c,
	shared/irq/irq.h: Renamed BSP_ISA_UART_COMx_IRQ -> BSP_UART_COMx_IRQ
    (uart driver is ISA independent).
    Removed ugly #ifdef mvme2100. Added test for
	BSP_UART_USE_SHARED_IRQS symbol which a BSP can define to request
	that the serial interrupt be shared.
This commit is contained in:
Till Straumann
2005-11-04 00:23:28 +00:00
parent 0ac68b0354
commit f3173c08dd
4 changed files with 29 additions and 15 deletions

View File

@@ -110,8 +110,8 @@
#define BSP_MAIN_GPP31_24_IRQ (BSP_MICH_IRQ_LOWEST_OFFSET+27) #define BSP_MAIN_GPP31_24_IRQ (BSP_MICH_IRQ_LOWEST_OFFSET+27)
/* on the MVME5500, these are the GT64260B external GPP0 interrupt */ /* on the MVME5500, these are the GT64260B external GPP0 interrupt */
#define BSP_ISA_UART_COM2_IRQ (BSP_GPP_IRQ_LOWEST_OFFSET) #define BSP_UART_COM2_IRQ (BSP_GPP_IRQ_LOWEST_OFFSET)
#define BSP_ISA_UART_COM1_IRQ (BSP_GPP_IRQ_LOWEST_OFFSET) #define BSP_UART_COM1_IRQ (BSP_GPP_IRQ_LOWEST_OFFSET)
#define BSP_GPP8_IRQ_OFFSET (BSP_GPP_IRQ_LOWEST_OFFSET+8) #define BSP_GPP8_IRQ_OFFSET (BSP_GPP_IRQ_LOWEST_OFFSET+8)
#define BSP_GPP_PMC1_INTA (BSP_GPP8_IRQ_OFFSET) #define BSP_GPP_PMC1_INTA (BSP_GPP8_IRQ_OFFSET)
#define BSP_GPP16_IRQ_OFFSET (BSP_GPP_IRQ_LOWEST_OFFSET+16) #define BSP_GPP16_IRQ_OFFSET (BSP_GPP_IRQ_LOWEST_OFFSET+16)

View File

@@ -105,9 +105,9 @@
#define BSP_ISA_KEYBOARD (1) #define BSP_ISA_KEYBOARD (1)
#define BSP_ISA_UART_COM2_IRQ (3) #define BSP_UART_COM2_IRQ (3)
#define BSP_ISA_UART_COM1_IRQ (4) #define BSP_UART_COM1_IRQ (4)
#define BSP_ISA_RT_TIMER1 (8) #define BSP_ISA_RT_TIMER1 (8)

View File

@@ -21,6 +21,7 @@
struct uart_data struct uart_data
{ {
unsigned long ioBase; unsigned long ioBase;
int irq;
int hwFlow; int hwFlow;
int baud; int baud;
BSP_UartBreakCbRec breakCallback; BSP_UartBreakCbRec breakCallback;
@@ -41,15 +42,19 @@ static struct uart_data uart_data[2] = {
{ {
#ifdef BSP_UART_IOBASE_COM1 #ifdef BSP_UART_IOBASE_COM1
BSP_UART_IOBASE_COM1, BSP_UART_IOBASE_COM1,
BSP_UART_COM1_IRQ,
#else #else
UART_UNSUPP, UART_UNSUPP,
-1,
#endif #endif
}, },
{ {
#ifdef BSP_UART_IOBASE_COM2 #ifdef BSP_UART_IOBASE_COM2
BSP_UART_IOBASE_COM2, BSP_UART_IOBASE_COM2,
BSP_UART_COM2_IRQ,
#else #else
UART_UNSUPP, UART_UNSUPP,
-1,
#endif #endif
}, },
}; };
@@ -136,6 +141,12 @@ BSP_uart_init(int uart, int baud, int hwFlow)
/* Sanity check */ /* Sanity check */
SANITY_CHECK(uart); SANITY_CHECK(uart);
/* Make sure any printk activity drains before
* re-initializing.
*/
while ( ! (uread(uart, LSR) & THRE) )
;
switch(baud) switch(baud)
{ {
case 50: case 50:
@@ -460,12 +471,9 @@ uart_isr_is_on(const rtems_irq_connect_data *irq)
{ {
int uart; int uart;
#if defined(mvme2100) uart = (irq->name == BSP_UART_COM1_IRQ) ?
uart = BSP_UART_COM1;
#else
uart = (irq->name == BSP_ISA_UART_COM1_IRQ) ?
BSP_UART_COM1 : BSP_UART_COM2; BSP_UART_COM1 : BSP_UART_COM2;
#endif
return uread(uart,IER); return uread(uart,IER);
} }
@@ -473,12 +481,7 @@ static int
doit(int uart, rtems_irq_hdl handler, int (*p)(const rtems_irq_connect_data*)) doit(int uart, rtems_irq_hdl handler, int (*p)(const rtems_irq_connect_data*))
{ {
rtems_irq_connect_data d={0}; rtems_irq_connect_data d={0};
#if defined(mvme2100) d.name = uart_data[uart].irq;
d.name = BSP_UART_COM1_IRQ;
#else
d.name = (uart == BSP_UART_COM1) ?
BSP_ISA_UART_COM1_IRQ : BSP_ISA_UART_COM2_IRQ;
#endif
d.off = d.on = uart_noop; d.off = d.on = uart_noop;
d.isOn = uart_isr_is_on; d.isOn = uart_isr_is_on;
d.hdl = handler; d.hdl = handler;
@@ -488,7 +491,15 @@ doit(int uart, rtems_irq_hdl handler, int (*p)(const rtems_irq_connect_data*))
int int
BSP_uart_install_isr(int uart, rtems_irq_hdl handler) BSP_uart_install_isr(int uart, rtems_irq_hdl handler)
{ {
/* Using shared interrupts by default might break things.. the
* shared IRQ installer uses malloc() and if a BSP had called this
* during early init it might not work...
*/
#ifdef BSP_UART_USE_SHARED_IRQS
return doit(uart, handler, BSP_install_rtems_shared_irq_handler);
#else
return doit(uart, handler, BSP_install_rtems_irq_handler); return doit(uart, handler, BSP_install_rtems_irq_handler);
#endif
} }
int int

View File

@@ -130,6 +130,9 @@ extern "C" {
#define BSP_UART_COM1_IRQ (BSP_PCI_IRQ_LOWEST_OFFSET + 13) #define BSP_UART_COM1_IRQ (BSP_PCI_IRQ_LOWEST_OFFSET + 13)
#define BSP_FRONT_PANEL_ABORT_IRQ (BSP_PCI_IRQ_LOWEST_OFFSET + 14) #define BSP_FRONT_PANEL_ABORT_IRQ (BSP_PCI_IRQ_LOWEST_OFFSET + 14)
#define BSP_RTC_IRQ (BSP_PCI_IRQ_LOWEST_OFFSET + 15) #define BSP_RTC_IRQ (BSP_PCI_IRQ_LOWEST_OFFSET + 15)
#else
#define BSP_UART_COM1_IRQ BSP_ISA_UART_COM1_IRQ
#define BSP_UART_COM2_IRQ BSP_ISA_UART_COM2_IRQ
#endif #endif
/* /*