Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion framework_lib/src/chromium_ec/portio.rs
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,8 @@ struct EcHostResponse {
/// Reserved byte in protocol v3. Must be 0
pub reserved: u16,
}
const _HEADER_LEN: usize = std::mem::size_of::<EcHostResponse>();
#[allow(dead_code)]
pub const HEADER_LEN: usize = std::mem::size_of::<EcHostResponse>();

fn transfer_write(buffer: &[u8]) {
if has_mec() {
Expand Down
17 changes: 10 additions & 7 deletions framework_lib/src/chromium_ec/windows.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ use windows::{
},
};

use crate::chromium_ec::portio::HEADER_LEN;
use crate::chromium_ec::EC_MEMMAP_SIZE;
use crate::chromium_ec::{EcError, EcResponseStatus, EcResult};

Expand Down Expand Up @@ -89,16 +90,18 @@ pub fn send_command(command: u16, command_version: u8, data: &[u8]) -> EcResult<
version: command_version as u32,
command: command as u32,
outsize: data.len() as u32,
insize: CROSEC_CMD_MAX_REQUEST as u32,
insize: (CROSEC_CMD_MAX_REQUEST - HEADER_LEN) as u32,
result: 0xFF,
buffer: [0_u8; 256],
buffer: [0_u8; CROSEC_CMD_MAX_REQUEST],
};
cmd.buffer[0..data.len()].clone_from_slice(data);

let size = std::mem::size_of::<CrosEcCommand>();
let buf_size = std::mem::size_of::<CrosEcCommand>();
// Must keep 8 bytes of space for the EC command request/response headers
let cmd_len = buf_size - HEADER_LEN;
let out_len = buf_size - HEADER_LEN;
let const_ptr = &mut cmd as *const _ as *const ::core::ffi::c_void;
let mut_ptr = &mut cmd as *mut _ as *mut ::core::ffi::c_void;
let _ptr_size = std::mem::size_of::<CrosEcCommand>() as u32;

let mut returned: u32 = 0;

Expand All @@ -113,9 +116,9 @@ pub fn send_command(command: u16, command_version: u8, data: &[u8]) -> EcResult<
device.0,
IOCTL_CROSEC_XCMD,
Some(const_ptr),
size.try_into().unwrap(),
cmd_len.try_into().unwrap(),
Some(mut_ptr),
size.try_into().unwrap(),
out_len.try_into().unwrap(),
Some(&mut returned as *mut u32),
None,
)
Expand All @@ -129,7 +132,7 @@ pub fn send_command(command: u16, command_version: u8, data: &[u8]) -> EcResult<
}

// TODO: Figure out why that's sometimes bigger
let end = std::cmp::min(returned, 256);
let end = std::cmp::min(returned, CROSEC_CMD_MAX_REQUEST as u32);

let out_buffer = &cmd.buffer[..(end as usize)];
Ok(out_buffer.to_vec())
Expand Down
2 changes: 1 addition & 1 deletion framework_lib/src/esrt/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -348,12 +348,12 @@ pub fn get_esrt() -> Option<Esrt> {
debug!("Querying WMI");
let results: Vec<HashMap<String, Variant>> = wmi_con.raw_query("SELECT HardwareID, Name FROM Win32_PnPEntity WHERE ClassGUID = '{f2e7dd72-6468-4e36-b6f1-6488f42c1b52}'").unwrap();

let re = regex::Regex::new(r"([\-a-h0-9]+)\}&REV_([A-F0-9]+)").expect("Bad regex");
for (i, val) in results.iter().enumerate() {
let hwid = &val["HardwareID"];
if let Variant::Array(strs) = hwid {
if let Variant::String(s) = &strs[0] {
// Sample "UEFI\\RES_{c57fd615-2ac9-4154-bf34-4dc715344408}&REV_CF"
let re = regex::Regex::new(r"([\-a-h0-9]+)\}&REV_([A-F0-9]+)").expect("Bad regex");
let caps = re.captures(s).expect("No caps");
let guid_str = caps.get(1).unwrap().as_str().to_string();
let ver_str = caps.get(2).unwrap().as_str().to_string();
Expand Down