Source-Changes-HG archive

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

[src/trunk]: src add driver for Permedia 3 based graphics devices



details:   https://anonhg.NetBSD.org/src/rev/0f262fe8e1e8
branches:  trunk
changeset: 349019:0f262fe8e1e8
user:      macallan <macallan%NetBSD.org@localhost>
date:      Sun Nov 20 16:55:18 2016 +0000

description:
add driver for Permedia 3 based graphics devices
from Naruaki Etomi, via PR 49518

diffstat:

 distrib/sets/lists/man/mi    |     5 +-
 share/man/man4/Makefile      |     4 +-
 share/man/man4/pm3fb.4       |    59 +
 sys/arch/alpha/conf/GENERIC  |     5 +-
 sys/arch/macppc/conf/GENERIC |     5 +-
 sys/dev/pci/pm3fb.c          |  1304 ++++++++++++++++++++++++++++++++++++++++++
 sys/dev/pci/pm3reg.h         |   309 +++++++++
 7 files changed, 1684 insertions(+), 7 deletions(-)

diffs (truncated from 1787 to 300 lines):

diff -r b8f71d141c7a -r 0f262fe8e1e8 distrib/sets/lists/man/mi
--- a/distrib/sets/lists/man/mi Sun Nov 20 16:13:03 2016 +0000
+++ b/distrib/sets/lists/man/mi Sun Nov 20 16:55:18 2016 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1538 2016/10/29 17:12:20 kamil Exp $
+# $NetBSD: mi,v 1.1539 2016/11/20 16:55:18 macallan Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -1531,6 +1531,7 @@
 ./usr/share/man/cat4/piixpm.0                  man-sys-catman          .cat
 ./usr/share/man/cat4/pim.0                     man-sys-catman          .cat
 ./usr/share/man/cat4/plip.0                    man-sys-catman          .cat
+./usr/share/man/cat4/pm3fb.0                   man-sys-catman          .cat
 ./usr/share/man/cat4/pmax/asc.0                        man-sys-catman          .cat
 ./usr/share/man/cat4/pmax/autoconf.0           man-sys-catman          .cat
 ./usr/share/man/cat4/pmax/dc.0                 man-obsolete            obsolete
@@ -4578,6 +4579,7 @@
 ./usr/share/man/html4/piixpm.html              man-sys-htmlman         html
 ./usr/share/man/html4/pim.html                 man-sys-htmlman         html
 ./usr/share/man/html4/plip.html                        man-sys-htmlman         html
+./usr/share/man/html4/pm3fb.html               man-sys-htmlman         html
 ./usr/share/man/html4/pmax/asc.html            man-sys-htmlman         html
 ./usr/share/man/html4/pmax/autoconf.html       man-sys-htmlman         html
 ./usr/share/man/html4/pmax/ibus.html           man-sys-htmlman         html
@@ -7497,6 +7499,7 @@
 ./usr/share/man/man4/piixpm.4                  man-sys-man             .man
 ./usr/share/man/man4/pim.4                     man-sys-man             .man
 ./usr/share/man/man4/plip.4                    man-sys-man             .man
+./usr/share/man/man4/pm3fb.4                   man-sys-man             .man
 ./usr/share/man/man4/pmax/asc.4                        man-sys-man             .man
 ./usr/share/man/man4/pmax/autoconf.4           man-sys-man             .man
 ./usr/share/man/man4/pmax/dc.4                 man-obsolete            obsolete
diff -r b8f71d141c7a -r 0f262fe8e1e8 share/man/man4/Makefile
--- a/share/man/man4/Makefile   Sun Nov 20 16:13:03 2016 +0000
+++ b/share/man/man4/Makefile   Sun Nov 20 16:55:18 2016 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: Makefile,v 1.630 2016/10/02 22:44:30 jdolecek Exp $
+#      $NetBSD: Makefile,v 1.631 2016/11/20 16:55:18 macallan Exp $
 #      @(#)Makefile    8.1 (Berkeley) 6/18/93
 
 MAN=   aac.4 ac97.4 acardide.4 aceride.4 acphy.4 \
@@ -49,7 +49,7 @@
        oak.4 oosiop.4 opl.4 options.4 optiide.4 osiop.4 otus.4 \
        pad.4 pas.4 pcdisplay.4 pcf8563rtc.4 pciide.4 pckbc.4 pckbd.4 pcn.4 \
        pcppi.4 pcscp.4 pcweasel.4 pdcide.4 pdcsata.4 piixide.4 piixpcib.4 \
-       piixpm.4 pim.4 plip.4 pms.4 pmu.4 pnaphy.4 ppbus.4 ppp.4 pppoe.4 \
+       piixpm.4 pim.4 plip.4 pm3fb.4 pms.4 pmu.4 pnaphy.4 ppbus.4 ppp.4 pppoe.4 \
        pseye.4 ptcd.4 ptm.4 pty.4 puc.4 pud.4 puffs.4 pwdog.4 px.4 pxg.4 \
        qe.4 qec.4 qsphy.4 \
        raid.4 ral.4 ray.4 rcons.4 rdcphy.4 re.4 rgephy.4 rlphy.4 \
diff -r b8f71d141c7a -r 0f262fe8e1e8 share/man/man4/pm3fb.4
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/share/man/man4/pm3fb.4    Sun Nov 20 16:55:18 2016 +0000
@@ -0,0 +1,59 @@
+.\" Copyright (c) 2015 Naruaki Etomi
+.\" All rights reserved.
+.\"
+.\" 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.
+.\"
+.Dd January 1, 2015
+.Dt PM3FB 4
+.Os
+.Sh NAME
+.Nm pm3fb
+.Nd 3Dlabs Permedia 3 / Oxygen VX1 / Proformance 3 framebuffer driver
+.Sh SYNOPSIS
+.Cd "pm3fb* at pci?"
+.Cd "wsdisplay* at pm3fb?"
+.Sh DESCRIPTION
+The
+.Nm
+driver provides support for the 3Dlabs Permedia 3 / Oxygen VX1 / Proformance 3 series of
+graphics cards and provides an interface for machine independent
+.Xr wscons 4
+driver.
+.Pp
+Currently
+.Nm
+does not support Anti-alias font rendering and OpenLDI video interface.
+However, it is capable of changing the resolution and uses DDC2 to
+pick an appropriate video mode.
+.Pp
+A 2D graphics engine is used to accelerate scrolling, rectangle fills
+and Bitmap font rendering.
+.Sh SEE ALSO
+.Xr pci 4 ,
+.Xr wscons 4 ,
+.Xr wsdisplay 4
+.Sh AUTHORS
+.An -nosplit
+The
+.Nm
+driver was written by
+.An Naruaki Etomi .
diff -r b8f71d141c7a -r 0f262fe8e1e8 sys/arch/alpha/conf/GENERIC
--- a/sys/arch/alpha/conf/GENERIC       Sun Nov 20 16:13:03 2016 +0000
+++ b/sys/arch/alpha/conf/GENERIC       Sun Nov 20 16:55:18 2016 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: GENERIC,v 1.369 2016/10/15 09:57:51 flxd Exp $
+# $NetBSD: GENERIC,v 1.370 2016/11/20 16:55:18 macallan Exp $
 #
 # This machine description file is used to generate the default NetBSD
 # kernel.
@@ -19,7 +19,7 @@
 
 options        INCLUDE_CONFIG_FILE     # embed config file in kernel binary
 
-ident          "GENERIC-$Revision: 1.369 $"
+ident          "GENERIC-$Revision: 1.370 $"
 
 maxusers 32
 
@@ -363,6 +363,7 @@
 pcn*   at      pci? dev ? function ?           # AMD PCnet-PCI Ethernet
 pcscp* at      pci? dev ? function ?           # AMD Am53c974 PCscsi-PCI
 pm2fb* at      pci? dev ? function ?           # 3Dlabs Permedia 2 Graphics
+pm3fb* at      pci? dev ? function ?           # 3Dlabs Permedia 3 Graphics
 ppb*   at      pci? dev ? function ?           # PCI-PCI Bridges
 puc*   at      pci? dev ? function ?           # PCI "universal" comm. cards
 radeonfb* at   pci? dev ? function ?           # ATI/AMD Radeon Graphics
diff -r b8f71d141c7a -r 0f262fe8e1e8 sys/arch/macppc/conf/GENERIC
--- a/sys/arch/macppc/conf/GENERIC      Sun Nov 20 16:13:03 2016 +0000
+++ b/sys/arch/macppc/conf/GENERIC      Sun Nov 20 16:55:18 2016 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: GENERIC,v 1.322 2016/05/28 22:24:51 sevan Exp $
+# $NetBSD: GENERIC,v 1.323 2016/11/20 16:55:18 macallan Exp $
 #
 # GENERIC machine description file
 # 
@@ -22,7 +22,7 @@
 
 options        INCLUDE_CONFIG_FILE     # embed config file in kernel binary
 
-#ident                 "GENERIC-$Revision: 1.322 $"
+#ident                 "GENERIC-$Revision: 1.323 $"
 
 maxusers       32
 
@@ -291,6 +291,7 @@
 chipsfb*       at pci? function ?      # C&T 65550
 gffb*          at pci? function ?      # NVIDIA GeForce2 MX
 machfb*                at pci? function ?      # ATI Mach 64, Rage, Rage Pro
+pm3fb*         at pci? function ?      # 3Dlabs Permedia 3 Graphics
 tdvfb*         at pci? function ?      # 3Dfx Voodoo2
 r128fb*                at pci? function ?      # ATI Rage 128
 voodoofb*      at pci? function ?      # 3Dfx Voodoo3 
diff -r b8f71d141c7a -r 0f262fe8e1e8 sys/dev/pci/pm3fb.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/dev/pci/pm3fb.c       Sun Nov 20 16:55:18 2016 +0000
@@ -0,0 +1,1304 @@
+/*
+ * Copyright (c) 2015 Naruaki Etomi
+ * All rights reserved.
+ *
+ * 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.
+ */
+
+/*
+ * A console driver for Permedia 3 graphics controllers
+ * most of the following was adapted from the xf86-video-glint driver's
+ * pm3_accel.c, pm3_dac.c and pm2fb framebuffer console driver
+ */
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/device.h>
+#include <sys/malloc.h>
+#include <sys/lwp.h>
+#include <sys/kauth.h>
+#include <sys/atomic.h>
+
+#include <dev/videomode/videomode.h>
+
+#include <dev/pci/pcivar.h>
+#include <dev/pci/pcireg.h>
+#include <dev/pci/pcidevs.h>
+#include <dev/pci/pciio.h>
+#include <dev/pci/pm3reg.h>
+
+#include <dev/wscons/wsdisplayvar.h>
+#include <dev/wscons/wsconsio.h>
+#include <dev/wsfont/wsfont.h>
+#include <dev/rasops/rasops.h>
+#include <dev/wscons/wsdisplay_vconsvar.h>
+#include <dev/pci/wsdisplay_pci.h>
+
+#include <dev/i2c/i2cvar.h>
+#include <dev/i2c/i2c_bitbang.h>
+#include <dev/i2c/ddcvar.h>
+#include <dev/videomode/videomode.h>
+#include <dev/videomode/edidvar.h>
+#include <dev/videomode/edidreg.h>
+
+struct pm3fb_softc {
+       device_t sc_dev;
+
+       pci_chipset_tag_t sc_pc;
+       pcitag_t sc_pcitag;
+
+       bus_space_tag_t sc_memt;
+       bus_space_tag_t sc_iot;
+
+       bus_space_handle_t sc_regh;
+       bus_addr_t sc_fb, sc_reg;
+       bus_size_t sc_fbsize, sc_regsize;
+
+       int sc_width, sc_height, sc_depth, sc_stride;
+       int sc_locked;
+       struct vcons_screen sc_console_screen;
+       struct wsscreen_descr sc_defaultscreen_descr;
+       const struct wsscreen_descr *sc_screens[1];
+       struct wsscreen_list sc_screenlist;
+       struct vcons_data vd;
+       int sc_mode;
+       u_char sc_cmap_red[256];
+       u_char sc_cmap_green[256];
+       u_char sc_cmap_blue[256];
+       /* i2c stuff */
+       struct i2c_controller sc_i2c;
+       uint8_t sc_edid_data[128];
+       struct edid_info sc_ei;
+       const struct videomode *sc_videomode;
+};
+
+static int     pm3fb_match(device_t, cfdata_t, void *);
+static void    pm3fb_attach(device_t, device_t, void *);
+
+CFATTACH_DECL_NEW(pm3fb, sizeof(struct pm3fb_softc),
+    pm3fb_match, pm3fb_attach, NULL, NULL);
+
+extern const u_char rasops_cmap[768];
+
+static int     pm3fb_ioctl(void *, void *, u_long, void *, int, struct lwp *);
+static paddr_t pm3fb_mmap(void *, void *, off_t, int);
+static void    pm3fb_init_screen(void *, struct vcons_screen *, int, long *);
+
+static int     pm3fb_putcmap(struct pm3fb_softc *, struct wsdisplay_cmap *);
+static int     pm3fb_getcmap(struct pm3fb_softc *, struct wsdisplay_cmap *);
+static void    pm3fb_init_palette(struct pm3fb_softc *);
+static int     pm3fb_putpalreg(struct pm3fb_softc *, uint8_t, uint8_t, uint8_t, uint8_t);
+
+static void    pm3fb_init(struct pm3fb_softc *);
+static inline void pm3fb_wait(struct pm3fb_softc *, int);
+static void    pm3fb_flush_engine(struct pm3fb_softc *);
+static void    pm3fb_rectfill(struct pm3fb_softc *, int, int, int, int, uint32_t);
+static void    pm3fb_bitblt(void *, int, int, int, int, int, int, int);
+
+static void    pm3fb_cursor(void *, int, int, int);
+static void    pm3fb_putchar(void *, int, int, u_int, long);
+static void    pm3fb_copycols(void *, int, int, int, int);
+static void    pm3fb_erasecols(void *, int, int, int, long);
+static void    pm3fb_copyrows(void *, int, int, int);
+static void    pm3fb_eraserows(void *, int, int, long);
+
+struct wsdisplay_accessops pm3fb_accessops = {
+       pm3fb_ioctl,
+       pm3fb_mmap,
+       NULL,    /* alloc_screen */
+       NULL,    /* free_screen */
+       NULL,    /* show_screen */
+       NULL,    /* load_font */



Home | Main Index | Thread Index | Old Index