--- c/src/libchip/ide/ata.c | 77 ++++++++++++---------------------------- c/src/libchip/network/dec21140.c | 52 ++++++++++----------------- 2 files changed, 40 insertions(+), 89 deletions(-)
diff --git a/c/src/libchip/ide/ata.c b/c/src/libchip/ide/ata.c index 8229714..f48205d 100644 --- a/c/src/libchip/ide/ata.c +++ b/c/src/libchip/ide/ata.c @@ -35,6 +35,7 @@ bool ata_trace; #if CPU_SIMPLE_VECTORED_INTERRUPTS != TRUE #include <rtems/irq.h> +#include <rtems/irq-extension.h> #define ATA_IRQ_CHAIN_MAX_CNT 4 /* support up to 4 ATA devices */ typedef struct { rtems_irq_number name; @@ -610,7 +611,7 @@ static rtems_isr ata_interrupt_handler(rtems_vector_number vec) } } #else -static void ata_interrupt_handler(rtems_irq_hdl_param handle) +static void ata_interrupt_handler(void * handle) { int ata_irq_chain_index = (int) handle; rtems_chain_node *the_node = @@ -637,7 +638,7 @@ static void ata_interrupt_handler(rtems_irq_hdl_param handle) } } -static void ata_interrupt_on(const rtems_irq_connect_data *ptr) +static void ata_interrupt_on(void) { /* enable ATA device interrupt */ @@ -647,42 +648,6 @@ static void ata_interrupt_on(const rtems_irq_connect_data *ptr) ); } - -static void ata_interrupt_off(const rtems_irq_connect_data *ptr) - { - - /* disable ATA device interrupt */ - ide_controller_write_register(0, - IDE_REGISTER_DEVICE_CONTROL_OFFSET, - IDE_REGISTER_DEVICE_CONTROL_nIEN - ); - } - - -static int ata_interrupt_isOn(const rtems_irq_connect_data *ptr) - { - uint16_t byte; /* emphasize that only 8 low bits is meaningful */ - - /* return int. status od ATA device */ - ide_controller_read_register(0, - IDE_REGISTER_DEVICE_CONTROL_OFFSET, - &byte - ); - - return !(byte & IDE_REGISTER_DEVICE_CONTROL_nIEN); - } - - -static rtems_irq_connect_data ata_irq_data = - { - - 0, /* filled out before use... */ - ata_interrupt_handler,/* filled out before use... */ - NULL, - ata_interrupt_on, - ata_interrupt_off, - ata_interrupt_isOn - }; #endif /* ata_pio_in_protocol -- @@ -1250,23 +1215,25 @@ rtems_ata_initialize(rtems_device_major_number major, /* * no match found, try to use new channel entry */ - if (ata_irq_chain_cnt < ATA_IRQ_CHAIN_MAX_CNT) { - ata_irq_chain_use = ata_irq_chain_cnt++; - - ata_irq_chain[ata_irq_chain_use].name = - IDE_Controller_Table[ctrl_minor].int_vec; - ata_irq_data.name = - IDE_Controller_Table[ctrl_minor].int_vec; - ata_irq_data.hdl = ata_interrupt_handler; - ata_irq_data.handle = (rtems_irq_hdl_param) ctrl_minor; - - status = ((0 == BSP_install_rtems_irq_handler(&ata_irq_data)) - ? RTEMS_INVALID_NUMBER - : RTEMS_SUCCESSFUL); - } - else { - status = RTEMS_TOO_MANY; - } + if (ata_irq_chain_cnt < ATA_IRQ_CHAIN_MAX_CNT) { + ata_irq_chain_use = ata_irq_chain_cnt++; + + ata_irq_chain[ata_irq_chain_use].name = + IDE_Controller_Table[ctrl_minor].int_vec; + + status = rtems_interrupt_handler_install( + IDE_Controller_Table[ctrl_minor].int_vec, + "ATA", + RTEMS_INTERRUPT_UNIQUE, + ata_interrupt_handler, + (void *)ctrl_minor + ); + assert(status == RTEMS_SUCCESSFUL); + ata_interrupt_on(); + } + else { + status = RTEMS_TOO_MANY; + } } #endif if (status != RTEMS_SUCCESSFUL) diff --git a/c/src/libchip/network/dec21140.c b/c/src/libchip/network/dec21140.c index 997b34c..bcf7180 100644 --- a/c/src/libchip/network/dec21140.c +++ b/c/src/libchip/network/dec21140.c @@ -74,6 +74,7 @@ #include <stdarg.h> #include <string.h> #include <errno.h> +#include <assert.h> #include <rtems/error.h> #include <rtems/bspIo.h> #include <rtems/rtems_bsdnet.h> @@ -244,7 +245,7 @@ struct dec21140_softc { struct arpcom arpcom; - rtems_irq_connect_data irqInfo; + rtems_vector_number name; rtems_event_set ioevent; int numRxbuffers, numTxbuffers; @@ -340,16 +341,6 @@ static int eeget16(volatile uint32_t *ioaddr, int location) return ( ((retval<<8)&0xff00) | ((retval>>8)&0xff) ); } -static void no_op(const rtems_irq_connect_data* irq) -{ - return; -} - -static int dec21140IsOn(const rtems_irq_connect_data* irq) -{ - return BSP_irq_enabled_at_i8259s (irq->name); -} - /* * DEC21140 interrupt handler */ @@ -378,7 +369,7 @@ dec21140Enet_interrupt_handler ( struct dec21140_softc *sc ) } static rtems_isr -dec21140Enet_interrupt_handler_entry(void) +dec21140Enet_interrupt_handler_entry(void * arg) { int i; @@ -399,7 +390,8 @@ dec21140Enet_interrupt_handler_entry(void) static void dec21140Enet_initialize_hardware (struct dec21140_softc *sc) { - int i,st; + int i; + rtems_status_code status; volatile uint32_t *tbase; volatile unsigned char *cp, *setup_frm, *eaddrs; volatile unsigned char *buffer; @@ -412,7 +404,7 @@ dec21140Enet_initialize_hardware (struct dec21140_softc *sc) sc->arpcom.ac_enaddr[2], sc->arpcom.ac_enaddr[3], sc->arpcom.ac_enaddr[4], sc->arpcom.ac_enaddr[5], sc->arpcom.ac_if.if_name, sc->arpcom.ac_if.if_unit, - sc->port, (unsigned) sc->base, sc->irqInfo.name ); + sc->port, (unsigned) sc->base, sc->name ); #endif tbase = sc->base; @@ -536,22 +528,18 @@ dec21140Enet_initialize_hardware (struct dec21140_softc *sc) sc->TxMD = rmd+1; - sc->irqInfo.hdl = (rtems_irq_hdl)dec21140Enet_interrupt_handler_entry; - sc->irqInfo.on = no_op; - sc->irqInfo.off = no_op; - sc->irqInfo.isOn = dec21140IsOn; - #ifdef DEC_DEBUG - printk( "dec2114x: Installing IRQ %d\n", sc->irqInfo.name ); -#endif -#ifdef BSP_SHARED_HANDLER_SUPPORT - st = BSP_install_rtems_shared_irq_handler( &sc->irqInfo ); -#else - st = BSP_install_rtems_irq_handler( &sc->irqInfo ); + printk( "dec2114x: Installing IRQ %d\n", sc->name ); #endif - if (!st) - rtems_panic ("dec2114x : Interrupt name %d already in use\n", sc->irqInfo.name ); + status = rtems_interrupt_handler_install( + sc->name, + "DEC21140", + RTEMS_INTERRUPT_UNIQUE, + dec21140Enet_interrupt_handler_entry, + NULL + ); + assert(status == RTEMS_SUCCESSFUL); } static void @@ -668,7 +656,7 @@ sendpacket (struct ifnet *ifp, struct mbuf *m) /* * Driver transmit daemon */ -void +static void dec21140_txDaemon (void *arg) { struct dec21140_softc *sc; @@ -735,10 +723,7 @@ dec21140_init (void *arg) /* * Set up DEC21140 hardware if its not already been done */ - if( !sc->irqInfo.hdl ) - { - dec21140Enet_initialize_hardware (sc); - } + dec21140Enet_initialize_hardware (sc); /* * Enable RX and TX @@ -1020,8 +1005,7 @@ rtems_dec21140_driver_attach (struct rtems_bsdnet_ifconfig *config, int attach) ** Store the interrupt name, we'll use it later when we initialize ** the board. */ - memset(&sc->irqInfo,0,sizeof(rtems_irq_connect_data)); - sc->irqInfo.name = cvalue; + sc->name = cvalue; #ifdef DEC_DEBUG -- 1.7.11.7 _______________________________________________ rtems-devel mailing list rtems-devel@rtems.org http://www.rtems.org/mailman/listinfo/rtems-devel