@@ -2,10 +2,12 @@ use smoltcp::phy::{Device, DeviceCapabilities, Medium, RxToken, TxToken};
22use smoltcp:: time:: Instant ;
33use uefi:: boot:: ScopedProtocol ;
44use uefi:: proto:: network:: snp:: { ReceiveFlags , SimpleNetwork } ;
5- use uefi:: Status ;
5+ use uefi:: { ResultExt , Status } ;
66
77use super :: ETH_PACKET_SIZE ;
88use crate :: os:: send_wrapper:: SendWrapper ;
9+ use crate :: os:: { input, ui} ;
10+ use crate :: power_control;
911
1012type Snp = SendWrapper < ScopedProtocol < SimpleNetwork > > ;
1113
@@ -68,7 +70,17 @@ impl TxToken for SnpTxToken<'_> {
6870 snp. transmit ( 0 , payload, None , None , None )
6971 . expect ( "Failed to transmit frame" ) ;
7072 // Wait until sending is complete.
71- while snp. get_recycled_transmit_buffer_status ( ) . unwrap ( ) . is_none ( ) { }
73+ while snp. get_recycled_transmit_buffer_status ( ) . unwrap ( ) . is_none ( ) {
74+ if snp. mode ( ) . media_present . 0 == 0 {
75+ let err = uefi:: boot:: set_watchdog_timer ( 0 , 0x10000 , None ) ;
76+ if let Err ( err) = err && err. status ( ) != Status :: UNSUPPORTED {
77+ log:: error!( "Error disabling watchdog: {err:?}" ) ;
78+ }
79+ ui:: red_screen ( ) ;
80+ input:: wait_for_key ( ) . expect ( "Failed to wait for input" ) ;
81+ power_control:: reset ( ) ;
82+ }
83+ }
7284 ret
7385 }
7486}
0 commit comments