Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1285970
| From | Keith Busch <keith.busch@intel.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCHv6 4/7] x86-pci: allow pci domain specific dma ops |
| Date | 2015-12-07 22:40 +0100 |
| Message-ID | <qDbFM-1D6-35@gated-at.bofh.it> (permalink) |
| References | <qDbFL-1D6-7@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
New x86 pci h/w will require dma operations specific to that domain. This
patch allows those domains to register their operations, and sets devices
as they are discovere3d in that domain to use them.
Signed-off-by: Keith Busch <keith.busch@intel.com>
---
arch/x86/include/asm/device.h | 10 ++++++++++
arch/x86/pci/common.c | 38 ++++++++++++++++++++++++++++++++++++++
2 files changed, 48 insertions(+)
diff --git a/arch/x86/include/asm/device.h b/arch/x86/include/asm/device.h
index 03dd729..3b23897 100644
--- a/arch/x86/include/asm/device.h
+++ b/arch/x86/include/asm/device.h
@@ -10,6 +10,16 @@ struct dev_archdata {
#endif
};
+#if defined(CONFIG_X86_DEV_DMA_OPS) && defined(CONFIG_PCI_DOMAINS)
+struct dma_domain {
+ struct list_head node;
+ struct dma_map_ops *dma_ops;
+ int domain_nr;
+};
+extern void add_dma_domain(struct dma_domain *domain);
+extern void del_dma_domain(struct dma_domain *domain);
+#endif
+
struct pdev_archdata {
};
diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c
index eccd4d9..106fd13 100644
--- a/arch/x86/pci/common.c
+++ b/arch/x86/pci/common.c
@@ -641,6 +641,43 @@ unsigned int pcibios_assign_all_busses(void)
return (pci_probe & PCI_ASSIGN_ALL_BUSSES) ? 1 : 0;
}
+#if defined(CONFIG_X86_DEV_DMA_OPS) && defined(CONFIG_PCI_DOMAINS)
+LIST_HEAD(dma_domain_list);
+DEFINE_SPINLOCK(dma_domain_list_lock);
+
+void add_dma_domain(struct dma_domain *domain)
+{
+ spin_lock(&dma_domain_list_lock);
+ list_add(&domain->node, &dma_domain_list);
+ spin_unlock(&dma_domain_list_lock);
+}
+EXPORT_SYMBOL_GPL(add_dma_domain);
+
+void del_dma_domain(struct dma_domain *domain)
+{
+ spin_lock(&dma_domain_list_lock);
+ list_del(&domain->node);
+ spin_unlock(&dma_domain_list_lock);
+}
+EXPORT_SYMBOL_GPL(del_dma_domain);
+
+static void set_dma_domain_ops(struct pci_dev *pdev)
+{
+ struct dma_domain *domain;
+
+ spin_lock(&dma_domain_list_lock);
+ list_for_each_entry(domain, &dma_domain_list, node) {
+ if (pci_domain_nr(pdev->bus) == domain->domain_nr) {
+ pdev->dev.archdata.dma_ops = domain->dma_ops;
+ break;
+ }
+ }
+ spin_unlock(&dma_domain_list_lock);
+}
+#else
+static void set_dma_domain_ops(struct pci_dev *pdev) {}
+#endif
+
int pcibios_add_device(struct pci_dev *dev)
{
struct setup_data *data;
@@ -670,6 +707,7 @@ int pcibios_add_device(struct pci_dev *dev)
pa_data = data->next;
iounmap(data);
}
+ set_dma_domain_ops(dev);
return 0;
}
--
2.6.2.307.g37023ba
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCHv6 0/7] Driver for new "VMD" device Keith Busch <keith.busch@intel.com> - 2015-12-07 22:40 +0100 [PATCHv5 7/7] pciutils: Allow 32-bit domains Keith Busch <keith.busch@intel.com> - 2015-12-07 22:40 +0100 [PATCHv6 5/7] x86/pci: Initial commit for new VMD device driver Keith Busch <keith.busch@intel.com> - 2015-12-07 22:40 +0100 [PATCHv6 4/7] x86-pci: allow pci domain specific dma ops Keith Busch <keith.busch@intel.com> - 2015-12-07 22:40 +0100 [PATCHv6 2/7] pci: child bus alloc fix on constrained resource Keith Busch <keith.busch@intel.com> - 2015-12-07 22:40 +0100 [PATCHv6 6/7] aer_inject: Use 32 bit int type domains Keith Busch <keith.busch@intel.com> - 2015-12-07 22:40 +0100 [PATCHv6 3/7] Export msi and irq functions for module use Keith Busch <keith.busch@intel.com> - 2015-12-07 22:40 +0100 Re: [PATCHv6 0/7] Driver for new "VMD" device Thomas Gleixner <tglx@linutronix.de> - 2015-12-08 13:20 +0100
csiph-web