source: rtems/bsps/powerpc/mvme5500/irq/irq_init.c @ 99de42c

Last change on this file since 99de42c was 99de42c, checked in by Marçal Comajoan Cara <mcomajoancara@…>, on Dec 4, 2018 at 10:05:10 PM

Capitalize Rtems to RTEMS

  • Property mode set to 100644
File size: 4.3 KB
Line 
1/* irq_init.c
2 *
3 * This file contains the implementation of rtems initialization
4 * related to interrupt handling.
5 *
6 * CopyRight (C) 1999 valette@crf.canon.fr
7 *
8 * Modified and added support for the MVME5500.
9 * Copyright 2003, 2004, 2005, Brookhaven National Laboratory and
10 *                 Shuchen Kate Feng <feng1@bnl.gov>
11 *
12 * The license and distribution terms for this file may be
13 * found in the file LICENSE in this distribution or at
14 * http://www.rtems.org/license/LICENSE
15 *
16 */
17#include <libcpu/io.h>
18#include <libcpu/spr.h>
19#include <bsp/irq.h>
20#include <bsp.h>
21#include <bsp/vectors.h>  /* ASM_EXT_VECTOR, ASM_DEC_VECTOR ... */
22/*#define  TRACE_IRQ_INIT*/
23
24/*
25 * default on/off function
26 */
27static void nop_func(void){}
28/*
29 * default isOn function
30 */
31static int not_connected(void) {return 0;}
32
33static rtems_irq_connect_data           rtemsIrq[BSP_IRQ_NUMBER];
34static rtems_irq_global_settings        initial_config;
35
36static rtems_irq_connect_data           defaultIrq = {
37  .name   = 0,
38  .hdl    = NULL,
39  .handle = NULL,
40  .on     = (rtems_irq_enable) nop_func,
41  .off    = (rtems_irq_disable) nop_func,
42  .isOn   = (rtems_irq_is_enabled) not_connected,
43#ifdef BSP_SHARED_HANDLER_SUPPORT
44  .next_handler = NULL
45#endif
46};
47
48rtems_irq_prio BSPirqPrioTable[BSP_PIC_IRQ_NUMBER] = {
49  /*
50   * This table is where the developers can change the levels of priority
51   * based on the need of their applications.
52   *
53   * actual priorities for CPU MAIN and GPP interrupts (0-95)
54   *
55   *    0   means that only current interrupt is masked (lowest priority)
56   *    255 is only used by bits 24, 25, 26 and 27 of the CPU high
57   *        interrupt Mask: (e.g. GPP7_0, GPP15_8, GPP23_16, GPP31_24).
58   *        The IRQs of those four bits are always enabled. When it's used,
59   *        the IRQ number is never listed in the dynamic picIsrTable[96].
60   *
61   *        The priorities of GPP interrupts were decided by their own
62   *        value set at  BSPirqPrioTable.
63   *
64   */
65  /* CPU Main cause low interrupt */
66  /* 0-15 */
67  0, 0, 0, 0, 0, 0, 0, 0, 64/*Timer*/, 0, 0, 0, 0, 0, 0, 0,
68   /* 16-31 */
69  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
70  /* CPU Main cause high interrupt */
71  /* 32-47 */
72  2/*10/100MHZ*/, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
73  /* 48-63 */
74  0, 0, 0, 0, 0, 0, 0, 0,
75  255 /*GPP0-7*/, 255/*GPP8-15*/, 255/*GPP16-23*/, 255/*GPP24-31*/, 0, 0, 0, 0,
76  /* GPP interrupts */
77  /* GPP0-7 */
78  1/*serial*/,0, 0, 0, 0, 0, 0, 0,
79  /* GPP8-15 */
80  47/*PMC1A*/,46/*PMC1B*/,45/*PMC1C*/,44/*PMC1D*/,30/*VME0*/, 29/*VME1*/,3,1,
81  /* GPP16-23 */
82  37/*PMC2A*/,36/*PMC2B*/,35/*PMC2C*/,34/*PMC2D*/,23/*1GHZ*/, 0,0,0,
83  /* GPP24-31 */
84  7/*watchdog*/, 0,0,0,0,0,0,0
85};
86
87/*
88 * This code assumes the exceptions management setup has already
89 * been done. We just need to replace the exceptions that will
90 * be handled like interrupt. On MPC7455 and many PPC processors
91 * this means the decrementer exception and the external exception.
92 */
93void BSP_rtems_irq_mng_init(unsigned cpuId)
94{
95  int                   i;
96  rtems_interrupt_level level;
97
98  /*
99   * First initialize the Interrupt management hardware
100   */
101#ifdef TRACE_IRQ_INIT
102  printk("Initializing the interrupt controller of the GT64260\n");
103#endif
104
105#ifdef TRACE_IRQ_INIT
106  printk("Going to re-initialize the rtemsIrq table %d\n",BSP_IRQ_NUMBER);
107#endif
108  /*
109   * Initialize RTEMS management interrupt table
110   */
111  /*
112   * re-init the rtemsIrq table
113   */
114  for (i = 0; i < BSP_IRQ_NUMBER; i++) {
115    rtemsIrq[i]      = defaultIrq;
116    rtemsIrq[i].name = i;
117  }
118
119  /*
120   * Init initial Interrupt management config
121   */
122  initial_config.irqNb  = BSP_IRQ_NUMBER;
123  initial_config.defaultEntry   = defaultIrq;
124  initial_config.irqHdlTbl      = rtemsIrq;
125  initial_config.irqBase        = BSP_LOWEST_OFFSET;
126  initial_config.irqPrioTbl     = BSPirqPrioTable;
127
128#ifdef TRACE_IRQ_INIT
129  printk("Going to setup irq mngt configuration\n");
130#endif
131
132  rtems_interrupt_disable(level);
133  (void) level; /* avoid set but not used warning */
134
135  if (!BSP_rtems_irq_mngt_set(&initial_config)) {
136      /*
137       * put something here that will show the failure...
138       */
139      rtems_panic("Unable to initialize RTEMS interrupt Management!!! System locked\n");
140  }
141#ifdef TRACE_IRQ_INIT
142  printk("Done setup irq mngt configuration\n");
143#endif
144
145#ifdef TRACE_IRQ_INIT
146  printk("RTEMS IRQ management is now operationnal\n");
147#endif
148}
Note: See TracBrowser for help on using the repository browser.