]> xenbits.xensource.com Git - xenclient/ioemu.git/commitdiff
- Intel driver, still not fixed.
authorJean Guyader <jean.guyader@eu.citrix.com>
Thu, 16 Oct 2008 14:16:47 +0000 (15:16 +0100)
committerJean Guyader <jean.guyader@eu.citrix.com>
Fri, 17 Oct 2008 10:58:43 +0000 (11:58 +0100)
dom0_driver.c
intel.c
vl.c

index d4c0acecbe7076d7ca0a84cf6daf1e05877ce476..3c8d51e4e1be739153cba2a9a05d0939d9adeb6c 100644 (file)
@@ -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 4ef272d5a44c9bd34fba1341d81d7102c4d41676..772ad5fd4b68e8204021e06cf08db71590300b2a 100644 (file)
--- 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       
 
 #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 5d52fc4e866482e9e65f7eb5010e70282d5d1748..eb6e397ac2bcc0e05aea733832fc04cae48eb655 100644 (file)
--- 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);