pci: Convert msi to new irq_chip functions
Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Ingo Molnar <mingo@elte.hu> Acked-by: Jesse Barnes <jbarnes@virtuousgeek.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: "David S. Miller" <davem@davemloft.net> Cc: Tony Luck <tony.luck@intel.com> Cc: Russell King <linux@arm.linux.org.uk>
This commit is contained in:
		
					parent
					
						
							
								7c5f13519a
							
						
					
				
			
			
				commit
				
					
						1c9db52534
					
				
			
		
					 12 changed files with 52 additions and 51 deletions
				
			
		| 
						 | 
				
			
			@ -164,10 +164,10 @@ static void iop13xx_msi_nop(unsigned int irq)
 | 
			
		|||
static struct irq_chip iop13xx_msi_chip = {
 | 
			
		||||
	.name = "PCI-MSI",
 | 
			
		||||
	.ack = iop13xx_msi_nop,
 | 
			
		||||
	.enable = unmask_msi_irq,
 | 
			
		||||
	.disable = mask_msi_irq,
 | 
			
		||||
	.mask = mask_msi_irq,
 | 
			
		||||
	.unmask = unmask_msi_irq,
 | 
			
		||||
	.irq_enable = unmask_msi_irq,
 | 
			
		||||
	.irq_disable = mask_msi_irq,
 | 
			
		||||
	.irq_mask = mask_msi_irq,
 | 
			
		||||
	.irq_unmask = unmask_msi_irq,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
int arch_setup_msi_irq(struct pci_dev *pdev, struct msi_desc *desc)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -104,8 +104,8 @@ static int ia64_msi_retrigger_irq(unsigned int irq)
 | 
			
		|||
 */
 | 
			
		||||
static struct irq_chip ia64_msi_chip = {
 | 
			
		||||
	.name		= "PCI-MSI",
 | 
			
		||||
	.mask		= mask_msi_irq,
 | 
			
		||||
	.unmask		= unmask_msi_irq,
 | 
			
		||||
	.irq_mask	= mask_msi_irq,
 | 
			
		||||
	.irq_unmask	= unmask_msi_irq,
 | 
			
		||||
	.ack		= ia64_ack_msi_irq,
 | 
			
		||||
#ifdef CONFIG_SMP
 | 
			
		||||
	.set_affinity	= ia64_set_msi_irq_affinity,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -228,8 +228,8 @@ static int sn_msi_retrigger_irq(unsigned int irq)
 | 
			
		|||
 | 
			
		||||
static struct irq_chip sn_msi_chip = {
 | 
			
		||||
	.name		= "PCI-MSI",
 | 
			
		||||
	.mask		= mask_msi_irq,
 | 
			
		||||
	.unmask		= unmask_msi_irq,
 | 
			
		||||
	.irq_mask	= mask_msi_irq,
 | 
			
		||||
	.irq_unmask	= unmask_msi_irq,
 | 
			
		||||
	.ack		= sn_ack_msi_irq,
 | 
			
		||||
#ifdef CONFIG_SMP
 | 
			
		||||
	.set_affinity	= sn_set_msi_irq_affinity,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -310,9 +310,9 @@ static void axon_msi_teardown_msi_irqs(struct pci_dev *dev)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
static struct irq_chip msic_irq_chip = {
 | 
			
		||||
	.mask		= mask_msi_irq,
 | 
			
		||||
	.unmask		= unmask_msi_irq,
 | 
			
		||||
	.shutdown	= unmask_msi_irq,
 | 
			
		||||
	.irq_mask	= mask_msi_irq,
 | 
			
		||||
	.irq_unmask	= unmask_msi_irq,
 | 
			
		||||
	.irq_shutdown	= mask_msi_irq,
 | 
			
		||||
	.name		= "AXON-MSI",
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -243,7 +243,7 @@ static unsigned int xics_startup(unsigned int virq)
 | 
			
		|||
	 * at that level, so we do it here by hand.
 | 
			
		||||
	 */
 | 
			
		||||
	if (irq_to_desc(virq)->msi_desc)
 | 
			
		||||
		unmask_msi_irq(virq);
 | 
			
		||||
		unmask_msi_irq(irq_get_irq_data(virq));
 | 
			
		||||
 | 
			
		||||
	/* unmask it */
 | 
			
		||||
	xics_unmask_irq(virq);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -51,8 +51,8 @@ static void fsl_msi_end_irq(unsigned int virq)
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
static struct irq_chip fsl_msi_chip = {
 | 
			
		||||
	.mask		= mask_msi_irq,
 | 
			
		||||
	.unmask		= unmask_msi_irq,
 | 
			
		||||
	.irq_mask	= mask_msi_irq,
 | 
			
		||||
	.irq_unmask	= unmask_msi_irq,
 | 
			
		||||
	.ack		= fsl_msi_end_irq,
 | 
			
		||||
	.name		= "FSL-MSI",
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,24 +39,24 @@
 | 
			
		|||
static struct mpic *msi_mpic;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void mpic_pasemi_msi_mask_irq(unsigned int irq)
 | 
			
		||||
static void mpic_pasemi_msi_mask_irq(struct irq_data *data)
 | 
			
		||||
{
 | 
			
		||||
	pr_debug("mpic_pasemi_msi_mask_irq %d\n", irq);
 | 
			
		||||
	mask_msi_irq(irq);
 | 
			
		||||
	mpic_mask_irq(irq);
 | 
			
		||||
	pr_debug("mpic_pasemi_msi_mask_irq %d\n", data->irq);
 | 
			
		||||
	mask_msi_irq(data);
 | 
			
		||||
	mpic_mask_irq(data->irq);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void mpic_pasemi_msi_unmask_irq(unsigned int irq)
 | 
			
		||||
static void mpic_pasemi_msi_unmask_irq(struct irq_data *data)
 | 
			
		||||
{
 | 
			
		||||
	pr_debug("mpic_pasemi_msi_unmask_irq %d\n", irq);
 | 
			
		||||
	mpic_unmask_irq(irq);
 | 
			
		||||
	unmask_msi_irq(irq);
 | 
			
		||||
	pr_debug("mpic_pasemi_msi_unmask_irq %d\n", data->irq);
 | 
			
		||||
	mpic_unmask_irq(data->irq);
 | 
			
		||||
	unmask_msi_irq(data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct irq_chip mpic_pasemi_msi_chip = {
 | 
			
		||||
	.shutdown	= mpic_pasemi_msi_mask_irq,
 | 
			
		||||
	.mask		= mpic_pasemi_msi_mask_irq,
 | 
			
		||||
	.unmask		= mpic_pasemi_msi_unmask_irq,
 | 
			
		||||
	.irq_shutdown	= mpic_pasemi_msi_mask_irq,
 | 
			
		||||
	.irq_mask	= mpic_pasemi_msi_mask_irq,
 | 
			
		||||
	.irq_unmask	= mpic_pasemi_msi_unmask_irq,
 | 
			
		||||
	.eoi		= mpic_end_irq,
 | 
			
		||||
	.set_type	= mpic_set_irq_type,
 | 
			
		||||
	.set_affinity	= mpic_set_affinity,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,22 +23,22 @@
 | 
			
		|||
/* A bit ugly, can we get this from the pci_dev somehow? */
 | 
			
		||||
static struct mpic *msi_mpic;
 | 
			
		||||
 | 
			
		||||
static void mpic_u3msi_mask_irq(unsigned int irq)
 | 
			
		||||
static void mpic_u3msi_mask_irq(struct irq_data *data)
 | 
			
		||||
{
 | 
			
		||||
	mask_msi_irq(irq);
 | 
			
		||||
	mpic_mask_irq(irq);
 | 
			
		||||
	mask_msi_irq(data);
 | 
			
		||||
	mpic_mask_irq(data->irq);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void mpic_u3msi_unmask_irq(unsigned int irq)
 | 
			
		||||
static void mpic_u3msi_unmask_irq(struct irq_data *data)
 | 
			
		||||
{
 | 
			
		||||
	mpic_unmask_irq(irq);
 | 
			
		||||
	unmask_msi_irq(irq);
 | 
			
		||||
	mpic_unmask_irq(data->irq);
 | 
			
		||||
	unmask_msi_irq(data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct irq_chip mpic_u3msi_chip = {
 | 
			
		||||
	.shutdown	= mpic_u3msi_mask_irq,
 | 
			
		||||
	.mask		= mpic_u3msi_mask_irq,
 | 
			
		||||
	.unmask		= mpic_u3msi_unmask_irq,
 | 
			
		||||
	.irq_shutdown	= mpic_u3msi_mask_irq,
 | 
			
		||||
	.irq_mask	= mpic_u3msi_mask_irq,
 | 
			
		||||
	.irq_unmask	= mpic_u3msi_unmask_irq,
 | 
			
		||||
	.eoi		= mpic_end_irq,
 | 
			
		||||
	.set_type	= mpic_set_irq_type,
 | 
			
		||||
	.set_affinity	= mpic_set_affinity,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -114,10 +114,10 @@ static void free_msi(struct pci_pbm_info *pbm, int msi_num)
 | 
			
		|||
 | 
			
		||||
static struct irq_chip msi_irq = {
 | 
			
		||||
	.name		= "PCI-MSI",
 | 
			
		||||
	.mask		= mask_msi_irq,
 | 
			
		||||
	.unmask		= unmask_msi_irq,
 | 
			
		||||
	.enable		= unmask_msi_irq,
 | 
			
		||||
	.disable	= mask_msi_irq,
 | 
			
		||||
	.irq_mask	= mask_msi_irq,
 | 
			
		||||
	.irq_unmask	= unmask_msi_irq,
 | 
			
		||||
	.irq_enable	= unmask_msi_irq,
 | 
			
		||||
	.irq_disable	= mask_msi_irq,
 | 
			
		||||
	/* XXX affinity XXX */
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3441,8 +3441,8 @@ ir_set_msi_irq_affinity(unsigned int irq, const struct cpumask *mask)
 | 
			
		|||
 */
 | 
			
		||||
static struct irq_chip msi_chip = {
 | 
			
		||||
	.name		= "PCI-MSI",
 | 
			
		||||
	.unmask		= unmask_msi_irq,
 | 
			
		||||
	.mask		= mask_msi_irq,
 | 
			
		||||
	.irq_unmask	= unmask_msi_irq,
 | 
			
		||||
	.irq_mask	= mask_msi_irq,
 | 
			
		||||
	.ack		= ack_apic_edge,
 | 
			
		||||
#ifdef CONFIG_SMP
 | 
			
		||||
	.set_affinity	= set_msi_irq_affinity,
 | 
			
		||||
| 
						 | 
				
			
			@ -3452,8 +3452,8 @@ static struct irq_chip msi_chip = {
 | 
			
		|||
 | 
			
		||||
static struct irq_chip msi_ir_chip = {
 | 
			
		||||
	.name		= "IR-PCI-MSI",
 | 
			
		||||
	.unmask		= unmask_msi_irq,
 | 
			
		||||
	.mask		= mask_msi_irq,
 | 
			
		||||
	.irq_unmask	= unmask_msi_irq,
 | 
			
		||||
	.irq_mask	= mask_msi_irq,
 | 
			
		||||
#ifdef CONFIG_INTR_REMAP
 | 
			
		||||
	.ack		= ir_ack_apic_edge,
 | 
			
		||||
#ifdef CONFIG_SMP
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -170,27 +170,27 @@ static void msix_mask_irq(struct msi_desc *desc, u32 flag)
 | 
			
		|||
	desc->masked = __msix_mask_irq(desc, flag);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void msi_set_mask_bit(unsigned irq, u32 flag)
 | 
			
		||||
static void msi_set_mask_bit(struct irq_data *data, u32 flag)
 | 
			
		||||
{
 | 
			
		||||
	struct msi_desc *desc = get_irq_msi(irq);
 | 
			
		||||
	struct msi_desc *desc = irq_data_get_msi(data);
 | 
			
		||||
 | 
			
		||||
	if (desc->msi_attrib.is_msix) {
 | 
			
		||||
		msix_mask_irq(desc, flag);
 | 
			
		||||
		readl(desc->mask_base);		/* Flush write to device */
 | 
			
		||||
	} else {
 | 
			
		||||
		unsigned offset = irq - desc->dev->irq;
 | 
			
		||||
		unsigned offset = data->irq - desc->dev->irq;
 | 
			
		||||
		msi_mask_irq(desc, 1 << offset, flag << offset);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void mask_msi_irq(unsigned int irq)
 | 
			
		||||
void mask_msi_irq(struct irq_data *data)
 | 
			
		||||
{
 | 
			
		||||
	msi_set_mask_bit(irq, 1);
 | 
			
		||||
	msi_set_mask_bit(data, 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void unmask_msi_irq(unsigned int irq)
 | 
			
		||||
void unmask_msi_irq(struct irq_data *data)
 | 
			
		||||
{
 | 
			
		||||
	msi_set_mask_bit(irq, 0);
 | 
			
		||||
	msi_set_mask_bit(data, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void read_msi_msg_desc(struct irq_desc *desc, struct msi_msg *msg)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,8 +11,9 @@ struct msi_msg {
 | 
			
		|||
 | 
			
		||||
/* Helper functions */
 | 
			
		||||
struct irq_desc;
 | 
			
		||||
extern void mask_msi_irq(unsigned int irq);
 | 
			
		||||
extern void unmask_msi_irq(unsigned int irq);
 | 
			
		||||
struct irq_data;
 | 
			
		||||
extern void mask_msi_irq(struct irq_data *data);
 | 
			
		||||
extern void unmask_msi_irq(struct irq_data *data);
 | 
			
		||||
extern void read_msi_msg_desc(struct irq_desc *desc, struct msi_msg *msg);
 | 
			
		||||
extern void get_cached_msi_msg_desc(struct irq_desc *desc, struct msi_msg *msg);
 | 
			
		||||
extern void write_msi_msg_desc(struct irq_desc *desc, struct msi_msg *msg);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue