summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/powerpc/psim/irq/irq_init.c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2007-12-05 22:24:05 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2007-12-05 22:24:05 +0000
commit9e602b0ad931b886d28e68ce7da212c555201914 (patch)
tree72e433899f922481494e9215b697cd51d89395ba /c/src/lib/libbsp/powerpc/psim/irq/irq_init.c
parent2007-12-05 Joel Sherrill <joel.sherrill@OARcorp.com> (diff)
downloadrtems-9e602b0ad931b886d28e68ce7da212c555201914.tar.bz2
2007-12-05 Joel Sherrill <joel.sherrill@oarcorp.com>
* irq/irq_init.c: Spacing.
Diffstat (limited to 'c/src/lib/libbsp/powerpc/psim/irq/irq_init.c')
-rw-r--r--c/src/lib/libbsp/powerpc/psim/irq/irq_init.c81
1 files changed, 54 insertions, 27 deletions
diff --git a/c/src/lib/libbsp/powerpc/psim/irq/irq_init.c b/c/src/lib/libbsp/powerpc/psim/irq/irq_init.c
index 9cd41d42e2..b5b088562e 100644
--- a/c/src/lib/libbsp/powerpc/psim/irq/irq_init.c
+++ b/c/src/lib/libbsp/powerpc/psim/irq/irq_init.c
@@ -35,11 +35,11 @@ static int not_connected() {return 0;}
*/
static int connected() {return 1;}
-static rtems_irq_connect_data rtemsIrq[BSP_IRQ_NUMBER];
-static rtems_irq_global_settings initial_config;
-static rtems_irq_connect_data defaultIrq = {
- /* vectorIdex, hdl , handle , on , off , isOn */
- 0, nop_func , NULL , nop_func , nop_func , not_connected
+static rtems_irq_connect_data rtemsIrq[BSP_IRQ_NUMBER];
+static rtems_irq_global_settings initial_config;
+static rtems_irq_connect_data defaultIrq = {
+ /* vectorIdex, hdl , handle , on , off , isOn */
+ 0, nop_func , NULL , nop_func , nop_func , not_connected
};
static rtems_irq_prio irqPrioTable[BSP_IRQ_NUMBER]={
/*
@@ -65,30 +65,57 @@ void BSP_rtems_irq_mng_init(unsigned cpuId)
/*
* Initialize Rtems management interrupt table
*/
+ /*
+ * re-init the rtemsIrq table
+ */
+ for (i = 0; i < BSP_IRQ_NUMBER; i++) {
+ rtemsIrq[i] = defaultIrq;
+ rtemsIrq[i].name = i;
+ }
+ /*
+ * Init initial Interrupt management config
+ */
+ initial_config.irqNb = BSP_IRQ_NUMBER;
+ initial_config.defaultEntry = defaultIrq;
+ initial_config.irqHdlTbl = rtemsIrq;
+ initial_config.irqBase = BSP_LOWEST_OFFSET;
+ initial_config.irqPrioTbl = irqPrioTable;
+
+ if (!BSP_rtems_irq_mngt_set(&initial_config)) {
/*
- * re-init the rtemsIrq table
- */
- for (i = 0; i < BSP_IRQ_NUMBER; i++) {
- rtemsIrq[i] = defaultIrq;
- rtemsIrq[i].name = i;
- }
- /*
- * Init initial Interrupt management config
+ * put something here that will show the failure...
*/
- initial_config.irqNb = BSP_IRQ_NUMBER;
- initial_config.defaultEntry = defaultIrq;
- initial_config.irqHdlTbl = rtemsIrq;
- initial_config.irqBase = BSP_LOWEST_OFFSET;
- initial_config.irqPrioTbl = irqPrioTable;
-
- if (!BSP_rtems_irq_mngt_set(&initial_config)) {
- /*
- * put something here that will show the failure...
- */
- BSP_panic("Unable to initialize RTEMS interrupt Management!!! System locked\n");
- }
+ BSP_panic(
+ "Unable to initialize RTEMS interrupt Management!!! System locked\n"
+ );
+ }
-#ifdef TRACE_IRQ_INIT
+ /*
+ * 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 = nop_func;
+ vectorDesc.off = nop_func;
+ vectorDesc.isOn = connected;
+ 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");
+ }
+ #ifdef TRACE_IRQ_INIT
printk("RTEMS IRQ management is now operationnal\n");
-#endif
+ #endif
}