summaryrefslogtreecommitdiffstats
path: root/sys/i386/isa/vga_isa.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/i386/isa/vga_isa.c')
-rw-r--r--sys/i386/isa/vga_isa.c21
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));
}
OpenPOWER on IntegriCloud