From 45fe0406253026604d68775fbcbd423549a7cb28 Mon Sep 17 00:00:00 2001 From: 4lDO2 <4lDO2@protonmail.com> Date: Sun, 12 Apr 2020 18:32:21 +0200 Subject: [PATCH] rustfmt. --- src/scheme/acpi.rs | 184 +++++++++++++++++++++++++++++++++------------ 1 file changed, 138 insertions(+), 46 deletions(-) diff --git a/src/scheme/acpi.rs b/src/scheme/acpi.rs index 93a9a19e..b11739b4 100644 --- a/src/scheme/acpi.rs +++ b/src/scheme/acpi.rs @@ -1,22 +1,22 @@ use core::convert::{TryFrom, TryInto}; -use core::sync::atomic::{self, AtomicUsize}; use core::fmt::Write; use core::str; +use core::sync::atomic::{self, AtomicUsize}; -use alloc::vec::Vec; use alloc::collections::BTreeMap; +use alloc::vec::Vec; -use syscall::scheme::Scheme; use syscall::data::Stat; -use syscall::flag::{O_DIRECTORY, O_STAT, O_ACCMODE, O_WRONLY, O_RDWR}; -use syscall::error::{EACCES, EBADF, EBADFD, EISDIR, EINVAL, EIO, ENOENT, ENOTDIR}; -use syscall::{MODE_DIR, MODE_FILE, SEEK_CUR, SEEK_END, SEEK_SET}; +use syscall::error::{EACCES, EBADF, EBADFD, EINVAL, EIO, EISDIR, ENOENT, ENOTDIR}; +use syscall::flag::{O_ACCMODE, O_DIRECTORY, O_RDWR, O_STAT, O_WRONLY}; +use syscall::scheme::Scheme; use syscall::{Error, Result}; +use syscall::{MODE_DIR, MODE_FILE, SEEK_CUR, SEEK_END, SEEK_SET}; use spin::{Mutex, RwLock}; -use crate::acpi::SdtSignature; use crate::acpi::sdt::Sdt; +use crate::acpi::SdtSignature; use crate::paging::ActivePageTable; #[derive(Clone, Copy)] @@ -56,20 +56,18 @@ struct Take<'a> { impl Take<'_> { pub fn write_to_buf<'a>(buf: &'a mut [u8]) -> Take<'a> { - Take { - offset: 0, - buf, - } + Take { offset: 0, buf } } pub fn bytes_currently_written(&self) -> usize { self.offset } } -impl<'a> core::fmt::Write for Take<'a> -{ +impl<'a> core::fmt::Write for Take<'a> { fn write_str(&mut self, string: &str) -> core::fmt::Result { - if self.offset > self.buf.len() { return Ok(()) } + if self.offset > self.buf.len() { + return Ok(()); + } let string_bytes = string.as_bytes(); let max = core::cmp::min(string_bytes.len() + self.offset, self.buf.len()) - self.offset; @@ -80,8 +78,8 @@ impl<'a> core::fmt::Write for Take<'a> } enum Handle { - TopLevel(usize), // seek offset - Tables(usize), // seek offset + TopLevel(usize), // seek offset + Tables(usize), // seek offset Table { name: [u8; 4], @@ -104,15 +102,24 @@ impl AcpiScheme { // it appears that the SDTs are identity mapped, in which case we can just call get_sdt // whenever we need to and use the slice as if it was physical. - let table_name_str = str::from_utf8(allowed_tbl_name).expect("ACPI table name wasn't correct UTF-8"); + let table_name_str = + str::from_utf8(allowed_tbl_name).expect("ACPI table name wasn't correct UTF-8"); for sdt in find_sdt(table_name_str) { - let virt = get_sdt(sdt as *const Sdt as usize, &mut active_table) as *const Sdt as usize; + let virt = + get_sdt(sdt as *const Sdt as usize, &mut active_table) as *const Sdt as usize; let signature = get_sdt_signature(sdt); let sdt_pointer = sdt as *const Sdt as usize; let len = sdt.length as usize; assert_eq!(virt, sdt_pointer); - tables.push((signature, PhysSlice { phys_ptr: sdt_pointer, len, virt })); + tables.push(( + signature, + PhysSlice { + phys_ptr: sdt_pointer, + len, + virt, + }, + )); } } tables @@ -124,10 +131,26 @@ impl AcpiScheme { next_fd: AtomicUsize::new(0), } } - fn lookup_signature_index(&self, name: [u8; 4], oem_id: [u8; 6], oem_table_id: [u8; 8]) -> Option<usize> { - self.tables.iter().position(|((sig_name, sig_oem_id, sig_oem_table_id), _)| sig_name.as_bytes() == &name && sig_oem_id == &oem_id && sig_oem_table_id == &oem_table_id) + fn lookup_signature_index( + &self, + name: [u8; 4], + oem_id: [u8; 6], + oem_table_id: [u8; 8], + ) -> Option<usize> { + self.tables + .iter() + .position(|((sig_name, sig_oem_id, sig_oem_table_id), _)| { + sig_name.as_bytes() == &name + && sig_oem_id == &oem_id + && sig_oem_table_id == &oem_table_id + }) } - fn lookup_signature(&self, name: [u8; 4], oem_id: [u8; 6], oem_table_id: [u8; 8]) -> Option<PhysSlice> { + fn lookup_signature( + &self, + name: [u8; 4], + oem_id: [u8; 6], + oem_table_id: [u8; 8], + ) -> Option<PhysSlice> { Some(self.tables[self.lookup_signature_index(name, oem_id, oem_table_id)?].1) } } @@ -138,14 +161,20 @@ fn parse_table_filename(filename: &[u8]) -> Option<([u8; 4], [u8; 6], [u8; 8])> // 2. a dash followed by 12 hexadecimal digits (6 bytes when decoded) composing the OEM ID. // 3. another dash followed by 16 hex digits (8 bytes), composing the OEM Table ID. // hence, the table is 4 + 1 + 12 + 1 + 16 = 34 bytes long. - if filename.len() != 34 { return None } + if filename.len() != 34 { + return None; + } let mut table_identifier = [0u8; 34]; table_identifier.copy_from_slice(filename); let table_name = &table_identifier[..4]; - if table_identifier[4] != b'-' { return None } + if table_identifier[4] != b'-' { + return None; + } let oem_id_hex = &table_identifier[5..17]; - if table_identifier[17] != b'-' { return None } + if table_identifier[17] != b'-' { + return None; + } let oem_table_id_hex = &table_identifier[18..34]; let oem_id_hex_str = str::from_utf8(oem_id_hex).ok()?; @@ -160,14 +189,23 @@ fn parse_table_filename(filename: &[u8]) -> Option<([u8; 4], [u8; 6], [u8; 8])> let mut oem_table_id = [0u8; 8]; for index in 0..oem_table_id.len() { - oem_table_id[index] = u8::from_str_radix(&oem_table_id_hex_str[index * 2..(index + 1) * 2], 16).ok()?; + oem_table_id[index] = + u8::from_str_radix(&oem_table_id_hex_str[index * 2..(index + 1) * 2], 16).ok()?; } Some((table_name.try_into().unwrap(), oem_id, oem_table_id)) } -fn serialize_table_filename(buffer: &mut [u8], (table_name, oem_id, oem_table_id): ([u8; 4], [u8; 6], [u8; 8])) -> usize { +fn serialize_table_filename( + buffer: &mut [u8], + (table_name, oem_id, oem_table_id): ([u8; 4], [u8; 6], [u8; 8]), +) -> usize { let mut wrapper = Take::write_to_buf(buffer); - write!(wrapper, "{}-", str::from_utf8(&table_name).expect("Acpi table id wasn't valid UTF-8")).unwrap(); + write!( + wrapper, + "{}-", + str::from_utf8(&table_name).expect("Acpi table id wasn't valid UTF-8") + ) + .unwrap(); for b in &oem_id { write!(wrapper, "{:2x}", b).unwrap(); } @@ -180,7 +218,9 @@ fn serialize_table_filename(buffer: &mut [u8], (table_name, oem_id, oem_table_id impl Scheme for AcpiScheme { fn open(&self, path: &[u8], flags: usize, opener_uid: u32, _opener_gid: u32) -> Result<usize> { - if opener_uid != 0 { return Err(Error::new(EACCES)) } + if opener_uid != 0 { + return Err(Error::new(EACCES)); + } let path_str = str::from_utf8(path).or(Err(Error::new(ENOENT)))?; let path_str = path_str.trim_start_matches('/'); @@ -192,7 +232,9 @@ impl Scheme for AcpiScheme { if subpath.is_empty() { // List of ACPI tables - if (flags & O_DIRECTORY == 0 && flags & O_STAT == 0) || (flags & O_ACCMODE == O_WRONLY || flags & O_ACCMODE == O_RDWR) { + if (flags & O_DIRECTORY == 0 && flags & O_STAT == 0) + || (flags & O_ACCMODE == O_WRONLY || flags & O_ACCMODE == O_RDWR) + { return Err(Error::new(EISDIR)); } Handle::Tables(0) @@ -203,9 +245,13 @@ impl Scheme for AcpiScheme { if flags & O_ACCMODE == O_WRONLY || flags & O_ACCMODE == O_RDWR { return Err(Error::new(EINVAL)); } - let (name, oem_id, oem_table_id) = parse_table_filename(subpath.as_bytes()).ok_or(Error::new(ENOENT))?; + let (name, oem_id, oem_table_id) = + parse_table_filename(subpath.as_bytes()).ok_or(Error::new(ENOENT))?; - if self.lookup_signature_index(name, oem_id, oem_table_id).is_none() { + if self + .lookup_signature_index(name, oem_id, oem_table_id) + .is_none() + { return Err(Error::new(ENOENT)); } Handle::Table { @@ -217,7 +263,9 @@ impl Scheme for AcpiScheme { } } else if path.is_empty() { // Top-level - if (flags & O_DIRECTORY == 0 && flags & O_STAT == 0) || (flags & O_ACCMODE == O_WRONLY || flags & O_ACCMODE == O_RDWR) { + if (flags & O_DIRECTORY == 0 && flags & O_STAT == 0) + || (flags & O_ACCMODE == O_WRONLY || flags & O_ACCMODE == O_RDWR) + { return Err(Error::new(EISDIR)); } Handle::TopLevel(0) @@ -245,7 +293,12 @@ impl Scheme for AcpiScheme { buf[..max].copy_from_slice(&path[..]); max } - &Handle::Table { name, oem_id, oem_table_id, .. } => { + &Handle::Table { + name, + oem_id, + oem_table_id, + .. + } => { let base_path = b"acpi:tables/"; let base_max = core::cmp::min(buf.len(), base_path.len()); buf[..base_max].copy_from_slice(&base_path[..]); @@ -266,8 +319,16 @@ impl Scheme for AcpiScheme { stat.st_mode = MODE_DIR; stat.st_size = (self.tables.len() * 35) as u64; // fixed size of 34 bytes for the file names, plus a newline } - &Handle::Table { name, oem_id, oem_table_id, .. } => { - let len = self.lookup_signature(name, oem_id, oem_table_id).ok_or(Error::new(EBADFD))?.len; + &Handle::Table { + name, + oem_id, + oem_table_id, + .. + } => { + let len = self + .lookup_signature(name, oem_id, oem_table_id) + .ok_or(Error::new(EBADFD))? + .len; stat.st_mode = MODE_FILE; stat.st_size = len as u64; @@ -282,7 +343,17 @@ impl Scheme for AcpiScheme { let (cur_offset, length) = match &*handle { &Handle::TopLevel(offset) => (offset, TOPLEVEL_DIR_CONTENTS.len()), &Handle::Tables(offset) => (offset, self.tables.len() * 35), - &Handle::Table { name, oem_id, oem_table_id, offset } => (offset, self.lookup_signature(name, oem_id, oem_table_id).ok_or(Error::new(EBADFD))?.len), + &Handle::Table { + name, + oem_id, + oem_table_id, + offset, + } => ( + offset, + self.lookup_signature(name, oem_id, oem_table_id) + .ok_or(Error::new(EBADFD))? + .len, + ), }; let new_offset = match whence { SEEK_CUR => core::cmp::min(cur_offset + pos, length), @@ -291,7 +362,9 @@ impl Scheme for AcpiScheme { _ => return Err(Error::new(EINVAL)), }; match &mut *handle { - &mut Handle::Table { ref mut offset, .. } | &mut Handle::Tables(ref mut offset) | &mut Handle::TopLevel(ref mut offset) => *offset = new_offset, + &mut Handle::Table { ref mut offset, .. } + | &mut Handle::Tables(ref mut offset) + | &mut Handle::TopLevel(ref mut offset) => *offset = new_offset, } Ok(new_offset) } @@ -303,7 +376,8 @@ impl Scheme for AcpiScheme { &mut Handle::TopLevel(ref mut offset) => { let max_bytes_to_read = core::cmp::min(buf.len(), TOPLEVEL_DIR_CONTENTS.len()); let bytes_to_read = core::cmp::max(max_bytes_to_read, *offset) - *offset; - buf[..bytes_to_read].copy_from_slice(&TOPLEVEL_DIR_CONTENTS[*offset..*offset + bytes_to_read]); + buf[..bytes_to_read] + .copy_from_slice(&TOPLEVEL_DIR_CONTENTS[*offset..*offset + bytes_to_read]); *offset += bytes_to_read; Ok(bytes_to_read) } @@ -319,14 +393,19 @@ impl Scheme for AcpiScheme { for index in base_table_index..self.tables.len() { let &(ref name_string, oem_id, oem_table_id) = &self.tables[index].0; - let signature = (name_string.as_bytes().try_into().or(Err(Error::new(EIO)))?, oem_id, oem_table_id); + let signature = ( + name_string.as_bytes().try_into().or(Err(Error::new(EIO)))?, + oem_id, + oem_table_id, + ); let mut src_buf = [0u8; 35]; serialize_table_filename(&mut src_buf[..34], signature); src_buf[34] = b'\n'; let max_bytes_to_read = core::cmp::min(buf.len(), src_buf.len()); - let bytes_to_read = core::cmp::max(max_bytes_to_read, bytes_to_skip) - bytes_to_skip; + let bytes_to_read = + core::cmp::max(max_bytes_to_read, bytes_to_skip) - bytes_to_skip; buf[..bytes_to_read].copy_from_slice(&src_buf[..bytes_to_read]); bytes_read += bytes_to_read; bytes_to_skip = 0; @@ -341,16 +420,29 @@ impl Scheme for AcpiScheme { oem_table_id, ref mut offset, } => { - let index = self.lookup_signature_index(name, oem_id, oem_table_id).ok_or(Error::new(EBADFD))?; - let (_, PhysSlice { phys_ptr, len, virt: old_virt }) = self.tables[index]; + let index = self + .lookup_signature_index(name, oem_id, oem_table_id) + .ok_or(Error::new(EBADFD))?; + let ( + _, + PhysSlice { + phys_ptr, + len, + virt: old_virt, + }, + ) = self.tables[index]; assert_eq!(phys_ptr, old_virt); - let new_virt = crate::acpi::get_sdt(phys_ptr, unsafe { &mut ActivePageTable::new() }) as *const Sdt as usize; + let new_virt = + crate::acpi::get_sdt(phys_ptr, unsafe { &mut ActivePageTable::new() }) + as *const Sdt as usize; - let table_contents = unsafe { core::slice::from_raw_parts(new_virt as *const u8, len) }; + let table_contents = + unsafe { core::slice::from_raw_parts(new_virt as *const u8, len) }; let max_bytes_to_read = core::cmp::min(buf.len(), table_contents.len()); let bytes_to_read = core::cmp::max(max_bytes_to_read, *offset) - *offset; - buf[..bytes_to_read].copy_from_slice(&table_contents[*offset..*offset + bytes_to_read]); + buf[..bytes_to_read] + .copy_from_slice(&table_contents[*offset..*offset + bytes_to_read]); *offset += bytes_to_read; Ok(bytes_to_read) } -- GitLab