@@ -222,7 +222,7 @@ pub struct Cli {
222222 pub pd_ports : Option < ( u8 , u8 , u8 ) > ,
223223 pub help : bool ,
224224 pub info : bool ,
225- pub meinfo : bool ,
225+ pub meinfo : Option < Option < String > > ,
226226 pub flash_gpu_descriptor : Option < ( u8 , String ) > ,
227227 pub flash_gpu_descriptor_file : Option < String > ,
228228 pub dump_gpu_descriptor_file : Option < String > ,
@@ -1531,9 +1531,9 @@ pub fn run_with_args(args: &Cli, _allupdate: bool) -> i32 {
15311531 power:: get_and_print_pd_info ( & ec) ;
15321532 } else if args. info {
15331533 smbios_info ( ) ;
1534- } else if args. meinfo {
1534+ } else if let Some ( dump_path ) = & args. meinfo {
15351535 let verbose = args. verbosity . 0 >= log:: LevelFilter :: Warn ;
1536- me_info ( verbose) ;
1536+ me_info ( verbose, dump_path . as_deref ( ) ) ;
15371537 } else if args. pd_info {
15381538 print_pd_details ( & ec) ;
15391539 } else if let Some ( pd) = args. pd_reset {
@@ -2136,8 +2136,18 @@ fn smbios_info() {
21362136 }
21372137}
21382138
2139- fn me_info ( verbose : bool ) {
2140- let smbios = get_smbios ( ) ;
2139+ fn me_info ( verbose : bool , dump_path : Option < & str > ) {
2140+ let smbios = if let Some ( path) = dump_path {
2141+ match std:: fs:: read ( path) {
2142+ Ok ( data) => Some ( smbioslib:: SMBiosData :: from_vec_and_version ( data, None ) ) ,
2143+ Err ( e) => {
2144+ error ! ( "Failed to read SMBIOS dump file '{}': {}" , path, e) ;
2145+ return ;
2146+ }
2147+ }
2148+ } else {
2149+ get_smbios ( )
2150+ } ;
21412151 if smbios. is_none ( ) {
21422152 error ! ( "Failed to get SMBIOS data" ) ;
21432153 return ;
@@ -2147,20 +2157,23 @@ fn me_info(verbose: bool) {
21472157 // Track ME family for bootguard parsing
21482158 let mut me_family: Option < csme:: MeFamily > = None ;
21492159
2150- // Try to get ME version from sysfs first (Linux only)
2160+ // Try to get ME version from sysfs first (Linux only, live system only )
21512161 #[ cfg( target_os = "linux" ) ]
2152- if let Ok ( csme_info) = csme:: csme_from_sysfs ( ) {
2153- println ! ( "Intel ME Information (from sysfs)" ) ;
2154- println ! ( " Enabled: {}" , csme_info. enabled) ;
2155- println ! ( " Firmware Version: {}" , csme_info. main_ver) ;
2156- if csme_info. main_ver != csme_info. recovery_ver || csme_info. main_ver != csme_info. fitc_ver
2157- {
2158- println ! ( " Recovery Version: {}" , csme_info. recovery_ver) ;
2159- println ! ( " FITC Version: {}" , csme_info. fitc_ver) ;
2160- }
2161- let family = csme:: MeFamily :: from_version ( csme_info. main_ver . major ) ;
2162- println ! ( " ME Family: {}" , family) ;
2163- me_family = Some ( family) ;
2162+ if dump_path. is_none ( ) {
2163+ if let Ok ( csme_info) = csme:: csme_from_sysfs ( ) {
2164+ println ! ( "Intel ME Information (from sysfs)" ) ;
2165+ println ! ( " Enabled: {}" , csme_info. enabled) ;
2166+ println ! ( " Firmware Version: {}" , csme_info. main_ver) ;
2167+ if csme_info. main_ver != csme_info. recovery_ver
2168+ || csme_info. main_ver != csme_info. fitc_ver
2169+ {
2170+ println ! ( " Recovery Version: {}" , csme_info. recovery_ver) ;
2171+ println ! ( " FITC Version: {}" , csme_info. fitc_ver) ;
2172+ }
2173+ let family = csme:: MeFamily :: from_version ( csme_info. main_ver . major ) ;
2174+ println ! ( " ME Family: {}" , family) ;
2175+ me_family = Some ( family) ;
2176+ }
21642177 }
21652178
21662179 // Get ME version from SMBIOS type 0xDD (FVI)
0 commit comments