]> xenbits.xen.org Git - xenclient/ioemu-pq.git/commitdiff
intel: fixes
authorJean Guyader <jean.guyader@eu.citrix.com>
Mon, 7 Dec 2009 18:33:26 +0000 (18:33 +0000)
committerJean Guyader <jean.guyader@eu.citrix.com>
Mon, 7 Dec 2009 18:33:26 +0000 (18:33 +0000)
        - memset the right amount of memory
        - Don't do anything in focus if there isn't any pipe enabled

master/intel

index 33c3cb8e1306476987773dd94dcd2af90dd6300f..c9744f61a026316979504b47d83db5d4d9872d8d 100644 (file)
@@ -201,10 +201,10 @@ index 90bd544..e4e27a9 100644
      vga_update_display(s);
 diff --git a/intel.c b/intel.c
 new file mode 100644
-index 0000000..f3d6672
+index 0000000..ef279fe
 --- /dev/null
 +++ b/intel.c
-@@ -0,0 +1,518 @@
+@@ -0,0 +1,525 @@
 +#include <stdio.h>
 +#include <stdlib.h>
 +#include <stdint.h>
@@ -268,6 +268,12 @@ index 0000000..f3d6672
 +        return intel_get_reg(REG_DR_DSPBSURF);
 +}
 +
++static inline char intel_gfx_enabled(void)
++{
++    return (intel_get_reg(REG_DR_PIPEACONF) & (1 << 31)) ||
++        (intel_get_reg(REG_DR_PIPEBCONF) && (1 << 31));
++}
++
 +static inline void intel_get_res(unsigned int   *x,
 +                                 unsigned int   *y,
 +                                 unsigned int   *pitch)
@@ -603,17 +609,18 @@ index 0000000..f3d6672
 +
 +static void intel_focus(int focus)
 +{
-+    if (intel_have_focus == focus)
++    if (intel_have_focus == focus ||
++            !intel_gfx_enabled())
 +        return;
 +
 +    intel_have_focus = focus;
 +    if (intel_have_focus) {
 +        intel_get_res(&IntelX, &IntelY, &IntelPitch);
++        memset((uint8_t *)(intel_mem + intel_get_surface()), 0,
++                IntelPitch * IntelY);
 +
 +        if (!guest_framebuffer)
 +            intel_force_linear(0);
-+        memset((uint8_t *)(intel_mem + intel_get_surface()), 0,
-+                IntelX * IntelY * 4);
 +    }
 +    vga_hw_invalidate();
 +    vga_hw_update();