diff options
author | Aaron Sierra <asierra@xes-inc.com> | 2016-04-24 16:11:38 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2016-05-01 17:00:00 -0400 |
commit | 326071b3c985683f8a18417bed3ea2ab930a7ba1 (patch) | |
tree | 6e6bf20fcc95af0132d25317c324da1509566e29 /drivers/vme | |
parent | 2ce7aed6a4da8ffa35f0232573a6901c0369720d (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.c | 9 | ||||
-rw-r--r-- | drivers/vme/bridges/vme_tsi148.c | 9 | ||||
-rw-r--r-- | drivers/vme/vme.c | 14 | ||||
-rw-r--r-- | drivers/vme/vme_bridge.h | 1 |
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 */ | ||
1433 | struct 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 | } | ||
1444 | EXPORT_SYMBOL(vme_init_bridge); | ||
1445 | |||
1432 | int vme_register_bridge(struct vme_bridge *bridge) | 1446 | int 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); |
178 | void vme_irq_handler(struct vme_bridge *, int, int); | 178 | void vme_irq_handler(struct vme_bridge *, int, int); |
179 | 179 | ||
180 | struct vme_bridge *vme_init_bridge(struct vme_bridge *); | ||
180 | int vme_register_bridge(struct vme_bridge *); | 181 | int vme_register_bridge(struct vme_bridge *); |
181 | void vme_unregister_bridge(struct vme_bridge *); | 182 | void vme_unregister_bridge(struct vme_bridge *); |
182 | struct vme_error_handler *vme_register_error_handler( | 183 | struct vme_error_handler *vme_register_error_handler( |