pkgsrc-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: pkg/51687: x11/xf86-video-intel fix build post xserver 1.19



The following reply was made to PR pkg/51687; it has been noted by GNATS.

From: David Shao <davshao%gmail.com@localhost>
To: gnats-bugs%netbsd.org@localhost
Cc: 
Subject: Re: pkg/51687: x11/xf86-video-intel fix build post xserver 1.19
Date: Sat, 3 Dec 2016 15:57:02 -0800

 This might be a clearer display of the relevant patches.
 
 $NetBSD$
 
 --- src/compat-api.h.orig    2014-11-18 21:50:39.000000000 +0000
 +++ src/compat-api.h
 @@ -30,6 +30,7 @@
 
  #include <xorg-server.h>
  #include <xorgVersion.h>
 +#include <xf86Module.h>
 
  #include <picturestr.h>
  #ifndef GLYPH_HAS_GLYPH_PICTURE_ACCESSOR
 @@ -42,6 +43,10 @@
  #define xf86ScrnToScreen(s) screenInfo.screens[(s)->scrnIndex]
  #endif
 
 +#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) >= 22
 +#define HAVE_NOTIFY_FD 1
 +#endif
 +
  #ifndef XF86_SCRN_INTERFACE
 
  #define SCRN_ARG_TYPE int
 @@ -223,4 +228,14 @@ static inline void FreePixmap(PixmapPtr
                dstx, dsty)
  #endif
 
 +#if ABI_VIDEODRV_VERSION >= SET_ABI_VERSION(22, 0)
 +#define OsBlockSIGIO()
 +#define OsReleaseSIGIO()
 +#endif
 +
 +#if !HAVE_NOTIFY_FD
 +#define SetNotifyFd(fd, cb, mode, data) AddGeneralSocket(fd);
 +#define RemoveNotifyFd(fd) RemoveGeneralSocket(fd)
 +#endif
 +
  #endif
 
 $NetBSD$
 
 --- src/legacy/i810/i810_video.c.orig    2014-08-29 09:33:11.000000000 +0000
 +++ src/legacy/i810/i810_video.c
 @@ -77,7 +77,11 @@ static int I810PutImage( ScrnInfoPtr,
  static int I810QueryImageAttributes(ScrnInfoPtr,
      int, unsigned short *, unsigned short *,  int *, int *);
 
 +#if !HAVE_NOTIFY_FD
  static void I810BlockHandler(BLOCKHANDLER_ARGS_DECL);
 +#else
 +static void I810BlockHandler(void *data, void *_timeout);
 +#endif
 
  #define MAKE_ATOM(a) MakeAtom(a, sizeof(a) - 1, TRUE)
 
 @@ -418,8 +422,14 @@ I810SetupImageVideo(ScreenPtr screen)
 
      pI810->adaptor = adapt;
 
 +#if !HAVE_NOTIFY_FD
      pI810->BlockHandler = screen->BlockHandler;
      screen->BlockHandler = I810BlockHandler;
 +#else
 +    RegisterBlockAndWakeupHandlers(I810BlockHandler,
 +                   (ServerWakeupHandlerProcPtr)NoopDDA,
 +                   pScrn);
 +#endif
 
      xvBrightness = MAKE_ATOM("XV_BRIGHTNESS");
      xvContrast   = MAKE_ATOM("XV_CONTRAST");
 @@ -1135,6 +1145,7 @@ I810QueryImageAttributes(
      return size;
  }
 
 +#if !HAVE_NOTIFY_FD
  static void
  I810BlockHandler (BLOCKHANDLER_ARGS_DECL)
  {
 @@ -1172,7 +1183,38 @@ I810BlockHandler (BLOCKHANDLER_ARGS_DECL
          }
      }
  }
 +#else
 +static void
 +I810BlockHandler(void *data, void *_timeout)
 +{
 +    ScrnInfoPtr pScrn = data;
 +    I810Ptr      pI810 = I810PTR(pScrn);
 +    I810PortPrivPtr pPriv = GET_PORT_PRIVATE(pScrn);
 +    I810OverlayRegPtr overlay = (I810OverlayRegPtr) (pI810->FbBase +
 pI810->OverlayStart);
 
 +    if(pPriv->videoStatus & TIMER_MASK) {
 +    UpdateCurrentTime();
 +    if(pPriv->videoStatus & OFF_TIMER) {
 +        if(pPriv->offTime < currentTime.milliseconds) {
 +        /* Turn off the overlay */
 +        overlay->OV0CMD &= 0xFFFFFFFE;
 +        OVERLAY_UPDATE(pI810->OverlayPhysical);
 +
 +        pPriv->videoStatus = FREE_TIMER;
 +        pPriv->freeTime = currentTime.milliseconds + FREE_DELAY;
 +        }
 +    } else {  /* FREE_TIMER */
 +        if(pPriv->freeTime < currentTime.milliseconds) {
 +        if(pPriv->linear) {
 +           xf86FreeOffscreenLinear(pPriv->linear);
 +           pPriv->linear = NULL;
 +        }
 +        pPriv->videoStatus = 0;
 +        }
 +        }
 +    }
 +}
 +#endif
 
  /***************************************************************************
   * Offscreen Images
 @@ -1373,7 +1415,6 @@ I810DisplaySurface(
        UpdateCurrentTime();
        pI810Priv->videoStatus = FREE_TIMER;
        pI810Priv->freeTime = currentTime.milliseconds + FREE_DELAY;
 -      pScrn->pScreen->BlockHandler = I810BlockHandler;
      }
 
      return Success;
 
 $NetBSD$
 
 --- src/sna/sna.h.orig    2014-12-20 13:29:05.000000000 +0000
 +++ src/sna/sna.h
 @@ -364,8 +364,10 @@ struct sna {
      EntityInfoPtr pEnt;
      const struct intel_device_info *info;
 
 +#if !HAVE_NOTIFY_FD
      ScreenBlockHandlerProcPtr BlockHandler;
      ScreenWakeupHandlerProcPtr WakeupHandler;
 +#endif
      CloseScreenProcPtr CloseScreen;
 
      PicturePtr clear;
 
 $NetBSD$
 
 --- src/sna/sna_accel.c.orig    2014-12-20 13:29:27.000000000 +0000
 +++ src/sna/sna_accel.c
 @@ -115,6 +115,11 @@
  #define RECTILINEAR    0x4
  #define OVERWRITES    0x8
 
 +#if XFONT2_CLIENT_FUNCS_VERSION >= 1
 +#define AllocateFontPrivateIndex() xfont2_allocate_font_private_index()
 +#define FontSetPrivate(font, idx, data) xfont2_font_set_private(font,
 idx, data)
 +#endif
 +
  #if 0
  static void __sna_fallback_flush(DrawablePtr d)
  {
 @@ -17811,6 +17816,13 @@ static bool sna_option_accel_blt(struct
      return strcasecmp(s, "blt") == 0;
  }
 
 +#if HAVE_NOTIFY_FD
 +static void sna_accel_notify(int fd, int ready, void *data)
 +{
 +    sna_mode_wakeup(data);
 +}
 +#endif
 +
  bool sna_accel_init(ScreenPtr screen, struct sna *sna)
  {
      const char *backend;
 @@ -17822,7 +17834,7 @@ bool sna_accel_init(ScreenPtr screen, st
      list_init(&sna->flush_pixmaps);
      list_init(&sna->active_pixmaps);
 
 -    AddGeneralSocket(sna->kgem.fd);
 +    SetNotifyFd(sna->kgem.fd, sna_accel_notify, X_NOTIFY_READ, sna);
 
  #ifdef DEBUG_MEMORY
      sna->timer_expire[DEBUG_MEMORY_TIMER] = GetTimeInMillis()+ 10 * 1000;
 @@ -17998,7 +18010,7 @@ void sna_accel_close(struct sna *sna)
      sna_pixmap_expire(sna);
 
      DeleteCallback(&FlushCallback, sna_accel_flush_callback, sna);
 -    RemoveGeneralSocket(sna->kgem.fd);
 +    RemoveNotifyFd(sna->kgem.fd);
 
      kgem_cleanup_cache(&sna->kgem);
  }
 
 $NetBSD$
 
 --- src/sna/sna_acpi.c.orig    2014-08-29 09:33:11.000000000 +0000
 +++ src/sna/sna_acpi.c
 @@ -92,7 +92,7 @@ void _sna_acpi_wakeup(struct sna *sna)
          DBG(("%s: error [%d], detaching from acpid\n", __FUNCTION__, n));
 
          /* XXX reattach later? */
 -        RemoveGeneralSocket(sna->acpi.fd);
 +        RemoveNotifyFd(sna->acpi.fd);
          sna_acpi_fini(sna);
          return;
      }
 @@ -136,6 +136,13 @@ void _sna_acpi_wakeup(struct sna *sna)
      } while (n);
  }
 
 +#if HAVE_NOTIFY_FD
 +static void sna_acpi_notify(int fd, int read, void *data)
 +{
 +    _sna_acpi_wakeup(data);
 +}
 +#endif
 +
  static int read_power_state(const char *path)
  {
      DIR *dir;
 @@ -200,7 +207,7 @@ void sna_acpi_init(struct sna *sna)
 
      DBG(("%s: attaching to acpid\n", __FUNCTION__));
 
 -    AddGeneralSocket(sna->acpi.fd);
 +    SetNotifyFd(sna->acpi.fd, sna_acpi_notify, X_NOTIFY_READ, sna);
      sna->acpi.remain = sizeof(sna->acpi.event) - 1;
      sna->acpi.offset = 0;
 
 $NetBSD$
 
 --- src/sna/sna_driver.c.orig    2014-12-11 13:52:11.000000000 +0000
 +++ src/sna/sna_driver.c
 @@ -732,6 +732,7 @@ static bool has_shadow(struct sna *sna)
      return sna->mode.flip_active == 0;
  }
 
 +#if !HAVE_NOTIFY_FD
  static void
  sna_block_handler(BLOCKHANDLER_ARGS_DECL)
  {
 @@ -778,6 +779,31 @@ sna_wakeup_handler(WAKEUPHANDLER_ARGS_DE
          FD_CLR(sna->kgem.fd, (fd_set*)read_mask);
      }
  }
 +#else
 +static void
 +sna_block_handler(void *data, void *_timeout)
 +{
 +    struct sna *sna = data;
 +    int *timeout = _timeout;
 +    struct timeval tv, *tvp;
 +
 +    DBG(("%s (timeout=%d)\n", __FUNCTION__, *timeout));
 +    if (*timeout == 0)
 +        return;
 +
 +    if (*timeout < 0) {
 +        tvp = NULL;
 +    } else {
 +        tv.tv_sec = *timeout / 1000;
 +        tv.tv_usec = (*timeout % 1000) * 1000;
 +        tvp = &tv;
 +    }
 +
 +    sna_accel_block_handler(sna, &tvp);
 +    if (tvp)
 +        *timeout = tvp->tv_sec * 1000 + tvp->tv_usec / 1000;
 +}
 +#endif
 
  #if HAVE_UDEV
  static void
 @@ -948,6 +974,12 @@ static Bool sna_early_close_screen(CLOSE
 
      /* XXX Note that we will leak kernel resources if !vtSema */
 
 +#if HAVE_NOTIFY_FD
 +    RemoveBlockAndWakeupHandlers(sna_block_handler,
 +                     (ServerWakeupHandlerProcPtr)NoopDDA,
 +                     sna);
 +#endif
 +
      sna_uevent_fini(sna);
      sna_mode_close(sna);
 
 @@ -1166,11 +1198,17 @@ sna_screen_init(SCREEN_INIT_ARGS_DECL)
       * later memory should be bound when allocating, e.g rotate_mem */
      scrn->vtSema = TRUE;
 
 +#if !HAVE_NOTIFY_FD
      sna->BlockHandler = screen->BlockHandler;
      screen->BlockHandler = sna_block_handler;
 
      sna->WakeupHandler = screen->WakeupHandler;
      screen->WakeupHandler = sna_wakeup_handler;
 +#else
 +    RegisterBlockAndWakeupHandlers(sna_block_handler,
 +                       (ServerWakeupHandlerProcPtr)NoopDDA,
 +                       sna);
 +#endif
 
      screen->SaveScreen = sna_save_screen;
      screen->CreateScreenResources = sna_create_screen_resources;
 
 $NetBSD$
 
 --- src/uxa/intel.h.orig    2014-12-09 20:41:25.000000000 +0000
 +++ src/uxa/intel.h
 @@ -196,7 +196,10 @@ typedef struct intel_screen_private {
 
      int colorKey;
      XF86VideoAdaptorPtr adaptor;
 +
 +#if !HAVE_NOTIFY_FD
      ScreenBlockHandlerProcPtr BlockHandler;
 +#endif
      Bool overlayOn;
 
      struct {
 
 $NetBSD$
 
 --- src/uxa/intel_display.c.orig    2014-12-09 20:43:16.000000000 +0000
 +++ src/uxa/intel_display.c
 @@ -2072,6 +2072,7 @@ intel_pageflip_abort(ScrnInfoPtr scrn, x
  /*
   * Check for pending DRM events and process them.
   */
 +#if !HAVE_NOTIFY_FD
  static void
  drm_wakeup_handler(pointer data, int err, pointer p)
  {
 @@ -2086,6 +2087,14 @@ drm_wakeup_handler(pointer data, int err
      if (FD_ISSET(mode->fd, read_mask))
          drmHandleEvent(mode->fd, &mode->event_context);
  }
 +#else
 +static void
 +drm_notify_fd(int fd, int ready, void *data)
 +{
 +    struct intel_mode *mode = data;
 +    drmHandleEvent(mode->fd, &mode->event_context);
 +}
 +#endif
 
  /*
   * If there are any available, read drm_events
 @@ -2250,9 +2259,11 @@ intel_mode_init(struct intel_screen_priv
       * registration within ScreenInit and not PreInit.
       */
      mode->flip_count = 0;
 -    AddGeneralSocket(mode->fd);
 +    SetNotifyFd(mode->fd, drm_notify_fd, X_NOTIFY_READ, mode);
 +#if !HAVE_NOTIFY_FD
      RegisterBlockAndWakeupHandlers((BlockHandlerProcPtr)NoopDDA,
                         drm_wakeup_handler, mode);
 +#endif
  }
 
  void
 @@ -2276,9 +2287,11 @@ intel_mode_close(intel_screen_private *i
 
          intel_drm_abort_scrn(intel->scrn);
 
 +#if !HAVE_NOTIFY_FD
      RemoveBlockAndWakeupHandlers((BlockHandlerProcPtr)NoopDDA,
                       drm_wakeup_handler, mode);
 -    RemoveGeneralSocket(mode->fd);
 +#endif
 +    RemoveNotifyFd(mode->fd);
  }
 
  void
 
 $NetBSD$
 
 --- src/uxa/intel_driver.c.orig    2014-12-09 20:43:22.000000000 +0000
 +++ src/uxa/intel_driver.c
 @@ -642,7 +642,11 @@ redisplay_dirty(ScreenPtr screen, Pixmap
          return;
 
      PixmapRegionInit(&pixregion, dirty->slave_dst->master_pixmap);
 +#ifdef HAS_DIRTYTRACKING_ROTATION
 +    PixmapSyncDirtyHelper(dirty);
 +#else
      PixmapSyncDirtyHelper(dirty, &pixregion);
 +#endif
      RegionUninit(&pixregion);
 
          intel_flush(intel);
 @@ -659,8 +663,9 @@ redisplay_dirty(ScreenPtr screen, Pixmap
  }
 
  static void
 -intel_dirty_update(ScreenPtr screen)
 +intel_dirty_update(intel_screen_private *intel)
  {
 +    ScreenPtr screen = xf86ScrnToScreen(intel->scrn);
      RegionPtr region;
      PixmapDirtyUpdatePtr ent;
 
 @@ -677,6 +682,7 @@ intel_dirty_update(ScreenPtr screen)
  }
  #endif
 
 +#if !HAVE_NOTIFY_FD
  static void
  I830BlockHandler(BLOCKHANDLER_ARGS_DECL)
  {
 @@ -694,9 +700,22 @@ I830BlockHandler(BLOCKHANDLER_ARGS_DECL)
      intel_uxa_block_handler(intel);
      intel_video_block_handler(intel);
  #ifdef INTEL_PIXMAP_SHARING
 -    intel_dirty_update(screen);
 +    intel_dirty_update(intel);
  #endif
  }
 +#else
 +static void
 +I830BlockHandler(void *data, void *timeout)
 +{
 +    intel_screen_private *intel = data;
 +
 +    intel_uxa_block_handler(intel);
 +    intel_video_block_handler(intel);
 +#ifdef INTEL_PIXMAP_SHARING
 +    intel_dirty_update(intel);
 +#endif
 +}
 +#endif
 
  static Bool
  intel_init_initial_framebuffer(ScrnInfoPtr scrn)
 @@ -939,8 +958,14 @@ I830ScreenInit(SCREEN_INIT_ARGS_DECL)
                 "Hardware cursor initialization failed\n");
      }
 
 +#if !HAVE_NOTIFY_FD
      intel->BlockHandler = screen->BlockHandler;
      screen->BlockHandler = I830BlockHandler;
 +#else
 +    RegisterBlockAndWakeupHandlers(I830BlockHandler,
 +                       (ServerWakeupHandlerProcPtr)NoopDDA,
 +                       intel);
 +#endif
 
  #ifdef INTEL_PIXMAP_SHARING
      screen->StartPixmapTracking = PixmapStartDirtyTracking;
 


Home | Main Index | Thread Index | Old Index