From patchwork Sun Nov 6 21:42:35 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Boris Ostrovsky X-Patchwork-Id: 9414117 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id A924D60515 for ; Sun, 6 Nov 2016 21:45:52 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9B4EE28F25 for ; Sun, 6 Nov 2016 21:45:52 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 902F528F5D; Sun, 6 Nov 2016 21:45:52 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 21B7128F2F for ; Sun, 6 Nov 2016 21:45:52 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1c3VDY-0006ez-3a; Sun, 06 Nov 2016 21:43:08 +0000 Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1c3VDW-0006eS-5j for xen-devel@lists.xen.org; Sun, 06 Nov 2016 21:43:06 +0000 Received: from [85.158.137.68] by server-3.bemta-3.messagelabs.com id AF/97-24885-8E3AF185; Sun, 06 Nov 2016 21:43:04 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrLLMWRWlGSWpSXmKPExsUyZ7p8oO6LxfI RBltaeSyWfFzM4sDocXT3b6YAxijWzLyk/IoE1oyOH51MBTcVK84c7mRrYLwg1cXIxSEkMIFJ YtO8f8wQzh9GibvLPzNBOBsYJRb2fWTpYuQEciYySvx/oQViswkYSZw9Op0RxBYRkJa49vkyI 0gDs8AWRokdF1eBJYQFXCT2/bgB1swioCox9+oVsDivgKfErd8XWEFsCQE5iZvnOplBbE4BL4 n/96ezQSzzlDg/o5MJosZQ4vPGpcwTGPkWMDKsYtQoTi0qSy3SNTTSSyrKTM8oyU3MzNE1NDD Wy00tLk5MT81JTCrWS87P3cQIDBYGINjB+Krb+RCjJAeTkijvsw0yEUJ8SfkplRmJxRnxRaU5 qcWHGGU4OJQkeBmBwSckWJSanlqRlpkDDFuYtAQHj5II74VFQGne4oLE3OLMdIjUKUZFKXFeW 5A+AZBERmkeXBssVi4xykoJ8zICHSLEU5BalJtZgir/ilGcg1FJmPcyyHiezLwSuOmvgBYzAS 12C5EBWVySiJCSamAUav0Z8EDlys6W6eIf5e0+6X/bU+Hqr/ROreLfiov6OtzZB3/5mU+Yu+K 85CpuSe3jM5fOkdzy9szrb203/G5u3l93hifvm9q07rTPr3ieMV1h4xe7s0x59e+/D8oyn8Wc aPV6N2tK5dnUYo75YYLJ+Uc+L//UvS+oe2FlpF+L6Tf3+nWq0YlvlViKMxINtZiLihMBgTCWH ZACAAA= X-Env-Sender: boris.ostrovsky@oracle.com X-Msg-Ref: server-2.tower-31.messagelabs.com!1478468582!57795688!1 X-Originating-IP: [156.151.31.81] X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: VHJ1c3RlZCBJUDogMTU2LjE1MS4zMS44MSA9PiAyODgzMzk=\n X-StarScan-Received: X-StarScan-Version: 8.84; banners=-,-,- X-VirusChecked: Checked Received: (qmail 30574 invoked from network); 6 Nov 2016 21:43:03 -0000 Received: from userp1040.oracle.com (HELO userp1040.oracle.com) (156.151.31.81) by server-2.tower-31.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 6 Nov 2016 21:43:03 -0000 Received: from userv0022.oracle.com (userv0022.oracle.com [156.151.31.74]) by userp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id uA6LgvYO000386 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sun, 6 Nov 2016 21:42:57 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by userv0022.oracle.com (8.14.4/8.14.4) with ESMTP id uA6LguGa008774 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Sun, 6 Nov 2016 21:42:57 GMT Received: from abhmp0005.oracle.com (abhmp0005.oracle.com [141.146.116.11]) by aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id uA6Lguan003579; Sun, 6 Nov 2016 21:42:56 GMT Received: from ostr-laptop.us.oracle.com (/10.154.180.67) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Sun, 06 Nov 2016 13:42:56 -0800 From: Boris Ostrovsky To: xen-devel@lists.xen.org Date: Sun, 6 Nov 2016 16:42:35 -0500 Message-Id: <1478468563-5396-3-git-send-email-boris.ostrovsky@oracle.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1478468563-5396-1-git-send-email-boris.ostrovsky@oracle.com> References: <1478468563-5396-1-git-send-email-boris.ostrovsky@oracle.com> X-Source-IP: userv0022.oracle.com [156.151.31.74] Cc: wei.liu2@citrix.com, andrew.cooper3@citrix.com, ian.jackson@eu.citrix.com, jbeulich@suse.com, Boris Ostrovsky , roger.pau@citrix.com Subject: [Xen-devel] [PATCH 02/10] acpi: Define ACPI IO registers for PVH guests X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP ACPI hotplug-related IO accesses (to GPE0 block) are handled by qemu for HVM guests. Since PVH guests don't have qemu these accesses will need to be procesed by the hypervisor. Because ACPI event model expects pm1a block to be present we need to have the hypervisor emulate it as well. Signed-off-by: Boris Ostrovsky --- tools/libacpi/static_tables.c | 28 +++++++++++----------------- xen/include/asm-x86/hvm/domain.h | 6 ++++++ xen/include/public/hvm/ioreq.h | 3 +++ 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/tools/libacpi/static_tables.c b/tools/libacpi/static_tables.c index 617bf68..413abcc 100644 --- a/tools/libacpi/static_tables.c +++ b/tools/libacpi/static_tables.c @@ -20,6 +20,8 @@ * Firmware ACPI Control Structure (FACS). */ +#define ACPI_REG_BIT_OFFSET 0 + struct acpi_20_facs Facs = { .signature = ACPI_2_0_FACS_SIGNATURE, .length = sizeof(struct acpi_20_facs), @@ -30,14 +32,6 @@ struct acpi_20_facs Facs = { /* * Fixed ACPI Description Table (FADT). */ - -#define ACPI_PM1A_EVT_BLK_BIT_WIDTH 0x20 -#define ACPI_PM1A_EVT_BLK_BIT_OFFSET 0x00 -#define ACPI_PM1A_CNT_BLK_BIT_WIDTH 0x10 -#define ACPI_PM1A_CNT_BLK_BIT_OFFSET 0x00 -#define ACPI_PM_TMR_BLK_BIT_WIDTH 0x20 -#define ACPI_PM_TMR_BLK_BIT_OFFSET 0x00 - struct acpi_20_fadt Fadt = { .header = { .signature = ACPI_2_0_FADT_SIGNATURE, @@ -56,9 +50,9 @@ struct acpi_20_fadt Fadt = { .pm1a_cnt_blk = ACPI_PM1A_CNT_BLK_ADDRESS_V1, .pm_tmr_blk = ACPI_PM_TMR_BLK_ADDRESS_V1, .gpe0_blk = ACPI_GPE0_BLK_ADDRESS_V1, - .pm1_evt_len = ACPI_PM1A_EVT_BLK_BIT_WIDTH / 8, - .pm1_cnt_len = ACPI_PM1A_CNT_BLK_BIT_WIDTH / 8, - .pm_tmr_len = ACPI_PM_TMR_BLK_BIT_WIDTH / 8, + .pm1_evt_len = ACPI_PM1A_EVT_BLK_LEN, + .pm1_cnt_len = ACPI_PM1A_CNT_BLK_LEN, + .pm_tmr_len = ACPI_PM_TMR_BLK_LEN, .gpe0_blk_len = ACPI_GPE0_BLK_LEN_V1, .p_lvl2_lat = 0x0fff, /* >100, means we do not support C2 state */ @@ -79,22 +73,22 @@ struct acpi_20_fadt Fadt = { .x_pm1a_evt_blk = { .address_space_id = ACPI_SYSTEM_IO, - .register_bit_width = ACPI_PM1A_EVT_BLK_BIT_WIDTH, - .register_bit_offset = ACPI_PM1A_EVT_BLK_BIT_OFFSET, + .register_bit_width = ACPI_PM1A_EVT_BLK_LEN * 8, + .register_bit_offset = ACPI_REG_BIT_OFFSET, .address = ACPI_PM1A_EVT_BLK_ADDRESS_V1, }, .x_pm1a_cnt_blk = { .address_space_id = ACPI_SYSTEM_IO, - .register_bit_width = ACPI_PM1A_CNT_BLK_BIT_WIDTH, - .register_bit_offset = ACPI_PM1A_CNT_BLK_BIT_OFFSET, + .register_bit_width = ACPI_PM1A_CNT_BLK_LEN * 8, + .register_bit_offset = ACPI_REG_BIT_OFFSET, .address = ACPI_PM1A_CNT_BLK_ADDRESS_V1, }, .x_pm_tmr_blk = { .address_space_id = ACPI_SYSTEM_IO, - .register_bit_width = ACPI_PM_TMR_BLK_BIT_WIDTH, - .register_bit_offset = ACPI_PM_TMR_BLK_BIT_OFFSET, + .register_bit_width = ACPI_PM_TMR_BLK_LEN * 8, + .register_bit_offset = ACPI_REG_BIT_OFFSET, .address = ACPI_PM_TMR_BLK_ADDRESS_V1, } }; diff --git a/xen/include/asm-x86/hvm/domain.h b/xen/include/asm-x86/hvm/domain.h index f34d784..f492a2b 100644 --- a/xen/include/asm-x86/hvm/domain.h +++ b/xen/include/asm-x86/hvm/domain.h @@ -87,6 +87,12 @@ struct hvm_domain { } ioreq_server; struct hvm_ioreq_server *default_ioreq_server; + /* PVH guests */ + struct { + uint8_t pm1a[ACPI_PM1A_EVT_BLK_LEN]; + uint8_t gpe[ACPI_GPE0_BLK_LEN_V1]; + } acpi_io; + /* Cached CF8 for guest PCI config cycles */ uint32_t pci_cf8; diff --git a/xen/include/public/hvm/ioreq.h b/xen/include/public/hvm/ioreq.h index 2e5809b..c36dd0f 100644 --- a/xen/include/public/hvm/ioreq.h +++ b/xen/include/public/hvm/ioreq.h @@ -124,6 +124,9 @@ typedef struct buffered_iopage buffered_iopage_t; #define ACPI_GPE0_BLK_ADDRESS ACPI_GPE0_BLK_ADDRESS_V0 #define ACPI_GPE0_BLK_LEN ACPI_GPE0_BLK_LEN_V0 +#define ACPI_PM1A_EVT_BLK_LEN 0x04 +#define ACPI_PM1A_CNT_BLK_LEN 0x02 +#define ACPI_PM_TMR_BLK_LEN 0x04 #endif /* _IOREQ_H_ */