From: Michel Dänzer <daen...@vmware.com>

Signed-off-by: Michel Dänzer <daen...@vmware.com>
---
 drivers/gpu/drm/radeon/radeon_gem.c |   34 +++++++++++++++++++++++++++++++---
 1 files changed, 31 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/radeon/radeon_gem.c 
b/drivers/gpu/drm/radeon/radeon_gem.c
index eb51603..c3dd0fc 100644
--- a/drivers/gpu/drm/radeon/radeon_gem.c
+++ b/drivers/gpu/drm/radeon/radeon_gem.c
@@ -27,6 +27,7 @@
  */
 #include "drmP.h"
 #include "drm.h"
+#include "drm_crtc_helper.h"
 #include "radeon_drm.h"
 #include "radeon.h"
 
@@ -156,11 +157,38 @@ int radeon_gem_info_ioctl(struct drm_device *dev, void 
*data,
 {
        struct radeon_device *rdev = dev->dev_private;
        struct drm_radeon_gem_info *args = data;
+       struct drm_crtc *crtc;
 
        args->vram_size = rdev->mc.vram_size;
-       /* FIXME: report somethings that makes sense */
-       args->vram_visible = rdev->mc.vram_size - (4 * 1024 * 1024);
-       args->gart_size = rdev->mc.gtt_size;
+       args->vram_visible = rdev->mc.vram_size;
+       if (rdev->stollen_vga_memory)
+               args->vram_visible -= 
radeon_object_size(rdev->stollen_vga_memory);
+       if (rdev->fbdev_robj)
+               args->vram_visible -= radeon_object_size(rdev->fbdev_robj);
+       list_for_each_entry(crtc, &rdev->ddev->mode_config.crtc_list, head) {
+               if (drm_helper_crtc_in_use(crtc)) {
+                       struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
+
+                       if (radeon_crtc->cursor_bo &&
+                           radeon_crtc->cursor_bo->driver_private)
+                               args->vram_visible -=
+                                       radeon_object_size(radeon_crtc->
+                                                          cursor_bo->
+                                                          driver_private);
+
+                       if (crtc->fb) {
+                               struct radeon_framebuffer *rfb =
+                                       to_radeon_framebuffer(crtc->fb);
+
+                               if (rfb->obj && rfb->obj->driver_private)
+                                       args->vram_visible -=
+                                               radeon_object_size(rfb->obj->
+                                                                  
driver_private);
+                       }
+               }
+       }
+       args->gart_size = rdev->mc.gtt_size - rdev->cp.ring_size - 4096 -
+               RADEON_IB_POOL_SIZE*64*1024;
        return 0;
 }
 
-- 
1.6.3.3


------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
--
_______________________________________________
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to