Bool fbdevHWSwitchMode(ScrnInfoPtr pScrn, DisplayModePtr mode) { if (!fbdevHWSetMode(pScrn, mode, FALSE)) return FALSE; return TRUE; }
ModeStatus fbdevHWValidMode(ScrnInfoPtr pScrn, DisplayModePtr mode, Bool verbose, int flags) { if (!fbdevHWSetMode(pScrn, mode, TRUE)) return MODE_BAD; return MODE_OK; }
Bool fbdevHWSwitchMode(int scrnIndex, DisplayModePtr mode, int flags) { ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; TRACE_ENTER("SwitchMode"); if (!fbdevHWSetMode(pScrn, mode, FALSE)) return FALSE; return TRUE; }
ModeStatus fbdevHWValidMode(int scrnIndex, DisplayModePtr mode, Bool verbose, int flags) { ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; TRACE_ENTER("ValidMode"); if (!fbdevHWSetMode(pScrn, mode, TRUE)) return MODE_BAD; return MODE_OK; }
void fbdevHWSetVideoModes(ScrnInfoPtr pScrn) { char **modename; DisplayModePtr mode, this, last = pScrn->modes; if (NULL == pScrn->display->modes) return; pScrn->virtualX = pScrn->display->virtualX; pScrn->virtualY = pScrn->display->virtualY; for (modename = pScrn->display->modes; *modename != NULL; modename++) { for (mode = pScrn->monitor->Modes; mode != NULL; mode = mode->next) { if (0 == strcmp(mode->name, *modename)) { if (fbdevHWSetMode(pScrn, mode, TRUE)) break; xf86DrvMsg(pScrn->scrnIndex, X_INFO, "\tmode \"%s\" test failed\n", *modename); } } if (NULL == mode) { xf86DrvMsg(pScrn->scrnIndex, X_INFO, "\tmode \"%s\" not found\n", *modename); continue; } xf86DrvMsg(pScrn->scrnIndex, X_INFO, "\tmode \"%s\" ok\n", *modename); if (pScrn->virtualX < mode->HDisplay) pScrn->virtualX = mode->HDisplay; if (pScrn->virtualY < mode->VDisplay) pScrn->virtualY = mode->VDisplay; if (NULL == pScrn->modes) { this = pScrn->modes = xf86DuplicateMode(mode); this->next = this; this->prev = this; } else { this = xf86DuplicateMode(mode); this->next = pScrn->modes; this->prev = last; last->next = this; pScrn->modes->prev = this; } last = this; } }
Bool fbdevHWModeInit(ScrnInfoPtr pScrn, DisplayModePtr mode) { fbdevHWPtr fPtr = FBDEVHWPTR(pScrn); pScrn->vtSema = TRUE; /* set */ if (!fbdevHWSetMode(pScrn, mode, FALSE)) return FALSE; /* read back */ if (0 != ioctl(fPtr->fd, FBIOGET_FSCREENINFO, (void *) (&fPtr->fix))) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "FBIOGET_FSCREENINFO: %s\n", strerror(errno)); return FALSE; } if (0 != ioctl(fPtr->fd, FBIOGET_VSCREENINFO, (void *) (&fPtr->var))) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "FBIOGET_VSCREENINFO: %s\n", strerror(errno)); return FALSE; } if (pScrn->defaultVisual == TrueColor || pScrn->defaultVisual == DirectColor) { /* XXX: This is a hack, but it should be a NOP for all the setups that * worked before and actually seems to fix some others... */ pScrn->offset.red = fPtr->var.red.offset; pScrn->offset.green = fPtr->var.green.offset; pScrn->offset.blue = fPtr->var.blue.offset; pScrn->mask.red = ((1 << fPtr->var.red.length) - 1) << fPtr->var.red.offset; pScrn->mask.green = ((1 << fPtr->var.green.length) - 1) << fPtr->var.green.offset; pScrn->mask.blue = ((1 << fPtr->var.blue.length) - 1) << fPtr->var.blue.offset; } return TRUE; }