📄 aticonsole.c
字号:
*/ pVbe->pInt10->cx = 0x0001; xf86ExecX86int10(pVbe->pInt10); xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, "Setting TV active: ax=0x%04x, bx=0x%04x, cx=0x%04x\n", pVbe->pInt10->ax, pVbe->pInt10->bx, pVbe->pInt10->cx); if (pVbe->pInt10->ax & 0xff00) { xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, "Setting TV active failed\n"); } else { pATI->tvActive = TRUE; } } } else { pATI->tvActive = TRUE; xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, "TV-Out is currently enabled (TV-Out revision code: %d).\n", (pVbe->pInt10->dx >> 8) & 0xff); switch ((pVbe->pInt10->cx >> 8) & 0xff) { case 0: xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, "Reference frequency 29.49892\n"); break; case 1: xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, "Reference frequency 28.63636\n"); break; case 2: xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, "Reference frequency 14.31818\n"); break; case 3: xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, "Reference frequency 27.00000\n"); break; default: xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, "Unknown reference frequency cx=0x%04x\n", pVbe->pInt10->cx); } /* Return TV standard * see Programmer's Guide under "TV Out Specific Functions" * It's not clear exactly which adapters support these */ pVbe->pInt10->num = 0x10; pVbe->pInt10->ax = 0xa071; pVbe->pInt10->bx = 0x00; xf86ExecX86int10(pVbe->pInt10); xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, "TV standard query result: ax=0x%04x, bx=0x%04x, cx=0x%04x\n", pVbe->pInt10->ax, pVbe->pInt10->bx, pVbe->pInt10->cx); if (pVbe->pInt10->ax & 0xff00) { xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, "Failed to return TV standard.\n"); } else { tv_std = pVbe->pInt10->cx & 0x00ff; switch (tv_std) { case ATI_TV_STD_NTSC: case ATI_TV_STD_PAL: case ATI_TV_STD_PALM: case ATI_TV_STD_PAL60: case ATI_TV_STD_NTSCJ: case ATI_TV_STD_PALCN: case ATI_TV_STD_PALN: case ATI_TV_STD_SCARTPAL: xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, "Current TV standard: %s\n", ATITVStandardNames[tv_std]); break; default: xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, "Unrecognized TV standard return code cx=0x%04x\n", pVbe->pInt10->cx); } tv_std_request = pATI->OptionTvStd; if (tv_std_request < 0 || tv_std_request > ATI_TV_STD_NONE || tv_std_request == ATI_TV_STD_RESERVED1 || tv_std_request == ATI_TV_STD_RESERVED2) { xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, "Invalid TV standard requested, please check configuration file\n"); } else if (tv_std_request != ATI_TV_STD_NONE) { /* Set TV standard if requested (LT Pro not supported) */ if (pATI->Chip != ATI_CHIP_264LTPRO && tv_std_request != tv_std) { pVbe->pInt10->num = 0x10; pVbe->pInt10->ax = 0xa070; pVbe->pInt10->bx = 0x0003; /* sub-function: set TV standard */ pVbe->pInt10->cx = tv_std_request; xf86ExecX86int10(pVbe->pInt10); if (pVbe->pInt10->ax & 0xff00) xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, "Failed to set TV standard\n"); else xf86DrvMsg(pScreenInfo->scrnIndex, X_CONFIG, "Set TV standard to %s\n", ATITVStandardNames[tv_std_request]); } else { xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, "Setting TV standard not supported on ATI Rage LT Pro\n"); } } } } } else { xf86DrvMsg(pScreenInfo->scrnIndex, X_WARNING, "VBE module not loaded\n"); }}#endif /* TV_OUT *//* * ATIEnterGraphics -- * * This function sets the hardware to a graphics video state. */BoolATIEnterGraphics( ScreenPtr pScreen, ScrnInfoPtr pScreenInfo, ATIPtr pATI){ /* Map apertures */ if (!ATIMapApertures(pScreenInfo->scrnIndex, pATI)) return FALSE; /* Unlock device */ ATIUnlock(pATI); /* Calculate hardware data */ if (pScreen && !ATIModeCalculate(pScreenInfo->scrnIndex, pATI, &pATI->NewHW, pScreenInfo->currentMode)) return FALSE; pScreenInfo->vtSema = TRUE;#ifdef TV_OUT if (pATI->OptionTvOut) { xf86LoaderRefSymLists(vbeSymbols, NULL); if (pATI->pVBE) { if (VBEGetVBEMode(pATI->pVBE, &pATI->vbemode)) { xf86DrvMsg(pScreenInfo->scrnIndex, X_INFO, "Saving VESA mode: 0x%x\n", pATI->vbemode); } } }#endif /* TV_OUT */ /* Save current state */ ATIModeSave(pScreenInfo, pATI, &pATI->OldHW);#ifdef TV_OUT if (pATI->OptionTvOut) ATIProbeAndSetActiveDisplays(pScreenInfo, pATI);#endif /* TV_OUT */ /* Set graphics state */ ATIModeSet(pScreenInfo, pATI, &pATI->NewHW); /* Possibly blank the screen */ if (pScreen) (void)ATISaveScreen(pScreen, SCREEN_SAVER_ON); /* Position the screen */ (*pScreenInfo->AdjustFrame)(pScreenInfo->scrnIndex, pScreenInfo->frameX0, pScreenInfo->frameY0, 0); SetTimeSinceLastInputEvent(); return TRUE;}/* * ATILeaveGraphics -- * * This function restores the hardware to its previous state. */voidATILeaveGraphics( ScrnInfoPtr pScreenInfo, ATIPtr pATI){ if (pScreenInfo->vtSema) { /* If not exiting, save graphics video state */ if (!xf86ServerIsExiting()) ATIModeSave(pScreenInfo, pATI, &pATI->NewHW);#ifdef TV_OUT if (pATI->OptionTvOut) ATIProbeAndSetActiveDisplays(pScreenInfo, pATI);#endif /* TV_OUT */ /* Restore mode in effect on server entry */ ATIModeSet(pScreenInfo, pATI, &pATI->OldHW); pScreenInfo->vtSema = FALSE; } /* Lock device */ ATILock(pATI); /* Unmap apertures */#ifdef AVOID_DGA if (!pATI->Closeable)#else /* AVOID_DGA */ if (!pATI->Closeable || !pATI->nDGAMode)#endif /* AVOID_DGA */ ATIUnmapApertures(pScreenInfo->scrnIndex, pATI); SetTimeSinceLastInputEvent();}/* * ATISwitchMode -- * * This function switches to another graphics video state. */_X_EXPORT BoolATISwitchMode( int iScreen, DisplayModePtr pMode, int flags){ ScrnInfoPtr pScreenInfo = xf86Screens[iScreen]; ATIPtr pATI = ATIPTR(pScreenInfo); /* Calculate new hardware data */ if (!ATIModeCalculate(iScreen, pATI, &pATI->NewHW, pMode)) return FALSE; /* Set new hardware state */ if (pScreenInfo->vtSema) { pScreenInfo->currentMode = pMode;#ifdef XF86DRI_DEVEL if (pATI->directRenderingEnabled) { DRILock(pScreenInfo->pScreen,0); ATIDRIWaitForIdle(pATI); }#endif /* XF86DRI_DEVEL */ ATIModeSet(pScreenInfo, pATI, &pATI->NewHW);#ifdef XF86DRI_DEVEL if (pATI->directRenderingEnabled) { DRIUnlock(pScreenInfo->pScreen); }#endif /* XF86DRI_DEVEL */ } SetTimeSinceLastInputEvent(); return TRUE;}/* * ATIEnterVT -- * * This function sets the server's virtual console to a graphics video state. */_X_EXPORT BoolATIEnterVT( int iScreen, int flags){ ScrnInfoPtr pScreenInfo = xf86Screens[iScreen]; ScreenPtr pScreen = pScreenInfo->pScreen; ATIPtr pATI = ATIPTR(pScreenInfo); PixmapPtr pScreenPixmap; DevUnion PixmapPrivate; Bool Entered; if (!ATIEnterGraphics(NULL, pScreenInfo, pATI)) return FALSE; /* The rest of this isn't needed for shadowfb */ if (pATI->OptionShadowFB) {#ifdef XF86DRI_DEVEL if (pATI->directRenderingEnabled) { /* get the Mach64 back into shape after resume */ ATIDRIResume(pScreen); DRIUnlock(pScreen); }#endif /* XF86DRI_DEVEL */ return TRUE; }#ifndef AVOID_CPIO /* If used, modify banking interface */ if (!miModifyBanking(pScreen, &pATI->BankInfo)) return FALSE;#endif /* AVOID_CPIO */ pScreenPixmap = (*pScreen->GetScreenPixmap)(pScreen); PixmapPrivate = pScreenPixmap->devPrivate; if (!PixmapPrivate.ptr) pScreenPixmap->devPrivate = pScreenInfo->pixmapPrivate; /* Tell framebuffer about remapped aperture */ Entered = (*pScreen->ModifyPixmapHeader)(pScreenPixmap, -1, -1, -1, -1, -1, pATI->pMemory); if (!PixmapPrivate.ptr) { pScreenInfo->pixmapPrivate = pScreenPixmap->devPrivate; pScreenPixmap->devPrivate.ptr = NULL; }#ifdef XF86DRI_DEVEL if (pATI->directRenderingEnabled) { /* get the Mach64 back into shape after resume */ ATIDRIResume(pScreen); DRIUnlock(pScreen); }#endif /* XF86DRI_DEVEL */ return Entered;}/* * ATILeaveVT -- * * This function restores the server's virtual console to its state on server * entry. */_X_EXPORT voidATILeaveVT( int iScreen, int flags){ ScrnInfoPtr pScreenInfo = xf86Screens[iScreen]; ScreenPtr pScreen = pScreenInfo->pScreen; ATIPtr pATI = ATIPTR(pScreenInfo);#ifdef XF86DRI_DEVEL if (pATI->directRenderingEnabled) { DRILock(pScreen,0); ATIDRIWaitForIdle(pATI); }#endif /* XF86DRI_DEVEL */ ATILeaveGraphics(pScreenInfo, ATIPTR(pScreenInfo));}/* * ATIFreeScreen -- * * This function frees all driver data related to a screen. */_X_EXPORT voidATIFreeScreen( int iScreen, int flags){ ScreenPtr pScreen = screenInfo.screens[iScreen]; ScrnInfoPtr pScreenInfo = xf86Screens[iScreen]; ATIPtr pATI = ATIPTR(pScreenInfo); if (pATI->Closeable || (serverGeneration > 1)) ATII2CFreeScreen(iScreen); if (pATI->Closeable) (void)(*pScreen->CloseScreen)(iScreen, pScreen); ATILeaveGraphics(pScreenInfo, pATI);#ifndef AVOID_CPIO xfree(pATI->OldHW.frame_buffer); xfree(pATI->NewHW.frame_buffer);#endif /* AVOID_CPIO */ xfree(pATI->pShadow);#ifndef AVOID_DGA xfree(pATI->pDGAMode);#endif /* AVOID_DGA */ xfree(pATI); pScreenInfo->driverPrivate = NULL;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -