[PATCH qxl-wddm-dod 5/8] Compute dynamically slot_id in PA and VA functions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This make easier to change allocation of memory using different
memory Bars.

Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx>
---
 qxldod/QxlDod.cpp | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/qxldod/QxlDod.cpp b/qxldod/QxlDod.cpp
index 2fa925d..28bc35c 100755
--- a/qxldod/QxlDod.cpp
+++ b/qxldod/QxlDod.cpp
@@ -3580,23 +3580,25 @@ void QxlDevice::DestroyPrimarySurface(void)
     DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__));
 }
 
-_inline QXLPHYSICAL QxlDevice::PA(PVOID virt, UINT8 slot_id)
+_inline QXLPHYSICAL QxlDevice::PA(PVOID virt, UINT8)
 {
     PAGED_CODE();
     DbgPrint(TRACE_LEVEL_VERBOSE, ("<--> %s\n", __FUNCTION__));
-    MemSlot *pSlot = &m_MemSlots[slot_id];
+
+    const MemSlot *pSlot = m_MemSlots;
+    if (virt < pSlot->start_virt_addr || virt > pSlot->last_virt_addr)
+        ++pSlot;
     return pSlot->high_bits | ((UINT8*)virt - pSlot->start_virt_addr);
 }
 
-_inline UINT8 *QxlDevice::VA(QXLPHYSICAL paddr, UINT8 slot_id)
+_inline UINT8 *QxlDevice::VA(QXLPHYSICAL paddr, UINT8)
 {
     PAGED_CODE();
-    UINT64 virt;
-    MemSlot *pSlot = &m_MemSlots[slot_id];
-
     DbgPrint(TRACE_LEVEL_VERBOSE, ("---> %s\n", __FUNCTION__));
-    virt = paddr & m_VaSlotMask;
-    return pSlot->start_virt_addr + virt;
+
+    UINT8 slot_id = UINT8(paddr >> (64 - m_SlotIdBits)) - m_RomHdr->slots_start;
+    const MemSlot *pSlot = &m_MemSlots[slot_id & 1];
+    return pSlot->start_virt_addr + (paddr & m_VaSlotMask);
 }
 
 void QxlDevice::SetupHWSlot(UINT8 Idx, MemSlot *pSlot)
-- 
2.9.3

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/spice-devel




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]