diff --git a/headers/private/virtio/virtio.h b/headers/private/virtio/virtio.h index 03792426b4..12691a1e52 100644 --- a/headers/private/virtio/virtio.h +++ b/headers/private/virtio/virtio.h @@ -117,6 +117,12 @@ typedef struct { size_t readVectorCount, size_t writtenVectorCount, virtio_callback_func callback, void *callbackCookie); + bool (*queue_is_full)(virtio_queue queue); + + bool (*queue_is_empty)(virtio_queue queue); + + uint16 (*queue_size)(virtio_queue queue); + } virtio_device_interface; diff --git a/src/add-ons/kernel/bus_managers/virtio/VirtioModule.cpp b/src/add-ons/kernel/bus_managers/virtio/VirtioModule.cpp index f2a284e96e..41b5860365 100644 --- a/src/add-ons/kernel/bus_managers/virtio/VirtioModule.cpp +++ b/src/add-ons/kernel/bus_managers/virtio/VirtioModule.cpp @@ -134,6 +134,31 @@ virtio_queue_request(virtio_queue cookie, const physical_entry *readEntry, } +bool +virtio_queue_is_full(virtio_queue cookie) +{ + VirtioQueue *queue = (VirtioQueue *)cookie; + return queue->IsFull(); +} + + +bool +virtio_queue_is_empty(virtio_queue cookie) +{ + VirtioQueue *queue = (VirtioQueue *)cookie; + return queue->IsEmpty(); +} + + +uint16 +virtio_queue_size(virtio_queue cookie) +{ + VirtioQueue *queue = (VirtioQueue *)cookie; + return queue->Size(); +} + + + // #pragma mark - @@ -222,7 +247,10 @@ virtio_device_interface virtio_device_module = { virtio_alloc_queues, virtio_setup_interrupt, virtio_queue_request, - virtio_queue_request_v + virtio_queue_request_v, + virtio_queue_is_full, + virtio_queue_is_empty, + virtio_queue_size }; virtio_for_controller_interface virtio_for_controller_module = { diff --git a/src/add-ons/kernel/bus_managers/virtio/VirtioPrivate.h b/src/add-ons/kernel/bus_managers/virtio/VirtioPrivate.h index a83eaf8058..4e0e0d132e 100644 --- a/src/add-ons/kernel/bus_managers/virtio/VirtioPrivate.h +++ b/src/add-ons/kernel/bus_managers/virtio/VirtioPrivate.h @@ -107,6 +107,7 @@ public: bool IsFull() const { return fRingFree == 0; } bool IsEmpty() const { return fRingFree == fRingSize; } + uint16 Size() const { return fRingSize; } VirtioDevice* Device() { return fDevice; }