Module Name: xsrc
Committed By: macallan
Date: Tue Oct 22 08:46:08 UTC 2024
Modified Files:
xsrc/external/mit/xf86-video-ngle/dist/src: ngle_accel.c ngle_driver.c
Log Message:
add HCRX support
To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 \
xsrc/external/mit/xf86-video-ngle/dist/src/ngle_accel.c
cvs rdiff -u -r1.3 -r1.4 \
xsrc/external/mit/xf86-video-ngle/dist/src/ngle_driver.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: xsrc/external/mit/xf86-video-ngle/dist/src/ngle_accel.c
diff -u xsrc/external/mit/xf86-video-ngle/dist/src/ngle_accel.c:1.2 xsrc/external/mit/xf86-video-ngle/dist/src/ngle_accel.c:1.3
--- xsrc/external/mit/xf86-video-ngle/dist/src/ngle_accel.c:1.2 Tue Oct 22 07:42:15 2024
+++ xsrc/external/mit/xf86-video-ngle/dist/src/ngle_accel.c Tue Oct 22 08:46:07 2024
@@ -21,7 +21,7 @@
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-/* $NetBSD: ngle_accel.c,v 1.2 2024/10/22 07:42:15 macallan Exp $ */
+/* $NetBSD: ngle_accel.c,v 1.3 2024/10/22 08:46:07 macallan Exp $ */
#include <sys/types.h>
#include <dev/ic/stireg.h>
@@ -98,7 +98,7 @@ NGLEWaitFifo(NGLEPtr fPtr, int slots)
}
static Bool
-NGLEPrepareCopy
+NGLEPrepareCopy_EG
(
PixmapPtr pSrcPixmap,
PixmapPtr pDstPixmap,
@@ -130,6 +130,40 @@ NGLEPrepareCopy
return TRUE;
}
+static Bool
+NGLEPrepareCopy_HCRX
+(
+ PixmapPtr pSrcPixmap,
+ PixmapPtr pDstPixmap,
+ int xdir,
+ int ydir,
+ int alu,
+ Pixel planemask
+)
+{
+ ScrnInfoPtr pScrn = xf86Screens[pDstPixmap->drawable.pScreen->myNum];
+ NGLEPtr fPtr = NGLEPTR(pScrn);
+ int srcpitch = exaGetPixmapPitch(pSrcPixmap);
+ int srcoff = exaGetPixmapOffset(pSrcPixmap);
+
+ ENTER;
+
+ DBGMSG(X_ERROR, "%s %d %d\n", __func__, srcoff, srcpitch);
+ fPtr->offset = srcoff / srcpitch;
+ NGLEWaitMarker(pDstPixmap->drawable.pScreen, 0);
+ /* XXX HCRX needs ifferent values here */
+ NGLEWrite4(fPtr, NGLE_REG_10,
+ BA(FractDcd, Otc24, Ots08, AddrLong, 0, BINapp0F8, 0));
+ NGLEWrite4(fPtr, NGLE_REG_14, IBOvals(RopSrc, 0, BitmapExtent32, 0, DataDynamic, MaskOtc,
+ 0, 0));
+ NGLEWrite4(fPtr, NGLE_REG_13, planemask);
+
+ fPtr->hwmode = HW_BLIT;
+
+ LEAVE;
+ return TRUE;
+}
+
static void
NGLECopy
(
@@ -165,7 +199,7 @@ NGLEDoneCopy(PixmapPtr pDstPixmap)
}
static Bool
-NGLEPrepareSolid(
+NGLEPrepareSolid_EG(
PixmapPtr pPixmap,
int alu,
Pixel planemask,
@@ -193,6 +227,35 @@ NGLEPrepareSolid(
return TRUE;
}
+static Bool
+NGLEPrepareSolid_HCRX(
+ PixmapPtr pPixmap,
+ int alu,
+ Pixel planemask,
+ Pixel fg)
+{
+ ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum];
+ NGLEPtr fPtr = NGLEPTR(pScrn);
+
+ ENTER;
+ NGLEWaitFifo(fPtr, 4);
+ /* plane mask */
+ NGLEWrite4(fPtr, NGLE_REG_13, planemask);
+ /* bitmap op */
+ NGLEWrite4(fPtr, NGLE_REG_14,
+ IBOvals(alu, 0, BitmapExtent32, 0, DataDynamic, MaskOtc, 1, 0));
+
+ /* XXX HCRX needs different values here */
+ /* dst bitmap access */
+ NGLEWrite4(fPtr, NGLE_REG_11,
+ BA(FractDcd, Otc32, OtsIndirect, AddrLong, 0, BINapp0F8, 0));
+ NGLEWrite4(fPtr, NGLE_REG_35, fg);
+ fPtr->hwmode = HW_FILL;
+
+ LEAVE;
+ return TRUE;
+}
+
static void
NGLESolid(
PixmapPtr pPixmap,
@@ -246,7 +309,7 @@ NGLESolid(
}
Bool
-NGLEPrepareAccess(PixmapPtr pPixmap, int index)
+NGLEPrepareAccess_EG(PixmapPtr pPixmap, int index)
{
ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum];
NGLEPtr fPtr = NGLEPTR(pScrn);
@@ -254,7 +317,8 @@ NGLEPrepareAccess(PixmapPtr pPixmap, int
if (fPtr->hwmode == HW_FB) return TRUE;
NGLEWaitMarker(pPixmap->drawable.pScreen, 0);
- NGLEWrite4(fPtr, NGLE_REG_10, fPtr->fbacc);
+ NGLEWrite4(fPtr, NGLE_REG_10,
+ BA(IndexedDcd, Otc04, Ots08, AddrByte, 0, BINapp0I, 0));
NGLEWrite4(fPtr, NGLE_REG_14, 0x83000300);
NGLEWrite4(fPtr, NGLE_REG_13, 0xff);
NGLEWaitMarker(pPixmap->drawable.pScreen, 0);
@@ -264,6 +328,24 @@ NGLEPrepareAccess(PixmapPtr pPixmap, int
}
Bool
+NGLEPrepareAccess_HCRX(PixmapPtr pPixmap, int index)
+{
+ ScrnInfoPtr pScrn = xf86Screens[pPixmap->drawable.pScreen->myNum];
+ NGLEPtr fPtr = NGLEPTR(pScrn);
+
+ if (fPtr->hwmode == HW_FB) return TRUE;
+
+ NGLEWaitMarker(pPixmap->drawable.pScreen, 0);
+ NGLEWrite4(fPtr, NGLE_REG_10,
+ BA(FractDcd, Otc24, Ots08, AddrLong, 0, BINapp0F8, 0));
+ NGLEWrite4(fPtr, NGLE_REG_14, 0x83000300);
+ NGLEWrite4(fPtr, NGLE_REG_13, 0xffffffff);
+ NGLEWaitMarker(pPixmap->drawable.pScreen, 0);
+ NGLEWrite1(fPtr, NGLE_REG_16b1, 1);
+ fPtr->hwmode = HW_FB;
+ return TRUE;
+}
+Bool
NGLEInitAccel(ScreenPtr pScreen)
{
ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
@@ -296,13 +378,26 @@ NGLEInitAccel(ScreenPtr pScreen)
fPtr->hwmode = -1;
pExa->WaitMarker = NGLEWaitMarker;
- pExa->PrepareSolid = NGLEPrepareSolid;
pExa->Solid = NGLESolid;
pExa->DoneSolid = NGLEDoneCopy;
- pExa->PrepareCopy = NGLEPrepareCopy;
pExa->Copy = NGLECopy;
pExa->DoneCopy = NGLEDoneCopy;
- pExa->PrepareAccess = NGLEPrepareAccess;
+ switch (fPtr->gid) {
+ case STI_DD_EG:
+ pExa->PrepareCopy = NGLEPrepareCopy_EG;
+ pExa->PrepareSolid = NGLEPrepareSolid_EG;
+ pExa->PrepareAccess = NGLEPrepareAccess_EG;
+ break;
+ case STI_DD_HCRX:
+ pExa->PrepareCopy = NGLEPrepareCopy_HCRX;
+ pExa->PrepareSolid = NGLEPrepareSolid_HCRX;
+ pExa->PrepareAccess = NGLEPrepareAccess_HCRX;
+ break;
+ default:
+ xf86Msg(X_ERROR,
+ "unsupported dvice GID %08x\n", fPtr->gid);
+ return FALSE;
+ }
NGLEWaitMarker(pScreen, 0);
return exaDriverInit(pScreen, pExa);
Index: xsrc/external/mit/xf86-video-ngle/dist/src/ngle_driver.c
diff -u xsrc/external/mit/xf86-video-ngle/dist/src/ngle_driver.c:1.3 xsrc/external/mit/xf86-video-ngle/dist/src/ngle_driver.c:1.4
--- xsrc/external/mit/xf86-video-ngle/dist/src/ngle_driver.c:1.3 Tue Oct 22 07:42:15 2024
+++ xsrc/external/mit/xf86-video-ngle/dist/src/ngle_driver.c Tue Oct 22 08:46:07 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: ngle_driver.c,v 1.3 2024/10/22 07:42:15 macallan Exp $ */
+/* $NetBSD: ngle_driver.c,v 1.4 2024/10/22 08:46:07 macallan Exp $ */
/*
* Copyright (c) 2024 Michael Lorenz
* All rights reserved.
@@ -378,6 +378,14 @@ NGLEPreInit(ScrnInfoPtr pScrn, int flags
/* XXX BINovly if in 8 bit */
fPtr->buf = BINapp0F8;
fPtr->fbacc = BA(IndexedDcd, Otc04, Ots08, AddrLong, 0, fPtr->buf, 0);
+ /*
+ * XXX
+ * we don't know yet how much usable video memory we
+ * have but EXA gets cranky if there is no off screen
+ * memory at all, so we give it one line and cross
+ * fingers
+ */
+ fPtr->fbi.fbi_fbsize += 8192;
break;
}
xf86Msg(X_ERROR, "gid %08x fb access %08x\n", fPtr->gid, fPtr->fbacc);