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

Function parse_mmio_config_address

pci/src/bus.rs:517–533  ·  view source on GitHub ↗

Parse the MMIO address offset to a (bus, device, function, register) tuple. See section 7.2.2 PCI Express Enhanced Configuration Access Mechanism (ECAM) from the Pci Express Base Specification Revision 5.0 Version 1.0.

(config_address: u32)

Source from the content-addressed store, hash-verified

515// See section 7.2.2 PCI Express Enhanced Configuration Access Mechanism (ECAM)
516// from the Pci Express Base Specification Revision 5.0 Version 1.0.
517fn parse_mmio_config_address(config_address: u32) -> (usize, usize, usize, usize) {
518 const BUS_NUMBER_OFFSET: usize = 20;
519 const BUS_NUMBER_MASK: u32 = 0x00ff;
520 const DEVICE_NUMBER_OFFSET: usize = 15;
521 const DEVICE_NUMBER_MASK: u32 = 0x1f;
522 const FUNCTION_NUMBER_OFFSET: usize = 12;
523 const FUNCTION_NUMBER_MASK: u32 = 0x07;
524 const REGISTER_NUMBER_OFFSET: usize = 2;
525 const REGISTER_NUMBER_MASK: u32 = 0x3ff;
526
527 (
528 shift_and_mask(config_address, BUS_NUMBER_OFFSET, BUS_NUMBER_MASK),
529 shift_and_mask(config_address, DEVICE_NUMBER_OFFSET, DEVICE_NUMBER_MASK),
530 shift_and_mask(config_address, FUNCTION_NUMBER_OFFSET, FUNCTION_NUMBER_MASK),
531 shift_and_mask(config_address, REGISTER_NUMBER_OFFSET, REGISTER_NUMBER_MASK),
532 )
533}
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) {

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