From: Ian Jackson Date: Thu, 25 Jun 2009 17:24:23 +0000 (+0100) Subject: passthrough: Read the PCI type bit from hardware X-Git-Tag: xen-4.0.0-rc1~61^2~5 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=ec5e52d5cb2e6f8851c345b7c3095fe2030fff9c;p=qemu-xen-4.1-testing.git passthrough: Read the PCI type bit from hardware 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 Cc: Masaki Kanno Signed-off-by: Simon Horman [2/8; cross-compatibility issues with xen-unstable.hg] --- diff --git a/hw/pass-through.c b/hw/pass-through.c index ec79afe19..07ca751fd 100644 --- a/hw/pass-through.c +++ b/hw/pass-through.c @@ -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,