From cef562c83213e0f3c0e6c3b02e79be4610b4c442 Mon Sep 17 00:00:00 2001 From: Connor Wood Date: Thu, 22 Jun 2017 12:16:30 +0100 Subject: [PATCH] Moved BufferFields into namespace --- src/acpi/aml/namedobj.rs | 90 +++++++++++++++++++++++++++++++++++++++ src/acpi/aml/namespace.rs | 6 ++- 2 files changed, 95 insertions(+), 1 deletion(-) diff --git a/src/acpi/aml/namedobj.rs b/src/acpi/aml/namedobj.rs index 203d20a..1123535 100644 --- a/src/acpi/aml/namedobj.rs +++ b/src/acpi/aml/namedobj.rs @@ -148,6 +148,96 @@ impl AmlExecutable for NamedObj { } } }, + NamedObj::DefCreateBitField { ref name, ref source_buf, ref bit_index } => { + let local_scope_string = get_namespace_string(scope.clone(), name.clone()); + + let resolved_source_buf = match source_buf.execute(namespace, scope.clone()) { + Some(r) => Box::new(r), + _ => return None + }; + let resolved_index = match bit_index.execute(namespace, scope.clone()) { + Some(r) => Box::new(r), + _ => return None + }; + + namespace.insert(local_scope_string, AmlValue::BufferField { + source_buf: resolved_source_buf, + index: resolved_index, + length: 1 + }); + }, + NamedObj::DefCreateByteField { ref name, ref source_buf, ref byte_index } => { + let local_scope_string = get_namespace_string(scope.clone(), name.clone()); + + let resolved_source_buf = match source_buf.execute(namespace, scope.clone()) { + Some(r) => Box::new(r), + _ => return None + }; + let resolved_index = match byte_index.execute(namespace, scope.clone()) { + Some(r) => Box::new(r), + _ => return None + }; + + namespace.insert(local_scope_string, AmlValue::BufferField { + source_buf: resolved_source_buf, + index: resolved_index, + length: 8 + }); + }, + NamedObj::DefCreateWordField { ref name, ref source_buf, ref byte_index } => { + let local_scope_string = get_namespace_string(scope.clone(), name.clone()); + + let resolved_source_buf = match source_buf.execute(namespace, scope.clone()) { + Some(r) => Box::new(r), + _ => return None + }; + let resolved_index = match byte_index.execute(namespace, scope.clone()) { + Some(r) => Box::new(r), + _ => return None + }; + + namespace.insert(local_scope_string, AmlValue::BufferField { + source_buf: resolved_source_buf, + index: resolved_index, + length: 16 + }); + }, + NamedObj::DefCreateDWordField { ref name, ref source_buf, ref byte_index } => { + let local_scope_string = get_namespace_string(scope.clone(), name.clone()); + + let resolved_source_buf = match source_buf.execute(namespace, scope.clone()) { + Some(r) => Box::new(r), + _ => return None + }; + let resolved_index = match byte_index.execute(namespace, scope.clone()) { + Some(r) => Box::new(r), + _ => return None + }; + + namespace.insert(local_scope_string, AmlValue::BufferField { + source_buf: resolved_source_buf, + index: resolved_index, + length: 32 + }); + }, + NamedObj::DefCreateQWordField { ref name, ref source_buf, ref byte_index } => { + let local_scope_string = get_namespace_string(scope.clone(), name.clone()); + + let resolved_source_buf = match source_buf.execute(namespace, scope.clone()) { + Some(r) => Box::new(r), + _ => return None + }; + let resolved_index = match byte_index.execute(namespace, scope.clone()) { + Some(r) => Box::new(r), + _ => return None + }; + + namespace.insert(local_scope_string, AmlValue::BufferField { + source_buf: resolved_source_buf, + index: resolved_index, + length: 64 + }); + }, NamedObj::DefOpRegion { ref name, ref region, ref offset, ref len } => { let local_scope_string = get_namespace_string(scope.clone(), name.clone()); diff --git a/src/acpi/aml/namespace.rs b/src/acpi/aml/namespace.rs index 0e99aaf..f95a25a 100644 --- a/src/acpi/aml/namespace.rs +++ b/src/acpi/aml/namespace.rs @@ -13,7 +13,11 @@ use super::namestring::SuperName; pub enum AmlValue { Uninitialized, Buffer, - BufferField, + BufferField { + source_buf: Box, + index: Box, + length: usize + }, DDBHandle, DebugObject, Device(BTreeMap),