diff options
Diffstat (limited to 'drivers/dma/ioat/pci.c')
-rw-r--r-- | drivers/dma/ioat/pci.c | 67 |
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 | ||
63 | struct ioat_device { | 63 | struct 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; | |||
75 | module_param(ioat_dca_enabled, int, 0644); | 74 | module_param(ioat_dca_enabled, int, 0644); |
76 | MODULE_PARM_DESC(ioat_dca_enabled, "control support of dca service (default: 1)"); | 75 | MODULE_PARM_DESC(ioat_dca_enabled, "control support of dca service (default: 1)"); |
77 | 76 | ||
77 | #define DRV_NAME "ioatdma" | ||
78 | |||
78 | static struct pci_driver ioat_pci_driver = { | 79 | static 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 = { | |||
85 | static int __devinit ioat_probe(struct pci_dev *pdev, | 86 | static 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 | |||
160 | err_version: | ||
161 | kfree(device); | ||
162 | err_kzalloc: | ||
163 | iounmap(iobase); | ||
164 | err_ioremap: | ||
165 | err_set_dma_mask: | ||
166 | pci_release_regions(pdev); | ||
167 | pci_disable_device(pdev); | ||
168 | err_request_regions: | ||
169 | err_enable_device: | ||
170 | return err; | ||
171 | } | 154 | } |
172 | 155 | ||
173 | static void __devexit ioat_remove(struct pci_dev *pdev) | 156 | static 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 | ||
192 | static int __init ioat_init_module(void) | 173 | static int __init ioat_init_module(void) |