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