summaryrefslogtreecommitdiffstats
path: root/c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2007-12-03 22:39:46 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2007-12-03 22:39:46 +0000
commitd3b840b86942eb097df72b1c2e30bb0f82998c2a (patch)
tree74fda73d50f1e0b68d29c73e3a7b9a00dc130538 /c
parent2007-12-03 Joel Sherrill <joel.sherrill@oarcorp.com> (diff)
downloadrtems-d3b840b86942eb097df72b1c2e30bb0f82998c2a.tar.bz2
2007-12-03 Joel Sherrill <joel.sherrill@oarcorp.com>
* shared/irq/irq.c: Spacing.
Diffstat (limited to 'c')
-rw-r--r--c/src/lib/libbsp/powerpc/ChangeLog4
-rw-r--r--c/src/lib/libbsp/powerpc/shared/irq/irq.c433
2 files changed, 219 insertions, 218 deletions
diff --git a/c/src/lib/libbsp/powerpc/ChangeLog b/c/src/lib/libbsp/powerpc/ChangeLog
index af6e8f5846..025ee4ff03 100644
--- a/c/src/lib/libbsp/powerpc/ChangeLog
+++ b/c/src/lib/libbsp/powerpc/ChangeLog
@@ -1,3 +1,7 @@
+2007-12-03 Joel Sherrill <joel.sherrill@oarcorp.com>
+
+ * shared/irq/irq.c: Spacing.
+
2007-12-03 Joel Sherrill <joel.sherrill@OARcorp.com>
* shared/startup/bspstart.c: Moved most of the remaining CPU Table
diff --git a/c/src/lib/libbsp/powerpc/shared/irq/irq.c b/c/src/lib/libbsp/powerpc/shared/irq/irq.c
index d613d6bdaa..a4e868b73d 100644
--- a/c/src/lib/libbsp/powerpc/shared/irq/irq.c
+++ b/c/src/lib/libbsp/powerpc/shared/irq/irq.c
@@ -1,6 +1,7 @@
/*
*
- * This file contains the PIC-independent implementation of the functions described in irq.h
+ * This file contains the PIC-independent implementation of the
+ * functions described in irq.h
*
* Copyright (C) 1998, 1999 valette@crf.canon.fr
*
@@ -31,14 +32,14 @@ extern void decrementer_exception_vector_prolog_code();
/*
* default handler connected on each irq after bsp initialization
*/
-static rtems_irq_connect_data default_rtems_entry;
+static rtems_irq_connect_data default_rtems_entry;
/*
* location used to store initial tables used for interrupt
* management.
*/
-static rtems_irq_global_settings* internal_config;
-static rtems_irq_connect_data* rtems_hdl_tbl;
+static rtems_irq_global_settings* internal_config;
+static rtems_irq_connect_data* rtems_hdl_tbl;
/*
* ------------------------ RTEMS Irq helper functions ----------------
@@ -51,218 +52,212 @@ static rtems_irq_connect_data* rtems_hdl_tbl;
static int isValidInterrupt(int irq)
{
- if ( (irq < internal_config->irqBase) || (irq >= internal_config->irqBase + internal_config->irqNb))
+ if ( (irq < internal_config->irqBase) ||
+ (irq >= internal_config->irqBase + internal_config->irqNb))
return 0;
return 1;
}
/*
- * ------------------------ RTEMS Shared Irq Handler Mngt Routines ----------------
+ * ------------------- RTEMS Shared Irq Handler Mngt Routines ------------
*/
int BSP_install_rtems_shared_irq_handler (const rtems_irq_connect_data* irq)
{
- rtems_interrupt_level level;
- rtems_irq_connect_data* vchain;
+ rtems_interrupt_level level;
+ rtems_irq_connect_data* vchain;
- if (!isValidInterrupt(irq->name)) {
- printk("Invalid interrupt vector %d\n",irq->name);
- return 0;
- }
+ if (!isValidInterrupt(irq->name)) {
+ printk("Invalid interrupt vector %d\n",irq->name);
+ return 0;
+ }
- rtems_interrupt_disable(level);
+ rtems_interrupt_disable(level);
- if ( (int)rtems_hdl_tbl[irq->name].next_handler == -1 ) {
- rtems_interrupt_enable(level);
- printk("IRQ vector %d already connected to an unshared handler\n",irq->name);
- return 0;
- }
+ if ( (int)rtems_hdl_tbl[irq->name].next_handler == -1 ) {
+ rtems_interrupt_enable(level);
+ printk(
+ "IRQ vector %d already connected to an unshared handler\n",
+ irq->name
+ );
+ return 0;
+ }
- vchain = (rtems_irq_connect_data*)malloc(sizeof(rtems_irq_connect_data));
+ vchain = (rtems_irq_connect_data*)malloc(sizeof(rtems_irq_connect_data));
- /* save off topmost handler */
- vchain[0]= rtems_hdl_tbl[irq->name];
+ /* save off topmost handler */
+ vchain[0]= rtems_hdl_tbl[irq->name];
- /*
- * store the data provided by user
- */
- rtems_hdl_tbl[irq->name] = *irq;
+ /*
+ * store the data provided by user
+ */
+ rtems_hdl_tbl[irq->name] = *irq;
- /* link chain to new topmost handler */
- rtems_hdl_tbl[irq->name].next_handler = (void *)vchain;
+ /* link chain to new topmost handler */
+ rtems_hdl_tbl[irq->name].next_handler = (void *)vchain;
- /*
- * enable_irq_at_pic is supposed to ignore
- * requests to disable interrupts outside
- * of the range handled by the PIC
- */
- BSP_enable_irq_at_pic(irq->name);
+ /*
+ * enable_irq_at_pic is supposed to ignore
+ * requests to disable interrupts outside
+ * of the range handled by the PIC
+ */
+ BSP_enable_irq_at_pic(irq->name);
- /*
- * Enable interrupt on device
- */
- if (irq->on)
- irq->on(irq);
+ /*
+ * Enable interrupt on device
+ */
+ if (irq->on)
+ irq->on(irq);
- rtems_interrupt_enable(level);
+ rtems_interrupt_enable(level);
- return 1;
+ return 1;
}
/*
- * ------------------------ RTEMS Single Irq Handler Mngt Routines ----------------
+ * ------------------- RTEMS Single Irq Handler Mngt Routines ------------
*/
int BSP_install_rtems_irq_handler (const rtems_irq_connect_data* irq)
{
- rtems_interrupt_level level;
+ rtems_interrupt_level level;
- if (!isValidInterrupt(irq->name)) {
- printk("Invalid interrupt vector %d\n",irq->name);
- return 0;
- }
- /*
- * Check if default handler is actually connected. If not issue an error.
- * You must first get the current handler via i386_get_current_idt_entry
- * and then disconnect it using i386_delete_idt_entry.
- * RATIONALE : to always have the same transition by forcing the user
- * to get the previous handler before accepting to disconnect.
- */
- rtems_interrupt_disable(level);
- if (rtems_hdl_tbl[irq->name].hdl != default_rtems_entry.hdl) {
- rtems_interrupt_enable(level);
- printk("IRQ vector %d already connected\n",irq->name);
- return 0;
- }
+ if (!isValidInterrupt(irq->name)) {
+ printk("Invalid interrupt vector %d\n",irq->name);
+ return 0;
+ }
+ /*
+ * Check if default handler is actually connected. If not issue an error.
+ * You must first get the current handler via i386_get_current_idt_entry
+ * and then disconnect it using i386_delete_idt_entry.
+ * RATIONALE : to always have the same transition by forcing the user
+ * to get the previous handler before accepting to disconnect.
+ */
+ rtems_interrupt_disable(level);
+ if (rtems_hdl_tbl[irq->name].hdl != default_rtems_entry.hdl) {
+ rtems_interrupt_enable(level);
+ printk("IRQ vector %d already connected\n",irq->name);
+ return 0;
+ }
- /*
- * store the data provided by user
- */
- rtems_hdl_tbl[irq->name] = *irq;
- rtems_hdl_tbl[irq->name].next_handler = (void *)-1;
-
- /*
- * enable_irq_at_pic is supposed to ignore
- * requests to disable interrupts outside
- * of the range handled by the PIC
- */
- BSP_enable_irq_at_pic(irq->name);
-
- /*
- * Enable interrupt on device
- */
- if (irq->on)
- irq->on(irq);
+ /*
+ * store the data provided by user
+ */
+ rtems_hdl_tbl[irq->name] = *irq;
+ rtems_hdl_tbl[irq->name].next_handler = (void *)-1;
- rtems_interrupt_enable(level);
+ /*
+ * enable_irq_at_pic is supposed to ignore
+ * requests to disable interrupts outside
+ * of the range handled by the PIC
+ */
+ BSP_enable_irq_at_pic(irq->name);
+
+ /*
+ * Enable interrupt on device
+ */
+ if (irq->on)
+ irq->on(irq);
+
+ rtems_interrupt_enable(level);
- return 1;
+ return 1;
}
-int BSP_get_current_rtems_irq_handler (rtems_irq_connect_data* irq)
+int BSP_get_current_rtems_irq_handler (rtems_irq_connect_data* irq)
{
- rtems_interrupt_level level;
+ rtems_interrupt_level level;
- if (!isValidInterrupt(irq->name)) {
- return 0;
- }
- rtems_interrupt_disable(level);
- *irq = rtems_hdl_tbl[irq->name];
- rtems_interrupt_enable(level);
- return 1;
+ if (!isValidInterrupt(irq->name)) {
+ return 0;
+ }
+ rtems_interrupt_disable(level);
+ *irq = rtems_hdl_tbl[irq->name];
+ rtems_interrupt_enable(level);
+ return 1;
}
int BSP_remove_rtems_irq_handler (const rtems_irq_connect_data* irq)
{
- rtems_irq_connect_data *pchain= NULL, *vchain = NULL;
- rtems_interrupt_level level;
+ rtems_irq_connect_data *pchain= NULL, *vchain = NULL;
+ rtems_interrupt_level level;
+
+ if (!isValidInterrupt(irq->name)) {
+ return 0;
+ }
+ /*
+ * Check if default handler is actually connected. If not issue an error.
+ * You must first get the current handler via i386_get_current_idt_entry
+ * and then disconnect it using i386_delete_idt_entry.
+ * RATIONALE : to always have the same transition by forcing the user
+ * to get the previous handler before accepting to disconnect.
+ */
+ rtems_interrupt_disable(level);
+ if (rtems_hdl_tbl[irq->name].hdl != irq->hdl) {
+ rtems_interrupt_enable(level);
+ return 0;
+ }
- if (!isValidInterrupt(irq->name)) {
+ if ( (int)rtems_hdl_tbl[irq->name].next_handler != -1 ) {
+ int found = 0;
+
+ for( (pchain= NULL, vchain = &rtems_hdl_tbl[irq->name]);
+ (vchain->hdl != default_rtems_entry.hdl);
+ (pchain= vchain,
+ vchain = (rtems_irq_connect_data*)vchain->next_handler) ) {
+ if ( vchain->hdl == irq->hdl ) {
+ found = -1;
+ break;
+ }
+ }
+
+ if ( !found ) {
+ rtems_interrupt_enable(level);
return 0;
}
- /*
- * Check if default handler is actually connected. If not issue an error.
- * You must first get the current handler via i386_get_current_idt_entry
- * and then disconnect it using i386_delete_idt_entry.
- * RATIONALE : to always have the same transition by forcing the user
- * to get the previous handler before accepting to disconnect.
- */
- rtems_interrupt_disable(level);
+ } else {
if (rtems_hdl_tbl[irq->name].hdl != irq->hdl) {
rtems_interrupt_enable(level);
return 0;
}
+ }
- if( (int)rtems_hdl_tbl[irq->name].next_handler != -1 )
- {
- int found = 0;
-
- for( (pchain= NULL, vchain = &rtems_hdl_tbl[irq->name]);
- (vchain->hdl != default_rtems_entry.hdl);
- (pchain= vchain, vchain = (rtems_irq_connect_data*)vchain->next_handler) )
- {
- if( vchain->hdl == irq->hdl )
- {
- found= -1; break;
- }
- }
-
- if( !found )
- {
- rtems_interrupt_enable(level);
- return 0;
- }
- }
- else
- {
- if (rtems_hdl_tbl[irq->name].hdl != irq->hdl)
- {
- rtems_interrupt_enable(level);
- return 0;
- }
- }
+ /*
+ * disable_irq_at_pic is supposed to ignore
+ * requests to disable interrupts outside
+ * of the range handled by the PIC
+ */
+ BSP_disable_irq_at_pic(irq->name);
- /*
- * disable_irq_at_pic is supposed to ignore
- * requests to disable interrupts outside
- * of the range handled by the PIC
- */
- BSP_disable_irq_at_pic(irq->name);
-
- /*
- * Disable interrupt on device
- */
- if (irq->off)
- irq->off(irq);
-
- /*
- * restore the default irq value
- */
- if( !vchain )
- {
- /* single handler vector... */
- rtems_hdl_tbl[irq->name] = default_rtems_entry;
- }
- else
- {
- if( pchain )
- {
- /* non-first handler being removed */
- pchain->next_handler = vchain->next_handler;
- }
- else
- {
- /* first handler isn't malloc'ed, so just overwrite it. Since
- the contents of vchain are being struct copied, vchain itself
- goes away */
- vchain = vchain->next_handler;
- rtems_hdl_tbl[irq->name]= *vchain;
- }
- free(vchain);
+ /*
+ * Disable interrupt on device
+ */
+ if (irq->off)
+ irq->off(irq);
+
+ /*
+ * restore the default irq value
+ */
+ if( !vchain ) {
+ /* single handler vector... */
+ rtems_hdl_tbl[irq->name] = default_rtems_entry;
+ } else {
+ if ( pchain ) {
+ /* non-first handler being removed */
+ pchain->next_handler = vchain->next_handler;
+ } else {
+ /* first handler isn't malloc'ed, so just overwrite it. Since
+ * the contents of vchain are being struct copied, vchain itself
+ * goes away
+ */
+ vchain = vchain->next_handler;
+ rtems_hdl_tbl[irq->name]= *vchain;
}
+ free(vchain);
+ }
- rtems_interrupt_enable(level);
+ rtems_interrupt_enable(level);
- return 1;
+ return 1;
}
/*
@@ -271,65 +266,67 @@ 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;
- rtems_interrupt_level level;
- rtems_irq_connect_data* vchain;
- rtems_raw_except_connect_data vectorDesc;
-
- /*
- * Store various code accelerators
- */
- internal_config = config;
- default_rtems_entry = config->defaultEntry;
- rtems_hdl_tbl = config->irqHdlTbl;
-
- rtems_interrupt_disable(level);
-
- if ( !BSP_setup_the_pic(config) ) {
- printk("PIC setup failed; leaving IRQs OFF\n");
- return 0;
- }
-
- for ( i = config->irqBase; i < config->irqBase + config->irqNb; i++ ) {
- for( vchain = &rtems_hdl_tbl[i];
- ((int)vchain != -1 && vchain->hdl != default_rtems_entry.hdl);
- vchain = (rtems_irq_connect_data*)vchain->next_handler )
- {
- if (vchain->on)
- vchain->on(vchain);
- }
- }
+ int i;
+ rtems_interrupt_level level;
+ rtems_irq_connect_data* vchain;
+ rtems_raw_except_connect_data vectorDesc;
- rtems_interrupt_enable(level);
+ /*
+ * Store various code accelerators
+ */
+ internal_config = config;
+ default_rtems_entry = config->defaultEntry;
+ rtems_hdl_tbl = config->irqHdlTbl;
- /*
- * We must connect the raw irq handler for the two
- * expected interrupt sources : decrementer and external interrupts.
- */
- vectorDesc.exceptIndex = ASM_DEC_VECTOR;
- vectorDesc.hdl.vector = ASM_DEC_VECTOR;
- vectorDesc.hdl.raw_hdl = decrementer_exception_vector_prolog_code;
- vectorDesc.hdl.raw_hdl_size = (unsigned) decrementer_exception_vector_prolog_code_size;
- vectorDesc.on = 0;
- vectorDesc.off = 0;
- vectorDesc.isOn = 0;
- if (!ppc_set_exception (&vectorDesc)) {
- BSP_panic("Unable to initialize RTEMS decrementer raw exception\n");
- }
- vectorDesc.exceptIndex = ASM_EXT_VECTOR;
- vectorDesc.hdl.vector = ASM_EXT_VECTOR;
- vectorDesc.hdl.raw_hdl = external_exception_vector_prolog_code;
- vectorDesc.hdl.raw_hdl_size = (unsigned) external_exception_vector_prolog_code_size;
- if (!ppc_set_exception (&vectorDesc)) {
- BSP_panic("Unable to initialize RTEMS external raw exception\n");
+ rtems_interrupt_disable(level);
+
+ if ( !BSP_setup_the_pic(config) ) {
+ printk("PIC setup failed; leaving IRQs OFF\n");
+ return 0;
+ }
+
+ for ( i = config->irqBase; i < config->irqBase + config->irqNb; i++ ) {
+ for( vchain = &rtems_hdl_tbl[i];
+ ((int)vchain != -1 && vchain->hdl != default_rtems_entry.hdl);
+ vchain = (rtems_irq_connect_data*)vchain->next_handler ) {
+ if (vchain->on)
+ vchain->on(vchain);
}
- return 1;
+ }
+
+ rtems_interrupt_enable(level);
+
+ /*
+ * We must connect the raw irq handler for the two
+ * expected interrupt sources : decrementer and external interrupts.
+ */
+ vectorDesc.exceptIndex = ASM_DEC_VECTOR;
+ vectorDesc.hdl.vector = ASM_DEC_VECTOR;
+ vectorDesc.hdl.raw_hdl = decrementer_exception_vector_prolog_code;
+ vectorDesc.hdl.raw_hdl_size =
+ (unsigned) decrementer_exception_vector_prolog_code_size;
+ vectorDesc.on = 0;
+ vectorDesc.off = 0;
+ vectorDesc.isOn = 0;
+ if (!ppc_set_exception (&vectorDesc)) {
+ BSP_panic("Unable to initialize RTEMS decrementer raw exception\n");
+ }
+
+ vectorDesc.exceptIndex = ASM_EXT_VECTOR;
+ vectorDesc.hdl.vector = ASM_EXT_VECTOR;
+ vectorDesc.hdl.raw_hdl = external_exception_vector_prolog_code;
+ vectorDesc.hdl.raw_hdl_size =
+ (unsigned) external_exception_vector_prolog_code_size;
+ if (!ppc_set_exception (&vectorDesc)) {
+ BSP_panic("Unable to initialize RTEMS external raw exception\n");
+ }
+ return 1;
}
int BSP_rtems_irq_mngt_get(rtems_irq_global_settings** config)
{
- *config = internal_config;
- return 0;
+ *config = internal_config;
+ return 0;
}
void _ThreadProcessSignalsFromIrq (BSP_Exception_frame* ctx)