Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/amiga Add a driver for MNTMN VA2000.



details:   https://anonhg.NetBSD.org/src/rev/a44209b63bb2
branches:  trunk
changeset: 348069:a44209b63bb2
user:      rkujawa <rkujawa%NetBSD.org@localhost>
date:      Mon Oct 03 14:26:02 2016 +0000

description:
Add a driver for MNTMN VA2000.

Supports accelerated wsdisplay console and running X via wsfb driver.

diffstat:

 sys/arch/amiga/amiga/conf.c     |    9 +-
 sys/arch/amiga/conf/WSCONS      |    6 +-
 sys/arch/amiga/conf/files.amiga |    9 +-
 sys/arch/amiga/dev/mntva.c      |  623 ++++++++++++++++++++++++++++++++++++++++
 sys/arch/amiga/dev/mntvareg.h   |  106 ++++++
 sys/arch/amiga/dev/mntvavar.h   |   76 ++++
 sys/arch/amiga/dev/zbus.c       |    9 +-
 7 files changed, 831 insertions(+), 7 deletions(-)

diffs (truncated from 952 to 300 lines):

diff -r 6f60db56165a -r a44209b63bb2 sys/arch/amiga/amiga/conf.c
--- a/sys/arch/amiga/amiga/conf.c       Mon Oct 03 13:53:39 2016 +0000
+++ b/sys/arch/amiga/amiga/conf.c       Mon Oct 03 14:26:02 2016 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: conf.c,v 1.73 2011/12/15 14:25:12 phx Exp $    */
+/*     $NetBSD: conf.c,v 1.74 2016/10/03 14:26:02 rkujawa Exp $        */
 
 /*-
  * Copyright (c) 1991 The Regents of the University of California.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: conf.c,v 1.73 2011/12/15 14:25:12 phx Exp $");
+__KERNEL_RCSID(0, "$NetBSD: conf.c,v 1.74 2016/10/03 14:26:02 rkujawa Exp $");
 
 #include <sys/param.h>
 #include <sys/conf.h>
@@ -42,6 +42,7 @@
 #include "ser.h"
 #include "ite.h"
 #include "amidisplaycc.h"
+#include "mntva.h"
 #include "wsdisplay.h"
 
 /*
@@ -51,6 +52,7 @@
  * known algorithm unless we see a pressing need otherwise.
  */
 cons_decl(ser);
+cons_decl(mntva);
 cons_decl(grf);
 cons_decl(amidisplaycc_);
 cons_decl(ite);
@@ -59,6 +61,9 @@
 #if NSER > 0
        cons_init(ser),
 #endif
+#if NMNTVA > 0
+       cons_init(mntva),
+#endif
 #if NWSDISPLAY > 0
        { dev_init(grf,cnprobe), dev_init(grf,cninit) },
 #endif
diff -r 6f60db56165a -r a44209b63bb2 sys/arch/amiga/conf/WSCONS
--- a/sys/arch/amiga/conf/WSCONS        Mon Oct 03 13:53:39 2016 +0000
+++ b/sys/arch/amiga/conf/WSCONS        Mon Oct 03 14:26:02 2016 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: WSCONS,v 1.69 2015/11/16 21:25:34 phx Exp $
+# $NetBSD: WSCONS,v 1.70 2016/10/03 14:26:02 rkujawa Exp $
 
 # GENERIC with wscons(4)
 #
@@ -45,6 +45,9 @@
 no ite6                at grf6
 no ite7                at grf7
 
+mntva*          at zbus?                # MNTMN VA2000
+#options         MNTVA_CONSOLE
+
 # PCI framebuffers
 #genfb*                at pci?                 # CyberVisionPPC/BlizzardVisionPPC only
 voodoofb*      at pci?                 # 3Dfx Voodoo 3 in G-REX 
@@ -59,3 +62,4 @@
 
 pseudo-device  wsfont                  # wsfont(4) dynamic font loading support
 pseudo-device  wsmux                   # mouse & keyboard multiplexor
+
diff -r 6f60db56165a -r a44209b63bb2 sys/arch/amiga/conf/files.amiga
--- a/sys/arch/amiga/conf/files.amiga   Mon Oct 03 13:53:39 2016 +0000
+++ b/sys/arch/amiga/conf/files.amiga   Mon Oct 03 14:26:02 2016 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: files.amiga,v 1.177 2015/03/04 19:10:20 mlelstv Exp $
+#      $NetBSD: files.amiga,v 1.178 2016/10/03 14:26:02 rkujawa Exp $
 
 # maxpartitions must be first item in files.${ARCH}.newconf
 maxpartitions 16                       # NOTE THAT AMIGA IS SPECIAL!
@@ -20,6 +20,8 @@
 defflag        opt_amigacons.h         CV64CONSOLE CV3DCONSOLE TSENGCONSOLE
 defflag        opt_amigacons.h         SERCONSOLE
 
+defflag opt_mntva.h            MNTVA_CONSOLE
+
 defflag        opt_kfont.h             KFONT_CONS_ISO8859_1
 defflag        opt_kfont.h             KFONT_CONS_ISO8859_2
 
@@ -218,6 +220,11 @@
 file   arch/amiga/dev/grf_cv3d.c       grfcv3d needs-flag
 file   arch/amiga/dev/ite_cv3d.c       grfcv3d & ite
 
+# MNT VA2000
+device mntva: wsemuldisplaydev, rasops16, rasops32, vcons, videomode
+attach mntva at zbus
+file   arch/amiga/dev/mntva.c          mntva needs-flag
+
 # device defined in sys/conf/files
 # A2065, Ameristar, Ariadne ethernet cards
 attach le at zbus with le_zbus: le24
diff -r 6f60db56165a -r a44209b63bb2 sys/arch/amiga/dev/mntva.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/arch/amiga/dev/mntva.c        Mon Oct 03 14:26:02 2016 +0000
@@ -0,0 +1,623 @@
+/*     $NetBSD: mntva.c,v 1.1 2016/10/03 14:26:02 rkujawa Exp $        */
+
+/*
+ * Copyright (c) 2012, 2016 The NetBSD Foundation, Inc.                
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Lukas F. Hartmann.
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Radoslaw Kujawa.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: mntva.c,v 1.1 2016/10/03 14:26:02 rkujawa Exp $");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/device.h>
+#include <sys/endian.h>
+#include <sys/bus.h>
+#include <sys/cpu.h>
+#include <sys/conf.h>
+
+#include <dev/cons.h>
+
+#include <amiga/amiga/device.h>
+#include <amiga/amiga/isr.h>
+
+#include <amiga/dev/zbusvar.h>
+#include <amiga/dev/mntvavar.h>
+#include <amiga/dev/mntvareg.h>
+#include <dev/wsfb/genfbvar.h>
+
+#include "opt_amigacons.h"
+#include "opt_wsemul.h"
+#include "opt_mntva.h"
+#include "opt_wsfb.h"
+
+#include "mntva.h"
+
+/* #define MNTVA_DEBUG 1 */
+
+static int mntva_match(device_t, cfdata_t, void *);
+static void mntva_attach(device_t, device_t, void *);
+
+static uint16_t mntva_reg_read(struct mntva_softc *sc, uint32_t reg);
+static void mntva_reg_write(struct mntva_softc *sc, uint32_t reg, uint32_t val);
+
+static bool mntva_mode_set(struct mntva_softc *sc);
+
+static paddr_t mntva_mmap(void *v, void *vs, off_t offset, int prot);
+static int mntva_ioctl(void *v, void *vs, u_long cmd, void *data, int flag,
+    struct lwp *l);
+static void mntva_init_screen(void *cookie, struct vcons_screen *scr,
+    int existing, long *defattr);
+static void mntva_init_palette(struct mntva_softc *sc);
+/* blitter support */
+static void mntva_rectfill(struct mntva_softc *sc, int x, int y, int wi,
+    int he, uint32_t color);
+static void mntva_bitblt(struct mntva_softc *sc, int xs, int ys, int xd, 
+    int yd, int wi, int he);
+
+/* accelerated raster ops */
+static void mntva_eraserows(void *cookie, int row, int nrows, long fillattr);
+static void mntva_copyrows(void *cookie, int srcrow, int dstrow, int nrows);
+static void mntva_copycols(void *cookie, int row, int srccol, int dstcol, 
+    int ncols);
+static void mntva_erasecols(void *cookie, int row, int startcol, int ncols,
+    long fillattr);
+#if 0
+static void mntva_cursor(void *cookie, int on, int row, int col);
+#endif 
+
+/*
+ * XXX: these will be called by console handling code, shouldn't they be 
+ * included from somewhere else? 
+ */
+void mntvacninit(struct consdev *cd);
+void mntvacnprobe(struct consdev *cd);
+void mntvacnputc(dev_t cd, int ch);
+int mntvacngetc(dev_t cd);
+void mntvacnpollc(dev_t cd, int on);
+
+CFATTACH_DECL_NEW(mntva, sizeof(struct mntva_softc),
+    mntva_match, mntva_attach, NULL, NULL);
+
+struct wsdisplay_accessops mntva_accessops = {
+       mntva_ioctl,
+       mntva_mmap,
+       NULL,                   // alloc_screen 
+       NULL,                   // free_screen 
+       NULL,                   // show_screen 
+       NULL,                   // load_font 
+       NULL,                   // pollc 
+       NULL                    // scroll 
+};
+
+static int
+mntva_match(device_t parent, cfdata_t match, void *aux)
+{
+       struct zbus_args *zap = aux;
+
+       if (zap->manid == 0x6d6e && zap->prodid == 1) {
+#ifdef MNTVA_DEBUG
+               /* XXX: this might not work during console init? */
+               aprint_normal("mntva_match... success!\n"); 
+#endif /* MNTVA_DEBUG */
+               return 1;
+       }
+
+       return 0;
+}
+
+static void
+mntva_attach(device_t parent, device_t self, void *aux)
+{
+       struct mntva_softc *sc = device_private(self);
+       struct wsemuldisplaydev_attach_args ws_aa;
+       struct rasops_info *ri;
+       struct zbus_args *zap = aux;
+       long defattr;
+
+       sc->sc_isconsole = false;
+/* this should come from "opt_mntva.h" auto generated by kernel conf system */
+#ifdef MNTVA_CONSOLE
+       sc->sc_isconsole = true;
+#endif /* MNTVA_CONSOLE */
+
+       printf(": MNTMN VA2000");
+
+       if(sc->sc_isconsole)
+               printf(" (console)");
+
+       printf("\n");
+
+       sc->sc_dev = self;
+       sc->sc_memsize = MNTVA_FB_SIZE;
+
+       sc->sc_bst.base = (bus_addr_t) zap->va;
+       sc->sc_bst.absm = &amiga_bus_stride_1;
+       sc->sc_iot = &sc->sc_bst;
+
+       if (bus_space_map(sc->sc_iot, MNTVA_OFF_FB, sc->sc_memsize + 0x1000,
+           BUS_SPACE_MAP_LINEAR, &sc->sc_fbh)) {
+               aprint_error_dev(sc->sc_dev, "mapping framebuffer failed\n");
+               return;
+       }
+       if (bus_space_map(sc->sc_iot, MNTVA_OFF_REG, MNTVA_REG_SIZE , 0,
+           &sc->sc_regh)) {
+               aprint_error_dev(sc->sc_dev, "mapping registers failed\n");
+               return;
+       }
+
+       sc->sc_regpa = (bus_addr_t) kvtop((void*) sc->sc_regh);
+       sc->sc_fbpa = (bus_addr_t) kvtop((void*) sc->sc_fbh);
+
+       /* print the physical and virt addresses for registers and fb */
+       aprint_normal_dev(sc->sc_dev, 
+           "registers at pa/va 0x%08x/0x%08x, fb at pa/va 0x%08x/0x%08x\n",
+           (uint32_t) sc->sc_regpa,
+           (uint32_t) bus_space_vaddr(sc->sc_iot, sc->sc_regh), 
+           (uint32_t) sc->sc_fbpa,
+           (uint32_t) bus_space_vaddr(sc->sc_iot, sc->sc_fbh));
+
+       sc->sc_width = 1280;
+       sc->sc_height = 720;
+       sc->sc_bpp = 16;
+       sc->sc_linebytes = 4096;
+
+       aprint_normal_dev(sc->sc_dev, "%zu kB framebuffer memory present\n",
+           sc->sc_memsize / 1024);
+
+       aprint_normal_dev(sc->sc_dev, "setting %dx%d %d bpp resolution\n",
+           sc->sc_width, sc->sc_height, sc->sc_bpp);
+
+       mntva_mode_set(sc);
+



Home | Main Index | Thread Index | Old Index