From 9afab21fc230ae405ebb5611de82188c7dce69a9 Mon Sep 17 00:00:00 2001 From: Jean Guyader Date: Fri, 13 Mar 2009 12:54:50 +0000 Subject: [PATCH] Get the resolution from REG_DE_HBLANK_A/REG_DE_VBLANK_A. Change variable name: - TileX -> IntelX - TileY -> IntelY - TilePitch -> IntelPitch --- intel.c | 57 ++++++++++++++++++++++++--------------------------------- 1 file changed, 24 insertions(+), 33 deletions(-) diff --git a/intel.c b/intel.c index 10c117db..f988c46c 100644 --- a/intel.c +++ b/intel.c @@ -19,15 +19,18 @@ #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; -- 2.39.5