int mggh::DRMHelper::get_authenticated_fd() { /* We must have our own device fd first, so that it has become the DRM master */ if (fd < 0) BOOST_THROW_EXCEPTION( std::runtime_error( "Tried to get authenticated DRM fd before setting up the DRM master")); int auth_fd = open_drm_device(); if (auth_fd < 0) BOOST_THROW_EXCEPTION( std::runtime_error("Failed to open DRM device for authenticated fd")); drm_magic_t magic; int ret = -1; if ((ret = drmGetMagic(auth_fd, &magic)) < 0) { close(auth_fd); BOOST_THROW_EXCEPTION( boost::enable_error_info( std::runtime_error("Failed to get DRM device magic cookie")) << boost::errinfo_errno(ret)); } if ((ret = drmAuthMagic(fd, magic)) < 0) { close(auth_fd); BOOST_THROW_EXCEPTION( boost::enable_error_info( std::runtime_error("Failed to authenticate DRM device magic cookie")) << boost::errinfo_errno(ret)); } return auth_fd; }
static int dri2_drm_authenticate(_EGLDisplay *disp, uint32_t id) { struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); return drmAuthMagic(dri2_dpy->fd, id); }
static inline int is_drm_master(int drm_fd) { drm_magic_t magic; return drmGetMagic(drm_fd, &magic) == 0 && drmAuthMagic(drm_fd, magic) == 0; }
static int drm_display_authenticate(void *user_data, uint32_t magic) { struct native_display *ndpy = user_data; struct drm_display *drmdpy = drm_display(ndpy); return drmAuthMagic(drmdpy->fd, magic); }
Bool DRIAuthConnection(ScreenPtr pScreen, unsigned int magic) { #if 0 /* FIXME: something? */ DRIScreenPrivPtr pDRIPriv = DRI_SCREEN_PRIV(pScreen); if (drmAuthMagic(pDRIPriv->drmFD, magic)) return FALSE; #endif return TRUE; }
int I810XvMCCreateContext (ScrnInfoPtr pScrn, XvMCContextPtr pContext, int *num_priv, long **priv ) { I810Ptr pI810 = I810PTR(pScrn); DRIInfoPtr pDRIInfo = pI810->pDRIInfo; I810XvMCCreateContextRec *contextRec; if(!pI810->directRenderingEnabled) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "I810XvMCCreateContext: Cannot use XvMC without DRI!\n"); return BadAlloc; } /* Context Already in use! */ if(pI810->xvmcContext) { xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "I810XvMCCreateContext: 2 XvMC Contexts Attempted, not supported.\n"); return BadAlloc; } *priv = calloc(1,sizeof(I810XvMCCreateContextRec)); contextRec = (I810XvMCCreateContextRec *)*priv; if(!*priv) { *num_priv = 0; return BadAlloc; } *num_priv = sizeof(I810XvMCCreateContextRec) >> 2; if(drmCreateContext(pI810->drmSubFD, &(contextRec->drmcontext) ) < 0) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "I810XvMCCreateContext: Unable to create DRMContext!\n"); free(*priv); return BadAlloc; } drmAuthMagic(pI810->drmSubFD, pContext->flags); pI810->xvmcContext = contextRec->drmcontext; contextRec->fbBase = pScrn->memPhysBase; /* Overlay Regs are at 1024 offset into the Cursor Space */ contextRec->OverlayOffset = pI810->CursorStart; contextRec->OverlaySize = 4096; contextRec->SurfacesOffset = pI810->MC.Start; contextRec->SurfacesSize = pI810->MC.Size; strncpy (contextRec->busIdString, pDRIInfo->busIdString, 9); return Success; }
void mggh::DRMHelper::auth_magic(drm_magic_t magic) const { /* We must have our own device fd first, so that it has become the DRM master */ if (fd < 0) { BOOST_THROW_EXCEPTION( std::runtime_error( "Tried to authenticate magic cookie before setting up the DRM master")); } int ret = drmAuthMagic(fd, magic); if (ret < 0) { BOOST_THROW_EXCEPTION( boost::enable_error_info( std::runtime_error("Failed to authenticate DRM device magic cookie")) << boost::errinfo_errno(ret)); } }
/* * Authenticate a magic. */ int gralloc_drm_auth_magic(struct gralloc_drm_t *drm, int32_t magic) { return drmAuthMagic(drm->fd, (drm_magic_t) magic); }