Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Aaron Sierra and committed by
Greg Kroah-Hartman
326071b3 2ce7aed6

+17 -16
+1 -8
drivers/vme/bridges/vme_ca91cx42.c
··· 204 204 /* Need pdev */ 205 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 207 /* Disable interrupts from PCI to VME */ 212 208 iowrite32(0, bridge->base + VINT_EN); 213 209 ··· 1622 1626 retval = -ENOMEM; 1623 1627 goto err_struct; 1624 1628 } 1629 + vme_init_bridge(ca91cx42_bridge); 1625 1630 1626 1631 ca91cx42_device = kzalloc(sizeof(struct ca91cx42_driver), GFP_KERNEL); 1627 1632 ··· 1683 1686 } 1684 1687 1685 1688 /* Add master windows to list */ 1686 - INIT_LIST_HEAD(&ca91cx42_bridge->master_resources); 1687 1689 for (i = 0; i < CA91C142_MAX_MASTER; i++) { 1688 1690 master_image = kmalloc(sizeof(struct vme_master_resource), 1689 1691 GFP_KERNEL); ··· 1709 1713 } 1710 1714 1711 1715 /* Add slave windows to list */ 1712 - INIT_LIST_HEAD(&ca91cx42_bridge->slave_resources); 1713 1716 for (i = 0; i < CA91C142_MAX_SLAVE; i++) { 1714 1717 slave_image = kmalloc(sizeof(struct vme_slave_resource), 1715 1718 GFP_KERNEL); ··· 1736 1741 } 1737 1742 1738 1743 /* Add dma engines to list */ 1739 - INIT_LIST_HEAD(&ca91cx42_bridge->dma_resources); 1740 1744 for (i = 0; i < CA91C142_MAX_DMA; i++) { 1741 1745 dma_ctrlr = kmalloc(sizeof(struct vme_dma_resource), 1742 1746 GFP_KERNEL); ··· 1758 1764 } 1759 1765 1760 1766 /* Add location monitor to list */ 1761 - INIT_LIST_HEAD(&ca91cx42_bridge->lm_resources); 1762 1767 lm = kmalloc(sizeof(struct vme_lm_resource), GFP_KERNEL); 1763 1768 if (lm == NULL) { 1764 1769 dev_err(&pdev->dev, "Failed to allocate memory for "
+1 -8
drivers/vme/bridges/vme_tsi148.c
··· 314 314 315 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 317 result = request_irq(pdev->irq, 322 318 tsi148_irqhandler, 323 319 IRQF_SHARED, ··· 2297 2301 retval = -ENOMEM; 2298 2302 goto err_struct; 2299 2303 } 2304 + vme_init_bridge(tsi148_bridge); 2300 2305 2301 2306 tsi148_device = kzalloc(sizeof(struct tsi148_driver), GFP_KERNEL); 2302 2307 if (tsi148_device == NULL) { ··· 2384 2387 } 2385 2388 2386 2389 /* Add master windows to list */ 2387 - INIT_LIST_HEAD(&tsi148_bridge->master_resources); 2388 2390 for (i = 0; i < master_num; i++) { 2389 2391 master_image = kmalloc(sizeof(struct vme_master_resource), 2390 2392 GFP_KERNEL); ··· 2413 2417 } 2414 2418 2415 2419 /* Add slave windows to list */ 2416 - INIT_LIST_HEAD(&tsi148_bridge->slave_resources); 2417 2420 for (i = 0; i < TSI148_MAX_SLAVE; i++) { 2418 2421 slave_image = kmalloc(sizeof(struct vme_slave_resource), 2419 2422 GFP_KERNEL); ··· 2437 2442 } 2438 2443 2439 2444 /* Add dma engines to list */ 2440 - INIT_LIST_HEAD(&tsi148_bridge->dma_resources); 2441 2445 for (i = 0; i < TSI148_MAX_DMA; i++) { 2442 2446 dma_ctrlr = kmalloc(sizeof(struct vme_dma_resource), 2443 2447 GFP_KERNEL); ··· 2461 2467 } 2462 2468 2463 2469 /* Add location monitor to list */ 2464 - INIT_LIST_HEAD(&tsi148_bridge->lm_resources); 2465 2470 lm = kmalloc(sizeof(struct vme_lm_resource), GFP_KERNEL); 2466 2471 if (lm == NULL) { 2467 2472 dev_err(&pdev->dev, "Failed to allocate memory for "
+14
drivers/vme/vme.c
··· 1429 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 1446 int vme_register_bridge(struct vme_bridge *bridge) 1433 1447 { 1434 1448 int i;
+1
drivers/vme/vme_bridge.h
··· 177 177 unsigned long long address, int am); 178 178 void vme_irq_handler(struct vme_bridge *, int, int); 179 179 180 + struct vme_bridge *vme_init_bridge(struct vme_bridge *); 180 181 int vme_register_bridge(struct vme_bridge *); 181 182 void vme_unregister_bridge(struct vme_bridge *); 182 183 struct vme_error_handler *vme_register_error_handler(