Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /*
0003  * Internal header to deal with irq_desc->status which will be renamed
0004  * to irq_desc->settings.
0005  */
0006 enum {
0007     _IRQ_DEFAULT_INIT_FLAGS = IRQ_DEFAULT_INIT_FLAGS,
0008     _IRQ_PER_CPU        = IRQ_PER_CPU,
0009     _IRQ_LEVEL      = IRQ_LEVEL,
0010     _IRQ_NOPROBE        = IRQ_NOPROBE,
0011     _IRQ_NOREQUEST      = IRQ_NOREQUEST,
0012     _IRQ_NOTHREAD       = IRQ_NOTHREAD,
0013     _IRQ_NOAUTOEN       = IRQ_NOAUTOEN,
0014     _IRQ_MOVE_PCNTXT    = IRQ_MOVE_PCNTXT,
0015     _IRQ_NO_BALANCING   = IRQ_NO_BALANCING,
0016     _IRQ_NESTED_THREAD  = IRQ_NESTED_THREAD,
0017     _IRQ_PER_CPU_DEVID  = IRQ_PER_CPU_DEVID,
0018     _IRQ_IS_POLLED      = IRQ_IS_POLLED,
0019     _IRQ_DISABLE_UNLAZY = IRQ_DISABLE_UNLAZY,
0020     _IRQ_HIDDEN     = IRQ_HIDDEN,
0021     _IRQ_NO_DEBUG       = IRQ_NO_DEBUG,
0022     _IRQF_MODIFY_MASK   = IRQF_MODIFY_MASK,
0023 };
0024 
0025 #define IRQ_PER_CPU     GOT_YOU_MORON
0026 #define IRQ_NO_BALANCING    GOT_YOU_MORON
0027 #define IRQ_LEVEL       GOT_YOU_MORON
0028 #define IRQ_NOPROBE     GOT_YOU_MORON
0029 #define IRQ_NOREQUEST       GOT_YOU_MORON
0030 #define IRQ_NOTHREAD        GOT_YOU_MORON
0031 #define IRQ_NOAUTOEN        GOT_YOU_MORON
0032 #define IRQ_NESTED_THREAD   GOT_YOU_MORON
0033 #define IRQ_PER_CPU_DEVID   GOT_YOU_MORON
0034 #define IRQ_IS_POLLED       GOT_YOU_MORON
0035 #define IRQ_DISABLE_UNLAZY  GOT_YOU_MORON
0036 #define IRQ_HIDDEN      GOT_YOU_MORON
0037 #define IRQ_NO_DEBUG        GOT_YOU_MORON
0038 #undef IRQF_MODIFY_MASK
0039 #define IRQF_MODIFY_MASK    GOT_YOU_MORON
0040 
0041 static inline void
0042 irq_settings_clr_and_set(struct irq_desc *desc, u32 clr, u32 set)
0043 {
0044     desc->status_use_accessors &= ~(clr & _IRQF_MODIFY_MASK);
0045     desc->status_use_accessors |= (set & _IRQF_MODIFY_MASK);
0046 }
0047 
0048 static inline bool irq_settings_is_per_cpu(struct irq_desc *desc)
0049 {
0050     return desc->status_use_accessors & _IRQ_PER_CPU;
0051 }
0052 
0053 static inline bool irq_settings_is_per_cpu_devid(struct irq_desc *desc)
0054 {
0055     return desc->status_use_accessors & _IRQ_PER_CPU_DEVID;
0056 }
0057 
0058 static inline void irq_settings_set_per_cpu(struct irq_desc *desc)
0059 {
0060     desc->status_use_accessors |= _IRQ_PER_CPU;
0061 }
0062 
0063 static inline void irq_settings_set_no_balancing(struct irq_desc *desc)
0064 {
0065     desc->status_use_accessors |= _IRQ_NO_BALANCING;
0066 }
0067 
0068 static inline bool irq_settings_has_no_balance_set(struct irq_desc *desc)
0069 {
0070     return desc->status_use_accessors & _IRQ_NO_BALANCING;
0071 }
0072 
0073 static inline u32 irq_settings_get_trigger_mask(struct irq_desc *desc)
0074 {
0075     return desc->status_use_accessors & IRQ_TYPE_SENSE_MASK;
0076 }
0077 
0078 static inline void
0079 irq_settings_set_trigger_mask(struct irq_desc *desc, u32 mask)
0080 {
0081     desc->status_use_accessors &= ~IRQ_TYPE_SENSE_MASK;
0082     desc->status_use_accessors |= mask & IRQ_TYPE_SENSE_MASK;
0083 }
0084 
0085 static inline bool irq_settings_is_level(struct irq_desc *desc)
0086 {
0087     return desc->status_use_accessors & _IRQ_LEVEL;
0088 }
0089 
0090 static inline void irq_settings_clr_level(struct irq_desc *desc)
0091 {
0092     desc->status_use_accessors &= ~_IRQ_LEVEL;
0093 }
0094 
0095 static inline void irq_settings_set_level(struct irq_desc *desc)
0096 {
0097     desc->status_use_accessors |= _IRQ_LEVEL;
0098 }
0099 
0100 static inline bool irq_settings_can_request(struct irq_desc *desc)
0101 {
0102     return !(desc->status_use_accessors & _IRQ_NOREQUEST);
0103 }
0104 
0105 static inline void irq_settings_clr_norequest(struct irq_desc *desc)
0106 {
0107     desc->status_use_accessors &= ~_IRQ_NOREQUEST;
0108 }
0109 
0110 static inline void irq_settings_set_norequest(struct irq_desc *desc)
0111 {
0112     desc->status_use_accessors |= _IRQ_NOREQUEST;
0113 }
0114 
0115 static inline bool irq_settings_can_thread(struct irq_desc *desc)
0116 {
0117     return !(desc->status_use_accessors & _IRQ_NOTHREAD);
0118 }
0119 
0120 static inline void irq_settings_clr_nothread(struct irq_desc *desc)
0121 {
0122     desc->status_use_accessors &= ~_IRQ_NOTHREAD;
0123 }
0124 
0125 static inline void irq_settings_set_nothread(struct irq_desc *desc)
0126 {
0127     desc->status_use_accessors |= _IRQ_NOTHREAD;
0128 }
0129 
0130 static inline bool irq_settings_can_probe(struct irq_desc *desc)
0131 {
0132     return !(desc->status_use_accessors & _IRQ_NOPROBE);
0133 }
0134 
0135 static inline void irq_settings_clr_noprobe(struct irq_desc *desc)
0136 {
0137     desc->status_use_accessors &= ~_IRQ_NOPROBE;
0138 }
0139 
0140 static inline void irq_settings_set_noprobe(struct irq_desc *desc)
0141 {
0142     desc->status_use_accessors |= _IRQ_NOPROBE;
0143 }
0144 
0145 static inline bool irq_settings_can_move_pcntxt(struct irq_desc *desc)
0146 {
0147     return desc->status_use_accessors & _IRQ_MOVE_PCNTXT;
0148 }
0149 
0150 static inline bool irq_settings_can_autoenable(struct irq_desc *desc)
0151 {
0152     return !(desc->status_use_accessors & _IRQ_NOAUTOEN);
0153 }
0154 
0155 static inline bool irq_settings_is_nested_thread(struct irq_desc *desc)
0156 {
0157     return desc->status_use_accessors & _IRQ_NESTED_THREAD;
0158 }
0159 
0160 static inline bool irq_settings_is_polled(struct irq_desc *desc)
0161 {
0162     return desc->status_use_accessors & _IRQ_IS_POLLED;
0163 }
0164 
0165 static inline bool irq_settings_disable_unlazy(struct irq_desc *desc)
0166 {
0167     return desc->status_use_accessors & _IRQ_DISABLE_UNLAZY;
0168 }
0169 
0170 static inline void irq_settings_clr_disable_unlazy(struct irq_desc *desc)
0171 {
0172     desc->status_use_accessors &= ~_IRQ_DISABLE_UNLAZY;
0173 }
0174 
0175 static inline bool irq_settings_is_hidden(struct irq_desc *desc)
0176 {
0177     return desc->status_use_accessors & _IRQ_HIDDEN;
0178 }
0179 
0180 static inline void irq_settings_set_no_debug(struct irq_desc *desc)
0181 {
0182     desc->status_use_accessors |= _IRQ_NO_DEBUG;
0183 }
0184 
0185 static inline bool irq_settings_no_debug(struct irq_desc *desc)
0186 {
0187     return desc->status_use_accessors & _IRQ_NO_DEBUG;
0188 }