From fb0e5137e883cc2918ef5140eb973b8f18bbbe92 Mon Sep 17 00:00:00 2001 From: Connor Wood Date: Thu, 22 Jun 2017 15:22:19 +0100 Subject: [PATCH] Moved ConnectFieldBufferData to the namespace --- src/acpi/aml/namedobj.rs | 18 ++++++++++++++++++ src/acpi/aml/namespace.rs | 5 ++++- src/acpi/aml/type2opcode.rs | 19 +++++++++++++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/acpi/aml/namedobj.rs b/src/acpi/aml/namedobj.rs index 40de06f..664b767 100644 --- a/src/acpi/aml/namedobj.rs +++ b/src/acpi/aml/namedobj.rs @@ -135,6 +135,12 @@ impl AmlExecutable for NamedObj { FieldElement::ReservedField { length } => offset += length, FieldElement::ConnectFieldNameString(ref name) => connection = AmlValue::ObjectReference(SuperName::NameString(name.clone())), + FieldElement::ConnectFieldBufferData(ref buf) => { + connection = match buf.execute(namespace, scope.clone()) { + Some(c) => c, + None => return None + }; + }, FieldElement::NamedField { name: ref field_name, length } => { let local_scope_string = get_namespace_string(scope.clone(), field_name.clone()); @@ -164,6 +170,12 @@ impl AmlExecutable for NamedObj { FieldElement::ReservedField { length } => offset += length, FieldElement::ConnectFieldNameString(ref name) => connection = AmlValue::ObjectReference(SuperName::NameString(name.clone())), + FieldElement::ConnectFieldBufferData(ref buf) => { + connection = match buf.execute(namespace, scope.clone()) { + Some(c) => c, + None => return None + }; + }, FieldElement::NamedField { name: ref field_name, length } => { let local_scope_string = get_namespace_string(scope.clone(), field_name.clone()); @@ -333,6 +345,12 @@ impl AmlExecutable for NamedObj { FieldElement::ReservedField { length } => offset += length, FieldElement::ConnectFieldNameString(ref name) => connection = AmlValue::ObjectReference(SuperName::NameString(name.clone())), + FieldElement::ConnectFieldBufferData(ref buf) => { + connection = match buf.execute(namespace, scope.clone()) { + Some(c) => c, + None => return None + }; + }, FieldElement::NamedField { name: ref field_name, length } => { let local_scope_string = get_namespace_string(scope.clone(), field_name.clone()); diff --git a/src/acpi/aml/namespace.rs b/src/acpi/aml/namespace.rs index 375057e..a492aab 100644 --- a/src/acpi/aml/namespace.rs +++ b/src/acpi/aml/namespace.rs @@ -25,7 +25,10 @@ pub enum FieldSelector { #[derive(Debug, Clone)] pub enum AmlValue { Uninitialized, - Buffer, + Buffer { + length: Box, + byte_list: Vec + }, BufferField { source_buf: Box, index: Box, diff --git a/src/acpi/aml/type2opcode.rs b/src/acpi/aml/type2opcode.rs index 0313d82..e96bdbc 100644 --- a/src/acpi/aml/type2opcode.rs +++ b/src/acpi/aml/type2opcode.rs @@ -207,6 +207,25 @@ impl AmlExecutable for Type2OpCode { } } +impl AmlExecutable for DefBuffer { + fn execute(&self, namespace: &mut BTreeMap, scope: String) -> Option { + match *self { + DefBuffer::Buffer { ref buffer_size, ref byte_list } => { + let length = match buffer_size.execute(namespace, scope.clone()) { + Some(l) => Box::new(l), + _ => return None + }; + + Some(AmlValue::Buffer { + length: length, + byte_list: byte_list.clone() + }) + }, + _ => None + } + } +} + #[derive(Debug, Clone)] pub enum DefObjectType { SuperName(SuperName),