diff options
Diffstat (limited to 'arch/x86/include/asm/hw_irq.h')
| -rw-r--r-- | arch/x86/include/asm/hw_irq.h | 140 | 
1 files changed, 68 insertions, 72 deletions
diff --git a/arch/x86/include/asm/hw_irq.h b/arch/x86/include/asm/hw_irq.h index e9571ddabc4f..6615032e19c8 100644 --- a/arch/x86/include/asm/hw_irq.h +++ b/arch/x86/include/asm/hw_irq.h @@ -29,6 +29,7 @@  extern asmlinkage void apic_timer_interrupt(void);  extern asmlinkage void x86_platform_ipi(void);  extern asmlinkage void kvm_posted_intr_ipi(void); +extern asmlinkage void kvm_posted_intr_wakeup_ipi(void);  extern asmlinkage void error_interrupt(void);  extern asmlinkage void irq_work_interrupt(void); @@ -36,43 +37,10 @@ extern asmlinkage void spurious_interrupt(void);  extern asmlinkage void thermal_interrupt(void);  extern asmlinkage void reschedule_interrupt(void); -extern asmlinkage void invalidate_interrupt(void); -extern asmlinkage void invalidate_interrupt0(void); -extern asmlinkage void invalidate_interrupt1(void); -extern asmlinkage void invalidate_interrupt2(void); -extern asmlinkage void invalidate_interrupt3(void); -extern asmlinkage void invalidate_interrupt4(void); -extern asmlinkage void invalidate_interrupt5(void); -extern asmlinkage void invalidate_interrupt6(void); -extern asmlinkage void invalidate_interrupt7(void); -extern asmlinkage void invalidate_interrupt8(void); -extern asmlinkage void invalidate_interrupt9(void); -extern asmlinkage void invalidate_interrupt10(void); -extern asmlinkage void invalidate_interrupt11(void); -extern asmlinkage void invalidate_interrupt12(void); -extern asmlinkage void invalidate_interrupt13(void); -extern asmlinkage void invalidate_interrupt14(void); -extern asmlinkage void invalidate_interrupt15(void); -extern asmlinkage void invalidate_interrupt16(void); -extern asmlinkage void invalidate_interrupt17(void); -extern asmlinkage void invalidate_interrupt18(void); -extern asmlinkage void invalidate_interrupt19(void); -extern asmlinkage void invalidate_interrupt20(void); -extern asmlinkage void invalidate_interrupt21(void); -extern asmlinkage void invalidate_interrupt22(void); -extern asmlinkage void invalidate_interrupt23(void); -extern asmlinkage void invalidate_interrupt24(void); -extern asmlinkage void invalidate_interrupt25(void); -extern asmlinkage void invalidate_interrupt26(void); -extern asmlinkage void invalidate_interrupt27(void); -extern asmlinkage void invalidate_interrupt28(void); -extern asmlinkage void invalidate_interrupt29(void); -extern asmlinkage void invalidate_interrupt30(void); -extern asmlinkage void invalidate_interrupt31(void); -  extern asmlinkage void irq_move_cleanup_interrupt(void);  extern asmlinkage void reboot_interrupt(void);  extern asmlinkage void threshold_interrupt(void); +extern asmlinkage void deferred_error_interrupt(void);  extern asmlinkage void call_function_interrupt(void);  extern asmlinkage void call_function_single_interrupt(void); @@ -87,60 +55,93 @@ extern void trace_spurious_interrupt(void);  extern void trace_thermal_interrupt(void);  extern void trace_reschedule_interrupt(void);  extern void trace_threshold_interrupt(void); +extern void trace_deferred_error_interrupt(void);  extern void trace_call_function_interrupt(void);  extern void trace_call_function_single_interrupt(void);  #define trace_irq_move_cleanup_interrupt  irq_move_cleanup_interrupt  #define trace_reboot_interrupt  reboot_interrupt  #define trace_kvm_posted_intr_ipi kvm_posted_intr_ipi +#define trace_kvm_posted_intr_wakeup_ipi kvm_posted_intr_wakeup_ipi  #endif /* CONFIG_TRACING */ -#ifdef CONFIG_IRQ_REMAP -/* Intel specific interrupt remapping information */ -struct irq_2_iommu { -	struct intel_iommu *iommu; -	u16 irte_index; -	u16 sub_handle; -	u8  irte_mask; -}; - -/* AMD specific interrupt remapping information */ -struct irq_2_irte { -	u16 devid; /* Device ID for IRTE table */ -	u16 index; /* Index into IRTE table*/ -}; -#endif	/* CONFIG_IRQ_REMAP */ -  #ifdef	CONFIG_X86_LOCAL_APIC  struct irq_data; +struct pci_dev; +struct msi_desc; + +enum irq_alloc_type { +	X86_IRQ_ALLOC_TYPE_IOAPIC = 1, +	X86_IRQ_ALLOC_TYPE_HPET, +	X86_IRQ_ALLOC_TYPE_MSI, +	X86_IRQ_ALLOC_TYPE_MSIX, +	X86_IRQ_ALLOC_TYPE_DMAR, +	X86_IRQ_ALLOC_TYPE_UV, +}; -struct irq_cfg { -	cpumask_var_t		domain; -	cpumask_var_t		old_domain; -	u8			vector; -	u8			move_in_progress : 1; -#ifdef CONFIG_IRQ_REMAP -	u8			remapped : 1; +struct irq_alloc_info { +	enum irq_alloc_type	type; +	u32			flags; +	const struct cpumask	*mask;	/* CPU mask for vector allocation */  	union { -		struct irq_2_iommu irq_2_iommu; -		struct irq_2_irte  irq_2_irte; -	}; +		int		unused; +#ifdef	CONFIG_HPET_TIMER +		struct { +			int		hpet_id; +			int		hpet_index; +			void		*hpet_data; +		};  #endif -	union { -#ifdef CONFIG_X86_IO_APIC +#ifdef	CONFIG_PCI_MSI  		struct { -			struct list_head	irq_2_pin; +			struct pci_dev	*msi_dev; +			irq_hw_number_t	msi_hwirq; +		}; +#endif +#ifdef	CONFIG_X86_IO_APIC +		struct { +			int		ioapic_id; +			int		ioapic_pin; +			int		ioapic_node; +			u32		ioapic_trigger : 1; +			u32		ioapic_polarity : 1; +			u32		ioapic_valid : 1; +			struct IO_APIC_route_entry *ioapic_entry; +		}; +#endif +#ifdef	CONFIG_DMAR_TABLE +		struct { +			int		dmar_id; +			void		*dmar_data; +		}; +#endif +#ifdef	CONFIG_HT_IRQ +		struct { +			int		ht_pos; +			int		ht_idx; +			struct pci_dev	*ht_dev; +			void		*ht_update; +		}; +#endif +#ifdef	CONFIG_X86_UV +		struct { +			int		uv_limit; +			int		uv_blade; +			unsigned long	uv_offset; +			char		*uv_name;  		};  #endif  	};  }; +struct irq_cfg { +	unsigned int		dest_apicid; +	u8			vector; +}; +  extern struct irq_cfg *irq_cfg(unsigned int irq);  extern struct irq_cfg *irqd_cfg(struct irq_data *irq_data); -extern struct irq_cfg *alloc_irq_and_cfg_at(unsigned int at, int node);  extern void lock_vector_lock(void);  extern void unlock_vector_lock(void); -extern int assign_irq_vector(int, struct irq_cfg *, const struct cpumask *); -extern void clear_irq_vector(int irq, struct irq_cfg *cfg);  extern void setup_vector_irq(int cpu);  #ifdef CONFIG_SMP  extern void send_cleanup_vector(struct irq_cfg *); @@ -150,10 +151,7 @@ static inline void send_cleanup_vector(struct irq_cfg *c) { }  static inline void irq_complete_move(struct irq_cfg *c) { }  #endif -extern int apic_retrigger_irq(struct irq_data *data);  extern void apic_ack_edge(struct irq_data *data); -extern int apic_set_affinity(struct irq_data *data, const struct cpumask *mask, -			     unsigned int *dest_id);  #else	/*  CONFIG_X86_LOCAL_APIC */  static inline void lock_vector_lock(void) {}  static inline void unlock_vector_lock(void) {} @@ -163,8 +161,7 @@ static inline void unlock_vector_lock(void) {}  extern atomic_t irq_err_count;  extern atomic_t irq_mis_count; -/* EISA */ -extern void eisa_set_level_irq(unsigned int irq); +extern void elcr_set_level_irq(unsigned int irq);  /* SMP */  extern __visible void smp_apic_timer_interrupt(struct pt_regs *); @@ -178,7 +175,6 @@ extern asmlinkage void smp_irq_move_cleanup_interrupt(void);  extern __visible void smp_reschedule_interrupt(struct pt_regs *);  extern __visible void smp_call_function_interrupt(struct pt_regs *);  extern __visible void smp_call_function_single_interrupt(struct pt_regs *); -extern __visible void smp_invalidate_interrupt(struct pt_regs *);  #endif  extern char irq_entries_start[];  |