static struct _WsbmMMNode * wsbmMMSplitAtStart(struct _WsbmMMNode *parent, unsigned long size) { struct _WsbmMMNode *child; child = (struct _WsbmMMNode *)malloc(sizeof(*child)); if (!child) return NULL; WSBMINITLISTHEAD(&child->fl_entry); child->free = 0; child->size = size; child->start = parent->start; child->mm = parent->mm; WSBMLISTADDTAIL(&child->ml_entry, &parent->ml_entry); WSBMINITLISTHEAD(&child->fl_entry); parent->size -= size; parent->start += size; return child; }
void xorg_crtc_init(ScrnInfoPtr pScrn) { modesettingPtr ms = modesettingPTR(pScrn); xf86CrtcPtr crtc; drmModeResPtr res; drmModeCrtcPtr drm_crtc = NULL; struct crtc_private *crtcp; int c; res = drmModeGetResources(ms->fd); if (res == 0) { ErrorF("Failed drmModeGetResources %d\n", errno); return; } for (c = 0; c < res->count_crtcs; c++) { drm_crtc = drmModeGetCrtc(ms->fd, res->crtcs[c]); if (!drm_crtc) continue; crtc = xf86CrtcCreate(pScrn, &crtc_funcs); if (crtc == NULL) goto out; crtcp = calloc(1, sizeof(struct crtc_private)); if (!crtcp) { xf86CrtcDestroy(crtc); goto out; } crtcp->drm_crtc = drm_crtc; crtcp->entry.pixmap = NULL; WSBMINITLISTHEAD(&crtcp->entry.scanout_head); crtc->driver_private = crtcp; } out: drmModeFreeResources(res); }