diff options
Diffstat (limited to 'sys/i386/isa/vga_isa.c')
-rw-r--r-- | sys/i386/isa/vga_isa.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/sys/i386/isa/vga_isa.c b/sys/i386/isa/vga_isa.c index 7db1ce3..4fca03f 100644 --- a/sys/i386/isa/vga_isa.c +++ b/sys/i386/isa/vga_isa.c @@ -853,10 +853,25 @@ update_adapter_info(video_adapter_t *adp, video_info_t *info) adp->va_buffer = BIOS_PADDRTOVADDR(info->vi_buffer); adp->va_buffer_size = info->vi_buffer_size; } - if (info->vi_flags & V_INFO_GRAPHICS) - adp->va_line_width = info->vi_width/8; - else + if (info->vi_flags & V_INFO_GRAPHICS) { + switch (info->vi_depth/info->vi_planes) { + case 1: + adp->va_line_width = info->vi_width/8; + break; + case 2: + adp->va_line_width = info->vi_width/4; + break; + case 4: + adp->va_line_width = info->vi_width/2; + break; + case 8: + default: /* shouldn't happen */ + adp->va_line_width = info->vi_width; + break; + } + } else { adp->va_line_width = info->vi_width; + } bcopy(info, &adp->va_info, sizeof(adp->va_info)); } |