📄 xf86vmode.c
字号:
ErrorF(" hdsp: %d hbeg: %d hend: %d httl: %d\n", mptr->HDisplay, mptr->HSyncStart, mptr->HSyncEnd, mptr->HTotal); ErrorF(" vdsp: %d vbeg: %d vend: %d vttl: %d flags: %d\n", mptr->VDisplay, mptr->VSyncStart, mptr->VSyncEnd, mptr->VTotal, mptr->Flags); } if (MODEMATCH(mptr, stuff, vptr)) { mptr->prev->next = mptr->next; mptr->next->prev = mptr->prev; xfree(mptr->name); xfree(mptr->Private); xfree(mptr); if (xf86Verbose) ErrorF("DeleteModeLine - Succeeded\n"); return(client->noClientException); } } return BadValue;}static intProcXF86VidModeModModeLine(client) register ClientPtr client;{ REQUEST(xXF86VidModeModModeLineReq); ScrnInfoPtr vptr; DisplayModePtr mptr; DisplayModeRec modetmp; int len; if (xf86Verbose > 1) { ErrorF("ModModeLine - scrn: %d hdsp: %d hbeg: %d hend: %d httl: %d\n", stuff->screen, stuff->hdisplay, stuff->hsyncstart, stuff->hsyncend, stuff->htotal); ErrorF(" vdsp: %d vbeg: %d vend: %d vttl: %d flags: %d\n", stuff->vdisplay, stuff->vsyncstart, stuff->vsyncend, stuff->vtotal, stuff->flags); } if (stuff->screen > screenInfo.numScreens) return BadValue; vptr = (ScrnInfoPtr) screenInfo.screens[stuff->screen]->devPrivates[xf86ScreenIndex].ptr; mptr = vptr->modes; REQUEST_AT_LEAST_SIZE(xXF86VidModeModModeLineReq); len = client->req_len - (sizeof(xXF86VidModeModModeLineReq) >> 2); if (len != stuff->privsize) return BadLength; if (stuff->hsyncstart < stuff->hdisplay || stuff->hsyncend < stuff->hsyncstart || stuff->htotal < stuff->hsyncend || stuff->vsyncstart < stuff->vdisplay || stuff->vsyncend < stuff->vsyncstart || stuff->vtotal < stuff->vsyncend) return BadValue; memcpy(&modetmp, mptr, sizeof(DisplayModeRec)); modetmp.HDisplay = stuff->hdisplay; modetmp.HSyncStart = stuff->hsyncstart; modetmp.HSyncEnd = stuff->hsyncend; modetmp.HTotal = stuff->htotal; modetmp.VDisplay = stuff->vdisplay; modetmp.VSyncStart = stuff->vsyncstart; modetmp.VSyncEnd = stuff->vsyncend; modetmp.VTotal = stuff->vtotal; modetmp.Flags = stuff->flags; if (mptr->PrivSize && stuff->privsize) { if (mptr->PrivSize != stuff->privsize) return BadValue; } if (mptr->PrivSize && mptr->Private) { modetmp.Private = (INT32 *)ALLOCATE_LOCAL(mptr->PrivSize * sizeof(INT32)); if (stuff->privsize) { if (xf86Verbose > 1) ErrorF("ModModeLine - Request includes privates\n"); memcpy(modetmp.Private, &stuff[1], mptr->PrivSize * sizeof(INT32)); } else memcpy(modetmp.Private, mptr->Private, mptr->PrivSize * sizeof(INT32)); } /* Check that the mode is consistent with the monitor specs */ switch (xf86CheckMode(vptr, &modetmp, vptr->monitor, FALSE)) { case MODE_HSYNC: DEALLOCATE_LOCAL(modetmp.Private); return vidmodeErrorBase + XF86VidModeBadHTimings; case MODE_VSYNC: DEALLOCATE_LOCAL(modetmp.Private); return vidmodeErrorBase + XF86VidModeBadVTimings; } /* Check that the driver is happy with the mode */ if (vptr->ValidMode(&modetmp, xf86Verbose, MODE_VID) != MODE_OK) { DEALLOCATE_LOCAL(modetmp.Private); return vidmodeErrorBase + XF86VidModeModeUnsuitable; } DEALLOCATE_LOCAL(modetmp.Private); mptr->HDisplay = stuff->hdisplay; mptr->HSyncStart = stuff->hsyncstart; mptr->HSyncEnd = stuff->hsyncend; mptr->HTotal = stuff->htotal; mptr->VDisplay = stuff->vdisplay; mptr->VSyncStart = stuff->vsyncstart; mptr->VSyncEnd = stuff->vsyncend; mptr->VTotal = stuff->vtotal; mptr->Flags = stuff->flags; mptr->CrtcHDisplay = stuff->hdisplay; mptr->CrtcHSyncStart = stuff->hsyncstart; mptr->CrtcHSyncEnd = stuff->hsyncend; mptr->CrtcHTotal = stuff->htotal; mptr->CrtcVDisplay = stuff->vdisplay; mptr->CrtcVSyncStart = stuff->vsyncstart; mptr->CrtcVSyncEnd = stuff->vsyncend; mptr->CrtcVTotal = stuff->vtotal; mptr->CrtcVAdjusted = FALSE; mptr->CrtcHAdjusted = FALSE; if (mptr->Flags & V_DBLSCAN) { mptr->CrtcVDisplay *= 2; mptr->CrtcVSyncStart *= 2; mptr->CrtcVSyncEnd *= 2; mptr->CrtcVTotal *= 2; mptr->CrtcVAdjusted = TRUE; } if (mptr->PrivSize && stuff->privsize) { memcpy(mptr->Private, &stuff[1], mptr->PrivSize * sizeof(INT32)); } (vptr->SwitchMode)(mptr); (vptr->AdjustFrame)(vptr->frameX0, vptr->frameY0); if (xf86Verbose > 1) ErrorF("ModModeLine - Succeeded\n"); return(client->noClientException);}static intProcXF86VidModeValidateModeLine(client) register ClientPtr client;{ REQUEST(xXF86VidModeValidateModeLineReq); xXF86VidModeValidateModeLineReply rep; ScrnInfoPtr vptr; DisplayModePtr mptr; DisplayModeRec modetmp; int len, status; if (xf86Verbose > 1) { ErrorF("ValidateModeLine - scrn: %d clock: %d\n", stuff->screen, stuff->dotclock); ErrorF(" hdsp: %d hbeg: %d hend: %d httl: %d\n", stuff->hdisplay, stuff->hsyncstart, stuff->hsyncend, stuff->htotal); ErrorF(" vdsp: %d vbeg: %d vend: %d vttl: %d flags: %d\n", stuff->vdisplay, stuff->vsyncstart, stuff->vsyncend, stuff->vtotal, stuff->flags); } if (stuff->screen > screenInfo.numScreens) return BadValue; vptr = (ScrnInfoPtr) screenInfo.screens[stuff->screen]->devPrivates[xf86ScreenIndex].ptr; mptr = vptr->modes; REQUEST_AT_LEAST_SIZE(xXF86VidModeValidateModeLineReq); len = client->req_len - (sizeof(xXF86VidModeValidateModeLineReq) >> 2); if (len != stuff->privsize) return BadLength; status = MODE_OK; modetmp.Private = NULL; if (stuff->hsyncstart < stuff->hdisplay || stuff->hsyncend < stuff->hsyncstart || stuff->htotal < stuff->hsyncend || stuff->vsyncstart < stuff->vdisplay || stuff->vsyncend < stuff->vsyncstart || stuff->vtotal < stuff->vsyncend) { status = MODE_BAD; goto status_reply; } memcpy(&modetmp, mptr, sizeof(DisplayModeRec)); modetmp.HDisplay = stuff->hdisplay; modetmp.HSyncStart = stuff->hsyncstart; modetmp.HSyncEnd = stuff->hsyncend; modetmp.HTotal = stuff->htotal; modetmp.VDisplay = stuff->vdisplay; modetmp.VSyncStart = stuff->vsyncstart; modetmp.VSyncEnd = stuff->vsyncend; modetmp.VTotal = stuff->vtotal; modetmp.Flags = stuff->flags; modetmp.Private = NULL; if (mptr->PrivSize && stuff->privsize) { if (mptr->PrivSize != stuff->privsize) { status = MODE_BAD; goto status_reply; } } if (mptr->PrivSize && mptr->Private) { modetmp.Private = (INT32 *)ALLOCATE_LOCAL(mptr->PrivSize * sizeof(INT32)); if (stuff->privsize) { if (xf86Verbose) ErrorF("ValidateModeLine - Request includes privates\n"); memcpy(modetmp.Private, &stuff[1], mptr->PrivSize * sizeof(INT32)); } else memcpy(modetmp.Private, mptr->Private, mptr->PrivSize * sizeof(INT32)); } /* Check that the mode is consistent with the monitor specs */ if ((status = xf86CheckMode(vptr, &modetmp, vptr->monitor, FALSE)) != MODE_OK) goto status_reply; /* Check that the driver is happy with the mode */ status = vptr->ValidMode(&modetmp, xf86Verbose, MODE_VID);status_reply: if (modetmp.Private) DEALLOCATE_LOCAL(modetmp.Private); rep.type = X_Reply; rep.length = (SIZEOF(xXF86VidModeValidateModeLineReply) - SIZEOF(xGenericReply)) >> 2; rep.sequenceNumber = client->sequence; rep.status = status; if (client->swapped) { register int n; swaps(&rep.sequenceNumber, n); swapl(&rep.length, n); swapl(&rep.status, n); } WriteToClient(client, sizeof(xXF86VidModeValidateModeLineReply), (char *)&rep); if (xf86Verbose > 1) ErrorF("ValidateModeLine - Succeeded\n"); return(client->noClientException);}static intProcXF86VidModeSwitchMode(client) register ClientPtr client;{ REQUEST(xXF86VidModeSwitchModeReq); ScreenPtr vptr; if (stuff->screen > screenInfo.numScreens) return BadValue; vptr = screenInfo.screens[stuff->screen]; if (xf86Info.dontZoom) return vidmodeErrorBase + XF86VidModeZoomLocked; REQUEST_SIZE_MATCH(xXF86VidModeSwitchModeReq); xf86ZoomViewport(vptr, (short)stuff->zoom); return (client->noClientException);}static intProcXF86VidModeSwitchToMode(client) register ClientPtr client;{ REQUEST(xXF86VidModeSwitchToModeReq); ScrnInfoPtr vptr; DisplayModePtr curmptr, mptr; int len; if (xf86Verbose > 1) { ErrorF("SwitchToMode - scrn: %d clock: %d\n", stuff->screen, stuff->dotclock); ErrorF(" hdsp: %d hbeg: %d hend: %d httl: %d\n", stuff->hdisplay, stuff->hsyncstart, stuff->hsyncend, stuff->htotal); ErrorF(" vdsp: %d vbeg: %d vend: %d vttl: %d flags: %d\n", stuff->vdisplay, stuff->vsyncstart, stuff->vsyncend, stuff->vtotal, stuff->flags); } if (stuff->screen > screenInfo.numScreens) return BadValue; if (xf86Info.dontZoom) return vidmodeErrorBase + XF86VidModeZoomLocked; vptr = (ScrnInfoPtr) screenInfo.screens[stuff->screen]->devPrivates[xf86ScreenIndex].ptr; curmptr = mptr = vptr->modes; REQUEST_AT_LEAST_SIZE(xXF86VidModeSwitchToModeReq); len = client->req_len - (sizeof(xXF86VidModeSwitchToModeReq) >> 2); if (len != stuff->privsize) return BadLength; if (MODEMATCH(mptr, stuff, vptr)) return (client->noClientException); while ((mptr = mptr->next) != curmptr) { if (xf86Verbose > 1) { ErrorF("Checking against clock: %d (%d)\n", mptr->Clock, CLOCKSPD(mptr->Clock, vptr)); ErrorF(" hdsp: %d hbeg: %d hend: %d httl: %d\n", mptr->HDisplay, mptr->HSyncStart, mptr->HSyncEnd, mptr->HTotal); ErrorF(" vdsp: %d vbeg: %d vend: %d vttl: %d flags: %d\n", mptr->VDisplay, mptr->VSyncStart, mptr->VSyncEnd, mptr->VTotal, mptr->Flags); } if (MODEMATCH(mptr, stuff, vptr)) { if ((vptr->SwitchMode)(mptr)) { vptr->modes = mptr; vptr->frameX0 = (vptr->frameX1 +vptr->frameX0 -mptr->HDisplay)/2; vptr->frameX1 = vptr->frameX0 + mptr->HDisplay -1; if (vptr->frameX0 < 0) { vptr->frameX0 = 0; vptr->frameX1 = mptr->HDisplay -1; } else if (vptr->frameX1 >= vptr->virtualX) { vptr->frameX0 = vptr->virtualX - mptr->HDisplay; vptr->frameX1 = vptr->frameX0 + mptr->HDisplay -1; } vptr->frameY0 = (vptr->frameY1 +vptr->frameY0 -mptr->VDisplay)/2; vptr->frameY1 = vptr->frameY0 + mptr->VDisplay -1; if (vptr->frameY0 < 0) { vptr->frameY0 = 0; vptr->frameY1 = mptr->VDisplay -1; } else if (vptr->frameY1 >= vptr->virtualY) { vptr->frameY0 = vptr->virtualY - mptr->VDisplay; vptr->frameY1 = vptr->frameY0 + mptr->VDisplay -1; } } (vptr->AdjustFrame)(vptr->frameX0, vptr->frameY0); if (xf86Verbose > 1) ErrorF("SwitchToMode - Succeeded\n"); return(client->noClientException); } } return BadValue;}static intProcXF86VidModeLockModeSwitch(client) register ClientPtr client;{ REQUEST(xXF86VidModeLockModeSwitchReq); ScreenPtr vptr; if (stuff->screen > screenInfo.numScreens) return BadValue; vptr = screenInfo.screens[stuff->screen]; if (xf86Info.dontZoom) return vidmodeErrorBase + XF86VidModeZoomLocked; REQUEST_SIZE_MATCH(xXF86VidModeLockModeSwitchReq); xf86LockZoom(vptr, (short)stuff->lock); return (client->noClientException);}static intProcXF86VidModeGetMonitor(client) register ClientPtr client;{ REQUEST(xXF86VidModeGetMonitorReq); xXF86VidModeGetMonitorReply rep; register int n; ScrnInfoPtr vptr; MonPtr mptr; CARD32 *hsyncdata, *vsyncdata; int i; if (stuff->screen > screenInfo.numScreens) return BadValue; vptr = (ScrnInfoPtr) screenInfo.screens[stuff->screen]->devPrivates[xf86ScreenIndex].ptr; mptr = vptr->monitor; REQUEST_SIZE_MATCH(xXF86VidModeGetMonitorReq); rep.type = X_Reply; if (mptr->vendor) rep.vendorLength = strlen(mptr->vendor); else rep.vendorLength = 0; if (mptr->model) rep.modelLength = strlen(mptr->model); else rep.modelLength = 0; rep.length = (SIZEOF(xXF86VidModeGetMonitorReply) - SIZEOF(xGenericReply) + (mptr->n_hsync + mptr->n_vrefresh) * sizeof(CARD32) + ((rep.vendorLength + 3) & ~3) + ((rep.modelLength + 3) & ~3)) >> 2; rep.sequenceNumber = client->sequence; rep.nhsync = mptr->n_hsync; rep.nvsync = mptr->n_vrefresh;#if 0 rep.bandwidth = (unsigned long)(mptr->bandwidth * 1e6);#endif hsyncdata = ALLOCATE_LOCAL(mptr->n_hsync * sizeof(CARD32)); if (!hsyncdata) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -