diff options
-rw-r--r-- | c/src/lib/libbsp/powerpc/mvme5500/ChangeLog | 11 | ||||
-rw-r--r-- | c/src/lib/libbsp/powerpc/mvme5500/irq/GT64260Int.c | 41 | ||||
-rw-r--r-- | c/src/lib/libbsp/powerpc/mvme5500/irq/irq.c | 29 |
3 files changed, 49 insertions, 32 deletions
diff --git a/c/src/lib/libbsp/powerpc/mvme5500/ChangeLog b/c/src/lib/libbsp/powerpc/mvme5500/ChangeLog index e247dcb06c..0a256b5dd1 100644 --- a/c/src/lib/libbsp/powerpc/mvme5500/ChangeLog +++ b/c/src/lib/libbsp/powerpc/mvme5500/ChangeLog @@ -1,3 +1,14 @@ +2007-09-12 Joel Sherrill <joel.sherrill@OARcorp.com> + + PR 1257/bsps + * irq/GT64260Int.c, irq/irq.c: Code outside of cpukit should use the + public API for rtems_interrupt_disable/rtems_interrupt_enable. By + bypassing the public API and directly accessing _CPU_ISR_Disable and + _CPU_ISR_Enable, they were bypassing the compiler memory barrier + directive which could lead to problems. This patch also changes the + type of the variable passed into these routines and addresses minor + style issues. + 2007-07-23 Joel Sherrill <joel.sherrill@OARcorp.com> * start/preload.S: Fix symbolic reference. Did earlier modifications diff --git a/c/src/lib/libbsp/powerpc/mvme5500/irq/GT64260Int.c b/c/src/lib/libbsp/powerpc/mvme5500/irq/GT64260Int.c index dbb78796c8..a9daa3d2a8 100644 --- a/c/src/lib/libbsp/powerpc/mvme5500/irq/GT64260Int.c +++ b/c/src/lib/libbsp/powerpc/mvme5500/irq/GT64260Int.c @@ -110,12 +110,12 @@ static void CleanMainIrqTbl(int irqNum) */ void BSP_enable_main_irq(const rtems_irq_number irqNum) { - unsigned bitNum; - unsigned int level; + unsigned bitNum; + rtems_interrupt_level level; bitNum = ((int)irqNum) - BSP_MICL_IRQ_LOWEST_OFFSET; - _CPU_ISR_Disable(level); + rtems_interrupt_disable(level); #if DynamicIrqTbl UpdateMainIrqTbl((int) irqNum); @@ -129,7 +129,7 @@ void BSP_enable_main_irq(const rtems_irq_number irqNum) GT_MAINirqHI_cache |= (1 << bitNum); outl(GT_MAINirqHI_cache, GT_CPU_INT_MASK_HI); } - _CPU_ISR_Enable (level); + rtems_interrupt_enable(level); } /*************************************************************************** @@ -140,12 +140,12 @@ void BSP_enable_main_irq(const rtems_irq_number irqNum) */ void BSP_disable_main_irq(const rtems_irq_number irqNum) { - unsigned bitNum; - unsigned int level; + unsigned bitNum; + rtems_interrupt_level level; bitNum = ((int)irqNum) - BSP_MICL_IRQ_LOWEST_OFFSET; - _CPU_ISR_Disable(level); + rtems_interrupt_disable(level); #if DynamicIrqTbl CleanMainIrqTbl((int) irqNum); @@ -159,7 +159,7 @@ void BSP_disable_main_irq(const rtems_irq_number irqNum) GT_MAINirqHI_cache &= ~(1 << bitNum); outl(GT_MAINirqHI_cache, GT_CPU_INT_MASK_HI); } - _CPU_ISR_Enable (level); + rtems_interrupt_enable(level); } /****************************************************************************** @@ -171,13 +171,15 @@ void BSP_disable_main_irq(const rtems_irq_number irqNum) */ void BSP_enable_gpp_irq(const rtems_irq_number irqNum) { - unsigned bitNum; - unsigned int mask, level; - int group, bit; + unsigned bitNum; + unsigned int mask; + int group; + int bit; + rtems_interrupt_level level; bitNum = ((int)irqNum) - BSP_GPP_IRQ_LOWEST_OFFSET; - _CPU_ISR_Disable(level); + rtems_interrupt_disable(level); #if DynamicIrqTbl group = bitNum/8; @@ -195,7 +197,7 @@ void BSP_enable_gpp_irq(const rtems_irq_number irqNum) printk("GPP mask %d \n", inl(GT_GPP_Interrupt_Mask)); #endif - _CPU_ISR_Enable (level); + rtems_interrupt_enable(level); } /****************************************************************************** @@ -207,13 +209,16 @@ void BSP_enable_gpp_irq(const rtems_irq_number irqNum) */ void BSP_disable_gpp_irq(const rtems_irq_number irqNum) { - unsigned bitNum; - unsigned int mask, level; - int group, bit; + unsigned bitNum; + unsigned int mask; + int group; + int bit; + rtems_interrupt_level level; + bitNum = ((int)irqNum) - BSP_GPP_IRQ_LOWEST_OFFSET; - _CPU_ISR_Disable(level); + rtems_interrupt_disable(level); #if DynamicIrqTbl group = bitNum/8; bit = bitNum%8; @@ -227,7 +232,7 @@ void BSP_disable_gpp_irq(const rtems_irq_number irqNum) mask = ~ (1 << bitNum); GT_GPPirq_cache &= mask; outl(GT_GPPirq_cache, GT_GPP_Interrupt_Mask); - _CPU_ISR_Enable (level); + rtems_interrupt_enable(level); } /* Only print ten entries for now */ diff --git a/c/src/lib/libbsp/powerpc/mvme5500/irq/irq.c b/c/src/lib/libbsp/powerpc/mvme5500/irq/irq.c index 9c22dcb167..838585b9e7 100644 --- a/c/src/lib/libbsp/powerpc/mvme5500/irq/irq.c +++ b/c/src/lib/libbsp/powerpc/mvme5500/irq/irq.c @@ -247,7 +247,7 @@ static int isValidInterrupt(int irq) int BSP_install_rtems_irq_handler (const rtems_irq_connect_data* irq) { - unsigned int level; + rtems_interrupt_level level; if (!isValidInterrupt(irq->name)) { printk("Invalid interrupt vector %d\n",irq->name); @@ -260,9 +260,9 @@ int BSP_install_rtems_irq_handler (const rtems_irq_connect_data* irq) * RATIONALE : to always have the same transition by forcing the user * to get the previous handler before accepting to disconnect. */ - _CPU_ISR_Disable(level); + rtems_interrupt_disable(level); if (rtems_hdl_tbl[irq->name].hdl != default_rtems_entry.hdl) { - _CPU_ISR_Enable(level); + rtems_interrupt_enable(level); printk("IRQ vector %d already connected\n",irq->name); return 0; } @@ -299,7 +299,7 @@ int BSP_install_rtems_irq_handler (const rtems_irq_connect_data* irq) irq->on(irq);*/ - _CPU_ISR_Enable(level); + rtems_interrupt_enable(level); return 1; } @@ -316,7 +316,7 @@ int BSP_get_current_rtems_irq_handler (rtems_irq_connect_data* irq) int BSP_remove_rtems_irq_handler (const rtems_irq_connect_data* irq) { - unsigned int level; + rtems_interrupt_level level; if (!isValidInterrupt(irq->name)) { return 0; @@ -331,7 +331,7 @@ int BSP_remove_rtems_irq_handler (const rtems_irq_connect_data* irq) if (rtems_hdl_tbl[irq->name].hdl != irq->hdl) { return 0; } - _CPU_ISR_Disable(level); + rtems_interrupt_disable(level); if (is_main_irq(irq->name)) { /* @@ -361,7 +361,7 @@ int BSP_remove_rtems_irq_handler (const rtems_irq_connect_data* irq) */ rtems_hdl_tbl[irq->name] = default_rtems_entry; - _CPU_ISR_Enable(level); + rtems_interrupt_enable(level); return 1; } @@ -372,16 +372,17 @@ int BSP_remove_rtems_irq_handler (const rtems_irq_connect_data* irq) int BSP_rtems_irq_mngt_set(rtems_irq_global_settings* config) { - int i; - unsigned int level; - /* - * Store various code accelerators - */ + int i; + rtems_interrupt_level level; + + /* + * Store various code accelerators + */ internal_config = config; default_rtems_entry = config->defaultEntry; rtems_hdl_tbl = config->irqHdlTbl; - _CPU_ISR_Disable(level); + rtems_interrupt_disable(level); compute_GT64260int_masks_from_prio(); /* @@ -425,7 +426,7 @@ int BSP_rtems_irq_mngt_set(rtems_irq_global_settings* config) rtems_hdl_tbl[i].off(&rtems_hdl_tbl[i]); } } - _CPU_ISR_Enable(level); + rtems_interrupt_enable(level); return 1; } |