Use pRADEONEnt->fd exclusively for the DRM file descriptor

This brings us closer to amdgpu.

Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
Michel Dänzer 2017-06-27 19:15:18 +09:00 • committed by Michel Dänzer
commit df88d51c50
12 changed files with 172 additions and 154 deletions

View file

@ -272,7 +272,7 @@ int drmmode_get_current_ust(int drm_fd, CARD64 *ust)
int drmmode_crtc_get_ust_msc(xf86CrtcPtr crtc, CARD64 *ust, CARD64 *msc)
{
ScrnInfoPtr scrn = crtc->scrn;
RADEONInfoPtr info = RADEONPTR(scrn);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn);
drmVBlank vbl;
int ret;
@ -280,7 +280,7 @@ int drmmode_crtc_get_ust_msc(xf86CrtcPtr crtc, CARD64 *ust, CARD64 *msc)
vbl.request.type |= radeon_populate_vbl_request_type(crtc);
vbl.request.sequence = 0;
ret = drmWaitVBlank(info->dri2.drm_fd, &vbl);
ret = drmWaitVBlank(pRADEONEnt->fd, &vbl);
if (ret) {
xf86DrvMsg(scrn->scrnIndex, X_WARNING,
"get vblank counter failed: %s\n", strerror(errno));
@ -298,7 +298,7 @@ drmmode_do_crtc_dpms(xf86CrtcPtr crtc, int mode)
{
drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
ScrnInfoPtr scrn = crtc->scrn;
RADEONInfoPtr info = RADEONPTR(scrn);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn);
CARD64 ust;
int ret;
@ -318,7 +318,7 @@ drmmode_do_crtc_dpms(xf86CrtcPtr crtc, int mode)
vbl.request.type = DRM_VBLANK_RELATIVE;
vbl.request.type |= radeon_populate_vbl_request_type(crtc);
vbl.request.sequence = 0;
ret = drmWaitVBlank(info->dri2.drm_fd, &vbl);
ret = drmWaitVBlank(pRADEONEnt->fd, &vbl);
if (ret)
xf86DrvMsg(scrn->scrnIndex, X_ERROR,
"%s cannot get last vblank counter\n",
@ -345,7 +345,7 @@ drmmode_do_crtc_dpms(xf86CrtcPtr crtc, int mode)
* Off->On transition: calculate and accumulate the
* number of interpolated vblanks while we were in Off state
*/
ret = drmmode_get_current_ust(info->dri2.drm_fd, &ust);
ret = drmmode_get_current_ust(pRADEONEnt->fd, &ust);
if (ret)
xf86DrvMsg(scrn->scrnIndex, X_ERROR,
"%s cannot get current time\n", __func__);
@ -365,7 +365,7 @@ static void
drmmode_crtc_dpms(xf86CrtcPtr crtc, int mode)
{
drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
drmmode_ptr drmmode = drmmode_crtc->drmmode;
RADEONEntPtr pRADEONEnt = RADEONEntPriv(crtc->scrn);
/* Disable unused CRTCs */
if (!crtc->enabled || mode != DPMSModeOn) {
@ -373,9 +373,9 @@ drmmode_crtc_dpms(xf86CrtcPtr crtc, int mode)
if (drmmode_crtc->flip_pending)
return;
drmModeSetCrtc(drmmode->fd, drmmode_crtc->mode_crtc->crtc_id,
drmModeSetCrtc(pRADEONEnt->fd, drmmode_crtc->mode_crtc->crtc_id,
0, 0, 0, NULL, 0, NULL);
drmmode_fb_reference(drmmode->fd, &drmmode_crtc->fb, NULL);
drmmode_fb_reference(pRADEONEnt->fd, &drmmode_crtc->fb, NULL);
} else if (drmmode_crtc->dpms_mode != DPMSModeOn)
crtc->funcs->set_mode_major(crtc, &crtc->mode, crtc->rotation,
crtc->x, crtc->y);
@ -385,6 +385,7 @@ static PixmapPtr
create_pixmap_for_fbcon(drmmode_ptr drmmode,
ScrnInfoPtr pScrn, int fbcon_id)
{
RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
RADEONInfoPtr info = RADEONPTR(pScrn);
PixmapPtr pixmap = info->fbcon_pixmap;
struct radeon_bo *bo;
@ -394,7 +395,7 @@ create_pixmap_for_fbcon(drmmode_ptr drmmode,
if (pixmap)
return pixmap;
fbcon = drmModeGetFB(drmmode->fd, fbcon_id);
fbcon = drmModeGetFB(pRADEONEnt->fd, fbcon_id);
if (fbcon == NULL)
return NULL;
@ -404,7 +405,7 @@ create_pixmap_for_fbcon(drmmode_ptr drmmode,
goto out_free_fb;
flink.handle = fbcon->handle;
if (ioctl(drmmode->fd, DRM_IOCTL_GEM_FLINK, &flink) < 0) {
if (ioctl(pRADEONEnt->fd, DRM_IOCTL_GEM_FLINK, &flink) < 0) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"Couldn't flink fbcon handle\n");
goto out_free_fb;
@ -812,8 +813,9 @@ drmmode_crtc_gamma_do_set(xf86CrtcPtr crtc, uint16_t *red, uint16_t *green,
uint16_t *blue, int size)
{
drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
RADEONEntPtr pRADEONEnt = RADEONEntPriv(crtc->scrn);
drmModeCrtcSetGamma(drmmode_crtc->drmmode->fd,
drmModeCrtcSetGamma(pRADEONEnt->fd,
drmmode_crtc->mode_crtc->crtc_id, size, red, green,
blue);
}
@ -825,6 +827,7 @@ drmmode_set_mode_major(xf86CrtcPtr crtc, DisplayModePtr mode,
ScrnInfoPtr pScrn = crtc->scrn;
ScreenPtr pScreen = pScrn->pScreen;
RADEONInfoPtr info = RADEONPTR(pScrn);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(crtc->scrn);
drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
unsigned scanout_id = 0;
@ -907,13 +910,13 @@ drmmode_set_mode_major(xf86CrtcPtr crtc, DisplayModePtr mode,
if (!fb)
fb = radeon_pixmap_get_fb(pScreen->GetWindowPixmap(pScreen->root));
if (!fb) {
fb = radeon_fb_create(drmmode->fd, pScrn->virtualX,
fb = radeon_fb_create(pRADEONEnt->fd, pScrn->virtualX,
pScrn->virtualY, pScrn->depth,
pScrn->bitsPerPixel,
pScrn->displayWidth * info->pixel_bytes,
info->front_bo->handle);
/* Prevent refcnt of ad-hoc FBs from reaching 2 */
drmmode_fb_reference(drmmode->fd, &drmmode_crtc->fb, NULL);
drmmode_fb_reference(pRADEONEnt->fd, &drmmode_crtc->fb, NULL);
drmmode_crtc->fb = fb;
}
if (!fb) {
@ -923,10 +926,10 @@ drmmode_set_mode_major(xf86CrtcPtr crtc, DisplayModePtr mode,
/* Wait for any pending flip to finish */
do {} while (drmmode_crtc->flip_pending &&
drmHandleEvent(drmmode->fd,
drmHandleEvent(pRADEONEnt->fd,
&drmmode->event_context) > 0);
if (drmModeSetCrtc(drmmode->fd,
if (drmModeSetCrtc(pRADEONEnt->fd,
drmmode_crtc->mode_crtc->crtc_id,
fb->handle, x, y, output_ids,
output_count, &kmode) != 0) {
@ -935,7 +938,7 @@ drmmode_set_mode_major(xf86CrtcPtr crtc, DisplayModePtr mode,
goto done;
} else {
ret = TRUE;
drmmode_fb_reference(drmmode->fd, &drmmode_crtc->fb, fb);
drmmode_fb_reference(pRADEONEnt->fd, &drmmode_crtc->fb, fb);
}
if (pScreen)
@ -1006,7 +1009,7 @@ static void
drmmode_set_cursor_position (xf86CrtcPtr crtc, int x, int y)
{
drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
drmmode_ptr drmmode = drmmode_crtc->drmmode;
RADEONEntPtr pRADEONEnt = RADEONEntPriv(crtc->scrn);
#if XF86_CRTC_VERSION >= 4 && XF86_CRTC_VERSION < 7
if (crtc->driverIsPerformingTransform) {
@ -1016,7 +1019,7 @@ drmmode_set_cursor_position (xf86CrtcPtr crtc, int x, int y)
}
#endif
drmModeMoveCursor(drmmode->fd, drmmode_crtc->mode_crtc->crtc_id, x, y);
drmModeMoveCursor(pRADEONEnt->fd, drmmode_crtc->mode_crtc->crtc_id, x, y);
}
#if XF86_CRTC_VERSION >= 4 && XF86_CRTC_VERSION < 7
@ -1138,9 +1141,9 @@ drmmode_hide_cursor (xf86CrtcPtr crtc)
ScrnInfoPtr pScrn = crtc->scrn;
RADEONInfoPtr info = RADEONPTR(pScrn);
drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
drmmode_ptr drmmode = drmmode_crtc->drmmode;
RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
drmModeSetCursor(drmmode->fd, drmmode_crtc->mode_crtc->crtc_id, 0,
drmModeSetCursor(pRADEONEnt->fd, drmmode_crtc->mode_crtc->crtc_id, 0,
info->cursor_w, info->cursor_h);
}
@ -1151,7 +1154,7 @@ drmmode_show_cursor (xf86CrtcPtr crtc)
ScrnInfoPtr pScrn = crtc->scrn;
RADEONInfoPtr info = RADEONPTR(pScrn);
drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
drmmode_ptr drmmode = drmmode_crtc->drmmode;
RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
uint32_t handle = drmmode_crtc->cursor_bo->handle;
static Bool use_set_cursor2 = TRUE;
@ -1191,7 +1194,7 @@ drmmode_show_cursor (xf86CrtcPtr crtc)
}
ret =
drmModeSetCursor2(drmmode->fd, drmmode_crtc->mode_crtc->crtc_id,
drmModeSetCursor2(pRADEONEnt->fd, drmmode_crtc->mode_crtc->crtc_id,
handle, info->cursor_w, info->cursor_h,
xhot, yhot);
if (ret == -EINVAL)
@ -1200,7 +1203,7 @@ drmmode_show_cursor (xf86CrtcPtr crtc)
return;
}
drmModeSetCursor(drmmode->fd, drmmode_crtc->mode_crtc->crtc_id, handle,
drmModeSetCursor(pRADEONEnt->fd, drmmode_crtc->mode_crtc->crtc_id, handle,
info->cursor_w, info->cursor_h);
}
@ -1347,8 +1350,7 @@ int drmmode_get_crtc_id(xf86CrtcPtr crtc)
void drmmode_crtc_hw_id(xf86CrtcPtr crtc)
{
drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
ScrnInfoPtr pScrn = crtc->scrn;
RADEONInfoPtr info = RADEONPTR(pScrn);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(crtc->scrn);
struct drm_radeon_info ginfo;
int r;
uint32_t tmp;
@ -1357,7 +1359,7 @@ void drmmode_crtc_hw_id(xf86CrtcPtr crtc)
ginfo.request = 0x4;
tmp = drmmode_crtc->mode_crtc->crtc_id;
ginfo.value = (uintptr_t)&tmp;
r = drmCommandWriteRead(info->dri2.drm_fd, DRM_RADEON_INFO, &ginfo, sizeof(ginfo));
r = drmCommandWriteRead(pRADEONEnt->fd, DRM_RADEON_INFO, &ginfo, sizeof(ginfo));
if (r) {
drmmode_crtc->hw_id = -1;
return;
@ -1377,7 +1379,7 @@ drmmode_crtc_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, drmModeResPtr mode_res
return 0;
drmmode_crtc = xnfcalloc(sizeof(drmmode_crtc_private_rec), 1);
drmmode_crtc->mode_crtc = drmModeGetCrtc(drmmode->fd, mode_res->crtcs[num]);
drmmode_crtc->mode_crtc = drmModeGetCrtc(pRADEONEnt->fd, mode_res->crtcs[num]);
drmmode_crtc->drmmode = drmmode;
drmmode_crtc->dpms_mode = DPMSModeOff;
drmmode_crtc->pending_dpms_mode = DPMSModeOff;
@ -1397,11 +1399,11 @@ drmmode_output_detect(xf86OutputPtr output)
{
/* go to the hw and retrieve a new output struct */
drmmode_output_private_ptr drmmode_output = output->driver_private;
drmmode_ptr drmmode = drmmode_output->drmmode;
RADEONEntPtr pRADEONEnt = RADEONEntPriv(output->scrn);
xf86OutputStatus status;
drmModeFreeConnector(drmmode_output->mode_output);
drmmode_output->mode_output = drmModeGetConnector(drmmode->fd, drmmode_output->output_id);
drmmode_output->mode_output = drmModeGetConnector(pRADEONEnt->fd, drmmode_output->output_id);
if (!drmmode_output->mode_output)
return XF86OutputStatusDisconnected;
@ -1431,7 +1433,7 @@ drmmode_output_get_modes(xf86OutputPtr output)
{
drmmode_output_private_ptr drmmode_output = output->driver_private;
drmModeConnectorPtr koutput = drmmode_output->mode_output;
drmmode_ptr drmmode = drmmode_output->drmmode;
RADEONEntPtr pRADEONEnt = RADEONEntPriv(output->scrn);
int i;
DisplayModePtr Modes = NULL, Mode;
drmModePropertyPtr props;
@ -1442,12 +1444,12 @@ drmmode_output_get_modes(xf86OutputPtr output)
/* look for an EDID property */
for (i = 0; i < koutput->count_props; i++) {
props = drmModeGetProperty(drmmode->fd, koutput->props[i]);
props = drmModeGetProperty(pRADEONEnt->fd, koutput->props[i]);
if (props && (props->flags & DRM_MODE_PROP_BLOB)) {
if (!strcmp(props->name, "EDID")) {
if (drmmode_output->edid_blob)
drmModeFreePropertyBlob(drmmode_output->edid_blob);
drmmode_output->edid_blob = drmModeGetPropertyBlob(drmmode->fd, koutput->prop_values[i]);
drmmode_output->edid_blob = drmModeGetPropertyBlob(pRADEONEnt->fd, koutput->prop_values[i]);
}
}
if (props)
@ -1501,7 +1503,7 @@ drmmode_output_dpms(xf86OutputPtr output, int mode)
drmmode_output_private_ptr drmmode_output = output->driver_private;
xf86CrtcPtr crtc = output->crtc;
drmModeConnectorPtr koutput = drmmode_output->mode_output;
drmmode_ptr drmmode = drmmode_output->drmmode;
RADEONEntPtr pRADEONEnt = RADEONEntPriv(output->scrn);
if (!koutput)
return;
@ -1516,7 +1518,7 @@ drmmode_output_dpms(xf86OutputPtr output, int mode)
return;
}
drmModeConnectorSetProperty(drmmode->fd, koutput->connector_id,
drmModeConnectorSetProperty(pRADEONEnt->fd, koutput->connector_id,
drmmode_output->dpms_enum_id, mode);
if (mode == DPMSModeOn && crtc) {
@ -1553,7 +1555,7 @@ drmmode_output_create_resources(xf86OutputPtr output)
RADEONInfoPtr info = RADEONPTR(output->scrn);
drmmode_output_private_ptr drmmode_output = output->driver_private;
drmModeConnectorPtr mode_output = drmmode_output->mode_output;
drmmode_ptr drmmode = drmmode_output->drmmode;
RADEONEntPtr pRADEONEnt = RADEONEntPriv(output->scrn);
drmModePropertyPtr drmmode_prop, tearfree_prop;
int i, j, err;
@ -1563,7 +1565,7 @@ drmmode_output_create_resources(xf86OutputPtr output)
drmmode_output->num_props = 0;
for (i = 0, j = 0; i < mode_output->count_props; i++) {
drmmode_prop = drmModeGetProperty(drmmode->fd, mode_output->props[i]);
drmmode_prop = drmModeGetProperty(pRADEONEnt->fd, mode_output->props[i]);
if (drmmode_property_ignore(drmmode_prop)) {
drmModeFreeProperty(drmmode_prop);
continue;
@ -1657,7 +1659,7 @@ drmmode_output_set_property(xf86OutputPtr output, Atom property,
RRPropertyValuePtr value)
{
drmmode_output_private_ptr drmmode_output = output->driver_private;
drmmode_ptr drmmode = drmmode_output->drmmode;
RADEONEntPtr pRADEONEnt = RADEONEntPriv(output->scrn);
int i;
for (i = 0; i < drmmode_output->num_props; i++) {
@ -1674,7 +1676,7 @@ drmmode_output_set_property(xf86OutputPtr output, Atom property,
return FALSE;
val = *(uint32_t *)value->data;
drmModeConnectorSetProperty(drmmode->fd, drmmode_output->output_id,
drmModeConnectorSetProperty(pRADEONEnt->fd, drmmode_output->output_id,
p->mode_prop->prop_id, (uint64_t)val);
return TRUE;
} else if (p->mode_prop->flags & DRM_MODE_PROP_ENUM) {
@ -1703,7 +1705,7 @@ drmmode_output_set_property(xf86OutputPtr output, Atom property,
}
}
} else {
drmModeConnectorSetProperty(drmmode->fd,
drmModeConnectorSetProperty(pRADEONEnt->fd,
drmmode_output->output_id,
p->mode_prop->prop_id,
p->mode_prop->enums[j].value);
@ -1876,6 +1878,7 @@ static unsigned int
drmmode_output_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, drmModeResPtr mode_res, int num, int *num_dvi, int *num_hdmi, int dynamic)
{
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
RADEONInfoPtr info = RADEONPTR(pScrn);
xf86OutputPtr output;
drmModeConnectorPtr koutput;
@ -1887,15 +1890,15 @@ drmmode_output_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, drmModeResPtr mode_r
int i;
const char *s;
koutput = drmModeGetConnector(drmmode->fd, mode_res->connectors[num]);
koutput = drmModeGetConnector(pRADEONEnt->fd, mode_res->connectors[num]);
if (!koutput)
return 0;
for (i = 0; i < koutput->count_props; i++) {
props = drmModeGetProperty(drmmode->fd, koutput->props[i]);
props = drmModeGetProperty(pRADEONEnt->fd, koutput->props[i]);
if (props && (props->flags & DRM_MODE_PROP_BLOB)) {
if (!strcmp(props->name, "PATH")) {
path_blob = drmModeGetPropertyBlob(drmmode->fd, koutput->prop_values[i]);
path_blob = drmModeGetPropertyBlob(pRADEONEnt->fd, koutput->prop_values[i]);
drmModeFreeProperty(props);
break;
}
@ -1909,7 +1912,7 @@ drmmode_output_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, drmModeResPtr mode_r
}
for (i = 0; i < koutput->count_encoders; i++) {
kencoders[i] = drmModeGetEncoder(drmmode->fd, koutput->encoders[i]);
kencoders[i] = drmModeGetEncoder(pRADEONEnt->fd, koutput->encoders[i]);
if (!kencoders[i]) {
goto out_free_encoders;
}
@ -1982,7 +1985,7 @@ drmmode_output_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, drmModeResPtr mode_r
output->possible_clones = 0;
for (i = 0; i < koutput->count_props; i++) {
props = drmModeGetProperty(drmmode->fd, koutput->props[i]);
props = drmModeGetProperty(pRADEONEnt->fd, koutput->props[i]);
if (props && (props->flags & DRM_MODE_PROP_ENUM)) {
if (!strcmp(props->name, "DPMS")) {
drmmode_output->dpms_enum_id = koutput->props[i];
@ -2418,6 +2421,7 @@ static void
drmmode_flip_handler(xf86CrtcPtr crtc, uint32_t frame, uint64_t usec, void *event_data)
{
drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
RADEONEntPtr pRADEONEnt = RADEONEntPriv(crtc->scrn);
drmmode_flipdata_ptr flipdata = event_data;
/* Is this the event whose info shall be delivered to higher level? */
@ -2440,7 +2444,7 @@ drmmode_flip_handler(xf86CrtcPtr crtc, uint32_t frame, uint64_t usec, void *even
free(flipdata);
}
drmmode_fb_reference(drmmode_crtc->drmmode->fd, &drmmode_crtc->fb,
drmmode_fb_reference(pRADEONEnt->fd, &drmmode_crtc->fb,
drmmode_crtc->flip_pending);
drmmode_clear_pending_flip(crtc);
}
@ -2454,23 +2458,26 @@ static void
drm_wakeup_handler(pointer data, int err, pointer p)
#endif
{
drmmode_ptr drmmode = data;
ScrnInfoPtr scrn = data;
RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn);
RADEONInfoPtr info = RADEONPTR(scrn);
#if !HAVE_NOTIFY_FD
fd_set *read_mask = p;
if (err >= 0 && FD_ISSET(drmmode->fd, read_mask))
if (err >= 0 && FD_ISSET(pRADEONEnt->fd, read_mask))
#endif
{
drmHandleEvent(drmmode->fd, &drmmode->event_context);
drmHandleEvent(pRADEONEnt->fd, &info->drmmode.event_context);
}
}
static Bool drmmode_probe_page_flip_target(drmmode_ptr drmmode)
static Bool drmmode_probe_page_flip_target(RADEONEntPtr pRADEONEnt)
{
#ifdef DRM_CAP_PAGE_FLIP_TARGET
uint64_t cap_value;
return drmGetCap(drmmode->fd, DRM_CAP_PAGE_FLIP_TARGET,
return drmGetCap(pRADEONEnt->fd, DRM_CAP_PAGE_FLIP_TARGET,
&cap_value) == 0 && cap_value != 0;
#else
return FALSE;
@ -2478,13 +2485,12 @@ static Bool drmmode_probe_page_flip_target(drmmode_ptr drmmode)
}
static int
drmmode_page_flip(drmmode_crtc_private_ptr drmmode_crtc, int fb_id,
drmmode_page_flip(RADEONEntPtr pRADEONEnt,
drmmode_crtc_private_ptr drmmode_crtc, int fb_id,
uint32_t flags, uintptr_t drm_queue_seq)
{
drmmode_ptr drmmode = drmmode_crtc->drmmode;
flags |= DRM_MODE_PAGE_FLIP_EVENT;
return drmModePageFlip(drmmode->fd, drmmode_crtc->mode_crtc->crtc_id,
return drmModePageFlip(pRADEONEnt->fd, drmmode_crtc->mode_crtc->crtc_id,
fb_id, flags, (void*)drm_queue_seq);
}
@ -2496,17 +2502,16 @@ drmmode_page_flip_target_absolute(RADEONEntPtr pRADEONEnt,
{
#ifdef DRM_MODE_PAGE_FLIP_TARGET
if (pRADEONEnt->has_page_flip_target) {
drmmode_ptr drmmode = drmmode_crtc->drmmode;
flags |= DRM_MODE_PAGE_FLIP_EVENT | DRM_MODE_PAGE_FLIP_TARGET_ABSOLUTE;
return drmModePageFlipTarget(drmmode->fd,
return drmModePageFlipTarget(pRADEONEnt->fd,
drmmode_crtc->mode_crtc->crtc_id,
fb_id, flags, (void*)drm_queue_seq,
target_msc);
}
#endif
return drmmode_page_flip(drmmode_crtc, fb_id, flags, drm_queue_seq);
return drmmode_page_flip(pRADEONEnt, drmmode_crtc, fb_id, flags,
drm_queue_seq);
}
int
@ -2517,17 +2522,16 @@ drmmode_page_flip_target_relative(RADEONEntPtr pRADEONEnt,
{
#ifdef DRM_MODE_PAGE_FLIP_TARGET
if (pRADEONEnt->has_page_flip_target) {
drmmode_ptr drmmode = drmmode_crtc->drmmode;
flags |= DRM_MODE_PAGE_FLIP_EVENT | DRM_MODE_PAGE_FLIP_TARGET_RELATIVE;
return drmModePageFlipTarget(drmmode->fd,
return drmModePageFlipTarget(pRADEONEnt->fd,
drmmode_crtc->mode_crtc->crtc_id,
fb_id, flags, (void*)drm_queue_seq,
target_msc);
}
#endif
return drmmode_page_flip(drmmode_crtc, fb_id, flags, drm_queue_seq);
return drmmode_page_flip(pRADEONEnt, drmmode_crtc, fb_id, flags,
drm_queue_seq);
}
Bool drmmode_pre_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, int cpp)
@ -2544,7 +2548,7 @@ Bool drmmode_pre_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, int cpp)
xf86CrtcConfigInit(pScrn, &drmmode_xf86crtc_config_funcs);
drmmode->scrn = pScrn;
mode_res = drmModeGetResources(drmmode->fd);
mode_res = drmModeGetResources(pRADEONEnt->fd);
if (!mode_res)
return FALSE;
@ -2594,7 +2598,7 @@ Bool drmmode_pre_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, int cpp)
drmmode->event_context.vblank_handler = radeon_drm_queue_handler;
drmmode->event_context.page_flip_handler = radeon_drm_queue_handler;
pRADEONEnt->has_page_flip_target = drmmode_probe_page_flip_target(drmmode);
pRADEONEnt->has_page_flip_target = drmmode_probe_page_flip_target(pRADEONEnt);
drmModeFreeResources(mode_res);
return TRUE;
@ -2611,11 +2615,11 @@ void drmmode_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode)
info->drmmode_inited = TRUE;
if (pRADEONEnt->fd_wakeup_registered != serverGeneration) {
#if HAVE_NOTIFY_FD
SetNotifyFd(drmmode->fd, drm_notify_fd, X_NOTIFY_READ, drmmode);
SetNotifyFd(pRADEONEnt->fd, drm_notify_fd, X_NOTIFY_READ, pScrn);
#else
AddGeneralSocket(drmmode->fd);
AddGeneralSocket(pRADEONEnt->fd);
RegisterBlockAndWakeupHandlers((BlockHandlerProcPtr)NoopDDA,
drm_wakeup_handler, drmmode);
drm_wakeup_handler, pScrn);
#endif
pRADEONEnt->fd_wakeup_registered = serverGeneration;
pRADEONEnt->fd_wakeup_ref = 1;
@ -2636,11 +2640,11 @@ void drmmode_fini(ScrnInfoPtr pScrn, drmmode_ptr drmmode)
if (pRADEONEnt->fd_wakeup_registered == serverGeneration &&
!--pRADEONEnt->fd_wakeup_ref) {
#if HAVE_NOTIFY_FD
RemoveNotifyFd(drmmode->fd);
RemoveNotifyFd(pRADEONEnt->fd);
#else
RemoveGeneralSocket(drmmode->fd);
RemoveGeneralSocket(pRADEONEnt->fd);
RemoveBlockAndWakeupHandlers((BlockHandlerProcPtr)NoopDDA,
drm_wakeup_handler, drmmode);
drm_wakeup_handler, pScrn);
#endif
}
@ -2682,6 +2686,7 @@ Bool drmmode_set_desired_modes(ScrnInfoPtr pScrn, drmmode_ptr drmmode,
Bool set_hw)
{
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
int c;
for (c = 0; c < config->num_crtc; c++) {
@ -2694,10 +2699,10 @@ Bool drmmode_set_desired_modes(ScrnInfoPtr pScrn, drmmode_ptr drmmode,
if (!crtc->enabled) {
if (set_hw) {
drmmode_do_crtc_dpms(crtc, DPMSModeOff);
drmModeSetCrtc(drmmode->fd,
drmModeSetCrtc(pRADEONEnt->fd,
drmmode_crtc->mode_crtc->crtc_id,
0, 0, 0, NULL, 0, NULL);
drmmode_fb_reference(drmmode->fd,
drmmode_fb_reference(pRADEONEnt->fd,
&drmmode_crtc->fb, NULL);
}
continue;
@ -2812,7 +2817,7 @@ radeon_mode_hotplug(ScrnInfoPtr scrn, drmmode_ptr drmmode)
Bool changed = FALSE;
int num_dvi = 0, num_hdmi = 0;
mode_res = drmModeGetResources(drmmode->fd);
mode_res = drmModeGetResources(pRADEONEnt->fd);
if (!mode_res)
goto out;

View file

@ -40,7 +40,6 @@
#endif
typedef struct {
int fd;
struct radeon_bo_manager *bufmgr;
ScrnInfoPtr scrn;
#ifdef HAVE_LIBUDEV

View file

@ -694,7 +694,9 @@ uint32_t radeon_get_pixmap_tiling(PixmapPtr pPix);
static inline Bool radeon_set_pixmap_bo(PixmapPtr pPix, struct radeon_bo *bo)
{
#ifdef USE_GLAMOR
RADEONInfoPtr info = RADEONPTR(xf86ScreenToScrn(pPix->drawable.pScreen));
ScrnInfoPtr scrn = xf86ScreenToScrn(pPix->drawable.pScreen);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn);
RADEONInfoPtr info = RADEONPTR(scrn);
if (info->use_glamor) {
struct radeon_pixmap *priv;
@ -711,7 +713,7 @@ static inline Bool radeon_set_pixmap_bo(PixmapPtr pPix, struct radeon_bo *bo)
radeon_bo_unref(priv->bo);
}
drmmode_fb_reference(info->drmmode.fd, &priv->fb, NULL);
drmmode_fb_reference(pRADEONEnt->fd, &priv->fb, NULL);
if (!bo) {
free(priv);
@ -831,7 +833,9 @@ radeon_pixmap_create_fb(int drm_fd, PixmapPtr pix)
static inline struct drmmode_fb*
radeon_pixmap_get_fb(PixmapPtr pix)
{
RADEONInfoPtr info = RADEONPTR(xf86ScreenToScrn(pix->drawable.pScreen));
ScrnInfoPtr scrn = xf86ScreenToScrn(pix->drawable.pScreen);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn);
RADEONInfoPtr info = RADEONPTR(scrn);
#ifdef USE_GLAMOR
if (info->use_glamor) {
@ -841,7 +845,7 @@ radeon_pixmap_get_fb(PixmapPtr pix)
return NULL;
if (!priv->fb)
priv->fb = radeon_pixmap_create_fb(info->drmmode.fd, pix);
priv->fb = radeon_pixmap_create_fb(pRADEONEnt->fd, pix);
return priv->fb;
} else
@ -855,7 +859,7 @@ radeon_pixmap_get_fb(PixmapPtr pix)
return NULL;
if (!driver_priv->fb)
driver_priv->fb = radeon_pixmap_create_fb(info->drmmode.fd, pix);
driver_priv->fb = radeon_pixmap_create_fb(pRADEONEnt->fd, pix);
return driver_priv->fb;
}

View file

@ -94,11 +94,11 @@
static int RADEONDRMGetNumPipes(ScrnInfoPtr pScrn, int *num_pipes)
{
RADEONInfoPtr info = RADEONPTR(pScrn);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
struct drm_radeon_info np2;
np2.value = (unsigned long)num_pipes;
np2.request = RADEON_INFO_NUM_GB_PIPES;
return drmCommandWriteRead(info->dri2.drm_fd, DRM_RADEON_INFO, &np2, sizeof(np2));
return drmCommandWriteRead(pRADEONEnt->fd, DRM_RADEON_INFO, &np2, sizeof(np2));
}
/* Initialize the acceleration hardware */

View file

@ -201,7 +201,9 @@ Bool radeon_get_pixmap_handle(PixmapPtr pixmap, uint32_t *handle)
struct radeon_bo *bo = radeon_get_pixmap_bo(pixmap);
#ifdef USE_GLAMOR
ScreenPtr screen = pixmap->drawable.pScreen;
RADEONInfoPtr info = RADEONPTR(xf86ScreenToScrn(screen));
ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn);
RADEONInfoPtr info = RADEONPTR(scrn);
#endif
if (bo) {
@ -230,7 +232,7 @@ Bool radeon_get_pixmap_handle(PixmapPtr pixmap, uint32_t *handle)
if (fd < 0)
return FALSE;
r = drmPrimeFDToHandle(info->dri2.drm_fd, fd, &priv->handle);
r = drmPrimeFDToHandle(pRADEONEnt->fd, fd, &priv->handle);
close(fd);
if (r == 0) {
struct drm_radeon_gem_set_tiling args = { .handle = priv->handle };
@ -238,7 +240,7 @@ Bool radeon_get_pixmap_handle(PixmapPtr pixmap, uint32_t *handle)
priv->handle_valid = TRUE;
*handle = priv->handle;
if (drmCommandWriteRead(info->dri2.drm_fd,
if (drmCommandWriteRead(pRADEONEnt->fd,
DRM_RADEON_GEM_GET_TILING, &args,
sizeof(args)) == 0)
priv->tiling_flags = args.tiling_flags;

View file

@ -81,7 +81,7 @@ static DevPrivateKeyRec dri2_window_private_key_rec;
/* Get GEM flink name for a pixmap */
static Bool
radeon_get_flink_name(RADEONInfoPtr info, PixmapPtr pixmap, uint32_t *name)
radeon_get_flink_name(RADEONEntPtr pRADEONEnt, PixmapPtr pixmap, uint32_t *name)
{
struct radeon_bo *bo = radeon_get_pixmap_bo(pixmap);
struct drm_gem_flink flink;
@ -90,7 +90,7 @@ radeon_get_flink_name(RADEONInfoPtr info, PixmapPtr pixmap, uint32_t *name)
return radeon_gem_get_kernel_name(bo, name) == 0;
if (radeon_get_pixmap_handle(pixmap, &flink.handle)) {
if (drmIoctl(info->dri2.drm_fd, DRM_IOCTL_GEM_FLINK, &flink) != 0)
if (drmIoctl(pRADEONEnt->fd, DRM_IOCTL_GEM_FLINK, &flink) != 0)
return FALSE;
*name = flink.name;
@ -107,6 +107,7 @@ radeon_dri2_create_buffer2(ScreenPtr pScreen,
unsigned int format)
{
ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
RADEONInfoPtr info = RADEONPTR(pScrn);
BufferPtr buffers;
struct dri2_buffer_priv *privates;
@ -253,7 +254,7 @@ radeon_dri2_create_buffer2(ScreenPtr pScreen,
pixmap->refcnt++;
}
if (!radeon_get_flink_name(info, pixmap, &buffers->name))
if (!radeon_get_flink_name(pRADEONEnt, pixmap, &buffers->name))
goto error;
}
@ -523,13 +524,13 @@ static Bool radeon_dri2_get_crtc_msc(xf86CrtcPtr crtc, CARD64 *ust, CARD64 *msc)
drmmode_crtc_get_ust_msc(crtc, ust, msc) != Success) {
/* CRTC is not running, extrapolate MSC and timestamp */
ScrnInfoPtr scrn = crtc->scrn;
RADEONInfoPtr info = RADEONPTR(scrn);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn);
CARD64 now, delta_t, delta_seq;
if (!drmmode_crtc->dpms_last_ust)
return FALSE;
if (drmmode_get_current_ust(info->dri2.drm_fd, &now) != 0) {
if (drmmode_get_current_ust(pRADEONEnt->fd, &now) != 0) {
xf86DrvMsg(scrn->scrnIndex, X_ERROR,
"%s cannot get current time\n", __func__);
return FALSE;
@ -689,7 +690,9 @@ static Bool
update_front(DrawablePtr draw, DRI2BufferPtr front)
{
PixmapPtr pixmap;
RADEONInfoPtr info = RADEONPTR(xf86ScreenToScrn(draw->pScreen));
ScrnInfoPtr scrn = xf86ScreenToScrn(draw->pScreen);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn);
RADEONInfoPtr info = RADEONPTR(scrn);
struct dri2_buffer_priv *priv = front->driverPrivate;
pixmap = get_drawable_pixmap(draw);
@ -697,7 +700,7 @@ update_front(DrawablePtr draw, DRI2BufferPtr front)
if (!info->use_glamor)
exaMoveInPixmap(pixmap);
if (!radeon_get_flink_name(info, pixmap, &front->name)) {
if (!radeon_get_flink_name(pRADEONEnt, pixmap, &front->name)) {
(*draw->pScreen->DestroyPixmap)(pixmap);
return FALSE;
}
@ -937,7 +940,7 @@ CARD32 radeon_dri2_extrapolate_msc_delay(xf86CrtcPtr crtc, CARD64 *target_msc,
{
drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
ScrnInfoPtr pScrn = crtc->scrn;
RADEONInfoPtr info = RADEONPTR(pScrn);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
int nominal_frame_rate = drmmode_crtc->dpms_last_fps;
CARD64 last_vblank_ust = drmmode_crtc->dpms_last_ust;
uint32_t last_vblank_seq = drmmode_crtc->dpms_last_seq;
@ -950,7 +953,7 @@ CARD32 radeon_dri2_extrapolate_msc_delay(xf86CrtcPtr crtc, CARD64 *target_msc,
*target_msc = 0;
return FALLBACK_SWAP_DELAY;
}
ret = drmmode_get_current_ust(info->dri2.drm_fd, &now);
ret = drmmode_get_current_ust(pRADEONEnt->fd, &now);
if (ret) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"%s cannot get current time\n", __func__);
@ -1028,7 +1031,7 @@ CARD32 radeon_dri2_deferred_event(OsTimerPtr timer, CARD32 now, pointer data)
DRI2FrameEventPtr event_info = (DRI2FrameEventPtr)data;
xf86CrtcPtr crtc = event_info->crtc;
ScrnInfoPtr scrn;
RADEONInfoPtr info;
RADEONEntPtr pRADEONEnt;
CARD64 drm_now;
int ret;
CARD64 delta_t, delta_seq, frame;
@ -1051,13 +1054,13 @@ CARD32 radeon_dri2_deferred_event(OsTimerPtr timer, CARD32 now, pointer data)
}
scrn = crtc->scrn;
info = RADEONPTR(scrn);
ret = drmmode_get_current_ust(info->dri2.drm_fd, &drm_now);
pRADEONEnt = RADEONEntPriv(scrn);
ret = drmmode_get_current_ust(pRADEONEnt->fd, &drm_now);
if (ret) {
xf86DrvMsg(scrn->scrnIndex, X_ERROR,
"%s cannot get current time\n", __func__);
if (event_info->drm_queue_seq)
radeon_drm_queue_handler(info->dri2.drm_fd, 0, 0, 0,
radeon_drm_queue_handler(pRADEONEnt->fd, 0, 0, 0,
(void*)event_info->drm_queue_seq);
else
radeon_dri2_frame_event_handler(crtc, 0, 0, data);
@ -1073,7 +1076,7 @@ CARD32 radeon_dri2_deferred_event(OsTimerPtr timer, CARD32 now, pointer data)
delta_seq /= 1000000;
frame = (CARD64)drmmode_crtc->dpms_last_seq + delta_seq;
if (event_info->drm_queue_seq)
radeon_drm_queue_handler(info->dri2.drm_fd, frame, drm_now / 1000000,
radeon_drm_queue_handler(pRADEONEnt->fd, frame, drm_now / 1000000,
drm_now % 1000000,
(void*)event_info->drm_queue_seq);
else
@ -1104,7 +1107,7 @@ static int radeon_dri2_schedule_wait_msc(ClientPtr client, DrawablePtr draw,
{
ScreenPtr screen = draw->pScreen;
ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
RADEONInfoPtr info = RADEONPTR(scrn);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn);
DRI2FrameEventPtr wait_info = NULL;
uintptr_t drm_queue_seq = 0;
xf86CrtcPtr crtc = radeon_dri2_drawable_crtc(draw, TRUE);
@ -1152,7 +1155,7 @@ static int radeon_dri2_schedule_wait_msc(ClientPtr client, DrawablePtr draw,
vbl.request.type = DRM_VBLANK_RELATIVE;
vbl.request.type |= radeon_populate_vbl_request_type(crtc);
vbl.request.sequence = 0;
ret = drmWaitVBlank(info->dri2.drm_fd, &vbl);
ret = drmWaitVBlank(pRADEONEnt->fd, &vbl);
if (ret) {
xf86DrvMsg(scrn->scrnIndex, X_WARNING,
"get vblank counter failed: %s\n", strerror(errno));
@ -1190,7 +1193,7 @@ static int radeon_dri2_schedule_wait_msc(ClientPtr client, DrawablePtr draw,
vbl.request.type |= radeon_populate_vbl_request_type(crtc);
vbl.request.sequence = target_msc - msc_delta;
vbl.request.signal = drm_queue_seq;
ret = drmWaitVBlank(info->dri2.drm_fd, &vbl);
ret = drmWaitVBlank(pRADEONEnt->fd, &vbl);
if (ret) {
xf86DrvMsg(scrn->scrnIndex, X_WARNING,
"get vblank counter failed: %s\n", strerror(errno));
@ -1221,7 +1224,7 @@ static int radeon_dri2_schedule_wait_msc(ClientPtr client, DrawablePtr draw,
vbl.request.sequence += divisor;
vbl.request.signal = drm_queue_seq;
ret = drmWaitVBlank(info->dri2.drm_fd, &vbl);
ret = drmWaitVBlank(pRADEONEnt->fd, &vbl);
if (ret) {
xf86DrvMsg(scrn->scrnIndex, X_WARNING,
"get vblank counter failed: %s\n", strerror(errno));
@ -1266,7 +1269,7 @@ static int radeon_dri2_schedule_swap(ClientPtr client, DrawablePtr draw,
{
ScreenPtr screen = draw->pScreen;
ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
RADEONInfoPtr info = RADEONPTR(scrn);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn);
xf86CrtcPtr crtc = radeon_dri2_drawable_crtc(draw, TRUE);
uint32_t msc_delta;
drmVBlank vbl;
@ -1339,7 +1342,7 @@ static int radeon_dri2_schedule_swap(ClientPtr client, DrawablePtr draw,
vbl.request.type = DRM_VBLANK_RELATIVE;
vbl.request.type |= radeon_populate_vbl_request_type(crtc);
vbl.request.sequence = 0;
ret = drmWaitVBlank(info->dri2.drm_fd, &vbl);
ret = drmWaitVBlank(pRADEONEnt->fd, &vbl);
if (ret) {
xf86DrvMsg(scrn->scrnIndex, X_WARNING,
"first get vblank counter failed: %s\n",
@ -1387,7 +1390,7 @@ static int radeon_dri2_schedule_swap(ClientPtr client, DrawablePtr draw,
vbl.request.sequence = *target_msc - msc_delta;
vbl.request.signal = drm_queue_seq;
ret = drmWaitVBlank(info->dri2.drm_fd, &vbl);
ret = drmWaitVBlank(pRADEONEnt->fd, &vbl);
if (ret) {
xf86DrvMsg(scrn->scrnIndex, X_WARNING,
"divisor 0 get vblank counter failed: %s\n",
@ -1432,7 +1435,7 @@ static int radeon_dri2_schedule_swap(ClientPtr client, DrawablePtr draw,
vbl.request.sequence -= flip;
vbl.request.signal = drm_queue_seq;
ret = drmWaitVBlank(info->dri2.drm_fd, &vbl);
ret = drmWaitVBlank(pRADEONEnt->fd, &vbl);
if (ret) {
xf86DrvMsg(scrn->scrnIndex, X_WARNING,
"final get vblank counter failed: %s\n",
@ -1475,6 +1478,7 @@ Bool
radeon_dri2_screen_init(ScreenPtr pScreen)
{
ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
RADEONInfoPtr info = RADEONPTR(pScrn);
DRI2InfoRec dri2_info = { 0 };
const char *driverNames[2];
@ -1483,7 +1487,7 @@ radeon_dri2_screen_init(ScreenPtr pScreen)
if (!info->dri2.available)
return FALSE;
info->dri2.device_name = drmGetDeviceNameFromFd(info->dri2.drm_fd);
info->dri2.device_name = drmGetDeviceNameFromFd(pRADEONEnt->fd);
if ( (info->ChipFamily >= CHIP_FAMILY_TAHITI) ) {
dri2_info.driverName = SI_DRIVER_NAME;
@ -1496,7 +1500,7 @@ radeon_dri2_screen_init(ScreenPtr pScreen)
} else {
dri2_info.driverName = RADEON_DRIVER_NAME;
}
dri2_info.fd = info->dri2.drm_fd;
dri2_info.fd = pRADEONEnt->fd;
dri2_info.deviceName = info->dri2.device_name;
dri2_info.version = DRI2INFOREC_VERSION;
dri2_info.CreateBuffer = radeon_dri2_create_buffer;
@ -1513,7 +1517,7 @@ radeon_dri2_screen_init(ScreenPtr pScreen)
#ifdef DRM_CAP_VBLANK_HIGH_CRTC
uint64_t cap_value;
if (drmGetCap(info->dri2.drm_fd, DRM_CAP_VBLANK_HIGH_CRTC, &cap_value)) {
if (drmGetCap(pRADEONEnt->fd, DRM_CAP_VBLANK_HIGH_CRTC, &cap_value)) {
xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "You need a newer kernel "
"for VBLANKs on CRTC > 1\n");
scheduling_works = FALSE;

View file

@ -31,7 +31,6 @@
struct radeon_dri2 {
drmVersionPtr pKernelDRMVersion;
int drm_fd;
Bool available;
Bool enabled;
char *device_name;

View file

@ -43,6 +43,7 @@
static int open_master_node(ScreenPtr screen, int *out)
{
ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn);
RADEONInfoPtr info = RADEONPTR(scrn);
drm_magic_t magic;
int fd;
@ -76,7 +77,7 @@ static int open_master_node(ScreenPtr screen, int *out)
}
}
if (drmAuthMagic(info->dri2.drm_fd, magic) < 0) {
if (drmAuthMagic(pRADEONEnt->fd, magic) < 0) {
close(fd);
return BadMatch;
}

View file

@ -300,7 +300,7 @@ void *RADEONEXACreatePixmap2(ScreenPtr pScreen, int width, int height,
void RADEONEXADestroyPixmap(ScreenPtr pScreen, void *driverPriv)
{
RADEONInfoPtr info = RADEONPTR(xf86ScreenToScrn(pScreen));
RADEONEntPtr pRADEONEnt = RADEONEntPriv(xf86ScreenToScrn(pScreen));
struct radeon_exa_pixmap_priv *driver_priv = driverPriv;
if (!driverPriv)
@ -308,7 +308,7 @@ void RADEONEXADestroyPixmap(ScreenPtr pScreen, void *driverPriv)
if (driver_priv->bo)
radeon_bo_unref(driver_priv->bo);
drmmode_fb_reference(info->drmmode.fd, &driver_priv->fb, NULL);
drmmode_fb_reference(pRADEONEnt->fd, &driver_priv->fb, NULL);
free(driverPriv);
}

View file

@ -74,6 +74,7 @@ radeon_glamor_create_screen_resources(ScreenPtr screen)
Bool
radeon_glamor_pre_init(ScrnInfoPtr scrn)
{
RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn);
RADEONInfoPtr info = RADEONPTR(scrn);
pointer glamor_module;
CARD32 version;
@ -135,7 +136,7 @@ radeon_glamor_pre_init(ScrnInfoPtr scrn)
"Incompatible glamor version, required >= 0.3.0.\n");
return FALSE;
} else {
if (glamor_egl_init(scrn, info->dri2.drm_fd)) {
if (glamor_egl_init(scrn, pRADEONEnt->fd)) {
xf86DrvMsg(scrn->scrnIndex, X_INFO,
"glamor detected, initialising EGL layer.\n");
} else {

View file

@ -187,6 +187,7 @@ static Bool RADEONGetRec(ScrnInfoPtr pScrn)
/* Free our private RADEONInfoRec */
static void RADEONFreeRec(ScrnInfoPtr pScrn)
{
RADEONEntPtr pRADEONEnt;
RADEONInfoPtr info;
if (!pScrn || !pScrn->driverPrivate) return;
@ -196,7 +197,9 @@ static void RADEONFreeRec(ScrnInfoPtr pScrn)
if (info->fbcon_pixmap)
pScrn->pScreen->DestroyPixmap(info->fbcon_pixmap);
if (info->dri2.drm_fd > 0) {
pRADEONEnt = RADEONEntPriv(pScrn);
if (pRADEONEnt->fd > 0) {
DevUnion *pPriv;
RADEONEntPtr pRADEONEnt;
pPriv = xf86GetEntityPrivate(pScrn->entityList[0],
@ -719,6 +722,7 @@ radeon_prime_scanout_update(PixmapDirtyUpdatePtr dirty)
{
ScreenPtr screen = dirty->slave_dst->drawable.pScreen;
ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn);
xf86CrtcPtr xf86_crtc = radeon_prime_dirty_to_crtc(dirty);
drmmode_crtc_private_ptr drmmode_crtc;
uintptr_t drm_queue_seq;
@ -748,7 +752,7 @@ radeon_prime_scanout_update(PixmapDirtyUpdatePtr dirty)
vbl.request.type |= radeon_populate_vbl_request_type(xf86_crtc);
vbl.request.sequence = 1;
vbl.request.signal = drm_queue_seq;
if (drmWaitVBlank(RADEONPTR(scrn)->dri2.drm_fd, &vbl)) {
if (drmWaitVBlank(pRADEONEnt->fd, &vbl)) {
xf86DrvMsg(scrn->scrnIndex, X_WARNING,
"drmWaitVBlank failed for PRIME update: %s\n",
strerror(errno));
@ -772,9 +776,10 @@ static void
radeon_prime_scanout_flip_handler(xf86CrtcPtr crtc, uint32_t msc, uint64_t usec,
void *event_data)
{
RADEONEntPtr pRADEONEnt = RADEONEntPriv(crtc->scrn);
drmmode_crtc_private_ptr drmmode_crtc = event_data;
drmmode_fb_reference(drmmode_crtc->drmmode->fd, &drmmode_crtc->fb,
drmmode_fb_reference(pRADEONEnt->fd, &drmmode_crtc->fb,
drmmode_crtc->flip_pending);
radeon_prime_scanout_flip_abort(crtc, event_data);
}
@ -1012,6 +1017,7 @@ static void
radeon_scanout_update(xf86CrtcPtr xf86_crtc)
{
drmmode_crtc_private_ptr drmmode_crtc = xf86_crtc->driver_private;
RADEONEntPtr pRADEONEnt = RADEONEntPriv(xf86_crtc->scrn);
uintptr_t drm_queue_seq;
ScrnInfoPtr scrn;
drmVBlank vbl;
@ -1056,7 +1062,7 @@ radeon_scanout_update(xf86CrtcPtr xf86_crtc)
vbl.request.type |= radeon_populate_vbl_request_type(xf86_crtc);
vbl.request.sequence = 1;
vbl.request.signal = drm_queue_seq;
if (drmWaitVBlank(RADEONPTR(scrn)->dri2.drm_fd, &vbl)) {
if (drmWaitVBlank(pRADEONEnt->fd, &vbl)) {
xf86DrvMsg(scrn->scrnIndex, X_WARNING,
"drmWaitVBlank failed for scanout update: %s\n",
strerror(errno));
@ -1136,6 +1142,7 @@ static void RADEONBlockHandler_KMS(BLOCKHANDLER_ARGS_DECL)
{
SCREEN_PTR(arg);
ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
RADEONInfoPtr info = RADEONPTR(pScrn);
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
int c;
@ -1151,7 +1158,7 @@ static void RADEONBlockHandler_KMS(BLOCKHANDLER_ARGS_DECL)
drmmode_crtc_private_ptr drmmode_crtc =
xf86_config->crtc[c]->driver_private;
drmmode_fb_reference(info->drmmode.fd, &drmmode_crtc->fb, NULL);
drmmode_fb_reference(pRADEONEnt->fd, &drmmode_crtc->fb, NULL);
}
return;
@ -1183,7 +1190,7 @@ static void RADEONBlockHandler_KMS(BLOCKHANDLER_ARGS_DECL)
static Bool RADEONIsFastFBWorking(ScrnInfoPtr pScrn)
{
RADEONInfoPtr info = RADEONPTR(pScrn);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
struct drm_radeon_info ginfo;
int r;
uint32_t tmp = 0;
@ -1191,7 +1198,7 @@ static Bool RADEONIsFastFBWorking(ScrnInfoPtr pScrn)
memset(&ginfo, 0, sizeof(ginfo));
ginfo.request = RADEON_INFO_FASTFB_WORKING;
ginfo.value = (uintptr_t)&tmp;
r = drmCommandWriteRead(info->dri2.drm_fd, DRM_RADEON_INFO, &ginfo, sizeof(ginfo));
r = drmCommandWriteRead(pRADEONEnt->fd, DRM_RADEON_INFO, &ginfo, sizeof(ginfo));
if (r) {
return FALSE;
}
@ -1202,7 +1209,7 @@ static Bool RADEONIsFastFBWorking(ScrnInfoPtr pScrn)
static Bool RADEONIsFusionGARTWorking(ScrnInfoPtr pScrn)
{
RADEONInfoPtr info = RADEONPTR(pScrn);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
struct drm_radeon_info ginfo;
int r;
uint32_t tmp;
@ -1210,7 +1217,7 @@ static Bool RADEONIsFusionGARTWorking(ScrnInfoPtr pScrn)
memset(&ginfo, 0, sizeof(ginfo));
ginfo.request = RADEON_INFO_FUSION_GART_WORKING;
ginfo.value = (uintptr_t)&tmp;
r = drmCommandWriteRead(info->dri2.drm_fd, DRM_RADEON_INFO, &ginfo, sizeof(ginfo));
r = drmCommandWriteRead(pRADEONEnt->fd, DRM_RADEON_INFO, &ginfo, sizeof(ginfo));
if (r) {
return FALSE;
}
@ -1221,6 +1228,7 @@ static Bool RADEONIsFusionGARTWorking(ScrnInfoPtr pScrn)
static Bool RADEONIsAccelWorking(ScrnInfoPtr pScrn)
{
RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
RADEONInfoPtr info = RADEONPTR(pScrn);
struct drm_radeon_info ginfo;
int r;
@ -1232,7 +1240,7 @@ static Bool RADEONIsAccelWorking(ScrnInfoPtr pScrn)
else
ginfo.request = RADEON_INFO_ACCEL_WORKING;
ginfo.value = (uintptr_t)&tmp;
r = drmCommandWriteRead(info->dri2.drm_fd, DRM_RADEON_INFO, &ginfo, sizeof(ginfo));
r = drmCommandWriteRead(pRADEONEnt->fd, DRM_RADEON_INFO, &ginfo, sizeof(ginfo));
if (r) {
/* If kernel is too old before 2.6.32 than assume accel is working */
if (r == -EINVAL) {
@ -1470,7 +1478,6 @@ static int radeon_get_drm_master_fd(ScrnInfoPtr pScrn)
static Bool radeon_open_drm_master(ScrnInfoPtr pScrn)
{
RADEONInfoPtr info = RADEONPTR(pScrn);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
drmSetVersion sv;
int err;
@ -1478,14 +1485,12 @@ static Bool radeon_open_drm_master(ScrnInfoPtr pScrn)
if (pRADEONEnt->fd) {
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
" reusing fd for second head\n");
info->drmmode.fd = info->dri2.drm_fd = pRADEONEnt->fd;
pRADEONEnt->fd_ref++;
return TRUE;
}
info->dri2.drm_fd = radeon_get_drm_master_fd(pScrn);
if (info->dri2.drm_fd == -1)
pRADEONEnt->fd = radeon_get_drm_master_fd(pScrn);
if (pRADEONEnt->fd == -1)
return FALSE;
/* Check that what we opened was a master or a master-capable FD,
@ -1496,24 +1501,23 @@ static Bool radeon_open_drm_master(ScrnInfoPtr pScrn)
sv.drm_di_minor = 1;
sv.drm_dd_major = -1;
sv.drm_dd_minor = -1;
err = drmSetInterfaceVersion(info->dri2.drm_fd, &sv);
err = drmSetInterfaceVersion(pRADEONEnt->fd, &sv);
if (err != 0) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"[drm] failed to set drm interface version.\n");
drmClose(info->dri2.drm_fd);
info->dri2.drm_fd = -1;
drmClose(pRADEONEnt->fd);
pRADEONEnt->fd = -1;
return FALSE;
}
pRADEONEnt->fd = info->dri2.drm_fd;
pRADEONEnt->fd_ref = 1;
info->drmmode.fd = info->dri2.drm_fd;
return TRUE;
}
static Bool r600_get_tile_config(ScrnInfoPtr pScrn)
{
RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
RADEONInfoPtr info = RADEONPTR(pScrn);
struct drm_radeon_info ginfo;
int r;
@ -1525,7 +1529,7 @@ static Bool r600_get_tile_config(ScrnInfoPtr pScrn)
memset(&ginfo, 0, sizeof(ginfo));
ginfo.request = RADEON_INFO_TILING_CONFIG;
ginfo.value = (uintptr_t)&tmp;
r = drmCommandWriteRead(info->dri2.drm_fd, DRM_RADEON_INFO, &ginfo, sizeof(ginfo));
r = drmCommandWriteRead(pRADEONEnt->fd, DRM_RADEON_INFO, &ginfo, sizeof(ginfo));
if (r)
return FALSE;
@ -1622,6 +1626,7 @@ static Bool r600_get_tile_config(ScrnInfoPtr pScrn)
static void RADEONSetupCapabilities(ScrnInfoPtr pScrn)
{
#ifdef RADEON_PIXMAP_SHARING
RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
RADEONInfoPtr info = RADEONPTR(pScrn);
uint64_t value;
int ret;
@ -1632,7 +1637,7 @@ static void RADEONSetupCapabilities(ScrnInfoPtr pScrn)
if (info->r600_shadow_fb)
return;
ret = drmGetCap(info->dri2.drm_fd, DRM_CAP_PRIME, &value);
ret = drmGetCap(pRADEONEnt->fd, DRM_CAP_PRIME, &value);
if (ret == 0) {
if (value & DRM_PRIME_CAP_EXPORT)
pScrn->capabilities |= RR_Capability_SourceOutput | RR_Capability_SourceOffload;
@ -1770,7 +1775,7 @@ Bool RADEONPreInit_KMS(ScrnInfoPtr pScrn, int flags)
info->dri2.available = FALSE;
info->dri2.enabled = FALSE;
info->dri2.pKernelDRMVersion = drmGetVersion(info->dri2.drm_fd);
info->dri2.pKernelDRMVersion = drmGetVersion(pRADEONEnt->fd);
if (info->dri2.pKernelDRMVersion == NULL) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"RADEONDRIGetVersion failed to get the DRM version\n");
@ -1935,7 +1940,7 @@ Bool RADEONPreInit_KMS(ScrnInfoPtr pScrn, int flags)
{
struct drm_radeon_gem_info mminfo;
if (!drmCommandWriteRead(info->dri2.drm_fd, DRM_RADEON_GEM_INFO, &mminfo, sizeof(mminfo)))
if (!drmCommandWriteRead(pRADEONEnt->fd, DRM_RADEON_GEM_INFO, &mminfo, sizeof(mminfo)))
{
info->vram_size = mminfo.vram_visible;
info->gart_size = mminfo.gart_size;
@ -2075,10 +2080,7 @@ static Bool RADEONSaveScreen_KMS(ScreenPtr pScreen, int mode)
static Bool radeon_set_drm_master(ScrnInfoPtr pScrn)
{
RADEONInfoPtr info = RADEONPTR(pScrn);
#ifdef XF86_PDEV_SERVER_FD
RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
#endif
int err;
#ifdef XF86_PDEV_SERVER_FD
@ -2087,7 +2089,7 @@ static Bool radeon_set_drm_master(ScrnInfoPtr pScrn)
return TRUE;
#endif
err = drmSetMaster(info->dri2.drm_fd);
err = drmSetMaster(pRADEONEnt->fd);
if (err)
ErrorF("Unable to retrieve master\n");
@ -2096,16 +2098,15 @@ static Bool radeon_set_drm_master(ScrnInfoPtr pScrn)
static void radeon_drop_drm_master(ScrnInfoPtr pScrn)
{
RADEONInfoPtr info = RADEONPTR(pScrn);
#ifdef XF86_PDEV_SERVER_FD
RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
#ifdef XF86_PDEV_SERVER_FD
if (pRADEONEnt->platform_dev &&
(pRADEONEnt->platform_dev->flags & XF86_PDEV_SERVER_FD))
return;
#endif
drmDropMaster(info->dri2.drm_fd);
drmDropMaster(pRADEONEnt->fd);
}
/* Called at the end of each server generation. Restore the original
@ -2177,6 +2178,7 @@ void RADEONFreeScreen_KMS(FREE_SCREEN_ARGS_DECL)
Bool RADEONScreenInit_KMS(SCREEN_INIT_ARGS_DECL)
{
ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
RADEONInfoPtr info = RADEONPTR(pScrn);
int subPixelOrder = SubPixelUnknown;
MessageType from;
@ -2201,9 +2203,9 @@ Bool RADEONScreenInit_KMS(SCREEN_INIT_ARGS_DECL)
if (info->r600_shadow_fb == FALSE)
info->directRenderingEnabled = radeon_dri2_screen_init(pScreen);
info->surf_man = radeon_surface_manager_new(info->dri2.drm_fd);
info->surf_man = radeon_surface_manager_new(pRADEONEnt->fd);
if (!info->bufmgr)
info->bufmgr = radeon_bo_manager_gem_ctor(info->dri2.drm_fd);
info->bufmgr = radeon_bo_manager_gem_ctor(pRADEONEnt->fd);
if (!info->bufmgr) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"failed to initialise GEM buffer manager");
@ -2212,7 +2214,7 @@ Bool RADEONScreenInit_KMS(SCREEN_INIT_ARGS_DECL)
drmmode_set_bufmgr(pScrn, &info->drmmode, info->bufmgr);
if (!info->csm)
info->csm = radeon_cs_manager_gem_ctor(info->dri2.drm_fd);
info->csm = radeon_cs_manager_gem_ctor(pRADEONEnt->fd);
if (!info->csm) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
"failed to initialise command submission manager");

View file

@ -105,10 +105,11 @@ static Bool
radeon_present_flush_drm_events(ScreenPtr screen)
{
ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn);
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
drmmode_crtc_private_ptr drmmode_crtc = xf86_config->crtc[0]->driver_private;
drmmode_ptr drmmode = drmmode_crtc->drmmode;
struct pollfd p = { .fd = drmmode->fd, .events = POLLIN };
struct pollfd p = { .fd = pRADEONEnt->fd, .events = POLLIN };
int r;
do {
@ -118,7 +119,7 @@ radeon_present_flush_drm_events(ScreenPtr screen)
if (r <= 0)
return 0;
return drmHandleEvent(drmmode->fd, &drmmode->event_context) >= 0;
return drmHandleEvent(pRADEONEnt->fd, &drmmode->event_context) >= 0;
}
/*
@ -155,7 +156,7 @@ radeon_present_queue_vblank(RRCrtcPtr crtc, uint64_t event_id, uint64_t msc)
xf86CrtcPtr xf86_crtc = crtc->devPrivate;
ScreenPtr screen = crtc->pScreen;
ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
RADEONInfoPtr info = RADEONPTR(scrn);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn);
int crtc_id = drmmode_get_crtc_id(xf86_crtc);
struct radeon_present_vblank_event *event;
uintptr_t drm_queue_seq;
@ -180,7 +181,7 @@ radeon_present_queue_vblank(RRCrtcPtr crtc, uint64_t event_id, uint64_t msc)
vbl.request.sequence = msc;
vbl.request.signal = drm_queue_seq;
for (;;) {
ret = drmWaitVBlank(info->dri2.drm_fd, &vbl);
ret = drmWaitVBlank(pRADEONEnt->fd, &vbl);
if (!ret)
break;
if (errno != EBUSY || !radeon_present_flush_drm_events(screen)) {
@ -435,11 +436,11 @@ radeon_present_has_async_flip(ScreenPtr screen)
{
#ifdef DRM_CAP_ASYNC_PAGE_FLIP
ScrnInfoPtr scrn = xf86ScreenToScrn(screen);
RADEONInfoPtr info = RADEONPTR(scrn);
RADEONEntPtr pRADEONEnt = RADEONEntPriv(scrn);
int ret;
uint64_t value;
ret = drmGetCap(info->dri2.drm_fd, DRM_CAP_ASYNC_PAGE_FLIP, &value);
ret = drmGetCap(pRADEONEnt->fd, DRM_CAP_ASYNC_PAGE_FLIP, &value);
if (ret == 0)
return value == 1;
#endif