aboutsummaryrefslogtreecommitdiffstats
path: root/unmodified_drivers
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2009-07-20 15:51:14 +0100
committerKeir Fraser <keir.fraser@citrix.com>2009-07-20 15:51:14 +0100
commit1ed13664e37af44d4024376e97de2429264922e7 (patch)
tree211152d3a302b8f470fbfbbabe3db6a740ff1621 /unmodified_drivers
parent5301fe9943e8d6b4bee5fb8739775450ac3cbde4 (diff)
downloadxen-1ed13664e37af44d4024376e97de2429264922e7.tar.gz
xen-1ed13664e37af44d4024376e97de2429264922e7.tar.bz2
xen-1ed13664e37af44d4024376e97de2429264922e7.zip
Remove support for out-of-date SLES9 and RHEL4 kernel
ports from build integration Both distros now include Xen support from their respective upstreams and these kernels are very out of date wrt both the upstream distro kernel and the upstream Xen kernel. Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Diffstat (limited to 'unmodified_drivers')
-rw-r--r--unmodified_drivers/linux-2.6/platform-pci/platform-pci.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c b/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
index a1c17dd7db..f081cb1115 100644
--- a/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
+++ b/unmodified_drivers/linux-2.6/platform-pci/platform-pci.c
@@ -257,6 +257,60 @@ int xen_reboot_init(void);
int xen_panic_handler_init(void);
int gnttab_init(void);
+#define XEN_IOPORT_BASE 0x10
+
+#define XEN_IOPORT_PLATFLAGS (XEN_IOPORT_BASE + 0) /* 1 byte access (R/W) */
+#define XEN_IOPORT_MAGIC (XEN_IOPORT_BASE + 0) /* 2 byte access (R) */
+#define XEN_IOPORT_UNPLUG (XEN_IOPORT_BASE + 0) /* 2 byte access (W) */
+#define XEN_IOPORT_DRVVER (XEN_IOPORT_BASE + 0) /* 4 byte access (W) */
+
+#define XEN_IOPORT_SYSLOG (XEN_IOPORT_BASE + 2) /* 1 byte access (W) */
+#define XEN_IOPORT_PROTOVER (XEN_IOPORT_BASE + 2) /* 1 byte access (R) */
+#define XEN_IOPORT_PRODNUM (XEN_IOPORT_BASE + 2) /* 2 byte access (W) */
+
+#define XEN_IOPORT_MAGIC_VAL 0x49d2
+#define XEN_IOPORT_LINUX_PRODNUM 0xffff /* NB: register a proper one */
+#define XEN_IOPORT_LINUX_DRVVER ((LINUX_VERSION_CODE << 8) + 0x0)
+
+static int check_platform_magic(struct device *dev, long ioaddr, long iolen)
+{
+ short magic;
+ char protocol;
+
+ if (iolen < 0x16)
+ return -ENODEV;
+
+ magic = inw(XEN_IOPORT_MAGIC);
+
+ if (magic != XEN_IOPORT_MAGIC_VAL) {
+ dev_err(dev, "invalid magic %#x", magic);
+ return -ENODEV;
+ }
+
+ protocol = inb(XEN_IOPORT_PROTOVER);
+
+ dev_info(dev, "I/O protocol version %d\n", protocol);
+
+ switch (protocol) {
+ case 1:
+ outw(XEN_IOPORT_PRODNUM, 0xbeef);
+ outl(XEN_IOPORT_DRVVER, 0xdead);
+ if (inw(XEN_IOPORT_MAGIC) != XEN_IOPORT_MAGIC_VAL) {
+ dev_err(dev, "blacklisted by host\n");
+ return -ENODEV;
+ }
+ /* Fall through */
+ case 0:
+ outw(XEN_IOPORT_UNPLUG, 0xf);
+ break;
+ default:
+ dev_err(dev, "unknown qemu version\n");
+ return -ENODEV;
+ }
+
+ return 0;
+}
+
static int __devinit platform_pci_init(struct pci_dev *pdev,
const struct pci_device_id *ent)
{
@@ -305,6 +359,10 @@ static int __devinit platform_pci_init(struct pci_dev *pdev,
if (ret < 0)
goto out;
+ ret = check_platform_magic(&pdev->dev, ioaddr, iolen);
+ if (ret < 0)
+ goto out;
+
if ((ret = init_xen_info()))
goto out;