42 uint32_t address()
const {
49 Device* m_Device =
nullptr;
50 uint32_t m_Address = 0;
57 static PciBus& instance() {
71 uint32_t readConfigSpace(
Device* pDev, uint8_t offset);
80 uint32_t readConfigSpace(uint8_t bus, uint8_t device, uint8_t function, uint8_t offset);
88 void writeConfigSpace(
Device* pDev, uint8_t offset, uint32_t data);
98 void writeConfigSpace(uint8_t bus, uint8_t device, uint8_t function, uint8_t offset,
102 bool readConfig8(
Device* device, uint16_t offset, uint8_t& value);
103 bool readConfig16(
Device* device, uint16_t offset, uint16_t& value);
104 bool readConfig32(
Device* device, uint16_t offset, uint32_t& value);
105 bool writeConfig8(
Device* device, uint16_t offset, uint8_t value);
106 bool writeConfig16(
Device* device, uint16_t offset, uint16_t value);
107 bool writeConfig32(
Device* device, uint16_t offset, uint32_t value);
108 PciExtendedCapabilities::FindResult findExtendedCapability(
111 bool reserveLegacyInterrupt(uint8_t irq);
112 bool updateCommand(
Device* device, uint16_t clearBits, uint16_t setBits);
114 bool requireLegacyInterrupt =
true);
116 bool enableMsi(
Device* device, uint64_t address, uint16_t data);
117 bool disableMsi(
Device* device);
118 bool enableMsix(
Device* device, uint64_t address, uint32_t data);
119 bool enableMsixVectors(
Device* device, uint64_t address,
const uint32_t* data,
size_t count,
120 bool* touched =
nullptr,
const uint64_t* addresses =
nullptr);
121 bool setMsixVectorMask(
Device* device,
size_t index,
bool masked);
122 bool disableMsix(
Device* device);
125 bool translateAddress(uint64_t pciAddress, uint64_t bytes,
bool io, uint64_t& cpuPhysical);
127 bool busRange(uint8_t& first, uint8_t& last);
128 uint32_t interruptRoute(uint8_t bus, uint8_t device, uint8_t function, uint8_t pin);
130 bool assignBar(
Device* device, uint8_t index, uint32_t low, uint32_t high, uint32_t maskLow,
133 bool attachDmaRemapping(
Device* device);
134 bool hasDmaRemapping(
Device* device)
const;
136 bool attachIsolatedDma(
Device* device);
138 bool detachIsolatedDma(
Device* device);
140 bool isolatedDmaIdle(
Device* device)
const;
142 bool detachDisabledIsolatedDma(
Device* device);
143 bool hasDmaIsolation(
Device* device)
const;
145 bool mapDmaPage(
Device* device, physical_uintptr_t physical,
size_t bytes, DmaMapping& mapping);
146 void unmapDmaPage(
Device* device, uint16_t token);
157 uint8_t cache_line_size;
158 uint8_t latency_timer;
162 uint32_t cardbus_pointer;
163 uint16_t subsys_vendor;
165 uint32_t rom_base_address;
168 uint8_t interrupt_line;
169 uint8_t interrupt_pin;