From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44821) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1evSIv-000096-EG for qemu-devel@nongnu.org; Mon, 12 Mar 2018 14:36:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1evSIs-0005e2-BG for qemu-devel@nongnu.org; Mon, 12 Mar 2018 14:36:13 -0400 Received: from mail-pl0-x241.google.com ([2607:f8b0:400e:c01::241]:39811) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1evSIs-0005dj-2d for qemu-devel@nongnu.org; Mon, 12 Mar 2018 14:36:10 -0400 Received: by mail-pl0-x241.google.com with SMTP id s13-v6so9820984plq.6 for ; Mon, 12 Mar 2018 11:36:09 -0700 (PDT) From: Alexey Gerasimenko Date: Tue, 13 Mar 2018 04:34:10 +1000 Message-Id: In-Reply-To: References: In-Reply-To: References: Subject: [Qemu-devel] [RFC PATCH 25/30] xen/pt: add Vendor-specific PCIe Extended Capability descriptor and sizing List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: xen-devel@lists.xenproject.org Cc: Alexey Gerasimenko , qemu-devel@nongnu.org, Stefano Stabellini , Anthony Perard The patch provides Vendor-specific PCIe Extended Capability description structure and corresponding sizing function. In this particular case the size of the Vendor capability is available in the VSEC Length field. Signed-off-by: Alexey Gerasimenko --- hw/xen/xen_pt_config_init.c | 77 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 75 insertions(+), 2 deletions(-) diff --git a/hw/xen/xen_pt_config_init.c b/hw/xen/xen_pt_config_init.c index 10f3b67d35..6e99b9ebd7 100644 --- a/hw/xen/xen_pt_config_init.c +++ b/hw/xen/xen_pt_config_init.c @@ -129,6 +129,18 @@ static uint32_t get_throughable_mask(const XenPCIPassthroughState *s, return throughable_mask & valid_mask; } +static void log_pcie_extended_cap(XenPCIPassthroughState *s, + const char *cap_name, + uint32_t base_offset, uint32_t size) +{ + if (size) { + XEN_PT_LOG(&s->dev, "Found PCIe Extended Capability: %s at 0x%04x, " + "size 0x%x bytes\n", cap_name, + (uint16_t) base_offset, size); + } +} + + /**************** * general register functions */ @@ -1684,6 +1696,44 @@ static int xen_pt_ext_cap_capid_reg_init(XenPCIPassthroughState *s, } +/* Vendor-specific Ext Capability Structure reg static information table */ +static XenPTRegInfo xen_pt_ext_cap_emu_reg_vendor[] = { + { + .offset = XEN_PCIE_CAP_ID, + .size = 2, + .init_val = 0x0000, + .ro_mask = 0xFFFF, + .emu_mask = 0xFFFF, + .init = xen_pt_ext_cap_capid_reg_init, + .u.w.read = xen_pt_word_reg_read, + .u.w.write = xen_pt_word_reg_write, + }, + { + .offset = XEN_PCIE_CAP_LIST_NEXT, + .size = 2, + .init_val = 0x0000, + .ro_mask = 0xFFFF, + .emu_mask = 0xFFFF, + .init = xen_pt_ext_cap_ptr_reg_init, + .u.w.read = xen_pt_word_reg_read, + .u.w.write = xen_pt_word_reg_write, + }, + { + .offset = PCI_VNDR_HEADER, + .size = 4, + .init_val = 0x00000000, + .ro_mask = 0xFFFFFFFF, + .emu_mask = 0x00000000, + .init = xen_pt_common_reg_init, + .u.dw.read = xen_pt_long_reg_read, + .u.dw.write = xen_pt_long_reg_write, + }, + { + .size = 0, + }, +}; + + /**************************** * Capabilities */ @@ -1708,6 +1758,23 @@ static int xen_pt_vendor_size_init(XenPCIPassthroughState *s, *size = sz; return ret; } + +static int xen_pt_ext_cap_vendor_size_init(XenPCIPassthroughState *s, + const XenPTRegGroupInfo *grp_reg, + uint32_t base_offset, + uint32_t *size) +{ + uint32_t vsec_hdr = 0; + int ret = xen_host_pci_get_long(&s->real_device, + base_offset + PCI_VNDR_HEADER, + &vsec_hdr); + + *size = PCI_VNDR_HEADER_LEN(vsec_hdr); + + log_pcie_extended_cap(s, "Vendor-specific", base_offset, *size); + + return ret; +} /* get PCI Express Capability Structure register group size */ static int xen_pt_pcie_size_init(XenPCIPassthroughState *s, const XenPTRegGroupInfo *grp_reg, @@ -1934,6 +2001,14 @@ static const XenPTRegGroupInfo xen_pt_emu_reg_grps[] = { .size_init = xen_pt_reg_grp_size_init, .emu_regs = xen_pt_emu_reg_igd_opregion, }, + /* Vendor-specific Extended Capability reg group */ + { + .grp_id = PCIE_EXT_CAP_ID(PCI_EXT_CAP_ID_VNDR), + .grp_type = XEN_PT_GRP_TYPE_EMU, + .grp_size = 0xFF, + .size_init = xen_pt_ext_cap_vendor_size_init, + .emu_regs = xen_pt_ext_cap_emu_reg_vendor, + }, { .grp_size = 0, }, @@ -2054,8 +2129,6 @@ out: return 0; } - - /************* * Main */ -- 2.11.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexey Gerasimenko Subject: [RFC PATCH 25/30] xen/pt: add Vendor-specific PCIe Extended Capability descriptor and sizing Date: Tue, 13 Mar 2018 04:34:10 +1000 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1evSIt-0008WS-BD for xen-devel@lists.xenproject.org; Mon, 12 Mar 2018 18:36:11 +0000 Received: by mail-pl0-x244.google.com with SMTP id u13-v6so9828971plq.1 for ; Mon, 12 Mar 2018 11:36:10 -0700 (PDT) In-Reply-To: In-Reply-To: References: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Anthony Perard , Stefano Stabellini , Alexey Gerasimenko , qemu-devel@nongnu.org List-Id: xen-devel@lists.xenproject.org VGhlIHBhdGNoIHByb3ZpZGVzIFZlbmRvci1zcGVjaWZpYyBQQ0llIEV4dGVuZGVkIENhcGFiaWxp dHkgZGVzY3JpcHRpb24Kc3RydWN0dXJlIGFuZCBjb3JyZXNwb25kaW5nIHNpemluZyBmdW5jdGlv bi4gSW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2UgdGhlCnNpemUgb2YgdGhlIFZlbmRvciBjYXBhYmls aXR5IGlzIGF2YWlsYWJsZSBpbiB0aGUgVlNFQyBMZW5ndGggZmllbGQuCgpTaWduZWQtb2ZmLWJ5 OiBBbGV4ZXkgR2VyYXNpbWVua28gPHgxOTE3eEBnbWFpbC5jb20+Ci0tLQogaHcveGVuL3hlbl9w dF9jb25maWdfaW5pdC5jIHwgNzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKy0tCiAxIGZpbGUgY2hhbmdlZCwgNzUgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS9ody94ZW4veGVuX3B0X2NvbmZpZ19pbml0LmMgYi9ody94ZW4veGVu X3B0X2NvbmZpZ19pbml0LmMKaW5kZXggMTBmM2I2N2QzNS4uNmU5OWI5ZWJkNyAxMDA2NDQKLS0t IGEvaHcveGVuL3hlbl9wdF9jb25maWdfaW5pdC5jCisrKyBiL2h3L3hlbi94ZW5fcHRfY29uZmln X2luaXQuYwpAQCAtMTI5LDYgKzEyOSwxOCBAQCBzdGF0aWMgdWludDMyX3QgZ2V0X3Rocm91Z2hh YmxlX21hc2soY29uc3QgWGVuUENJUGFzc3Rocm91Z2hTdGF0ZSAqcywKICAgICByZXR1cm4gdGhy b3VnaGFibGVfbWFzayAmIHZhbGlkX21hc2s7CiB9CiAKK3N0YXRpYyB2b2lkIGxvZ19wY2llX2V4 dGVuZGVkX2NhcChYZW5QQ0lQYXNzdGhyb3VnaFN0YXRlICpzLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNhcF9uYW1lLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVpbnQzMl90IGJhc2Vfb2Zmc2V0LCB1aW50MzJfdCBzaXplKQorewor ICAgIGlmIChzaXplKSB7CisgICAgICAgIFhFTl9QVF9MT0coJnMtPmRldiwgIkZvdW5kIFBDSWUg RXh0ZW5kZWQgQ2FwYWJpbGl0eTogJXMgYXQgMHglMDR4LCAiCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgInNpemUgMHgleCBieXRlc1xuIiwgY2FwX25hbWUsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHVpbnQxNl90KSBiYXNlX29mZnNldCwgc2l6ZSk7CisgICAgfQorfQorCisK IC8qKioqKioqKioqKioqKioqCiAgKiBnZW5lcmFsIHJlZ2lzdGVyIGZ1bmN0aW9ucwogICovCkBA IC0xNjg0LDYgKzE2OTYsNDQgQEAgc3RhdGljIGludCB4ZW5fcHRfZXh0X2NhcF9jYXBpZF9yZWdf aW5pdChYZW5QQ0lQYXNzdGhyb3VnaFN0YXRlICpzLAogfQogCiAKKy8qIFZlbmRvci1zcGVjaWZp YyBFeHQgQ2FwYWJpbGl0eSBTdHJ1Y3R1cmUgcmVnIHN0YXRpYyBpbmZvcm1hdGlvbiB0YWJsZSAq Lworc3RhdGljIFhlblBUUmVnSW5mbyB4ZW5fcHRfZXh0X2NhcF9lbXVfcmVnX3ZlbmRvcltdID0g eworICAgIHsKKyAgICAgICAgLm9mZnNldCAgICAgPSBYRU5fUENJRV9DQVBfSUQsCisgICAgICAg IC5zaXplICAgICAgID0gMiwKKyAgICAgICAgLmluaXRfdmFsICAgPSAweDAwMDAsCisgICAgICAg IC5yb19tYXNrICAgID0gMHhGRkZGLAorICAgICAgICAuZW11X21hc2sgICA9IDB4RkZGRiwKKyAg ICAgICAgLmluaXQgICAgICAgPSB4ZW5fcHRfZXh0X2NhcF9jYXBpZF9yZWdfaW5pdCwKKyAgICAg ICAgLnUudy5yZWFkICAgPSB4ZW5fcHRfd29yZF9yZWdfcmVhZCwKKyAgICAgICAgLnUudy53cml0 ZSAgPSB4ZW5fcHRfd29yZF9yZWdfd3JpdGUsCisgICAgfSwKKyAgICB7CisgICAgICAgIC5vZmZz ZXQgICAgID0gWEVOX1BDSUVfQ0FQX0xJU1RfTkVYVCwKKyAgICAgICAgLnNpemUgICAgICAgPSAy LAorICAgICAgICAuaW5pdF92YWwgICA9IDB4MDAwMCwKKyAgICAgICAgLnJvX21hc2sgICAgPSAw eEZGRkYsCisgICAgICAgIC5lbXVfbWFzayAgID0gMHhGRkZGLAorICAgICAgICAuaW5pdCAgICAg ICA9IHhlbl9wdF9leHRfY2FwX3B0cl9yZWdfaW5pdCwKKyAgICAgICAgLnUudy5yZWFkICAgPSB4 ZW5fcHRfd29yZF9yZWdfcmVhZCwKKyAgICAgICAgLnUudy53cml0ZSAgPSB4ZW5fcHRfd29yZF9y ZWdfd3JpdGUsCisgICAgfSwKKyAgICB7CisgICAgICAgIC5vZmZzZXQgICAgID0gUENJX1ZORFJf SEVBREVSLAorICAgICAgICAuc2l6ZSAgICAgICA9IDQsCisgICAgICAgIC5pbml0X3ZhbCAgID0g MHgwMDAwMDAwMCwKKyAgICAgICAgLnJvX21hc2sgICAgPSAweEZGRkZGRkZGLAorICAgICAgICAu ZW11X21hc2sgICA9IDB4MDAwMDAwMDAsCisgICAgICAgIC5pbml0ICAgICAgID0geGVuX3B0X2Nv bW1vbl9yZWdfaW5pdCwKKyAgICAgICAgLnUuZHcucmVhZCAgPSB4ZW5fcHRfbG9uZ19yZWdfcmVh ZCwKKyAgICAgICAgLnUuZHcud3JpdGUgPSB4ZW5fcHRfbG9uZ19yZWdfd3JpdGUsCisgICAgfSwK KyAgICB7CisgICAgICAgIC5zaXplID0gMCwKKyAgICB9LAorfTsKKworCiAvKioqKioqKioqKioq KioqKioqKioqKioqKioqKgogICogQ2FwYWJpbGl0aWVzCiAgKi8KQEAgLTE3MDgsNiArMTc1OCwy MyBAQCBzdGF0aWMgaW50IHhlbl9wdF92ZW5kb3Jfc2l6ZV9pbml0KFhlblBDSVBhc3N0aHJvdWdo U3RhdGUgKnMsCiAgICAgKnNpemUgPSBzejsKICAgICByZXR1cm4gcmV0OwogfQorCitzdGF0aWMg aW50IHhlbl9wdF9leHRfY2FwX3ZlbmRvcl9zaXplX2luaXQoWGVuUENJUGFzc3Rocm91Z2hTdGF0 ZSAqcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBY ZW5QVFJlZ0dyb3VwSW5mbyAqZ3JwX3JlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1aW50MzJfdCBiYXNlX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqc2l6ZSkKK3sKKyAgICB1aW50MzJfdCB2 c2VjX2hkciA9IDA7CisgICAgaW50IHJldCA9IHhlbl9ob3N0X3BjaV9nZXRfbG9uZygmcy0+cmVh bF9kZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlX29mZnNl dCArIFBDSV9WTkRSX0hFQURFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZ2c2VjX2hkcik7CisKKyAgICAqc2l6ZSA9IFBDSV9WTkRSX0hFQURFUl9MRU4odnNlY19oZHIp OworCisgICAgbG9nX3BjaWVfZXh0ZW5kZWRfY2FwKHMsICJWZW5kb3Itc3BlY2lmaWMiLCBiYXNl X29mZnNldCwgKnNpemUpOworCisgICAgcmV0dXJuIHJldDsKK30KIC8qIGdldCBQQ0kgRXhwcmVz cyBDYXBhYmlsaXR5IFN0cnVjdHVyZSByZWdpc3RlciBncm91cCBzaXplICovCiBzdGF0aWMgaW50 IHhlbl9wdF9wY2llX3NpemVfaW5pdChYZW5QQ0lQYXNzdGhyb3VnaFN0YXRlICpzLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWGVuUFRSZWdHcm91cEluZm8gKmdycF9y ZWcsCkBAIC0xOTM0LDYgKzIwMDEsMTQgQEAgc3RhdGljIGNvbnN0IFhlblBUUmVnR3JvdXBJbmZv IHhlbl9wdF9lbXVfcmVnX2dycHNbXSA9IHsKICAgICAgICAgLnNpemVfaW5pdCAgID0geGVuX3B0 X3JlZ19ncnBfc2l6ZV9pbml0LAogICAgICAgICAuZW11X3JlZ3MgICAgPSB4ZW5fcHRfZW11X3Jl Z19pZ2Rfb3ByZWdpb24sCiAgICAgfSwKKyAgICAvKiBWZW5kb3Itc3BlY2lmaWMgRXh0ZW5kZWQg Q2FwYWJpbGl0eSByZWcgZ3JvdXAgKi8KKyAgICB7CisgICAgICAgIC5ncnBfaWQgICAgICA9IFBD SUVfRVhUX0NBUF9JRChQQ0lfRVhUX0NBUF9JRF9WTkRSKSwKKyAgICAgICAgLmdycF90eXBlICAg ID0gWEVOX1BUX0dSUF9UWVBFX0VNVSwKKyAgICAgICAgLmdycF9zaXplICAgID0gMHhGRiwKKyAg ICAgICAgLnNpemVfaW5pdCAgID0geGVuX3B0X2V4dF9jYXBfdmVuZG9yX3NpemVfaW5pdCwKKyAg ICAgICAgLmVtdV9yZWdzICAgID0geGVuX3B0X2V4dF9jYXBfZW11X3JlZ192ZW5kb3IsCisgICAg fSwKICAgICB7CiAgICAgICAgIC5ncnBfc2l6ZSA9IDAsCiAgICAgfSwKQEAgLTIwNTQsOCArMjEy OSw2IEBAIG91dDoKICAgICByZXR1cm4gMDsKIH0KIAotCi0KIC8qKioqKioqKioqKioqCiAgKiBN YWluCiAgKi8KLS0gCjIuMTEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbnBy b2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby94 ZW4tZGV2ZWw=