@@ -2,6 +2,7 @@ const std = @import("std");
2
2
const uefi = std .os .uefi ;
3
3
const Status = uefi .Status ;
4
4
const cc = uefi .cc ;
5
+ const Error = Status .Error ;
5
6
6
7
pub const BlockIo = extern struct {
7
8
const Self = @This ();
@@ -15,23 +16,48 @@ pub const BlockIo = extern struct {
15
16
_flush_blocks : * const fn (* BlockIo ) callconv (cc ) Status ,
16
17
17
18
/// Resets the block device hardware.
18
- pub fn reset (self : * Self , extended_verification : bool ) Status {
19
- return self ._reset (self , extended_verification );
19
+ pub fn reset (self : * Self , extended_verification : bool ) ! void {
20
+ switch (self ._reset (self , extended_verification )) {
21
+ .success = > {},
22
+ .device_error = > return Error .DeviceError ,
23
+ else = > | err | uefi .unexpectedError (err ),
24
+ }
20
25
}
21
26
22
27
/// Reads the number of requested blocks from the device.
23
- pub fn readBlocks (self : * Self , media_id : u32 , lba : u64 , buffer_size : usize , buf : [* ]u8 ) Status {
24
- return self ._read_blocks (self , media_id , lba , buffer_size , buf );
28
+ pub fn readBlocks (self : * Self , media_id : u32 , lba : u64 , buf : []u8 ) ! void {
29
+ switch (self ._read_blocks (self , media_id , lba , buf .len , buf .ptr )) {
30
+ .success = > {},
31
+ .device_error = > Error .DeviceError ,
32
+ .no_media = > Error .NoMedia ,
33
+ .bad_buffer_size = > Error .BadBufferSize ,
34
+ .invalid_parameter = > Error .InvalidParameter ,
35
+ else = > | err | uefi .unexpectedError (err ),
36
+ }
25
37
}
26
38
27
39
/// Writes a specified number of blocks to the device.
28
- pub fn writeBlocks (self : * Self , media_id : u32 , lba : u64 , buffer_size : usize , buf : [* ]u8 ) Status {
29
- return self ._write_blocks (self , media_id , lba , buffer_size , buf );
40
+ pub fn writeBlocks (self : * Self , media_id : u32 , lba : u64 , buf : []const u8 ) ! void {
41
+ switch (self ._write_blocks (self , media_id , lba , buf .len , buf .ptr )) {
42
+ .success = > {},
43
+ .write_protected = > Error .WriteProtected ,
44
+ .no_media = > Error .NoMedia ,
45
+ .media_changed = > Error .MediaChanged ,
46
+ .device_error = > Error .DeviceError ,
47
+ .bad_buffer_size = > Error .BadBufferSize ,
48
+ .invalid_parameter = > Error .InvalidParameter ,
49
+ else = > | err | uefi .unexpectedError (err ),
50
+ }
30
51
}
31
52
32
53
/// Flushes all modified data to a physical block device.
33
- pub fn flushBlocks (self : * Self ) Status {
34
- return self ._flush_blocks (self );
54
+ pub fn flushBlocks (self : * Self ) ! void {
55
+ switch (self ._flush_blocks (self )) {
56
+ .success = > {},
57
+ .device_error = > Error .DeviceError ,
58
+ .no_media = > Error .NoMedia ,
59
+ else = > | err | uefi .unexpectedError (err ),
60
+ }
35
61
}
36
62
37
63
pub const guid align (8 ) = uefi.Guid {
0 commit comments