From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1d7zBb-0002Lc-RA for mharc-grub-devel@gnu.org; Tue, 09 May 2017 03:03:55 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56789) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d7zBW-0002KT-Vq for grub-devel@gnu.org; Tue, 09 May 2017 03:03:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d7zBV-0007fj-Hn for grub-devel@gnu.org; Tue, 09 May 2017 03:03:50 -0400 Received: from mail-yw0-x22d.google.com ([2607:f8b0:4002:c05::22d]:35699) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1d7zBV-0007fY-BU for grub-devel@gnu.org; Tue, 09 May 2017 03:03:49 -0400 Received: by mail-yw0-x22d.google.com with SMTP id l135so40159241ywb.2 for ; Tue, 09 May 2017 00:03:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=3SuDoKAX3zeLF7ozr8bCaJS9OSx3+oajWA+cR/jW52Y=; b=QIZNINu2pI0NLjpFgtYxTSFgkmKzglRyQWXj5D9U3zNSJupqmOObqwGTR/f4O5jM8b Y2hp+5MXLu302Bcgu//nYyKFyL0NYQ6LT5Fy2ohzD5OMOHcQbR1HLPViCVlR8/hrrpdn BXBT5xf7L9YrWJSq1Y+kvV5HGVb9r6z1inC0gVlhIB4u+QJ/+yvy8vP+H2UDEs54ESyA yZYzat6YPXVJqV3ptRXgEM5+rC6vMxBml5qKpbWniBhCaBlkfGpFfi0u2CWT3l6FOtMF LuRFvks52fEjHtHA8nhsD2qwVmsy6l2Bsa5WrVK5aBMGhUx2q6grk3Mgfmza1KGtJmD8 ckCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=3SuDoKAX3zeLF7ozr8bCaJS9OSx3+oajWA+cR/jW52Y=; b=FR1+00PqROcUAfcBgXVea9xWOpTODj2KVLt1stoxiNVKrQZWbPirCfZ6qNdDxGMZIB 6hpBIxCwr4fjlIiybO12xkiiiYuYHWEaIt3EjrmdTpM8PxR9tfpX3JVlsAa5c+9n1RFP q3jy/h+fsDD0SybGzyGDy2m8F16+aUhirGME1WmqzZxP1p0+aDlW4hJE9PNHLC6x/FaZ mgf+um4LWCVsUMmi04EXSQFbU1f2qUaMSM+FW/1+vYccmVCVrAbOIBJFbagUzZp+FTHr 4716gCdb4c+fS7fNq74qpl9hbmwDre2cLw6DDLDcX4WFQKm/ZZQl+9p+8xkIUTy44LJI QiUQ== X-Gm-Message-State: AODbwcCh9Ybt6af8BBWpKK3Xbh0M1pYx9Vmgle4K0HvGFBBdQWShPEO9 AXU5dnNBFFmHJXnjbfOPt1Y3VlRyVw== X-Received: by 10.129.160.207 with SMTP id x198mr14205310ywg.253.1494313428642; Tue, 09 May 2017 00:03:48 -0700 (PDT) MIME-Version: 1.0 References: <20170425000008.10286-1-jwerner@chromium.org> <20170425201825.15337-1-jwerner@chromium.org> In-Reply-To: <20170425201825.15337-1-jwerner@chromium.org> From: "Vladimir 'phcoder' Serbinenko" Date: Tue, 09 May 2017 07:03:38 +0000 Message-ID: Subject: Re: [PATCH v2] grub-core/term/i386/coreboot/cbmemc.c: Update console format To: The development of GNU GRUB Cc: Julius Werner , Vladimir Serbinenko , Paul Menzel Content-Type: multipart/alternative; boundary=94eb2c07f668195dff054f11f5ee X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4002:c05::22d X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 May 2017 07:03:52 -0000 --94eb2c07f668195dff054f11f5ee Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Committed, thanks Le Tue, Apr 25, 2017 =C3=A0 10:19 PM, Julius Werner = a =C3=A9crit : > Changed cbmemc to support updated console format from coreboot. > --- > grub-core/term/i386/coreboot/cbmemc.c | 50 > ++++++++++++++++++++++++----------- > 1 file changed, 35 insertions(+), 15 deletions(-) > > diff --git a/grub-core/term/i386/coreboot/cbmemc.c > b/grub-core/term/i386/coreboot/cbmemc.c > index 25e64a05c..436eda52a 100644 > --- a/grub-core/term/i386/coreboot/cbmemc.c > +++ b/grub-core/term/i386/coreboot/cbmemc.c > @@ -29,11 +29,14 @@ > > GRUB_MOD_LICENSE ("GPLv3+"); > > +#define CURSOR_MASK ((1 << 28) - 1) > +#define OVERFLOW (1 << 31) > + > struct grub_linuxbios_cbmemc > { > grub_uint32_t size; > - grub_uint32_t pointer; > - char data[0]; > + grub_uint32_t cursor; > + char body[0]; > }; > > static struct grub_linuxbios_cbmemc *cbmemc; > @@ -41,11 +44,20 @@ static struct grub_linuxbios_cbmemc *cbmemc; > static void > put (struct grub_term_output *term __attribute__ ((unused)), const int c= ) > { > + grub_uint32_t flags, cursor; > if (!cbmemc) > return; > - if (cbmemc->pointer < cbmemc->size) > - cbmemc->data[cbmemc->pointer] =3D c; > - cbmemc->pointer++; > + flags =3D cbmemc->cursor & ~CURSOR_MASK; > + cursor =3D cbmemc->cursor & CURSOR_MASK; > + if (cursor >=3D cbmemc->size) > + return; > + cbmemc->body[cursor++] =3D c; > + if (cursor >=3D cbmemc->size) > + { > + cursor =3D 0; > + flags |=3D OVERFLOW; > + } > + cbmemc->cursor =3D flags | cursor; > } > > struct grub_terminfo_output_state grub_cbmemc_terminfo_output =3D > @@ -87,21 +99,29 @@ grub_cmd_cbmemc (struct grub_command *cmd > __attribute__ ((unused)), > int argc __attribute__ ((unused)), > char *argv[] __attribute__ ((unused))) > { > - grub_size_t len; > - char *str; > - struct grub_linuxbios_cbmemc *cbmemc_saved; > + grub_size_t size, cursor; > + struct grub_linuxbios_cbmemc *real_cbmemc; > > if (!cbmemc) > return grub_error (GRUB_ERR_IO, "no CBMEM console found"); > > - len =3D cbmemc->pointer; > - if (len > cbmemc->size) > - len =3D cbmemc->size; > - str =3D cbmemc->data; > - cbmemc_saved =3D cbmemc; > + real_cbmemc =3D cbmemc; > cbmemc =3D 0; > - grub_xnputs (str, len); > - cbmemc =3D cbmemc_saved; > + cursor =3D real_cbmemc->cursor & CURSOR_MASK; > + if (!(real_cbmemc->cursor & OVERFLOW) && cursor < real_cbmemc->size) > + size =3D cursor; > + else > + size =3D real_cbmemc->size; > + if (real_cbmemc->cursor & OVERFLOW) > + { > + if (cursor > size) > + cursor =3D 0; > + grub_xnputs(real_cbmemc->body + cursor, size - cursor); > + grub_xnputs(real_cbmemc->body, cursor); > + } > + else > + grub_xnputs(real_cbmemc->body, size); > + cbmemc =3D real_cbmemc; > return 0; > } > > -- > 2.12.2 > > > _______________________________________________ > Grub-devel mailing list > Grub-devel@gnu.org > https://lists.gnu.org/mailman/listinfo/grub-devel > --94eb2c07f668195dff054f11f5ee Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Committed, thanks

Le=C2=A0Tue, Apr 25, 2017 =C3=A0=C2=A010:19 PM, Julius Werner = <jwerner@chromium.org> a = =C3=A9crit=C2=A0:
Changed cbmemc to= support updated console format from coreboot.
---
=C2=A0grub-core/term/i386/coreboot/cbmemc.c | 50 ++++++++++++++++++++++++--= ---------
=C2=A01 file changed, 35 insertions(+), 15 deletions(-)

diff --git a/grub-core/term/i386/coreboot/cbmemc.c b/grub-core/term/i386/co= reboot/cbmemc.c
index 25e64a05c..436eda52a 100644
--- a/grub-core/term/i386/coreboot/cbmemc.c
+++ b/grub-core/term/i386/coreboot/cbmemc.c
@@ -29,11 +29,14 @@

=C2=A0GRUB_MOD_LICENSE ("GPLv3+");

+#define CURSOR_MASK ((1 << 28) - 1)
+#define OVERFLOW (1 << 31)
+
=C2=A0struct grub_linuxbios_cbmemc
=C2=A0{
=C2=A0 =C2=A0grub_uint32_t size;
-=C2=A0 grub_uint32_t pointer;
-=C2=A0 char data[0];
+=C2=A0 grub_uint32_t cursor;
+=C2=A0 char body[0];
=C2=A0};

=C2=A0static struct grub_linuxbios_cbmemc *cbmemc;
@@ -41,11 +44,20 @@ static struct grub_linuxbios_cbmemc *cbmemc;
=C2=A0static void
=C2=A0put (struct grub_term_output *term __attribute__ ((unused)), const in= t c)
=C2=A0{
+=C2=A0 grub_uint32_t flags, cursor;
=C2=A0 =C2=A0if (!cbmemc)
=C2=A0 =C2=A0 =C2=A0return;
-=C2=A0 if (cbmemc->pointer < cbmemc->size)
-=C2=A0 =C2=A0 cbmemc->data[cbmemc->pointer] =3D c;
-=C2=A0 cbmemc->pointer++;
+=C2=A0 flags =3D cbmemc->cursor & ~CURSOR_MASK;
+=C2=A0 cursor =3D cbmemc->cursor & CURSOR_MASK;
+=C2=A0 if (cursor >=3D cbmemc->size)
+=C2=A0 =C2=A0 return;
+=C2=A0 cbmemc->body[cursor++] =3D c;
+=C2=A0 if (cursor >=3D cbmemc->size)
+=C2=A0 =C2=A0 {
+=C2=A0 =C2=A0 =C2=A0 cursor =3D 0;
+=C2=A0 =C2=A0 =C2=A0 flags |=3D OVERFLOW;
+=C2=A0 =C2=A0 }
+=C2=A0 cbmemc->cursor =3D flags | cursor;
=C2=A0}

=C2=A0struct grub_terminfo_output_state grub_cbmemc_terminfo_output =3D
@@ -87,21 +99,29 @@ grub_cmd_cbmemc (struct grub_command *cmd __attribute__= ((unused)),
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0int argc __at= tribute__ ((unused)),
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0char *argv[] = __attribute__ ((unused)))
=C2=A0{
-=C2=A0 grub_size_t len;
-=C2=A0 char *str;
-=C2=A0 struct grub_linuxbios_cbmemc *cbmemc_saved;
+=C2=A0 grub_size_t size, cursor;
+=C2=A0 struct grub_linuxbios_cbmemc *real_cbmemc;

=C2=A0 =C2=A0if (!cbmemc)
=C2=A0 =C2=A0 =C2=A0return grub_error (GRUB_ERR_IO, "no CBMEM console = found");

-=C2=A0 len =3D cbmemc->pointer;
-=C2=A0 if (len > cbmemc->size)
-=C2=A0 =C2=A0 len =3D cbmemc->size;
-=C2=A0 str =3D cbmemc->data;
-=C2=A0 cbmemc_saved =3D cbmemc;
+=C2=A0 real_cbmemc =3D cbmemc;
=C2=A0 =C2=A0cbmemc =3D 0;
-=C2=A0 grub_xnputs (str, len);
-=C2=A0 cbmemc =3D cbmemc_saved;
+=C2=A0 cursor =3D real_cbmemc->cursor & CURSOR_MASK;
+=C2=A0 if (!(real_cbmemc->cursor & OVERFLOW) && cursor <= real_cbmemc->size)
+=C2=A0 =C2=A0 size =3D cursor;
+=C2=A0 else
+=C2=A0 =C2=A0 size =3D real_cbmemc->size;
+=C2=A0 if (real_cbmemc->cursor & OVERFLOW)
+=C2=A0 =C2=A0 {
+=C2=A0 =C2=A0 =C2=A0 if (cursor > size)
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 cursor =3D 0;
+=C2=A0 =C2=A0 =C2=A0 grub_xnputs(real_cbmemc->body + cursor, size - cur= sor);
+=C2=A0 =C2=A0 =C2=A0 grub_xnputs(real_cbmemc->body, cursor);
+=C2=A0 =C2=A0 }
+=C2=A0 else
+=C2=A0 =C2=A0 grub_xnputs(real_cbmemc->body, size);
+=C2=A0 cbmemc =3D real_cbmemc;
=C2=A0 =C2=A0return 0;
=C2=A0}

--
2.12.2


_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org<= /a>
https://lists.gnu.org/mailman/listinfo/grub-devel
--94eb2c07f668195dff054f11f5ee--