summaryrefslogtreecommitdiffstats
path: root/drivers/vme
diff options
context:
space:
mode:
authorAaron Sierra <asierra@xes-inc.com>2016-04-24 16:11:38 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-05-01 17:00:00 -0400
commit326071b3c985683f8a18417bed3ea2ab930a7ba1 (patch)
tree6e6bf20fcc95af0132d25317c324da1509566e29 /drivers/vme
parent2ce7aed6a4da8ffa35f0232573a6901c0369720d (diff)
vme: add vme_init_bridge for common bridge init
Consolidate vme_bridge structure setup that every bridge was required to do itself. This came about because .irq_mtx is only used within the VME core, but was required to be setup externally. This returns the structure passed in to support shorthand like this: bridge = vme_init_bridge(&priv->bridge); Signed-off-by: Aaron Sierra <asierra@xes-inc.com> Acked-by: Martyn Welch <martyn@welchs.me.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/vme')
-rw-r--r--drivers/vme/bridges/vme_ca91cx42.c9
-rw-r--r--drivers/vme/bridges/vme_tsi148.c9
-rw-r--r--drivers/vme/vme.c14
-rw-r--r--drivers/vme/vme_bridge.h1
4 files changed, 17 insertions, 16 deletions
diff --git a/drivers/vme/bridges/vme_ca91cx42.c b/drivers/vme/bridges/vme_ca91cx42.c
index 5fbeab38889e..9f2c834e43e0 100644
--- a/drivers/vme/bridges/vme_ca91cx42.c
+++ b/drivers/vme/bridges/vme_ca91cx42.c
@@ -204,10 +204,6 @@ static int ca91cx42_irq_init(struct vme_bridge *ca91cx42_bridge)
204 /* Need pdev */ 204 /* Need pdev */
205 pdev = to_pci_dev(ca91cx42_bridge->parent); 205 pdev = to_pci_dev(ca91cx42_bridge->parent);
206 206
207 INIT_LIST_HEAD(&ca91cx42_bridge->vme_error_handlers);
208
209 mutex_init(&ca91cx42_bridge->irq_mtx);
210
211 /* Disable interrupts from PCI to VME */ 207 /* Disable interrupts from PCI to VME */
212 iowrite32(0, bridge->base + VINT_EN); 208 iowrite32(0, bridge->base + VINT_EN);
213 209
@@ -1626,6 +1622,7 @@ static int ca91cx42_probe(struct pci_dev *pdev, const struct pci_device_id *id)
1626 retval = -ENOMEM; 1622 retval = -ENOMEM;
1627 goto err_struct; 1623 goto err_struct;
1628 } 1624 }
1625 vme_init_bridge(ca91cx42_bridge);
1629 1626
1630 ca91cx42_device = kzalloc(sizeof(struct ca91cx42_driver), GFP_KERNEL); 1627 ca91cx42_device = kzalloc(sizeof(struct ca91cx42_driver), GFP_KERNEL);
1631 1628
@@ -1686,7 +1683,6 @@ static int ca91cx42_probe(struct pci_dev *pdev, const struct pci_device_id *id)
1686 } 1683 }
1687 1684
1688 /* Add master windows to list */ 1685 /* Add master windows to list */
1689 INIT_LIST_HEAD(&ca91cx42_bridge->master_resources);
1690 for (i = 0; i < CA91C142_MAX_MASTER; i++) { 1686 for (i = 0; i < CA91C142_MAX_MASTER; i++) {
1691 master_image = kmalloc(sizeof(struct vme_master_resource), 1687 master_image = kmalloc(sizeof(struct vme_master_resource),
1692 GFP_KERNEL); 1688 GFP_KERNEL);
@@ -1713,7 +1709,6 @@ static int ca91cx42_probe(struct pci_dev *pdev, const struct pci_device_id *id)
1713 } 1709 }
1714 1710
1715 /* Add slave windows to list */ 1711 /* Add slave windows to list */
1716 INIT_LIST_HEAD(&ca91cx42_bridge->slave_resources);
1717 for (i = 0; i < CA91C142_MAX_SLAVE; i++) { 1712 for (i = 0; i < CA91C142_MAX_SLAVE; i++) {
1718 slave_image = kmalloc(sizeof(struct vme_slave_resource), 1713 slave_image = kmalloc(sizeof(struct vme_slave_resource),
1719 GFP_KERNEL); 1714 GFP_KERNEL);
@@ -1741,7 +1736,6 @@ static int ca91cx42_probe(struct pci_dev *pdev, const struct pci_device_id *id)
1741 } 1736 }
1742 1737
1743 /* Add dma engines to list */ 1738 /* Add dma engines to list */
1744 INIT_LIST_HEAD(&ca91cx42_bridge->dma_resources);
1745 for (i = 0; i < CA91C142_MAX_DMA; i++) { 1739 for (i = 0; i < CA91C142_MAX_DMA; i++) {
1746 dma_ctrlr = kmalloc(sizeof(struct vme_dma_resource), 1740 dma_ctrlr = kmalloc(sizeof(struct vme_dma_resource),
1747 GFP_KERNEL); 1741 GFP_KERNEL);
@@ -1764,7 +1758,6 @@ static int ca91cx42_probe(struct pci_dev *pdev, const struct pci_device_id *id)
1764 } 1758 }
1765 1759
1766 /* Add location monitor to list */ 1760 /* Add location monitor to list */
1767 INIT_LIST_HEAD(&ca91cx42_bridge->lm_resources);
1768 lm = kmalloc(sizeof(struct vme_lm_resource), GFP_KERNEL); 1761 lm = kmalloc(sizeof(struct vme_lm_resource), GFP_KERNEL);
1769 if (lm == NULL) { 1762 if (lm == NULL) {
1770 dev_err(&pdev->dev, "Failed to allocate memory for " 1763 dev_err(&pdev->dev, "Failed to allocate memory for "
diff --git a/drivers/vme/bridges/vme_tsi148.c b/drivers/vme/bridges/vme_tsi148.c
index 60524834dba3..4bc5d451ec6c 100644
--- a/drivers/vme/bridges/vme_tsi148.c
+++ b/drivers/vme/bridges/vme_tsi148.c
@@ -314,10 +314,6 @@ static int tsi148_irq_init(struct vme_bridge *tsi148_bridge)
314 314
315 bridge = tsi148_bridge->driver_priv; 315 bridge = tsi148_bridge->driver_priv;
316 316
317 INIT_LIST_HEAD(&tsi148_bridge->vme_error_handlers);
318
319 mutex_init(&tsi148_bridge->irq_mtx);
320
321 result = request_irq(pdev->irq, 317 result = request_irq(pdev->irq,
322 tsi148_irqhandler, 318 tsi148_irqhandler,
323 IRQF_SHARED, 319 IRQF_SHARED,
@@ -2301,6 +2297,7 @@ static int tsi148_probe(struct pci_dev *pdev, const struct pci_device_id *id)
2301 retval = -ENOMEM; 2297 retval = -ENOMEM;
2302 goto err_struct; 2298 goto err_struct;
2303 } 2299 }
2300 vme_init_bridge(tsi148_bridge);
2304 2301
2305 tsi148_device = kzalloc(sizeof(struct tsi148_driver), GFP_KERNEL); 2302 tsi148_device = kzalloc(sizeof(struct tsi148_driver), GFP_KERNEL);
2306 if (tsi148_device == NULL) { 2303 if (tsi148_device == NULL) {
@@ -2387,7 +2384,6 @@ static int tsi148_probe(struct pci_dev *pdev, const struct pci_device_id *id)
2387 } 2384 }
2388 2385
2389 /* Add master windows to list */ 2386 /* Add master windows to list */
2390 INIT_LIST_HEAD(&tsi148_bridge->master_resources);
2391 for (i = 0; i < master_num; i++) { 2387 for (i = 0; i < master_num; i++) {
2392 master_image = kmalloc(sizeof(struct vme_master_resource), 2388 master_image = kmalloc(sizeof(struct vme_master_resource),
2393 GFP_KERNEL); 2389 GFP_KERNEL);
@@ -2417,7 +2413,6 @@ static int tsi148_probe(struct pci_dev *pdev, const struct pci_device_id *id)
2417 } 2413 }
2418 2414
2419 /* Add slave windows to list */ 2415 /* Add slave windows to list */
2420 INIT_LIST_HEAD(&tsi148_bridge->slave_resources);
2421 for (i = 0; i < TSI148_MAX_SLAVE; i++) { 2416 for (i = 0; i < TSI148_MAX_SLAVE; i++) {
2422 slave_image = kmalloc(sizeof(struct vme_slave_resource), 2417 slave_image = kmalloc(sizeof(struct vme_slave_resource),
2423 GFP_KERNEL); 2418 GFP_KERNEL);
@@ -2442,7 +2437,6 @@ static int tsi148_probe(struct pci_dev *pdev, const struct pci_device_id *id)
2442 } 2437 }
2443 2438
2444 /* Add dma engines to list */ 2439 /* Add dma engines to list */
2445 INIT_LIST_HEAD(&tsi148_bridge->dma_resources);
2446 for (i = 0; i < TSI148_MAX_DMA; i++) { 2440 for (i = 0; i < TSI148_MAX_DMA; i++) {
2447 dma_ctrlr = kmalloc(sizeof(struct vme_dma_resource), 2441 dma_ctrlr = kmalloc(sizeof(struct vme_dma_resource),
2448 GFP_KERNEL); 2442 GFP_KERNEL);
@@ -2467,7 +2461,6 @@ static int tsi148_probe(struct pci_dev *pdev, const struct pci_device_id *id)
2467 } 2461 }
2468 2462
2469 /* Add location monitor to list */ 2463 /* Add location monitor to list */
2470 INIT_LIST_HEAD(&tsi148_bridge->lm_resources);
2471 lm = kmalloc(sizeof(struct vme_lm_resource), GFP_KERNEL); 2464 lm = kmalloc(sizeof(struct vme_lm_resource), GFP_KERNEL);
2472 if (lm == NULL) { 2465 if (lm == NULL) {
2473 dev_err(&pdev->dev, "Failed to allocate memory for " 2466 dev_err(&pdev->dev, "Failed to allocate memory for "
diff --git a/drivers/vme/vme.c b/drivers/vme/vme.c
index 537b209fd6e5..37ac0a58e59a 100644
--- a/drivers/vme/vme.c
+++ b/drivers/vme/vme.c
@@ -1429,6 +1429,20 @@ static void vme_dev_release(struct device *dev)
1429 kfree(dev_to_vme_dev(dev)); 1429 kfree(dev_to_vme_dev(dev));
1430} 1430}
1431 1431
1432/* Common bridge initialization */
1433struct vme_bridge *vme_init_bridge(struct vme_bridge *bridge)
1434{
1435 INIT_LIST_HEAD(&bridge->vme_error_handlers);
1436 INIT_LIST_HEAD(&bridge->master_resources);
1437 INIT_LIST_HEAD(&bridge->slave_resources);
1438 INIT_LIST_HEAD(&bridge->dma_resources);
1439 INIT_LIST_HEAD(&bridge->lm_resources);
1440 mutex_init(&bridge->irq_mtx);
1441
1442 return bridge;
1443}
1444EXPORT_SYMBOL(vme_init_bridge);
1445
1432int vme_register_bridge(struct vme_bridge *bridge) 1446int vme_register_bridge(struct vme_bridge *bridge)
1433{ 1447{
1434 int i; 1448 int i;
diff --git a/drivers/vme/vme_bridge.h b/drivers/vme/vme_bridge.h
index b59cbee231dd..cb8246fd97be 100644
--- a/drivers/vme/vme_bridge.h
+++ b/drivers/vme/vme_bridge.h
@@ -177,6 +177,7 @@ void vme_bus_error_handler(struct vme_bridge *bridge,
177 unsigned long long address, int am); 177 unsigned long long address, int am);
178void vme_irq_handler(struct vme_bridge *, int, int); 178void vme_irq_handler(struct vme_bridge *, int, int);
179 179
180struct vme_bridge *vme_init_bridge(struct vme_bridge *);
180int vme_register_bridge(struct vme_bridge *); 181int vme_register_bridge(struct vme_bridge *);
181void vme_unregister_bridge(struct vme_bridge *); 182void vme_unregister_bridge(struct vme_bridge *);
182struct vme_error_handler *vme_register_error_handler( 183struct vme_error_handler *vme_register_error_handler(