Switch collections::boxed for alloc::boxed

This commit is contained in:
Jeremy Soller
2017-06-18 20:05:19 -06:00
parent bbcd5197a4
commit cd67aabd5a
7 changed files with 69 additions and 69 deletions

View File

@@ -1,9 +1,9 @@
//! # AML
//! Code to parse and execute AML tables
use collections::vec::Vec;
use alloc::boxed::Box;
use collections::string::String;
use collections::boxed::Box;
use collections::vec::Vec;
use core::fmt::Debug;
use core::str::FromStr;
@@ -58,7 +58,7 @@ pub fn get_namespace_string(current: String, modifier: String) -> String {
pub fn parse_aml_table(sdt: &'static Sdt) -> Result<AmlNamespace, AmlError> {
let data = sdt.data();
let term_list = match parse_term_list(data) {
Ok(res) => res,
Err(AmlInternalError::AmlParseError(s)) => return Err(AmlError::AmlParseError(s)),

View File

@@ -1,6 +1,6 @@
use collections::vec::Vec;
use alloc::boxed::Box;
use collections::string::String;
use collections::boxed::Box;
use collections::vec::Vec;
use super::{AmlInternalError, AmlExecutable, AmlValue, AmlNamespace, AmlNamespaceContents, get_namespace_string};
use super::namestring::{parse_name_string, parse_name_seg};
@@ -129,7 +129,7 @@ impl AmlExecutable for NamedObj {
Some(r) => r,
_ => return None
};
namespace.push_to(local_scope_string, AmlNamespaceContents::OpRegion {
region: *region,
offset: resolved_offset,
@@ -138,7 +138,7 @@ impl AmlExecutable for NamedObj {
},
NamedObj::DefField { ref name, ref flags, ref field_list } => {
let mut offset: usize = 0;
for f in field_list {
match *f {
FieldElement::ReservedField { length } => offset += length,
@@ -165,7 +165,7 @@ impl AmlExecutable for NamedObj {
},
_ => ()
}
None
}
}
@@ -313,7 +313,7 @@ fn parse_def_bank_field(data: &[u8]) -> Result<(NamedObj, usize), AmlInternalErr
_ => return Err(AmlInternalError::AmlParseError("BankField - invalid update rule"))
}
};
let field_list = match parse_field_list(
&data[3 + pkg_length_len + region_name_len + bank_name_len + bank_value_len ..
2 + pkg_length]) {
@@ -322,7 +322,7 @@ fn parse_def_bank_field(data: &[u8]) -> Result<(NamedObj, usize), AmlInternalErr
return Ok((NamedObj::DeferredLoad(data[0 .. 2 + pkg_length].to_vec()), 2 + pkg_length)),
Err(e) => return Err(e)
};
Ok((NamedObj::DefBankField {region_name, bank_name, bank_value, flags, field_list},
2 + pkg_length))
}
@@ -439,7 +439,7 @@ fn parse_def_device(data: &[u8]) -> Result<(NamedObj, usize), AmlInternalError>
fn parse_def_op_region(data: &[u8]) -> Result<(NamedObj, usize), AmlInternalError> {
parser_opcode_extended!(data, 0x80);
let (name, name_len) = parse_name_string(&data[2..])?;
let region = match data[2 + name_len] {
0x00 => RegionSpace::SystemMemory,
@@ -455,7 +455,7 @@ fn parse_def_op_region(data: &[u8]) -> Result<(NamedObj, usize), AmlInternalErro
0x80 ... 0xFF => RegionSpace::UserDefined(data[2 + name_len]),
_ => return Err(AmlInternalError::AmlParseError("OpRegion - invalid region"))
};
let (offset, offset_len) = parse_term_arg(&data[3 + name_len..])?;
let (len, len_len) = parse_term_arg(&data[3 + name_len + offset_len..])?;
@@ -464,7 +464,7 @@ fn parse_def_op_region(data: &[u8]) -> Result<(NamedObj, usize), AmlInternalErro
fn parse_def_field(data: &[u8]) -> Result<(NamedObj, usize), AmlInternalError> {
parser_opcode_extended!(data, 0x81);
let (pkg_length, pkg_length_len) = parse_pkg_length(&data[2..])?;
let (name, name_len) = match parse_name_string(&data[2 + pkg_length_len .. 2 + pkg_length]) {
Ok(p) => p,
@@ -492,7 +492,7 @@ fn parse_def_field(data: &[u8]) -> Result<(NamedObj, usize), AmlInternalError> {
_ => return Err(AmlInternalError::AmlParseError("Field - Invalid update rule"))
}
};
let field_list = match parse_field_list(&data[3 + pkg_length_len + name_len .. 2 + pkg_length]) {
Ok(p) => p,
Err(AmlInternalError::AmlDeferredLoad) =>
@@ -522,7 +522,7 @@ fn parse_def_index_field(data: &[u8]) -> Result<(NamedObj, usize), AmlInternalEr
return Ok((NamedObj::DeferredLoad(data[0 .. 2 + pkg_length].to_vec()), 2 + pkg_length)),
Err(e) => return Err(e)
};
let flags_raw = data[2 + pkg_length_len + idx_name_len + data_name_len];
let flags = FieldFlags {
access_type: match flags_raw & 0x0F {
@@ -542,7 +542,7 @@ fn parse_def_index_field(data: &[u8]) -> Result<(NamedObj, usize), AmlInternalEr
_ => return Err(AmlInternalError::AmlParseError("IndexField - Invalid update rule"))
}
};
let field_list = match parse_field_list(
&data[3 + pkg_length_len + idx_name_len + data_name_len .. 2 + pkg_length]) {
Ok(p) => p,
@@ -565,7 +565,7 @@ fn parse_field_list(data: &[u8]) -> Result<Vec<FieldElement>, AmlInternalError>
return Err(AmlInternalError::AmlParseError("FieldList - no valid field")),
Err(e) => return Err(e)
};
terms.push(res);
current_offset += len;
}
@@ -598,14 +598,14 @@ fn parse_named_field(data: &[u8]) -> Result<(FieldElement, usize), AmlInternalEr
fn parse_reserved_field(data: &[u8]) -> Result<(FieldElement, usize), AmlInternalError> {
parser_opcode!(data, 0x00);
let (length, length_len) = parse_pkg_length(&data[1..])?;
Ok((FieldElement::ReservedField {length}, 1 + length_len))
}
fn parse_access_field(data: &[u8]) -> Result<(FieldElement, usize), AmlInternalError> {
parser_opcode!(data, 0x01, 0x03);
let flags_raw = data[1];
let access_type = match flags_raw & 0x0F {
0 => AccessType::AnyAcc,
@@ -647,7 +647,7 @@ fn parse_access_field(data: &[u8]) -> Result<(FieldElement, usize), AmlInternalE
fn parse_connect_field(data: &[u8]) -> Result<(FieldElement, usize), AmlInternalError> {
parser_opcode!(data, 0x02);
match parse_def_buffer(&data[1..]) {
Ok((buf, buf_len)) => return Ok((FieldElement::ConnectFieldBufferData(buf), buf_len + 1)),
Err(AmlInternalError::AmlInvalidOpCode) => (),
@@ -718,7 +718,7 @@ fn parse_def_power_res(data: &[u8]) -> Result<(NamedObj, usize), AmlInternalErro
return Ok((NamedObj::DeferredLoad(data[0 .. 2 + pkg_len].to_vec()), 2 + pkg_len)),
Err(e) => return Err(e)
};
let system_level = data[2 + pkg_len_len + name_len];
let resource_order: u16 = (data[3 + pkg_len_len + name_len] as u16) +
((data[4 + pkg_len_len + name_len] as u16) << 8);
@@ -743,7 +743,7 @@ fn parse_def_processor(data: &[u8]) -> Result<(NamedObj, usize), AmlInternalErro
return Ok((NamedObj::DeferredLoad(data[0 .. 2 + pkg_len].to_vec()), 2 + pkg_len)),
Err(e) => return Err(e)
};
let proc_id = data[2 + pkg_len_len + name_len];
let p_blk_addr: u32 = (data[3 + pkg_len_len + name_len] as u32) +
((data[4 + pkg_len_len + name_len] as u32) << 8) +
@@ -771,7 +771,7 @@ fn parse_def_thermal_zone(data: &[u8]) -> Result<(NamedObj, usize), AmlInternalE
return Ok((NamedObj::DeferredLoad(data[0 .. 2 + pkg_len].to_vec()), 2 + pkg_len)),
Err(e) => return Err(e)
};
let obj_list = match parse_object_list(&data[2 + pkg_len_len + name_len .. 2 + pkg_len]) {
Ok(p) => p,
Err(AmlInternalError::AmlDeferredLoad) =>

View File

@@ -1,6 +1,6 @@
use alloc::boxed::Box;
use collections::string::String;
use collections::vec::Vec;
use collections::boxed::Box;
use core::str::FromStr;
@@ -82,7 +82,7 @@ impl AmlNamespace {
let scope_string = String::from_str(scope_str).unwrap();
self.find(scope_string)
}
pub fn find(&self, scope_string: String) -> Option<AmlValue> {
if scope_string.len() == 0 {
match self.contents {
@@ -90,9 +90,9 @@ impl AmlNamespace {
_ => return None
}
}
let mut scope_string = scope_string.clone();
if scope_string.starts_with("\\") {
if self.name != "\\" {
return None;
@@ -104,7 +104,7 @@ impl AmlNamespace {
if scope_string.starts_with(".") {
scope_string.remove(0);
}
if scope_string.len() == 0 {
match self.contents {
AmlNamespaceContents::Value(ref v) => return Some(v.clone()),
@@ -146,7 +146,7 @@ impl AmlNamespace {
None
}
pub fn push(&mut self, val: AmlNamespaceContents) {
match self.contents {
AmlNamespaceContents::Namespace(ref mut v) => v.push(val),
@@ -158,9 +158,9 @@ impl AmlNamespace {
if scope_string.len() == 0 {
return;
}
let mut scope_string = scope_string.clone();
if scope_string.starts_with("\\") {
if self.name != "\\" {
return;
@@ -173,7 +173,7 @@ impl AmlNamespace {
if scope_string.starts_with(".") {
scope_string.remove(0);
}
if scope_string.len() == 0 {
return;
}
@@ -207,12 +207,12 @@ impl AmlNamespace {
current_index += 1;
}
let mut next = AmlNamespace {
name: current,
contents: contents
};
namespace.push(AmlNamespaceContents::SubNamespace(Box::new(next)));
}
_ => () // TODO: Error this

View File

@@ -1,6 +1,6 @@
use collections::vec::Vec;
use alloc::boxed::Box;
use collections::string::String;
use collections::boxed::Box;
use collections::vec::Vec;
use super::{AmlInternalError, AmlExecutable, AmlValue, AmlNamespace, AmlNamespaceContents, get_namespace_string};
use super::pkglength::parse_pkg_length;
@@ -63,10 +63,10 @@ pub fn parse_namespace_modifier(data: &[u8]) -> Result<(NamespaceModifier, usize
fn parse_alias_op(data: &[u8]) -> Result<(NamespaceModifier, usize), AmlInternalError> {
parser_opcode!(data, 0x06);
let (source_name, source_name_len) = parse_name_string(&data[1..])?;
let (alias_name, alias_name_len) = parse_name_string(&data[1 + source_name_len..])?;
Ok((NamespaceModifier::Alias {source_name, alias_name}, 1 + source_name_len + alias_name_len))
}
@@ -75,13 +75,13 @@ fn parse_name_op(data: &[u8]) -> Result<(NamespaceModifier, usize), AmlInternalE
let (name, name_len) = parse_name_string(&data[1..])?;
let (data_ref_obj, data_ref_obj_len) = parse_data_ref_obj(&data[1 + name_len..])?;
Ok((NamespaceModifier::Name {name, data_ref_obj}, 1 + name_len + data_ref_obj_len))
}
fn parse_scope_op(data: &[u8]) -> Result<(NamespaceModifier, usize), AmlInternalError> {
parser_opcode!(data, 0x10);
let (pkg_length, pkg_length_len) = parse_pkg_length(&data[1..])?;
let (name, name_len) = match parse_name_string(&data[1 + pkg_length_len..]) {
Ok(p) => p,

View File

@@ -1,6 +1,6 @@
use collections::vec::Vec;
use collections::boxed::Box;
use alloc::boxed::Box;
use collections::string::String;
use collections::vec::Vec;
use super::{AmlInternalError, AmlExecutable, AmlValue, AmlNamespace, get_namespace_string};
use super::namespacemodifier::{parse_namespace_modifier, NamespaceModifier};
@@ -103,7 +103,7 @@ pub fn parse_object_list(data: &[u8]) -> Result<Vec<Object>, AmlInternalError> {
terms.push(res);
current_offset += len;
}
Ok(terms)
}

View File

@@ -1,6 +1,6 @@
use collections::vec::Vec;
use alloc::boxed::Box;
use collections::string::String;
use collections::boxed::Box;
use collections::vec::Vec;
use super::{AmlInternalError, AmlExecutable, AmlValue, AmlNamespace};
use super::pkglength::parse_pkg_length;
@@ -195,18 +195,18 @@ fn parse_def_if_else(data: &[u8]) -> Result<(Type1OpCode, usize), AmlInternalErr
Ok((predicate, predicate_len)) => {
match parse_term_list(&data[1 + pkg_length_len + predicate_len .. 1 + pkg_length]) {
Ok(if_block) => IfBlock::If {predicate, if_block},
Err(AmlInternalError::AmlDeferredLoad) =>
Err(AmlInternalError::AmlDeferredLoad) =>
IfBlock::DeferredLoad(data[0 .. 1 + pkg_length].to_vec()),
Err(e) => return Err(e)
}
},
Err(AmlInternalError::AmlDeferredLoad) =>
Err(AmlInternalError::AmlDeferredLoad) =>
IfBlock::DeferredLoad(data[0 .. 1 + pkg_length].to_vec()),
Err(e) => return Err(e)
};
let (else_block, else_block_len) = parse_def_else(&data[1 + pkg_length..])?;
return Ok((Type1OpCode::DefIfElse {if_block, else_block},
pkg_length + else_block_len + 1));
}

View File

@@ -1,6 +1,6 @@
use collections::vec::Vec;
use alloc::boxed::Box;
use collections::string::String;
use collections::boxed::Box;
use collections::vec::Vec;
use super::{AmlInternalError, AmlExecutable, AmlValue, AmlNamespace};
use super::pkglength::parse_pkg_length;
@@ -277,7 +277,7 @@ impl AmlExecutable for DefPackage {
match *self {
DefPackage::Package { ref num_elements, ref elements } => {
let mut values: Vec<AmlValue> = vec!();
for element in elements {
match *element {
PackageElement::DataRefObj(ref d) => {
@@ -353,7 +353,7 @@ pub fn parse_type2_opcode(data: &[u8]) -> Result<(Type2OpCode, usize), AmlIntern
parser_wrap!(Type2OpCode::DefIndex, parse_def_index),
parser_wrap!(Type2OpCode::MethodInvocation, parse_method_invocation)
};
Err(AmlInternalError::AmlInvalidOpCode)
}
@@ -365,7 +365,7 @@ pub fn parse_type6_opcode(data: &[u8]) -> Result<(Type6OpCode, usize), AmlIntern
parser_wrap!(Type6OpCode::DefIndex, parse_def_index),
parser_wrap!(Type6OpCode::MethodInvocation, parse_method_invocation)
};
Err(AmlInternalError::AmlInvalidOpCode)
}
@@ -387,7 +387,7 @@ pub fn parse_def_package(data: &[u8]) -> Result<(DefPackage, usize), AmlInternal
let (pkg_length, pkg_length_len) = parse_pkg_length(&data[1..])?;
let num_elements = data[1 + pkg_length_len];
let elements = match parse_package_elements_list(&data[2 + pkg_length_len .. 1 + pkg_length]) {
Ok(e) => e,
Err(AmlInternalError::AmlDeferredLoad) =>
@@ -415,18 +415,18 @@ pub fn parse_def_var_package(data: &[u8]) -> Result<(DefVarPackage, usize), AmlI
Ok((DefVarPackage::Package {num_elements, elements}, 1 + pkg_length))
}
fn parse_package_elements_list(data: &[u8]) -> Result<Vec<PackageElement>, AmlInternalError> {
let mut current_offset: usize = 0;
let mut elements: Vec<PackageElement> = vec!();
while current_offset < data.len() {
match parse_data_ref_obj(&data[current_offset ..]) {
Ok((data_ref_obj, data_ref_obj_len)) => {
elements.push(PackageElement::DataRefObj(data_ref_obj));
current_offset += data_ref_obj_len;
},
Err(AmlInternalError::AmlInvalidOpCode) =>
Err(AmlInternalError::AmlInvalidOpCode) =>
match parse_name_string(&data[current_offset ..]) {
Ok((name_string, name_string_len)) => {
elements.push(PackageElement::NameString(name_string));
@@ -440,10 +440,10 @@ fn parse_package_elements_list(data: &[u8]) -> Result<Vec<PackageElement>, AmlIn
Ok(elements)
}
pub fn parse_def_buffer(data: &[u8]) -> Result<(DefBuffer, usize), AmlInternalError> {
parser_opcode!(data, 0x11);
let (pkg_length, pkg_length_len) = parse_pkg_length(&data[1..])?;
let (buffer_size, buffer_size_len) = match parse_term_arg(&data[1 + pkg_length_len..]) {
Ok(s) => s,
@@ -453,7 +453,7 @@ pub fn parse_def_buffer(data: &[u8]) -> Result<(DefBuffer, usize), AmlInternalEr
Err(e) => return Err(e),
};
let byte_list = data[1 + pkg_length_len + buffer_size_len .. 1 + pkg_length].to_vec();
Ok((DefBuffer::Buffer {buffer_size, byte_list}, pkg_length + 1))
}
@@ -473,24 +473,24 @@ fn parse_def_deref_of(data: &[u8]) -> Result<(TermArg, usize), AmlInternalError>
fn parse_def_acquire(data: &[u8]) -> Result<(Type2OpCode, usize), AmlInternalError> {
parser_opcode_extended!(data, 0x23);
let (object, object_len) = parse_super_name(&data[2..])?;
let timeout = (data[2 + object_len] as u16) +
((data[3 + object_len] as u16) << 8);
Ok((Type2OpCode::DefAcquire {object, timeout}, object_len + 4))
}
fn parse_def_increment(data: &[u8]) -> Result<(Type2OpCode, usize), AmlInternalError> {
parser_opcode!(data, 0x75);
let (obj, obj_len) = parse_super_name(&data[1..])?;
Ok((Type2OpCode::DefIncrement(obj), obj_len + 1))
}
fn parse_def_index(data: &[u8]) -> Result<(DefIndex, usize), AmlInternalError> {
parser_opcode!(data, 0x88);
let (obj, obj_len) = parse_term_arg(&data[1..])?;
let (idx, idx_len) = parse_term_arg(&data[1 + obj_len..])?;
let (target, target_len) = parse_target(&data[1 + obj_len + idx_len..])?;
@@ -500,7 +500,7 @@ fn parse_def_index(data: &[u8]) -> Result<(DefIndex, usize), AmlInternalError> {
fn parse_def_land(data: &[u8]) -> Result<(Type2OpCode, usize), AmlInternalError> {
parser_opcode!(data, 0x90);
let (lhs, lhs_len) = parse_term_arg(&data[1..])?;
let (rhs, rhs_len) = parse_term_arg(&data[1 + lhs_len..])?;
@@ -509,7 +509,7 @@ fn parse_def_land(data: &[u8]) -> Result<(Type2OpCode, usize), AmlInternalError>
fn parse_def_lequal(data: &[u8]) -> Result<(Type2OpCode, usize), AmlInternalError> {
parser_opcode!(data, 0x93);
let (lhs, lhs_len) = parse_term_arg(&data[1..])?;
let (rhs, rhs_len) = parse_term_arg(&data[1 + lhs_len..])?;
@@ -518,7 +518,7 @@ fn parse_def_lequal(data: &[u8]) -> Result<(Type2OpCode, usize), AmlInternalErro
fn parse_def_lgreater(data: &[u8]) -> Result<(Type2OpCode, usize), AmlInternalError> {
parser_opcode!(data, 0x94);
let (lhs, lhs_len) = parse_term_arg(&data[1..])?;
let (rhs, rhs_len) = parse_term_arg(&data[1 + lhs_len..])?;
@@ -664,7 +664,7 @@ fn parse_def_shift_right(data: &[u8]) -> Result<(Type2OpCode, usize), AmlInterna
fn parse_def_add(data: &[u8]) -> Result<(Type2OpCode, usize), AmlInternalError> {
parser_opcode!(data, 0x72);
let (lhs, lhs_len) = parse_term_arg(&data[1..])?;
let (rhs, rhs_len) = parse_term_arg(&data[1 + lhs_len..])?;
let (target, target_len) = parse_target(&data[1 + lhs_len + rhs_len..])?;