call drmSetMaster and drmAuthMagic for sharedfb schema under PROCS runmode

This commit is contained in:
Vincent Wei
2020-03-16 22:59:39 +08:00
parent b54c186688
commit 444d9bb1f7
+35 -10
View File
@@ -1099,6 +1099,11 @@ static GAL_VideoDevice *DRM_CreateDevice(int devindex)
# if IS_SHAREDFB_SCHEMA_PROCS # if IS_SHAREDFB_SCHEMA_PROCS
if (mgIsServer) { if (mgIsServer) {
if (drmSetMaster(device->hidden->dev_fd)) {
_ERR_PRINTF("NEWGAL>DRM: failed to call drmSetMaster: %m\n");
return NULL;
}
drmGetMagic(device->hidden->dev_fd, &device->hidden->auth_magic);
# endif /* IS_SHAREDFB_SCHEMA_PROCS */ # endif /* IS_SHAREDFB_SCHEMA_PROCS */
char tmp [8]; char tmp [8];
if (GetMgEtcValue ("drm", "double_buffering", tmp, 8) < 0) { if (GetMgEtcValue ("drm", "double_buffering", tmp, 8) < 0) {
@@ -1111,6 +1116,7 @@ static GAL_VideoDevice *DRM_CreateDevice(int devindex)
# if IS_SHAREDFB_SCHEMA_PROCS # if IS_SHAREDFB_SCHEMA_PROCS
} }
else { else {
drmAuthMagic(device->hidden->dev_fd, SHAREDRES_VIDEO_DRM_MAGIC);
device->hidden->dbl_buff = SHAREDRES_VIDEO_DBL_BUFF; device->hidden->dbl_buff = SHAREDRES_VIDEO_DBL_BUFF;
} }
# endif /* IS_SHAREDFB_SCHEMA_PROCS */ # endif /* IS_SHAREDFB_SCHEMA_PROCS */
@@ -1572,6 +1578,8 @@ static void DRM_CopyVideoInfoToSharedRes(_THIS)
SHAREDRES_VIDEO_DRM_FORMAT = SHAREDRES_VIDEO_DRM_FORMAT =
((DrmSurfaceBuffer*)vdata->real_screen->hwdata)->drm_format; ((DrmSurfaceBuffer*)vdata->real_screen->hwdata)->drm_format;
SHAREDRES_VIDEO_DRM_MAGIC = vdata->auth_magic;
strncpy (SHAREDRES_VIDEO_EXDRIVER, vdata->ex_driver, LEN_EXDRIVER_NAME); strncpy (SHAREDRES_VIDEO_EXDRIVER, vdata->ex_driver, LEN_EXDRIVER_NAME);
SHAREDRES_VIDEO_EXDRIVER[LEN_EXDRIVER_NAME] = 0; SHAREDRES_VIDEO_EXDRIVER[LEN_EXDRIVER_NAME] = 0;
@@ -1851,9 +1859,10 @@ static DrmSurfaceBuffer *drm_create_dumb_buffer_from_name(DrmVideoData* vdata,
/* open named buffer */ /* open named buffer */
memset(&oreq, 0, sizeof(oreq)); memset(&oreq, 0, sizeof(oreq));
ret = drmIoctl(vdata->dev_fd, DRM_IOCTL_GEM_OPEN, &creq); oreq.name = name;
ret = drmIoctl(vdata->dev_fd, DRM_IOCTL_GEM_OPEN, &oreq);
if (ret < 0) { if (ret < 0) {
_WRN_PRINTF("Failed to open named buffer (%d): %m\n", errno); _WRN_PRINTF("Failed to open named buffer (%u): %m\n", name);
return NULL; return NULL;
} }
@@ -2025,14 +2034,16 @@ static GAL_Surface *DRM_SetVideoMode(_THIS, GAL_Surface *current,
/* initialize the header */ /* initialize the header */
hdr = (GAL_ShadowSurfaceHeader *)shadow_buffer->buff; hdr = (GAL_ShadowSurfaceHeader *)shadow_buffer->buff;
#if IS_SHAREDFB_SCHEMA_PROCS #if 0 /* deprecated code */
IS_SHAREDFB_SCHEMA_PROCS
ret = sem_init(&hdr->sem_lock, 1, 1); ret = sem_init(&hdr->sem_lock, 1, 1);
_WRN_PRINTF ("sem_init called\n");
if (ret) { if (ret) {
_ERR_PRINTF("NEWGAL>DRM: " _ERR_PRINTF("NEWGAL>DRM: "
"cannot initialize the semaphore lock for dirty rectangle\n"); "cannot initialize the semaphore lock for dirty rectangle\n");
goto error; goto error;
} }
#endif #endif /* deprecated code */
SetRectEmpty (&hdr->dirty_rc); SetRectEmpty (&hdr->dirty_rc);
} }
@@ -2580,9 +2591,12 @@ int __drm_get_shared_screen_surface (const char *name, SHAREDSURFINFO* info)
memset (&flink, 0, sizeof (flink)); memset (&flink, 0, sizeof (flink));
flink.handle = surface_buffer->handle; flink.handle = surface_buffer->handle;
if (drmIoctl(vdata->dev_fd, DRM_IOCTL_GEM_FLINK, &flink)) if (drmIoctl(vdata->dev_fd, DRM_IOCTL_GEM_FLINK, &flink)) {
_ERR_PRINTF ("NEWGAL>DRM: failed to flink real screen\n");
return -1; return -1;
}
_WRN_PRINTF ("flink name of real screen: %u\n", flink.name);
vdata->real_name = flink.name; vdata->real_name = flink.name;
} }
@@ -2599,13 +2613,19 @@ int __drm_get_shared_screen_surface (const char *name, SHAREDSURFINFO* info)
memset (&flink, 0, sizeof (flink)); memset (&flink, 0, sizeof (flink));
flink.handle = surface_buffer->handle; flink.handle = surface_buffer->handle;
if (drmIoctl (vdata->dev_fd, DRM_IOCTL_GEM_FLINK, &flink)) if (drmIoctl (vdata->dev_fd, DRM_IOCTL_GEM_FLINK, &flink)) {
_ERR_PRINTF ("NEWGAL>DRM: failed to flink shadow screen\n");
return -1; return -1;
}
_WRN_PRINTF ("flink name of shadow screen: %u\n", flink.name);
vdata->shadow_name = flink.name; vdata->shadow_name = flink.name;
} }
info->flags = vdata->shadow_screen->flags; info->flags = vdata->shadow_screen->flags;
info->width = vdata->shadow_screen->w;
info->height = vdata->shadow_screen->h;
info->pitch = vdata->shadow_screen->pitch;
info->name = vdata->shadow_name; info->name = vdata->shadow_name;
} }
@@ -2679,6 +2699,9 @@ static GAL_Surface *DRM_SetVideoMode_Client(_THIS, GAL_Surface *current,
goto error; goto error;
} }
GAL_SetClipRect (vdata->real_screen, NULL);
GAL_SetColorKey (vdata->shadow_screen, 0, 0);
GAL_SetAlpha (vdata->shadow_screen, 0, 0);
GAL_FreeSurface (current); GAL_FreeSurface (current);
return vdata->shadow_screen; return vdata->shadow_screen;
@@ -2846,7 +2869,7 @@ static void DRM_UpdateRects (_THIS, int numrects, GAL_Rect *rects)
((DrmSurfaceBuffer*)this->hidden->shadow_screen->hwdata)->buff; ((DrmSurfaceBuffer*)this->hidden->shadow_screen->hwdata)->buff;
#if IS_SHAREDFB_SCHEMA_PROCS #if IS_SHAREDFB_SCHEMA_PROCS
sem_wait(&hdr->sem_lock); //sem_wait(&hdr->sem_lock);
#endif #endif
bound = hdr->dirty_rc; bound = hdr->dirty_rc;
@@ -2864,7 +2887,7 @@ static void DRM_UpdateRects (_THIS, int numrects, GAL_Rect *rects)
hdr->dirty_rc = bound; hdr->dirty_rc = bound;
#if IS_SHAREDFB_SCHEMA_PROCS #if IS_SHAREDFB_SCHEMA_PROCS
sem_post(&hdr->sem_lock); //sem_post(&hdr->sem_lock);
#endif #endif
} }
@@ -2880,7 +2903,7 @@ static BOOL DRM_SyncUpdate (_THIS)
((DrmSurfaceBuffer*)this->hidden->shadow_screen->hwdata)->buff; ((DrmSurfaceBuffer*)this->hidden->shadow_screen->hwdata)->buff;
#if IS_SHAREDFB_SCHEMA_PROCS #if IS_SHAREDFB_SCHEMA_PROCS
sem_wait(&hdr->sem_lock); //sem_wait(&hdr->sem_lock);
#endif #endif
if (IsRectEmpty (&hdr->dirty_rc)) if (IsRectEmpty (&hdr->dirty_rc))
@@ -2923,9 +2946,11 @@ static BOOL DRM_SyncUpdate (_THIS)
#endif /* _MGSCHEMA_COMPOSITING */ #endif /* _MGSCHEMA_COMPOSITING */
} }
SetRectEmpty (&hdr->dirty_rc);
ret: ret:
#if IS_SHAREDFB_SCHEMA_PROCS #if IS_SHAREDFB_SCHEMA_PROCS
sem_post(&hdr->sem_lock); //sem_post(&hdr->sem_lock);
#endif #endif
return retval; return retval;
} }