Add a module for retrieving SMBIOS information

Message ID 20150202224855.GT4278@bivouac.eciton.net
State New
Headers show

Commit Message

Leif Lindholm Feb. 2, 2015, 10:48 p.m.
On Mon, Feb 02, 2015 at 05:01:32PM -0500, David Michael wrote:
> >> There was some interest on help-grub about supporting SMBIOS access
> >> upstream.  I've updated the module I wrote a while ago to work with
> >> current GRUB and added documentation.  Is this acceptable to be applied?
> >> Are there any comments or suggestions for improvement?
> >
> > Any particular reason for making it x86-only?
> > Since the code correctly does _not_ scan memory for the tables on any
> > EFI system, this should work without modification on arm/arm64 too.
> 
> It's marked as x86-only mostly because that's all I've tried, and I
> didn't want to accidentally break builds for other configurations.  I
> don't have any ARM hardware for testing the module.  Maybe an emulator
> would suffice; I'll have to look into it.
> 
> Are you able to try the module with an ARM system?  I'd be happy to
> update the patch with your suggested changes if it works.

I have a software model with some dummy tables, and with one
modification (below - one I think will be necessary for amd64 too),
the command seems to be functional.

I'm hoping we'll get around to implementing SMBIOS support for arm64
QEMU shortly, so that these things will be easier for others to
test. Or if you'd be interested, I could show you how to test it on
the ARM Foundation Model.

/
    Leif


   grub_uint16_t structure = 0;

Patch

diff --git a/grub-core/commands/i386/smbios.c
b/grub-core/commands/i386/smbios.c
index 25f20fe..40dae88 100644
--- a/grub-core/commands/i386/smbios.c
+++ b/grub-core/commands/i386/smbios.c
@@ -164,7 +164,7 @@  grub_smbios_match_entry (const struct
grub_smbios_eps *ep,
                          const grub_uint16_t match,
                          const grub_uint8_t print)
 {
-  grub_uint32_t table_address = ep->intermediate.table_address;
+  grub_addr_t table_address = ep->intermediate.table_address;
   grub_uint16_t table_length = ep->intermediate.table_length;
   grub_uint16_t structures = ep->intermediate.structures;