4#include "pedigree/kernel/processor/MemoryRegion.h"
5#include "pedigree/kernel/processor/types.h"
7constexpr size_t PageBytes = 4096, RingEntries = 256, MaxTransfer = 65536;
8constexpr size_t MaxSlots = 16, MaxPorts = 32, MaxTransactions = 64;
9constexpr uint32_t Cycle = 1, Chain = 1U << 4, Ioc = 1U << 5, Isp = 1U << 2;
10constexpr uint32_t PortChanges = 0x00fe0000U;
16static_assert(
sizeof(
Trb) == 16);
17bool allocate(
MemoryRegion& region,
size_t pages,
bool contiguous =
true);
22 bool enqueue(
const Trb* entries,
size_t count, uint64_t* addresses);
23 void retire(
size_t count);
24 uint64_t address()
const {
27 uint64_t enqueuePointer()
const {
28 return address() + m_Tail *
sizeof(
Trb) + m_Cycle;
30 size_t wraps()
const {
Special memory entity in the kernel's virtual address space.
physical_uintptr_t physicalAddress() const