64 struct netif* interface()
const {
68 explicit operator bool()
const {
69 return m_Device !=
nullptr;
81 struct netif* m_Interface;
90 return *__atomic_load_n(&stack, __ATOMIC_ACQUIRE);
94 return __atomic_load_n(&stack, __ATOMIC_ACQUIRE);
98 void receive(
size_t nBytes, uintptr_t packet,
Network* pCard, uint32_t offset);
101 void registerDevice(
Network* pDevice);
110 void deRegisterDevice(
Network* pDevice);
117#if HOSTED && PEDIGREE_HOSTED_SMOKE_TESTS
118 enum class HostedReceiveEvent {
126 using HostedReceiveHook = void (*)(HostedReceiveEvent event, uintptr_t buffer,
Network* card,
129 static void setHostedReceiveHook(HostedReceiveHook hook);
130 static size_t getHostedRegistrationGeneration(
Network* card);
131 static size_t getHostedReceiveRequestCapacity();
135 struct DeviceRegistration;
139#if HOSTED && PEDIGREE_HOSTED_SMOKE_TESTS
140 static HostedReceiveHook m_HostedReceiveHook;
143 virtual uint64_t
executeRequest(uint64_t p1, uint64_t p2, uint64_t p3, uint64_t p4, uint64_t p5,
144 uint64_t p6, uint64_t p7, uint64_t p8);
148 static void cancelReceive(uintptr_t buffer,
Network* card,
size_t generation);
150 static constexpr size_t ReceiveRequestCapacity = 256;
158#if THREADS || UTILITY_LINUX
virtual uint64_t executeRequest(uint64_t p1, uint64_t p2, uint64_t p3, uint64_t p4, uint64_t p5, uint64_t p6, uint64_t p7, uint64_t p8)=0