forked from Minki/linux
ahci: compile out msi/msix infrastructure
Quoting Arnd:
The AHCI driver is used for some on-chip devices that do not use PCI
for probing, and it can be built even when CONFIG_PCI is disabled, but
that now results in a build failure:
ata/libahci.c: In function 'ahci_host_activate_multi_irqs':
ata/libahci.c:2475:4: error: invalid use of undefined type 'struct msix_entry'
ata/libahci.c:2475:21: error: dereferencing pointer to incomplete type 'struct msix_entry'
Add ifdef CONFIG_PCI_MSI infrastructure to compile out the multi-msi and
multi-msix code.
Reported-by: Arnd Bergmann <arnd@arndb.de>
Tested--by: Arnd Bergmann <arnd@arndb.de>
[arnd: fix up pci enabled case]
Reported-by: Paul Gortmaker <paul.gortmaker@windriver.com>
Fixes: d684a90d38
("ahci: per-port msix support")
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
parent
7e22c0024c
commit
f893180b79
@ -35,6 +35,7 @@
|
||||
#ifndef _AHCI_H
|
||||
#define _AHCI_H
|
||||
|
||||
#include <linux/pci.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/libata.h>
|
||||
#include <linux/phy/phy.h>
|
||||
@ -237,12 +238,18 @@ enum {
|
||||
AHCI_HFLAG_DELAY_ENGINE = (1 << 15), /* do not start engine on
|
||||
port start (wait until
|
||||
error-handling stage) */
|
||||
AHCI_HFLAG_MULTI_MSI = (1 << 16), /* multiple PCI MSIs */
|
||||
AHCI_HFLAG_NO_DEVSLP = (1 << 17), /* no device sleep */
|
||||
AHCI_HFLAG_NO_FBS = (1 << 18), /* no FBS */
|
||||
AHCI_HFLAG_EDGE_IRQ = (1 << 19), /* HOST_IRQ_STAT behaves as
|
||||
Edge Triggered */
|
||||
AHCI_HFLAG_MULTI_MSIX = (1 << 20), /* per-port MSI-X */
|
||||
#ifdef CONFIG_PCI_MSI
|
||||
AHCI_HFLAG_MULTI_MSI = (1 << 20), /* multiple PCI MSIs */
|
||||
AHCI_HFLAG_MULTI_MSIX = (1 << 21), /* per-port MSI-X */
|
||||
#else
|
||||
/* compile out MSI infrastructure */
|
||||
AHCI_HFLAG_MULTI_MSI = 0,
|
||||
AHCI_HFLAG_MULTI_MSIX = 0,
|
||||
#endif
|
||||
|
||||
/* ap->flags bits */
|
||||
|
||||
@ -355,6 +362,21 @@ struct ahci_host_priv {
|
||||
void (*start_engine)(struct ata_port *ap);
|
||||
};
|
||||
|
||||
#ifdef CONFIG_PCI_MSI
|
||||
static inline int ahci_irq_vector(struct ahci_host_priv *hpriv, int port)
|
||||
{
|
||||
if (hpriv->flags & AHCI_HFLAG_MULTI_MSIX)
|
||||
return hpriv->msix[port].vector;
|
||||
else
|
||||
return hpriv->irq + port;
|
||||
}
|
||||
#else
|
||||
static inline int ahci_irq_vector(struct ahci_host_priv *hpriv, int port)
|
||||
{
|
||||
return hpriv->irq;
|
||||
}
|
||||
#endif
|
||||
|
||||
extern int ahci_ignore_sss;
|
||||
|
||||
extern struct device_attribute *ahci_shost_attrs[];
|
||||
|
@ -2469,12 +2469,7 @@ static int ahci_host_activate_multi_irqs(struct ata_host *host,
|
||||
*/
|
||||
for (i = 0; i < host->n_ports; i++) {
|
||||
struct ahci_port_priv *pp = host->ports[i]->private_data;
|
||||
int irq;
|
||||
|
||||
if (hpriv->flags & AHCI_HFLAG_MULTI_MSIX)
|
||||
irq = hpriv->msix[i].vector;
|
||||
else
|
||||
irq = hpriv->irq + i;
|
||||
int irq = ahci_irq_vector(hpriv, i);
|
||||
|
||||
/* Do not receive interrupts sent by dummy ports */
|
||||
if (!pp) {
|
||||
|
Loading…
Reference in New Issue
Block a user