28 requires(T t,
const T ct, uint32_t u32, uint64_t u64) {
30 { ct.IsValid() } -> std::same_as<bool>;
33 { ct.GetDeviceId() } -> std::same_as<uint32_t>;
34 { ct.GetVendorId() } -> std::same_as<uint32_t>;
37 { ct.GetStatus() } -> std::same_as<uint32_t>;
38 { t.SetStatus(u32) } -> std::same_as<void>;
41 { t.GetDeviceFeatures() } -> std::same_as<uint64_t>;
42 { t.SetDriverFeatures(u64) } -> std::same_as<void>;
45 { t.GetQueueNumMax(u32) } -> std::same_as<uint32_t>;
46 { t.SetQueueNum(u32, u32) } -> std::same_as<void>;
47 { t.SetQueueDesc(u32, u64) } -> std::same_as<void>;
48 { t.SetQueueAvail(u32, u64) } -> std::same_as<void>;
49 { t.SetQueueUsed(u32, u64) } -> std::same_as<void>;
50 { t.GetQueueReady(u32) } -> std::same_as<bool>;
51 { t.SetQueueReady(u32,
static_cast<bool>(
true)) } -> std::same_as<void>;
54 { t.NotifyQueue(u32) } -> std::same_as<void>;
57 { ct.GetInterruptStatus() } -> std::same_as<uint32_t>;
58 { t.AckInterrupt(u32) } -> std::same_as<void>;
61 { ct.ReadConfigU8(u32) } -> std::same_as<uint8_t>;
62 { ct.ReadConfigU16(u32) } -> std::same_as<uint16_t>;
63 { ct.ReadConfigU32(u32) } -> std::same_as<uint32_t>;
64 { ct.ReadConfigU64(u32) } -> std::same_as<uint64_t>;
65 { ct.GetConfigGeneration() } -> std::same_as<uint32_t>;