1use libdrm_amdgpu_sys::*;
2use std::fs::File;
3use std::io;
4
5fn dump(image: &[u8], vbios_name: String) -> io::Result<()> {
6 use std::io::Write;
7
8 let path = format!("./{vbios_name}.bin");
9 let mut f = File::create(&path)?;
10
11 f.write_all(&image)?;
12
13 println!("\nDumped to {path}");
14 Ok(())
15}
16
17fn main() {
18 let libdrm_amdgpu = LibDrmAmdgpu::new().unwrap();
19 let device_path = std::env::var("AMDGPU_PATH").unwrap_or("/dev/dri/renderD128".to_string());
20 let (amdgpu_dev, _, _) = {
21 use std::os::fd::IntoRawFd;
22
23 let f = File::open(device_path).unwrap();
24
25 libdrm_amdgpu.init_device_handle(f.into_raw_fd()).unwrap()
26 };
27
28 if let Ok(vbios) = amdgpu_dev.get_vbios_info() {
29 println!("\nVBIOS info:");
30 println!("name: [{}]", vbios.name);
31 println!("pn: [{}]", vbios.pn);
32 println!("ver: [{}]", vbios.ver);
33 println!("date: [{}]", vbios.date);
34 println!("vbios size: {}", vbios.size);
35
36 let args: Vec<String> = std::env::args().collect();
37
38 if args.contains(&"-d".to_string()) || args.contains(&"--dump".to_string()) {
39 if let Ok(vbios_image) = amdgpu_dev.get_vbios_image() {
41 let name = vbios.name.replace(' ', "_").replace('/', "_");
42 dump(&vbios_image, name).unwrap();
43 }
44 } else {
45 println!("If you need a VBIOS image, add \"-d\" or \"--dump\" as an argument and run.");
46 }
47 }
48}