2012-03-30 22:47:00 +04:00
/*
* Copyright ( C ) 2012 Advanced Micro Devices , Inc .
* Author : Joerg Roedel < joerg . roedel @ amd . com >
*
* This program is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License version 2 as published
* by the Free Software Foundation .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*
* This header file contains stuff that is shared between different interrupt
* remapping drivers but with no need to be visible outside of the IOMMU layer .
*/
2012-03-30 22:47:08 +04:00
# ifndef __IRQ_REMAPPING_H
# define __IRQ_REMAPPING_H
2012-03-30 22:47:00 +04:00
# ifdef CONFIG_IRQ_REMAP
2012-03-30 22:47:02 +04:00
struct IO_APIC_route_entry ;
struct io_apic_irq_attr ;
2012-03-30 22:47:03 +04:00
struct irq_data ;
struct cpumask ;
2012-03-30 22:47:05 +04:00
struct pci_dev ;
struct msi_msg ;
2012-03-30 22:47:02 +04:00
2012-03-30 22:47:07 +04:00
extern int disable_irq_remap ;
2013-04-17 00:38:32 +04:00
extern int irq_remap_broken ;
2012-03-30 22:47:00 +04:00
extern int disable_sourceid_checking ;
extern int no_x2apic_optout ;
2012-09-26 14:44:43 +04:00
extern int irq_remapping_enabled ;
2012-03-30 22:47:00 +04:00
struct irq_remap_ops {
/* Check whether Interrupt Remapping is supported */
int ( * supported ) ( void ) ;
/* Initializes hardware and makes it ready for remapping interrupts */
2012-03-30 22:47:07 +04:00
int ( * prepare ) ( void ) ;
2012-03-30 22:47:00 +04:00
/* Enables the remapping hardware */
2012-03-30 22:47:07 +04:00
int ( * enable ) ( void ) ;
2012-03-30 22:47:01 +04:00
/* Disables the remapping hardware */
2012-03-30 22:47:07 +04:00
void ( * disable ) ( void ) ;
2012-03-30 22:47:01 +04:00
/* Reenables the remapping hardware */
2012-03-30 22:47:07 +04:00
int ( * reenable ) ( int ) ;
2012-03-30 22:47:01 +04:00
/* Enable fault handling */
int ( * enable_faulting ) ( void ) ;
2012-03-30 22:47:02 +04:00
/* IO-APIC setup routine */
int ( * setup_ioapic_entry ) ( int irq , struct IO_APIC_route_entry * ,
unsigned int , int ,
struct io_apic_irq_attr * ) ;
2012-03-30 22:47:03 +04:00
/* Set the CPU affinity of a remapped interrupt */
int ( * set_affinity ) ( struct irq_data * data , const struct cpumask * mask ,
bool force ) ;
2012-03-30 22:47:04 +04:00
/* Free an IRQ */
int ( * free_irq ) ( int ) ;
2012-03-30 22:47:05 +04:00
/* Create MSI msg to use for interrupt remapping */
void ( * compose_msi_msg ) ( struct pci_dev * ,
unsigned int , unsigned int ,
struct msi_msg * , u8 ) ;
/* Allocate remapping resources for MSI */
int ( * msi_alloc_irq ) ( struct pci_dev * , int , int ) ;
/* Setup the remapped MSI irq */
int ( * msi_setup_irq ) ( struct pci_dev * , unsigned int , int , int ) ;
/* Setup interrupt remapping for an HPET MSI */
int ( * setup_hpet_msi ) ( unsigned int , unsigned int ) ;
2012-03-30 22:47:00 +04:00
} ;
extern struct irq_remap_ops intel_irq_remap_ops ;
2012-06-26 18:46:04 +04:00
extern struct irq_remap_ops amd_iommu_irq_ops ;
2012-03-30 22:47:00 +04:00
2012-06-15 18:53:51 +04:00
# else /* CONFIG_IRQ_REMAP */
# define irq_remapping_enabled 0
# define disable_irq_remap 1
2013-04-17 00:38:32 +04:00
# define irq_remap_broken 0
2012-06-15 18:53:51 +04:00
2012-03-30 22:47:00 +04:00
# endif /* CONFIG_IRQ_REMAP */
2012-03-30 22:47:08 +04:00
# endif /* __IRQ_REMAPPING_H */