[SeaBIOS] Re: [PATCH 3/6] bios_date: Change BiosDate to SMBIOS bios date

Kevin O'Connor posted 1 patch 4 years, 11 months ago
Failed in applying to current master (apply log)
[SeaBIOS] Re: [PATCH 3/6] bios_date: Change BiosDate to SMBIOS bios date
Posted by Kevin O'Connor 4 years, 11 months ago
On Thu, May 23, 2019 at 06:58:57PM +0300, Sam Eiderman wrote:
> > On 23 May 2019, at 18:54, Kevin O'Connor <kevin@koconnor.net> wrote:
> > I understand.  If we ensured the smbios date is always in the
> > f-segment, would that also solve the problem?  (That is, using the
> > 'char win_bios_date[] VARFSEG' method discussed previously.)
> 
> That would only be half of the solution, since F-SEG contains the following dates: ['04/01/2014', '01/01/2011', '06/23/99’]
> It means that no matter what is found in "char win_bios_date[] VARFSEG”, SystemBiosDate will always be a date of ’04/01/2014’ or later.
> To really control the output of SystemBiosDate, all dates in SeaBIOS’s F-SEG should be the desired SystemBiosDate (or older).

Under normal circumstances, the 32bit init code is relocated out of
the f-segment.  Unfortunately, that doesn't work for anonymous
strings.  One simple trick, though, is to force these problematic
strings into named variables (see patch below).

-Kevin


diff --git a/src/fw/biostables.c b/src/fw/biostables.c
index fe8626e..269b858 100644
--- a/src/fw/biostables.c
+++ b/src/fw/biostables.c
@@ -401,7 +401,7 @@ smbios_new_type_0(void *start,
 }
 
 #define BIOS_NAME "SeaBIOS"
-#define BIOS_DATE "04/01/2014"
+static const char BIOS_DATE[] = "04/01/2014";
 
 static int
 smbios_romfile_setup(void)
diff --git a/src/fw/smbios.c b/src/fw/smbios.c
index 62a563b..8e7ee6a 100644
--- a/src/fw/smbios.c
+++ b/src/fw/smbios.c
@@ -161,7 +161,7 @@ get_external(int type, char **p, unsigned *nr_structs,
     } while (0)
 
 /* Type 0 -- BIOS Information */
-#define RELEASE_DATE_STR "01/01/2011"
+static const char RELEASE_DATE_STR[] = "01/01/2011";
 static void *
 smbios_init_type_0(void *start)
 {
_______________________________________________
SeaBIOS mailing list -- seabios@seabios.org
To unsubscribe send an email to seabios-leave@seabios.org
[SeaBIOS] Re: [PATCH 3/6] bios_date: Change BiosDate to SMBIOS bios date
Posted by Sam Eiderman 4 years, 11 months ago
I actually love this idea.

So we can now expect only ’06/23/99’ date string to reside in F-SEG at build time.
This will allow setting the SystemBiosDate to all dates from 06/23/99 to 01/01/80 (2080) which is reasonable enough.

So now we will copy the smbios0.date to "char win_bios_date[] VARFSEG” and allow setting the SystemBiosDate to the smbios supplied one.

The only question now is what to do in the Legacy SMBIOS case where the SMBIOS value which is exposed today is 01/01/2011 but the value in SystemBiosDate is 04/01/2014?

Option A: Change the Legacy smbios0 date to 04/01/2014, not sure how this affects machines.
Option B: win_bios_date will be 01/01/2011 too - but this will change the SystemBiosDate value - which might break applications that currently rely that it’s 04/01/2014 as reported now.
Option C: win_bios_date will always be 04/01/2014, default legacy smbios0.date is 01/01/2011, overriding the legacy smbios0.date will override win_bios_date too.

I’m inclined to implement option C since it doesn’t break current functionality, what do you think?

Sam


> On 23 May 2019, at 19:29, Kevin O'Connor <kevin@koconnor.net> wrote:
> 
> On Thu, May 23, 2019 at 06:58:57PM +0300, Sam Eiderman wrote:
>>> On 23 May 2019, at 18:54, Kevin O'Connor <kevin@koconnor.net> wrote:
>>> I understand.  If we ensured the smbios date is always in the
>>> f-segment, would that also solve the problem?  (That is, using the
>>> 'char win_bios_date[] VARFSEG' method discussed previously.)
>> 
>> That would only be half of the solution, since F-SEG contains the following dates: ['04/01/2014', '01/01/2011', '06/23/99’]
>> It means that no matter what is found in "char win_bios_date[] VARFSEG”, SystemBiosDate will always be a date of ’04/01/2014’ or later.
>> To really control the output of SystemBiosDate, all dates in SeaBIOS’s F-SEG should be the desired SystemBiosDate (or older).
> 
> Under normal circumstances, the 32bit init code is relocated out of
> the f-segment.  Unfortunately, that doesn't work for anonymous
> strings.  One simple trick, though, is to force these problematic
> strings into named variables (see patch below).
> 
> -Kevin
> 
> 
> diff --git a/src/fw/biostables.c b/src/fw/biostables.c
> index fe8626e..269b858 100644
> --- a/src/fw/biostables.c
> +++ b/src/fw/biostables.c
> @@ -401,7 +401,7 @@ smbios_new_type_0(void *start,
> }
> 
> #define BIOS_NAME "SeaBIOS"
> -#define BIOS_DATE "04/01/2014"
> +static const char BIOS_DATE[] = "04/01/2014";
> 
> static int
> smbios_romfile_setup(void)
> diff --git a/src/fw/smbios.c b/src/fw/smbios.c
> index 62a563b..8e7ee6a 100644
> --- a/src/fw/smbios.c
> +++ b/src/fw/smbios.c
> @@ -161,7 +161,7 @@ get_external(int type, char **p, unsigned *nr_structs,
>     } while (0)
> 
> /* Type 0 -- BIOS Information */
> -#define RELEASE_DATE_STR "01/01/2011"
> +static const char RELEASE_DATE_STR[] = "01/01/2011";
> static void *
> smbios_init_type_0(void *start)
> {

_______________________________________________
SeaBIOS mailing list -- seabios@seabios.org
To unsubscribe send an email to seabios-leave@seabios.org