24 bool negotiate(uint64_t supportedFeatures, uint64_t requiredFeatures = 0);
25 bool setupQueue(uint16_t index,
Queue& queue);
26 irq_id_t registerInterrupt(
IrqHandler* handler);
31 void notify(uint16_t index);
33 uint64_t features()
const {
36 bool writeDeviceConfig8(uint16_t offset, uint8_t value);
37 bool readDeviceConfig8(uint16_t offset, uint8_t& value);
38 bool readDeviceConfig16(uint16_t offset, uint16_t& value);
39 bool readDeviceConfig32(uint16_t offset, uint32_t& value);
40 bool readDeviceConfig64(uint16_t offset, uint64_t& value);
44 static constexpr size_t MaxQueues = 64;
52 bool locateCapabilities();
53 bool readConfig(uint16_t offset,
unsigned width, uint64_t& value);
54 bool status(uint8_t bits);
56 bool isDmaActive()
const {
64 Capability m_DeviceConfig;
66 Queue* m_Queues[MaxQueues];
67 uint32_t m_NotifyOffsets[MaxQueues];
68 uint32_t m_NotifyMultiplier;