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;