]> xenbits.xensource.com Git - xenclient/ioemu.git/commitdiff
Get the resolution from REG_DE_HBLANK_A/REG_DE_VBLANK_A.
authorJean Guyader <jean.guyader@eu.citrix.com>
Fri, 13 Mar 2009 12:54:50 +0000 (12:54 +0000)
committerJean Guyader <jean.guyader@eu.citrix.com>
Fri, 13 Mar 2009 12:54:50 +0000 (12:54 +0000)
Change variable name:
- TileX -> IntelX
- TileY -> IntelY
- TilePitch -> IntelPitch

intel.c

diff --git a/intel.c b/intel.c
index 10c117db689fde484354edf788f60f4224037efd..f988c46cdf1b68b7fec4708cb6f7805a07c30e7d 100644 (file)
--- a/intel.c
+++ b/intel.c
 #define TileW           128
 #define TileH           8
 
-#define REG_DR_DSPASURF         0x7019C
-#define REG_DR_DSPACNTR         0x70180
-#define REG_DR_DSPASTRIDE       0x70188
-#define REG_DR_PIPEACONF           0x70008
+#define REG_DR_DSPASURF                0x7019C
+#define REG_DR_DSPACNTR                0x70180
+#define REG_DR_DSPASTRIDE      0x70188
+#define REG_DR_PIPEACONF       0x70008
 
-#define REG_DR_DSPBSURF         0x7119C
-#define REG_DR_DSPBCNTR         0x71180
-#define REG_DR_DSPBSTRIDE       0x71188
-#define REG_DR_PIPEBCONF        0x71008
+#define REG_DR_DSPBSURF                0x7119C
+#define REG_DR_DSPBCNTR                0x71180
+#define REG_DR_DSPBSTRIDE      0x71188
+#define REG_DR_PIPEBCONF       0x71008
+
+#define REG_DE_HBLANK_A                0x60004
+#define REG_DE_VBLANK_A                0x60010
 
 extern int                      vga_passthrough;
 uint32_t                        guest_framebuffer;
@@ -40,9 +43,9 @@ static uint8_t                  *intel_mem = NULL;
 static uint8_t                  *intel_mmio = NULL;
 static int                      intel_force_full_update = 0;
 static int                      intel_have_focus;
-static int                      TilePitch = 16;
-static int                      TileX = 1280;
-static int                      TileY = 1024;
+static int                      IntelPitch = 16;
+static int                      IntelX = 1280;
+static int                      IntelY = 1024;
 static DisplayState             *lds = NULL;
 static uint8_t                  *old_data = NULL;
 static uint32_t                 intel_fb_base, intel_mmio_base;
@@ -74,11 +77,6 @@ static inline unsigned int intel_get_pitch(void)
     return *dspastride;
 }
 
-static inline unsigned int intel_get_tiled_offset(int x, int y)
-{
-    return 4 * (y * (TilePitch * TileW * TileH) + x * (TileW * TileH));
-}
-
 static inline unsigned int intel_get_offset(DisplayState *ds, int x, int y)
 {
     return (y * ds->width + x) * 4;
@@ -233,7 +231,7 @@ static void intel_resize_shared(DisplayState *ds, int w, int h, int depth, int l
         intel_resize(ds, w, h);
         return;
     }
-    if (depth == 32 && w == TileX && h == TileY)
+    if (depth == 32 && w == IntelX && h == IntelY)
         ds->shared_buf = 1;
     else
         ds->shared_buf = 0;
@@ -272,9 +270,9 @@ static void intel_resize(DisplayState *ds, int w, int h)
         intel_force_linear(0);
     }
     ds->shared_buf = 0;
-    if (intel_have_focus && !old_data && w * h <= TileX * TileY)
+    if (intel_have_focus && !old_data && w * h <= IntelX * IntelY)
         set_data_mappings();
-    else if (intel_have_focus && old_data && w * h > TileX * TileY)
+    else if (intel_have_focus && old_data && w * h > IntelX * IntelY)
         unset_data_mappings(0);
     if (!old_data) {
         qemu_free(ds->data);
@@ -284,7 +282,7 @@ static void intel_resize(DisplayState *ds, int w, int h)
         set_data_pointer();
     }
     if (intel_have_focus)
-        memset((unsigned char *)(intel_mem + intel_get_reg(REG_DR_DSPASURF)), 0x0, TileX * TileY);
+        memset((unsigned char *)(intel_mem + intel_get_reg(REG_DR_DSPASURF)), 0x0, IntelX * IntelY);
     if (refresh) {
         if (old_data) {
             unsigned char *s, *d;
@@ -356,8 +354,8 @@ static void set_data_pointer(void)
 {
     lds->data = (unsigned char *)(intel_mem + intel_get_reg(REG_DR_DSPASURF));
     lds->data = lds->data +
-                lds->linesize * ((TileY - lds->height) / 2) +
-                4 * ((TileX - lds->width) / 2);
+                lds->linesize * ((IntelY - lds->height) / 2) +
+                4 * ((IntelX - lds->width) / 2);
 }
 
 static void set_data_mappings(void)
@@ -409,17 +407,10 @@ void intel_focus(int focus)
     intel_have_focus = focus;
     if (focus) {
         if (!is_linear()) {
-            if (intel_get_reg(REG_DR_DSPASTRIDE) == 0x1000) {
-                TilePitch = 8;
-                TileX = 1024;
-                TileY = 768;
-                INTEL_DEBUG("Resolution 1024x768\n");
-            } else {
-                TilePitch = 16;
-                TileX = 1280;
-                TileY = 800;
-                INTEL_DEBUG("Resolution 1280x800\n");
-            }
+           IntelPitch = intel_get_reg(REG_DR_DSPASTRIDE);
+           IntelX = (intel_get_reg(REG_DE_HBLANK_A) & 0xfff) + 1;
+           IntelY = (intel_get_reg(REG_DE_VBLANK_A) & 0xfff) + 1;
+           INTEL_DEBUG("Resolution is %dx%d\n", IntelX, IntelY);
         }
         refresh = 1;
         lds->dpy_resize_shared = intel_resize_shared;