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);