summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authoryokota <yokota@FreeBSD.org>1999-02-05 12:58:40 +0000
committeryokota <yokota@FreeBSD.org>1999-02-05 12:58:40 +0000
commita457661f60731bf97aec9b5bcf2b8fe7d89b25b6 (patch)
tree93e4697a5510a0607c785bd196e0bef80f14feac /sys
parent481c70e8c63e3fbab220e098337004d6ce732010 (diff)
downloadFreeBSD-src-a457661f60731bf97aec9b5bcf2b8fe7d89b25b6.zip
FreeBSD-src-a457661f60731bf97aec9b5bcf2b8fe7d89b25b6.tar.gz
Oops, the last commit contained a wrong patch. This is the correct one.
Diffstat (limited to 'sys')
-rw-r--r--sys/i386/isa/vesa.c33
-rw-r--r--sys/i386/isa/vga_isa.c21
-rw-r--r--sys/isa/vga_isa.c23
3 files changed, 61 insertions, 16 deletions
diff --git a/sys/i386/isa/vesa.c b/sys/i386/isa/vesa.c
index 22c5011..97dca62 100644
--- a/sys/i386/isa/vesa.c
+++ b/sys/i386/isa/vesa.c
@@ -775,21 +775,36 @@ vesa_set_mode(video_adapter_t *adp, int mode)
vesa_adp->va_buffer = BIOS_PADDRTOVADDR(info.vi_buffer);
vesa_adp->va_buffer_size = info.vi_buffer_size;
}
- bcopy(&info, &adp->va_info, sizeof(adp->va_info));
len = vesa_bios_get_line_length();
- if (len > 0)
- adp->va_line_width = len;
- else if (info.vi_flags & V_INFO_GRAPHICS)
- adp->va_line_width = info.vi_width/8;
- else
- adp->va_line_width = info.vi_width;
+ if (len > 0) {
+ vesa_adp->va_line_width = len;
+ } else if (info.vi_flags & V_INFO_GRAPHICS) {
+ switch (info.vi_depth/info.vi_planes) {
+ case 1:
+ vesa_adp->va_line_width = info.vi_width/8;
+ break;
+ case 2:
+ vesa_adp->va_line_width = info.vi_width/4;
+ break;
+ case 4:
+ vesa_adp->va_line_width = info.vi_width/2;
+ break;
+ case 8:
+ default: /* shouldn't happen */
+ vesa_adp->va_line_width = info.vi_width;
+ break;
+ }
+ } else {
+ vesa_adp->va_line_width = info.vi_width;
+ }
#if VESA_DEBUG > 0
printf("vesa_set_mode(): vi_width:%d, len:%d, line_width:%d\n",
- info.vi_width, len, adp->va_line_width);
+ info.vi_width, len, vesa_adp->va_line_width);
#endif
+ bcopy(&info, &vesa_adp->va_info, sizeof(vesa_adp->va_info));
/* move hardware cursor out of the way */
- (*vidsw[adp->va_index]->set_hw_cursor)(adp, -1, -1);
+ (*vidsw[vesa_adp->va_index]->set_hw_cursor)(vesa_adp, -1, -1);
return 0;
}
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));
}
diff --git a/sys/isa/vga_isa.c b/sys/isa/vga_isa.c
index 33866b8..49baedb 100644
--- a/sys/isa/vga_isa.c
+++ b/sys/isa/vga_isa.c
@@ -26,7 +26,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: vga_isa.c,v 1.1 1999/01/23 16:53:30 dfr Exp $
+ * $Id: vga_isa.c,v 1.2 1999/02/05 11:52:08 yokota Exp $
*/
#include "vga.h"
@@ -851,10 +851,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