Bool PVR2D_PerfInit(ScreenPtr pScreen) { ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; FBDevPtr fbdev = FBDEVPTR(pScrn); int t; memset(&perf_counters, 0, sizeof(struct sgx_perf_counters)); if (!xf86GetOptValInteger(fbdev->Options, OPTION_PERF_TIME, &t)) return FALSE; fbdev->perf_timer = TimerSet(fbdev->perf_timer, 0, t, perfCountersCallback, pScrn); return TRUE; }
static CARD32 perfCountersCallback(OsTimerPtr timer, CARD32 time, pointer arg) { ScrnInfoPtr pScrn = arg; FBDevPtr fbdev = FBDEVPTR(pScrn); int i, t; xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Memory allocation statistics:\n" "malloc: %.4f megabytes/%4ld segments\n" "shm: %.4f megabytes/%4ld segments\n" "total: %.4f megabytes/%4ld segments (%.4f avg)\n", (float) perf_counters.malloc_bytes / (1024 * 1024), perf_counters.malloc_segments, (float) perf_counters.shm_bytes / (1024 * 1024), perf_counters.shm_segments, (float) (perf_counters.malloc_bytes + perf_counters.shm_bytes) / (1024 * 1024), perf_counters.malloc_segments + perf_counters.shm_segments, (float) ((perf_counters.malloc_bytes + perf_counters.shm_bytes) / (perf_counters.malloc_segments + perf_counters.shm_segments)) / (1024 * 1024)); xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Solid: %8ld HW %8ld SW %8ld ALL\n", perf_counters.hw_solid, perf_counters.sw_solid, perf_counters.hw_solid + perf_counters.sw_solid); for (i = GXclear; i <= GXset; i++) if (perf_counters.solid_alu[i]) xf86DrvMsg(pScrn->scrnIndex, X_INFO, " %s: %8ld\n", alu[i], perf_counters.solid_alu[i]); xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Copy: %8ld HW %8ld SW %8ld ALL\n", perf_counters.hw_copy, perf_counters.sw_copy, perf_counters.hw_copy + perf_counters.sw_copy); for (i = GXclear; i <= GXset; i++) if (perf_counters.copy_alu[i]) xf86DrvMsg(pScrn->scrnIndex, X_INFO, " %s: %8ld\n", alu[i], perf_counters.copy_alu[i]); xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Cache: %8ld FLUSH %8ld INVAL\n", perf_counters.cache_flush, perf_counters.cache_inval); xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Fallback: %8ld GXcopy %8ld bitsPerPixel %8ld isSolid\n", perf_counters.fallback_GXcopy, perf_counters.fallback_bitsPerPixel, perf_counters.fallback_isSolid); xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Fallback: Solid: %8ld validateDst %8ld getFormatDst\n", perf_counters.fallback_solid_validateDst, perf_counters.fallback_solid_getFormatDst); xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Fallback: Copy: %8ld validateSrc %8ld validateDst %8ld getFormatSrc %8ld getFormatDst\n\n", perf_counters.fallback_copy_validateSrc, perf_counters.fallback_copy_validateDst, perf_counters.fallback_copy_getFormatSrc, perf_counters.fallback_copy_getFormatDst); if (xf86IsOptionSet(fbdev->Options, OPTION_PERF_RESET)) memset(&perf_counters, 0, sizeof(struct sgx_perf_counters)); xf86GetOptValInteger(fbdev->Options, OPTION_PERF_TIME, &t); return t; }
void xgiOptions(ScrnInfoPtr pScrn) { XGIPtr pXGI = XGIPTR(pScrn); MessageType from; char *strptr; static const char *mybadparm = "\"%s\" is is not a valid parameter for option \"%s\"\n"; static const char *disabledstr = "disabled"; static const char *enabledstr = "enabled"; static const char *ilrangestr = "Illegal %s parameter. Valid range is %d through %d\n"; /* Collect all of the relevant option flags (fill in pScrn->options) */ xf86CollectOptions(pScrn, NULL); /* Process the options */ if(!(pXGI->Options = malloc(sizeof(XGIOptions)))) return; memcpy(pXGI->Options, XGIOptions, sizeof(XGIOptions)); xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, pXGI->Options); /* Set defaults */ /* #ifdef __powerpc__ pXGI->NoAccel = TRUE; #endif */ pXGI->TurboQueue = TRUE; #ifdef XGIVRAMQ /* TODO: Option (315 series VRAM command queue) */ /* But beware: xgifb does not know about this!!! */ pXGI->cmdQueueSize = 512*1024; #endif pXGI->doRender = TRUE; pXGI->HWCursor = TRUE; pXGI->Rotate = FALSE; pXGI->ShadowFB = FALSE; /* Jong 01/22/2009; only XG40 has 3-d feature */ if(pXGI->Chipset == PCI_CHIP_XGIXG40) pXGI->loadDRI = TRUE; else pXGI->loadDRI = FALSE; pXGI->agpWantedPages = AGP_PAGES; pXGI->NoXvideo = FALSE; pXGI->maxxfbmem = 0; pXGI->OptROMUsage = -1; pXGI->noInternalModes = FALSE; pXGI->NonDefaultPAL = pXGI->NonDefaultNTSC = -1; pXGI->restorebyset = TRUE; pXGI->nocrt2ddcdetection = FALSE; pXGI->forcecrt2redetection = TRUE; /* default changed since 13/09/2003 */ pXGI->SenseYPbPr = TRUE; pXGI->ForceCRT1Type = CRT1_VGA; pXGI->ForceCRT2Type = CRT2_DEFAULT; pXGI->ForceYPbPrAR = TV_YPBPR169; pXGI->ForceTVType = -1; pXGI->CRT1gamma = TRUE; pXGI->CRT1gammaGiven = FALSE; pXGI->CRT2gamma = TRUE; pXGI->XvGamma = FALSE; pXGI->XvGammaGiven = FALSE; pXGI->enablexgictrl = FALSE; pXGI->XvDefBri = 0; pXGI->XvDefCon = 4; pXGI->XvDefHue = 0; pXGI->XvDefSat = 0; pXGI->XvDefDisableGfx = FALSE; pXGI->XvDefDisableGfxLR = FALSE; pXGI->XvUseMemcpy = TRUE; pXGI->XvGammaRed = pXGI->XvGammaGreen = pXGI->XvGammaBlue = 1000; #ifdef XGIMERGED pXGI->MergedFB = pXGI->MergedFBAuto = FALSE; pXGI->CRT2Position = xgiRightOf; pXGI->CRT2HSync = NULL; pXGI->CRT2VRefresh = NULL; pXGI->MetaModes = NULL; pXGI->MergedFBXDPI = pXGI->MergedFBYDPI = 0; #ifdef XGIXINERAMA pXGI->UsexgiXinerama = TRUE; pXGI->CRT2IsScrn0 = FALSE; #endif #endif #ifdef XGI_CP XGI_CP_OPT_DEFAULT #endif /* Collect the options */ int TargetRefreshRate = 0; if(xf86GetOptValInteger(pXGI->Options /* pScrn->monitor->options */, OPTION_TARGET_RATE, &TargetRefreshRate)) { xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Monitor (Option) : Set target refresh rate at %d for all modes...\n", TargetRefreshRate); } pXGI->TargetRefreshRate = TargetRefreshRate; pXGI->IgnoreDDC = FALSE; if(xf86GetOptValBool(pXGI->Options, OPTION_IGNORE_DDC, &pXGI->IgnoreDDC)) { if(pXGI->IgnoreDDC == TRUE) xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Monitor (Option) : IgnoreDDC \n"); } #if 0 /* can support 1280x768 but not being applied */ else { pXGI->IgnoreDDC = TRUE; xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "Monitor (Option) : set IgnoreDDC as default\n"); } #endif pXGI->Non_DDC_DefaultMode = FALSE; pXGI->Non_DDC_DefaultResolutionX = 1024; pXGI->Non_DDC_DefaultResolutionY = 768; pXGI->Non_DDC_DefaultRefreshRate = 60; char ModeStringFormat[32] = "%[^x]x%[^@]@%[^\n]" /* "%[^x]+%[^@]+%[^H^z]" */; char* Non_DDCDefaultMode = ""; char Non_DDCDefaultResolutionX[8] = ""; char Non_DDCDefaultResolutionY[8] = ""; char Non_DDCDefaultRefreshRate[8] = ""; /* strcpy(ModeStringFormat, "%[^+]x%[^+]@%[^\n]"); */ if((Non_DDCDefaultMode = (char *)xf86GetOptValString(pXGI->Options, OPTION_NONDDC_DEFAULT_MODE))) { sscanf(Non_DDCDefaultMode, ModeStringFormat, Non_DDCDefaultResolutionX , Non_DDCDefaultResolutionY , Non_DDCDefaultRefreshRate ); if( (xf86NameCmp(Non_DDCDefaultResolutionX,"") == NULL) || (xf86NameCmp(Non_DDCDefaultResolutionY,"") == NULL) ) { strcpy(Non_DDCDefaultResolutionX, "1024"); strcpy(Non_DDCDefaultResolutionY, "768"); } if( (xf86NameCmp(Non_DDCDefaultRefreshRate,"") == NULL) || (xf86NameCmp(Non_DDCDefaultRefreshRate,"auto") == NULL) ) strcpy(Non_DDCDefaultRefreshRate, "60"); ErrorF("Non-DDC default mode is (%s x %s @ %s Hz)...\n", Non_DDCDefaultResolutionX , Non_DDCDefaultResolutionY , Non_DDCDefaultRefreshRate ); pXGI->Non_DDC_DefaultMode = TRUE; pXGI->Non_DDC_DefaultResolutionX = atoi(Non_DDCDefaultResolutionX); pXGI->Non_DDC_DefaultResolutionY = atoi(Non_DDCDefaultResolutionY); pXGI->Non_DDC_DefaultRefreshRate = atoi(Non_DDCDefaultRefreshRate); ErrorF("Non-DDC default mode is (%d x %d @ %d Hz)...\n", pXGI->Non_DDC_DefaultResolutionX , pXGI->Non_DDC_DefaultResolutionY , pXGI->Non_DDC_DefaultRefreshRate ); } /* Jong@09092009; gamma value */ g_GammaRed = g_GammaGreen = g_GammaBlue = 1000; char GammaStringFormat[32] = "%[^,],%[^,],%[^\n]"; char* GammaRGB = ""; char GammaRed[8] = ""; char GammaGreen[8] = ""; char GammaBlue[8] = ""; if((GammaRGB = (char *)xf86GetOptValString(pXGI->Options, OPTION_GAMMA_RGB))) { ErrorF("GammaRGB is (%s) from xorg.conf\n", GammaRGB); sscanf(GammaRGB, GammaStringFormat, GammaRed , GammaGreen , GammaBlue ); ErrorF("GammaRGB is (%s, %s, %s) after parsing\n", GammaRed, GammaGreen, GammaBlue); g_GammaRed = atoi(GammaRed); g_GammaGreen = atoi(GammaGreen); g_GammaBlue = atoi(GammaBlue); ErrorF("GammaRGB is (%d, %d, %d) after atoi()\n", g_GammaRed, g_GammaGreen, g_GammaBlue); } /* MaxXFBMem * This options limits the amount of video memory X uses for screen * and off-screen buffers. This option should be used if using DRI * is intended. The kernel framebuffer driver required for DRM will * start its memory heap at 12MB if it detects more than 16MB, at 8MB if * between 8 and 16MB are available, otherwise at 4MB. So, if the amount * of memory X uses, a clash between the framebuffer's memory heap * and X is avoided. The amount is to be specified in KB. */ if(xf86GetOptValULong(pXGI->Options, OPTION_MAXXFBMEM, &pXGI->maxxfbmem)) { xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "MaxXFBMem: Framebuffer memory shall be limited to %ld KB\n", pXGI->maxxfbmem); pXGI->maxxfbmem *= 1024; } /* NoAccel * Turns off 2D acceleration */ if(xf86ReturnOptValBool(pXGI->Options, OPTION_NOACCEL, FALSE)) { pXGI->NoAccel = TRUE; xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "2D Acceleration disabled\n"); } /* Jong@10022009; for xvinfo */ if ((pXGI->Chipset== PCI_CHIP_XGIXG20)||(pXGI->Chipset== PCI_CHIP_XGIXG21)||(pXGI->Chipset== PCI_CHIP_XGIXG27)) pXGI->NoXvideo = TRUE; pXGI->useEXA = FALSE; /* default : XAA */ if(!pXGI->NoAccel) { from = X_DEFAULT; if((strptr = (char *)xf86GetOptValString(pXGI->Options, OPTION_ACCELMETHOD))) { if(!xf86NameCmp(strptr,"XAA")) { from = X_CONFIG; pXGI->useEXA = FALSE; } else if(!xf86NameCmp(strptr,"EXA")) { from = X_CONFIG; pXGI->useEXA = TRUE; } } xf86DrvMsg(pScrn->scrnIndex, from, "Using %s acceleration architecture\n", pXGI->useEXA ? "EXA" : "XAA"); } /* SWCursor * HWCursor * Chooses whether to use the hardware or software cursor */ from = X_DEFAULT; if(xf86GetOptValBool(pXGI->Options, OPTION_HW_CURSOR, &pXGI->HWCursor)) { from = X_CONFIG; } if(xf86ReturnOptValBool(pXGI->Options, OPTION_SW_CURSOR, FALSE)) { from = X_CONFIG; pXGI->HWCursor = FALSE; } xf86DrvMsg(pScrn->scrnIndex, from, "Using %s cursor\n", pXGI->HWCursor ? "HW" : "SW"); /* * MergedFB * * Enable/disable and configure merged framebuffer mode * */ #ifdef XGIMERGED if (IS_DUAL_HEAD(pXGI)) { Bool val; if(xf86GetOptValBool(pXGI->Options, OPTION_MERGEDFB, &val)) { xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "Option \"MergedFB\" cannot be used in Dual Head mode\n"); } } else #endif /* Some options can only be specified in the Master Head's Device * section. Here we give the user a hint in the log. */ if (IS_DUAL_HEAD(pXGI) && IS_SECOND_HEAD(pXGI)) { static const char *mystring = "Option \"%s\" is only accepted in Master Head's device section\n"; Bool val; if(xf86GetOptValBool(pXGI->Options, OPTION_TURBOQUEUE, &val)) { xf86DrvMsg(pScrn->scrnIndex, X_WARNING, mystring, "TurboQueue"); } if(xf86GetOptValBool(pXGI->Options, OPTION_RESTOREBYSET, &val)) { xf86DrvMsg(pScrn->scrnIndex, X_WARNING, mystring, "RestoreBySetMode"); } if(xf86GetOptValBool(pXGI->Options, OPTION_ENABLEHOTKEY, &val)) { xf86DrvMsg(pScrn->scrnIndex, X_WARNING, mystring, "EnableHotKey"); } if(xf86GetOptValBool(pXGI->Options, OPTION_ENABLEXGICTRL, &val)) { xf86DrvMsg(pScrn->scrnIndex, X_WARNING, mystring, "EnableXGICtrl"); } if(xf86GetOptValBool(pXGI->Options, OPTION_USEROMDATA, &val)) { xf86DrvMsg(pScrn->scrnIndex, X_WARNING, mystring, "UseROMData"); } if(xf86GetOptValBool(pXGI->Options, OPTION_NODDCFORCRT2, &val)) { xf86DrvMsg(pScrn->scrnIndex, X_WARNING, mystring, "NoCRT2Detection"); } if(xf86GetOptValBool(pXGI->Options, OPTION_FORCECRT2REDETECTION, &val)) { xf86DrvMsg(pScrn->scrnIndex, X_WARNING, mystring, "ForceCRT2ReDetection"); } if(xf86GetOptValBool(pXGI->Options, OPTION_SENSEYPBPR, &val)) { xf86DrvMsg(pScrn->scrnIndex, X_WARNING, mystring, "SenseYPbPr"); } if(xf86GetOptValString(pXGI->Options, OPTION_FORCE_CRT1TYPE)) { xf86DrvMsg(pScrn->scrnIndex, X_WARNING, mystring, "ForceCRT1Type"); } if(xf86GetOptValString(pXGI->Options, OPTION_FORCE_CRT2TYPE)) { xf86DrvMsg(pScrn->scrnIndex, X_WARNING, mystring, "ForceCRT2Type"); } if(xf86GetOptValString(pXGI->Options, OPTION_YPBPRAR)) { xf86DrvMsg(pScrn->scrnIndex, X_WARNING, mystring, "YPbPrAspectRatio"); } if(xf86GetOptValString(pXGI->Options, OPTION_SPECIALTIMING)) { xf86DrvMsg(pScrn->scrnIndex, X_WARNING, mystring, "SpecialTiming"); } if(xf86GetOptValBool(pXGI->Options, OPTION_CRT2GAMMA, &val)) { xf86DrvMsg(pScrn->scrnIndex, X_WARNING, mystring, "CRT2Gamma"); } #ifdef XGI_CP XGI_CP_OPT_DH_WARN #endif } else {