summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--c/src/lib/libbsp/powerpc/mvme5500/ChangeLog11
-rw-r--r--c/src/lib/libbsp/powerpc/mvme5500/irq/GT64260Int.c41
-rw-r--r--c/src/lib/libbsp/powerpc/mvme5500/irq/irq.c29
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;
}