Since i have some spare time on my hands now (;)) and because ruik tickled me, i dusted off some native VGA code i had sitting around since 2007.
This is only part of the solution, as the complete thing adds full native vga textmodeset support for the VIA CLE266. But i am still trying to track down an issue there.
Part of the explanation of this patch is of course in the diff header, so read that first, then read on here.
Issue: kernel calls int10 set video mode, and (unless provided by something else) consequently assumes that since this hook isn't implemented it must be talking to a CGA device. So a message appears that the vt is a CGA 80x25, and the character height is assumed to be 8. The real character height is 16 though, but the only effect is that you have the cursor floating halfway the character, everything else is just fine.
Usage: Here is a snippet of the code in my northbridge/via/vt8623/unichrome.c .init hook:
+#if CONFIG_VGA == 1 + /* Now set up the VGA console */ + vga_io_init(); /* Enable full IO access */ + + unichrome_vga_init(dev); + + vga_textmode_init(); + +#if CONFIG_CONSOLE_VGA == 1 + vga_console_init(); +#endif + + printk_info("UniChrome VGA Textmode initialized.\n"); + +#if CONFIG_CONSOLE_VGA == 0 + /* if we don't have console, at least print something... */ + vga_line_write(0, "UniChrome VGA Textmode initialized."); +#endif + +#endif /* CONFIG_VGA */
TODO's in the vga console code will be dealt with. Right now i want to reduce my diff and make the whole more manageable.
Luc Verhaegen.