PCI: revision id, programming interface byte and device ID
This commit is contained in:
parent
86b0ac95aa
commit
b8f0074aa0
|
@ -32,6 +32,8 @@ pub struct PciDeviceInfo {
|
||||||
pub bus: u8,
|
pub bus: u8,
|
||||||
pub device_id: DeviceID,
|
pub device_id: DeviceID,
|
||||||
pub full_class: PciFullClass,
|
pub full_class: PciFullClass,
|
||||||
|
pub prog_if: u8,
|
||||||
|
pub rev_id: u8,
|
||||||
pub header_type: u8,
|
pub header_type: u8,
|
||||||
pub bars: [u32; 6],
|
pub bars: [u32; 6],
|
||||||
pub supported_fns: [bool; 8],
|
pub supported_fns: [bool; 8],
|
||||||
|
@ -51,13 +53,16 @@ impl PciDeviceInfo {
|
||||||
impl Display for PciDeviceInfo {
|
impl Display for PciDeviceInfo {
|
||||||
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error> {
|
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error> {
|
||||||
let vendor_name = &self.device_id.vendor;
|
let vendor_name = &self.device_id.vendor;
|
||||||
|
let device_id = &self.device_id.id;
|
||||||
writeln!(
|
writeln!(
|
||||||
f,
|
f,
|
||||||
"Device {} | Bus {:X} | Vendor: {}",
|
"Device: {} | Bus: 0x{:X} | Vendor: {} | Device ID: 0x{:X}",
|
||||||
self.device, self.bus, vendor_name
|
self.device, self.bus, vendor_name, device_id,
|
||||||
)?;
|
)?;
|
||||||
writeln!(f, "{}", self.full_class)?;
|
writeln!(f, "{}", self.full_class)?;
|
||||||
writeln!(f, " Header type: {:X}", self.header_type)?;
|
writeln!(f, " Revision ID: {}", self.rev_id)?;
|
||||||
|
writeln!(f, " Prog IF: 0b{:b}", self.prog_if)?;
|
||||||
|
writeln!(f, " Header type: 0x{:X}", self.header_type)?;
|
||||||
write!(f, " Supported functions: 0")?;
|
write!(f, " Supported functions: 0")?;
|
||||||
for (i, b) in self.supported_fns.iter().enumerate().skip(1) {
|
for (i, b) in self.supported_fns.iter().enumerate().skip(1) {
|
||||||
if *b {
|
if *b {
|
||||||
|
@ -110,9 +115,11 @@ fn check_device(bus: u8, device: u8) -> Option<PciDeviceInfo> {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
let class = unsafe { pci_config_read(bus, device, 0, 0x8) };
|
let reg2 = unsafe { pci_config_read(bus, device, 0, 0x8) };
|
||||||
let class = (class >> 16) & 0x0000FFFF;
|
let rev_id = (reg2 & 0x000000FF) as u8;
|
||||||
let pci_class = PciFullClass::from_u16(class as u16);
|
let prog_if = ((reg2 >> 8) & 0x000000FF) as u8;
|
||||||
|
let class = ((reg2 >> 16) & 0x0000FFFF) as u16;
|
||||||
|
let pci_class = PciFullClass::from_u16(class);
|
||||||
let header_type = get_header_type(bus, device, function);
|
let header_type = get_header_type(bus, device, function);
|
||||||
|
|
||||||
let mut supported_fns = [true, false, false, false, false, false, false, false];
|
let mut supported_fns = [true, false, false, false, false, false, false, false];
|
||||||
|
@ -148,6 +155,8 @@ fn check_device(bus: u8, device: u8) -> Option<PciDeviceInfo> {
|
||||||
},
|
},
|
||||||
// vendor_id,
|
// vendor_id,
|
||||||
full_class: pci_class,
|
full_class: pci_class,
|
||||||
|
prog_if,
|
||||||
|
rev_id,
|
||||||
header_type,
|
header_type,
|
||||||
bars,
|
bars,
|
||||||
supported_fns,
|
supported_fns,
|
||||||
|
|
Loading…
Reference in a new issue