diff options
author | Minghuan Lian <Minghuan.Lian@freescale.com> | 2014-09-23 10:28:59 -0400 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2014-09-24 09:07:43 -0400 |
commit | 24832b4de315ad00e5430a53772750dfcf18514d (patch) | |
tree | 8942ed7d5e96510db2d8e7bcd69e1de73ebc6d96 | |
parent | 450e344e421b9f555261a2d97952d9e71d4cb082 (diff) |
PCI: designware: Add get_msi_data() to pcie_host_ops
Add a struct pcie_host_ops .get_msi_data() method for platforms to return
their special MSI message data.
Signed-off-by: Minghuan Lian <Minghuan.Lian@freescale.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Mohit KUMAR <mohit.kumar@st.com>
-rw-r--r-- | drivers/pci/host/pcie-designware.c | 7 | ||||
-rw-r--r-- | drivers/pci/host/pcie-designware.h | 1 |
2 files changed, 7 insertions, 1 deletions
diff --git a/drivers/pci/host/pcie-designware.c b/drivers/pci/host/pcie-designware.c index 566658750201..34e736601259 100644 --- a/drivers/pci/host/pcie-designware.c +++ b/drivers/pci/host/pcie-designware.c | |||
@@ -366,7 +366,12 @@ static int dw_msi_setup_irq(struct msi_chip *chip, struct pci_dev *pdev, | |||
366 | else | 366 | else |
367 | msg.address_lo = virt_to_phys((void *)pp->msi_data); | 367 | msg.address_lo = virt_to_phys((void *)pp->msi_data); |
368 | msg.address_hi = 0x0; | 368 | msg.address_hi = 0x0; |
369 | msg.data = pos; | 369 | |
370 | if (pp->ops->get_msi_data) | ||
371 | msg.data = pp->ops->get_msi_data(pp, pos); | ||
372 | else | ||
373 | msg.data = pos; | ||
374 | |||
370 | write_msi_msg(irq, &msg); | 375 | write_msi_msg(irq, &msg); |
371 | 376 | ||
372 | return 0; | 377 | return 0; |
diff --git a/drivers/pci/host/pcie-designware.h b/drivers/pci/host/pcie-designware.h index 904e40a3f32a..c6256751daff 100644 --- a/drivers/pci/host/pcie-designware.h +++ b/drivers/pci/host/pcie-designware.h | |||
@@ -71,6 +71,7 @@ struct pcie_host_ops { | |||
71 | void (*msi_set_irq)(struct pcie_port *pp, int irq); | 71 | void (*msi_set_irq)(struct pcie_port *pp, int irq); |
72 | void (*msi_clear_irq)(struct pcie_port *pp, int irq); | 72 | void (*msi_clear_irq)(struct pcie_port *pp, int irq); |
73 | u32 (*get_msi_addr)(struct pcie_port *pp); | 73 | u32 (*get_msi_addr)(struct pcie_port *pp); |
74 | u32 (*get_msi_data)(struct pcie_port *pp, int pos); | ||
74 | void (*scan_bus)(struct pcie_port *pp); | 75 | void (*scan_bus)(struct pcie_port *pp); |
75 | int (*msi_host_init)(struct pcie_port *pp, struct msi_chip *chip); | 76 | int (*msi_host_init)(struct pcie_port *pp, struct msi_chip *chip); |
76 | }; | 77 | }; |