[OpenBIOS] r538 - in trunk/openbios-devel: drivers include/ppc
svn at openbios.org
svn at openbios.org
Tue Aug 4 23:08:37 CEST 2009
Author: laurent
Date: 2009-08-04 23:08:37 +0200 (Tue, 04 Aug 2009)
New Revision: 538
Modified:
trunk/openbios-devel/drivers/vga_vbe.c
trunk/openbios-devel/include/ppc/io.h
Log:
Allows to configure screen size from Qemu command line options using FW_CFG
interface.
Only enabled for PPC/QEMU and VGA/VBE.
Modified: trunk/openbios-devel/drivers/vga_vbe.c
===================================================================
--- trunk/openbios-devel/drivers/vga_vbe.c 2009-08-04 21:04:32 UTC (rev 537)
+++ trunk/openbios-devel/drivers/vga_vbe.c 2009-08-04 21:08:37 UTC (rev 538)
@@ -126,16 +126,32 @@
{
phandle_t ph, chosen, aliases, options;
char buf[6];
+ int width = VGA_DEFAULT_WIDTH;
+ int height = VGA_DEFAULT_HEIGHT;
+ int depth = VGA_DEFAULT_DEPTH;
+ int linebytes = VGA_DEFAULT_LINEBYTES;
- vga_vbe_set_mode(VGA_DEFAULT_WIDTH, VGA_DEFAULT_HEIGHT,
- VGA_DEFAULT_DEPTH);
+#if defined(CONFIG_QEMU) && defined(CONFIG_PPC)
+ int w, h, d;
+ w = fw_cfg_read_i16(FW_CFG_PPC_WIDTH);
+ h = fw_cfg_read_i16(FW_CFG_PPC_HEIGHT);
+ d = fw_cfg_read_i16(FW_CFG_PPC_DEPTH);
+ if (w && h && d) {
+ width = w;
+ height = h;
+ depth = d;
+ linebytes = (width * ((depth + 7) / 8));
+ }
+#endif
+ vga_vbe_set_mode(width, height, depth);
+
ph = find_dev(path);
- set_int_property(ph, "width", VGA_DEFAULT_WIDTH);
- set_int_property(ph, "height", VGA_DEFAULT_HEIGHT);
- set_int_property(ph, "depth", VGA_DEFAULT_DEPTH);
- set_int_property(ph, "linebytes", VGA_DEFAULT_LINEBYTES);
+ set_int_property(ph, "width", width);
+ set_int_property(ph, "height", height);
+ set_int_property(ph, "depth", depth);
+ set_int_property(ph, "linebytes", linebytes);
set_int_property(ph, "address", fb & ~0x0000000F);
chosen = find_dev("/chosen");
@@ -147,9 +163,9 @@
set_property(aliases, "screen", path, strlen(path) + 1);
options = find_dev("/options");
- snprintf(buf, sizeof(buf), "%d", VGA_DEFAULT_WIDTH / FONT_WIDTH);
+ snprintf(buf, sizeof(buf), "%d", width / FONT_WIDTH);
set_property(options, "screen-#columns", buf, strlen(buf) + 1);
- snprintf(buf, sizeof(buf), "%d", VGA_DEFAULT_HEIGHT / FONT_HEIGHT);
+ snprintf(buf, sizeof(buf), "%d", height / FONT_HEIGHT);
set_property(options, "screen-#rows", buf, strlen(buf) + 1);
if (rom_size >= 8) {
@@ -164,6 +180,5 @@
}
}
- init_video(fb, VGA_DEFAULT_WIDTH, VGA_DEFAULT_HEIGHT,
- VGA_DEFAULT_DEPTH, VGA_DEFAULT_LINEBYTES);
+ init_video(fb, width, height, depth, linebytes);
}
Modified: trunk/openbios-devel/include/ppc/io.h
===================================================================
--- trunk/openbios-devel/include/ppc/io.h 2009-08-04 21:04:32 UTC (rev 537)
+++ trunk/openbios-devel/include/ppc/io.h 2009-08-04 21:08:37 UTC (rev 538)
@@ -3,6 +3,9 @@
#include "asm/types.h"
+#define NO_QEMU_PROTOS
+#include "openbios/fw_cfg.h"
+
extern unsigned long virt_offset;
#define phys_to_virt(phys) ((void *) ((unsigned long) (phys) - virt_offset))
@@ -160,4 +163,11 @@
extern void outsw(u32 reg, const void *addr, unsigned long count);
#endif
#endif
+
+#if defined(CONFIG_QEMU)
+#define FW_CFG_PPC_WIDTH (FW_CFG_ARCH_LOCAL + 0x00)
+#define FW_CFG_PPC_HEIGHT (FW_CFG_ARCH_LOCAL + 0x01)
+#define FW_CFG_PPC_DEPTH (FW_CFG_ARCH_LOCAL + 0x02)
+#endif
+
#endif /* _ASM_IO_H */
More information about the OpenBIOS
mailing list