diff options
Diffstat (limited to 'c/src/lib/libbsp/powerpc/dmv177/startup/genpvec.c')
-rw-r--r-- | c/src/lib/libbsp/powerpc/dmv177/startup/genpvec.c | 226 |
1 files changed, 0 insertions, 226 deletions
diff --git a/c/src/lib/libbsp/powerpc/dmv177/startup/genpvec.c b/c/src/lib/libbsp/powerpc/dmv177/startup/genpvec.c deleted file mode 100644 index 82a2fdc001..0000000000 --- a/c/src/lib/libbsp/powerpc/dmv177/startup/genpvec.c +++ /dev/null @@ -1,226 +0,0 @@ -/* genpvec.c - * - * These routines handle the external exception. Multiple ISRs occur off - * of this one interrupt. This method will allow multiple ISRs to be - * called using the same IRQ index. However, removing the ISR routines is - * presently not supported. - * - * The external exception vector numbers begin with DMV170_IRQ_FIRST. - * DMV170_IRQ_FIRST is defined to be one greater than the last processor - * interrupt. - * - * COPYRIGHT (c) 1989-1999. - * On-Line Applications Research Corporation (OAR). - * - * The license and distribution terms for this file may in - * the file LICENSE in this distribution or at - * http://www.rtems.com/license/LICENSE. - * - * $Id$ - */ - -#include <bsp.h> -#include <rtems/chain.h> -#include <assert.h> - -#define NUM_LIRQ_HANDLERS 20 -#define NUM_LIRQ ( MAX_BOARD_IRQS - PPC_IRQ_LAST ) - -/* - * Structure to for one of possible multiple interrupt handlers for - * a given interrupt. - */ -typedef struct -{ - Chain_Node Node; - rtems_isr_entry handler; /* isr routine */ - rtems_vector_number vector; /* vector number */ -} EE_ISR_Type; - -/* - * Note: The following will not work if we add a method to remove - * handlers at a later time. - */ -EE_ISR_Type ISR_Nodes [NUM_LIRQ_HANDLERS]; -uint16_t Nodes_Used; -Chain_Control ISR_Array [NUM_LIRQ]; - -/*PAGE - * - * external_exception_ISR - * - * This interrupt service routine is called for an External Exception. - * - * Input parameters: - * vector - vector number representing the external exception vector. - * - * Output parameters: NONE - * - * Return values: - */ - -rtems_isr external_exception_ISR ( - rtems_vector_number vector /* IN */ -) -{ - uint16_t index; - rtems_boolean is_active=FALSE; - uint32_t scv64_status; - Chain_Node *node; - EE_ISR_Type *ee_isr; - - /* - * Get all active interrupts. - */ - scv64_status = SCV64_Get_Interrupt(); - scv64_status &= SCV64_Get_Interrupt_Enable(); - - /* - * Process any set interrupts. - */ - for (index = 0; index <= 5; index++) { - switch(index) { - case 0: - is_active = SCV64_Is_IRQ0( scv64_status ); - break; - case 1: - is_active = SCV64_Is_IRQ1( scv64_status ); - break; - case 2: - is_active = SCV64_Is_IRQ2( scv64_status ); - break; - case 3: - is_active = SCV64_Is_IRQ3( scv64_status ); - break; - case 4: - is_active = SCV64_Is_IRQ4( scv64_status ); - break; - case 5: - is_active = SCV64_Is_IRQ5( scv64_status ); - break; - } - - if (is_active) { - /* - * Read vector. - */ - node = ISR_Array[ index ].first; - while ( !_Chain_Is_tail( &ISR_Array[ index ], node ) ) { - ee_isr = (EE_ISR_Type *) node; - (*ee_isr->handler)( ee_isr->vector ); - node = node->next; - } - } - } -} - -/*PAGE - * - * initialize_external_exception_vector - * - * This routine initializes the external exception vector - * - * Input parameters: NONE - * - * Output parameters: NONE - * - * Return values: NONE - */ - -void initialize_external_exception_vector () -{ - int i; - rtems_isr_entry previous_isr; - rtems_status_code status; - extern void SCV64_Initialize( void ); - - Nodes_Used = 0; - - /* - * Initialize the SCV64 chip - */ - SCV64_Initialize(); - - for (i=0; i <NUM_LIRQ; i++) - Chain_Initialize_empty( &ISR_Array[i] ); - - /* - * Install external_exception_ISR () as the handler for - * the General Purpose Interrupt. - */ - - status = rtems_interrupt_catch( external_exception_ISR, - PPC_IRQ_EXTERNAL , (rtems_isr_entry *) &previous_isr ); - -} - -/*PAGE - * - * set_EE_vector - * - * This routine installs one of multiple ISRs for the general purpose - * inerrupt. - * - * Input parameters: - * handler - handler to call at exception - * vector - vector number associated with this handler. - * - * Output parameters: NONE - * - * Return values: - */ - -rtems_isr_entry set_EE_vector( - rtems_isr_entry handler, /* isr routine */ - rtems_vector_number vector /* vector number */ -) -{ - uint16_t vec_idx = vector - DMV170_IRQ_FIRST; - uint32_t index; - - /* - * Verify that all of the nodes have not been used. - */ - assert (Nodes_Used < NUM_LIRQ_HANDLERS); - - /* - * If we have already installed this handler for this vector, then - * just reset it. - */ - - for ( index=0 ; index <= Nodes_Used ; index++ ) { - if ( ISR_Nodes[index].vector == vector && - ISR_Nodes[index].handler == handler ) - return 0; - } - - /* - * Increment the number of nedes used and set the index for the node - * array. - */ - - Nodes_Used++; - index = Nodes_Used - 1; - - /* - * Write the values of the handler and the vector to this node. - */ - ISR_Nodes[index].handler = handler; - ISR_Nodes[index].vector = vector; - - /* - * Connect this node to the chain at the location of the - * vector index. - */ - Chain_Append( &ISR_Array[vec_idx], &ISR_Nodes[index].Node ); - - /* - * Enable the LIRQ interrupt. - */ - SCV64_Generate_DUART_Interrupts(); - - /* - * No interrupt service routine was removed so return 0 - */ - return 0; -} |