source: rtems/bsps/sparc/shared/irq/irq-shared.c @ c7b4eca7

Last change on this file since c7b4eca7 was c7b4eca7, checked in by Sebastian Huber <sebastian.huber@…>, on 07/27/21 at 07:58:43

bsps/irq: bsp_interrupt_facility_initialize()

Do not return a status code in bsp_interrupt_facility_initialize() since this
leads to unreachable code in bsp_interrupt_initialize(). Use RTEMS_DEBUG
assertions in bsp_interrupt_facility_initialize() if necessary.

  • Property mode set to 100644
File size: 3.6 KB
Line 
1/*
2*  COPYRIGHT (c) 2012-2015
3*  Cobham Gaisler
4*
5*  The license and distribution terms for this file may be
6*  found in the file LICENSE in this distribution or at
7*  http://www.rtems.org/license/LICENSE.
8*
9*/
10
11#include <bsp.h>
12#include <bsp/irq-generic.h>
13
14static inline int bsp_irq_cpu(int irq)
15{
16#if defined(RTEMS_SMP)
17  Processor_mask affinity;
18
19  (void) bsp_interrupt_get_affinity((rtems_vector_number) irq, &affinity);
20  return (int) _Processor_mask_Find_last_set(&affinity);
21#elif defined(LEON3)
22  return _LEON3_Get_current_processor();
23#else
24  return 0;
25#endif
26}
27
28#if !defined(LEON3)
29bool bsp_interrupt_is_valid_vector(rtems_vector_number vector)
30{
31  if (vector == 0) {
32    return false;
33  }
34
35  return vector <= BSP_INTERRUPT_VECTOR_MAX_STD;
36}
37
38void bsp_interrupt_facility_initialize(void)
39{
40  /* Nothing to do */
41}
42
43static bool is_maskable(rtems_vector_number vector)
44{
45  return vector != 15;
46}
47
48rtems_status_code bsp_interrupt_get_attributes(
49  rtems_vector_number         vector,
50  rtems_interrupt_attributes *attributes
51)
52{
53  attributes->is_maskable = is_maskable(vector);
54  attributes->can_enable = true;
55  attributes->maybe_enable = true;
56  attributes->can_disable = is_maskable(vector);
57  attributes->maybe_disable = is_maskable(vector);
58  attributes->can_raise = true;
59  attributes->can_raise_on = true;
60  attributes->can_clear = true;
61  attributes->cleared_by_acknowledge = true;
62  attributes->can_set_affinity = true;
63  return RTEMS_SUCCESSFUL;
64}
65
66rtems_status_code bsp_interrupt_is_pending(
67  rtems_vector_number vector,
68  bool               *pending
69)
70{
71  bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
72  bsp_interrupt_assert(pending != NULL);
73  *pending = BSP_Is_interrupt_pending(vector) ||
74    BSP_Is_interrupt_forced(vector);
75  return RTEMS_SUCCESSFUL;
76}
77
78rtems_status_code bsp_interrupt_raise(rtems_vector_number vector)
79{
80  bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
81  BSP_Force_interrupt(vector);
82  return RTEMS_SUCCESSFUL;
83}
84
85#if defined(RTEMS_SMP)
86rtems_status_code bsp_interrupt_raise_on(
87  rtems_vector_number vector,
88  uint32_t            cpu_index
89)
90{
91  bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
92  BSP_Force_interrupt(vector);
93  return RTEMS_SUCCESSFUL;
94}
95#endif
96
97rtems_status_code bsp_interrupt_clear(rtems_vector_number vector)
98{
99  bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
100  BSP_Clear_forced_interrupt(vector);
101  BSP_Clear_interrupt(vector);
102  return RTEMS_SUCCESSFUL;
103}
104
105rtems_status_code bsp_interrupt_vector_is_enabled(
106  rtems_vector_number vector,
107  bool               *enabled
108)
109{
110  bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
111  bsp_interrupt_assert(enabled != NULL);
112  *enabled = !BSP_Cpu_Is_interrupt_masked(vector, bsp_irq_cpu(vector));
113  return RTEMS_SUCCESSFUL;
114}
115
116rtems_status_code bsp_interrupt_vector_enable(rtems_vector_number vector)
117{
118  bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
119  BSP_Cpu_Unmask_interrupt(vector, 0);
120  return RTEMS_SUCCESSFUL;
121}
122
123rtems_status_code bsp_interrupt_vector_disable(rtems_vector_number vector)
124{
125  bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
126
127  if (!is_maskable(vector)) {
128    return RTEMS_UNSATISFIED;
129  }
130
131  BSP_Cpu_Mask_interrupt(vector, 0);
132  return RTEMS_SUCCESSFUL;
133}
134#endif
135
136void BSP_shared_interrupt_mask(int irq)
137{
138  BSP_Cpu_Mask_interrupt(irq, bsp_irq_cpu(irq));
139}
140
141void BSP_shared_interrupt_unmask(int irq)
142{
143  BSP_Cpu_Unmask_interrupt(irq, bsp_irq_cpu(irq));
144}
145
146void BSP_shared_interrupt_clear(int irq)
147{
148  /* We don't have to interrupt lock here, because the register is only
149   * written and self clearing
150   */
151  BSP_Clear_interrupt(irq);
152}
Note: See TracBrowser for help on using the repository browser.