Lines Matching refs:pScrn

94 static Bool VBOXPreInit(ScrnInfoPtr pScrn, int flags);
96 static Bool VBOXEnterVT(ScrnInfoPtr pScrn);
97 static void VBOXLeaveVT(ScrnInfoPtr pScrn);
102 static Bool VBOXSwitchMode(ScrnInfoPtr pScrn, DisplayModePtr pMode);
103 static void VBOXAdjustFrame(ScrnInfoPtr pScrn, int x, int y);
104 static void VBOXFreeScreen(ScrnInfoPtr pScrn);
106 static void VBOXDisplayPowerManagementSet(ScrnInfoPtr pScrn, int mode, int flags);
110 static Bool VBOXMapVidMem(ScrnInfoPtr pScrn);
111 static void VBOXUnmapVidMem(ScrnInfoPtr pScrn);
112 static void VBOXSaveMode(ScrnInfoPtr pScrn);
113 static void VBOXRestoreMode(ScrnInfoPtr pScrn);
114 static void setSizesAndCursorIntegration(ScrnInfoPtr pScrn, Bool fScreenInitTime);
118 # define xf86ScrnToScreen(pScrn) screenInfo.screens[(pScrn)->scrnIndex]
121 static inline void VBOXSetRec(ScrnInfoPtr pScrn)
123 if (!pScrn->driverPrivate)
126 pScrn->driverPrivate = pVBox;
238 static Bool adjustScreenPixmap(ScrnInfoPtr pScrn, int width, int height)
240 ScreenPtr pScreen = xf86ScrnToScreen(pScrn);
241 VBOXPtr pVBox = VBOXGetRec(pScrn);
242 int adjustedWidth = pScrn->bitsPerPixel == 16 ? (width + 1) & ~1 : width;
243 int cbLine = adjustedWidth * pScrn->bitsPerPixel / 8;
252 TRACE_LOG("pPixmap=%p adjustedWidth=%d height=%d pScrn->depth=%d pScrn->bitsPerPixel=%d cbLine=%d pVBox->base=%p pPixmap->drawable.width=%d pPixmap->drawable.height=%d\n",
253 (void *)pPixmap, adjustedWidth, height, pScrn->depth,
254 pScrn->bitsPerPixel, cbLine, pVBox->base,
262 xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
267 if (pScrn->vtSema)
268 vbvxClearVRAM(pScrn, ((size_t)pScrn->virtualX) * pScrn->virtualY * (pScrn->bitsPerPixel / 8),
269 ((size_t)adjustedWidth) * height * (pScrn->bitsPerPixel / 8));
270 pScreen->ModifyPixmapHeader(pPixmap, adjustedWidth, height, pScrn->depth, pScrn->bitsPerPixel, cbLine, pVBox->base);
272 pScrn->displayWidth = pScrn->virtualX = adjustedWidth;
273 pScrn->virtualY = height;
287 static void setModeRandR11(ScrnInfoPtr pScrn, DisplayModePtr pMode, Bool fScreenInitTime, Bool fEnterVTTime,
290 VBOXPtr pVBox = VBOXGetRec(pScrn);
291 struct vbvxFrameBuffer frameBuffer = { 0, 0, pMode->HDisplay, pMode->VDisplay, pScrn->bitsPerPixel};
300 pScrn->displayWidth = pScrn->virtualX = pMode->HDisplay;
301 pScrn->virtualY = pMode->VDisplay;
305 xf86ScrnToScreen(pScrn)->width = pMode->HDisplay;
306 xf86ScrnToScreen(pScrn)->height = pMode->VDisplay;
309 * pScrn->ModifyPixmapHeader() expects certain things to be set up when
310 * it sees pScrn->vtSema set to true which are not quite done at this
313 pScrn->vtSema = FALSE;
314 adjustScreenPixmap(pScrn, pMode->HDisplay, pMode->VDisplay);
316 pScrn->vtSema = TRUE;
318 if (pMode->HDisplay != 0 && pMode->VDisplay != 0 && pScrn->vtSema)
319 vbvxSetMode(pScrn, 0, cXPhysical, cYPhysical, 0, 0, true, true, &frameBuffer);
320 pScrn->currentMode = pMode;
332 static void setModeRandR12(ScrnInfoPtr pScrn, unsigned cScreen)
334 VBOXPtr pVBox = VBOXGetRec(pScrn);
336 struct vbvxFrameBuffer frameBuffer = { pVBox->pScreens[0].paCrtcs->x, pVBox->pScreens[0].paCrtcs->y, pScrn->virtualX,
337 pScrn->virtualY, pScrn->bitsPerPixel };
344 xf86RandR12GetOriginalVirtualSize(pScrn, &originalX, &originalY);
348 if (pVBox->pScreens[i].paCrtcs->mode.HDisplay != 0 && pVBox->pScreens[i].paCrtcs->mode.VDisplay != 0 && pScrn->vtSema)
349 vbvxSetMode(pScrn, i, pVBox->pScreens[i].paCrtcs->mode.HDisplay, pVBox->pScreens[i].paCrtcs->mode.VDisplay,
356 static void setAllModesRandR12(ScrnInfoPtr pScrn)
358 setModeRandR12(pScrn, 0);
365 static Bool vbox_config_resize(ScrnInfoPtr pScrn, int cw, int ch)
367 VBOXPtr pVBox = VBOXGetRec(pScrn);
372 rc = adjustScreenPixmap(pScrn, cw, ch);
376 setAllModesRandR12(pScrn);
388 ScrnInfoPtr pScrn = crtc->scrn;
389 VBOXPtr pVBox = VBOXGetRec(pScrn);
394 setModeRandR12(pScrn, cDisplay);
496 ScrnInfoPtr pScrn = output->scrn;
497 VBOXPtr pVBox = VBOXGetRec(pScrn);
544 ScrnInfoPtr pScrn = output->scrn;
545 VBOXPtr pVBox = VBOXGetRec(pScrn);
696 static void setScreenFunctions(ScrnInfoPtr pScrn, xf86ProbeProc pfnProbe)
698 pScrn->driverVersion = VBOX_VERSION;
699 pScrn->driverName = VBOX_DRIVER_NAME;
700 pScrn->name = VBOX_NAME;
701 pScrn->Probe = pfnProbe;
702 pScrn->PreInit = VBOXPreInit;
703 pScrn->ScreenInit = SCRNINDEXAPI(VBOXScreenInit);
704 pScrn->SwitchMode = SCRNINDEXAPI(VBOXSwitchMode);
705 pScrn->AdjustFrame = SCRNINDEXAPI(VBOXAdjustFrame);
706 pScrn->EnterVT = SCRNINDEXAPI(VBOXEnterVT);
707 pScrn->LeaveVT = SCRNINDEXAPI(VBOXLeaveVT);
708 pScrn->FreeScreen = SCRNINDEXAPI(VBOXFreeScreen);
721 ScrnInfoPtr pScrn;
740 pScrn = xf86ConfigPciEntity(NULL, 0, entity_num, VBOXPCIchipsets,
742 if (pScrn != NULL) {
745 VBOXSetRec(pScrn);
746 pVBox = VBOXGetRec(pScrn);
749 setScreenFunctions(pScrn, NULL);
753 TRACE_LOG("returning %s\n", pScrn == NULL ? "false" : "true");
754 return (pScrn != NULL);
791 ScrnInfoPtr pScrn = NULL;
793 if ((pScrn = xf86ConfigPciEntity(pScrn,0,usedChips[i],
797 setScreenFunctions(pScrn, VBOXProbe);
835 VBOXPreInit(ScrnInfoPtr pScrn, int flags)
846 xf86DrvMsg(pScrn->scrnIndex, X_INFO,
851 if (!xf86LoadSubModule(pScrn, "ramdac"))
855 if (!xf86LoadSubModule(pScrn, "fb"))
858 if (!xf86LoadSubModule(pScrn, "shadowfb"))
861 if (!xf86LoadSubModule(pScrn, "vgahw"))
865 VBOXSetRec(pScrn);
866 pVBox = VBOXGetRec(pScrn);
871 pVBox->pEnt = xf86GetEntityInfo(pScrn->entityList[0]);
886 pScrn->chipset = "vbox";
888 pScrn->rgbBits = 8;
891 pScrn->monitor = pScrn->confScreen->monitor;
892 pScrn->monitor->DDC = NULL;
893 pScrn->monitor->nHsync = 1;
894 pScrn->monitor->hsync[0].lo = 1;
895 pScrn->monitor->hsync[0].hi = 10000;
896 pScrn->monitor->nVrefresh = 1;
897 pScrn->monitor->vrefresh[0].lo = 1;
898 pScrn->monitor->vrefresh[0].hi = 100;
900 pScrn->progClock = TRUE;
905 pScrn->videoRam = pVBox->cbFBMax / 1024;
911 pScrn->clockRanges = xnfcalloc(sizeof(ClockRange), 1);
912 pScrn->clockRanges->minClock = 1000;
913 pScrn->clockRanges->maxClock = 1000000000;
914 pScrn->clockRanges->clockIndex = -1;
915 pScrn->clockRanges->ClockMulFactor = 1;
916 pScrn->clockRanges->ClockDivFactor = 1;
918 if (!xf86SetDepthBpp(pScrn, 24, 0, 0, Support32bppFb))
921 if (pScrn->bitsPerPixel != 32 && pScrn->bitsPerPixel != 16)
923 xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
927 xf86PrintDepthBpp(pScrn);
928 vboxAddModes(pScrn);
931 pScrn->virtualX = VBOX_VIDEO_MAX_VIRTUAL;
932 pScrn->virtualY = VBOX_VIDEO_MAX_VIRTUAL;
937 pScrn->currentMode = pScrn->modes;
940 pScrn->virtualX = pScrn->bitsPerPixel == 16 ? (pScrn->currentMode->HDisplay + 1) & ~1 : pScrn->currentMode->HDisplay;
941 pScrn->virtualY = pScrn->currentMode->VDisplay;
945 pScrn->displayWidth = pScrn->virtualX;
947 xf86PrintModes(pScrn);
950 if (!vgaHWGetHWRec(pScrn))
953 vgaHWSetStdFuncs(VGAHWPTR(pScrn));
954 vgaHWGetIOBase(VGAHWPTR(pScrn));
958 if (!xf86SetWeight(pScrn, rzeros, rzeros))
962 if (!xf86SetDefaultVisual(pScrn, -1))
965 xf86SetGamma(pScrn, gzeros);
968 xf86SetDpi(pScrn, 96, 96);
970 if (pScrn->memPhysBase == 0) {
972 pScrn->memPhysBase = pVBox->pciInfo->regions[0].base_addr;
974 pScrn->memPhysBase = pVBox->pciInfo->memBase[0];
976 pScrn->fbOffset = 0;
988 vboxLoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices,
991 RT_NOREF(pScrn, numColors, indices, colors, pVisual);
996 static void updateGraphicsCapability(ScrnInfoPtr pScrn, Bool hasVT)
998 VBOXPtr pVBox = VBOXGetRec(pScrn);
1011 static void setSizesRandR11(ScrnInfoPtr pScrn)
1013 VBOXPtr pVBox = VBOXGetRec(pScrn);
1017 pNewMode = pScrn->modes != pScrn->currentMode ? pScrn->modes : pScrn->modes->next;
1021 ChangeWindowProperty(ROOT_WINDOW(pScrn), MakeAtom(PREFERRED_MODE_ATOM_NAME,
1028 static void reprobeCursor(ScrnInfoPtr pScrn)
1030 if (ROOT_WINDOW(pScrn) == NULL)
1033 pScrn->EnableDisableFBAccess(pScrn, FALSE);
1034 pScrn->EnableDisableFBAccess(pScrn, TRUE);
1036 pScrn->EnableDisableFBAccess(pScrn->scrnIndex, FALSE);
1037 pScrn->EnableDisableFBAccess(pScrn->scrnIndex, TRUE);
1041 static void setSizesAndCursorIntegration(ScrnInfoPtr pScrn, Bool fScreenInitTime)
1047 RRGetInfo(xf86ScrnToScreen(pScrn), TRUE);
1049 RRGetInfo(xf86ScrnToScreen(pScrn));
1052 setSizesRandR11(pScrn);
1055 if (pScrn->vtSema)
1056 reprobeCursor(pScrn);
1072 ScrnInfoPtr pScrn = (ScrnInfoPtr)pData;
1079 if (pScrn->vtSema)
1080 vbvxReadSizesAndCursorIntegrationFromHGSMI(pScrn, &fNeedUpdate);
1082 setSizesAndCursorIntegration(pScrn, false);
1101 ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
1102 VBOXPtr pVBox = VBOXGetRec(pScrn);
1108 if (!VBOXMapVidMem(pScrn))
1112 VBOXSaveMode(pScrn);
1116 if (!miSetVisualTypes(pScrn->depth, TrueColorMask,
1117 pScrn->rgbBits, TrueColor))
1123 pScrn->virtualX, pScrn->virtualY,
1124 pScrn->xDpi, pScrn->yDpi,
1125 pScrn->displayWidth, pScrn->bitsPerPixel))
1133 visual->offsetRed = pScrn->offset.red;
1134 visual->offsetGreen = pScrn->offset.green;
1135 visual->offsetBlue = pScrn->offset.blue;
1136 visual->redMask = pScrn->mask.red;
1137 visual->greenMask = pScrn->mask.green;
1138 visual->blueMask = pScrn->mask.blue;
1146 pScrn->vtSema = TRUE;
1154 xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Graphics device too old to support.\n");
1157 vbvxSetUpHGSMIHeapInGuest(pVBox, pScrn->videoRam * 1024);
1161 xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Requested monitor count: %u\n", pVBox->cScreens);
1162 vboxEnableVbva(pScrn);
1167 VBoxInitialiseSizeHints(pScrn);
1171 xf86CrtcConfigInit(pScrn, &VBOXCrtcConfigFuncs);
1181 pVBox->pScreens[i].paCrtcs = xf86CrtcCreate(pScrn, &VBOXCrtcFuncs);
1187 = xf86OutputCreate(pScrn, &VBOXOutputFuncs, szOutput);
1203 xf86CrtcSetSizeRange(pScrn, VBOX_VIDEO_MIN_SIZE, VBOX_VIDEO_MIN_SIZE, VBOX_VIDEO_MAX_VIRTUAL, VBOX_VIDEO_MAX_VIRTUAL);
1206 if (!xf86InitialConfiguration(pScrn, TRUE)) {
1207 xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Initial CRTC configuration failed!\n");
1215 pScrn->virtualX = VBOX_VIDEO_MAX_VIRTUAL;
1216 pScrn->virtualY = VBOX_VIDEO_MAX_VIRTUAL;
1224 if (!xf86SetDesiredModes(pScrn)) {
1229 setModeRandR11(pScrn, pScrn->currentMode, true, false, 0, 0);
1233 updateGraphicsCapability(pScrn, TRUE);
1240 RegisterBlockAndWakeupHandlers(vboxBlockHandler, (WakeupHandlerProcPtr)NoopDDA, (pointer)pScrn);
1270 xf86ShowUnusedOptions(pScrn->scrnIndex, pScrn->options);
1273 xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
1281 static Bool VBOXEnterVT(ScrnInfoPtr pScrn)
1283 VBOXPtr pVBox = VBOXGetRec(pScrn);
1293 vbvxSetUpHGSMIHeapInGuest(pVBox, pScrn->videoRam * 1024);
1294 vboxEnableVbva(pScrn);
1297 if (!xf86SetDesiredModes(pScrn)) {
1301 setModeRandR11(pScrn, pScrn->currentMode, false, true, cXOverRide, cYOverRide);
1302 DeleteProperty(ROOT_WINDOW(pScrn), MakeAtom(NO_VT_ATOM_NAME, sizeof(NO_VT_ATOM_NAME) - 1, TRUE));
1304 updateGraphicsCapability(pScrn, TRUE);
1308 static void VBOXLeaveVT(ScrnInfoPtr pScrn)
1311 VBOXPtr pVBox = VBOXGetRec(pScrn);
1322 ChangeWindowProperty(ROOT_WINDOW(pScrn), MakeAtom(NO_VT_ATOM_NAME, sizeof(NO_VT_ATOM_NAME) - 1, FALSE), XA_INTEGER, 32,
1325 updateGraphicsCapability(pScrn, FALSE);
1326 vboxDisableVbva(pScrn);
1327 vbvxClearVRAM(pScrn, ((size_t)pScrn->virtualX) * pScrn->virtualY * (pScrn->bitsPerPixel / 8), 0);
1328 VBOXRestoreMode(pScrn);
1334 ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
1335 VBOXPtr pVBox = VBOXGetRec(pScrn);
1338 if (pScrn->vtSema)
1346 vboxDisableVbva(pScrn);
1347 vbvxClearVRAM(pScrn, ((size_t)pScrn->virtualX) * pScrn->virtualY * (pScrn->bitsPerPixel / 8), 0);
1349 if (pScrn->vtSema)
1350 VBOXRestoreMode(pScrn);
1351 if (pScrn->vtSema)
1352 VBOXUnmapVidMem(pScrn);
1353 pScrn->vtSema = FALSE;
1369 static Bool VBOXSwitchMode(ScrnInfoPtr pScrn, DisplayModePtr pMode)
1375 rc = xf86SetSingleMode(pScrn, pMode, RR_Rotate_0);
1377 setModeRandR11(pScrn, pMode, false, false, 0, 0);
1383 static void VBOXAdjustFrame(ScrnInfoPtr pScrn, int x, int y)
1384 { RT_NOREF(pScrn, x, y); }
1386 static void VBOXFreeScreen(ScrnInfoPtr pScrn)
1389 vgaHWFreeHWRec(pScrn);
1391 free(pScrn->driverPrivate);
1392 pScrn->driverPrivate = NULL;
1396 VBOXMapVidMem(ScrnInfoPtr pScrn)
1398 VBOXPtr pVBox = VBOXGetRec(pScrn);
1406 pScrn->memPhysBase,
1407 pScrn->videoRam * 1024,
1411 pVBox->base = xf86MapPciMem(pScrn->scrnIndex,
1413 pVBox->pciTag, pScrn->memPhysBase,
1414 (unsigned) pScrn->videoRam * 1024);
1424 VBOXUnmapVidMem(ScrnInfoPtr pScrn)
1426 VBOXPtr pVBox = VBOXGetRec(pScrn);
1435 pScrn->videoRam * 1024);
1437 xf86UnMapVidMem(pScrn->scrnIndex, pVBox->base,
1438 (unsigned) pScrn->videoRam * 1024);
1454 VBOXSaveMode(ScrnInfoPtr pScrn)
1456 VBOXPtr pVBox = VBOXGetRec(pScrn);
1460 vgaReg = &VGAHWPTR(pScrn)->SavedReg;
1461 vgaHWSave(pScrn, vgaReg, VGA_SR_ALL);
1470 VBOXRestoreMode(ScrnInfoPtr pScrn)
1472 VBOXPtr pVBox = VBOXGetRec(pScrn);
1476 vgaReg = &VGAHWPTR(pScrn)->SavedReg;
1477 vgaHWRestore(pScrn, vgaReg, VGA_SR_ALL);
1488 VBOXDisplayPowerManagementSet(ScrnInfoPtr pScrn, int mode, int flags)
1490 RT_NOREF(pScrn, mode, flags);