summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Levy <alevy@redhat.com>2011-04-18 18:18:51 +0300
committerAlon Levy <alevy@redhat.com>2011-04-18 18:18:51 +0300
commit74636e29583c0eb4cc0f0ecc955f66c819c6f4bc (patch)
treea9bdef1d9d57e24ec3af65fa1c7f375b5305516f
parent2f4d7c040bb0ba37cf5a069b98273bc72ae6f10e (diff)
add InitDeviceMemoryResources and ResetCache
-rw-r--r--display/driver.c7
-rw-r--r--display/res.c59
-rw-r--r--display/res.h2
3 files changed, 38 insertions, 30 deletions
diff --git a/display/driver.c b/display/driver.c
index ff51157..20af0c8 100644
--- a/display/driver.c
+++ b/display/driver.c
@@ -923,9 +923,10 @@ BOOL DrvAssertMode(DHPDEV in_pdev, BOOL enable)
pdev->assert_mode = enable;
if (enable) {
InitResources(pdev);
- DEBUG_PRINT((pdev, 0, "%s: before InitMspaces\n", __FUNCTION__));
- InitMspaces(pdev);
- DEBUG_PRINT((pdev, 0, "%s: after InitMspaces\n", __FUNCTION__));
+ DEBUG_PRINT((pdev, 0, "%s: before InitDeviceMemoryResources\n", __FUNCTION__));
+ InitDeviceMemoryResources(pdev);
+ // Cache goes bye bye, reset it.
+ DEBUG_PRINT((pdev, 0, "%s: after InitDeviceMemoryResources\n", __FUNCTION__));
if (EngDeviceIoControl(pdev->driver, IOCTL_QXL_CREATE_MAIN_MEMSLOT, NULL, 0, NULL, 0, &n)) {
DEBUG_PRINT((pdev, 0, "%s: create main slot failed\n", __FUNCTION__));
return FALSE;
diff --git a/display/res.c b/display/res.c
index 9bf7e81..b0e8481 100644
--- a/display/res.c
+++ b/display/res.c
@@ -436,14 +436,41 @@ static void InitMspace(DevRes *res, UINT32 mspace_type, UINT8 *io_pages_virt, si
res->mspaces[mspace_type].mspace_end = io_pages_virt + capacity;
}
-/* Initializing Mspaces happens at:
- * startup
- * after resume from sleep
- * - whenever the devram and vram are cleared. */
-void InitMspaces(PDev *pdev)
+static void ResetCache(PDev *pdev)
+{
+ int i;
+
+ RtlZeroMemory(pdev->Res->image_key_lookup,
+ sizeof(pdev->Res->image_key_lookup));
+ RtlZeroMemory(pdev->Res->cache_image_pool,
+ sizeof(pdev->Res->cache_image_pool));
+ RingInit(&pdev->Res->cache_image_lru);
+ for (i = 0; i < IMAGE_POOL_SIZE; i++) {
+ RingAdd(pdev, &pdev->Res->cache_image_lru,
+ &pdev->Res->cache_image_pool[i].lru_link);
+ }
+
+ RtlZeroMemory(pdev->Res->image_cache, sizeof(pdev->Res->image_cache));
+ RtlZeroMemory(pdev->Res->cursor_cache, sizeof(pdev->Res->cursor_cache));
+ RingInit(&pdev->Res->cursors_lru);
+ pdev->Res->num_cursors = 0;
+ pdev->Res->last_cursor_id = 0;
+
+ RtlZeroMemory(pdev->Res->palette_cache, sizeof(pdev->Res->palette_cache));
+ RingInit(&pdev->Res->palette_lru);
+ pdev->Res->num_palettes = 0;
+ }
+
+/* Init anything that resides on the device memory (pci vram and devram bars).
+ * Called during two occasions:
+ * startup (from InitRes)
+ * after resume from sleep (from DrvAssertMode)
+ */
+void InitDeviceMemoryResources(PDev *pdev)
{
InitMspace(pdev->Res, MSPACE_TYPE_DEVRAM, pdev->io_pages_virt, pdev->num_io_pages * PAGE_SIZE);
InitMspace(pdev->Res, MSPACE_TYPE_VRAM, pdev->fb, pdev->fb_size);
+ ResetCache(pdev);
}
static void InitRes(PDev *pdev)
@@ -495,29 +522,9 @@ static void InitRes(PDev *pdev)
PANIC(pdev, "Res cache sem creation failed\n");
}
- InitMspaces(pdev);
pdev->Res->update_id = *pdev->dev_update_id;
+ InitDeviceMemoryResources(pdev);
- RtlZeroMemory(pdev->Res->image_key_lookup,
- sizeof(pdev->Res->image_key_lookup));
- RtlZeroMemory(pdev->Res->cache_image_pool,
- sizeof(pdev->Res->cache_image_pool));
- RingInit(&pdev->Res->cache_image_lru);
- for (i = 0; i < IMAGE_POOL_SIZE; i++) {
- RingAdd(pdev, &pdev->Res->cache_image_lru,
- &pdev->Res->cache_image_pool[i].lru_link);
- }
-
- RtlZeroMemory(pdev->Res->image_cache, sizeof(pdev->Res->image_cache));
- RtlZeroMemory(pdev->Res->cursor_cache, sizeof(pdev->Res->cursor_cache));
- RingInit(&pdev->Res->cursors_lru);
- pdev->Res->num_cursors = 0;
- pdev->Res->last_cursor_id = 0;
-
- RtlZeroMemory(pdev->Res->palette_cache, sizeof(pdev->Res->palette_cache));
- RingInit(&pdev->Res->palette_lru);
- pdev->Res->num_palettes = 0;
-
pdev->Res->driver = pdev->driver;
ONDBG(pdev->Res->num_outputs = 0);
diff --git a/display/res.h b/display/res.h
index f77d7be..c4dc604 100644
--- a/display/res.h
+++ b/display/res.h
@@ -71,6 +71,6 @@ void FlushCmdRing(PDev* pdev);
void CheckAndSetSSE2();
#endif
void ResetAllDevices();
-void InitMspaces(PDev *pdev);
+void InitDeviceMemoryResources(PDev *pdev);
#endif