Lines Matching refs:pPriv

170 static CARD8 vblank_active_CRT1(SISPtr pSiS, SISPortPrivPtr pPriv)
175 static CARD8 vblank_active_CRT2(SISPtr pSiS, SISPortPrivPtr pPriv)
179 if(pPriv->bridgeIsSlave) return(vblank_active_CRT1(pSiS, pPriv));
202 static CARD16 get_scanline_CRT2(SISPtr pSiS, SISPortPrivPtr pPriv)
269 SiSUpdateXvGamma(SISPtr pSiS, SISPortPrivPtr pPriv)
277 if((pPriv->dualHeadMode) && (!pSiS->SecondHead)) return;
290 SISPortPrivPtr pPriv = GET_PORT_PRIVATE(pScrn);
292 SiSUpdateXvGamma(pSiS, pPriv);
368 SISSetPortDefaults(ScrnInfoPtr pScrn, SISPortPrivPtr pPriv)
375 pPriv->colorKey = pSiS->colorKey = 0x000101fe;
376 pPriv->brightness = pSiS->XvDefBri;
377 pPriv->contrast = pSiS->XvDefCon;
378 pPriv->hue = pSiS->XvDefHue;
379 pPriv->saturation = pSiS->XvDefSat;
380 pPriv->autopaintColorKey = TRUE;
381 pPriv->disablegfx = pSiS->XvDefDisableGfx;
382 pPriv->disablegfxlr= pSiS->XvDefDisableGfxLR;
384 pPriv->usechromakey = pSiS->XvUseChromaKey;
385 pPriv->insidechromakey = pSiS->XvInsideChromaKey;
386 pPriv->yuvchromakey = pSiS->XvYUVChromaKey;
387 pPriv->chromamin = pSiS->XvChromaMin;
388 pPriv->chromamax = pSiS->XvChromaMax;
389 if(pPriv->dualHeadMode) {
392 pPriv->tvxpos = pSiS->tvxpos;
393 pPriv->tvypos = pSiS->tvypos;
394 pPriv->updatetvxpos = TRUE;
395 pPriv->updatetvypos = TRUE;
399 pPriv->tvxpos = pSiS->tvxpos;
400 pPriv->tvypos = pSiS->tvypos;
401 pPriv->updatetvxpos = TRUE;
402 pPriv->updatetvypos = TRUE;
407 if(pPriv->dualHeadMode) {
409 pPriv->crtnum =
414 pPriv->crtnum = pSiS->XvOnCRT2 ? 1 : 0;
419 SiSUpdateXvGamma(pSiS, pPriv);
430 SISPortPrivPtr pPriv = GET_PORT_PRIVATE(pScrn);
480 } else if(pPriv->is661741760) {
482 if(pPriv->is760) {
502 } else if(pPriv->is761) {
516 if((pSiS->ChipFlags & SiSCF_Is65x) || (pPriv->is661741760)) {
559 if(pPriv->is661741760) {
568 } else if(pPriv->is761) {
606 SiSUpdateXvGamma(pSiS, pPriv);
609 pPriv->mustresettap = TRUE;
611 pPriv->mustresettap2 = TRUE;
628 set_dispmode(ScrnInfoPtr pScrn, SISPortPrivPtr pPriv)
632 pPriv->dualHeadMode = pPriv->bridgeIsSlave = FALSE;
635 pPriv->bridgeIsSlave = TRUE;
639 ((pPriv->bridgeIsSlave) && (pSiS->VBFlags & DISPTYPE_DISP2)) ) {
640 if(pPriv->hasTwoOverlays)
641 pPriv->displayMode = DISPMODE_MIRROR; /* CRT1+CRT2 (2 overlays) */
642 else if(pPriv->crtnum)
643 pPriv->displayMode = DISPMODE_SINGLE2; /* CRT2 only */
645 pPriv->displayMode = DISPMODE_SINGLE1; /* CRT1 only */
649 pPriv->dualHeadMode = TRUE;
651 pPriv->displayMode = DISPMODE_SINGLE1; /* CRT1 only */
653 pPriv->displayMode = DISPMODE_SINGLE2; /* CRT2 only */
657 pPriv->displayMode = DISPMODE_SINGLE1; /* CRT1 only */
659 pPriv->displayMode = DISPMODE_SINGLE2; /* CRT2 only */
665 set_disptype_regs(ScrnInfoPtr pScrn, SISPortPrivPtr pPriv)
672 if(pPriv->dualHeadMode) crtnum = pSiSEnt->curxvcrtnum;
703 switch (pPriv->displayMode)
706 if(pPriv->hasTwoOverlays) {
707 if(pPriv->dualHeadMode) {
716 if((!pPriv->dualHeadMode) || (crtnum == 0)) {
727 if(pPriv->hasTwoOverlays) {
728 if(pPriv->dualHeadMode) {
737 if((!pPriv->dualHeadMode) || (crtnum == 1)) {
761 set_hastwooverlays(SISPtr pSiS, SISPortPrivPtr pPriv)
767 if(pPriv->hasTwoOverlays) {
774 while((!vblank_active_CRT2(pSiS, pPriv)) && --watchdog);
776 while(vblank_active_CRT2(pSiS, pPriv) && --watchdog);
780 pPriv->hasTwoOverlays = FALSE;
782 pPriv->hasTwoOverlays = TRUE;
785 pPriv->hasTwoOverlays = FALSE;
790 set_allowswitchcrt(SISPtr pSiS, SISPortPrivPtr pPriv)
792 if(pPriv->hasTwoOverlays) {
793 pPriv->AllowSwitchCRT = FALSE;
795 pPriv->AllowSwitchCRT = FALSE;
796 if(!(pSiS->VBFlags & DISPTYPE_DISP1)) pPriv->crtnum = 1;
797 else pPriv->crtnum = 0;
799 pPriv->AllowSwitchCRT = TRUE;
804 set_maxencoding(SISPtr pSiS, SISPortPrivPtr pPriv)
815 if(pPriv->is661741760) {
817 } else if(pPriv->is340) { /* 2 overlays? */
820 } else if(pPriv->is761) {
824 if(pPriv->hasTwoOverlays) {
835 if(pPriv->displayMode == DISPMODE_MIRROR) {
850 SISPortPrivPtr pPriv = GET_PORT_PRIVATE(pScrn);
852 if(!pPriv) return;
854 set_hastwooverlays(pSiS, pPriv);
855 set_allowswitchcrt(pSiS, pPriv);
856 set_dispmode(pScrn, pPriv);
857 set_maxencoding(pSiS, pPriv);
870 SISPortPrivPtr pPriv;
897 pPriv = (SISPortPrivPtr)(&adapt->pPortPrivates[1]);
899 pPriv->videoStatus = 0;
900 pPriv->currentBuf = 0;
901 pPriv->handle = NULL;
902 pPriv->grabbedByV4L= FALSE;
903 pPriv->NoOverlay = FALSE;
904 pPriv->PrevOverlay = FALSE;
905 pPriv->is661741760 = ((pSiS->ChipType >= SIS_661) &&
907 pPriv->is760 = (pSiS->ChipType == SIS_760) ? TRUE : FALSE;
908 pPriv->is761 = (pSiS->ChipType == SIS_761) ? TRUE : FALSE;
909 pPriv->is340 = (pSiS->Chipset == PCI_CHIP_SIS340) ? TRUE : FALSE;
910 pPriv->isXGI = (pSiS->Chipset == PCI_CHIP_XGIXG20 ||
914 set_hastwooverlays(pSiS, pPriv);
915 set_allowswitchcrt(pSiS, pPriv);
917 pPriv->havetapscaler = FALSE;
918 if(pPriv->is340 || pPriv->is761 || pPriv->isXGI) {
919 pPriv->havetapscaler = TRUE;
922 adapt->pPortPrivates[0].ptr = (pointer)(pPriv);
954 REGION_NULL(pScreen, &pPriv->clip);
956 REGION_INIT(pScreen, &pPriv->clip, NullBox, 0);
1058 pPriv->shiftValue = 1;
1062 pPriv->shiftValue = 2;
1067 set_dispmode(pScrn, pPriv);
1101 pPriv->linebufmask = 0x11;
1102 pPriv->linebufMergeLimit = 384;
1104 pPriv->linebufmask = 0xb1;
1105 pPriv->linebufMergeLimit = 384; /* should be 480 */
1106 if(pPriv->is661741760) {
1107 pPriv->linebufMergeLimit = 576; /* should be 768 */
1108 } else if(pPriv->is340) {
1109 pPriv->linebufMergeLimit = 1280; /* should be 1280 */
1110 } else if(pPriv->is761) {
1111 pPriv->linebufMergeLimit = 1280; /* should be 1536 */
1112 } else if(pPriv->isXGI) {
1113 pPriv->linebufMergeLimit = 1280; /* FIXME */
1114 } else if(!(pPriv->hasTwoOverlays)) {
1115 pPriv->linebufMergeLimit = 720; /* should be 960 */
1120 set_maxencoding(pSiS, pPriv);
1123 SISSetPortDefaults(pScrn, pPriv);
1126 set_disptype_regs(pScrn, pPriv);
1174 SISUpdateVideoParms(SISPtr pSiS, SISPortPrivPtr pPriv)
1176 set_hastwooverlays(pSiS, pPriv);
1177 set_allowswitchcrt(pSiS, pPriv);
1178 set_dispmode(pSiS->pScrn, pPriv);
1179 set_maxencoding(pSiS, pPriv);
1186 SISPortPrivPtr pPriv = (SISPortPrivPtr)data;
1195 pPriv->brightness = value;
1199 pPriv->contrast = value;
1201 pPriv->colorKey = pSiS->colorKey = value;
1202 REGION_EMPTY(pScrn->pScreen, &pPriv->clip);
1206 pPriv->autopaintColorKey = value;
1208 SISSetPortDefaults(pScrn, pPriv);
1212 pPriv->disablegfx = value;
1216 pPriv->disablegfxlr = value;
1220 pPriv->tvxpos = value;
1222 SiS_SetTVxposoffset(pScrn, pPriv->tvxpos);
1223 pPriv->updatetvxpos = FALSE;
1225 pSiS->tvxpos = pPriv->tvxpos;
1227 if(pPriv->dualHeadMode) pSiSEnt->tvxpos = pPriv->tvxpos;
1229 pPriv->updatetvxpos = TRUE;
1233 pPriv->tvypos = value;
1235 SiS_SetTVyposoffset(pScrn, pPriv->tvypos);
1236 pPriv->updatetvypos = FALSE;
1238 pSiS->tvypos = pPriv->tvypos;
1240 if(pPriv->dualHeadMode) pSiSEnt->tvypos = pPriv->tvypos;
1242 pPriv->updatetvypos = TRUE;
1249 pPriv->usechromakey = value;
1252 pPriv->insidechromakey = value;
1255 pPriv->yuvchromakey = value;
1257 pPriv->chromamin = value;
1259 pPriv->chromamax = value;
1264 pPriv->deinterlacemethod = value;
1272 pPriv->hue = value;
1277 pPriv->saturation = value;
1283 SiSUpdateXvGamma(pSiS, pPriv);
1289 SiSUpdateXvGamma(pSiS, pPriv);
1295 SiSUpdateXvGamma(pSiS, pPriv);
1299 if(pPriv->AllowSwitchCRT) {
1302 pPriv->crtnum = value;
1304 if(pPriv->dualHeadMode) pSiSEnt->curxvcrtnum = value;
1310 return(SISSetPortUtilAttribute(pScrn, attribute, value, pPriv));
1326 SISPortPrivPtr pPriv = (SISPortPrivPtr)data;
1333 *value = pPriv->brightness;
1335 *value = pPriv->contrast;
1337 *value = pPriv->colorKey;
1339 *value = (pPriv->autopaintColorKey) ? 1 : 0;
1341 *value = (pPriv->disablegfx) ? 1 : 0;
1343 *value = (pPriv->disablegfxlr) ? 1 : 0;
1351 *value = (pPriv->usechromakey) ? 1 : 0;
1353 *value = (pPriv->insidechromakey) ? 1 : 0;
1355 *value = (pPriv->yuvchromakey) ? 1 : 0;
1357 *value = pPriv->chromamin;
1359 *value = pPriv->chromamax;
1362 *value = pPriv->deinterlacemethod;
1369 *value = pPriv->hue;
1373 *value = pPriv->saturation;
1390 if(pPriv->dualHeadMode)
1394 *value = pPriv->crtnum;
1398 return(SISGetPortUtilAttribute(pScrn, attribute, value, pPriv));
1429 SISPortPrivPtr pPriv, int index, int iscrt2)
1446 if(pPriv->bridgeIsSlave) {
1457 if(pPriv->displayMode == DISPMODE_MIRROR) flag = 1;
1461 if((pPriv->bridgeIsSlave || iscrt2) &&
1498 if(pPriv->havetapscaler) {
1551 if(pPriv->havetapscaler) {
1599 SISPortPrivPtr pPriv, int index, int iscrt2)
1656 if(pPriv->havetapscaler) {
1709 if(pPriv->havetapscaler) {
1879 calc_line_buf_size(CARD32 srcW, CARD8 wHPre, CARD8 planar, SISPortPrivPtr pPriv)
1881 CARD32 I, mask = 0xffffffff, shift = pPriv->is761 ? 1 : 0;
1908 if(pPriv->is340 || pPriv->isXGI || pPriv->is761) {
1942 calc_line_buf_size_1(SISOverlayPtr pOverlay, SISPortPrivPtr pPriv)
1945 calc_line_buf_size(pOverlay->srcW, pOverlay->wHPre, pOverlay->planar, pPriv);
1950 calc_line_buf_size_2(SISOverlayPtr pOverlay, SISPortPrivPtr pPriv)
1953 calc_line_buf_size(pOverlay->srcW2, pOverlay->wHPre2, pOverlay->planar, pPriv);
1961 merge_line_buf_mfb(SISPtr pSiS, SISPortPrivPtr pPriv, Bool enable1, Bool enable2,
1964 UChar misc1, misc2, mask = pPriv->linebufmask;
1966 if(pPriv->hasTwoOverlays) { /* This means we are in MIRROR mode */
2034 merge_line_buf(SISPtr pSiS, SISPortPrivPtr pPriv, Bool enable, short width, short limit)
2036 UChar misc1, misc2, mask = pPriv->linebufmask;
2040 switch(pPriv->displayMode){
2043 if(pPriv->dualHeadMode) {
2051 if(pPriv->hasTwoOverlays) {
2052 if(pPriv->dualHeadMode) {
2081 if(pPriv->dualHeadMode) {
2089 if(pPriv->hasTwoOverlays) {
2090 if(pPriv->dualHeadMode) {
2128 switch(pPriv->displayMode) {
2137 if(pPriv->dualHeadMode) misc2 = 0x01;
2140 if(pPriv->hasTwoOverlays) {
2141 if(pPriv->dualHeadMode) misc2 = 0x01;
2313 set_overlay(SISPtr pSiS, SISOverlayPtr pOverlay, SISPortPrivPtr pPriv, int index, int iscrt2)
2330 pitch = pOverlay->pitch2 >> pPriv->shiftValue;
2340 pitch = pOverlay->pitch >> pPriv->shiftValue;
2363 (!((pPriv->bridgeIsSlave || iscrt2) && (pSiS->MiscFlags & MISC_STNMODE))) ) {
2380 if(pPriv->is340 || pPriv->is761 || pPriv->isXGI) {
2386 if(pPriv->is340 || pPriv->is761 || pPriv->isXGI) {
2397 if(pPriv->mustwait) {
2407 watchdog = get_scanline_CRT2(pSiS, pPriv);
2416 while(pOverlay->VBlankActiveFunc(pSiS, pPriv) && --watchdog);
2418 while((!pOverlay->VBlankActiveFunc(pSiS, pPriv)) && --watchdog);
2493 if(pPriv->is661741760) {
2517 if(pPriv->havetapscaler) {
2518 if((pOverlay->tap_scale2 != pOverlay->tap_scale2_old) || pPriv->mustresettap2) {
2521 pPriv->mustresettap2 = FALSE;
2533 if(pPriv->havetapscaler) {
2534 if((pOverlay->tap_scale != pOverlay->tap_scale_old) || pPriv->mustresettap) {
2537 pPriv->mustresettap = FALSE;
2552 close_overlay(SISPtr pSiS, SISPortPrivPtr pPriv)
2556 if(!pPriv->overlayStatus) return;
2558 pPriv->overlayStatus = FALSE;
2560 pPriv->mustresettap = TRUE;
2562 pPriv->mustresettap2 = TRUE;
2565 if(pPriv->displayMode & (DISPMODE_MIRROR | DISPMODE_SINGLE2)) {
2573 if(pPriv->hasTwoOverlays) {
2575 if((pPriv->dualHeadMode) || (pPriv->displayMode == DISPMODE_MIRROR)) {
2581 } else if(pPriv->displayMode == DISPMODE_SINGLE2) {
2584 if(pPriv->dualHeadMode) {
2596 while((!vblank_active_CRT2(pSiS, pPriv)) && --watchdog);
2598 while(vblank_active_CRT2(pSiS, pPriv) && --watchdog);
2601 while((!vblank_active_CRT2(pSiS, pPriv)) && --watchdog);
2603 while(vblank_active_CRT2(pSiS, pPriv) && --watchdog);
2611 if(pPriv->displayMode & (DISPMODE_SINGLE1 | DISPMODE_MIRROR)) {
2617 if(pPriv->dualHeadMode) {
2618 if(!pPriv->hasTwoOverlays) {
2629 while((!vblank_active_CRT1(pSiS, pPriv)) && --watchdog);
2631 while(vblank_active_CRT1(pSiS, pPriv) && --watchdog);
2634 while((!vblank_active_CRT1(pSiS, pPriv)) && --watchdog);
2636 while(vblank_active_CRT1(pSiS, pPriv) && --watchdog);
2646 SISDisplayVideo(ScrnInfoPtr pScrn, SISPortPrivPtr pPriv)
2652 short srcPitch = pPriv->srcPitch;
2653 short height = pPriv->height;
2667 set_hastwooverlays(pSiS, pPriv);
2669 pPriv->NoOverlay = FALSE;
2671 if(pPriv->dualHeadMode) {
2672 if(!pPriv->hasTwoOverlays) {
2675 if(pPriv->overlayStatus) {
2676 close_overlay(pSiS, pPriv);
2678 pPriv->NoOverlay = TRUE;
2683 if(pPriv->overlayStatus) {
2684 close_overlay(pSiS, pPriv);
2686 pPriv->NoOverlay = TRUE;
2695 set_dispmode(pScrn, pPriv);
2701 if( ((pPriv->displayMode & DISPMODE_MIRROR) &&
2703 ((pPriv->displayMode & DISPMODE_SINGLE1) &&
2705 ((pPriv->displayMode & DISPMODE_SINGLE2) &&
2707 if(pPriv->overlayStatus) {
2708 close_overlay(pSiS, pPriv);
2710 pPriv->NoOverlay = TRUE;
2719 overlay.pixelFormat = pPriv->id;
2721 if(pPriv->usechromakey) {
2722 overlay.keyOP = (pPriv->insidechromakey) ? VI_ROP_ChromaKey : VI_ROP_NotChromaKey;
2728 switch(pPriv->deinterlacemethod) {
2731 /* overlay.bobEnable |= (pPriv->currentBuf) ? 0x00 : 0x10; */
2735 /* overlay.bobEnable |= (pPriv->currentBuf) ? 0x00 : 0x10; */
2739 /* overlay.bobEnable |= (pPriv->currentBuf) ? 0x00 : 0x10; */
2759 overlay.dstBox.x1 = pPriv->drw_x - pSiS->CRT1frameX0;
2760 overlay.dstBox.x2 = overlay.dstBox.x1 + pPriv->drw_w;
2761 overlay.dstBox.y1 = pPriv->drw_y - pSiS->CRT1frameY0;
2762 overlay.dstBox.y2 = overlay.dstBox.y1 + pPriv->drw_h;
2763 overlay.dstBox2.x1 = pPriv->drw_x - pSiS->CRT2pScrn->frameX0;
2764 overlay.dstBox2.x2 = overlay.dstBox2.x1 + pPriv->drw_w;
2765 overlay.dstBox2.y1 = pPriv->drw_y - pSiS->CRT2pScrn->frameY0;
2766 overlay.dstBox2.y2 = overlay.dstBox2.y1 + pPriv->drw_h;
2772 overlay.dstBox.x1 = pPriv->drw_x - pScrn->frameX0;
2773 overlay.dstBox.x2 = pPriv->drw_x + pPriv->drw_w - pScrn->frameX0;
2774 overlay.dstBox.y1 = pPriv->drw_y - pScrn->frameY0;
2775 overlay.dstBox.y2 = pPriv->drw_y + pPriv->drw_h - pScrn->frameY0;
2810 if(pPriv->displayMode & (DISPMODE_SINGLE1 | DISPMODE_MIRROR)) {
2819 srcOffsetX = pPriv->src_w * (-overlay.dstBox.x1) / pPriv->drw_w;
2823 srcOffsetY = pPriv->src_h * (-overlay.dstBox.y1) / pPriv->drw_h;
2846 srcOffsetX2 = pPriv->src_w * (-overlay.dstBox2.x1) / pPriv->drw_w;
2851 srcOffsetY2 = pPriv->src_h * (-overlay.dstBox2.y1) / pPriv->drw_h;
2861 if(pPriv->displayMode & (DISPMODE_SINGLE2 | DISPMODE_MIRROR)) {
2874 if(pPriv->hasTwoOverlays) {
2875 while((!vblank_active_CRT1(pSiS, pPriv)) && --watchdog);
2877 while(vblank_active_CRT1(pSiS, pPriv) && --watchdog);
2881 while((!vblank_active_CRT1(pSiS, pPriv)) && --watchdog);
2883 while(vblank_active_CRT1(pSiS, pPriv) && --watchdog);
2885 while((!vblank_active_CRT2(pSiS, pPriv)) && --watchdog);
2887 while(vblank_active_CRT2(pSiS, pPriv) && --watchdog);
2892 if(pPriv->hasTwoOverlays) {
2898 while((!vblank_active_CRT2(pSiS, pPriv)) && --watchdog);
2900 while(vblank_active_CRT2(pSiS, pPriv) && --watchdog);
2904 pPriv->overlayStatus = FALSE;
2910 switch(pPriv->id) {
2918 sx = (pPriv->src_x + srcOffsetX) & ~7;
2919 sy = (pPriv->src_y + srcOffsetY) & ~1;
2920 overlay.PSY = pPriv->bufAddr[pPriv->currentBuf] + sx + sy*srcPitch;
2921 overlay.PSV = pPriv->bufAddr[pPriv->currentBuf] + height*srcPitch + ((sx + sy*srcPitch/2) >> 1);
2922 overlay.PSU = pPriv->bufAddr[pPriv->currentBuf] + height*srcPitch*5/4 + ((sx + sy*srcPitch/2) >> 1);
2926 overlay.PSY >>= pPriv->shiftValue;
2927 overlay.PSV >>= pPriv->shiftValue;
2928 overlay.PSU >>= pPriv->shiftValue;
2932 sx2 = (pPriv->src_x + srcOffsetX2) & ~7;
2933 sy2 = (pPriv->src_y + srcOffsetY2) & ~1;
2934 overlay.PSY2 = pPriv->bufAddr[pPriv->currentBuf] + sx2 + sy2*srcPitch;
2935 overlay.PSV2 = pPriv->bufAddr[pPriv->currentBuf] + height*srcPitch + ((sx2 + sy2*srcPitch/2) >> 1);
2936 overlay.PSU2 = pPriv->bufAddr[pPriv->currentBuf] + height*srcPitch*5/4 + ((sx2 + sy2*srcPitch/2) >> 1);
2940 overlay.PSY2 >>= pPriv->shiftValue;
2941 overlay.PSV2 >>= pPriv->shiftValue;
2942 overlay.PSU2 >>= pPriv->shiftValue;
2953 sx = (pPriv->src_x + srcOffsetX) & ~7;
2954 sy = (pPriv->src_y + srcOffsetY) & ~1;
2955 overlay.PSY = pPriv->bufAddr[pPriv->currentBuf] + sx + sy*srcPitch;
2956 overlay.PSV = pPriv->bufAddr[pPriv->currentBuf] + height*srcPitch*5/4 + ((sx + sy*srcPitch/2) >> 1);
2957 overlay.PSU = pPriv->bufAddr[pPriv->currentBuf] + height*srcPitch + ((sx + sy*srcPitch/2) >> 1);
2961 overlay.PSY >>= pPriv->shiftValue;
2962 overlay.PSV >>= pPriv->shiftValue;
2963 overlay.PSU >>= pPriv->shiftValue;
2967 sx2 = (pPriv->src_x + srcOffsetX2) & ~7;
2968 sy2 = (pPriv->src_y + srcOffsetY2) & ~1;
2969 overlay.PSY2 = pPriv->bufAddr[pPriv->currentBuf] + sx2 + sy2*srcPitch;
2970 overlay.PSV2 = pPriv->bufAddr[pPriv->currentBuf] + height*srcPitch*5/4 + ((sx2 + sy2*srcPitch/2) >> 1);
2971 overlay.PSU2 = pPriv->bufAddr[pPriv->currentBuf] + height*srcPitch + ((sx2 + sy2*srcPitch/2) >> 1);
2975 overlay.PSY2 >>= pPriv->shiftValue;
2976 overlay.PSV2 >>= pPriv->shiftValue;
2977 overlay.PSU2 >>= pPriv->shiftValue;
2989 sx = (pPriv->src_x + srcOffsetX) & ~7;
2990 sy = (pPriv->src_y + srcOffsetY) & ~1;
2991 overlay.PSY = pPriv->bufAddr[pPriv->currentBuf] + sx + sy*srcPitch;
2992 overlay.PSV = pPriv->bufAddr[pPriv->currentBuf] + height*srcPitch + ((sx + sy*srcPitch/2) >> 1);
2995 overlay.PSY >>= pPriv->shiftValue;
2996 overlay.PSV >>= pPriv->shiftValue;
3001 sx2 = (pPriv->src_x + srcOffsetX2) & ~7;
3002 sy2 = (pPriv->src_y + srcOffsetY2) & ~1;
3003 overlay.PSY2 = pPriv->bufAddr[pPriv->currentBuf] + sx2 + sy2*srcPitch;
3004 overlay.PSV2 = pPriv->bufAddr[pPriv->currentBuf] + height*srcPitch + ((sx2 + sy2*srcPitch/2) >> 1);
3007 overlay.PSY2 >>= pPriv->shiftValue;
3008 overlay.PSV2 >>= pPriv->shiftValue;
3024 sx = (pPriv->src_x + srcOffsetX) & ~1;
3025 sy = (pPriv->src_y + srcOffsetY);
3026 overlay.PSY = (pPriv->bufAddr[pPriv->currentBuf] + sx*2 + sy*srcPitch);
3028 overlay.PSY >>= pPriv->shiftValue;
3032 sx2 = (pPriv->src_x + srcOffsetX2) & ~1;
3033 sy2 = (pPriv->src_y + srcOffsetY2);
3034 overlay.PSY2 = (pPriv->bufAddr[pPriv->currentBuf] + sx2*2 + sy2*srcPitch);
3036 overlay.PSY2 >>= pPriv->shiftValue;
3046 overlay.srcW = pPriv->src_w - (sx - pPriv->src_x);
3047 overlay.srcH = pPriv->src_h - (sy - pPriv->src_y);
3048 if( (pPriv->oldx1 != overlay.dstBox.x1) ||
3049 (pPriv->oldx2 != overlay.dstBox.x2) ||
3050 (pPriv->oldy1 != overlay.dstBox.y1) ||
3051 (pPriv->oldy2 != overlay.dstBox.y2) ) {
3052 pPriv->mustwait = 1;
3053 pPriv->oldx1 = overlay.dstBox.x1; pPriv->oldx2 = overlay.dstBox.x2;
3054 pPriv->oldy1 = overlay.dstBox.y1; pPriv->oldy2 = overlay.dstBox.y2;
3059 overlay.srcW2 = pPriv->src_w - (sx2 - pPriv->src_x);
3060 overlay.srcH2 = pPriv->src_h - (sy2 - pPriv->src_y);
3061 if( (pPriv->oldx1_2 != overlay.dstBox2.x1) ||
3062 (pPriv->oldx2_2 != overlay.dstBox2.x2) ||
3063 (pPriv->oldy1_2 != overlay.dstBox2.y1) ||
3064 (pPriv->oldy2_2 != overlay.dstBox2.y2) ) {
3065 pPriv->mustwait = 1;
3066 pPriv->oldx1_2 = overlay.dstBox2.x1; pPriv->oldx2_2 = overlay.dstBox2.x2;
3067 pPriv->oldy1_2 = overlay.dstBox2.y1; pPriv->oldy2_2 = overlay.dstBox2.y2;
3074 if((pSiS->MergedFB) && (pPriv->hasTwoOverlays)) {
3081 while((!vblank_active_CRT1(pSiS, pPriv)) && --watchdog);
3083 while(vblank_active_CRT1(pSiS, pPriv) && --watchdog);
3092 while((!vblank_active_CRT2(pSiS, pPriv)) && --watchdog);
3094 while(vblank_active_CRT2(pSiS, pPriv) && --watchdog);
3105 if(pPriv->displayMode & DISPMODE_SINGLE2) {
3106 if(pPriv->hasTwoOverlays) { /* We have 2 overlays: */
3107 if(pPriv->dualHeadMode) {
3120 if(!pPriv->hasTwoOverlays) {
3124 pPriv->displayMode = DISPMODE_SINGLE1;
3133 if(pPriv->hasTwoOverlays) index = 1;
3136 if(!pPriv->hasTwoOverlays) {
3137 pPriv->displayMode = DISPMODE_SINGLE2;
3144 set_disptype_regs(pScrn, pPriv);
3150 merge_line_buf(pSiS, pPriv, (overlay.srcW > pPriv->linebufMergeLimit), overlay.srcW,
3151 pPriv->linebufMergeLimit);
3156 if(overlay.srcW > pPriv->linebufMergeLimit) temp1 = TRUE;
3159 if(overlay.srcW2 > pPriv->linebufMergeLimit) temp2 = TRUE;
3161 merge_line_buf_mfb(pSiS, pPriv, temp1, temp2, overlay.srcW, overlay.srcW2,
3162 pPriv->linebufMergeLimit);
3170 calc_line_buf_size_1(&overlay, pPriv);
3173 calc_line_buf_size_2(&overlay, pPriv);
3176 if(pPriv->dualHeadMode) {
3179 if(pPriv->updatetvxpos) {
3180 SiS_SetTVxposoffset(pScrn, pPriv->tvxpos);
3181 pPriv->updatetvxpos = FALSE;
3183 if(pPriv->updatetvypos) {
3184 SiS_SetTVyposoffset(pScrn, pPriv->tvypos);
3185 pPriv->updatetvypos = FALSE;
3190 if(pPriv->updatetvxpos) {
3191 SiS_SetTVxposoffset(pScrn, pPriv->tvxpos);
3192 pPriv->updatetvxpos = FALSE;
3194 if(pPriv->updatetvypos) {
3195 SiS_SetTVyposoffset(pScrn, pPriv->tvypos);
3196 pPriv->updatetvypos = FALSE;
3204 while(overlay.VBlankActiveFunc(pSiS, pPriv) && --watchdog);
3216 calc_scale_factor_2(&overlay, pScrn, pPriv, index, iscrt2);
3219 calc_scale_factor(&overlay, pScrn, pPriv, index, iscrt2);
3228 set_colorkey(pSiS, pPriv->colorKey);
3230 if(pPriv->usechromakey) {
3234 (pPriv->yuvchromakey ? 0x40 : 0x00), 0x40);
3236 set_chromakey(pSiS, pPriv->chromamin, pPriv->chromamax);
3240 set_brightness(pSiS, pPriv->brightness);
3241 set_contrast(pSiS, pPriv->contrast);
3243 set_hue(pSiS, pPriv->hue);
3244 set_saturation(pSiS, pPriv->saturation);
3252 set_disablegfx(pSiS, pPriv->disablegfx, &overlay);
3256 set_disablegfxlr(pSiS, pPriv->disablegfxlr, &overlay);
3263 set_overlay(pSiS, &overlay, pPriv, index, iscrt2);
3269 if(pPriv->displayMode & DISPMODE_MIRROR &&
3271 pPriv->hasTwoOverlays) {
3318 if((pPriv->mustwait) && index) {
3319 watchdog = get_scanline_CRT2(pSiS, pPriv);
3330 watchdog = get_scanline_CRT2(pSiS, pPriv);
3351 pPriv->mustwait = 0;
3352 pPriv->overlayStatus = TRUE;
3477 SISPortPrivPtr pPriv = (SISPortPrivPtr)data;
3480 if(pPriv->grabbedByV4L) return;
3482 REGION_EMPTY(pScrn->pScreen, &pPriv->clip);
3485 if(pPriv->videoStatus & CLIENT_VIDEO_ON) {
3486 close_overlay(pSiS, pPriv);
3487 pPriv->mustwait = 1;
3489 SISFreeFBMemory(pScrn, &pPriv->handle);
3490 pPriv->videoStatus = 0;
3492 if(pPriv->videoStatus & CLIENT_VIDEO_ON) {
3494 pPriv->offTime = currentTime.milliseconds + OFF_DELAY;
3495 pPriv->videoStatus = OFF_TIMER | CLIENT_VIDEO_ON;
3519 SISPortPrivPtr pPriv = (SISPortPrivPtr)data;
3527 Bool deintfm = (pPriv->deinterlacemethod > 1) ? TRUE : FALSE;
3535 if(pPriv->grabbedByV4L) return Success;
3537 pPriv->drw_x = drw_x;
3538 pPriv->drw_y = drw_y;
3539 pPriv->drw_w = drw_w;
3540 pPriv->drw_h = drw_h;
3541 pPriv->src_x = src_x;
3542 pPriv->src_y = src_y;
3543 pPriv->src_w = src_w;
3544 pPriv->src_h = src_h;
3545 pPriv->id = id;
3546 pPriv->height = height;
3587 pPriv->srcPitch = (width + 7) & ~7;
3589 totalSize = (pPriv->srcPitch * height * 3) >> 1; /* Verified */
3597 pPriv->srcPitch = ((width << 1) + 3) & ~3; /* Verified */
3599 totalSize = pPriv->srcPitch * height;
3607 if(!(pPriv->bufAddr[0] = SISAllocateFBMemory(pScrn, &pPriv->handle, totalSize << 1)))
3612 pPriv->bufAddr[1] = pPriv->bufAddr[0] + pPriv->srcPitch;
3616 CARD8 *dest = (CARD8 *)(pSiS->FbBase + pPriv->bufAddr[pPriv->currentBuf]);
3619 SiSMemCopyToVideoRam(pSiS, dest, src, pPriv->srcPitch);
3620 src += pPriv->srcPitch;
3621 dest += (pPriv->srcPitch << 1);
3627 pPriv->bufAddr[1] = pPriv->bufAddr[0] + totalSize;
3631 SiSMemCopyToVideoRam(pSiS, pSiS->FbBase + pPriv->bufAddr[pPriv->currentBuf], buf, totalSize);
3635 CARD32 *dest = (CARD32 *)(pSiS->FbBase + pPriv->bufAddr[pPriv->currentBuf]);
3647 SISDisplayVideo(pScrn, pPriv);
3650 if(pPriv->autopaintColorKey &&
3651 (pPriv->grabbedByV4L ||
3653 (!RegionsEqual(&pPriv->clip, clipBoxes)) ||
3655 (!REGION_EQUAL(pScrn->pScreen, &pPriv->clip, clipBoxes)) ||
3657 (pPriv->PrevOverlay != pPriv->NoOverlay))) {
3659 if(!pPriv->grabbedByV4L) {
3660 REGION_COPY(pScrn->pScreen, &pPriv->clip, clipBoxes);
3663 pPriv->PrevOverlay = pPriv->NoOverlay;
3665 if((pPriv->NoOverlay) && pXAA && pXAA->FillMono8x8PatternRects) {
3675 (*pXAA->FillSolidRects)(pScrn, pPriv->colorKey, GXcopy, ~0,
3679 xf86XVFillKeyHelper(pScrn->pScreen, (pPriv->NoOverlay) ? 0x00ff0000 : pPriv->colorKey, clipBoxes);
3688 pPriv->currentBuf ^= 1;
3690 pPriv->videoStatus = CLIENT_VIDEO_ON;
3787 SISPortPrivPtr pPriv = GET_PORT_PRIVATE(pScrn);
3796 if(pPriv->grabbedByV4L)
3800 pPriv->pitch = ((w << 1) + 63) & ~63; /* Only packed pixel modes supported */
3801 size = h * pPriv->pitch;
3802 if(!(pPriv->offset = SISAllocateFBMemory(pScrn, &pPriv->handle, size)))
3809 surface->pitches = &pPriv->pitch;
3810 surface->offsets = &pPriv->offset;
3811 surface->devPrivate.ptr = (pointer)pPriv;
3813 close_overlay(pSiS, pPriv);
3814 pPriv->videoStatus = 0;
3815 REGION_EMPTY(pScrn->pScreen, &pPriv->clip);
3817 pPriv->grabbedByV4L = TRUE;
3824 SISPortPrivPtr pPriv = (SISPortPrivPtr)(surface->devPrivate.ptr);
3827 if(pPriv->grabbedByV4L && pPriv->videoStatus) {
3828 close_overlay(pSiS, pPriv);
3829 pPriv->mustwait = 1;
3830 pPriv->videoStatus = 0;
3838 SISPortPrivPtr pPriv = (SISPortPrivPtr)(surface->devPrivate.ptr);
3840 if(pPriv->grabbedByV4L) {
3842 SISFreeFBMemory(surface->pScrn, &pPriv->handle);
3843 pPriv->grabbedByV4L = FALSE;
3855 SISPortPrivPtr pPriv = GET_PORT_PRIVATE(pScrn);
3857 return SISGetPortAttribute(pScrn, attribute, value, (pointer)pPriv);
3867 SISPortPrivPtr pPriv = GET_PORT_PRIVATE(pScrn);;
3869 return SISSetPortAttribute(pScrn, attribute, value, (pointer)pPriv);
3883 SISPortPrivPtr pPriv = (SISPortPrivPtr)(surface->devPrivate.ptr);
3889 if(!pPriv->grabbedByV4L) return Success;
3891 pPriv->drw_x = drw_x;
3892 pPriv->drw_y = drw_y;
3893 pPriv->drw_w = drw_w;
3894 pPriv->drw_h = drw_h;
3895 pPriv->src_x = src_x;
3896 pPriv->src_y = src_y;
3897 pPriv->src_w = src_w;
3898 pPriv->src_h = src_h;
3899 pPriv->id = surface->id;
3900 pPriv->height = surface->height;
3901 pPriv->bufAddr[0] = surface->offsets[0];
3902 pPriv->currentBuf = 0;
3903 pPriv->srcPitch = surface->pitches[0];
3905 SISDisplayVideo(pScrn, pPriv);
3907 if(pPriv->autopaintColorKey) {
3911 if((pPriv->NoOverlay) && pXAA && pXAA->FillMono8x8PatternRects) {
3922 (*pXAA->FillSolidRects)(pScrn, pPriv->colorKey, GXcopy, ~0,
3926 xf86XVFillKeyHelper(pScrn->pScreen, (pPriv->NoOverlay) ? 0x00ff0000 : pPriv->colorKey, clipBoxes);
3933 pPriv->videoStatus = CLIENT_VIDEO_ON;
4044 SISSetPortDefaultsBlit(ScrnInfoPtr pScrn, SISBPortPrivPtr pPriv)
4047 pPriv->vsync = 0;
4061 SISBPortPrivPtr pPriv;
4091 pPriv = (SISBPortPrivPtr)(pSiS->blitPriv);
4096 REGION_NULL(pScreen, &pPriv->blitClip[i]);
4098 REGION_INIT(pScreen, &pPriv->blitClip[i], NullBox, 0);
4100 pPriv->videoStatus[i] = 0;
4101 pPriv->currentBuf[i] = 0;
4102 pPriv->handle[i] = NULL;
4106 pPriv->VBlankTriggerCRT1 = 0; /* SCANLINE_TRIGGER_ENABLE | SCANLINE_TR_CRT1; */
4107 pPriv->VBlankTriggerCRT2 = 0; /* SCANLINE_TRIGGER_ENABLE | SCANLINE_TR_CRT2; */
4109 pPriv->AccelCmd = YUVRGB_BLIT_330;
4111 pPriv->AccelCmd = YUVRGB_BLIT_325;
4133 SISSetPortDefaultsBlit(pScrn, pPriv);
4143 SISBPortPrivPtr pPriv = (SISBPortPrivPtr)(pSiS->blitPriv);
4146 *value = pPriv->vsync;
4156 SISBPortPrivPtr pPriv = (SISBPortPrivPtr)(pSiS->blitPriv);
4160 pPriv->vsync = value;
4162 SISSetPortDefaultsBlit(pScrn, pPriv);
4171 SISBPortPrivPtr pPriv = (SISBPortPrivPtr)(pSiS->blitPriv);
4179 REGION_EMPTY(pScrn->pScreen, &pPriv->blitClip[index]);
4183 pPriv->videoStatus[index] = 0;
4184 SISFreeFBMemory(pScrn, &pPriv->handle[(int)index]);
4202 SISBPortPrivPtr pPriv = (SISBPortPrivPtr)(pSiS->blitPriv);
4247 if(!(pPriv->bufAddr[index][0] = SISAllocateFBMemory(pScrn, &pPriv->handle[index], totalSize << 1)))
4250 pPriv->bufAddr[index][1] = pPriv->bufAddr[index][0] + totalSize;
4261 if(!RegionsEqual(&pPriv->blitClip[index], clipBoxes)) {
4263 if(!REGION_EQUAL(pScrn->pScreen, &pPriv->blitClip[index], clipBoxes)) {
4272 REGION_COPY(pScrn->pScreen, &pPriv->blitClip[index], clipBoxes);
4278 ybased = pSiS->FbBase + pPriv->bufAddr[index][pPriv->currentBuf[index]];
4279 uvbased = pSiS->FbBase + pPriv->bufAddr[index][pPriv->currentBuf[index]] + bytesize;
4359 MyPacket.P12_Command |= pPriv->AccelCmd |
4368 if(pPriv->vsync) {
4375 MyPacket.P12_Command |= pPriv->VBlankTriggerCRT1;
4377 MyPacket.P12_Command |= pPriv->VBlankTriggerCRT2;
4383 MyPacket.P12_Command |= pPriv->VBlankTriggerCRT2;
4385 MyPacket.P12_Command |= pPriv->VBlankTriggerCRT1;
4432 MyPacket.P12_Command |= pPriv->VBlankTriggerCRT1;
4434 MyPacket.P12_Command |= pPriv->VBlankTriggerCRT2;
4482 MyPacket.P12_YSrcAddr = pPriv->bufAddr[index][pPriv->currentBuf[index]] + offsety + FBOFFSET;
4483 MyPacket.P12_UVSrcAddr = pPriv->bufAddr[index][pPriv->currentBuf[index]] + bytesize + offsetuv + FBOFFSET;
4486 MyPacket.P12_Command &= ~(pPriv->VBlankTriggerCRT1 | pPriv->VBlankTriggerCRT2);
4502 xf86DrvMsg(0, X_INFO, "vsync %d, debug %d\n", pPriv->vsync, debug);
4506 pPriv->currentBuf[index] ^= 1;
4509 pPriv->freeTime[index] = currentTime.milliseconds + FREE_DELAY;
4510 pPriv->videoStatus[index] = FREE_TIMER;
4605 SISPortPrivPtr pPriv = NULL;
4615 pPriv = GET_PORT_PRIVATE(pScrn);
4616 if(!pPriv->videoStatus) pPriv = NULL;
4619 if(pPriv) {
4620 if(pPriv->videoStatus & TIMER_MASK) {
4621 if(pPriv->videoStatus & OFF_TIMER) {
4623 if(pPriv->offTime < now) {
4626 close_overlay(pSiS, pPriv);
4628 pPriv->mustwait = 1;
4629 pPriv->videoStatus = FREE_TIMER;
4630 pPriv->freeTime = now + FREE_DELAY;
4632 } else if(pPriv->videoStatus & FREE_TIMER) {
4633 if(pPriv->freeTime < now) {
4634 SISFreeFBMemory(pScrn, &pPriv->handle);
4635 pPriv->mustwait = 1;
4636 pPriv->videoStatus = 0;