powerpc: Move iSeries_vio.c to powerpc/platforms/iseries
authorStephen Rothwell <sfr@canb.auug.org.au>
Tue, 27 Sep 2005 17:03:00 +0000 (03:03 +1000)
committerStephen Rothwell <sfr@canb.auug.org.au>
Tue, 27 Sep 2005 17:03:00 +0000 (03:03 +1000)
And rename it to vio.c.

Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au>
arch/powerpc/platforms/iseries/Makefile
arch/powerpc/platforms/iseries/vio.c [new file with mode: 0644]
arch/ppc64/kernel/Makefile
arch/ppc64/kernel/iSeries_vio.c [deleted file]

index d10305d7ad2f82a45c73641c039a3a4837f42c32..3a1ed16963a4332c1f882f3012c2ecd9be92bb2e 100644 (file)
@@ -1,3 +1,4 @@
 obj-y += hvlog.o hvlpconfig.o lpardata.o setup.o mf.o lpevents.o \
        hvcall.o proc.o htab.o iommu.o
 obj-$(CONFIG_PCI) += pci.o irq.o vpdinfo.o
+obj-$(CONFIG_IBMVIO) += vio.o
diff --git a/arch/powerpc/platforms/iseries/vio.c b/arch/powerpc/platforms/iseries/vio.c
new file mode 100644 (file)
index 0000000..c0f7d2e
--- /dev/null
@@ -0,0 +1,156 @@
+/*
+ * IBM PowerPC iSeries Virtual I/O Infrastructure Support.
+ *
+ *    Copyright (c) 2005 Stephen Rothwell, IBM Corp.
+ *
+ *      This program is free software; you can redistribute it and/or
+ *      modify it under the terms of the GNU General Public License
+ *      as published by the Free Software Foundation; either version
+ *      2 of the License, or (at your option) any later version.
+ */
+#include <linux/types.h>
+#include <linux/device.h>
+#include <linux/init.h>
+
+#include <asm/vio.h>
+#include <asm/iommu.h>
+#include <asm/tce.h>
+#include <asm/abs_addr.h>
+#include <asm/page.h>
+#include <asm/iSeries/vio.h>
+#include <asm/iSeries/HvTypes.h>
+#include <asm/iSeries/HvLpConfig.h>
+#include <asm/iSeries/HvCallXm.h>
+
+struct device *iSeries_vio_dev = &vio_bus_device.dev;
+EXPORT_SYMBOL(iSeries_vio_dev);
+
+static struct iommu_table veth_iommu_table;
+static struct iommu_table vio_iommu_table;
+
+static void __init iommu_vio_init(void)
+{
+       struct iommu_table *t;
+       struct iommu_table_cb cb;
+       unsigned long cbp;
+       unsigned long itc_entries;
+
+       cb.itc_busno = 255;    /* Bus 255 is the virtual bus */
+       cb.itc_virtbus = 0xff; /* Ask for virtual bus */
+
+       cbp = virt_to_abs(&cb);
+       HvCallXm_getTceTableParms(cbp);
+
+       itc_entries = cb.itc_size * PAGE_SIZE / sizeof(union tce_entry);
+       veth_iommu_table.it_size        = itc_entries / 2;
+       veth_iommu_table.it_busno       = cb.itc_busno;
+       veth_iommu_table.it_offset      = cb.itc_offset;
+       veth_iommu_table.it_index       = cb.itc_index;
+       veth_iommu_table.it_type        = TCE_VB;
+       veth_iommu_table.it_blocksize   = 1;
+
+       t = iommu_init_table(&veth_iommu_table);
+
+       if (!t)
+               printk("Virtual Bus VETH TCE table failed.\n");
+
+       vio_iommu_table.it_size         = itc_entries - veth_iommu_table.it_size;
+       vio_iommu_table.it_busno        = cb.itc_busno;
+       vio_iommu_table.it_offset       = cb.itc_offset +
+                                         veth_iommu_table.it_size;
+       vio_iommu_table.it_index        = cb.itc_index;
+       vio_iommu_table.it_type         = TCE_VB;
+       vio_iommu_table.it_blocksize    = 1;
+
+       t = iommu_init_table(&vio_iommu_table);
+
+       if (!t)
+               printk("Virtual Bus VIO TCE table failed.\n");
+}
+
+/**
+ * vio_register_device_iseries: - Register a new iSeries vio device.
+ * @voidev:    The device to register.
+ */
+static struct vio_dev *__init vio_register_device_iseries(char *type,
+               uint32_t unit_num)
+{
+       struct vio_dev *viodev;
+
+       /* allocate a vio_dev for this device */
+       viodev = kmalloc(sizeof(struct vio_dev), GFP_KERNEL);
+       if (!viodev)
+               return NULL;
+       memset(viodev, 0, sizeof(struct vio_dev));
+
+       snprintf(viodev->dev.bus_id, BUS_ID_SIZE, "%s%d", type, unit_num);
+
+       viodev->name = viodev->dev.bus_id;
+       viodev->type = type;
+       viodev->unit_address = unit_num;
+       viodev->iommu_table = &vio_iommu_table;
+       if (vio_register_device(viodev) == NULL) {
+               kfree(viodev);
+               return NULL;
+       }
+       return viodev;
+}
+
+void __init probe_bus_iseries(void)
+{
+       HvLpIndexMap vlan_map;
+       struct vio_dev *viodev;
+       int i;
+
+       /* there is only one of each of these */
+       vio_register_device_iseries("viocons", 0);
+       vio_register_device_iseries("vscsi", 0);
+
+       vlan_map = HvLpConfig_getVirtualLanIndexMap();
+       for (i = 0; i < HVMAXARCHITECTEDVIRTUALLANS; i++) {
+               if ((vlan_map & (0x8000 >> i)) == 0)
+                       continue;
+               viodev = vio_register_device_iseries("vlan", i);
+               /* veth is special and has it own iommu_table */
+               viodev->iommu_table = &veth_iommu_table;
+       }
+       for (i = 0; i < HVMAXARCHITECTEDVIRTUALDISKS; i++)
+               vio_register_device_iseries("viodasd", i);
+       for (i = 0; i < HVMAXARCHITECTEDVIRTUALCDROMS; i++)
+               vio_register_device_iseries("viocd", i);
+       for (i = 0; i < HVMAXARCHITECTEDVIRTUALTAPES; i++)
+               vio_register_device_iseries("viotape", i);
+}
+
+/**
+ * vio_match_device_iseries: - Tell if a iSeries VIO device matches a
+ *     vio_device_id
+ */
+static int vio_match_device_iseries(const struct vio_device_id *id,
+               const struct vio_dev *dev)
+{
+       return strncmp(dev->type, id->type, strlen(id->type)) == 0;
+}
+
+static struct vio_bus_ops vio_bus_ops_iseries = {
+       .match = vio_match_device_iseries,
+};
+
+/**
+ * vio_bus_init_iseries: - Initialize the iSeries virtual IO bus
+ */
+static int __init vio_bus_init_iseries(void)
+{
+       int err;
+
+       err = vio_bus_init(&vio_bus_ops_iseries);
+       if (err == 0) {
+               iommu_vio_init();
+               vio_bus_device.iommu_table = &vio_iommu_table;
+               iSeries_vio_dev = &vio_bus_device.dev;
+               probe_bus_iseries();
+       }
+       return err;
+}
+
+__initcall(vio_bus_init_iseries);
index 8b2743697c38aa0a23cd14b8ef0def81a68c01df..7354c1dbe9f01109a82aeace4ed8fa9c38908fd4 100644 (file)
@@ -45,7 +45,6 @@ obj-$(CONFIG_BOOTX_TEXT)      += btext.o
 obj-$(CONFIG_HVCS)             += hvcserver.o
 
 vio-obj-$(CONFIG_PPC_PSERIES)  += pSeries_vio.o
-vio-obj-$(CONFIG_PPC_ISERIES)  += iSeries_vio.o
 obj-$(CONFIG_IBMVIO)           += vio.o $(vio-obj-y)
 obj-$(CONFIG_XICS)             += xics.o
 obj-$(CONFIG_MPIC)             += mpic.o
diff --git a/arch/ppc64/kernel/iSeries_vio.c b/arch/ppc64/kernel/iSeries_vio.c
deleted file mode 100644 (file)
index c0f7d2e..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * IBM PowerPC iSeries Virtual I/O Infrastructure Support.
- *
- *    Copyright (c) 2005 Stephen Rothwell, IBM Corp.
- *
- *      This program is free software; you can redistribute it and/or
- *      modify it under the terms of the GNU General Public License
- *      as published by the Free Software Foundation; either version
- *      2 of the License, or (at your option) any later version.
- */
-#include <linux/types.h>
-#include <linux/device.h>
-#include <linux/init.h>
-
-#include <asm/vio.h>
-#include <asm/iommu.h>
-#include <asm/tce.h>
-#include <asm/abs_addr.h>
-#include <asm/page.h>
-#include <asm/iSeries/vio.h>
-#include <asm/iSeries/HvTypes.h>
-#include <asm/iSeries/HvLpConfig.h>
-#include <asm/iSeries/HvCallXm.h>
-
-struct device *iSeries_vio_dev = &vio_bus_device.dev;
-EXPORT_SYMBOL(iSeries_vio_dev);
-
-static struct iommu_table veth_iommu_table;
-static struct iommu_table vio_iommu_table;
-
-static void __init iommu_vio_init(void)
-{
-       struct iommu_table *t;
-       struct iommu_table_cb cb;
-       unsigned long cbp;
-       unsigned long itc_entries;
-
-       cb.itc_busno = 255;    /* Bus 255 is the virtual bus */
-       cb.itc_virtbus = 0xff; /* Ask for virtual bus */
-
-       cbp = virt_to_abs(&cb);
-       HvCallXm_getTceTableParms(cbp);
-
-       itc_entries = cb.itc_size * PAGE_SIZE / sizeof(union tce_entry);
-       veth_iommu_table.it_size        = itc_entries / 2;
-       veth_iommu_table.it_busno       = cb.itc_busno;
-       veth_iommu_table.it_offset      = cb.itc_offset;
-       veth_iommu_table.it_index       = cb.itc_index;
-       veth_iommu_table.it_type        = TCE_VB;
-       veth_iommu_table.it_blocksize   = 1;
-
-       t = iommu_init_table(&veth_iommu_table);
-
-       if (!t)
-               printk("Virtual Bus VETH TCE table failed.\n");
-
-       vio_iommu_table.it_size         = itc_entries - veth_iommu_table.it_size;
-       vio_iommu_table.it_busno        = cb.itc_busno;
-       vio_iommu_table.it_offset       = cb.itc_offset +
-                                         veth_iommu_table.it_size;
-       vio_iommu_table.it_index        = cb.itc_index;
-       vio_iommu_table.it_type         = TCE_VB;
-       vio_iommu_table.it_blocksize    = 1;
-
-       t = iommu_init_table(&vio_iommu_table);
-
-       if (!t)
-               printk("Virtual Bus VIO TCE table failed.\n");
-}
-
-/**
- * vio_register_device_iseries: - Register a new iSeries vio device.
- * @voidev:    The device to register.
- */
-static struct vio_dev *__init vio_register_device_iseries(char *type,
-               uint32_t unit_num)
-{
-       struct vio_dev *viodev;
-
-       /* allocate a vio_dev for this device */
-       viodev = kmalloc(sizeof(struct vio_dev), GFP_KERNEL);
-       if (!viodev)
-               return NULL;
-       memset(viodev, 0, sizeof(struct vio_dev));
-
-       snprintf(viodev->dev.bus_id, BUS_ID_SIZE, "%s%d", type, unit_num);
-
-       viodev->name = viodev->dev.bus_id;
-       viodev->type = type;
-       viodev->unit_address = unit_num;
-       viodev->iommu_table = &vio_iommu_table;
-       if (vio_register_device(viodev) == NULL) {
-               kfree(viodev);
-               return NULL;
-       }
-       return viodev;
-}
-
-void __init probe_bus_iseries(void)
-{
-       HvLpIndexMap vlan_map;
-       struct vio_dev *viodev;
-       int i;
-
-       /* there is only one of each of these */
-       vio_register_device_iseries("viocons", 0);
-       vio_register_device_iseries("vscsi", 0);
-
-       vlan_map = HvLpConfig_getVirtualLanIndexMap();
-       for (i = 0; i < HVMAXARCHITECTEDVIRTUALLANS; i++) {
-               if ((vlan_map & (0x8000 >> i)) == 0)
-                       continue;
-               viodev = vio_register_device_iseries("vlan", i);
-               /* veth is special and has it own iommu_table */
-               viodev->iommu_table = &veth_iommu_table;
-       }
-       for (i = 0; i < HVMAXARCHITECTEDVIRTUALDISKS; i++)
-               vio_register_device_iseries("viodasd", i);
-       for (i = 0; i < HVMAXARCHITECTEDVIRTUALCDROMS; i++)
-               vio_register_device_iseries("viocd", i);
-       for (i = 0; i < HVMAXARCHITECTEDVIRTUALTAPES; i++)
-               vio_register_device_iseries("viotape", i);
-}
-
-/**
- * vio_match_device_iseries: - Tell if a iSeries VIO device matches a
- *     vio_device_id
- */
-static int vio_match_device_iseries(const struct vio_device_id *id,
-               const struct vio_dev *dev)
-{
-       return strncmp(dev->type, id->type, strlen(id->type)) == 0;
-}
-
-static struct vio_bus_ops vio_bus_ops_iseries = {
-       .match = vio_match_device_iseries,
-};
-
-/**
- * vio_bus_init_iseries: - Initialize the iSeries virtual IO bus
- */
-static int __init vio_bus_init_iseries(void)
-{
-       int err;
-
-       err = vio_bus_init(&vio_bus_ops_iseries);
-       if (err == 0) {
-               iommu_vio_init();
-               vio_bus_device.iommu_table = &vio_iommu_table;
-               iSeries_vio_dev = &vio_bus_device.dev;
-               probe_bus_iseries();
-       }
-       return err;
-}
-
-__initcall(vio_bus_init_iseries);