[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH 2/2] plat/kvm: Update VGA console cursor location
On 07/29/2018 12:39 PM, Florian Schmidt wrote: Update the location of the cursor as data is written to the console. Note that this does not set the cursor location registers, hence all we And I just realized this isn't very clear. This of course sets the "Cursor Location {High,Low}" registers, but it doesn't set the "Cursor {Start,End}" registers. I won't send a v2 for just that. Waiting for other potential comments instead. get is the blinking underline character, not the full-size block character. Signed-off-by: Florian Schmidt <florian.schmidt@xxxxxxxxx> --- plat/kvm/x86/vga_console.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/plat/kvm/x86/vga_console.c b/plat/kvm/x86/vga_console.c index a1b5cf7..efcddde 100644 --- a/plat/kvm/x86/vga_console.c +++ b/plat/kvm/x86/vga_console.c @@ -29,6 +29,8 @@ #include <sys/types.h> #include <stdint.h> #include <string.h> +#include <x86/cpu.h> +#include <x86/irq.h> #include <kvm-x86/vga_console.h>/* Hardware text mode color constants. */@@ -109,6 +111,36 @@ static void vga_scroll(void) = vga_entry(' ', terminal_color); }+static void vga_update_cursor(void)+{ + unsigned long irq_flags; + uint8_t old; + uint8_t ioas; // VGA Input/Output select + uint16_t areg; // VGA address register + uint16_t dreg; // VGA data register + + local_irq_save(irq_flags); + /* Location of the address and data registers is variable and denoted + * by the least significant bit in the Input/Output register. + */ + ioas = inb(0x3cc) & 0x1; + if (ioas) { + areg = 0x3d4; + dreg = 0x3d5; + } else { + areg = 0x3b4; + dreg = 0x3b5; + } + + old = inb(areg); + outb(areg, 0x0e); // Cursor Location High + outb(dreg, ((terminal_row * VGA_WIDTH) + terminal_column) >> 8); + outb(areg, 0x0f); // Cursor Location Low + outb(dreg, ((terminal_row * VGA_WIDTH) + terminal_column) & 0xff); + outb(areg, old); + local_irq_restore(irq_flags); +} + static void vga_newline(void) { if (terminal_row == VGA_HEIGHT - 1) @@ -160,4 +192,5 @@ void _libkvmplat_vga_putc(char c) } break; } + vga_update_cursor(); } _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |