]> xenbits.xensource.com Git - qemu-xen-4.5-testing.git/commitdiff
passthrough: Read the PCI type bit from hardware
authorIan Jackson <ian.jackson@eu.citrix.com>
Thu, 25 Jun 2009 17:24:23 +0000 (18:24 +0100)
committerIan Jackson <Ian.Jackson@eu.citrix.com>
Thu, 25 Jun 2009 17:29:47 +0000 (18:29 +0100)
Preparation for multi-fucntion devices in guests.

When scanning the PCI bus a guest* will only look for
functions 2-7 if the multifunction bit is set.

Cc: Dexuan Cui <dexuan.cui@intel.com>
Cc: Masaki Kanno <kanno.masaki@jp.fujitsu.com>
Signed-off-by: Simon Horman <horms@verge.net.au>
[2/8; cross-compatibility issues with xen-unstable.hg]

hw/pass-through.c

index ec79afe199a9d0b5f718643b4e07811c0d201676..07ca751fdaa6198c23f07c681cb53c3d39969e2b 100644 (file)
@@ -145,6 +145,8 @@ static uint32_t pt_msgdata_reg_init(struct pt_dev *ptdev,
     struct pt_reg_info_tbl *reg, uint32_t real_offset);
 static uint32_t pt_msixctrl_reg_init(struct pt_dev *ptdev,
     struct pt_reg_info_tbl *reg, uint32_t real_offset);
+static uint32_t pt_header_type_reg_init(struct pt_dev *ptdev,
+    struct pt_reg_info_tbl *reg, uint32_t real_offset);
 static uint8_t pt_reg_grp_size_init(struct pt_dev *ptdev,
     struct pt_reg_grp_info_tbl *grp_reg, uint32_t base_offset);
 static uint8_t pt_pm_size_init(struct pt_dev *ptdev,
@@ -324,7 +326,7 @@ static struct pt_reg_info_tbl pt_emu_reg_header0_tbl[] = {
         .init_val   = 0x00,
         .ro_mask    = 0x00,
         .emu_mask   = 0xFF,
-        .init       = pt_common_reg_init,
+        .init       = pt_header_type_reg_init,
         .u.b.read   = pt_byte_reg_read,
         .u.b.write  = pt_byte_reg_write,
         .u.b.restore  = pt_byte_reg_restore,
@@ -2999,6 +3001,13 @@ static uint8_t pt_pcie_size_init(struct pt_dev *ptdev,
     return pcie_size;
 }
 
+/* read PCI_HEADER_TYPE */
+static uint32_t pt_header_type_reg_init(struct pt_dev *ptdev,
+    struct pt_reg_info_tbl *reg, uint32_t real_offset)
+{
+    return reg->init_val | 0x80;
+}
+
 /* read byte size emulate register */
 static int pt_byte_reg_read(struct pt_dev *ptdev,
         struct pt_reg_tbl *cfg_entry,