ioemu, passthrough: fix flag for expansion rom base address register.
authorKeir Fraser <keir.fraser@citrix.com>
Fri, 1 Aug 2008 08:54:54 +0000 (09:54 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Fri, 1 Aug 2008 08:54:54 +0000 (09:54 +0100)
pt_bar_reg_parse() is called for expansion rom base address register.
Currently it returns PT_BAR_FLAG_MEM if bit 0 is 0. It returns
PT_BAR_FLAG_IO if bit 0 is 1.

But bit 0 in expansion rom base address register is enable bit. If bit
0 is 1 for some reason, it returns PT_BAR_FLAG_IO. Expansion rom is
mapped to memory space. It should return PT_BAR_FLAG_MEM.

After applying this patch, it returns PT_BAR_FLAG_MEM regardless
of bit 0, when it is called for expansion rom base address register.

Signed-off-by: Yuji Shimada <shimada-yxb@necst.nec.co.jp>
tools/ioemu/hw/pass-through.c

index 428845f2c9f04359260bfe12bed623e8fd36c5da..ce24034de0248b6b52b39fd010516c9cbad252b3 100644 (file)
@@ -1528,6 +1528,13 @@ static int pt_bar_reg_parse(
     if (!r->size)
         goto out;
 
+    /* for ExpROM BAR */
+    if (index == PCI_ROM_SLOT)
+    {
+        bar_flag = PT_BAR_FLAG_MEM;
+        goto out;
+    }
+
     /* check BAR I/O indicator */
     if (d->config[reg->offset] & PCI_BASE_ADDRESS_SPACE_IO)
         bar_flag = PT_BAR_FLAG_IO;