if the driver doesn't provide an AuthMagic function or the info struct version
is too low it relies on the old method, using libdrm. You might want to
implement AuthMagic on driver side instead.

Attention: ABI break.

Signed-off-by: Tiago Vignatti <[email protected]>
---
changes from v1:
- didn't bump DRI2INFOREC_VERSION, given there was no release since version 4 
  of it (pointed by Aaron)
- used a simplified scheme to decides for AuthMagic function (pointed by
  Kristian).

 hw/xfree86/dri2/dri2.c |    7 ++++++-
 hw/xfree86/dri2/dri2.h |    3 +++
 2 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c
index cd69ca0..cc09789 100644
--- a/hw/xfree86/dri2/dri2.c
+++ b/hw/xfree86/dri2/dri2.c
@@ -82,6 +82,7 @@ typedef struct _DRI2Screen {
     DRI2ScheduleSwapProcPtr     ScheduleSwap;
     DRI2GetMSCProcPtr           GetMSC;
     DRI2ScheduleWaitMSCProcPtr  ScheduleWaitMSC;
+    DRI2AuthMagicProcPtr        AuthMagic;
 
     HandleExposuresProcPtr       HandleExposures;
 } DRI2ScreenRec;
@@ -801,7 +802,7 @@ DRI2Authenticate(ScreenPtr pScreen, drm_magic_t magic)
 {
     DRI2ScreenPtr ds = DRI2GetScreen(pScreen);
 
-    if (ds == NULL || drmAuthMagic(ds->fd, magic))
+    if (ds == NULL || (*ds->AuthMagic)(ds->fd, magic))
        return FALSE;
 
     return TRUE;
@@ -841,8 +842,12 @@ DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info)
        ds->ScheduleSwap = info->ScheduleSwap;
        ds->ScheduleWaitMSC = info->ScheduleWaitMSC;
        ds->GetMSC = info->GetMSC;
+       ds->AuthMagic = info->AuthMagic;
     }
 
+    if (!ds->AuthMagic)
+       ds->AuthMagic = drmAuthMagic;
+
     if (info->version == 3 || info->numDrivers == 0) {
        /* Driver too old: use the old-style driverName field */
        ds->numDrivers = 1;
diff --git a/hw/xfree86/dri2/dri2.h b/hw/xfree86/dri2/dri2.h
index 1c8626b..f770760 100644
--- a/hw/xfree86/dri2/dri2.h
+++ b/hw/xfree86/dri2/dri2.h
@@ -63,6 +63,8 @@ typedef void          (*DRI2CopyRegionProcPtr)(DrawablePtr 
pDraw,
                                                 DRI2BufferPtr pSrcBuffer);
 typedef void           (*DRI2WaitProcPtr)(WindowPtr pWin,
                                           unsigned int sequence);
+typedef int            (*DRI2AuthMagicProcPtr)(int fd, uint32_t magic);
+
 /**
  * Schedule a buffer swap
  *
@@ -170,6 +172,7 @@ typedef struct {
     DRI2ScheduleSwapProcPtr    ScheduleSwap;
     DRI2GetMSCProcPtr          GetMSC;
     DRI2ScheduleWaitMSCProcPtr ScheduleWaitMSC;
+    DRI2AuthMagicProcPtr       AuthMagic;
 
     /* number of drivers in the driverNames array */
     unsigned int numDrivers;
-- 
1.6.0.4

_______________________________________________
xorg-devel mailing list
[email protected]
http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to