diff options
Diffstat (limited to 'kernel/irq/chip.c')
| -rw-r--r-- | kernel/irq/chip.c | 30 | 
1 files changed, 22 insertions, 8 deletions
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index 3aca9f29d30..cbd97ce0b00 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c @@ -90,27 +90,41 @@ int irq_set_handler_data(unsigned int irq, void *data)  EXPORT_SYMBOL(irq_set_handler_data);  /** - *	irq_set_msi_desc - set MSI descriptor data for an irq - *	@irq:	Interrupt number - *	@entry:	Pointer to MSI descriptor data + *	irq_set_msi_desc_off - set MSI descriptor data for an irq at offset + *	@irq_base:	Interrupt number base + *	@irq_offset:	Interrupt number offset + *	@entry:		Pointer to MSI descriptor data   * - *	Set the MSI descriptor entry for an irq + *	Set the MSI descriptor entry for an irq at offset   */ -int irq_set_msi_desc(unsigned int irq, struct msi_desc *entry) +int irq_set_msi_desc_off(unsigned int irq_base, unsigned int irq_offset, +			 struct msi_desc *entry)  {  	unsigned long flags; -	struct irq_desc *desc = irq_get_desc_lock(irq, &flags, IRQ_GET_DESC_CHECK_GLOBAL); +	struct irq_desc *desc = irq_get_desc_lock(irq_base + irq_offset, &flags, IRQ_GET_DESC_CHECK_GLOBAL);  	if (!desc)  		return -EINVAL;  	desc->irq_data.msi_desc = entry; -	if (entry) -		entry->irq = irq; +	if (entry && !irq_offset) +		entry->irq = irq_base;  	irq_put_desc_unlock(desc, flags);  	return 0;  }  /** + *	irq_set_msi_desc - set MSI descriptor data for an irq + *	@irq:	Interrupt number + *	@entry:	Pointer to MSI descriptor data + * + *	Set the MSI descriptor entry for an irq + */ +int irq_set_msi_desc(unsigned int irq, struct msi_desc *entry) +{ +	return irq_set_msi_desc_off(irq, 0, entry); +} + +/**   *	irq_set_chip_data - set irq chip data for an irq   *	@irq:	Interrupt number   *	@data:	Pointer to chip specific data  |