PCI: designware: Add get_msi_data() to pcie_host_ops
authorMinghuan Lian <Minghuan.Lian@freescale.com>
Tue, 23 Sep 2014 14:28:59 +0000 (22:28 +0800)
committerBjorn Helgaas <bhelgaas@google.com>
Wed, 24 Sep 2014 13:07:43 +0000 (07:07 -0600)
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>
drivers/pci/host/pcie-designware.c
drivers/pci/host/pcie-designware.h

index 566658750201c33df682e1fd697d782296a7f40d..34e736601259924852db9526449b1539e97c2c01 100644 (file)
@@ -366,7 +366,12 @@ static int dw_msi_setup_irq(struct msi_chip *chip, struct pci_dev *pdev,
        else
                msg.address_lo = virt_to_phys((void *)pp->msi_data);
        msg.address_hi = 0x0;
-       msg.data = pos;
+
+       if (pp->ops->get_msi_data)
+               msg.data = pp->ops->get_msi_data(pp, pos);
+       else
+               msg.data = pos;
+
        write_msi_msg(irq, &msg);
 
        return 0;
index 904e40a3f32a59320c3dbc078e9297acb0ee8898..c6256751daffb89eb939ee53840d53f864ccde3a 100644 (file)
@@ -71,6 +71,7 @@ struct pcie_host_ops {
        void (*msi_set_irq)(struct pcie_port *pp, int irq);
        void (*msi_clear_irq)(struct pcie_port *pp, int irq);
        u32 (*get_msi_addr)(struct pcie_port *pp);
+       u32 (*get_msi_data)(struct pcie_port *pp, int pos);
        void (*scan_bus)(struct pcie_port *pp);
        int (*msi_host_init)(struct pcie_port *pp, struct msi_chip *chip);
 };