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),