diff options
Diffstat (limited to 'include/linux/irq.h')
| -rw-r--r-- | include/linux/irq.h | 16 | 
1 files changed, 14 insertions, 2 deletions
| diff --git a/include/linux/irq.h b/include/linux/irq.h index 4d758a7c604a..b52424eaa0ed 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h @@ -197,6 +197,7 @@ struct irq_data {   * IRQD_IRQ_INPROGRESS		- In progress state of the interrupt   * IRQD_WAKEUP_ARMED		- Wakeup mode armed   * IRQD_FORWARDED_TO_VCPU	- The interrupt is forwarded to a VCPU + * IRQD_AFFINITY_MANAGED	- Affinity is auto-managed by the kernel   */  enum {  	IRQD_TRIGGER_MASK		= 0xf, @@ -212,6 +213,7 @@ enum {  	IRQD_IRQ_INPROGRESS		= (1 << 18),  	IRQD_WAKEUP_ARMED		= (1 << 19),  	IRQD_FORWARDED_TO_VCPU		= (1 << 20), +	IRQD_AFFINITY_MANAGED		= (1 << 21),  };  #define __irqd_to_state(d) ACCESS_PRIVATE((d)->common, state_use_accessors) @@ -305,6 +307,11 @@ static inline void irqd_clr_forwarded_to_vcpu(struct irq_data *d)  	__irqd_to_state(d) &= ~IRQD_FORWARDED_TO_VCPU;  } +static inline bool irqd_affinity_is_managed(struct irq_data *d) +{ +	return __irqd_to_state(d) & IRQD_AFFINITY_MANAGED; +} +  #undef __irqd_to_state  static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d) @@ -315,6 +322,7 @@ static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d)  /**   * struct irq_chip - hardware interrupt chip descriptor   * + * @parent_device:	pointer to parent device for irqchip   * @name:		name for /proc/interrupts   * @irq_startup:	start up the interrupt (defaults to ->enable if NULL)   * @irq_shutdown:	shut down the interrupt (defaults to ->disable if NULL) @@ -354,6 +362,7 @@ static inline irq_hw_number_t irqd_to_hwirq(struct irq_data *d)   * @flags:		chip specific flags   */  struct irq_chip { +	struct device	*parent_device;  	const char	*name;  	unsigned int	(*irq_startup)(struct irq_data *data);  	void		(*irq_shutdown)(struct irq_data *data); @@ -482,12 +491,15 @@ extern void handle_fasteoi_irq(struct irq_desc *desc);  extern void handle_edge_irq(struct irq_desc *desc);  extern void handle_edge_eoi_irq(struct irq_desc *desc);  extern void handle_simple_irq(struct irq_desc *desc); +extern void handle_untracked_irq(struct irq_desc *desc);  extern void handle_percpu_irq(struct irq_desc *desc);  extern void handle_percpu_devid_irq(struct irq_desc *desc);  extern void handle_bad_irq(struct irq_desc *desc);  extern void handle_nested_irq(unsigned int irq);  extern int irq_chip_compose_msi_msg(struct irq_data *data, struct msi_msg *msg); +extern int irq_chip_pm_get(struct irq_data *data); +extern int irq_chip_pm_put(struct irq_data *data);  #ifdef	CONFIG_IRQ_DOMAIN_HIERARCHY  extern void irq_chip_enable_parent(struct irq_data *data);  extern void irq_chip_disable_parent(struct irq_data *data); @@ -701,11 +713,11 @@ static inline struct cpumask *irq_data_get_affinity_mask(struct irq_data *d)  unsigned int arch_dynirq_lower_bound(unsigned int from);  int __irq_alloc_descs(int irq, unsigned int from, unsigned int cnt, int node, -		struct module *owner); +		      struct module *owner, const struct cpumask *affinity);  /* use macros to avoid needing export.h for THIS_MODULE */  #define irq_alloc_descs(irq, from, cnt, node)	\ -	__irq_alloc_descs(irq, from, cnt, node, THIS_MODULE) +	__irq_alloc_descs(irq, from, cnt, node, THIS_MODULE, NULL)  #define irq_alloc_desc(node)			\  	irq_alloc_descs(-1, 0, 1, node) |