diff options
Diffstat (limited to 'c/src/lib/libbsp/powerpc/dmv177/css_iface/css_iface.c')
-rw-r--r-- | c/src/lib/libbsp/powerpc/dmv177/css_iface/css_iface.c | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/powerpc/dmv177/css_iface/css_iface.c b/c/src/lib/libbsp/powerpc/dmv177/css_iface/css_iface.c new file mode 100644 index 0000000000..f46782f2b0 --- /dev/null +++ b/c/src/lib/libbsp/powerpc/dmv177/css_iface/css_iface.c @@ -0,0 +1,149 @@ +#include <Css.h> + +rtems_unsigned32 Css_Id( + rtems_vector_number vector /* vector number */ +) +{ + rtems_unsigned32 id; + + switch ( vector ) { + case DMV170_DUART_IRQ: + case DMV170_ETHERNET_IRQ: + case DMV170_SCSI_IRQ: + case DMV170_SCC_IRQ: + id = CSS_DARF_INT; + break; + + case DMV170_MEZZANINE_IRQ: + id = CSS_MAXPACK_INT; + break; + + case DMV170_TICK_IRQ: + id = CSS_TICK_INT; + break; + + case DMV170_LOCATION_MON_IRQ: + id = CSS_LM_INT; + break; + + case DMV170_SCV64_IRQ: + id = CSS_SCV_VME_INT; + break; + + case DMV170_RTC_IRQ: + id = CSS_RTC_INT; + break; + } + + return id; +} + +rtems_vector_number Vector_id( + rtems_unsigned32 id +) +{ + rtems_vector_number vector; + + switch ( id ) { + case CSS_ACFAIL_INT: + vector = DMV170_ACFAIL_IRQ; + break; + case CSS_SYSFAIL_INT: + vector = DMV170_SYSFAIL_IRQ; + break; + case CSS_WATCHDOG_INT: + vector = DMV170_WATCHDOG_IRQ; + break; + case CSS_BI_INT: + vector = DMV170_BI_IRQ; + break; + case CSS_LM_INT: + vector = DMV170_LOCATION_MON_IRQ; + break; + case CSS_TICK_INT: + vector = DMV170_TICK_IRQ; + break; + case CSS_DARF_INT: + vector = DMV170_DUART_IRQ; + break; + case CSS_RAM_PARITY_INT: + vector = DMV170_RAM_PARITY_IRQ; + break; + case CSS_DARF_BUS_ERROR: + vector = DMV170_DARF_BUS_ERROR_IRQ; + break; + case CSS_PERIPHERAL_INT: + vector = DMV170_PERIPHERAL_IRQ; + break; + case CSS_MAXPACK_INT: + vector = DMV170_MEZZANINE_IRQ_0;assert(0); + break; + case CSS_SCV_VME_INT: + vector = DMV170_MEZZANINE_IRQ_1;assert(0); + break; + case CSS_RTC_INT: + vector = DMV170_RTC_IRQ; + break; + } + + return vector; +} + +void enable_card_interrupt( + rtems_vector_number vector /* vector number */ +) +{ + rtems_unsigned32 Id; + Id = Css_Id(vector); + + Enable_int(Id); +} + +rtems_vector_number Get_interrupt() +{ + rtems_vector_number vector; + rtems_unsigned32 id; + + if ( Get_int_status(CSS_ACFAIL_INT) ) + vector = DMV170_ACFAIL_IRQ; + else if ( Get_int_status( CSS_SYSFAIL_INT) ) + vector = DMV170_SYSFAIL_IRQ; + else if ( Get_int_status( CSS_WATCHDOG_INT) ) + vector = DMV170_WATCHDOG_IRQ; + else if ( Get_int_status( CSS_BI_INT) ) + vector = DMV170_BI_IRQ; + else if ( Get_int_status( CSS_LM_INT) ) + vector = DMV170_LOCATION_MON_IRQ; + else if ( Get_int_status( CSS_TICK_INT) ) + vector = DMV170_TICK_IRQ; + else if ( Get_int_status( CSS_DARF_INT) ) + vector = DMV170_DUART_IRQ; + else if ( Get_int_status( CSS_RAM_PARITY_INT) ) + vector = DMV170_RAM_PARITY_IRQ; + else if ( Get_int_status( CSS_DARF_BUS_ERROR) ) + vector = DMV170_DARF_BUS_ERROR_IRQ; + else if ( Get_int_status( CSS_PERIPHERAL_INT) ) + vector = DMV170_PERIPHERAL_IRQ; + else if ( Get_int_status( CSS_MAXPACK_INT) ) { + vector = DMV170_MEZZANINE_IRQ_0; + assert(0); + } + else if ( Get_int_status( CSS_SCV_VME_INT) ) { + vector = DMV170_MEZZANINE_IRQ_1; + assert(0); + } + else if ( Get_int_status( CSS_RTC_INT) ) + vector = DMV170_RTC_IRQ; + + return vector; +} + +void Clear_interrupt( + rtems_vector_number vector +) +{ + rtems_unsigned32 Id; + Id = Css_Id(vector); + + Clear_int(Id); +} |