From d1e10fe67f9cea1475c35b15a0f249d18499bc23 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Tue, 15 Feb 2011 23:25:24 +0000 Subject: 2011-02-15 Jennifer Averett * libchip/serial/ns16550.c, libchip/serial/ns16550_p.h: Support i386 style IRQs. --- c/src/libchip/serial/ns16550.c | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) (limited to 'c/src/libchip/serial/ns16550.c') diff --git a/c/src/libchip/serial/ns16550.c b/c/src/libchip/serial/ns16550.c index e6552a908a..53803f9082 100644 --- a/c/src/libchip/serial/ns16550.c +++ b/c/src/libchip/serial/ns16550.c @@ -49,6 +49,8 @@ #ifdef BSP_SHARED_HANDLER_SUPPORT #define BSP_FEATURE_IRQ_LEGACY_SHARED_HANDLER_SUPPORT #endif +#elif defined(__i386__) + #include #endif /* @@ -472,7 +474,6 @@ NS16550_STATIC int ns16550_set_attributes( return 0; } -#if defined(BSP_FEATURE_IRQ_EXTENSION) || defined(BSP_FEATURE_IRQ_LEGACY) /** * @brief Process interrupt. @@ -521,6 +522,7 @@ NS16550_STATIC void ns16550_process( int minor) } } while ((get( port, NS16550_INTERRUPT_ID) & SP_IID_0) == 0); } +#if defined(BSP_FEATURE_IRQ_EXTENSION) || defined(BSP_FEATURE_IRQ_LEGACY) #endif /** @@ -578,14 +580,12 @@ NS16550_STATIC void ns16550_enable_interrupts( (*setReg)(pNS16550, NS16550_INTERRUPT_ENABLE, mask); } -#if defined(BSP_FEATURE_IRQ_EXTENSION) || defined(BSP_FEATURE_IRQ_LEGACY) - NS16550_STATIC rtems_isr ns16550_isr(void *arg) - { + NS16550_STATIC rtems_isr ns16550_isr(void *arg) + { int minor = (int) arg; ns16550_process( minor); - } -#endif + } /* * ns16550_initialize_interrupts @@ -595,8 +595,8 @@ NS16550_STATIC void ns16550_enable_interrupts( NS16550_STATIC void ns16550_initialize_interrupts( int minor) { #if defined(BSP_FEATURE_IRQ_EXTENSION) || defined(BSP_FEATURE_IRQ_LEGACY) - console_tbl *c = &Console_Port_Tbl [minor]; #endif + console_tbl *c = &Console_Port_Tbl [minor]; console_data *d = &Console_Port_Data [minor]; d->bActive = false; @@ -648,6 +648,23 @@ NS16550_STATIC void ns16550_initialize_interrupts( int minor) rtems_fatal_error_occurred( 0xdeadbeef); } } + #elif defined(__i386__) + { + int rv = 0; + rtems_irq_connect_data cd = { + c->ulIntVector, + ns16550_isr, + (void *) minor, + NULL, + NULL, + NULL + }; + rv = BSP_install_rtems_irq_handler( &cd); + if (rv == 0) { + printk( "%s: Error: Install interrupt handler\n", __func__); + rtems_fatal_error_occurred( 0xdeadbeef); + } + } #endif } -- cgit v1.2.3