source: rtems/bsps/arm/edb7312/irq/irq.c @ 781213f9

Last change on this file since 781213f9 was 781213f9, checked in by Sebastian Huber <sebastian.huber@…>, on 06/28/21 at 06:20:53

bsps/irq: Add rtems_interrupt_vector_is_enabled()

Add a default implementation which just returns RTEMS_UNSATISFIED for
valid parameters.

Update #3269.

  • Property mode set to 100644
File size: 4.2 KB
Line 
1/*
2 * Cirrus EP7312 Intererrupt handler
3 */
4
5/*
6 * Copyright (c) 2010 embedded brains GmbH.
7 *
8 * Copyright (c) 2002 by Jay Monkman <jtm@smoothsmoothie.com>
9 *
10 * Copyright (c) 2002 by Charlie Steader <charlies@poliac.com>
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 <rtems/score/armv4.h>
18
19#include <bsp.h>
20#include <bsp/irq.h>
21#include <bsp/irq-generic.h>
22
23#include <ep7312.h>
24
25void edb7312_interrupt_dispatch(rtems_vector_number vector)
26{
27  bsp_interrupt_handler_dispatch(vector);
28}
29
30rtems_status_code bsp_interrupt_vector_is_enabled(
31  rtems_vector_number vector,
32  bool               *enabled
33)
34{
35  bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
36  bsp_interrupt_assert(enabled != NULL);
37  *enabled = false;
38  return RTEMS_UNSATISFIED;
39}
40
41void bsp_interrupt_vector_enable(rtems_vector_number vector)
42{
43    bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
44
45    if(vector >= BSP_EXTFIQ && vector <= BSP_SSEOTI)
46    {
47        /* interrupt managed by INTMR1 and INTSR1 */
48        *EP7312_INTMR1 |= (1 << vector);
49    }
50    else if(vector >= BSP_KBDINT && vector <= BSP_SS2TX)
51    {
52        /* interrupt managed by INTMR2 and INTSR2 */
53        *EP7312_INTMR2 |= (1 << (vector - 16));
54    }
55    else if(vector >= BSP_UTXINT2 && vector <= BSP_URXINT2)
56    {
57        /* interrupt managed by INTMR2 and INTSR2 */
58        *EP7312_INTMR2 |= (1 << (vector - 7));
59    }
60    else if(vector == BSP_DAIINT)
61    {
62        /* interrupt managed by INTMR3 and INTSR3 */
63        *EP7312_INTMR3 |= (1 << (vector - 21));
64    }
65}
66
67void bsp_interrupt_vector_disable(rtems_vector_number vector)
68{
69    bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
70
71    if(vector >= BSP_EXTFIQ && vector <= BSP_SSEOTI)
72    {
73        /* interrupt managed by INTMR1 and INTSR1 */
74        *EP7312_INTMR1 &= ~(1 << vector);
75    }
76    else if(vector >= BSP_KBDINT && vector <= BSP_SS2TX)
77    {
78        /* interrupt managed by INTMR2 and INTSR2 */
79        *EP7312_INTMR2 &= ~(1 << (vector - 16));
80    }
81    else if(vector >= BSP_UTXINT2 && vector <= BSP_URXINT2)
82    {
83        /* interrupt managed by INTMR2 and INTSR2 */
84        *EP7312_INTMR2 &= ~(1 << (vector - 7));
85    }
86    else if(vector == BSP_DAIINT)
87    {
88        /* interrupt managed by INTMR3 and INTSR3 */
89        *EP7312_INTMR3 &= ~(1 << (vector - 21));
90    }
91}
92
93rtems_status_code bsp_interrupt_facility_initialize(void)
94{
95  uint32_t int_stat = 0;
96
97  /* mask all interrupts */
98  *EP7312_INTMR1 = 0x0;
99  *EP7312_INTMR2 = 0x0;
100  *EP7312_INTMR3 = 0x0;
101 
102  /* clear all pending interrupt status' */
103  int_stat = *EP7312_INTSR1;
104  if(int_stat & EP7312_INTR1_EXTFIQ)
105  {
106  }
107  if(int_stat & EP7312_INTR1_BLINT)
108  {
109      *EP7312_BLEOI = 0xFFFFFFFF;
110  }
111  if(int_stat & EP7312_INTR1_WEINT)
112  {
113      *EP7312_TEOI = 0xFFFFFFFF;
114  }
115  if(int_stat & EP7312_INTR1_MCINT)
116  {
117  }
118  if(int_stat & EP7312_INTR1_CSINT)
119  {
120      *EP7312_COEOI = 0xFFFFFFFF;
121  }
122  if(int_stat & EP7312_INTR1_EINT1)
123  {
124  }
125  if(int_stat & EP7312_INTR1_EINT2)
126  {
127  }
128  if(int_stat & EP7312_INTR1_EINT3)
129  {
130  }
131  if(int_stat & EP7312_INTR1_TC1OI)
132  {
133      *EP7312_TC1EOI = 0xFFFFFFFF;
134  }
135  if(int_stat & EP7312_INTR1_TC2OI)
136  {
137      *EP7312_TC2EOI = 0xFFFFFFFF;
138  }
139  if(int_stat & EP7312_INTR1_RTCMI)
140  {
141      *EP7312_RTCEOI = 0xFFFFFFFF;
142  }
143  if(int_stat & EP7312_INTR1_TINT)
144  {
145      *EP7312_TEOI = 0xFFFFFFFF;
146  }
147  if(int_stat & EP7312_INTR1_URXINT1)
148  {
149  }
150  if(int_stat & EP7312_INTR1_UTXINT1)
151  {
152  }
153  if(int_stat & EP7312_INTR1_UMSINT)
154  {
155      *EP7312_UMSEOI = 0xFFFFFFFF;
156  }
157  if(int_stat & EP7312_INTR1_SSEOTI)
158  {
159      *EP7312_SYNCIO;
160  }
161  int_stat = *EP7312_INTSR1;
162 
163  int_stat = *EP7312_INTSR2;
164  if(int_stat & EP7312_INTR2_KBDINT)
165  {
166      *EP7312_KBDEOI = 0xFFFFFFFF;
167  }
168  if(int_stat & EP7312_INTR2_SS2RX)
169  {
170  }
171  if(int_stat & EP7312_INTR2_SS2TX)
172  {
173  }
174  if(int_stat & EP7312_INTR2_URXINT2)
175  {
176  }
177  if(int_stat & EP7312_INTR2_UTXINT2)
178  {
179  }
180  int_stat = *EP7312_INTSR2;
181 
182  int_stat = *EP7312_INTSR3;
183  if(int_stat & EP7312_INTR2_DAIINT)
184  {
185  }
186  int_stat = *EP7312_INTSR3;
187
188  _CPU_ISR_install_vector(ARM_EXCEPTION_IRQ, _ARMV4_Exception_interrupt, NULL);
189
190  return RTEMS_SUCCESSFUL;
191}
Note: See TracBrowser for help on using the repository browser.