Source-Changes-HG archive

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

[src/trunk]: src/sys/dev/sbus provide an endian-flipped view of the framebuff...



details:   https://anonhg.NetBSD.org/src/rev/9454f38c0c8e
branches:  trunk
changeset: 1025543:9454f38c0c8e
user:      macallan <macallan%NetBSD.org@localhost>
date:      Thu Nov 11 19:37:30 2021 +0000

description:
provide an endian-flipped view of the framebuffer via mmap() if we know how
for now this is sparc64 only

diffstat:

 sys/dev/sbus/mgx.c    |  24 ++++++++++++++++++++----
 sys/dev/sbus/mgxreg.h |   7 ++++---
 2 files changed, 24 insertions(+), 7 deletions(-)

diffs (81 lines):

diff -r 2a1302838e2f -r 9454f38c0c8e sys/dev/sbus/mgx.c
--- a/sys/dev/sbus/mgx.c        Thu Nov 11 17:32:46 2021 +0000
+++ b/sys/dev/sbus/mgx.c        Thu Nov 11 19:37:30 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: mgx.c,v 1.19 2021/10/31 05:31:12 macallan Exp $ */
+/*     $NetBSD: mgx.c,v 1.20 2021/11/11 19:37:30 macallan Exp $ */
 
 /*-
  * Copyright (c) 2014 Michael Lorenz
@@ -29,7 +29,7 @@
 /* a console driver for the SSB 4096V-MGX graphics card */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mgx.c,v 1.19 2021/10/31 05:31:12 macallan Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mgx.c,v 1.20 2021/11/11 19:37:30 macallan Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1112,11 +1112,19 @@
 {
        struct vcons_data *vd = v;
        struct mgx_softc *sc = vd->cookie;
+       uint32_t flags = BUS_SPACE_MAP_LINEAR;
+
+#ifdef BUS_SPACE_MAP_LITTLE
+       if (offset & MGX_FLIPOFFSET) {
+               offset &= ~MGX_FLIPOFFSET;
+               flags |= BUS_SPACE_MAP_LITTLE;
+       }
+#endif
 
        /* regular fb mapping at 0 */
        if ((offset >= 0) && (offset < sc->sc_fbsize)) {
                return bus_space_mmap(sc->sc_tag, sc->sc_paddr,
-                   offset, prot, BUS_SPACE_MAP_LINEAR);
+                   offset, prot, flags);
        }
 
        /*
@@ -1262,11 +1270,19 @@
 mgxmmap(dev_t dev, off_t offset, int prot)
 {
        struct mgx_softc *sc = device_lookup_private(&mgx_cd, minor(dev));
+       uint32_t flags = BUS_SPACE_MAP_LINEAR;
+
+#ifdef BUS_SPACE_MAP_LITTLE
+       if (offset & MGX_FLIPOFFSET) {
+               offset &= ~MGX_FLIPOFFSET;
+               flags |= BUS_SPACE_MAP_LITTLE;
+       }
+#endif
 
        /* regular fb mapping at 0 */
        if ((offset >= 0) && (offset < sc->sc_fbsize)) {
                return bus_space_mmap(sc->sc_tag, sc->sc_paddr,
-                   offset, prot, BUS_SPACE_MAP_LINEAR);
+                   offset, prot, flags);
        }
 
        /*
diff -r 2a1302838e2f -r 9454f38c0c8e sys/dev/sbus/mgxreg.h
--- a/sys/dev/sbus/mgxreg.h     Thu Nov 11 17:32:46 2021 +0000
+++ b/sys/dev/sbus/mgxreg.h     Thu Nov 11 19:37:30 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: mgxreg.h,v 1.6 2021/10/30 05:37:39 macallan Exp $ */
+/*     $NetBSD: mgxreg.h,v 1.7 2021/11/11 19:37:30 macallan Exp $ */
 
 /* register definitions based on OpenBSD's atxxreg.h: */
 
@@ -30,8 +30,9 @@
 #ifndef MGX_REG_H
 #define MGX_REG_H
 
-#define MGX_FBOFFSET  0x00000000
-#define MGX_BLTOFFSET 0x00800000
+#define MGX_FBOFFSET   0x00000000
+#define MGX_BLTOFFSET  0x00800000
+#define MGX_FLIPOFFSET 0x01000000
 
 #define VGA_BASE 0x3c0
 #define CRTC_INDEX     0x3d4



Home | Main Index | Thread Index | Old Index