diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2011-02-15 23:25:24 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2011-02-15 23:25:24 +0000 |
commit | d1e10fe67f9cea1475c35b15a0f249d18499bc23 (patch) | |
tree | 4855ede66be7d41e3d7a8f857ab8de7bb185f916 /c | |
parent | 2011-02-15 Joel Sherrill <joel.sherrill@oarcorp.com> (diff) | |
download | rtems-d1e10fe67f9cea1475c35b15a0f249d18499bc23.tar.bz2 |
2011-02-15 Jennifer Averett
* libchip/serial/ns16550.c, libchip/serial/ns16550_p.h: Support i386
style IRQs.
Diffstat (limited to 'c')
-rw-r--r-- | c/src/ChangeLog | 5 | ||||
-rw-r--r-- | c/src/libchip/serial/ns16550.c | 31 | ||||
-rw-r--r-- | c/src/libchip/serial/ns16550_p.h | 2 |
3 files changed, 30 insertions, 8 deletions
diff --git a/c/src/ChangeLog b/c/src/ChangeLog index bb65f300e9..95354bb8e7 100644 --- a/c/src/ChangeLog +++ b/c/src/ChangeLog @@ -1,3 +1,8 @@ +2011-02-15 Jennifer Averett + + * libchip/serial/ns16550.c, libchip/serial/ns16550_p.h: Support i386 + style IRQs. + 2011-02-11 Ralf Corsépius <ralf.corsepius@rtems.org> * libchip/network/smc91111config.h: 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 <bsp/irq.h> #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 } diff --git a/c/src/libchip/serial/ns16550_p.h b/c/src/libchip/serial/ns16550_p.h index 6e328ef06e..44a459f8f5 100644 --- a/c/src/libchip/serial/ns16550_p.h +++ b/c/src/libchip/serial/ns16550_p.h @@ -27,7 +27,7 @@ extern "C" { * will show up in the symbol table. */ -#define NS16550_STATIC static +#define NS16550_STATIC #define NS16550_RECEIVE_BUFFER 0 #define NS16550_TRANSMIT_BUFFER 0 |