MCPcopy Create free account
hub / github.com/cloud-hypervisor/cloud-hypervisor / parse_io_config_address

Function parse_io_config_address

pci/src/bus.rs:536–552  ·  view source on GitHub ↗

Parse the CONFIG_ADDRESS register to a (bus, device, function, register) tuple.

(config_address: u32)

Source from the content-addressed store, hash-verified

534
535// Parse the CONFIG_ADDRESS register to a (bus, device, function, register) tuple.
536fn parse_io_config_address(config_address: u32) -> (usize, usize, usize, usize) {
537 const BUS_NUMBER_OFFSET: usize = 16;
538 const BUS_NUMBER_MASK: u32 = 0x00ff;
539 const DEVICE_NUMBER_OFFSET: usize = 11;
540 const DEVICE_NUMBER_MASK: u32 = 0x1f;
541 const FUNCTION_NUMBER_OFFSET: usize = 8;
542 const FUNCTION_NUMBER_MASK: u32 = 0x07;
543 const REGISTER_NUMBER_OFFSET: usize = 2;
544 const REGISTER_NUMBER_MASK: u32 = 0x3f;
545
546 (
547 shift_and_mask(config_address, BUS_NUMBER_OFFSET, BUS_NUMBER_MASK),
548 shift_and_mask(config_address, DEVICE_NUMBER_OFFSET, DEVICE_NUMBER_MASK),
549 shift_and_mask(config_address, FUNCTION_NUMBER_OFFSET, FUNCTION_NUMBER_MASK),
550 shift_and_mask(config_address, REGISTER_NUMBER_OFFSET, REGISTER_NUMBER_MASK),
551 )
552}
553
554#[cfg(test)]
555mod unit_tests {

Callers 2

config_space_readMethod · 0.85
config_space_writeMethod · 0.85

Calls 1

shift_and_maskFunction · 0.85

Tested by

no test coverage detected