From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1XxjeM-00017k-Eg for mharc-grub-devel@gnu.org; Sun, 07 Dec 2014 16:45:54 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42020) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XxjeJ-00017Z-9a for grub-devel@gnu.org; Sun, 07 Dec 2014 16:45:52 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XxjeG-000626-Bu for grub-devel@gnu.org; Sun, 07 Dec 2014 16:45:51 -0500 Received: from mail-wi0-x235.google.com ([2a00:1450:400c:c05::235]:55454) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XxjeG-000620-0B for grub-devel@gnu.org; Sun, 07 Dec 2014 16:45:48 -0500 Received: by mail-wi0-f181.google.com with SMTP id r20so3155403wiv.14 for ; Sun, 07 Dec 2014 13:45:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:subject:references :in-reply-to:content-type; bh=NK/k5ophjo6IexJyrv/bDVPHamwq5xahu7o1Vgix8Ro=; b=r9lXHVXBuve3AkEPXLnr3iwly5yT9UsCUZHcoUPcxMYaZyDXpQGkL4bh3vlj325PkN q/ccivIiI+EjOrylbK3ll0bad6pQJjUieYipsJucWs0MtewtVRxl9YBciiJDkUKulQOB zxY2JkVy+XeMgp+CUANuwLkNG7kPGygFAZ5iIJ4sYtUopLvs5R+Gk5hZfHatjcZi9tsJ pmQXAnuU8XJq11JSz/VuF4W8XdkTjHxcytKXvksdzXgJHYlc4yjg71WpmG2sOlPPTYEl Ap6zkC1Skd4oLAn+Kd6uMVeze6T0QC9ydBQWKt1Xvf95u/+SQ/9fk2W52f5U+LKnwzso 06lA== X-Received: by 10.180.86.38 with SMTP id m6mr19322579wiz.65.1417988747362; Sun, 07 Dec 2014 13:45:47 -0800 (PST) Received: from ?IPv6:2a02:1205:501d:9210:863a:4bff:fe50:abc4? ([2a02:1205:501d:9210:863a:4bff:fe50:abc4]) by mx.google.com with ESMTPSA id pl1sm7307138wic.16.2014.12.07.13.45.46 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 07 Dec 2014 13:45:46 -0800 (PST) Message-ID: <5484CA89.30903@gmail.com> Date: Sun, 07 Dec 2014 22:45:45 +0100 From: =?UTF-8?B?VmxhZGltaXIgJ8+GLWNvZGVyL3BoY29kZXInIFNlcmJpbmVua28=?= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Icedove/31.2.0 MIME-Version: 1.0 To: The development of GNU GRUB Subject: Re: [PATCH] Add support for passing EFI framebuffer into FreeBSD 10.1 and later References: <544FFD67.9000102@pcbsd.org> In-Reply-To: <544FFD67.9000102@pcbsd.org> Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="Hu0hSipqIGlKjDWHN2UnlK9xd07nbEdjv" X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2a00:1450:400c:c05::235 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: Sun, 07 Dec 2014 21:45:52 -0000 This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --Hu0hSipqIGlKjDWHN2UnlK9xd07nbEdjv Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 28.10.2014 21:32, Kris Moore wrote: > Got another patch for review today. >=20 > This patch adds support for FreeBSD's new VT console driver when bootin= g > in EFI mode on FreeBSD 10.1 and later. >=20 > Please let me know any comments, or things that need addressed to get > this merged in. >=20 > Thanks! >=20 > -- Kris Moore PC-BSD Software iXsystems >=20 >=20 > patch-grub-fb >=20 >=20 > 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 informatio= n to > FreeBSD kernel on FreeBSD 10.1 and later. >=20 > --- > 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 >=20 > 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, modeva= r); > + 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_BTINF= O_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, in= t 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 reflash= =2E --Hu0hSipqIGlKjDWHN2UnlK9xd07nbEdjv Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iF4EAREKAAYFAlSEyokACgkQmBXlbbo5nOtdegD+JaOrlv0usiFAQem6PeBS5rPv sEByfjdOeUfDzgWkgfYBAICKiYQ3cBOAjqEdwXVb/vQUCqZJXJFr/8UNboUiTuRh =petH -----END PGP SIGNATURE----- --Hu0hSipqIGlKjDWHN2UnlK9xd07nbEdjv--