[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 26/32] nvdimm: save arg3 for NVDIMM device _DSM m
From: |
Xiao Guangrong |
Subject: |
[Qemu-devel] [PATCH v3 26/32] nvdimm: save arg3 for NVDIMM device _DSM method |
Date: |
Sun, 11 Oct 2015 11:52:58 +0800 |
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 <address@hidden>
---
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);
--
1.8.3.1
[Qemu-devel] [PATCH v3 20/32] dimm: introduce realize callback, Xiao Guangrong, 2015/10/10
[Qemu-devel] [PATCH v3 28/32] nvdimm: support DSM_CMD_NAMESPACE_LABEL_SIZE function, Xiao Guangrong, 2015/10/10
[Qemu-devel] [PATCH v3 05/32] acpi: add aml_concatenate, Xiao Guangrong, 2015/10/10
[Qemu-devel] [PATCH v3 06/32] acpi: add aml_object_type, Xiao Guangrong, 2015/10/10
[Qemu-devel] [PATCH v3 09/32] exec: allow file_ram_alloc to work on file, Xiao Guangrong, 2015/10/10
[Qemu-devel] [PATCH v3 19/32] dimm: keep the state of the whole backend memory, Xiao Guangrong, 2015/10/10