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

Last change on this file since eebecd0 was eebecd0, checked in by Sebastian Huber <sebastian.huber@…>, on 06/28/21 at 07:36:29

bsps/irq: Add rtems_interrupt_get_attributes()

Add a default implementation which clears the attributes to zero and
just returns RTEMS_SUCCESSFUL for valid parameters.

Update #3269.

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