mirror of
https://github.com/clearlinux/kvmtool.git
synced 2026-09-05 13:11:44 +00:00
kvm tools, vesa: Cleanup code in bios/int10.c
This patch cleans up the code in bios/int10.c without changing functionality. Acked-by: Cyrill Gorcunov <gorcunov@gmail.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: John Floren <john@jfloren.net> Cc: Sasha Levin <levinsasha928@gmail.com> Signed-off-by: Pekka Enberg <penberg@kernel.org>
This commit is contained in:
committed by
Will Deacon
parent
3f838fece3
commit
d94966fe14
+47
-41
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user