diff options
author | Alon Levy <alevy@redhat.com> | 2011-04-18 18:18:51 +0300 |
---|---|---|
committer | Alon Levy <alevy@redhat.com> | 2011-04-18 18:18:51 +0300 |
commit | 74636e29583c0eb4cc0f0ecc955f66c819c6f4bc (patch) | |
tree | a9bdef1d9d57e24ec3af65fa1c7f375b5305516f | |
parent | 2f4d7c040bb0ba37cf5a069b98273bc72ae6f10e (diff) |
add InitDeviceMemoryResources and ResetCache
-rw-r--r-- | display/driver.c | 7 | ||||
-rw-r--r-- | display/res.c | 59 | ||||
-rw-r--r-- | display/res.h | 2 |
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 |