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