Lines Matching defs:xl

79 	struct _XvMCLowLevel * xl);
129 #define MPEGIN(xl,reg) \
130 *((volatile CARD32 *)(((CARD8 *)(xl)->mmioAddress) + 0xc00 + (reg)))
235 #define BEGIN_RING_AGP(cb, xl, size) \
238 cb->flushFunc(cb, xl); \
251 #define BEGIN_HEADER5_AGP(cb, xl, index) \
253 BEGIN_RING_AGP(cb, xl, 8); \
260 #define BEGIN_HEADER6_AGP(cb, xl) \
262 BEGIN_RING_AGP(cb, xl, 8); \
268 #define BEGIN_HEADER5_DATA(cb, xl, size, index) \
271 cb->flushFunc(cb, xl); \
272 BEGIN_HEADER5_AGP(cb, xl, index); \
276 BEGIN_HEADER5_AGP((cb), xl, (index)); \
278 BEGIN_HEADER5_AGP((cb), xl, (index)); \
282 #define BEGIN_HEADER6_DATA(cb, xl, size) \
285 cb->flushFunc(cb, xl); \
286 BEGIN_HEADER6_AGP(cb, xl); \
289 BEGIN_HEADER6_AGP(cb, xl); \
292 BEGIN_HEADER6_AGP(cb, (xl)); \
308 #define LL_HW_LOCK(xl) \
310 DRM_LOCK((xl)->fd,(xl)->hwLock,*(xl)->drmcontext,0); \
312 #define LL_HW_UNLOCK(xl) \
314 DRM_UNLOCK((xl)->fd,(xl)->hwLock,*(xl)->drmcontext); \
536 XvMCLowLevel *xl = (XvMCLowLevel *) xlp;
538 LL_HW_LOCK(xl);
544 XvMCLowLevel *xl = (XvMCLowLevel *) xlp;
546 LL_HW_UNLOCK(xl);
560 XvMCLowLevel *xl = (XvMCLowLevel *) xlp;
562 xl->agpSync = val;
563 xl->agpSyncTimeStamp = timeStamp;
569 XvMCLowLevel *xl = (XvMCLowLevel *) xlp;
571 if (xl->use_agp) {
572 viaBlit(xl, 32, xl->tsOffset, 1, xl->tsOffset, 1, 1, 1, 0, 0,
573 VIABLIT_FILL, xl->curTimeStamp);
574 return xl->curTimeStamp++;
580 viaDMAWaitTimeStamp(XvMCLowLevel * xl, CARD32 timeStamp, int doSleep)
586 if (xl->use_agp && (xl->lastReadTimeStamp - timeStamp > (1 << 23))) {
593 while (((xl->lastReadTimeStamp = *xl->tsP) - timeStamp) > (1 << 23)) {
596 if (((xl->lastReadTimeStamp =
597 *xl->tsP) - timeStamp) > (1 << 23)) {
598 xl->errors |= LL_DMA_TIMEDOUT;
609 viaDMAInitTimeStamp(XvMCLowLevel * xl)
613 if (xl->use_agp) {
614 xl->tsMem.context = *(xl->drmcontext);
615 xl->tsMem.size = 64;
616 xl->tsMem.type = VIA_MEM_VIDEO;
617 if ((ret = drmCommandWriteRead(xl->fd, DRM_VIA_ALLOCMEM,
618 &xl->tsMem, sizeof(xl->tsMem))) < 0)
620 if (xl->tsMem.size != 64)
622 xl->tsOffset = (xl->tsMem.offset + 31) & ~31;
623 xl->tsP = (CARD32 *) xl->fbAddress + (xl->tsOffset >> 2);
624 xl->curTimeStamp = 1;
625 *xl->tsP = 0;
631 viaDMACleanupTimeStamp(XvMCLowLevel * xl)
634 if (!(xl->tsMem.size) || !xl->use_agp)
636 return drmCommandWrite(xl->fd, DRM_VIA_FREEMEM, &xl->tsMem,
637 sizeof(xl->tsMem));
641 viaMpegGetStatus(XvMCLowLevel * xl)
643 return MPEGIN(xl, 0x54);
647 viaMpegIsBusy(XvMCLowLevel * xl, CARD32 mask, CARD32 idle)
649 CARD32 tmp = viaMpegGetStatus(xl);
663 syncDMA(XvMCLowLevel * xl, unsigned int doSleep)
681 while (!(REGIN(xl, VIA_REG_STATUS) & VIA_VR_QUEUE_BUSY)) {
684 if (!(REGIN(xl, VIA_REG_STATUS) & VIA_VR_QUEUE_BUSY)) {
685 xl->errors |= LL_DMA_TIMEDOUT;
692 while (REGIN(xl, VIA_REG_STATUS) & VIA_CMD_RGTR_BUSY) {
695 if (REGIN(xl, VIA_REG_STATUS) & VIA_CMD_RGTR_BUSY) {
696 xl->errors |= LL_DMA_TIMEDOUT;
707 syncVideo(XvMCLowLevel * xl, unsigned int doSleep)
717 if ((VIDIN(xl, HQV_CONTROL | proReg) & (HQV_SW_FLIP | HQV_SUBPIC_FLIP))) {
722 if (drmCommandWriteRead(xl->fd, DRM_VIA_WAIT_IRQ, &irqw,
724 xl->errors |= LL_VIDEO_TIMEDOUT;
729 syncVideo(XvMCLowLevel * xl, unsigned int doSleep)
749 while ((VIDIN(xl,
753 if ((VIDIN(xl,
756 xl->errors |= LL_VIDEO_TIMEDOUT;
767 syncAccel(XvMCLowLevel * xl, unsigned int mode, unsigned int doSleep)
780 while (REGIN(xl, VIA_REG_STATUS) & mask) {
783 if (REGIN(xl, VIA_REG_STATUS) & mask) {
784 xl->errors |= LL_ACCEL_TIMEDOUT;
794 syncMpeg(XvMCLowLevel * xl, unsigned int mode, unsigned int doSleep)
822 while (viaMpegIsBusy(xl, busyMask, idleVal)) {
825 if (viaMpegIsBusy(xl, busyMask, idleVal)) {
826 xl->errors |= LL_DECODER_TIMEDOUT;
834 ret = viaMpegGetStatus(xl);
836 xl->errors |= ((ret & 0x70) >> 3);
842 pciFlush(ViaCommandBuffer * cb, XvMCLowLevel * xl)
851 if (xl->performLocking)
852 hwlLock(xl, 0);
853 if (((mode == LL_MODE_VIDEO) && (xl->videoBuf == &xl->agpBuf)) ||
855 syncDMA(xl, 0);
857 syncAccel(xl, mode, 0);
860 syncVideo(xl, 1);
863 syncMpeg(xl, mode, 0);
865 ret = drmCommandWrite(xl->fd, DRM_VIA_PCICMD, &b, sizeof(b));
866 if (xl->performLocking)
867 hwlUnlock(xl, 0);
869 xl->errors |= LL_PCI_COMMAND_ERR;
876 agpFlush(ViaCommandBuffer * cb, XvMCLowLevel * xl)
883 if (xl->use_agp) {
886 if (xl->agpSync) {
887 syncXvMCLowLevel(xl, LL_MODE_DECODER_IDLE, 1,
888 xl->agpSyncTimeStamp);
889 xl->agpSync = 0;
891 if (xl->performLocking)
892 hwlLock(xl, 0);
894 ret = drmCommandWrite(xl->fd, DRM_VIA_CMDBUFFER, &b, sizeof(b));
896 if (xl->performLocking)
897 hwlUnlock(xl, 0);
900 xl->errors |= LL_AGP_COMMAND_ERR;
915 if (xl->performLocking)
916 hwlLock(xl, 0);
917 if (((mode == LL_MODE_VIDEO) && (cb == &xl->agpBuf)) ||
919 syncDMA(xl, 0);
921 syncAccel(xl, mode, 0);
923 syncVideo(xl, 1);
925 syncMpeg(xl, mode, 0);
926 ret = drmCommandWrite(xl->fd, DRM_VIA_PCICMD, &b, sizeof(b));
927 if (xl->performLocking)
928 hwlUnlock(xl, 0);
930 xl->errors |= LL_PCI_COMMAND_ERR;
939 uploadHQVDeinterlace(XvMCLowLevel * xl, unsigned offset, HQVRegister * shadow,
944 ViaCommandBuffer *cb = &xl->agpBuf;
946 BEGIN_HEADER6_DATA(cb, xl, 9);
970 uploadHQVShadow(XvMCLowLevel * xl, unsigned offset, HQVRegister * shadow,
975 ViaCommandBuffer *cb = xl->videoBuf;
977 BEGIN_HEADER6_DATA(cb, xl, HQV_SHADOW_SIZE);
1008 XvMCLowLevel *xl = (XvMCLowLevel *) xlp;
1010 if (xl->pciBuf.pos)
1011 pciFlush(&xl->pciBuf, xl);
1012 if (xl->agpBuf.pos)
1013 agpFlush(&xl->agpBuf, xl);
1014 errors = xl->errors;
1017 xl->errors = 0;
1024 XvMCLowLevel *xl = (XvMCLowLevel *) xlp;
1026 if (xl->pciBuf.pos)
1027 pciFlush(&xl->pciBuf, xl);
1028 if ((!xl->use_agp && xl->agpBuf.pos))
1029 agpFlush(&xl->agpBuf, xl);
1037 XvMCLowLevel *xl = (XvMCLowLevel *) xlp;
1038 ViaCommandBuffer *cb = &xl->agpBuf;
1040 BEGIN_HEADER6_DATA(cb, xl, 1);
1049 XvMCLowLevel *xl = (XvMCLowLevel *) xlp;
1053 if (xl->videoBuf == &xl->agpBuf)
1054 syncDMA(xl, 1);
1055 syncVideo(xl, 1);
1056 uploadHQVShadow(xl, REG_HQV1_INDEX, hqvShadow, FALSE);
1057 xl->videoBuf->flushFunc(xl->videoBuf, xl);
1063 XvMCLowLevel *xl = (XvMCLowLevel *) xlp;
1069 if (xl->videoBuf == &xl->agpBuf)
1070 syncDMA(xl, 1);
1071 syncVideo(xl, 1);
1072 uploadHQVShadow(xl, REG_HQV1_INDEX, hqvShadow, TRUE);
1073 xl->videoBuf->flushFunc(xl->videoBuf, xl);
1080 XvMCLowLevel *xl = (XvMCLowLevel *) xlp;
1081 ViaCommandBuffer *cb = &xl->agpBuf;
1084 BEGIN_HEADER6_DATA(cb, xl, 2);
1097 XvMCLowLevel *xl = (XvMCLowLevel *) xlp;
1098 ViaCommandBuffer *cb = &xl->agpBuf;
1107 BEGIN_HEADER6_DATA(cb, xl, 72);
1191 XvMCLowLevel *xl = (XvMCLowLevel *) xlp;
1192 ViaCommandBuffer *cb = &xl->agpBuf;
1194 BEGIN_HEADER6_DATA(cb, xl, 99);
1231 XvMCLowLevel *xl = (XvMCLowLevel *) xlp;
1232 ViaCommandBuffer *cb = &xl->agpBuf;
1234 if (xl->errors & (LL_DECODER_TIMEDOUT |
1249 BEGIN_HEADER6_DATA(cb, xl, 2);
1262 BEGIN_HEADER5_DATA(cb, xl, (count - i), 0xca0);
1270 BEGIN_HEADER5_DATA(cb, xl, 3, 0xca0);
1286 XvMCLowLevel *xl = (XvMCLowLevel *) xlp;
1287 ViaCommandBuffer *cb = xl->videoBuf;
1289 if (xl->videoBuf == &xl->agpBuf)
1290 syncDMA(xl, 1);
1291 stride = VIDIN(xl, proReg | SUBP_CONTROL_STRIDE);
1293 BEGIN_HEADER6_DATA(cb, xl, 1);
1304 XvMCLowLevel *xl = (XvMCLowLevel *) xlp;
1306 ViaCommandBuffer *cb = xl->videoBuf;
1308 if (xl->videoBuf == &xl->agpBuf)
1309 syncDMA(xl, 1);
1311 BEGIN_HEADER6_DATA(cb, xl, VIA_SUBPIC_PALETTE_SIZE + 2);
1332 XvMCLowLevel *xl = (XvMCLowLevel *) xlp;
1333 ViaCommandBuffer *cb = &xl->agpBuf;
1370 BEGIN_RING_AGP(cb, xl, 20);
1418 XvMCLowLevel *xl = (XvMCLowLevel *) xlp;
1421 errors = xl->errors;
1422 xl->errors = 0;
1426 if ((mode & (LL_MODE_VIDEO | LL_MODE_3D)) || !xl->use_agp) {
1427 if (xl->performLocking)
1428 hwlLock(xl, 0);
1429 if ((xl->videoBuf == &xl->agpBuf) || (mode != LL_MODE_VIDEO))
1430 syncDMA(xl, doSleep);
1432 syncAccel(xl, mode, doSleep);
1434 syncVideo(xl, doSleep);
1435 if (xl->performLocking)
1436 hwlUnlock(xl, 0);
1438 viaDMAWaitTimeStamp(xl, timeStamp, doSleep);
1442 syncMpeg(xl, mode, doSleep);
1444 errors = xl->errors;
1445 xl->errors = 0;
1451 updateLowLevelBuf(XvMCLowLevel * xl, LowLevelBuffer * buf,
1459 size = stride * height + (xl->fbDepth >> 3);
1463 drmCommandWrite(xl->fd, DRM_VIA_FREEMEM, mem, sizeof(*mem));
1464 mem->context = *(xl->drmcontext);
1468 if (((ret = drmCommandWriteRead(xl->fd, DRM_VIA_ALLOCMEM, mem,
1482 cleanupLowLevelBuf(XvMCLowLevel * xl, LowLevelBuffer * buf)
1487 drmCommandWrite(xl->fd, DRM_VIA_FREEMEM, mem, sizeof(*mem));
1492 releaseXvMCLowLevel(XvMCLowLevel * xl)
1494 switch (xl->state) {
1496 cleanupLowLevelBuf(xl, &xl->scale);
1498 viaDMACleanupTimeStamp(xl);
1500 free(xl->pciBuf.buf);
1502 free(xl->agpBuf.buf);
1504 free(xl);
1517 XvMCLowLevel *xl;
1525 xl = (XvMCLowLevel *) malloc(sizeof(XvMCLowLevel));
1526 if (!xl)
1528 xl->state = ll_init;
1530 xl->agpBuf.buf = (CARD32 *) malloc(LL_AGP_CMDBUF_SIZE * sizeof(CARD32));
1531 if (!xl->agpBuf.buf)
1532 return releaseXvMCLowLevel(xl);
1533 xl->state = ll_agpBuf;
1534 xl->agpBuf.bufSize = LL_AGP_CMDBUF_SIZE;
1535 xl->agpBuf.flushFunc = &agpFlush;
1536 xl->agpBuf.pos = 0;
1537 xl->agpBuf.mode = 0;
1538 xl->agpBuf.waitFlags = 0;
1540 xl->pciBuf.buf = (CARD32 *) malloc(LL_PCI_CMDBUF_SIZE * sizeof(CARD32));
1541 if (!xl->pciBuf.buf)
1542 return releaseXvMCLowLevel(xl);
1543 xl->state = ll_pciBuf;
1544 xl->pciBuf.bufSize = LL_PCI_CMDBUF_SIZE;
1545 xl->pciBuf.flushFunc = &pciFlush;
1546 xl->pciBuf.pos = 0;
1547 xl->pciBuf.mode = 0;
1548 xl->pciBuf.waitFlags = 0;
1550 xl->use_agp = useAgp;
1551 xl->fd = fd;
1552 xl->drmcontext = ctx;
1553 xl->hwLock = hwLock;
1554 xl->mmioAddress = mmioAddress;
1555 xl->fbAddress = fbAddress;
1556 xl->fbDepth = fbDepth;
1557 xl->fbStride = fbStride;
1558 xl->width = width;
1559 xl->height = height;
1560 xl->performLocking = 1;
1561 xl->errors = 0;
1562 xl->agpSync = 0;
1563 xl->chipId = chipId;
1565 if (viaDMAInitTimeStamp(xl))
1566 return releaseXvMCLowLevel(xl);
1567 xl->state = ll_timeStamp;
1569 xl->scale.mem.size = 0;
1570 xl->back.mem.size = 0;
1572 if (updateLowLevelBuf(xl, &xl->scale, width, height))
1573 return releaseXvMCLowLevel(xl);
1574 xl->state = ll_llBuf;
1577 xl->videoBuf = &xl->agpBuf;
1579 xl->videoBuf = &xl->pciBuf;
1582 return xl;
1588 XvMCLowLevel *xl = (XvMCLowLevel *) xlp;
1590 xl->performLocking = performLocking;
1596 XvMCLowLevel *xl = (XvMCLowLevel *) xlp;
1598 releaseXvMCLowLevel(xl);
1615 computeHQVScaleAndFilter(XvMCLowLevel * xl)
1618 const XvMCRegion *src = &xl->sRegion, *back = &xl->dRegion;
1620 xl->downScaling = FALSE;
1624 xl->downScaling = TRUE;
1628 xl->downScaleW = (back->w >= srcW) ? 0 :
1632 xl->downScaleH = (back->h >= srcH) ? 0 :
1638 xl->upScaleW =
1640 xl->upScaleH =
1645 setupBackBuffer(XvMCLowLevel * xl)
1647 return updateLowLevelBuf(xl, &xl->back, xl->dRegion.w, xl->dRegion.h);