From patchwork Sun Oct 11 03:52:58 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiao Guangrong X-Patchwork-Id: 7368171 Return-Path: X-Original-To: patchwork-kvm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 43FB8BEEA4 for ; Sat, 10 Oct 2015 19:59:34 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 748F22092B for ; Sat, 10 Oct 2015 19:59:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 93CE12092D for ; Sat, 10 Oct 2015 19:59:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752761AbbJJT72 (ORCPT ); Sat, 10 Oct 2015 15:59:28 -0400 Received: from mga03.intel.com ([134.134.136.65]:23517 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752786AbbJJT7S (ORCPT ); Sat, 10 Oct 2015 15:59:18 -0400 Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga103.jf.intel.com with ESMTP; 10 Oct 2015 12:59:19 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.17,664,1437462000"; d="scan'208";a="661783206" Received: from xiaoreal1.sh.intel.com (HELO xiaoreal1.sh.intel.com.sh.intel.com) ([10.239.48.79]) by orsmga003.jf.intel.com with ESMTP; 10 Oct 2015 12:59:16 -0700 From: Xiao Guangrong To: pbonzini@redhat.com, imammedo@redhat.com Cc: gleb@kernel.org, mtosatti@redhat.com, stefanha@redhat.com, mst@redhat.com, rth@twiddle.net, ehabkost@redhat.com, dan.j.williams@intel.com, kvm@vger.kernel.org, qemu-devel@nongnu.org, Xiao Guangrong Subject: [PATCH v3 26/32] nvdimm: save arg3 for NVDIMM device _DSM method Date: Sun, 11 Oct 2015 11:52:58 +0800 Message-Id: <1444535584-18220-27-git-send-email-guangrong.xiao@linux.intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1444535584-18220-1-git-send-email-guangrong.xiao@linux.intel.com> References: <1444535584-18220-1-git-send-email-guangrong.xiao@linux.intel.com> Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Spam-Status: No, score=-5.0 required=5.0 tests=BAYES_00, DATE_IN_FUTURE_06_12, RCVD_IN_DNSWL_HI, T_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 Check if the input Arg3 is valid then store it into dsm_in if needed We only do the save on NVDIMM device since we are not going to support any function on root device Signed-off-by: Xiao Guangrong --- hw/mem/nvdimm/acpi.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/hw/mem/nvdimm/acpi.c b/hw/mem/nvdimm/acpi.c index d9fa0fd..3b9399c 100644 --- a/hw/mem/nvdimm/acpi.c +++ b/hw/mem/nvdimm/acpi.c @@ -442,7 +442,7 @@ static void build_nvdimm_devices(NVDIMMState *state, GSList *device_list, int slot = object_property_get_int(OBJECT(nvdimm), DIMM_SLOT_PROP, NULL); uint32_t handle = nvdimm_slot_to_handle(slot); - Aml *dev, *method; + Aml *dev, *method, *ifctx; dev = aml_device("NV%02X", slot); aml_append(dev, aml_name_decl("_ADR", aml_int(handle))); @@ -452,6 +452,24 @@ static void build_nvdimm_devices(NVDIMMState *state, GSList *device_list, method = aml_method("_DSM", 4); { SAVE_ARG012_HANDLE_LOCK(method, aml_int(handle)); + + /* Arg3 is passed as Package and it has one element? */ + ifctx = aml_if(aml_and(aml_equal(aml_object_type(aml_arg(3)), + aml_int(4)), + aml_equal(aml_sizeof(aml_arg(3)), + aml_int(1)))); + { + /* Local0 = Index(Arg3, 0) */ + aml_append(ifctx, aml_store(aml_index(aml_arg(3), aml_int(0)), + aml_local(0))); + /* Local3 = DeRefOf(Local0) */ + aml_append(ifctx, aml_store(aml_derefof(aml_local(0)), + aml_local(3))); + /* ARG3 = Local3 */ + aml_append(ifctx, aml_store(aml_local(3), aml_name("ARG3"))); + } + aml_append(method, ifctx); + NOTIFY_AND_RETURN_UNLOCK(method); } aml_append(dev, method); @@ -534,6 +552,7 @@ static void nvdimm_build_acpi_devices(NVDIMMState *state, GSList *device_list, method = aml_method("_DSM", 4); { SAVE_ARG012_HANDLE_LOCK(method, aml_int(0)); + /* no command we support on ROOT device has Arg3. */ NOTIFY_AND_RETURN_UNLOCK(method); } aml_append(dev, method);