From e506ebc05de54e3caa485d5b83a3b7e08dd597c9 Mon Sep 17 00:00:00 2001 From: Arnon Gilboa Date: Wed, 5 Jun 2013 09:06:13 +0300 Subject: add PA/VA funcs --- C++/bdd.cxx | 20 ++++++++++++++++++++ C++/bdd.hxx | 4 ++++ 2 files changed, 24 insertions(+) diff --git a/C++/bdd.cxx b/C++/bdd.cxx index 2b763d7..b203408 100644 --- a/C++/bdd.cxx +++ b/C++/bdd.cxx @@ -66,6 +66,26 @@ VOID BASIC_DISPLAY_DRIVER::wait_for_cursor_cmd() } } +QXLPHYSICAL BASIC_DISPLAY_DRIVER::PA(PVOID virt, UINT8 region_id) +{ + QxlMemRegionInfo *mem_region = &m_mem_regions[region_id]; + + return mem_region->high_bits | ((UINT64)virt - (UINT64)mem_region->mapped_start); +} + +UINT64 BASIC_DISPLAY_DRIVER::VA(QXLPHYSICAL paddr, UINT8 region_id) +{ + UINT64 virt; + QxlMemRegionInfo *mem_region = &m_mem_regions[region_id]; + + //TODO: ASSERT(pdev, (paddr >> (64 - pdev->slot_id_bits)) == slot_id); + //TODO: ASSERT(pdev, ((paddr << pdev->slot_id_bits) >> (64 - pdev->slot_gen_bits)) == p_slot->slot.generation); + + virt = paddr & m_va_slot_mask; + virt += (UINT64)mem_region->mapped_start; + + return virt; +} BASIC_DISPLAY_DRIVER::BASIC_DISPLAY_DRIVER(_In_ DEVICE_OBJECT* pPhysicalDeviceObject) : m_pPhysicalDevice(pPhysicalDeviceObject), m_MonitorPowerState(PowerDeviceD0), diff --git a/C++/bdd.hxx b/C++/bdd.hxx index 2086a49..7958fcb 100644 --- a/C++/bdd.hxx +++ b/C++/bdd.hxx @@ -456,6 +456,10 @@ private: VOID push_cursor_cmd(); VOID wait_for_display_cmd(); VOID wait_for_cursor_cmd(); + + _inline QXLPHYSICAL PA(PVOID virt, UINT8 region_id); + _inline UINT64 VA(QXLPHYSICAL paddr, UINT8 region_id); + }; // -- cgit v1.2.3