
From: Stephen Rothwell <sfr@canb.auug.org.au>

This patch removes the archdata and driver_data members of struct vio_dev
and uses the platform_data and driver_data members of the embedded struct
device instead.  I also declared a couple of routines static.

This is part of a work in progress.

Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/arch/ppc64/kernel/vio.c |   28 ++++++++++++++--------------
 25-akpm/drivers/net/ibmveth.c   |    4 ++--
 25-akpm/include/asm-ppc64/vio.h |    5 -----
 3 files changed, 16 insertions(+), 21 deletions(-)

diff -puN arch/ppc64/kernel/vio.c~ppc64-iseries-vio_dev-cleanups arch/ppc64/kernel/vio.c
--- 25/arch/ppc64/kernel/vio.c~ppc64-iseries-vio_dev-cleanups	2004-06-08 22:56:02.155862560 -0700
+++ 25-akpm/arch/ppc64/kernel/vio.c	2004-06-08 22:56:02.165861040 -0700
@@ -32,7 +32,9 @@
 
 extern struct subsystem devices_subsys; /* needed for vio_find_name() */
 
-struct iommu_table *vio_build_iommu_table(struct vio_dev *dev);
+static struct iommu_table *vio_build_iommu_table(struct vio_dev *);
+static const struct vio_device_id *vio_match_device(
+		const struct vio_device_id *, const struct vio_dev *);
 
 #ifdef CONFIG_PPC_PSERIES
 static int vio_num_address_cells;
@@ -136,15 +138,15 @@ EXPORT_SYMBOL(vio_unregister_driver);
  * system is in its list of supported devices. Returns the matching
  * vio_device_id structure or NULL if there is no match.
  */
-const struct vio_device_id * vio_match_device(const struct vio_device_id *ids,
+static const struct vio_device_id * vio_match_device(const struct vio_device_id *ids,
 	const struct vio_dev *dev)
 {
 	DBGENTER();
 
 #ifdef CONFIG_PPC_PSERIES
 	while (ids->type) {
-		if ((strncmp(dev->archdata->type, ids->type, strlen(ids->type)) == 0) &&
-			device_is_compatible((struct device_node*)dev->archdata, ids->compat))
+		if ((strncmp(((struct device_node *)dev->dev.platform_data)->type, ids->type, strlen(ids->type)) == 0) &&
+			device_is_compatible(dev->dev.platform_data, ids->compat))
 			return ids;
 		ids++;
 	}
@@ -263,14 +265,13 @@ static void __devinit vio_dev_release(st
 	DBGENTER();
 
 	/* XXX free TCE table */
-	of_node_put(viodev->archdata);
+	of_node_put(viodev->dev.platform_data);
 	kfree(viodev);
 }
 
 static ssize_t viodev_show_devspec(struct device *dev, char *buf)
 {
-	struct vio_dev *viodev = to_vio_dev(dev);
-	struct device_node *of_node = viodev->archdata;
+	struct device_node *of_node = dev->platform_data;
 
 	return sprintf(buf, "%s\n", of_node->full_name);
 }
@@ -278,8 +279,7 @@ DEVICE_ATTR(devspec, S_IRUSR | S_IRGRP |
 
 static ssize_t viodev_show_name(struct device *dev, char *buf)
 {
-	struct vio_dev *viodev = to_vio_dev(dev);
-	struct device_node *of_node = viodev->archdata;
+	struct device_node *of_node = dev->platform_data;
 
 	return sprintf(buf, "%s\n", of_node->name);
 }
@@ -290,7 +290,7 @@ DEVICE_ATTR(name, S_IRUSR | S_IRGRP | S_
  * @of_node:	The OF node for this device.
  *
  * Creates and initializes a vio_dev structure from the data in
- * of_node (archdata) and adds it to the list of virtual devices.
+ * of_node (dev.platform_data) and adds it to the list of virtual devices.
  * Returns a pointer to the created vio_dev or NULL if node has
  * NULL device_type or compatible fields.
  */
@@ -324,7 +324,7 @@ struct vio_dev * __devinit vio_register_
 	}
 	memset(viodev, 0, sizeof(struct vio_dev));
 
-	viodev->archdata = (void *)of_node_get(of_node);
+	viodev->dev.platform_data = of_node_get(of_node);
 	viodev->unit_address = *unit_address;
 	viodev->iommu_table = vio_build_iommu_table(viodev);
 
@@ -380,7 +380,7 @@ EXPORT_SYMBOL(vio_unregister_device);
 */
 const void * vio_get_attribute(struct vio_dev *vdev, void* which, int* length)
 {
-	return get_property((struct device_node *)vdev->archdata, (char*)which, length);
+	return get_property(vdev->dev.platform_data, (char*)which, length);
 }
 EXPORT_SYMBOL(vio_get_attribute);
 
@@ -427,7 +427,7 @@ EXPORT_SYMBOL(vio_find_node);
  * Returns a pointer to the built tce tree, or NULL if it can't
  * find property.
 */
-struct iommu_table * vio_build_iommu_table(struct vio_dev *dev)
+static struct iommu_table * vio_build_iommu_table(struct vio_dev *dev)
 {
 	unsigned int *dma_window;
 	struct iommu_table *newTceTable;
@@ -435,7 +435,7 @@ struct iommu_table * vio_build_iommu_tab
 	unsigned long size;
 	int dma_window_property_size;
 
-	dma_window = (unsigned int *) get_property((struct device_node *)dev->archdata, "ibm,my-dma-window", &dma_window_property_size);
+	dma_window = (unsigned int *) get_property(dev->dev.platform_data, "ibm,my-dma-window", &dma_window_property_size);
 	if(!dma_window) {
 		return NULL;
 	}
diff -puN drivers/net/ibmveth.c~ppc64-iseries-vio_dev-cleanups drivers/net/ibmveth.c
--- 25/drivers/net/ibmveth.c~ppc64-iseries-vio_dev-cleanups	2004-06-08 22:56:02.158862104 -0700
+++ 25-akpm/drivers/net/ibmveth.c	2004-06-08 22:56:02.166860888 -0700
@@ -901,7 +901,7 @@ static int __devinit ibmveth_probe(struc
 
 	adapter = netdev->priv;
 	memset(adapter, 0, sizeof(adapter));
-	dev->driver_data = netdev;
+	dev->dev.driver_data = netdev;
 
 	adapter->vdev = dev;
 	adapter->netdev = netdev;
@@ -971,7 +971,7 @@ static int __devinit ibmveth_probe(struc
 
 static int __devexit ibmveth_remove(struct vio_dev *dev)
 {
-	struct net_device *netdev = dev->driver_data;
+	struct net_device *netdev = dev->dev.driver_data;
 	struct ibmveth_adapter *adapter = netdev->priv;
 
 	unregister_netdev(netdev);
diff -puN include/asm-ppc64/vio.h~ppc64-iseries-vio_dev-cleanups include/asm-ppc64/vio.h
--- 25/include/asm-ppc64/vio.h~ppc64-iseries-vio_dev-cleanups	2004-06-08 22:56:02.159861952 -0700
+++ 25-akpm/include/asm-ppc64/vio.h	2004-06-08 22:56:02.167860736 -0700
@@ -43,8 +43,6 @@ struct iommu_table;
 
 int vio_register_driver(struct vio_driver *drv);
 void vio_unregister_driver(struct vio_driver *drv);
-const struct vio_device_id * vio_match_device(const struct vio_device_id *ids, 
-						const struct vio_dev *dev);
 
 struct vio_dev * __devinit vio_register_device(struct device_node *node_vdev);
 void __devinit vio_unregister_device(struct vio_dev *dev);
@@ -52,7 +50,6 @@ struct vio_dev *vio_find_node(struct dev
 
 const void * vio_get_attribute(struct vio_dev *vdev, void* which, int* length);
 int vio_get_irq(struct vio_dev *dev);
-struct iommu_table * vio_build_iommu_table(struct vio_dev *dev);
 int vio_enable_interrupts(struct vio_dev *dev);
 int vio_disable_interrupts(struct vio_dev *dev);
 
@@ -110,8 +107,6 @@ static inline struct vio_driver *to_vio_
  * The vio_dev structure is used to describe virtual I/O devices.
  */
 struct vio_dev {
-	struct device_node *archdata;   /* Open Firmware node */
-	void *driver_data;              /* data private to the driver */
 	struct iommu_table *iommu_table;     /* vio_map_* uses this */
 	uint32_t unit_address;	
 	unsigned int irq;
_
