source: rtems/bsps/arm/edb7312/irq/irq.c @ 9832652c

Last change on this file since 9832652c was 9832652c, checked in by Sebastian Huber <sebastian.huber@…>, on 06/28/21 at 06:44:49

bsps/irq: Add rtems_interrupt_raise()

Add rtems_interrupt_raise_on() and rtems_interrupt_clear().

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

Update #3269.

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