Module Name:    src
Committed By:   phx
Date:           Mon Nov 16 21:24:06 UTC 2015

Modified Files:
        src/sys/arch/amiga/dev: grf_cv.c grf_cv3d.c

Log Message:
Fixed bug in wsdisplay copyrows textop.
Fixed WSDISPLAYIO_SVIDEO, which had inverted functionality.
Improved FBINFO setup. 15 and 16 bits depth both have 16bpp now.


To generate a diff of this commit:
cvs rdiff -u -r1.58 -r1.59 src/sys/arch/amiga/dev/grf_cv.c
cvs rdiff -u -r1.32 -r1.33 src/sys/arch/amiga/dev/grf_cv3d.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/amiga/dev/grf_cv.c
diff -u src/sys/arch/amiga/dev/grf_cv.c:1.58 src/sys/arch/amiga/dev/grf_cv.c:1.59
--- src/sys/arch/amiga/dev/grf_cv.c:1.58	Thu Nov 12 12:01:53 2015
+++ src/sys/arch/amiga/dev/grf_cv.c	Mon Nov 16 21:24:06 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: grf_cv.c,v 1.58 2015/11/12 12:01:53 phx Exp $ */
+/*	$NetBSD: grf_cv.c,v 1.59 2015/11/16 21:24:06 phx Exp $ */
 
 /*
  * Copyright (c) 1995 Michael Teske
@@ -33,7 +33,7 @@
 #include "opt_amigacons.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: grf_cv.c,v 1.58 2015/11/12 12:01:53 phx Exp $");
+__KERNEL_RCSID(0, "$NetBSD: grf_cv.c,v 1.59 2015/11/16 21:24:06 phx Exp $");
 
 #include "grfcv.h"
 #include "ite.h"
@@ -543,8 +543,10 @@ grfcvattach(device_t parent, device_t se
 		gp->g_defaultscr = &cv_defaultscreen;
 		gp->g_scrlist = &cv_screenlist;
 #else
+#if NITE > 0
 		grfcv_iteinit(gp);
 #endif
+#endif /* NWSDISPLAY > 0 */
 		(void)cv_load_mon(gp, &cvconsole_mode);
 #endif
 	}
@@ -2387,7 +2389,7 @@ cv_wscopyrows(void *c, int srcrow, int d
 	gp = scr->scr_cookie;
 	src = dst = gp->g_fbkva;
 	n = ri->ri_cols * nrows;
-	if (src < dst) {
+	if (srcrow < dstrow) {
 		/* need to copy backwards */
 		src += gp->g_rowoffset[srcrow + nrows] << 1;
 		dst += gp->g_rowoffset[dstrow + nrows] << 1;
@@ -2485,7 +2487,7 @@ cv_wsioctl(void *v, void *vs, u_long cmd
 		return 0;
 
 	case WSDISPLAYIO_SVIDEO:
-		return cv_blank(gp, *(u_int *)data == WSDISPLAYIO_VIDEO_OFF);
+		return cv_blank(gp, *(u_int *)data == WSDISPLAYIO_VIDEO_ON);
 
 	case WSDISPLAYIO_SMODE:
 		if ((*(int *)data) != gp->g_wsmode) {
@@ -2525,34 +2527,34 @@ cv_get_fbinfo(struct grf_softc *gp, stru
 	md = monitor_current;
 	abits = 0;
 
-	fbi->fbi_width = md->disp_width;
-	fbi->fbi_height = md->disp_height;
-	fbi->fbi_bitsperpixel = md->depth;
-
 	switch (md->depth) {
 	case 8:
-		fbi->fbi_stride = md->disp_width;
+		fbi->fbi_bitsperpixel = 8;
 		rbits = gbits = bbits = 6;  /* keep gcc happy */
 		break;
 	case 15:
-		fbi->fbi_stride = md->disp_width * 2;
+		fbi->fbi_bitsperpixel = 16;
 		rbits = gbits = bbits = 5;
 		break;
 	case 16:
-		fbi->fbi_stride = md->disp_width * 2;
+		fbi->fbi_bitsperpixel = 16;
 		rbits = bbits = 5;
 		gbits = 6;
 		break;
 	case 32:
 		abits = 8;
 	case 24:
-		fbi->fbi_stride = md->disp_width * 4;
+		fbi->fbi_bitsperpixel = 32;
 		rbits = gbits = bbits = 8;
 		break;
 	default:
 		return EINVAL;
 	}
 
+	fbi->fbi_stride = (fbi->fbi_bitsperpixel / 8) * md->disp_width;
+	fbi->fbi_width = md->disp_width;
+	fbi->fbi_height = md->disp_height;
+
 	if (md->depth > 8) {
 		fbi->fbi_pixeltype = WSFB_RGB;
 		fbi->fbi_subtype.fbi_rgbmasks.red_offset = bbits + gbits;

Index: src/sys/arch/amiga/dev/grf_cv3d.c
diff -u src/sys/arch/amiga/dev/grf_cv3d.c:1.32 src/sys/arch/amiga/dev/grf_cv3d.c:1.33
--- src/sys/arch/amiga/dev/grf_cv3d.c:1.32	Thu Nov 12 12:01:53 2015
+++ src/sys/arch/amiga/dev/grf_cv3d.c	Mon Nov 16 21:24:06 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: grf_cv3d.c,v 1.32 2015/11/12 12:01:53 phx Exp $ */
+/*	$NetBSD: grf_cv3d.c,v 1.33 2015/11/16 21:24:06 phx Exp $ */
 
 /*
  * Copyright (c) 1995 Michael Teske
@@ -33,11 +33,11 @@
 #include "opt_amigacons.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: grf_cv3d.c,v 1.32 2015/11/12 12:01:53 phx Exp $");
+__KERNEL_RCSID(0, "$NetBSD: grf_cv3d.c,v 1.33 2015/11/16 21:24:06 phx Exp $");
 
+#include "grfcv3d.h"
 #include "ite.h"
 #include "wsdisplay.h"
-#include "grfcv3d.h"
 #if NGRFCV3D > 0
 
 /*
@@ -493,7 +493,9 @@ grfcv3dattach(device_t parent, device_t 
 		gp->g_defaultscr = &cv3d_defaultscreen;
 		gp->g_scrlist = &cv3d_screenlist;
 #else
+#if NITE > 0
 		grfcv3d_iteinit(gp);
+#endif
 #endif /* NWSDISPLAY > 0 */
 		(void)cv3d_load_mon(gp, &cv3dconsole_mode);		
 #endif
@@ -2242,7 +2244,7 @@ cv3d_wscopyrows(void *c, int srcrow, int
 	gp = scr->scr_cookie;
 	src = dst = gp->g_fbkva;
 	n = ri->ri_cols * nrows;
-	if (src < dst) {
+	if (srcrow < dstrow) {
 		/* need to copy backwards */
 		src += gp->g_rowoffset[srcrow + nrows] << 1;
 		dst += gp->g_rowoffset[dstrow + nrows] << 1;
@@ -2340,7 +2342,7 @@ cv3d_wsioctl(void *v, void *vs, u_long c
 		return 0;
 
 	case WSDISPLAYIO_SVIDEO:
-		return cv3d_blank(gp, *(u_int *)data == WSDISPLAYIO_VIDEO_OFF);
+		return cv3d_blank(gp, *(u_int *)data == WSDISPLAYIO_VIDEO_ON);
 
 	case WSDISPLAYIO_SMODE:
 		if ((*(int *)data) != gp->g_wsmode) {
@@ -2380,34 +2382,34 @@ cv3d_get_fbinfo(struct grf_softc *gp, st
 	md = monitor_current;
 	abits = 0;
 
-	fbi->fbi_width = md->disp_width;
-	fbi->fbi_height = md->disp_height;
-	fbi->fbi_bitsperpixel = md->depth;
-
 	switch (md->depth) {
 	case 8:
-		fbi->fbi_stride = md->disp_width;
+		fbi->fbi_bitsperpixel = 8;
 		rbits = gbits = bbits = 6;  /* keep gcc happy */
 		break;
 	case 15:
-		fbi->fbi_stride = md->disp_width * 2;
+		fbi->fbi_bitsperpixel = 16;
 		rbits = gbits = bbits = 5;
 		break;
 	case 16:
-		fbi->fbi_stride = md->disp_width * 2;
+		fbi->fbi_bitsperpixel = 16;
 		rbits = bbits = 5;
 		gbits = 6;
 		break;
 	case 32:
 		abits = 8;
 	case 24:
-		fbi->fbi_stride = md->disp_width * 4;
+		fbi->fbi_bitsperpixel = 32;
 		rbits = gbits = bbits = 8;
 		break;
 	default:
 		return EINVAL;
 	}
 
+	fbi->fbi_stride = (fbi->fbi_bitsperpixel / 8) * md->disp_width;
+	fbi->fbi_width = md->disp_width;
+	fbi->fbi_height = md->disp_height;
+
 	if (md->depth > 8) {
 		fbi->fbi_pixeltype = WSFB_RGB;
 		fbi->fbi_subtype.fbi_rgbmasks.red_offset = bbits + gbits;

Reply via email to