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);
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
#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
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;
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)
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)
{
#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];
"-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
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,
#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 },
vga_ram_size = video_ram_size;
}
break;
+ case QEMU_OPTION_intel:
+ intel_output = 1;
+ break;
case QEMU_OPTION_g:
{
const char *p;
}
/* 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);