From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1Y62nS-0004PM-E0 for mharc-grub-devel@gnu.org; Tue, 30 Dec 2014 14:49:38 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36520) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Y62nO-0004Oy-8x for grub-devel@gnu.org; Tue, 30 Dec 2014 14:49:36 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Y62nH-0001Hz-EB for grub-devel@gnu.org; Tue, 30 Dec 2014 14:49:34 -0500 Received: from mail.ixsystems.com ([69.198.165.135]:65113 helo=barracuda.ixsystems.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Y62nH-0001HZ-1H for grub-devel@gnu.org; Tue, 30 Dec 2014 14:49:27 -0500 X-ASG-Debug-ID: 1419968962-08ca04359d00dd0002-Td4drV Received: from [192.168.0.51] (75-130-56-30.static.kgpt.tn.charter.com [75.130.56.30]) by barracuda.ixsystems.com with ESMTP id szLPOdb8pwL6RWg8 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NO) for ; Tue, 30 Dec 2014 11:49:24 -0800 (PST) X-Barracuda-Envelope-From: kris@pcbsd.org X-Barracuda-AUTH-User: kris@pcbsd.org X-Barracuda-Apparent-Source-IP: 75.130.56.30 Message-ID: <54A301C2.50403@pcbsd.org> Date: Tue, 30 Dec 2014 14:49:22 -0500 From: Kris Moore User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:31.0) Gecko/20100101 Thunderbird/31.3.0 MIME-Version: 1.0 To: grub-devel@gnu.org Subject: Re: [PATCH] Add support for passing EFI framebuffer into FreeBSD 10.1 and later References: <544FFD67.9000102@pcbsd.org> <5484CA89.30903@gmail.com> X-ASG-Orig-Subj: Re: [PATCH] Add support for passing EFI framebuffer into FreeBSD 10.1 and later In-Reply-To: <5484CA89.30903@gmail.com> Content-Type: multipart/mixed; boundary="------------050905020805000703020006" X-Barracuda-Connect: 75-130-56-30.static.kgpt.tn.charter.com[75.130.56.30] X-Barracuda-Start-Time: 1419968963 X-Barracuda-Encrypted: ECDHE-RSA-AES128-GCM-SHA256 X-Barracuda-URL: https://10.2.0.41:443/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at ixsystems.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 0.00 X-Barracuda-Spam-Status: No, SCORE=0.00 using global scores of TAG_LEVEL=1000.0 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=8.0 tests=HTML_MESSAGE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.13677 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 HTML_MESSAGE BODY: HTML included in message X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 69.198.165.135 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: The development of GNU GRUB List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 30 Dec 2014 19:49:37 -0000 This is a multi-part message in MIME format. --------------050905020805000703020006 Content-Type: multipart/alternative; boundary="------------050005070804090205080709" --------------050005070804090205080709 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On 12/07/2014 16:45, Vladimir '=CF=86-coder/phcoder' Serbinenko wrote: > On 28.10.2014 21:32, Kris Moore wrote: >> Got another patch for review today. >> >> This patch adds support for FreeBSD's new VT console driver when booti= ng >> in EFI mode on FreeBSD 10.1 and later. >> >> Please let me know any comments, or things that need addressed to get >> this merged in. >> >> Thanks! >> >> -- Kris Moore PC-BSD Software iXsystems >> >> >> patch-grub-fb >> >> >> From a9c20c1640cdea0ba902095cb18760f5ebe98875 Mon Sep 17 00:00:00 2001= >> From: Kris Moore >> Date: Tue, 28 Oct 2014 15:59:59 -0400 >> Subject: [PATCH 1/2] Add support for passing EFI framebuffer informati= on to >> FreeBSD kernel on FreeBSD 10.1 and later. >> >> --- >> grub-core/loader/i386/bsd.c | 75 +++++++++++++++++++++++++++= +++++++++ >> grub-core/video/efi_gop.c | 14 +++++++ >> include/grub/i386/bsd.h | 1 + >> include/grub/i386/freebsd_bootinfo.h | 33 ++++++++++++++++ >> include/grub/video.h | 18 +++++++++ >> 5 files changed, 141 insertions(+) >> create mode 100644 include/grub/i386/freebsd_bootinfo.h >> >> diff --git grub-core/loader/i386/bsd.c grub-core/loader/i386/bsd.c >> index 8f691e0..c685552 100644 >> --- grub-core/loader/i386/bsd.c >> +++ grub-core/loader/i386/bsd.c >> @@ -48,6 +48,7 @@ GRUB_MOD_LICENSE ("GPLv3+"); >> #ifdef GRUB_MACHINE_EFI >> #include >> #define NETBSD_DEFAULT_VIDEO_MODE "800x600" >> +#define FREEBSD_DEFAULT_VIDEO_MODE "800x600" >> #else >> #define NETBSD_DEFAULT_VIDEO_MODE "text" >> #include >> @@ -584,6 +585,63 @@ freebsd_get_zfs (void) >> grub_free (uuid); >> } >> =20 >> +#ifdef GRUB_MACHINE_EFI >> + >> +static grub_err_t >> +grub_freebsd_setup_video (void) >> +{ >> + struct grub_video_mode_info mode_info; >> + void *framebuffer; >> + const char *modevar; >> + struct grub_freebsd_btinfo_framebuf efifb; >> + grub_err_t err; >> + grub_video_driver_id_t driv_id; >> + >> + modevar =3D grub_env_get ("gfxpayload"); >> + >> + /* Now all graphical modes are acceptable. >> + May change in future if we have modes without framebuffer. */ >> + if (modevar && *modevar !=3D 0) >> + { >> + char *tmp; >> + tmp =3D grub_xasprintf ("%s;" FREEBSD_DEFAULT_VIDEO_MODE, modev= ar); >> + if (! tmp) >> + return grub_errno; >> + err =3D grub_video_set_mode (tmp, 0, 0); >> + grub_free (tmp); >> + } >> + else >> + err =3D grub_video_set_mode (FREEBSD_DEFAULT_VIDEO_MODE, 0, 0); >> + >> + if (err) >> + return err; >> + >> + driv_id =3D grub_video_get_driver_id (); >> + if (driv_id =3D=3D GRUB_VIDEO_DRIVER_NONE) >> + return GRUB_ERR_NONE; >> + >> + err =3D grub_video_get_info_and_fini (&mode_info, &framebuffer); >> + >> + if (err) >> + return err; >> + >> + efifb.fb_width =3D mode_info.width; >> + efifb.fb_height =3D mode_info.height; >> + efifb.fb_stride =3D mode_info.stride; >> + >> + efifb.fb_addr =3D (grub_addr_t) framebuffer; >> + efifb.fb_size =3D ALIGN_UP (mode_info.pitch * efifb.fb_height, 6553= 6); >> + >> + efifb.fb_mask_red =3D mode_info.red_mask; >> + efifb.fb_mask_green =3D mode_info.green_mask; >> + efifb.fb_mask_blue =3D mode_info.blue_mask; >> + efifb.fb_mask_reserved =3D mode_info.reserved_mask; >> + >> + err =3D grub_bsd_add_meta ( FREEBSD_MODINFO_METADATA | FREEBSD_BTIN= FO_FRAMEBUF, &efifb, sizeof (efifb)); >> + return err; >> +} >> +#endif >> + >> static grub_err_t >> grub_freebsd_boot (void) >> { >> @@ -687,6 +745,10 @@ grub_freebsd_boot (void) >> *(grub_uint32_t *) p_tag =3D bootflags; >> break; >> =20 >> + case FREEBSD_MODINFO_METADATA | FREEBSD_BTINFO_FRAMEBUF: >> + grub_memcpy (p_tag, tag->data, tag->len); >> + break; >> + >> case FREEBSD_MODINFO_METADATA | FREEBSD_MODINFOMD_ENVP: >> if (is_64bit) >> *(grub_uint64_t *) p_tag =3D bi.environment; >> @@ -716,7 +778,10 @@ grub_freebsd_boot (void) >> =20 >> bi.kern_end =3D kern_end; >> =20 >> +#ifndef GRUB_MACHINE_EFI >> + /* Don't set text mode on EFI boot */ >> grub_video_set_mode ("text", 0, 0); >> +#endif >> =20 >> if (is_64bit) >> { >> @@ -1560,6 +1625,16 @@ grub_cmd_freebsd (grub_extcmd_context_t ctxt, i= nt argc, char *argv[]) >> FREEBSD_MODINFOMD_KERNEND, &data, len); >> if (err) >> return err; >> + >> +#ifdef GRUB_MACHINE_EFI >> + err =3D grub_freebsd_setup_video (); >> + if (err) >> + { >> + grub_print_error (); >> + grub_puts_ (N_("Booting in EFI blind mode")); >> + grub_errno =3D GRUB_ERR_NONE; >> + } >> +#endif >> } >> grub_bsd_get_device (&freebsd_biosdev, &unit, &slice, &part); >> freebsd_zfsguid =3D 0; >> diff --git grub-core/video/efi_gop.c grub-core/video/efi_gop.c >> index 7f9d1c2..cfe0119 100644 >> --- grub-core/video/efi_gop.c >> +++ grub-core/video/efi_gop.c >> @@ -180,6 +180,8 @@ grub_video_gop_fill_real_mode_info (unsigned mode,= >> out->mode_type =3D GRUB_VIDEO_MODE_TYPE_RGB; >> out->bpp =3D grub_video_gop_get_bpp (in); >> out->bytes_per_pixel =3D out->bpp >> 3; >> + out->stride =3D in->pixels_per_scanline; >> + out->pixel_format =3D in->pixel_format; > Please, don't add redundant fields to structs. All this info can be > inferred from available fields in FreeBSD code. As a bonus it will work= > with other gfx drivers. > Another point: is this driver usable on non-EFI? It's of particular > interest on coreboot where changing video mode currently requires refla= sh. > > > > _______________________________________________ > Grub-devel mailing list > Grub-devel@gnu.org > https://lists.gnu.org/mailman/listinfo/grub-devel Attached is a cleaned up version of the patch which doesn't add to any existing structs now. Let me know if this is closer to what you had in mind. I don't think this driver is usable on non-EFI FreeBSD yet. They have a new VT console driver, but I'm not sure their loader does video mode passthrough outside of EFI. I'm sure it will in the future, probably sometime in 11.X. --=20 Kris Moore PC-BSD Software iXsystems --------------050005070804090205080709 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
On 12/07/2014 16:45, Vladimir '=CF=86-coder/phcoder' Serbinenko wrote:
On 28.10.2014 21:32, Kris Moore wrote:
Got another patch for review today.

This patch adds support for FreeBSD's new VT console driver when booting
in EFI mode on FreeBSD 10.1 and later.

Please let me know any comments, or things that need addressed to get
this merged in.

Thanks!

-- Kris Moore PC-BSD Software iXsystems


patch-grub-fb


>From a9c20c1640cdea0ba902095cb18760f5ebe98875 Mon Sep 17 00:00:00 2001
From: Kris Moore <kris@pcbsd.org>
Date: Tue, 28 Oct 2014 15:59:59 -0400
Subject: [PATCH 1/2] Add support for passing EFI framebuffer information =
to
 FreeBSD kernel on FreeBSD 10.1 and later.

---
 grub-core/loader/i386/bsd.c          | 75 ++++++++++++++++++++++++++++++=
++++++
 grub-core/video/efi_gop.c            | 14 +++++++
 include/grub/i386/bsd.h              |  1 +
 include/grub/i386/freebsd_bootinfo.h | 33 ++++++++++++++++
 include/grub/video.h                 | 18 +++++++++
 5 files changed, 141 insertions(+)
 create mode 100644 include/grub/i386/freebsd_bootinfo.h

diff --git grub-core/loader/i386/bsd.c grub-core/loader/i386/bsd.c
index 8f691e0..c685552 100644
--- grub-core/loader/i386/bsd.c
+++ grub-core/loader/i386/bsd.c
@@ -48,6 +48,7 @@ GRUB_MOD_LICENSE ("GPLv3+");
 #ifdef GRUB_MACHINE_EFI
 #include <grub/efi/efi.h>
 #define NETBSD_DEFAULT_VIDEO_MODE "800x600"
+#define FREEBSD_DEFAULT_VIDEO_MODE "800x600"
 #else
 #define NETBSD_DEFAULT_VIDEO_MODE "text"
 #include <grub/i386/pc/vbe.h>
@@ -584,6 +585,63 @@ freebsd_get_zfs (void)
   grub_free (uuid);
 }
=20
+#ifdef GRUB_MACHINE_EFI
+
+static grub_err_t
+grub_freebsd_setup_video (void)
+{
+  struct grub_video_mode_info mode_info;
+  void *framebuffer;
+  const char *modevar;
+  struct grub_freebsd_btinfo_framebuf efifb;
+  grub_err_t err;
+  grub_video_driver_id_t driv_id;
+
+  modevar =3D grub_env_get ("gfxpayload");
+
+  /* Now all graphical modes are acceptable.
+     May change in future if we have modes without framebuffer.  */
+  if (modevar && *modevar !=3D 0)
+    {
+      char *tmp;
+      tmp =3D grub_xasprintf ("%s;" FREEBSD_DEFAULT_VIDEO_MODE, modevar)=
;
+      if (! tmp)
+	return grub_errno;
+      err =3D grub_video_set_mode (tmp, 0, 0);
+      grub_free (tmp);
+    }
+  else
+    err =3D grub_video_set_mode (FREEBSD_DEFAULT_VIDEO_MODE, 0, 0);
+
+  if (err)
+    return err;
+
+  driv_id =3D grub_video_get_driver_id ();
+  if (driv_id =3D=3D GRUB_VIDEO_DRIVER_NONE)
+    return GRUB_ERR_NONE;
+
+  err =3D grub_video_get_info_and_fini (&mode_info, &framebuffer=
);
+
+  if (err)
+    return err;
+
+  efifb.fb_width =3D mode_info.width;
+  efifb.fb_height =3D mode_info.height;
+  efifb.fb_stride =3D mode_info.stride;
+
+  efifb.fb_addr =3D (grub_addr_t) framebuffer;
+  efifb.fb_size =3D ALIGN_UP (mode_info.pitch * efifb.fb_height, 65536);
+
+  efifb.fb_mask_red =3D mode_info.red_mask;
+  efifb.fb_mask_green =3D mode_info.green_mask;
+  efifb.fb_mask_blue =3D mode_info.blue_mask;
+  efifb.fb_mask_reserved =3D mode_info.reserved_mask;
+
+  err =3D grub_bsd_add_meta ( FREEBSD_MODINFO_METADATA | FREEBSD_BTINFO_=
FRAMEBUF, &efifb, sizeof (efifb));
+  return err;
+}
+#endif
+
 static grub_err_t
 grub_freebsd_boot (void)
 {
@@ -687,6 +745,10 @@ grub_freebsd_boot (void)
 		*(grub_uint32_t *) p_tag =3D bootflags;
 	      break;
=20
+	    case FREEBSD_MODINFO_METADATA | FREEBSD_BTINFO_FRAMEBUF:
+	      grub_memcpy (p_tag, tag->data, tag->len);
+	      break;
+
 	    case FREEBSD_MODINFO_METADATA | FREEBSD_MODINFOMD_ENVP:
 	      if (is_64bit)
 		*(grub_uint64_t *) p_tag =3D bi.environment;
@@ -716,7 +778,10 @@ grub_freebsd_boot (void)
=20
   bi.kern_end =3D kern_end;
=20
+#ifndef GRUB_MACHINE_EFI
+  /* Don't set text mode on EFI boot */
   grub_video_set_mode ("text", 0, 0);
+#endif
=20
   if (is_64bit)
     {
@@ -1560,6 +1625,16 @@ grub_cmd_freebsd (grub_extcmd_context_t ctxt, int =
argc, char *argv[])
 				   FREEBSD_MODINFOMD_KERNEND, &data, len);
 	  if (err)
 	    return err;
+
+#ifdef GRUB_MACHINE_EFI
+	  err =3D grub_freebsd_setup_video ();
+	  if (err)
+	  {
+	    grub_print_error ();
+	    grub_puts_ (N_("Booting in EFI blind mode"));
+	    grub_errno =3D GRUB_ERR_NONE;
+	  }
+#endif
 	}
       grub_bsd_get_device (&freebsd_biosdev, &unit, &slice, =
&part);
       freebsd_zfsguid =3D 0;
diff --git grub-core/video/efi_gop.c grub-core/video/efi_gop.c
index 7f9d1c2..cfe0119 100644
--- grub-core/video/efi_gop.c
+++ grub-core/video/efi_gop.c
@@ -180,6 +180,8 @@ grub_video_gop_fill_real_mode_info (unsigned mode,
   out->mode_type =3D GRUB_VIDEO_MODE_TYPE_RGB;
   out->bpp =3D grub_video_gop_get_bpp (in);
   out->bytes_per_pixel =3D out->bpp >> 3;
+  out->stride =3D in->pixels_per_scanline;
+  out->pixel_format =3D in->pixel_format;
Please, don't add redundant fields to structs. All t=
his info can be
inferred from available fields in FreeBSD code. As a bonus it will work
with other gfx drivers.
Another point: is this driver usable on non-EFI? It's of particular
interest on coreboot where changing video mode currently requires reflash=
.



_______________________________________________
Grub-devel mailing list
=
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Attached is a cleaned up version of the patch which doesn't add to any existing structs now. Let me know if this is closer to what you had in mind.

I don't think this driver is usable on non-EFI FreeBSD yet. They have a new VT console driver, but I'm not sure their loader does video mode passthrough outside of EFI. I'm sure it will in the future, probably sometime in 11.X.
--=20
Kris Moore
PC-BSD Software
iXsystems
--------------050005070804090205080709-- --------------050905020805000703020006 Content-Type: text/plain; charset=UTF-8; name="patch-grub-efi-framebuffer" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="patch-grub-efi-framebuffer" RnJvbSA5OTczNjNlYzc2OThmMzRkNzQ3Njk5NjBjNGU3NmNmOGIzNjkwNTJlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBLcmlzIE1vb3JlIDxrcmlzQHBjYnNkLm9yZz4KRGF0 ZTogVHVlLCAzMCBEZWMgMjAxNCAxNDozNDo1OCAtMDUwMApTdWJqZWN0OiBbUEFUQ0hdIEFk ZCB0aGUgcGF0Y2ggZm9yIEZyZWVCU0QgVUVGSSBib290aW5nIC8gZnJhbWVidWZmZXIKIHBh c3N0aHJvdWdoLCBhZGQgZml4ZXMgdG8gQUNQSSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2hp bGUgaGVyZQoKLS0tCiBDaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDkgKysrCiBncnViLWNvcmUvbG9hZGVyL2kzODYvYnNkLmMgICAgICAgICAgfCAxMzQgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUvZ3J1Yi9pMzg2L2Jz ZC5oICAgICAgICAgICAgICB8ICAgMSArCiBpbmNsdWRlL2dydWIvaTM4Ni9mcmVlYnNkX2Jv b3RpbmZvLmggfCAgMzMgKysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDE3NyBpbnNlcnRp b25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9ncnViL2kzODYvZnJlZWJzZF9i b290aW5mby5oCgpkaWZmIC0tZ2l0IENoYW5nZUxvZyBDaGFuZ2VMb2cKaW5kZXggYzM4OTE3 Yi4uYjcxN2EyZCAxMDA2NDQKLS0tIENoYW5nZUxvZworKysgQ2hhbmdlTG9nCkBAIC0xLDMg KzEsMTIgQEAKKzIwMTQtMTItMzAgIEtyaXMgTW9vcmUgIDxrcmlzQHBjYnNkLm9yZz4KKwkq IGdydWItY29yZS9sb2FkZXIvaTM4Ni9ic2QuYzogU2V0IEZyZWVCU0Qgc3BlY2lmaWMgQUNQ SSBoaW50cyB3aGVuIGJvb3RpbmcKKwlpbiBFRkkgbW9kZQorCSogZ3J1Yi1jb3JlL2xvYWRl ci9pMzg2L2JzZC5jOiBBZGQgZGVmYXVsdCBGcmVlQlNEIEVGSSB2aWRlbyBtb2RlLCBhbmQK KwlzdHJ1Y3R1cmUgdG8gcGFzcyBpbmZvcm1hdGlvbiBpbnRvIEVGSSBib290ZWQga2VybmVs CisJKiBpbmNsdWRlL2dydWIvaTM4Ni9ic2QuaDogSW5jbHVkZSBuZXcgZnJlZWJzZF9ib290 aW5mby5oCisJKiBpbmNsdWRlL2dydWIvaTM4Ni9mcmVlYnNkX2Jvb3RpbmZvLmg6IEFkZCBn cnViX2ZyZWVic2RfYnRpbmZvX2ZyYW1lYnVmCisJc3RydWN0dXJlIGZvciBGcmVlQlNEIEVG SSBmcmFtZWJ1ZmZlciBwYXNzdGhyb3VnaAorCiAyMDE0LTEyLTA5ICBBbmRyZWkgQm9yemVu a292ICA8YXJ2aWRqYWFyQGdtYWlsLmNvbT4KIAogCSogZ3J1Yi1jb3JlL3Rlcm0vc2VyaWFs LmMgKGdydWJfY21kX3NlcmlhbCk6IEZpeCAtLXJ0c2N0cwpkaWZmIC0tZ2l0IGdydWItY29y ZS9sb2FkZXIvaTM4Ni9ic2QuYyBncnViLWNvcmUvbG9hZGVyL2kzODYvYnNkLmMKaW5kZXgg OGY2OTFlMC4uOWQ1MWNmZiAxMDA2NDQKLS0tIGdydWItY29yZS9sb2FkZXIvaTM4Ni9ic2Qu YworKysgZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L2JzZC5jCkBAIC00MiwxMiArNDIsMTQgQEAK IEdSVUJfTU9EX0xJQ0VOU0UgKCJHUEx2MysiKTsKIAogI2luY2x1ZGUgPGdydWIvdmlkZW8u aD4KKyNpbmNsdWRlIDxncnViL2FjcGkuaD4KICNpZmRlZiBHUlVCX01BQ0hJTkVfUENCSU9T CiAjaW5jbHVkZSA8Z3J1Yi9tYWNoaW5lL2Jpb3NudW0uaD4KICNlbmRpZgogI2lmZGVmIEdS VUJfTUFDSElORV9FRkkKICNpbmNsdWRlIDxncnViL2VmaS9lZmkuaD4KICNkZWZpbmUgTkVU QlNEX0RFRkFVTFRfVklERU9fTU9ERSAiODAweDYwMCIKKyNkZWZpbmUgRlJFRUJTRF9ERUZB VUxUX1ZJREVPX01PREUgIjgwMHg2MDAiCiAjZWxzZQogI2RlZmluZSBORVRCU0RfREVGQVVM VF9WSURFT19NT0RFICJ0ZXh0IgogI2luY2x1ZGUgPGdydWIvaTM4Ni9wYy92YmUuaD4KQEAg LTU4NCw2ICs1ODYsNzIgQEAgZnJlZWJzZF9nZXRfemZzICh2b2lkKQogICBncnViX2ZyZWUg KHV1aWQpOwogfQogCisjaWZkZWYgR1JVQl9NQUNISU5FX0VGSQorCitzdGF0aWMgZ3J1Yl9l cnJfdAorZ3J1Yl9mcmVlYnNkX3NldHVwX3ZpZGVvICh2b2lkKQoreworICBzdHJ1Y3QgZ3J1 Yl92aWRlb19tb2RlX2luZm8gbW9kZV9pbmZvOworICB2b2lkICpmcmFtZWJ1ZmZlcjsKKyAg Y29uc3QgY2hhciAqbW9kZXZhcjsKKyAgc3RydWN0IGdydWJfZnJlZWJzZF9idGluZm9fZnJh bWVidWYgZWZpZmI7CisgIGdydWJfZXJyX3QgZXJyOworICBncnViX3ZpZGVvX2RyaXZlcl9p ZF90IGRyaXZfaWQ7CisKKyAgbW9kZXZhciA9IGdydWJfZW52X2dldCAoImdmeHBheWxvYWQi KTsKKworICAvKiBOb3cgYWxsIGdyYXBoaWNhbCBtb2RlcyBhcmUgYWNjZXB0YWJsZS4KKyAg ICAgTWF5IGNoYW5nZSBpbiBmdXR1cmUgaWYgd2UgaGF2ZSBtb2RlcyB3aXRob3V0IGZyYW1l YnVmZmVyLiAgKi8KKyAgaWYgKG1vZGV2YXIgJiYgKm1vZGV2YXIgIT0gMCkKKyAgICB7Cisg ICAgICBjaGFyICp0bXA7CisgICAgICB0bXAgPSBncnViX3hhc3ByaW50ZiAoIiVzOyIgRlJF RUJTRF9ERUZBVUxUX1ZJREVPX01PREUsIG1vZGV2YXIpOworICAgICAgaWYgKCEgdG1wKQor CXJldHVybiBncnViX2Vycm5vOworICAgICAgZXJyID0gZ3J1Yl92aWRlb19zZXRfbW9kZSAo dG1wLCAwLCAwKTsKKyAgICAgIGdydWJfZnJlZSAodG1wKTsKKyAgICB9CisgIGVsc2UKKyAg ICBlcnIgPSBncnViX3ZpZGVvX3NldF9tb2RlIChGUkVFQlNEX0RFRkFVTFRfVklERU9fTU9E RSwgMCwgMCk7CisKKyAgaWYgKGVycikKKyAgICByZXR1cm4gZXJyOworCisgIGRyaXZfaWQg PSBncnViX3ZpZGVvX2dldF9kcml2ZXJfaWQgKCk7CisgIGlmIChkcml2X2lkID09IEdSVUJf VklERU9fRFJJVkVSX05PTkUpCisgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CisKKyAgZXJy ID0gZ3J1Yl92aWRlb19nZXRfaW5mb19hbmRfZmluaSAoJm1vZGVfaW5mbywgJmZyYW1lYnVm ZmVyKTsKKworICBpZiAoZXJyKQorICAgIHJldHVybiBlcnI7CisKKyAgZWZpZmIuZmJfd2lk dGggPSBtb2RlX2luZm8ud2lkdGg7CisgIGVmaWZiLmZiX2hlaWdodCA9IG1vZGVfaW5mby5o ZWlnaHQ7CisgIGVmaWZiLmZiX3N0cmlkZSA9IG1vZGVfaW5mby5waXRjaCAvIG1vZGVfaW5m by5ieXRlc19wZXJfcGl4ZWw7CisKKyAgZWZpZmIuZmJfYWRkciA9IChncnViX2FkZHJfdCkg ZnJhbWVidWZmZXI7CisgIGVmaWZiLmZiX3NpemUgPSBBTElHTl9VUCAobW9kZV9pbmZvLnBp dGNoICogZWZpZmIuZmJfaGVpZ2h0LCA2NTUzNik7CisKKyAgaWYgKCBtb2RlX2luZm8uYmx1 ZV9maWVsZF9wb3MgPT0gMTYgKSB7CisgICAgZWZpZmIuZmJfbWFza19yZWQgPSAweDAwMDAw MGZmOworICAgIGVmaWZiLmZiX21hc2tfZ3JlZW4gPSAweDAwMDBmZjAwOworICAgIGVmaWZi LmZiX21hc2tfYmx1ZSA9IDB4MDBmZjAwMDA7CisgIH0KKworICBpZiAoIG1vZGVfaW5mby5i bHVlX2ZpZWxkX3BvcyA9PSAwICkgeworICAgIGVmaWZiLmZiX21hc2tfcmVkID0gMHgwMGZm MDAwMDsKKyAgICBlZmlmYi5mYl9tYXNrX2dyZWVuID0gMHgwMDAwZmYwMDsKKyAgICBlZmlm Yi5mYl9tYXNrX2JsdWUgPSAweDAwMDAwMGZmOworICB9CisKKyAgZWZpZmIuZmJfbWFza19y ZXNlcnZlZCA9IDB4ZmYwMDAwMDA7CisKKyAgZXJyID0gZ3J1Yl9ic2RfYWRkX21ldGEgKCBG UkVFQlNEX01PRElORk9fTUVUQURBVEEgfCBGUkVFQlNEX0JUSU5GT19GUkFNRUJVRiwgJmVm aWZiLCBzaXplb2YgKGVmaWZiKSk7CisgIHJldHVybiBlcnI7Cit9CisjZW5kaWYKKwogc3Rh dGljIGdydWJfZXJyX3QKIGdydWJfZnJlZWJzZF9ib290ICh2b2lkKQogewpAQCAtNjAyLDYg KzY3MCw1NSBAQCBncnViX2ZyZWVic2RfYm9vdCAodm9pZCkKIAogICBiaS5ib290X2Rldmlj ZSA9IGZyZWVic2RfYmlvc2RldjsKIAorI2lmZGVmIEdSVUJfTUFDSElORV9FRkkKKyAgLyog V2hlbiBib290aW5nIGluIEVGSSBtb2RlLCB3ZSBuZWVkIHRvIGV4cG9ydCBzb21lIGFkZGl0 aW9uYWwga2VybmVsIEFDUEkgaGludHMgKi8KKyAgc3RydWN0IGdydWJfYWNwaV9yc2RwX3Yx MCAqdjE7CisgIHN0cnVjdCBncnViX2FjcGlfcnNkcF92MjAgKnYyOworICB2MSA9IGdydWJf YWNwaV9nZXRfcnNkcHYxICgpOworICB2MiA9IGdydWJfYWNwaV9nZXRfcnNkcHYyICgpOwor ICBpZiAodjIgJiYgdjItPmxlbmd0aCA+IDQwKQorICAgIHYyID0gMDsKKworICBpbnQgcmV2 aXNpb247CisgIGNoYXIgYWNwaUJ1ZlsyNF07CisKKyAgaWYgKHYxKQorICB7CisgICAgIHJl dmlzaW9uID0gdjEtPnJldmlzaW9uOworICAgICBpZiAoIHJldmlzaW9uID09IDAgKQorICAg ICAgICByZXZpc2lvbiA9IDE7CisgICAgIGdydWJfc25wcmludGYgKGFjcGlCdWYsIHNpemVv ZiAoYWNwaUJ1ZiksICIlZCIsIHJldmlzaW9uKTsKKyAgICAgZ3J1Yl9lbnZfc2V0KCJrRnJl ZUJTRC5oaW50LmFjcGkuMC5yZXZpc2lvbiIsIGFjcGlCdWYpOworCisgICAgIGdydWJfc25w cmludGYgKGFjcGlCdWYsIHNpemVvZiAoYWNwaUJ1ZiksICIlcyIsIHYxLT5vZW1pZCk7Cisg ICAgIGdydWJfZW52X3NldCgia0ZyZWVCU0QuaGludC5hY3BpLjAub2VtIiwgYWNwaUJ1Zik7 CisKKyAgICAgZ3J1Yl9zbnByaW50ZiAoYWNwaUJ1Ziwgc2l6ZW9mIChhY3BpQnVmKSwgIjB4 JTAxNngiLCB2MS0+cnNkdF9hZGRyKTsKKyAgICAgZ3J1Yl9lbnZfc2V0KCJrRnJlZUJTRC5o aW50LmFjcGkuMC5yc2R0IiwgYWNwaUJ1Zik7CisKKyAgICAgZ3J1Yl9zbnByaW50ZiAoYWNw aUJ1Ziwgc2l6ZW9mIChhY3BpQnVmKSwgIjB4JTAxNmxseCIsICh1bnNpZ25lZCBsb25nIGxv bmcpdjEpOworICAgICBncnViX2Vudl9zZXQoImtGcmVlQlNELmhpbnQuYWNwaS4wLnJzZHAi LCBhY3BpQnVmKTsKKyAgfQorCisgIGlmICh2MikKKyAgeworICAgICByZXZpc2lvbiA9IHYy LT5yc2RwdjEucmV2aXNpb247CisgICAgIGlmICggcmV2aXNpb24gPT0gMCApCisgICAgICAg IHJldmlzaW9uID0gMTsKKworICAgICBncnViX3NucHJpbnRmIChhY3BpQnVmLCBzaXplb2Yg KGFjcGlCdWYpLCAiJWQiLCByZXZpc2lvbik7CisgICAgIGdydWJfZW52X3NldCgia0ZyZWVC U0QuaGludC5hY3BpLjAucmV2aXNpb24iLCBhY3BpQnVmKTsKKworICAgICBncnViX3NucHJp bnRmIChhY3BpQnVmLCBzaXplb2YgKGFjcGlCdWYpLCAiMHglMDE2bGx4IiwgKHVuc2lnbmVk IGxvbmcgbG9uZyl2Mi0+eHNkdF9hZGRyKTsKKyAgICAgZ3J1Yl9lbnZfc2V0KCJrRnJlZUJT RC5oaW50LmFjcGkuMC54c2R0IiwgYWNwaUJ1Zik7CisKKyAgICAgZ3J1Yl9zbnByaW50ZiAo YWNwaUJ1Ziwgc2l6ZW9mIChhY3BpQnVmKSwgIiVkIiwgdjItPmxlbmd0aCk7CisgICAgIGdy dWJfZW52X3NldCgia0ZyZWVCU0QuaGludC5hY3BpLjAueHNkdF9sZW5ndGgiLCBhY3BpQnVm KTsKKyAgfQorCisKKyNlbmRpZgorCiAgIHBfc2l6ZSA9IDA7CiAgIEZPUl9TT1JURURfRU5W ICh2YXIpCiAgICAgaWYgKChncnViX21lbWNtcCAodmFyLT5uYW1lLCAia0ZyZWVCU0QuIiwg c2l6ZW9mKCJrRnJlZUJTRC4iKSAtIDEpID09IDApICYmICh2YXItPm5hbWVbc2l6ZW9mKCJr RnJlZUJTRC4iKSAtIDFdKSkKQEAgLTY4Nyw2ICs4MDQsMTAgQEAgZ3J1Yl9mcmVlYnNkX2Jv b3QgKHZvaWQpCiAJCSooZ3J1Yl91aW50MzJfdCAqKSBwX3RhZyA9IGJvb3RmbGFnczsKIAkg ICAgICBicmVhazsKIAorCSAgICBjYXNlIEZSRUVCU0RfTU9ESU5GT19NRVRBREFUQSB8IEZS RUVCU0RfQlRJTkZPX0ZSQU1FQlVGOgorCSAgICAgIGdydWJfbWVtY3B5IChwX3RhZywgdGFn LT5kYXRhLCB0YWctPmxlbik7CisJICAgICAgYnJlYWs7CisKIAkgICAgY2FzZSBGUkVFQlNE X01PRElORk9fTUVUQURBVEEgfCBGUkVFQlNEX01PRElORk9NRF9FTlZQOgogCSAgICAgIGlm IChpc182NGJpdCkKIAkJKihncnViX3VpbnQ2NF90ICopIHBfdGFnID0gYmkuZW52aXJvbm1l bnQ7CkBAIC03MTYsNyArODM3LDEwIEBAIGdydWJfZnJlZWJzZF9ib290ICh2b2lkKQogCiAg IGJpLmtlcm5fZW5kID0ga2Vybl9lbmQ7CiAKKyNpZm5kZWYgR1JVQl9NQUNISU5FX0VGSQor ICAvKiBEb24ndCBzZXQgdGV4dCBtb2RlIG9uIEVGSSBib290ICovCiAgIGdydWJfdmlkZW9f c2V0X21vZGUgKCJ0ZXh0IiwgMCwgMCk7CisjZW5kaWYKIAogICBpZiAoaXNfNjRiaXQpCiAg ICAgewpAQCAtMTU2MCw2ICsxNjg0LDE2IEBAIGdydWJfY21kX2ZyZWVic2QgKGdydWJfZXh0 Y21kX2NvbnRleHRfdCBjdHh0LCBpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQkJCSAgIEZS RUVCU0RfTU9ESU5GT01EX0tFUk5FTkQsICZkYXRhLCBsZW4pOwogCSAgaWYgKGVycikKIAkg ICAgcmV0dXJuIGVycjsKKworI2lmZGVmIEdSVUJfTUFDSElORV9FRkkKKwkgIGVyciA9IGdy dWJfZnJlZWJzZF9zZXR1cF92aWRlbyAoKTsKKwkgIGlmIChlcnIpCisJICB7CisJICAgIGdy dWJfcHJpbnRfZXJyb3IgKCk7CisJICAgIGdydWJfcHV0c18gKE5fKCJCb290aW5nIGluIEVG SSBibGluZCBtb2RlIikpOworCSAgICBncnViX2Vycm5vID0gR1JVQl9FUlJfTk9ORTsKKwkg IH0KKyNlbmRpZgogCX0KICAgICAgIGdydWJfYnNkX2dldF9kZXZpY2UgKCZmcmVlYnNkX2Jp b3NkZXYsICZ1bml0LCAmc2xpY2UsICZwYXJ0KTsKICAgICAgIGZyZWVic2RfemZzZ3VpZCA9 IDA7CmRpZmYgLS1naXQgaW5jbHVkZS9ncnViL2kzODYvYnNkLmggaW5jbHVkZS9ncnViL2kz ODYvYnNkLmgKaW5kZXggNTI0ZDQ3YS4uYjdiYjU0NSAxMDA2NDQKLS0tIGluY2x1ZGUvZ3J1 Yi9pMzg2L2JzZC5oCisrKyBpbmNsdWRlL2dydWIvaTM4Ni9ic2QuaApAQCAtMjYsNiArMjYs NyBAQAogI2luY2x1ZGUgPGdydWIvaTM4Ni9uZXRic2RfcmVib290Lmg+CiAjaW5jbHVkZSA8 Z3J1Yi9pMzg2L29wZW5ic2RfcmVib290Lmg+CiAjaW5jbHVkZSA8Z3J1Yi9pMzg2L2ZyZWVi c2RfbGlua2VyLmg+CisjaW5jbHVkZSA8Z3J1Yi9pMzg2L2ZyZWVic2RfYm9vdGluZm8uaD4K ICNpbmNsdWRlIDxncnViL2kzODYvbmV0YnNkX2Jvb3RpbmZvLmg+CiAjaW5jbHVkZSA8Z3J1 Yi9pMzg2L29wZW5ic2RfYm9vdGFyZy5oPgogCmRpZmYgLS1naXQgaW5jbHVkZS9ncnViL2kz ODYvZnJlZWJzZF9ib290aW5mby5oIGluY2x1ZGUvZ3J1Yi9pMzg2L2ZyZWVic2RfYm9vdGlu Zm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2U1OTk3Ci0tLSAv ZGV2L251bGwKKysrIGluY2x1ZGUvZ3J1Yi9pMzg2L2ZyZWVic2RfYm9vdGluZm8uaApAQCAt MCwwICsxLDMzIEBACisvKgorICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2Fk ZXIKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgsMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuCisgKgorICogIEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGlj ZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK KyAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq ICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGdydWIvdHlwZXMuaD4KKworI2RlZmluZSBG UkVFQlNEX0JUSU5GT19GUkFNRUJVRiAgMHgxMDA1CisKK3N0cnVjdCBncnViX2ZyZWVic2Rf YnRpbmZvX2ZyYW1lYnVmIHsKKyAgZ3J1Yl91aW50NjRfdCAgICAgICAgZmJfYWRkcjsKKyAg Z3J1Yl91aW50NjRfdCAgICAgICAgZmJfc2l6ZTsKKyAgZ3J1Yl9pbnQzMl90ICAgICAgICAg ZmJfaGVpZ2h0OworICBncnViX2ludDMyX3QgICAgICAgICBmYl93aWR0aDsKKyAgZ3J1Yl9p bnQzMl90ICAgICAgICAgZmJfc3RyaWRlOworICBncnViX3VpbnQzMl90ICAgICAgICBmYl9t YXNrX3JlZDsKKyAgZ3J1Yl91aW50MzJfdCAgICAgICAgZmJfbWFza19ncmVlbjsKKyAgZ3J1 Yl91aW50MzJfdCAgICAgICAgZmJfbWFza19ibHVlOworICBncnViX3VpbnQzMl90ICAgICAg ICBmYl9tYXNrX3Jlc2VydmVkOworfTsKLS0gCjIuMi4xCgo= --------------050905020805000703020006--