bochs: add support for native graphics

Per our discussions with Gerd, qemu will now always do native graphics
on coreboot. The VGA BIOS capability is not needed and will no longer
be supported. Attempts to build without native graphics will result in
an error.

This code builds for both x86 emulation targets. I'm hitting an issue
testing that is unrelated to coreboot; if someone can test, that
would be helpful. Be sure to start qemu with -vga std.

We also add a test for the PCI BAR being zero and return silently if it
is.

Change-Id: I66188f61e1bac7ad93c989cc10f3e0b55140e148
Signed-off-by: Ronald G. Minnich <rminnich@google.com>
Reviewed-on: http://review.coreboot.org/4258
Tested-by: build bot (Jenkins)
Reviewed-by: Vladimir Serbinenko <phcoder@gmail.com>
Reviewed-by: Gerd Hoffmann <kraxel@redhat.com>
diff --git a/src/drivers/emulation/qemu/bochs.c b/src/drivers/emulation/qemu/bochs.c
index 1fd7e28..eb11e34 100644
--- a/src/drivers/emulation/qemu/bochs.c
+++ b/src/drivers/emulation/qemu/bochs.c
@@ -1,4 +1,6 @@
+#include <stdint.h>
 #include <delay.h>
+#include <edid.h>
 #include <stdlib.h>
 #include <string.h>
 #include <arch/io.h>
@@ -64,8 +66,6 @@
 		return;
 	}
 	mem = bochs_read(VBE_DISPI_INDEX_VIDEO_MEMORY_64K) * 64 * 1024;
-	printk(BIOS_DEBUG, "QEMU VGA: bochs dispi interface found, "
-	       "%d MiB video memory\n", mem / ( 1024 * 1024));
 
 	/* find lfb pci bar */
 	addr = pci_read_config32(dev, PCI_BASE_ADDRESS_0);
@@ -78,6 +78,12 @@
 		bar = 1;
 	}
 	addr &= ~PCI_BASE_ADDRESS_MEM_ATTR_MASK;
+
+	if (!addr)
+		return;
+
+	printk(BIOS_DEBUG, "QEMU VGA: bochs dispi interface found, "
+	       "%d MiB video memory\n", mem / ( 1024 * 1024));
 	printk(BIOS_DEBUG, "QEMU VGA: framebuffer @ %x (pci bar %d)\n",
 	       addr, bar);
 
@@ -95,33 +101,11 @@
 		    VBE_DISPI_ENABLED | VBE_DISPI_LFB_ENABLED);
 
 	outb(0x20, 0x3c0); /* disable blanking */
-}
-
-int vbe_mode_info_valid(void);
-int vbe_mode_info_valid(void)
-{
-	return addr != 0;
-}
-
-void fill_lb_framebuffer(struct lb_framebuffer *framebuffer);
-void fill_lb_framebuffer(struct lb_framebuffer *framebuffer)
-{
-	printk(BIOS_DEBUG, "QEMU VGA: fill lb_framebuffer: %dx%d @ %x\n",
-	       width, height, addr);
-
-	framebuffer->physical_address = addr;
-	framebuffer->x_resolution = width;
-	framebuffer->y_resolution = height;
-	framebuffer->bytes_per_line = width * 4;
-	framebuffer->bits_per_pixel = 32;
-	framebuffer->red_mask_pos = 16;
-	framebuffer->red_mask_size = 8;
-	framebuffer->green_mask_pos = 8;
-	framebuffer->green_mask_size = 8;
-	framebuffer->blue_mask_pos = 0;
-	framebuffer->blue_mask_size = 8;
-	framebuffer->reserved_mask_pos = 24;
-	framebuffer->reserved_mask_size = 8;
+	struct edid edid;
+	edid.ha = width;
+	edid.va = height;
+	edid.bpp = 32;
+	set_vbe_mode_info_valid(&edid, addr);
 }
 
 static struct device_operations qemu_graph_ops = {