0001
0002
0003
0004
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 }