File indexing completed on 2025-05-11 08:24:08
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030 #include <bsp.h>
0031 #include <bsp/irq-generic.h>
0032 #include <rtems/score/processormaskimpl.h>
0033
0034 static inline int bsp_irq_cpu(int irq)
0035 {
0036 return 0;
0037 }
0038
0039 bool bsp_interrupt_is_valid_vector(rtems_vector_number vector)
0040 {
0041 if (vector == 0) {
0042 return false;
0043 }
0044
0045 return vector <= BSP_INTERRUPT_VECTOR_MAX_STD;
0046 }
0047
0048 void bsp_interrupt_facility_initialize(void)
0049 {
0050
0051 }
0052
0053 static bool is_maskable(rtems_vector_number vector)
0054 {
0055 return vector != 15;
0056 }
0057
0058 rtems_status_code bsp_interrupt_get_attributes(
0059 rtems_vector_number vector,
0060 rtems_interrupt_attributes *attributes
0061 )
0062 {
0063 attributes->is_maskable = is_maskable(vector);
0064 attributes->can_enable = true;
0065 attributes->maybe_enable = true;
0066 attributes->can_disable = is_maskable(vector);
0067 attributes->maybe_disable = is_maskable(vector);
0068 attributes->can_raise = true;
0069 attributes->can_raise_on = true;
0070 attributes->can_clear = true;
0071 attributes->cleared_by_acknowledge = true;
0072 attributes->can_set_affinity = true;
0073 return RTEMS_SUCCESSFUL;
0074 }
0075
0076 rtems_status_code bsp_interrupt_is_pending(
0077 rtems_vector_number vector,
0078 bool *pending
0079 )
0080 {
0081 bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0082 bsp_interrupt_assert(pending != NULL);
0083 *pending = BSP_Is_interrupt_pending(vector) ||
0084 BSP_Is_interrupt_forced(vector);
0085 return RTEMS_SUCCESSFUL;
0086 }
0087
0088 rtems_status_code bsp_interrupt_raise(rtems_vector_number vector)
0089 {
0090 bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0091 BSP_Force_interrupt(vector);
0092 return RTEMS_SUCCESSFUL;
0093 }
0094
0095 #if defined(RTEMS_SMP)
0096 rtems_status_code bsp_interrupt_raise_on(
0097 rtems_vector_number vector,
0098 uint32_t cpu_index
0099 )
0100 {
0101 bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0102 BSP_Force_interrupt(vector);
0103 return RTEMS_SUCCESSFUL;
0104 }
0105 #endif
0106
0107 rtems_status_code bsp_interrupt_clear(rtems_vector_number vector)
0108 {
0109 bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0110 BSP_Clear_forced_interrupt(vector);
0111 BSP_Clear_interrupt(vector);
0112 return RTEMS_SUCCESSFUL;
0113 }
0114
0115 rtems_status_code bsp_interrupt_vector_is_enabled(
0116 rtems_vector_number vector,
0117 bool *enabled
0118 )
0119 {
0120 bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0121 bsp_interrupt_assert(enabled != NULL);
0122 *enabled = !BSP_Cpu_Is_interrupt_masked(vector, bsp_irq_cpu(vector));
0123 return RTEMS_SUCCESSFUL;
0124 }
0125
0126 rtems_status_code bsp_interrupt_vector_enable(rtems_vector_number vector)
0127 {
0128 bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0129 BSP_Cpu_Unmask_interrupt(vector, 0);
0130 return RTEMS_SUCCESSFUL;
0131 }
0132
0133 rtems_status_code bsp_interrupt_vector_disable(rtems_vector_number vector)
0134 {
0135 bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0136
0137 if (!is_maskable(vector)) {
0138 return RTEMS_UNSATISFIED;
0139 }
0140
0141 BSP_Cpu_Mask_interrupt(vector, 0);
0142 return RTEMS_SUCCESSFUL;
0143 }
0144
0145 rtems_status_code bsp_interrupt_set_priority(
0146 rtems_vector_number vector,
0147 uint32_t priority
0148 )
0149 {
0150 bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0151 return RTEMS_UNSATISFIED;
0152 }
0153
0154 rtems_status_code bsp_interrupt_get_priority(
0155 rtems_vector_number vector,
0156 uint32_t *priority
0157 )
0158 {
0159 bsp_interrupt_assert(bsp_interrupt_is_valid_vector(vector));
0160 bsp_interrupt_assert(priority != NULL);
0161 return RTEMS_UNSATISFIED;
0162 }
0163
0164 #if defined(RTEMS_SMP)
0165 rtems_status_code bsp_interrupt_get_affinity(
0166 rtems_vector_number vector,
0167 Processor_mask *affinity
0168 )
0169 {
0170 (void) vector;
0171 _Processor_mask_From_index( affinity, 0 );
0172 return RTEMS_UNSATISFIED;
0173 }
0174
0175 rtems_status_code bsp_interrupt_set_affinity(
0176 rtems_vector_number vector,
0177 const Processor_mask *affinity
0178 )
0179 {
0180 (void) vector;
0181 (void) affinity;
0182 return RTEMS_UNSATISFIED;
0183 }
0184 #endif