This patch cleans up the code in bios/int10.c without changing functionality. Cc: Ingo Molnar <mingo@xxxxxxx> Cc: Cyrill Gorcunov <gorcunov@xxxxxxxxx> Cc: John Floren <john@xxxxxxxxxxx> Cc: Sasha Levin <levinsasha928@xxxxxxxxx> Signed-off-by: Pekka Enberg <penberg@xxxxxxxxxx> --- tools/kvm/bios/int10.c | 88 +++++++++++++++++++++++++---------------------- 1 files changed, 47 insertions(+), 41 deletions(-) diff --git a/tools/kvm/bios/int10.c b/tools/kvm/bios/int10.c index 57647a1..f7fecac 100644 --- a/tools/kvm/bios/int10.c +++ b/tools/kvm/bios/int10.c @@ -29,10 +29,9 @@ struct vesa_general_info { u16 modes[2]; /* 20 */ char oem_string[11]; /* 24 */ - u8 reserved[223]; /* 35 */ + u8 reserved[223]; /* 35 */ } __attribute__ ((packed)); - struct vminfo { u16 mode_attr; /* 0 */ u8 win_attr[2]; /* 2 */ @@ -87,56 +86,63 @@ static inline void int10_putchar(struct int10_args *args) outb(0x3f8, al); } +static void vbe_get_mode(struct int10_args *args) +{ + struct vminfo *info = (struct vminfo *) args->edi; + + *info = (struct vminfo) { + .mode_attr = 0xd9, /* 11011011 */ + .logical_scan = VESA_WIDTH*4, + .h_res = VESA_WIDTH, + .v_res = VESA_HEIGHT, + .bpp = VESA_BPP, + .memory_layout = 6, + .memory_planes = 1, + .lfb_ptr = VESA_MEM_ADDR, + .rmask = 8, + .gmask = 8, + .bmask = 8, + .resv_mask = 8, + .resv_pos = 24, + .bpos = 16, + .gpos = 8, + }; +} + +static void vbe_get_info(struct int10_args *args) +{ + struct vesa_general_info *info = (struct vesa_general_info *) args->edi; + + *info = (struct vesa_general_info) { + .signature = VESA_MAGIC, + .version = 0x102, + .vendor_string = &info->oem_string, + .capabilities = 0x10, + .video_mode_ptr = &info->modes, + .total_memory = (4 * VESA_WIDTH * VESA_HEIGHT) / 0x10000, + .oem_string = "KVM VESA", + .modes = { 0x0112, 0xffff }, + }; +} + +#define VBE_STATUS_OK 0x004F + static void int10_vesa(struct int10_args *args) { u8 al; - struct vesa_general_info *destination; - struct vminfo *vi; al = args->eax; switch (al) { - case 0: - /* Set controller info */ - - destination = (struct vesa_general_info *)args->edi; - *destination = (struct vesa_general_info) { - .signature = VESA_MAGIC, - .version = 0x102, - .vendor_string = &destination->oem_string, - .capabilities = 0x10, - .video_mode_ptr = &destination->modes, - .total_memory = (4*VESA_WIDTH * VESA_HEIGHT) / 0x10000, - .oem_string = "KVM VESA", - .modes = { 0x0112, 0xffff }, - }; - + case 0x00: + vbe_get_info(args); break; - case 1: - vi = (struct vminfo *)args->edi; - *vi = (struct vminfo) { - .mode_attr = 0xd9, /* 11011011 */ - .logical_scan = VESA_WIDTH*4, - .h_res = VESA_WIDTH, - .v_res = VESA_HEIGHT, - .bpp = VESA_BPP, - .memory_layout = 6, - .memory_planes = 1, - .lfb_ptr = VESA_MEM_ADDR, - .rmask = 8, - .gmask = 8, - .bmask = 8, - .resv_mask = 8, - .resv_pos = 24, - .bpos = 16, - .gpos = 8, - }; - + case 0x01: + vbe_get_mode(args); break; } - args->eax = 0x004f; /* return success every time */ - + args->eax = VBE_STATUS_OK; } bioscall void int10_handler(struct int10_args *args) -- 1.7.0.4 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html