From: Jean Guyader Date: Thu, 16 Oct 2008 14:16:47 +0000 (+0100) Subject: - Intel driver, still not fixed. X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=a2ce033d4829fc64b6c59f44c9faf5b75570d07a;p=xenclient%2Fioemu.git - Intel driver, still not fixed. --- diff --git a/dom0_driver.c b/dom0_driver.c index d4c0acec..3c8d51e4 100644 --- a/dom0_driver.c +++ b/dom0_driver.c @@ -193,7 +193,7 @@ static void dom0_get_positions(int *positions) static int dom0_get_next_domid(int dir, int id) { - int pos = 0, next_pos = 0; + int pos = 0, next_pos = -1; int positions[6]; dom0_get_positions(positions); @@ -214,10 +214,12 @@ static int dom0_get_next_domid(int dir, int id) else if (pos == DOM0_CENTER && dir != DOM0_CENTER) next_pos = dir; - if (next_pos == 0) + DEBUG("current pos id %d, next pos would be %d\n", pos, next_pos); + DEBUG("positions[next_pos] %d, id %d\n", positions[next_pos], id); + + if (next_pos == -1) next_pos = pos; - DEBUG("positions[next_pos] %d, id %d\n", positions[next_pos], id); if (!positions[next_pos]) return domid; else diff --git a/intel.c b/intel.c index 4ef272d5..772ad5fd 100644 --- a/intel.c +++ b/intel.c @@ -16,9 +16,9 @@ #define TileW 128 #define TileH 8 -#define IntelFbBase 0xd0000000 -#define IntelMMIOAddr 0xfe400000 -#define TilePitch 16 +#define IntelFbBase 0x80000000 +#define IntelMMIOAddr 0x90000000 +#define TilePitch 8 #define REG_DR_DSPASURF 0x7019C #define REG_DR_DSPACNTR 0x70180 @@ -47,8 +47,8 @@ static inline unsigned int intel_get_offset(DisplayState *ds, int x, int y) static inline void intel_blit_tile(DisplayState *ds, int x, int y) { - static const int solid_line[] = {0, 3, 4, 7}; - static const int dashed_line[] = {1, 2, 5, 6}; + static const int solid_line[] = {0, 3, 5, 6}; + static const int dashed_line[] = {1, 2, 4, 7}; unsigned int toffset, offset, to, o; unsigned char *buff; int i, j; @@ -88,48 +88,49 @@ static inline void intel_blit_tile(DisplayState *ds, int x, int y) static void intel_update_tiled(DisplayState *ds, int x, int y, int w, int h) { int i,j; + int xt, yt, wt, ht; - x = x / TileW; - y = y / TileH; - w = w / TileW + 1; - h = h / TileH + 1; + xt = x / TileW - 1; + yt = y / TileH - 1; + wt = w / TileW + xt + 3; + ht = h / TileH + yt + 3; - for (i = 0; i < h; i++) - for (j = 0; j < w; j++) - if ((y + i) < 128 && (x + j) < 10) - intel_blit_tile(ds, j + x, i + y); + for (i = yt; i < ht; i++) + for (j = xt; j < wt; j++) + if (j >= 0 && j < 8 && i >= 0 && i < 96) + intel_blit_tile(ds, j, i); } static void intel_update(DisplayState *ds, int x, int y, int w, int h) { - if (intel_get_reg(REG_DR_DSPACNTR) & 0xA) - intel_update_tiled(ds, x, y, h, w); - else + // if (intel_get_reg(REG_DR_DSPACNTR) & 0xA) + intel_update_tiled(ds, x, y, w, h); +/* else { unsigned char *buff = (unsigned char*)(intel_mem + intel_get_reg(REG_DR_DSPASURF)); INTEL_DEBUG("change ds->data %p\n", buff); ds->data = buff; - } + }*/ } static void intel_resize(DisplayState *ds, int w, int h) { - ds->linesize = w * 4; ds->width = w; ds->height = h; - if (intel_get_reg(REG_DR_DSPASURF) & 0xA) +// if (intel_get_reg(REG_DR_DSPASURF) & 0xA) { INTEL_DEBUG("%d,%d tiled mode\n", w, h); - ds->data = realloc(ds->data, 1280 * ds->linesize); + ds->data = realloc(ds->data, 1024 * ds->linesize); + memset(ds->data, 0, 1024* ds->linesize); } - else +/* else { unsigned char *buff = (unsigned char*)(intel_mem + intel_get_reg(REG_DR_DSPASURF)); INTEL_DEBUG("%d,%d linear mode\n", w, h); INTEL_DEBUG("change ds->data %p\n", buff); ds->data = buff; - } + }*/ } static void intel_refresh(DisplayState *ds) @@ -159,7 +160,7 @@ static void intel_init_mapping(void) perror("mmap"); exit(1); } - intel_mmio = mmap(NULL, 1024 * 1024, PROT_READ, MAP_SHARED, + intel_mmio = mmap(NULL, 4 * 1024 * 1024, PROT_READ, MAP_SHARED, fd_mem_ro, IntelMMIOAddr); if (intel_mem == MAP_FAILED) { diff --git a/vl.c b/vl.c index 5d52fc4e..eb6e397a 100644 --- a/vl.c +++ b/vl.c @@ -211,6 +211,7 @@ int opengl_enabled = 0; #endif const char *dom0_input = NULL; int vga_passthrough = 0; +int intel_output = 0; static const char *direct_pci; static int nb_pci_emulation = 0; static char pci_emulation_config_text[MAX_PCI_EMULATION][256]; @@ -7440,6 +7441,7 @@ static void help(int exitcode) "-std-vga simulate a standard VGA card with VESA Bochs Extensions\n" " (default is CL-GD5446 PCI VGA)\n" "-videoram set amount of memory available to virtual video adapter\n" + "-intel\n" "-no-acpi disable ACPI\n" #endif #ifdef CONFIG_CURSES @@ -7533,7 +7535,8 @@ enum { QEMU_OPTION_vmsvga, QEMU_OPTION_g, QEMU_OPTION_std_vga, - QEMU_OPTION_videoram, + QEMU_OPTION_videoram, + QEMU_OPTION_intel, QEMU_OPTION_echr, QEMU_OPTION_monitor, QEMU_OPTION_domainname, @@ -7644,7 +7647,8 @@ const QEMUOption qemu_options[] = { #endif { "localtime", 0, QEMU_OPTION_localtime }, { "std-vga", 0, QEMU_OPTION_std_vga }, - { "videoram", HAS_ARG, QEMU_OPTION_videoram }, + { "videoram", HAS_ARG, QEMU_OPTION_videoram }, + { "intel", 0, QEMU_OPTION_intel }, { "echr", HAS_ARG, QEMU_OPTION_echr }, { "monitor", HAS_ARG, QEMU_OPTION_monitor }, { "domain-name", 1, QEMU_OPTION_domainname }, @@ -8361,6 +8365,9 @@ int main(int argc, char **argv) vga_ram_size = video_ram_size; } break; + case QEMU_OPTION_intel: + intel_output = 1; + break; case QEMU_OPTION_g: { const char *p; @@ -8819,7 +8826,13 @@ int main(int argc, char **argv) } /* nearly nothing to do */ dumb_display_init(ds); - } else if (vnc_display != NULL || vncunused != 0) { + } + else if (intel_output) + { + intel_display_init(ds); + xenstore_write_vncport(-1); + } + else if (vnc_display != NULL || vncunused != 0) { int vnc_display_port; char password[20]; vnc_display_init(ds);