forked from Imagelibrary/rtems
2007-12-08 Till Straumann <strauman@slac.stanford.edu>
* irq_supp.h: was moved from libbsp/powerpc/shared/irq to libcpu/powerpc/new-exceptions/bspsupport.
This commit is contained in:
@@ -1,3 +1,8 @@
|
||||
2007-12-08 Till Straumann <strauman@slac.stanford.edu>
|
||||
|
||||
* irq_supp.h: was moved from libbsp/powerpc/shared/irq to
|
||||
libcpu/powerpc/new-exceptions/bspsupport.
|
||||
|
||||
2007-12-08 Till Straumann <strauman@slac.stanford.edu>
|
||||
|
||||
* new-exceptions/bspsupport/irq.c,
|
||||
|
||||
108
c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/irq_supp.h
Normal file
108
c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/irq_supp.h
Normal file
@@ -0,0 +1,108 @@
|
||||
/*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in found in the file LICENSE in this distribution or at
|
||||
* http://www.rtems.com/license/LICENSE.
|
||||
*
|
||||
* $Id$
|
||||
*/
|
||||
|
||||
#ifndef IRQ_SHARED_IRQ_C_GLUE_H
|
||||
#define IRQ_SHARED_IRQ_C_GLUE_H
|
||||
/*
|
||||
* This header describes the routines that are needed by the shared
|
||||
* version of 'irq.c' (implementing the RTEMS irq API). They
|
||||
* must be provided by the BSP.
|
||||
*
|
||||
* The license and distribution terms for this file may be
|
||||
* found in found in the file LICENSE in this distribution or at
|
||||
* http://www.rtems.com/license/LICENSE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef BSP_SHARED_HANDLER_SUPPORT
|
||||
#define BSP_SHARED_HANDLER_SUPPORT 1
|
||||
#endif
|
||||
|
||||
#include <rtems.h>
|
||||
#include <stdint.h>
|
||||
#include <rtems/irq.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*
|
||||
* PIC-independent functions to enable/disable interrupt lines at
|
||||
* the pic.
|
||||
*
|
||||
* NOTE: the routines must ignore requests for enabling/disabling
|
||||
* interrupts that are outside of the range handled by the
|
||||
* PIC(s).
|
||||
*/
|
||||
extern void BSP_enable_irq_at_pic(const rtems_irq_number irqLine);
|
||||
/*
|
||||
* RETURNS: nonzero (> 0 ) if irq was enabled originally, zero if irq
|
||||
* was off and negative value if there was an error.
|
||||
*/
|
||||
extern int BSP_disable_irq_at_pic(const rtems_irq_number irqLine);
|
||||
|
||||
/*
|
||||
* Initialize the PIC.
|
||||
* Return nonzero on success, zero on failure (which will be treated
|
||||
* as fatal by the manager).
|
||||
*/
|
||||
extern int BSP_setup_the_pic(rtems_irq_global_settings* config);
|
||||
|
||||
struct _BSP_Exception_frame;
|
||||
|
||||
/* IRQ dispatcher to be defined by the PIC driver; note that it MUST
|
||||
* implement shared interrupts.
|
||||
* Note also that the exception frame passed to this handler is not very
|
||||
* meaningful. Only the volatile registers and vector info are stored.
|
||||
*
|
||||
*******************************************************************
|
||||
* The routine must return zero if the interrupt was handled. If a
|
||||
* nonzero value is returned the dispatcher may panic and flag an
|
||||
* uncaught exception.
|
||||
*******************************************************************
|
||||
*/
|
||||
int C_dispatch_irq_handler (struct _BSP_Exception_frame *frame, unsigned int excNum);
|
||||
|
||||
/*
|
||||
* Snippet to be used by PIC drivers;
|
||||
* enables interrupts, traverses list of
|
||||
* shared handlers for a given interrupt
|
||||
* and restores original irq level
|
||||
*/
|
||||
|
||||
static inline void
|
||||
bsp_irq_dispatch_list(
|
||||
rtems_irq_connect_data *tbl,
|
||||
unsigned irq,
|
||||
rtems_irq_hdl sentinel
|
||||
)
|
||||
{
|
||||
register uint32_t l_orig;
|
||||
|
||||
l_orig = _ISR_Get_level();
|
||||
|
||||
/* Enable all interrupts */
|
||||
_ISR_Set_level(0);
|
||||
|
||||
rtems_irq_connect_data* vchain;
|
||||
for( vchain = &tbl[irq];
|
||||
((int)vchain != -1 && vchain->hdl != sentinel);
|
||||
vchain = (rtems_irq_connect_data*)vchain->next_handler )
|
||||
{
|
||||
vchain->hdl(vchain->handle);
|
||||
}
|
||||
|
||||
/* Restore original level */
|
||||
_ISR_Set_level(l_orig);
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user