--- /dev/null
+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