Beispiel #1
0
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);
}