vbios_parser/
vbios_parser.rs1use libdrm_amdgpu_sys::*;
2use AMDGPU::VBIOS::VbiosParser;
3use std::fs::File;
4use std::io;
5
6fn main() {
7 let libdrm_amdgpu = LibDrmAmdgpu::new().unwrap();
8 let device_path = std::env::var("AMDGPU_PATH").unwrap_or("/dev/dri/renderD128".to_string());
9 let (amdgpu_dev, _, _) = {
10 use std::os::fd::IntoRawFd;
11
12 let f = File::open(device_path).unwrap();
13
14 libdrm_amdgpu.init_device_handle(f.into_raw_fd()).unwrap()
15 };
16
17 let Ok(vbios_image) = amdgpu_dev.get_vbios_image() else { return };
18
19 let vbios_parser = VbiosParser::new(vbios_image);
20
21 if !vbios_parser.valid_vbios() || !vbios_parser.check_length() {
22 panic!();
23 }
24
25 if let Some(name) = vbios_parser.get_vbios_name() {
26 println!("name: {name:?}");
27 }
28
29 let rom_header = vbios_parser.get_atom_rom_header().unwrap();
30 println!("{rom_header:#X?}");
31
32 let data_table = vbios_parser.get_atom_data_table(&rom_header).unwrap();
33 println!("{data_table:#X?}");
34
35 if let Some(h) = vbios_parser.get_atom_firmware_info_header(&data_table) {
36 println!("{h:#?}");
37 match (h.format_revision, h.content_revision) {
38 (3, 5) => {
39 let firmware_info = vbios_parser.get_atom_firmware_info_v3_5(&data_table).unwrap();
40 println!("firmwareinfo: {firmware_info:#?}");
41 },
42 _ => {
43 let firmware_info = vbios_parser.get_atom_firmware_info(&data_table).unwrap();
44 println!("firmwareinfo: {firmware_info:#?}");
45 },
46 }
47 }
48}