diff options
Diffstat (limited to 'drivers/sh/intc/internals.h')
| -rw-r--r-- | drivers/sh/intc/internals.h | 26 | 
1 files changed, 19 insertions, 7 deletions
diff --git a/drivers/sh/intc/internals.h b/drivers/sh/intc/internals.h index 0cf8260971d..7dff08e2a07 100644 --- a/drivers/sh/intc/internals.h +++ b/drivers/sh/intc/internals.h @@ -1,10 +1,11 @@  #include <linux/sh_intc.h>  #include <linux/irq.h> +#include <linux/irqdomain.h>  #include <linux/list.h>  #include <linux/kernel.h>  #include <linux/types.h>  #include <linux/radix-tree.h> -#include <linux/sysdev.h> +#include <linux/device.h>  #define _INTC_MK(fn, mode, addr_e, addr_d, width, shift) \  	((shift) | ((width) << 5) | ((fn) << 9) | ((mode) << 13) | \ @@ -51,9 +52,8 @@ struct intc_subgroup_entry {  struct intc_desc_int {  	struct list_head list; -	struct sys_device sysdev; +	struct device dev;  	struct radix_tree_root tree; -	pm_message_t state;  	raw_spinlock_t lock;  	unsigned int index;  	unsigned long *reg; @@ -67,7 +67,9 @@ struct intc_desc_int {  	unsigned int nr_sense;  	struct intc_window *window;  	unsigned int nr_windows; +	struct irq_domain *domain;  	struct irq_chip chip; +	bool skip_suspend;  }; @@ -87,7 +89,7 @@ enum {	MODE_ENABLE_REG = 0, /* Bit(s) set -> interrupt enabled */  static inline struct intc_desc_int *get_intc_desc(unsigned int irq)  { -	struct irq_chip *chip = get_irq_chip(irq); +	struct irq_chip *chip = irq_get_chip(irq);  	return container_of(chip, struct intc_desc_int, chip);  } @@ -104,10 +106,18 @@ static inline void activate_irq(int irq)  	set_irq_flags(irq, IRQF_VALID);  #else  	/* same effect on other architectures */ -	set_irq_noprobe(irq); +	irq_set_noprobe(irq);  #endif  } +static inline int intc_handle_int_cmp(const void *a, const void *b) +{ +	const struct intc_handle_int *_a = a; +	const struct intc_handle_int *_b = b; + +	return _a->irq - _b->irq; +} +  /* access.c */  extern unsigned long  (*intc_reg_fns[])(unsigned long addr, unsigned long h, unsigned long data); @@ -157,8 +167,7 @@ void _intc_enable(struct irq_data *data, unsigned long handle);  /* core.c */  extern struct list_head intc_list;  extern raw_spinlock_t intc_big_lock; -extern unsigned int nr_intc_controllers; -extern struct sysdev_class intc_sysdev_class; +extern struct bus_type intc_subsys;  unsigned int intc_get_dfl_prio_level(void);  unsigned int intc_get_prio_level(unsigned int irq); @@ -180,6 +189,9 @@ unsigned long intc_get_ack_handle(unsigned int irq);  void intc_enable_disable_enum(struct intc_desc *desc, struct intc_desc_int *d,  			      intc_enum enum_id, int enable); +/* irqdomain.c */ +void intc_irq_domain_init(struct intc_desc_int *d, struct intc_hw_desc *hw); +  /* virq.c */  void intc_subgroup_init(struct intc_desc *desc, struct intc_desc_int *d);  void intc_irq_xlate_set(unsigned int irq, intc_enum id, struct intc_desc_int *d);  | 
