Re: [PATCH] vme: add vme_init_bridge for common bridge init

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 24/04/16 21:11, Aaron Sierra wrote:
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@xxxxxxxxxxx>

Acked-by: Martyn Welch <martyn@xxxxxxxxxxxx>

---
  drivers/vme/bridges/vme_ca91cx42.c |  9 +--------
  drivers/vme/bridges/vme_tsi148.c   |  9 +--------
  drivers/vme/vme.c                  | 14 ++++++++++++++
  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 5fbeab3..9f2c834 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)
  	/* Need pdev */
  	pdev = to_pci_dev(ca91cx42_bridge->parent);
- INIT_LIST_HEAD(&ca91cx42_bridge->vme_error_handlers);
-
-	mutex_init(&ca91cx42_bridge->irq_mtx);
-
  	/* Disable interrupts from PCI to VME */
  	iowrite32(0, bridge->base + VINT_EN);
@@ -1626,6 +1622,7 @@ static int ca91cx42_probe(struct pci_dev *pdev, const struct pci_device_id *id)
  		retval = -ENOMEM;
  		goto err_struct;
  	}
+	vme_init_bridge(ca91cx42_bridge);
ca91cx42_device = kzalloc(sizeof(struct ca91cx42_driver), GFP_KERNEL); @@ -1686,7 +1683,6 @@ static int ca91cx42_probe(struct pci_dev *pdev, const struct pci_device_id *id)
  	}
/* Add master windows to list */
-	INIT_LIST_HEAD(&ca91cx42_bridge->master_resources);
  	for (i = 0; i < CA91C142_MAX_MASTER; i++) {
  		master_image = kmalloc(sizeof(struct vme_master_resource),
  			GFP_KERNEL);
@@ -1713,7 +1709,6 @@ static int ca91cx42_probe(struct pci_dev *pdev, const struct pci_device_id *id)
  	}
/* Add slave windows to list */
-	INIT_LIST_HEAD(&ca91cx42_bridge->slave_resources);
  	for (i = 0; i < CA91C142_MAX_SLAVE; i++) {
  		slave_image = kmalloc(sizeof(struct vme_slave_resource),
  			GFP_KERNEL);
@@ -1741,7 +1736,6 @@ static int ca91cx42_probe(struct pci_dev *pdev, const struct pci_device_id *id)
  	}
/* Add dma engines to list */
-	INIT_LIST_HEAD(&ca91cx42_bridge->dma_resources);
  	for (i = 0; i < CA91C142_MAX_DMA; i++) {
  		dma_ctrlr = kmalloc(sizeof(struct vme_dma_resource),
  			GFP_KERNEL);
@@ -1764,7 +1758,6 @@ static int ca91cx42_probe(struct pci_dev *pdev, const struct pci_device_id *id)
  	}
/* Add location monitor to list */
-	INIT_LIST_HEAD(&ca91cx42_bridge->lm_resources);
  	lm = kmalloc(sizeof(struct vme_lm_resource), GFP_KERNEL);
  	if (lm == NULL) {
  		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 6052483..4bc5d45 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)
bridge = tsi148_bridge->driver_priv; - INIT_LIST_HEAD(&tsi148_bridge->vme_error_handlers);
-
-	mutex_init(&tsi148_bridge->irq_mtx);
-
  	result = request_irq(pdev->irq,
  			     tsi148_irqhandler,
  			     IRQF_SHARED,
@@ -2301,6 +2297,7 @@ static int tsi148_probe(struct pci_dev *pdev, const struct pci_device_id *id)
  		retval = -ENOMEM;
  		goto err_struct;
  	}
+	vme_init_bridge(tsi148_bridge);
tsi148_device = kzalloc(sizeof(struct tsi148_driver), GFP_KERNEL);
  	if (tsi148_device == NULL) {
@@ -2387,7 +2384,6 @@ static int tsi148_probe(struct pci_dev *pdev, const struct pci_device_id *id)
  	}
/* Add master windows to list */
-	INIT_LIST_HEAD(&tsi148_bridge->master_resources);
  	for (i = 0; i < master_num; i++) {
  		master_image = kmalloc(sizeof(struct vme_master_resource),
  			GFP_KERNEL);
@@ -2417,7 +2413,6 @@ static int tsi148_probe(struct pci_dev *pdev, const struct pci_device_id *id)
  	}
/* Add slave windows to list */
-	INIT_LIST_HEAD(&tsi148_bridge->slave_resources);
  	for (i = 0; i < TSI148_MAX_SLAVE; i++) {
  		slave_image = kmalloc(sizeof(struct vme_slave_resource),
  			GFP_KERNEL);
@@ -2442,7 +2437,6 @@ static int tsi148_probe(struct pci_dev *pdev, const struct pci_device_id *id)
  	}
/* Add dma engines to list */
-	INIT_LIST_HEAD(&tsi148_bridge->dma_resources);
  	for (i = 0; i < TSI148_MAX_DMA; i++) {
  		dma_ctrlr = kmalloc(sizeof(struct vme_dma_resource),
  			GFP_KERNEL);
@@ -2467,7 +2461,6 @@ static int tsi148_probe(struct pci_dev *pdev, const struct pci_device_id *id)
  	}
/* Add location monitor to list */
-	INIT_LIST_HEAD(&tsi148_bridge->lm_resources);
  	lm = kmalloc(sizeof(struct vme_lm_resource), GFP_KERNEL);
  	if (lm == NULL) {
  		dev_err(&pdev->dev, "Failed to allocate memory for "
diff --git a/drivers/vme/vme.c b/drivers/vme/vme.c
index 72924b0..fd73702 100644
--- a/drivers/vme/vme.c
+++ b/drivers/vme/vme.c
@@ -1429,6 +1429,20 @@ static void vme_dev_release(struct device *dev)
  	kfree(dev_to_vme_dev(dev));
  }
+/* Common bridge initialization */
+struct vme_bridge *vme_init_bridge(struct vme_bridge *bridge)
+{
+	INIT_LIST_HEAD(&bridge->vme_error_handlers);
+	INIT_LIST_HEAD(&bridge->master_resources);
+	INIT_LIST_HEAD(&bridge->slave_resources);
+	INIT_LIST_HEAD(&bridge->dma_resources);
+	INIT_LIST_HEAD(&bridge->lm_resources);
+	mutex_init(&bridge->irq_mtx);
+
+	return bridge;
+}
+EXPORT_SYMBOL(vme_init_bridge);
+
  int vme_register_bridge(struct vme_bridge *bridge)
  {
  	int i;
diff --git a/drivers/vme/vme_bridge.h b/drivers/vme/vme_bridge.h
index b59cbee..cb8246f 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,
  			   unsigned long long address, int am);
  void vme_irq_handler(struct vme_bridge *, int, int);
+struct vme_bridge *vme_init_bridge(struct vme_bridge *);
  int vme_register_bridge(struct vme_bridge *);
  void vme_unregister_bridge(struct vme_bridge *);
  struct vme_error_handler *vme_register_error_handler(

_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel



[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux