Moved indexfield to namespace

This commit is contained in:
Connor Wood
2017-06-22 12:45:58 +01:00
parent 7911853951
commit 94b8bd19d6
2 changed files with 45 additions and 6 deletions

View File

@@ -6,6 +6,7 @@ use core::str::FromStr;
use collections::btree_map::BTreeMap;
use super::{AmlInternalError, AmlExecutable, AmlValue, get_namespace_string};
use super::namespace::FieldSelector;
use super::namestring::{parse_name_string, parse_name_seg};
use super::termlist::{parse_term_arg, parse_term_list, parse_object_list, TermArg, TermObj, Object};
use super::pkglength::parse_pkg_length;
@@ -135,8 +136,35 @@ impl AmlExecutable for NamedObj {
let local_scope_string = get_namespace_string(scope.clone(),
field_name.clone());
namespace.insert(local_scope_string, AmlValue::FieldUnit {
op_region: region_name.clone(),
bank_selector: Some((bank_name.clone(), bank_val.clone())),
selector: FieldSelector::Bank {
region: region_name.clone(),
bank_selector: bank_val.clone()
},
flags: flags.clone(),
offset: offset.clone(),
length: length.clone()
});
offset += length;
},
_ => ()
}
}
},
NamedObj::DefIndexField { ref idx_name, ref data_name, ref flags, ref field_list } => {
let mut offset: usize = 0;
for f in field_list {
match *f {
FieldElement::ReservedField { length } => offset += length,
FieldElement::NamedField { name: ref field_name, length } => {
let local_scope_string = get_namespace_string(scope.clone(),
field_name.clone());
namespace.insert(local_scope_string, AmlValue::FieldUnit {
selector: FieldSelector::Index {
index_selector: idx_name.clone(),
data_selector: data_name.clone()
},
flags: flags.clone(),
offset: offset.clone(),
length: length.clone()
@@ -289,8 +317,7 @@ impl AmlExecutable for NamedObj {
let local_scope_string = get_namespace_string(scope.clone(),
field_name.clone());
namespace.insert(local_scope_string, AmlValue::FieldUnit {
op_region: name.clone(),
bank_selector: None,
selector: FieldSelector::Region(name.clone()),
flags: flags.clone(),
offset: offset.clone(),
length: length.clone()

View File

@@ -9,6 +9,19 @@ use super::namedobj::{ RegionSpace, FieldFlags, Method };
use super::termlist::Object;
use super::namestring::SuperName;
#[derive(Debug, Clone)]
pub enum FieldSelector {
Region(String),
Bank {
region: String,
bank_selector: Box<AmlValue>
},
Index {
index_selector: String,
data_selector: String
}
}
#[derive(Debug, Clone)]
pub enum AmlValue {
Uninitialized,
@@ -23,8 +36,7 @@ pub enum AmlValue {
Device(BTreeMap<String, AmlValue>),
Event,
FieldUnit {
op_region: String,
bank_selector: Option<(String, Box<AmlValue>)>,
selector: FieldSelector,
flags: FieldFlags,
offset: usize,
length: usize