Implement From<> properly for Status
This commit is contained in:
parent
3c3768f014
commit
f590caff1c
@ -25,9 +25,9 @@ const EFI_INVALID_PARAMETER: u64 = EFI_ERR | 0x02;
|
||||
const EFI_BUFFER_TOO_SMALL: u64 = EFI_ERR | 0x05;
|
||||
const EFI_NOT_READY: u64 = EFI_ERR | 0x06;
|
||||
|
||||
impl Status {
|
||||
pub fn to_num(self) -> u64 {
|
||||
match self {
|
||||
impl From<Status> for u64 {
|
||||
fn from(s: Status) -> u64 {
|
||||
match s {
|
||||
Status::Success => EFI_SUCCESS,
|
||||
Status::Err => EFI_ERR,
|
||||
Status::InvalidParameter => EFI_INVALID_PARAMETER,
|
||||
@ -35,8 +35,11 @@ impl Status {
|
||||
Status::NotReady => EFI_NOT_READY,
|
||||
}
|
||||
}
|
||||
pub fn from_num(v: u64) -> Status {
|
||||
match v {
|
||||
}
|
||||
|
||||
impl From<u64> for Status {
|
||||
fn from(s: u64) -> Self {
|
||||
match s {
|
||||
0 => Status::Success,
|
||||
EFI_ERR => Status::Err,
|
||||
EFI_INVALID_PARAMETER => Status::InvalidParameter,
|
||||
@ -45,11 +48,13 @@ impl Status {
|
||||
_ => Status::Err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn to_result(&self) -> Result<()> {
|
||||
match self {
|
||||
impl From<Status> for core::result::Result<(), Status> {
|
||||
fn from(s: Status) -> Self {
|
||||
match s {
|
||||
Status::Success => Ok(()),
|
||||
err => Err(*err)
|
||||
err => Err(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -68,11 +73,11 @@ impl Termination for ! {
|
||||
|
||||
impl<T> Termination for Result<T> {
|
||||
fn to_efi(&self) -> u64 {
|
||||
match self {
|
||||
match *self {
|
||||
Ok(_) => EFI_SUCCESS,
|
||||
Err(err) => {
|
||||
assert!(*err != Status::Success);
|
||||
err.to_num()
|
||||
assert!(err != Status::Success);
|
||||
err.into()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -88,7 +88,7 @@ pub struct HandleBufferIterator {
|
||||
impl BootServices {
|
||||
pub fn get_memory_map(&self, out: &mut MemoryMap) -> Result<(), Status> {
|
||||
out.size = out.storage_ref.len();
|
||||
return Status::from_num(unsafe {
|
||||
Status::from(unsafe {
|
||||
let mut trash: u32 = 0;
|
||||
(self.get_memory_map)(
|
||||
(&mut out.size) as *mut usize,
|
||||
@ -97,24 +97,24 @@ impl BootServices {
|
||||
(&mut out.descriptor_size) as *mut usize,
|
||||
(&mut trash) as *mut u32
|
||||
)
|
||||
}).to_result();
|
||||
}).into()
|
||||
}
|
||||
|
||||
// Unlike EFI's variant, just for one event
|
||||
pub fn wait_for_event(&self, ev: Event) -> Result<(), Status> {
|
||||
let mut index = 0usize;
|
||||
return Status::from_num(unsafe {
|
||||
Status::from(unsafe {
|
||||
(self.wait_for_event)(
|
||||
1,
|
||||
&ev,
|
||||
&mut index
|
||||
)
|
||||
}).to_result();
|
||||
}).into()
|
||||
}
|
||||
|
||||
pub fn exit(&self, status: Status) -> ! {
|
||||
unsafe {
|
||||
(self.exit)(Handle::from(super::image_handle()), status.to_num(), 0, core::ptr::null());
|
||||
(self.exit)(Handle::from(super::image_handle()), status.into(), 0, core::ptr::null());
|
||||
}
|
||||
}
|
||||
|
||||
@ -123,16 +123,16 @@ impl BootServices {
|
||||
}
|
||||
|
||||
pub fn exit_boot_services(&self, map_key: usize) -> Result<(), Status> {
|
||||
return Status::from_num(unsafe {
|
||||
Status::from(unsafe {
|
||||
(self.exit_boot_services)(Handle::from(super::image_handle()), map_key)
|
||||
}).to_result();
|
||||
}).into()
|
||||
}
|
||||
|
||||
pub fn locate_protocol<T: Protocol>(&self) -> Result<&'static mut T, Status> {
|
||||
let guid = &<T as Protocol>::GUID;
|
||||
let mut proto_ptr: *mut c_void = core::ptr::null_mut();
|
||||
|
||||
match Status::from_num(unsafe {
|
||||
match Status::from(unsafe {
|
||||
(self.locate_protocol)(
|
||||
guid as *const Guid,
|
||||
core::ptr::null_mut(),
|
||||
@ -148,7 +148,7 @@ impl BootServices {
|
||||
let guid = &<T as Protocol>::GUID;
|
||||
let mut proto_ptr: *mut c_void = core::ptr::null_mut();
|
||||
|
||||
match Status::from_num(unsafe {
|
||||
match Status::from(unsafe {
|
||||
(self.handle_protocol)(
|
||||
handle,
|
||||
guid,
|
||||
@ -168,7 +168,7 @@ impl BootServices {
|
||||
let guid = &<T as Protocol>::GUID;
|
||||
let mut proto_ptr: *mut c_void = core::ptr::null_mut();
|
||||
|
||||
match Status::from_num(unsafe {
|
||||
match Status::from(unsafe {
|
||||
(self.open_protocol)(
|
||||
handle,
|
||||
guid,
|
||||
@ -193,7 +193,7 @@ impl BootServices {
|
||||
count: 0
|
||||
};
|
||||
|
||||
match Status::from_num(unsafe {
|
||||
match Status::from(unsafe {
|
||||
(self.locate_handle_buffer)(
|
||||
search_type,
|
||||
guid,
|
||||
|
@ -45,7 +45,7 @@ impl Drop for File {
|
||||
impl File {
|
||||
pub fn open(&self, name: &CStr16, mode: u64, attr: u64) -> Result<File, Status> {
|
||||
let mut ptr: *mut FileProtocol = null_mut();
|
||||
match Status::from_num(unsafe {
|
||||
match Status::from(unsafe {
|
||||
((*self.inner).open)(
|
||||
self.inner,
|
||||
&mut ptr,
|
||||
@ -61,7 +61,7 @@ impl File {
|
||||
|
||||
pub fn read(&mut self, buf: &mut [u8]) -> Result<usize, Status> {
|
||||
let mut len = buf.len();
|
||||
match Status::from_num(unsafe {
|
||||
match Status::from(unsafe {
|
||||
((*self.inner).read)(
|
||||
self.inner,
|
||||
&mut len,
|
||||
@ -74,11 +74,11 @@ impl File {
|
||||
}
|
||||
|
||||
pub fn seek(&mut self, pos: u64) -> Result<(), Status> {
|
||||
Status::from_num(unsafe {
|
||||
Status::from(unsafe {
|
||||
((*self.inner).set_position)(
|
||||
self.inner,
|
||||
pos
|
||||
)
|
||||
}).to_result()
|
||||
}).into()
|
||||
}
|
||||
}
|
||||
|
@ -73,12 +73,12 @@ impl GraphicsOutputProtocol {
|
||||
}
|
||||
|
||||
pub fn set_mode(&mut self, num: u32) -> Result<&'static Mode, Status> {
|
||||
return match Status::from_num(unsafe {
|
||||
match Status::from(unsafe {
|
||||
(self.set_mode)(self as *mut GraphicsOutputProtocol, num)
|
||||
}) {
|
||||
Status::Success => Ok(self.mode),
|
||||
err => Err(err)
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: pixel format
|
||||
@ -103,7 +103,7 @@ impl<'a> Iterator for ModeIterator<'a> {
|
||||
let mut mode: *mut ModeInformation = core::ptr::null_mut();
|
||||
let mut junk: usize = 0;
|
||||
|
||||
return match Status::from_num(unsafe {
|
||||
match Status::from(unsafe {
|
||||
(self.protocol.query_mode)(
|
||||
self.protocol as *const GraphicsOutputProtocol,
|
||||
self.number,
|
||||
@ -116,7 +116,7 @@ impl<'a> Iterator for ModeIterator<'a> {
|
||||
unsafe {mode.as_ref()}.map(|x| { (self.number - 1, x) })
|
||||
},
|
||||
_ => None
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,7 @@ impl SimpleFileSystemProtocol {
|
||||
pub fn open_volume(&mut self) -> Result<File, Status> {
|
||||
let mut root: *mut FileProtocol = null_mut();
|
||||
|
||||
match Status::from_num(unsafe {
|
||||
match Status::from(unsafe {
|
||||
(self.open_volume)(
|
||||
self,
|
||||
&mut root
|
||||
|
@ -25,9 +25,9 @@ impl Protocol for SimpleTextInputProtocol {
|
||||
|
||||
impl SimpleTextInputProtocol {
|
||||
pub fn reset(&mut self, extended_verification: bool) -> Result<(), Status> {
|
||||
return Status::from_num(unsafe {
|
||||
Status::from(unsafe {
|
||||
(self.reset)(self as *mut SimpleTextInputProtocol, extended_verification)
|
||||
}).to_result();
|
||||
}).into()
|
||||
}
|
||||
|
||||
pub fn read_key_blocking(&mut self) -> Result<InputKey, Status> {
|
||||
@ -44,7 +44,7 @@ impl SimpleTextInputProtocol {
|
||||
|
||||
pub fn read_key_stroke(&mut self) -> Result<InputKey, Status> {
|
||||
let mut stroke = InputKey { scan_code: 0, unicode_char: 0 };
|
||||
return match Status::from_num(unsafe {
|
||||
match Status::from(unsafe {
|
||||
(self.read_key_stroke)(
|
||||
self as *mut SimpleTextInputProtocol,
|
||||
(&mut stroke) as *mut InputKey
|
||||
@ -52,6 +52,6 @@ impl SimpleTextInputProtocol {
|
||||
}) {
|
||||
Status::Success => Ok(stroke),
|
||||
err => Err(err)
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ impl Protocol for SimpleTextOutputProtocol {
|
||||
impl SimpleTextOutputProtocol {
|
||||
// Not the original name provided by EFI, but whatever
|
||||
pub fn output_char16_string(&self, s: *const i16) -> Status {
|
||||
unsafe { Status::from_num((self.fn_output_string)(self, s)) }
|
||||
Status::from(unsafe { (self.fn_output_string)(self, s) })
|
||||
}
|
||||
|
||||
pub fn output_string(&self, s: &str) {
|
||||
|
@ -10,11 +10,11 @@ pub struct RuntimeServices {
|
||||
impl RuntimeServices {
|
||||
pub fn get_time(&self) -> Result<u64, Status> {
|
||||
let mut time = 0u64;
|
||||
return match Status::from_num(unsafe {
|
||||
match Status::from(unsafe {
|
||||
(self.get_time)((&mut time) as *mut u64, core::ptr::null_mut())
|
||||
}) {
|
||||
Status::Success => Ok(time),
|
||||
err => Err(err)
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user