@@ -12,9 +12,10 @@ use core::ffi::c_void;
12
12
use core:: fmt:: { self , Debug , Display , Formatter } ;
13
13
use core:: iter:: from_fn;
14
14
use core:: mem:: MaybeUninit ;
15
- use core:: ptr:: { null, null_mut} ;
15
+ use core:: ptr:: { self , null, null_mut} ;
16
16
use ptr_meta:: Pointee ;
17
17
use uefi_raw:: protocol:: network:: pxe:: PxeBaseCodeTftpOpcode ;
18
+ use uefi_raw:: Boolean ;
18
19
19
20
pub use uefi_raw:: protocol:: network:: pxe:: {
20
21
PxeBaseCodeBootType as BootstrapType , PxeBaseCodeIpFilterFlags as IpFilters ,
@@ -28,27 +29,27 @@ pub use uefi_raw::protocol::network::pxe::{
28
29
#[ allow( clippy:: type_complexity) ]
29
30
pub struct BaseCode {
30
31
revision : u64 ,
31
- start : unsafe extern "efiapi" fn ( this : & Self , use_ipv6 : bool ) -> Status ,
32
+ start : unsafe extern "efiapi" fn ( this : & Self , use_ipv6 : Boolean ) -> Status ,
32
33
stop : unsafe extern "efiapi" fn ( this : & Self ) -> Status ,
33
- dhcp : unsafe extern "efiapi" fn ( this : & Self , sort_offers : bool ) -> Status ,
34
+ dhcp : unsafe extern "efiapi" fn ( this : & Self , sort_offers : Boolean ) -> Status ,
34
35
discover : unsafe extern "efiapi" fn (
35
36
this : & Self ,
36
37
ty : BootstrapType ,
37
38
layer : & mut u16 ,
38
- use_bis : bool ,
39
+ use_bis : Boolean ,
39
40
info : * const FfiDiscoverInfo ,
40
41
) -> Status ,
41
42
mtftp : unsafe extern "efiapi" fn (
42
43
this : & Self ,
43
44
operation : PxeBaseCodeTftpOpcode ,
44
45
buffer : * mut c_void ,
45
- overwrite : bool ,
46
+ overwrite : Boolean ,
46
47
buffer_size : & mut u64 ,
47
48
block_size : Option < & usize > ,
48
49
server_ip : & IpAddress ,
49
50
filename : * const Char8 ,
50
51
info : Option < & MtftpInfo > ,
51
- dont_use_buffer : bool ,
52
+ dont_use_buffer : Boolean ,
52
53
) -> Status ,
53
54
udp_write : unsafe extern "efiapi" fn (
54
55
this : & Self ,
@@ -83,11 +84,11 @@ pub struct BaseCode {
83
84
) -> Status ,
84
85
set_parameters : unsafe extern "efiapi" fn (
85
86
this : & Self ,
86
- new_auto_arp : Option < & bool > ,
87
- new_send_guid : Option < & bool > ,
87
+ new_auto_arp : * const Boolean ,
88
+ new_send_guid : * const Boolean ,
88
89
new_ttl : Option < & u8 > ,
89
90
new_tos : Option < & u8 > ,
90
- new_make_callback : Option < & bool > ,
91
+ new_make_callback : * const Boolean ,
91
92
) -> Status ,
92
93
set_station_ip : unsafe extern "efiapi" fn (
93
94
this : & Self ,
@@ -96,12 +97,12 @@ pub struct BaseCode {
96
97
) -> Status ,
97
98
set_packets : unsafe extern "efiapi" fn (
98
99
this : & Self ,
99
- new_dhcp_discover_valid : Option < & bool > ,
100
- new_dhcp_ack_received : Option < & bool > ,
101
- new_proxy_offer_received : Option < & bool > ,
102
- new_pxe_discover_valid : Option < & bool > ,
103
- new_pxe_reply_received : Option < & bool > ,
104
- new_pxe_bis_reply_received : Option < & bool > ,
100
+ new_dhcp_discover_valid : * const Boolean ,
101
+ new_dhcp_ack_received : * const Boolean ,
102
+ new_proxy_offer_received : * const Boolean ,
103
+ new_pxe_discover_valid : * const Boolean ,
104
+ new_pxe_reply_received : * const Boolean ,
105
+ new_pxe_bis_reply_received : * const Boolean ,
105
106
new_dhcp_discover : Option < & Packet > ,
106
107
new_dhcp_ack : Option < & Packet > ,
107
108
new_proxy_offer : Option < & Packet > ,
@@ -115,7 +116,7 @@ pub struct BaseCode {
115
116
impl BaseCode {
116
117
/// Enables the use of the PXE Base Code Protocol functions.
117
118
pub fn start ( & mut self , use_ipv6 : bool ) -> Result {
118
- unsafe { ( self . start ) ( self , use_ipv6) } . to_result ( )
119
+ unsafe { ( self . start ) ( self , use_ipv6. into ( ) ) } . to_result ( )
119
120
}
120
121
121
122
/// Disables the use of the PXE Base Code Protocol functions.
@@ -126,7 +127,7 @@ impl BaseCode {
126
127
/// Attempts to complete a DHCPv4 D.O.R.A. (discover / offer / request /
127
128
/// acknowledge) or DHCPv6 S.A.R.R (solicit / advertise / request / reply) sequence.
128
129
pub fn dhcp ( & mut self , sort_offers : bool ) -> Result {
129
- unsafe { ( self . dhcp ) ( self , sort_offers) } . to_result ( )
130
+ unsafe { ( self . dhcp ) ( self , sort_offers. into ( ) ) } . to_result ( )
130
131
}
131
132
132
133
/// Attempts to complete the PXE Boot Server and/or boot image discovery
@@ -145,7 +146,7 @@ impl BaseCode {
145
146
} )
146
147
. unwrap_or ( null ( ) ) ;
147
148
148
- unsafe { ( self . discover ) ( self , ty, layer, use_bis, info) } . to_result ( )
149
+ unsafe { ( self . discover ) ( self , ty, layer, use_bis. into ( ) , info) } . to_result ( )
149
150
}
150
151
151
152
/// Returns the size of a file located on a TFTP server.
@@ -157,13 +158,13 @@ impl BaseCode {
157
158
self ,
158
159
PxeBaseCodeTftpOpcode :: TFTP_GET_FILE_SIZE ,
159
160
null_mut ( ) ,
160
- false ,
161
+ Boolean :: FALSE ,
161
162
& mut buffer_size,
162
163
None ,
163
164
server_ip,
164
165
filename. as_ptr ( ) ,
165
166
None ,
166
- false ,
167
+ Boolean :: FALSE ,
167
168
)
168
169
} ;
169
170
status. to_result_with_val ( || buffer_size)
@@ -178,17 +179,17 @@ impl BaseCode {
178
179
) -> Result < u64 > {
179
180
let ( buffer_ptr, mut buffer_size, dont_use_buffer) = if let Some ( buffer) = buffer {
180
181
let buffer_size = u64:: try_from ( buffer. len ( ) ) . unwrap ( ) ;
181
- ( buffer. as_mut_ptr ( ) . cast ( ) , buffer_size, false )
182
+ ( buffer. as_mut_ptr ( ) . cast ( ) , buffer_size, Boolean :: FALSE )
182
183
} else {
183
- ( null_mut ( ) , 0 , true )
184
+ ( null_mut ( ) , 0 , Boolean :: TRUE )
184
185
} ;
185
186
186
187
let status = unsafe {
187
188
( self . mtftp ) (
188
189
self ,
189
190
PxeBaseCodeTftpOpcode :: TFTP_READ_FILE ,
190
191
buffer_ptr,
191
- false ,
192
+ Boolean :: FALSE ,
192
193
& mut buffer_size,
193
194
None ,
194
195
server_ip,
@@ -216,13 +217,13 @@ impl BaseCode {
216
217
self ,
217
218
PxeBaseCodeTftpOpcode :: TFTP_WRITE_FILE ,
218
219
buffer_ptr,
219
- overwrite,
220
+ overwrite. into ( ) ,
220
221
& mut buffer_size,
221
222
None ,
222
223
server_ip,
223
224
filename. as_ptr ( ) ,
224
225
None ,
225
- false ,
226
+ Boolean :: FALSE ,
226
227
)
227
228
}
228
229
. to_result ( )
@@ -244,13 +245,13 @@ impl BaseCode {
244
245
self ,
245
246
PxeBaseCodeTftpOpcode :: TFTP_READ_DIRECTORY ,
246
247
buffer_ptr,
247
- false ,
248
+ Boolean :: FALSE ,
248
249
& mut buffer_size,
249
250
None ,
250
251
server_ip,
251
252
directory_name. as_ptr ( ) ,
252
253
None ,
253
- false ,
254
+ Boolean :: FALSE ,
254
255
)
255
256
} ;
256
257
status. to_result ( ) ?;
@@ -317,13 +318,13 @@ impl BaseCode {
317
318
self ,
318
319
PxeBaseCodeTftpOpcode :: MTFTP_GET_FILE_SIZE ,
319
320
null_mut ( ) ,
320
- false ,
321
+ Boolean :: FALSE ,
321
322
& mut buffer_size,
322
323
None ,
323
324
server_ip,
324
325
filename. as_ptr ( ) ,
325
326
Some ( info) ,
326
- false ,
327
+ Boolean :: FALSE ,
327
328
)
328
329
} ;
329
330
status. to_result_with_val ( || buffer_size)
@@ -339,17 +340,17 @@ impl BaseCode {
339
340
) -> Result < u64 > {
340
341
let ( buffer_ptr, mut buffer_size, dont_use_buffer) = if let Some ( buffer) = buffer {
341
342
let buffer_size = u64:: try_from ( buffer. len ( ) ) . unwrap ( ) ;
342
- ( buffer. as_mut_ptr ( ) . cast ( ) , buffer_size, false )
343
+ ( buffer. as_mut_ptr ( ) . cast ( ) , buffer_size, Boolean :: FALSE )
343
344
} else {
344
- ( null_mut ( ) , 0 , true )
345
+ ( null_mut ( ) , 0 , Boolean :: TRUE )
345
346
} ;
346
347
347
348
let status = unsafe {
348
349
( self . mtftp ) (
349
350
self ,
350
351
PxeBaseCodeTftpOpcode :: MTFTP_READ_FILE ,
351
352
buffer_ptr,
352
- false ,
353
+ Boolean :: FALSE ,
353
354
& mut buffer_size,
354
355
None ,
355
356
server_ip,
@@ -377,13 +378,13 @@ impl BaseCode {
377
378
self ,
378
379
PxeBaseCodeTftpOpcode :: MTFTP_READ_DIRECTORY ,
379
380
buffer_ptr,
380
- false ,
381
+ Boolean :: FALSE ,
381
382
& mut buffer_size,
382
383
None ,
383
384
server_ip,
384
385
null_mut ( ) ,
385
386
Some ( info) ,
386
- false ,
387
+ Boolean :: FALSE ,
387
388
)
388
389
} ;
389
390
status. to_result ( ) ?;
@@ -555,11 +556,11 @@ impl BaseCode {
555
556
unsafe {
556
557
( self . set_parameters ) (
557
558
self ,
558
- new_auto_arp . as_ref ( ) ,
559
- new_send_guid . as_ref ( ) ,
559
+ opt_bool_to_ptr ( & new_auto_arp ) ,
560
+ opt_bool_to_ptr ( & new_send_guid ) ,
560
561
new_ttl. as_ref ( ) ,
561
562
new_tos. as_ref ( ) ,
562
- new_make_callback . as_ref ( ) ,
563
+ opt_bool_to_ptr ( & new_make_callback ) ,
563
564
)
564
565
}
565
566
. to_result ( )
@@ -595,12 +596,12 @@ impl BaseCode {
595
596
unsafe {
596
597
( self . set_packets ) (
597
598
self ,
598
- new_dhcp_discover_valid . as_ref ( ) ,
599
- new_dhcp_ack_received . as_ref ( ) ,
600
- new_proxy_offer_received . as_ref ( ) ,
601
- new_pxe_discover_valid . as_ref ( ) ,
602
- new_pxe_reply_received . as_ref ( ) ,
603
- new_pxe_bis_reply_received . as_ref ( ) ,
599
+ opt_bool_to_ptr ( & new_dhcp_discover_valid ) ,
600
+ opt_bool_to_ptr ( & new_dhcp_ack_received ) ,
601
+ opt_bool_to_ptr ( & new_proxy_offer_received ) ,
602
+ opt_bool_to_ptr ( & new_pxe_discover_valid ) ,
603
+ opt_bool_to_ptr ( & new_pxe_reply_received ) ,
604
+ opt_bool_to_ptr ( & new_pxe_bis_reply_received ) ,
604
605
new_dhcp_discover,
605
606
new_dhcp_ack,
606
607
new_proxy_offer,
@@ -619,6 +620,15 @@ impl BaseCode {
619
620
}
620
621
}
621
622
623
+ /// Convert an `&Option<bool>` to a `*const Boolean`.
624
+ ///
625
+ /// This is always a valid conversion; `bool` is an 8-bit `0` or `1`.
626
+ fn opt_bool_to_ptr ( arg : & Option < bool > ) -> * const Boolean {
627
+ arg. as_ref ( )
628
+ . map ( |arg| ptr:: from_ref ( arg) . cast :: < Boolean > ( ) )
629
+ . unwrap_or_else ( null)
630
+ }
631
+
622
632
opaque_type ! {
623
633
/// Opaque type that should be used to represent a pointer to a [`DiscoverInfo`] in
624
634
/// foreign function interfaces. This type produces a thin pointer, unlike
0 commit comments