aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/dma/ioat/pci.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/dma/ioat/pci.c')
-rw-r--r--drivers/dma/ioat/pci.c67
1 files changed, 24 insertions, 43 deletions
diff --git a/drivers/dma/ioat/pci.c b/drivers/dma/ioat/pci.c
index d7948bfd8fba..982e38fd177c 100644
--- a/drivers/dma/ioat/pci.c
+++ b/drivers/dma/ioat/pci.c
@@ -62,7 +62,6 @@ static struct pci_device_id ioat_pci_tbl[] = {
62 62
63struct ioat_device { 63struct ioat_device {
64 struct pci_dev *pdev; 64 struct pci_dev *pdev;
65 void __iomem *iobase;
66 struct ioatdma_device *dma; 65 struct ioatdma_device *dma;
67 struct dca_provider *dca; 66 struct dca_provider *dca;
68}; 67};
@@ -75,8 +74,10 @@ static int ioat_dca_enabled = 1;
75module_param(ioat_dca_enabled, int, 0644); 74module_param(ioat_dca_enabled, int, 0644);
76MODULE_PARM_DESC(ioat_dca_enabled, "control support of dca service (default: 1)"); 75MODULE_PARM_DESC(ioat_dca_enabled, "control support of dca service (default: 1)");
77 76
77#define DRV_NAME "ioatdma"
78
78static struct pci_driver ioat_pci_driver = { 79static struct pci_driver ioat_pci_driver = {
79 .name = "ioatdma", 80 .name = DRV_NAME,
80 .id_table = ioat_pci_tbl, 81 .id_table = ioat_pci_tbl,
81 .probe = ioat_probe, 82 .probe = ioat_probe,
82 .remove = __devexit_p(ioat_remove), 83 .remove = __devexit_p(ioat_remove),
@@ -85,47 +86,42 @@ static struct pci_driver ioat_pci_driver = {
85static int __devinit ioat_probe(struct pci_dev *pdev, 86static int __devinit ioat_probe(struct pci_dev *pdev,
86 const struct pci_device_id *id) 87 const struct pci_device_id *id)
87{ 88{
89 void __iomem * const *iomap;
88 void __iomem *iobase; 90 void __iomem *iobase;
91 struct device *dev = &pdev->dev;
89 struct ioat_device *device; 92 struct ioat_device *device;
90 unsigned long mmio_start, mmio_len;
91 int err; 93 int err;
92 94
93 err = pci_enable_device(pdev); 95 err = pcim_enable_device(pdev);
94 if (err) 96 if (err)
95 goto err_enable_device; 97 return err;
96 98
97 err = pci_request_regions(pdev, ioat_pci_driver.name); 99 err = pcim_iomap_regions(pdev, 1 << IOAT_MMIO_BAR, DRV_NAME);
98 if (err) 100 if (err)
99 goto err_request_regions; 101 return err;
102 iomap = pcim_iomap_table(pdev);
103 if (!iomap)
104 return -ENOMEM;
100 105
101 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(64)); 106 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(64));
102 if (err) 107 if (err)
103 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); 108 err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
104 if (err) 109 if (err)
105 goto err_set_dma_mask; 110 return err;
106 111
107 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)); 112 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
108 if (err) 113 if (err)
109 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)); 114 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
110 if (err) 115 if (err)
111 goto err_set_dma_mask; 116 return err;
112 117
113 mmio_start = pci_resource_start(pdev, 0); 118 device = devm_kzalloc(dev, sizeof(*device), GFP_KERNEL);
114 mmio_len = pci_resource_len(pdev, 0); 119 if (!device)
115 iobase = ioremap(mmio_start, mmio_len); 120 return -ENOMEM;
116 if (!iobase) {
117 err = -ENOMEM;
118 goto err_ioremap;
119 }
120 121
121 device = kzalloc(sizeof(*device), GFP_KERNEL);
122 if (!device) {
123 err = -ENOMEM;
124 goto err_kzalloc;
125 }
126 device->pdev = pdev; 122 device->pdev = pdev;
127 pci_set_drvdata(pdev, device); 123 pci_set_drvdata(pdev, device);
128 device->iobase = iobase; 124 iobase = iomap[IOAT_MMIO_BAR];
129 125
130 pci_set_master(pdev); 126 pci_set_master(pdev);
131 127
@@ -146,28 +142,15 @@ static int __devinit ioat_probe(struct pci_dev *pdev,
146 device->dca = ioat3_dca_init(pdev, iobase); 142 device->dca = ioat3_dca_init(pdev, iobase);
147 break; 143 break;
148 default: 144 default:
149 err = -ENODEV; 145 return -ENODEV;
150 break;
151 } 146 }
152 if (!device->dma)
153 err = -ENODEV;
154 147
155 if (err) 148 if (!device->dma) {
156 goto err_version; 149 dev_err(dev, "Intel(R) I/OAT DMA Engine init failed\n");
150 return -ENODEV;
151 }
157 152
158 return 0; 153 return 0;
159
160err_version:
161 kfree(device);
162err_kzalloc:
163 iounmap(iobase);
164err_ioremap:
165err_set_dma_mask:
166 pci_release_regions(pdev);
167 pci_disable_device(pdev);
168err_request_regions:
169err_enable_device:
170 return err;
171} 154}
172 155
173static void __devexit ioat_remove(struct pci_dev *pdev) 156static void __devexit ioat_remove(struct pci_dev *pdev)
@@ -185,8 +168,6 @@ static void __devexit ioat_remove(struct pci_dev *pdev)
185 ioat_dma_remove(device->dma); 168 ioat_dma_remove(device->dma);
186 device->dma = NULL; 169 device->dma = NULL;
187 } 170 }
188
189 kfree(device);
190} 171}
191 172
192static int __init ioat_init_module(void) 173static int __init ioat_init_module(void)