From 8e230e6cba6ba5afc9bc84a927b0e24c7a51cdad Mon Sep 17 00:00:00 2001 From: Jennifer Averett Date: Tue, 5 May 2009 16:20:51 +0000 Subject: 2009-05-05 Jennifer Averett * new-exceptions/bspsupport/irq_supp.h: Split routine to allow bsps with nonstandard/non-existant pics to call with interrupts off. --- c/src/lib/libcpu/powerpc/ChangeLog | 5 ++++ .../powerpc/new-exceptions/bspsupport/irq_supp.h | 32 +++++++++++++++++----- 2 files changed, 30 insertions(+), 7 deletions(-) (limited to 'c/src') diff --git a/c/src/lib/libcpu/powerpc/ChangeLog b/c/src/lib/libcpu/powerpc/ChangeLog index ba5013f795..e43b4dc43d 100644 --- a/c/src/lib/libcpu/powerpc/ChangeLog +++ b/c/src/lib/libcpu/powerpc/ChangeLog @@ -1,3 +1,8 @@ +2009-05-05 Jennifer Averett + + * new-exceptions/bspsupport/irq_supp.h: Split routine to allow bsps + with nonstandard/non-existant pics to call with interrupts off. + 2009-03-12 Joel Sherrill PR 1385/cpukit diff --git a/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/irq_supp.h b/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/irq_supp.h index 5af864806b..110f00c845 100644 --- a/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/irq_supp.h +++ b/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/irq_supp.h @@ -66,6 +66,29 @@ struct _BSP_Exception_frame; */ int C_dispatch_irq_handler (struct _BSP_Exception_frame *frame, unsigned int excNum); +/* + * Snippet to be used by PIC drivers and by bsp_irq_dispatch_list + * traverses list of shared handlers for a given interrupt + * + */ + +static inline void +bsp_irq_dispatch_list_base( + rtems_irq_connect_data *tbl, + unsigned irq, + rtems_irq_hdl sentinel +) +{ + 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); + } +} + + /* * Snippet to be used by PIC drivers; * enables interrupts, traverses list of @@ -90,13 +113,8 @@ bsp_irq_dispatch_list( /* 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); - } + + bsp_irq_dispatch_list_base( tbl, irq, sentinel ); /* Restore original level */ _ISR_Set_level(l_orig); -- cgit v1.2.3