]> xenbits.xen.org Git - xenclient/ioemu-pq.git/commitdiff
vga-edid: Add new vga value to advertise the resolution to the vgabios.
authorJean Guyader <jean.guyader@eu.citrix.com>
Fri, 11 Dec 2009 12:07:12 +0000 (12:07 +0000)
committerJean Guyader <jean.guyader@eu.citrix.com>
Fri, 11 Dec 2009 12:07:12 +0000 (12:07 +0000)
master/series
master/vga-edid [new file with mode: 0644]

index 78dabca07a5b387cf65a867fa58f01f2abf89f77..9b12de06d5ec822d14b94e5daf71fef43027bc7e 100644 (file)
@@ -31,3 +31,4 @@ pv_driver_throttling_disabled
 dont-carp-about-a-missing-battery
 vga-clear-hw-fb-on-resize
 hide-msi-capability-for-igfx
+vga-edid
diff --git a/master/vga-edid b/master/vga-edid
new file mode 100644 (file)
index 0000000..4bd1255
--- /dev/null
@@ -0,0 +1,66 @@
+diff --git a/hw/vga.c b/hw/vga.c
+index cd0ce41..41771d1 100644
+--- a/hw/vga.c
++++ b/hw/vga.c
+@@ -543,6 +543,31 @@ static uint32_t vbe_ioport_read_index(void *opaque, uint32_t addr)
+     return val;
+ }
++static void vbe_get_host_res(int *h, int *v)
++{
++    char *tmp = xenstore_read("/xc_tools/display/display1");
++    char *b, *p;
++    int val[8], i;
++
++    *h = 1024;
++    *v = 768;
++
++    if (!tmp)
++        return;
++    for (i = 0, b = tmp; *b && i < 7; i++)
++    {
++        val[i] = strtol(b, &p, 10);
++        if (*p)
++            b = p + 1;
++    }
++    if (i == 7)
++    {
++        *h = val[3];
++        *v = val[4];
++    }
++    free(tmp);
++}
++
+ static uint32_t vbe_ioport_read_data(void *opaque, uint32_t addr)
+ {
+     VGAState *s = opaque;
+@@ -568,6 +593,16 @@ static uint32_t vbe_ioport_read_data(void *opaque, uint32_t addr)
+         } else {
+             val = s->vbe_regs[s->vbe_index];
+         }
++    } else if (s->vbe_index == VBE_DISPI_INDEX_EDID_XRES) {
++        int h, v;
++        vbe_get_host_res(&h, &v);
++        fprintf(logfile, "EDID, request Hres %d\n", h);
++        return h;
++    } else if (s->vbe_index == VBE_DISPI_INDEX_EDID_YRES) {
++        int h, v;
++        vbe_get_host_res(&h, &v);
++        fprintf(logfile, "EDID, request vres %d\n", v);
++        return v;
+     } else {
+         val = 0;
+     }
+diff --git a/hw/vga_int.h b/hw/vga_int.h
+index 96465ac..e28e16a 100644
+--- a/hw/vga_int.h
++++ b/hw/vga_int.h
+@@ -48,6 +48,8 @@
+ #define VBE_DISPI_INDEX_LFB_ADDRESS_H    0xb
+ #define VBE_DISPI_INDEX_LFB_ADDRESS_L    0xc
+ #define VBE_DISPI_INDEX_NB               0xd
++#define VBE_DISPI_INDEX_EDID_XRES        0xe
++#define VBE_DISPI_INDEX_EDID_YRES        0xf
+ #define VBE_DISPI_ID0                    0xB0C0
+ #define VBE_DISPI_ID1                    0xB0C1