From patchwork Fri Jan 15 06:55:14 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shannon Zhao X-Patchwork-Id: 8038721 Return-Path: X-Original-To: patchwork-linux-acpi@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 946BB9F32E for ; Fri, 15 Jan 2016 07:01:34 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id A93F820501 for ; Fri, 15 Jan 2016 07:01:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id C007C204FB for ; Fri, 15 Jan 2016 07:01:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750929AbcAOG42 (ORCPT ); Fri, 15 Jan 2016 01:56:28 -0500 Received: from szxga02-in.huawei.com ([119.145.14.65]:49127 "EHLO szxga02-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750897AbcAOG4Z (ORCPT ); Fri, 15 Jan 2016 01:56:25 -0500 Received: from 172.24.1.47 (EHLO SZXEML429-HUB.china.huawei.com) ([172.24.1.47]) by szxrg02-dlp.huawei.com (MOS 4.3.7-GA FastPath queued) with ESMTP id CZX19404; Fri, 15 Jan 2016 14:56:19 +0800 (CST) Received: from HGHY1Z002260041.china.huawei.com (10.177.16.142) by SZXEML429-HUB.china.huawei.com (10.82.67.184) with Microsoft SMTP Server id 14.3.235.1; Fri, 15 Jan 2016 14:56:09 +0800 From: Shannon Zhao To: , , , CC: , , , , , , , , , , "Rafael J. Wysocki" , "Len Brown" , "open list:ACPI" Subject: [PATCH v2 01/16] Xen: ACPI: Hide UART used by Xen Date: Fri, 15 Jan 2016 14:55:14 +0800 Message-ID: <1452840929-19612-2-git-send-email-zhaoshenglong@huawei.com> X-Mailer: git-send-email 1.9.0.msysgit.0 In-Reply-To: <1452840929-19612-1-git-send-email-zhaoshenglong@huawei.com> References: <1452840929-19612-1-git-send-email-zhaoshenglong@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.177.16.142] X-CFilter-Loop: Reflected X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A020202.56989815.00D5, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0, ip=0.0.0.0, so=2013-06-18 04:22:30, dmn=2013-03-21 17:37:32 X-Mirapoint-Loop-Id: 0bb5eb7603582033d18d71c2c0cf32ce Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Shannon Zhao ACPI 6.0 introduces a new table STAO to list the devices which are used by Xen and can't be used by Dom0. On Xen virtual platforms, the physical UART is used by Xen. So here it hides UART from Dom0. Signed-off-by: Shannon Zhao --- CC: "Rafael J. Wysocki" (supporter:ACPI) CC: Len Brown (supporter:ACPI) CC: linux-acpi@vger.kernel.org (open list:ACPI) --- drivers/acpi/bus.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c index a212cef..d7a559f 100644 --- a/drivers/acpi/bus.c +++ b/drivers/acpi/bus.c @@ -46,6 +46,7 @@ ACPI_MODULE_NAME("bus"); struct acpi_device *acpi_root; struct proc_dir_entry *acpi_root_dir; EXPORT_SYMBOL(acpi_root_dir); +static u64 spcr_uart_addr; #ifdef CONFIG_X86 #ifdef CONFIG_ACPI_CUSTOM_DSDT @@ -93,6 +94,17 @@ acpi_status acpi_bus_get_status_handle(acpi_handle handle, { acpi_status status; + if (spcr_uart_addr != 0xffffffffffffffff) { + u64 addr; + + status = acpi_evaluate_integer(handle, METHOD_NAME__ADR, NULL, + &addr); + if (ACPI_SUCCESS(status) && (addr == spcr_uart_addr)) { + *sta = 0; + return AE_OK; + } + } + status = acpi_evaluate_integer(handle, "_STA", NULL, sta); if (ACPI_SUCCESS(status)) return AE_OK; @@ -1069,6 +1081,8 @@ EXPORT_SYMBOL_GPL(acpi_kobj); static int __init acpi_init(void) { int result; + acpi_status status; + struct acpi_table_stao *stao_ptr; if (acpi_disabled) { printk(KERN_INFO PREFIX "Interpreter disabled.\n"); @@ -1081,6 +1095,22 @@ static int __init acpi_init(void) acpi_kobj = NULL; } + /* If there is STAO table, check whether it needs to ignore the UART + * device in SPCR table. + */ + spcr_uart_addr = 0xffffffffffffffff; + status = acpi_get_table(ACPI_SIG_STAO, 0, + (struct acpi_table_header **)&stao_ptr); + if (ACPI_SUCCESS(status)) { + if (stao_ptr->ignore_uart) { + struct acpi_table_spcr *spcr_ptr; + + acpi_get_table(ACPI_SIG_SPCR, 0, + (struct acpi_table_header **)&spcr_ptr); + spcr_uart_addr = spcr_ptr->serial_port.address; + } + } + init_acpi_device_notify(); result = acpi_bus_init(); if (result) {