/* hide the current cursor */ void viaHideCursor(ScrnInfoPtr pScrn) { VIAPtr pVia = VIAPTR(pScrn); CARD32 temp; switch(pVia->Chipset) { case VIA_CX700: case VIA_P4M890: case VIA_P4M900: case VIA_VX800: case VIA_VX855: case VIA_VX900: if (pVia->pBIOSInfo->FirstCRTC->IsActive) { temp = VIAGETREG(VIA_REG_HI_CONTROL0); VIASETREG(VIA_REG_HI_CONTROL0, temp & 0xFFFFFFFA); } if (pVia->pBIOSInfo->SecondCRTC->IsActive) { temp = VIAGETREG(VIA_REG_HI_CONTROL1); VIASETREG(VIA_REG_HI_CONTROL1, temp & 0xFFFFFFFA); } break; default: temp = VIAGETREG(VIA_REG_ALPHA_CONTROL); /* Hardware cursor disable [bit0] */ VIASETREG(VIA_REG_ALPHA_CONTROL, temp & 0xFFFFFFFA); } }
static void ViaXvMCDestroySubpicture(ScrnInfoPtr pScrn, XvMCSubpicturePtr pSubp) { VIAPtr pVia = VIAPTR(pScrn); ViaXvMCPtr vXvMC = &(pVia->xvmc); int i; volatile ViaXvMCSAreaPriv *sAPriv; XvMCContextPtr pContext = pSubp->context; XvPortRecPrivatePtr portPriv = (XvPortRecPrivatePtr) pContext->port_priv; viaPortPrivPtr pPriv = (viaPortPrivPtr) portPriv->DevPriv.ptr; ViaXvMCXVPriv *vx = (ViaXvMCXVPriv *) pPriv->xvmc_priv; for (i = 0; i < VIA_XVMC_MAX_SURFACES; i++) { if (vXvMC->surfaces[i] == pSubp->subpicture_id) { sAPriv = (ViaXvMCSAreaPriv *) DRIGetSAREAPrivate(pScrn->pScreen); { DRM_CAS_RESULT(__ret); DRM_CAS(&(sAPriv->XvMCSubPicOn[vx->xvmc_port]), i | VIA_XVMC_VALID, 0, __ret); if (!__ret) { /* Turn subpicture off. */ while (VIAGETREG(V_COMPOSE_MODE) & (V1_COMMAND_FIRE | V3_COMMAND_FIRE)) ; VIASETREG(SUBP_CONTROL_STRIDE, VIAGETREG(SUBP_CONTROL_STRIDE) & ~SUBP_HQV_ENABLE); } } drm_bo_free(pScrn, vXvMC->sPrivs[i]->memory_ref); free(vXvMC->sPrivs[i]); vXvMC->nSurfaces--; vXvMC->sPrivs[i] = 0; vXvMC->surfaces[i] = 0; return; } } return; }
/* * Tell XvMC clients that Xv is currently displaying; * return 1 if another client was displaying before. */ static int viaXvMCSetDisplayLock(ScrnInfoPtr pScrn, ViaXvMCXVPriv * vx) { VIAPtr pVia = VIAPTR(pScrn); ViaXvMCSAreaPriv *sAPriv = (ViaXvMCSAreaPriv *) DRIGetSAREAPrivate(pScrn->pScreen); if (vx->xvmc_port > 0) { if ((VIA_XVMC_MAX_SURFACES | VIA_XVMC_VALID) != sAPriv->XvMCDisplaying[vx->xvmc_port]) { sAPriv->XvMCDisplaying[vx->xvmc_port] = (VIA_XVMC_MAX_SURFACES | VIA_XVMC_VALID); } if (sAPriv->XvMCSubPicOn[vx->xvmc_port] & VIA_XVMC_VALID) { sAPriv->XvMCSubPicOn[vx->xvmc_port] = 0; while (VIAGETREG(V_COMPOSE_MODE) & (V1_COMMAND_FIRE | V3_COMMAND_FIRE)) ; VIASETREG(SUBP_CONTROL_STRIDE, VIAGETREG(SUBP_CONTROL_STRIDE) & ~SUBP_HQV_ENABLE); } } return 0; }
void viaCursorStore(ScrnInfoPtr pScrn) { VIAPtr pVia = VIAPTR(pScrn); DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_INFO, "ViaCursorStore\n")); if (pVia->CursorPipe) { pVia->CursorControl1 = VIAGETREG(pVia->CursorRegControl); } else { pVia->CursorControl0 = VIAGETREG(pVia->CursorRegControl); } pVia->CursorTransparentKey = VIAGETREG(pVia->CursorRegTransKey); switch (pVia->Chipset) { case VIA_CX700: /* case VIA_CN750: */ case VIA_P4M890: case VIA_P4M900: case VIA_VX800: case VIA_VX855: case VIA_VX900: if (pVia->pBIOSInfo->FirstCRTC->IsActive) { pVia->CursorPrimHiInvtColor = VIAGETREG(VIA_REG_PRIM_HI_INVTCOLOR); pVia->CursorV327HiInvtColor = VIAGETREG(VIA_REG_V327_HI_INVTCOLOR); } if (pVia->pBIOSInfo->SecondCRTC->IsActive) { /* TODO add saves here */ } pVia->CursorFifo = VIAGETREG(pVia->CursorRegFifo); break; default: /* TODO add saves here */ break; } }