From c1e0007eea1dfcfc3182af2d10f05b4dd73863be Mon Sep 17 00:00:00 2001 From: David Karoly Date: Sat, 23 Oct 2021 09:48:26 +0200 Subject: [PATCH] virtio-mmio: add initialization for legacy mode (version 1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I4dcfca8cfabafad592b638b28215225b1cca35d2 Reviewed-on: https://review.haiku-os.org/c/haiku/+/4657 Reviewed-by: Jérôme Duval Tested-by: Commit checker robot --- .../busses/virtio/virtio_mmio/VirtioDevice.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/add-ons/kernel/busses/virtio/virtio_mmio/VirtioDevice.cpp b/src/add-ons/kernel/busses/virtio/virtio_mmio/VirtioDevice.cpp index 4e1c4bdd5c..7467279139 100644 --- a/src/add-ons/kernel/busses/virtio/virtio_mmio/VirtioDevice.cpp +++ b/src/add-ons/kernel/busses/virtio/virtio_mmio/VirtioDevice.cpp @@ -91,9 +91,11 @@ VirtioQueue::Init() phys_addr_t availPhys = (addr_t)fAvail - (addr_t)queueMem + pe.address; phys_addr_t usedPhys = (addr_t)fUsed - (addr_t)queueMem + pe.address; - SetLowHi(fDev->fRegs->queueDescLow, fDev->fRegs->queueDescHi, descsPhys); - SetLowHi(fDev->fRegs->queueAvailLow, fDev->fRegs->queueAvailHi, availPhys); - SetLowHi(fDev->fRegs->queueUsedLow, fDev->fRegs->queueUsedHi, usedPhys); + if (fDev->fRegs->version != 1) { + SetLowHi(fDev->fRegs->queueDescLow, fDev->fRegs->queueDescHi, descsPhys); + SetLowHi(fDev->fRegs->queueAvailLow, fDev->fRegs->queueAvailHi, availPhys); + SetLowHi(fDev->fRegs->queueUsedLow, fDev->fRegs->queueUsedHi, usedPhys); + } fFreeDescs.SetTo(new(std::nothrow) uint32[(fQueueLen + 31) / 32]); if (!fFreeDescs.IsSet()) @@ -104,7 +106,13 @@ VirtioQueue::Init() if (!fCookies.IsSet()) return B_NO_MEMORY; - fDev->fRegs->queueReady = 1; + if (fDev->fRegs->version == 1) { + uint32_t pfn = descsPhys / B_PAGE_SIZE; + fDev->fRegs->queueAlign = B_PAGE_SIZE; + fDev->fRegs->queuePfn = pfn; + } else { + fDev->fRegs->queueReady = 1; + } return B_OK; }