From 2ed6dc34f9ed39bb8e4c81ea1056f0ba56315841 Mon Sep 17 00:00:00 2001 From: Shannon Nelson Date: Tue, 16 Oct 2007 01:27:42 -0700 Subject: I/OAT: Add DCA services Add code to connect to the DCA driver and provide cpu tags for use by drivers that would like to use Direct Cache Access hints. [Adrian Bunk] Several Kconfig cleanup items [Andrew Morten, Chris Leech] Fix for using cpu_physical_id() even when built for uni-processor Signed-off-by: Shannon Nelson Acked-by: David S. Miller Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- drivers/dma/ioat.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'drivers/dma/ioat.c') diff --git a/drivers/dma/ioat.c b/drivers/dma/ioat.c index ae5817bfc01..f7276bf2fe7 100644 --- a/drivers/dma/ioat.c +++ b/drivers/dma/ioat.c @@ -1,6 +1,6 @@ /* * Intel I/OAT DMA Linux driver - * Copyright(c) 2004 - 2007 Intel Corporation. + * Copyright(c) 2007 Intel Corporation. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -29,6 +29,7 @@ #include #include #include +#include #include "ioatdma.h" #include "ioatdma_registers.h" #include "ioatdma_hw.h" @@ -49,6 +50,7 @@ struct ioat_device { struct pci_dev *pdev; void __iomem *iobase; struct ioatdma_device *dma; + struct dca_provider *dca; }; static int __devinit ioat_probe(struct pci_dev *pdev, @@ -57,6 +59,10 @@ static int __devinit ioat_probe(struct pci_dev *pdev, static void __devexit ioat_remove(struct pci_dev *pdev); #endif +static int ioat_dca_enabled = 1; +module_param(ioat_dca_enabled, int, 0644); +MODULE_PARM_DESC(ioat_dca_enabled, "control support of dca service (default: 1)"); + static int ioat_setup_functionality(struct pci_dev *pdev, void __iomem *iobase) { struct ioat_device *device = pci_get_drvdata(pdev); @@ -67,6 +73,8 @@ static int ioat_setup_functionality(struct pci_dev *pdev, void __iomem *iobase) switch (version) { case IOAT_VER_1_2: device->dma = ioat_dma_probe(pdev, iobase); + if (ioat_dca_enabled) + device->dca = ioat_dca_init(pdev, iobase); break; default: err = -ENODEV; @@ -83,6 +91,13 @@ static void ioat_shutdown_functionality(struct pci_dev *pdev) ioat_dma_remove(device->dma); device->dma = NULL; } + + if (device->dca) { + unregister_dca_provider(device->dca); + free_dca_provider(device->dca); + device->dca = NULL; + } + } static struct pci_driver ioat_pci_drv = { -- cgit v1.2.3