WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] [qemu] Fix PCI config header space writes

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [qemu] Fix PCI config header space writes and set Subsystem-Vendor ID fields.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 29 Aug 2006 10:20:15 +0000
Delivery-date: Tue, 29 Aug 2006 03:20:41 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Christian Limpach <Christian.Limpach@xxxxxxxxxxxxx>
# Node ID a1cff03ac7d7e416c002e82736eacc7752ca0b8d
# Parent  7210b62802be9d2785b7df65d11798f68019ee49
[qemu] Fix PCI config header space writes and set Subsystem-Vendor ID fields.
Fix failure in Windows HCT's PCI-Compliance-Test by invalidating the
writing to read-only/reserved fields in PCI configuration space header
and giving Subsystem-Vendor-ID field a valid value via copying Vendor-ID
field into it.

Signed-off-by: Dexuan Cui <dexuan.cui@xxxxxxxxx>
---
 tools/ioemu/hw/pci.c      |   13 +++++++++++++
 tools/ioemu/hw/rtl8139.c  |    2 ++
 tools/ioemu/hw/usb-uhci.c |    2 ++
 3 files changed, 17 insertions(+)

diff -r 7210b62802be -r a1cff03ac7d7 tools/ioemu/hw/pci.c
--- a/tools/ioemu/hw/pci.c      Mon Aug 28 21:57:34 2006 +0100
+++ b/tools/ioemu/hw/pci.c      Mon Aug 28 22:43:09 2006 +0100
@@ -286,6 +286,7 @@ void pci_default_write_config(PCIDevice 
             case 0x0b:
             case 0x0e:
             case 0x10 ... 0x27: /* base */
+            case 0x2c ... 0x2f: /* subsystem vendor id, subsystem id */
             case 0x30 ... 0x33: /* rom */
             case 0x3d:
                 can_write = 0;
@@ -318,6 +319,18 @@ void pci_default_write_config(PCIDevice 
             break;
         }
         if (can_write) {
+            if( addr == 0x05 ) {
+                /* In Command Register, bits 15:11 are reserved */
+                val &= 0x07; 
+            } else if ( addr == 0x06 ) {
+                /* In Status Register, bits 6, 2:0 are reserved, */
+                /* and bits 7,5,4,3 are read only */
+                val = d->config[addr];
+            } else if ( addr == 0x07 ) {
+                /* In Status Register, bits 10,9 are reserved, */
+                val = (val & ~0x06) | (d->config[addr] & 0x06);
+            }
+
             d->config[addr] = val;
         }
         addr++;
diff -r 7210b62802be -r a1cff03ac7d7 tools/ioemu/hw/rtl8139.c
--- a/tools/ioemu/hw/rtl8139.c  Mon Aug 28 21:57:34 2006 +0100
+++ b/tools/ioemu/hw/rtl8139.c  Mon Aug 28 22:43:09 2006 +0100
@@ -3423,6 +3423,8 @@ void pci_rtl8139_init(PCIBus *bus, NICIn
     pci_conf[0x0e] = 0x00; /* header_type */
     pci_conf[0x3d] = 1;    /* interrupt pin 0 */
     pci_conf[0x34] = 0xdc;
+    pci_conf[0x2c] = pci_conf[0x00]; // same as Vendor ID
+    pci_conf[0x2d] = pci_conf[0x01];
 
     s = &d->rtl8139;
 
diff -r 7210b62802be -r a1cff03ac7d7 tools/ioemu/hw/usb-uhci.c
--- a/tools/ioemu/hw/usb-uhci.c Mon Aug 28 21:57:34 2006 +0100
+++ b/tools/ioemu/hw/usb-uhci.c Mon Aug 28 22:43:09 2006 +0100
@@ -659,6 +659,8 @@ void usb_uhci_init(PCIBus *bus, int devf
     pci_conf[0x0e] = 0x00; // header_type
     pci_conf[0x3d] = 4; // interrupt pin 3
     pci_conf[0x60] = 0x10; // release number
+    pci_conf[0x2c] = pci_conf[0x00]; // same as Vendor ID
+    pci_conf[0x2d] = pci_conf[0x01];
     
     for(i = 0; i < NB_PORTS; i++) {
         qemu_register_usb_port(&s->ports[i].port, s, i, uhci_attach);

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] [qemu] Fix PCI config header space writes and set Subsystem-Vendor ID fields., Xen patchbot-unstable <=