pkgsrc-Changes-HG archive

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

[pkgsrc/trunk]: pkgsrc/x11/mlterm Various fixes for wscons framebuffer:



details:   https://anonhg.NetBSD.org/pkgsrc/rev/cc188f25f10c
branches:  trunk
changeset: 398600:cc188f25f10c
user:      rin <rin%pkgsrc.org@localhost>
date:      Wed Jul 24 02:39:57 2019 +0000

description:
Various fixes for wscons framebuffer:

- Fix support for fbi_fboffset != 0
- Fix SEGV when using 8-bpp display on LP64 machine
- Add better handling for 24-bpp display

The problems have already been reported upstream:

https://bitbucket.org/arakiken/mlterm/pull-requests/5/fix-for-wscons-framebuffer/diff

Bump PKGREVISION.

diffstat:

 x11/mlterm/Makefile                                          |   4 +-
 x11/mlterm/distinfo                                          |   8 +-
 x11/mlterm/patches/patch-uitoolkit_fb_ui.h                   |  17 ++
 x11/mlterm/patches/patch-uitoolkit_fb_ui__display.c          |  33 ++++
 x11/mlterm/patches/patch-uitoolkit_fb_ui__display__freebsd.c |  27 +++
 x11/mlterm/patches/patch-uitoolkit_fb_ui__display__linux.c   |  27 +++
 x11/mlterm/patches/patch-uitoolkit_fb_ui__display__wscons.c  |  99 ++++++++++++
 x11/mlterm/patches/patch-uitoolkit_fb_ui__display__x68kgrf.c |  27 +++
 8 files changed, 239 insertions(+), 3 deletions(-)

diffs (287 lines):

diff -r 24f222b1c064 -r cc188f25f10c x11/mlterm/Makefile
--- a/x11/mlterm/Makefile       Tue Jul 23 22:58:46 2019 +0000
+++ b/x11/mlterm/Makefile       Wed Jul 24 02:39:57 2019 +0000
@@ -1,7 +1,7 @@
-# $NetBSD: Makefile,v 1.149 2019/07/21 22:26:02 wiz Exp $
+# $NetBSD: Makefile,v 1.150 2019/07/24 02:39:57 rin Exp $
 
 DISTNAME=      mlterm-3.8.8
-PKGREVISION=   2
+PKGREVISION=   3
 CATEGORIES=    x11
 MASTER_SITES=  ${MASTER_SITE_SOURCEFORGE:=mlterm/}
 
diff -r 24f222b1c064 -r cc188f25f10c x11/mlterm/distinfo
--- a/x11/mlterm/distinfo       Tue Jul 23 22:58:46 2019 +0000
+++ b/x11/mlterm/distinfo       Wed Jul 24 02:39:57 2019 +0000
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.77 2019/06/22 04:27:54 tsutsui Exp $
+$NetBSD: distinfo,v 1.78 2019/07/24 02:39:57 rin Exp $
 
 SHA1 (mlterm-3.8.8.tar.gz) = 54f40fa50214656ab70f592d5d58805b1dfdc1c6
 RMD160 (mlterm-3.8.8.tar.gz) = 9a7675a86999541b57742099a5e9eac8a539b580
@@ -6,4 +6,10 @@
 Size (mlterm-3.8.8.tar.gz) = 4035215 bytes
 SHA1 (patch-configure) = e95b426f028c9bcb9895e69bb85ce8450f78a8c8
 SHA1 (patch-etc_font-fb) = 03f0b2ecee20ef3201c8e4ce17f03ac90f657b00
+SHA1 (patch-uitoolkit_fb_ui.h) = 1178048c2c2354546c470b8c2199973507048447
+SHA1 (patch-uitoolkit_fb_ui__display.c) = 673a6621c3fe159b9beb4aa62286db02446415a9
+SHA1 (patch-uitoolkit_fb_ui__display__freebsd.c) = ea2a4bfb869c2eec510235a6f09d6356dff4c6d8
+SHA1 (patch-uitoolkit_fb_ui__display__linux.c) = 379572a5e66ffffb295ba34b00dfbb4dd237c818
+SHA1 (patch-uitoolkit_fb_ui__display__wscons.c) = 703958ee742834beddbb55927f2222d8eb01ed2e
+SHA1 (patch-uitoolkit_fb_ui__display__x68kgrf.c) = 3fadc190ecf3defc2527b77fa0b668cfb4cf2ab4
 SHA1 (patch-uitoolkit_ui__event__source.c) = 4cf872768491bc8da5fc080cfd3a50969324a162
diff -r 24f222b1c064 -r cc188f25f10c x11/mlterm/patches/patch-uitoolkit_fb_ui.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/x11/mlterm/patches/patch-uitoolkit_fb_ui.h        Wed Jul 24 02:39:57 2019 +0000
@@ -0,0 +1,17 @@
+$ NetBSD $
+
+- Fix support for fbi_fboffset != 0
+
+Reported upstream:
+https://bitbucket.org/arakiken/mlterm/pull-requests/5/fix-for-wscons-framebuffer/diff
+
+--- uitoolkit/fb/ui.h  2019-07-24 10:51:04.187713603 +0900
++++ ../mlterm.patched/uitoolkit/fb/ui.h        2019-07-24 09:59:19.091595937 +0900
+@@ -44,6 +44,7 @@ typedef struct {
+ 
+   int fb_fd;
+   unsigned char *fb;
++  unsigned char *fb_base;
+   size_t smem_len;
+   unsigned int line_length;
+   unsigned int xoffset;
diff -r 24f222b1c064 -r cc188f25f10c x11/mlterm/patches/patch-uitoolkit_fb_ui__display.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/x11/mlterm/patches/patch-uitoolkit_fb_ui__display.c       Wed Jul 24 02:39:57 2019 +0000
@@ -0,0 +1,33 @@
+$ NetBSD $
+
+- Fix support for fbi_fboffset != 0
+- Fix SEGV when using 8-bpp display on LP64 machine
+
+Reported upstream:
+https://bitbucket.org/arakiken/mlterm/pull-requests/5/fix-for-wscons-framebuffer/diff
+
+--- uitoolkit/fb/ui_display.c  2019-07-24 10:51:04.212256656 +0900
++++ ../mlterm.patched/uitoolkit/fb/ui_display.c        2019-07-24 10:27:19.883218709 +0900
+@@ -214,7 +214,7 @@ static inline ui_window_t *get_window(in
+ }
+ 
+ static inline u_char *get_fb(int x, int y) {
+-  return _display.fb + (_display.yoffset + y) * _display.line_length +
++  return _display.fb_base + (_display.yoffset + y) * _display.line_length +
+          (_display.xoffset + x) * _display.bytes_per_pixel / _display.pixels_per_byte;
+ }
+ 
+@@ -2170,8 +2170,11 @@ int ui_cmap_get_closest_color(u_long *cl
+   }
+ 
+   if ((linear_search_max = CMAP_SIZE(_display.cmap)) == 256) {
+-    if ((linear_search_max = vt_get_closest_256_color(closest, &min, red, green, blue,
+-                                                      COLOR_DISTANCE_THRESHOLD)) == 0) {
++    vt_color_t tmp;
++    linear_search_max = vt_get_closest_256_color(&tmp, &min, red, green, blue,
++                                                 COLOR_DISTANCE_THRESHOLD);
++    *closest = tmp; /* XXX needs for LP64 */
++    if (linear_search_max == 0) {
+       goto end;
+     }
+   }
diff -r 24f222b1c064 -r cc188f25f10c x11/mlterm/patches/patch-uitoolkit_fb_ui__display__freebsd.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/x11/mlterm/patches/patch-uitoolkit_fb_ui__display__freebsd.c      Wed Jul 24 02:39:57 2019 +0000
@@ -0,0 +1,27 @@
+$ NetBSD $
+
+- Fix support for fbi_fboffset != 0
+
+Reported upstream:
+https://bitbucket.org/arakiken/mlterm/pull-requests/5/fix-for-wscons-framebuffer/diff
+
+--- uitoolkit/fb/ui_display_freebsd.c  2019-07-24 10:51:04.208029557 +0900
++++ ../mlterm.patched/uitoolkit/fb/ui_display_freebsd.c        2019-07-24 10:37:10.728676339 +0900
+@@ -64,7 +64,7 @@ static int open_display(u_int depth) {
+   ioctl(_display.fb_fd, FBIO_ADPINFO, &vainfo);
+   ioctl(_display.fb_fd, FBIO_GETDISPSTART, &vstart);
+ 
+-  if ((_display.fb = mmap(NULL, (_display.smem_len = vainfo.va_window_size), PROT_WRITE | PROT_READ,
++  if ((_display.fb = _display.fb_base = mmap(NULL, (_display.smem_len = vainfo.va_window_size), PROT_WRITE | PROT_READ,
+                           MAP_SHARED, _display.fb_fd, (off_t)0)) == MAP_FAILED) {
+     bl_error_printf("Retry another mode of resolution and depth.\n");
+ 
+@@ -209,7 +209,7 @@ static int open_display(u_int depth) {
+ error:
+   if (_display.fb) {
+     munmap(_display.fb, _display.smem_len);
+-    _display.fb = NULL;
++    _display.fb = _display.fb_base = NULL;
+   }
+ 
+   close(_display.fb_fd);
diff -r 24f222b1c064 -r cc188f25f10c x11/mlterm/patches/patch-uitoolkit_fb_ui__display__linux.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/x11/mlterm/patches/patch-uitoolkit_fb_ui__display__linux.c        Wed Jul 24 02:39:57 2019 +0000
@@ -0,0 +1,27 @@
+$ NetBSD $
+
+- Fix support for fbi_fboffset != 0
+
+Reported upstream:
+https://bitbucket.org/arakiken/mlterm/pull-requests/5/fix-for-wscons-framebuffer/diff
+
+--- uitoolkit/fb/ui_display_linux.c    2019-07-24 10:51:04.215385175 +0900
++++ ../mlterm.patched/uitoolkit/fb/ui_display_linux.c  2019-07-24 09:59:19.092709670 +0900
+@@ -265,7 +265,7 @@ static int open_display(u_int depth) {
+     _display.pixels_per_byte = 1;
+   }
+ 
+-  if ((_display.fb = mmap(NULL, (_display.smem_len = finfo.smem_len), PROT_WRITE | PROT_READ,
++  if ((_display.fb = _display.fb_base = mmap(NULL, (_display.smem_len = finfo.smem_len), PROT_WRITE | PROT_READ,
+                           MAP_SHARED, _display.fb_fd, (off_t)0)) == MAP_FAILED) {
+     goto error;
+   }
+@@ -349,7 +349,7 @@ static int open_display(u_int depth) {
+ error:
+   if (_display.fb) {
+     munmap(_display.fb, _display.smem_len);
+-    _display.fb = NULL;
++    _display.fb = _display.fb_base = NULL;
+   }
+ 
+   close(_display.fb_fd);
diff -r 24f222b1c064 -r cc188f25f10c x11/mlterm/patches/patch-uitoolkit_fb_ui__display__wscons.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/x11/mlterm/patches/patch-uitoolkit_fb_ui__display__wscons.c       Wed Jul 24 02:39:57 2019 +0000
@@ -0,0 +1,99 @@
+$ NetBSD $
+
+- Fix support for fbi_fboffset != 0
+- Fix SEGV when using 8-bpp display on LP64 machine
+- Add better handling for 24-bpp display
+
+Reported upstream:
+https://bitbucket.org/arakiken/mlterm/pull-requests/5/fix-for-wscons-framebuffer/diff
+
+--- uitoolkit/fb/ui_display_wscons.c   2019-07-24 10:51:04.210666890 +0900
++++ ../mlterm.patched/uitoolkit/fb/ui_display_wscons.c 2019-07-24 10:31:06.733563761 +0900
+@@ -260,6 +260,7 @@ static int open_display(u_int depth /* u
+ #ifdef WSDISPLAYIO_GET_FBINFO
+   struct wsdisplayio_fbinfo vinfo2;
+ #endif
++  int fboffset;
+   int mode;
+   int wstype;
+   struct rgb_info rgbinfos[] = {
+@@ -323,15 +324,26 @@ static int open_display(u_int depth /* u
+   if (ioctl(_display.fb_fd, WSDISPLAYIO_GET_FBINFO, &vinfo2) == 0) {
+     vinfo.width = vinfo2.fbi_width;
+     vinfo.height = vinfo2.fbi_height;
+-    vinfo.depth = vinfo2.fbi_bitsperpixel;
++    if (vinfo2.fbi_bitsperpixel == 32 &&
++        vinfo2.fbi_subtype.fbi_rgbmasks.alpha_size == 0) {
++      vinfo.depth = 24;
++    } else {
++      vinfo.depth = vinfo2.fbi_bitsperpixel;
++    }
+     vinfo.cmsize = vinfo2.fbi_subtype.fbi_cmapinfo.cmap_entries;
+ 
+-    /* XXX fbi_fboffset is regarded as multiple of fbi_stride */
+-    _display.yoffset = vinfo2.fbi_fboffset / vinfo2.fbi_stride;
++    fboffset = vinfo2.fbi_fboffset;
+   } else
+ #endif
+-      if (ioctl(_display.fb_fd, WSDISPLAYIO_GINFO, &vinfo) == 0) {
+-    _display.yoffset = 0;
++  if (ioctl(_display.fb_fd, WSDISPLAYIO_GINFO, &vinfo) == 0) {
++#ifdef WSDISPLAY_TYPE_LUNA
++    if (wstype == WSDISPLAY_TYPE_LUNA) {
++      fboffset = 8;
++    } else
++#endif
++    {
++      fboffset = 0;
++    }
+   } else {
+ #ifdef DEBUG
+     bl_debug_printf(BL_DEBUG_TAG " WSDISPLAYIO_GTYPE and WSDISPLAYIO_GET_FBINFO failed.\n");
+@@ -341,6 +353,7 @@ static int open_display(u_int depth /* u
+   }
+ 
+   _display.xoffset = 0;
++  _display.yoffset = 0;
+ 
+   _display.width = _disp.width = vinfo.width;
+   _display.height = _disp.height = vinfo.height;
+@@ -403,7 +416,7 @@ static int open_display(u_int depth /* u
+   if (wstype == WSDISPLAY_TYPE_LUNA && (_disp.depth == 4 || _disp.depth == 8)) {
+     u_int plane;
+ 
+-    _display.smem_len = 0x40000 * _disp.depth;
++    _display.smem_len = (fboffset + 0x40000) * _disp.depth;
+ 
+     for (plane = 0; plane < _disp.depth; plane++) {
+       _display.plane_offset[plane] = 0x40000 * plane;
+@@ -411,7 +424,7 @@ static int open_display(u_int depth /* u
+   } else
+ #endif
+   {
+-    _display.smem_len = _display.line_length * _display.height;
++    _display.smem_len = fboffset + _display.line_length * _display.height;
+   }
+ 
+   if ((_display.fb = mmap(NULL, _display.smem_len, PROT_WRITE | PROT_READ, MAP_SHARED,
+@@ -421,11 +434,7 @@ static int open_display(u_int depth /* u
+     goto error;
+   }
+ 
+-#ifdef WSDISPLAY_TYPE_LUNA
+-  if (wstype == WSDISPLAY_TYPE_LUNA) {
+-    _display.fb += 8;
+-  }
+-#endif
++  _display.fb_base = _display.fb + fboffset;
+ 
+   if (_disp.depth < 15) {
+     if (vinfo.depth >= 2 && _disp.depth == 1) {
+@@ -630,7 +639,7 @@ static int open_display(u_int depth /* u
+ error:
+   if (_display.fb) {
+     munmap(_display.fb, _display.smem_len);
+-    _display.fb = NULL;
++    _display.fb = _display.fb_base = NULL;
+   }
+ 
+   close(_display.fb_fd);
diff -r 24f222b1c064 -r cc188f25f10c x11/mlterm/patches/patch-uitoolkit_fb_ui__display__x68kgrf.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/x11/mlterm/patches/patch-uitoolkit_fb_ui__display__x68kgrf.c      Wed Jul 24 02:39:57 2019 +0000
@@ -0,0 +1,27 @@
+$ NetBSD $
+
+- Fix support for fbi_fboffset != 0
+
+Reported upstream:
+https://bitbucket.org/arakiken/mlterm/pull-requests/5/fix-for-wscons-framebuffer/diff
+
+--- uitoolkit/fb/ui_display_x68kgrf.c  2019-07-24 10:51:04.212502056 +0900
++++ ../mlterm.patched/uitoolkit/fb/ui_display_x68kgrf.c        2019-07-24 10:01:35.627124287 +0900
+@@ -173,7 +173,7 @@ static int open_display(u_int depth) {
+ 
+   _display.smem_len = vinfo.gd_fbsize + vinfo.gd_regsize;
+ 
+-  if ((_display.fb = mmap(NULL, _display.smem_len, PROT_WRITE | PROT_READ, MAP_FILE | MAP_SHARED,
++  if ((_display.fb = _display.fb_base = mmap(NULL, _display.smem_len, PROT_WRITE | PROT_READ, MAP_FILE | MAP_SHARED,
+                           _display.fb_fd, (off_t)0)) == MAP_FAILED) {
+     bl_error_printf("Retry another mode of resolution and depth.\n");
+ 
+@@ -339,7 +339,7 @@ error:
+   if (_display.fb) {
+     setup_reg(reg, &orig_reg);
+     munmap(_display.fb, _display.smem_len);
+-    _display.fb = NULL;
++    _display.fb = _display.fb_base = NULL;
+   }
+ 
+   close(_display.fb_fd);



Home | Main Index | Thread Index | Old Index