/* Author: Dayle Kotturi 2006 */ #ifdef __rtems__ #include #include #include /* for rtems_irq_connect_data, etc */ #include #include #include /* for PCI_INTERRUPT_LINE */ #include /* for bspExtMemProbe, bspExtInstallSharedISR */ #include /* for DEBUGPRINT */ #else #include #include #include #include #include #include #include #include #include #include #include #include #endif #include #include #include #include #include "devLibPMC.h" typedef struct PmcIsrArg_s { rtems_irq_connect_data ic; } PmcIsrArg_t; static void noop() {} static int noop1() {return 0;} /* Fills in the rtems_irq_hdl_param including vector, ISR, checking the pin and setting the line. NB: convention for return codes are reversed. 0 = error */ int pmc_irq_install(rtems_irq_number pciLine, rtems_irq_hdl isr, rtems_irq_hdl_param uarg) { PmcIsrArg_t d; d.ic.name = pciLine; d.ic.hdl = isr; d.ic.handle = uarg; d.ic.on = noop; d.ic.off = noop; d.ic.isOn = noop1; if ( !BSP_install_rtems_shared_irq_handler(&(d.ic)) ) { fprintf(stderr,"pmc_irq_install: ISR installation failed\n"); return ERROR; } fprintf(stderr,"pmc_irq_install: ISR installation successful\n"); return OK; } int pmc_isr_uninstall(rtems_irq_number pciLine, rtems_irq_hdl isr, rtems_irq_hdl_param uarg) { PmcIsrArg_t d; d.ic.name = pciLine; d.ic.hdl = isr; d.ic.handle = uarg; d.ic.on = noop; d.ic.off = noop; d.ic.isOn = noop1; if ( !BSP_remove_rtems_irq_handler(&d.ic) ) { fprintf(stderr,"ISR removal failed\n"); return -1; } return 0; }