iPXE
efi_smbios.c
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2008 Michael Brown <mbrown@fensystems.co.uk>.
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License as
6  * published by the Free Software Foundation; either version 2 of the
7  * License, or any later version.
8  *
9  * This program is distributed in the hope that it will be useful, but
10  * WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17  * 02110-1301, USA.
18  */
19 
20 FILE_LICENCE ( GPL2_OR_LATER );
21 
22 #include <errno.h>
23 #include <ipxe/smbios.h>
24 #include <ipxe/efi/efi.h>
25 #include <ipxe/efi/Guid/SmBios.h>
26 
27 /** @file
28  *
29  * iPXE SMBIOS API for EFI
30  *
31  */
32 
33 /** SMBIOS configuration table */
34 static struct smbios_entry *smbios_entry;
35 EFI_USE_TABLE ( SMBIOS_TABLE, &smbios_entry, 0 );
36 
37 /**
38  * Find SMBIOS
39  *
40  * @v smbios SMBIOS entry point descriptor structure to fill in
41  * @ret rc Return status code
42  */
43 static int efi_find_smbios ( struct smbios *smbios ) {
44 
45  if ( ! smbios_entry ) {
46  DBG ( "No SMBIOS table provided\n" );
47  return -ENODEV;
48  }
49 
51  DBG ( "Invalid SMBIOS signature\n" );
52  return -ENODEV;
53  }
54 
58  smbios->version =
60  DBG ( "Found SMBIOS v%d.%d entry point at %p (%x+%zx)\n",
63 
64  return 0;
65 }
66 
uint32_t signature
Signature.
Definition: smbios.h:49
#define SMBIOS_SIGNATURE
Signature for SMBIOS entry point.
Definition: smbios.h:35
unsigned int count
Number of SMBIOS structures.
Definition: smbios.h:170
Error codes.
size_t len
Length of SMBIOS structures.
Definition: smbios.h:168
userptr_t phys_to_user(unsigned long phys_addr)
Convert physical address to user pointer.
SMBIOS entry point descriptor.
Definition: smbios.h:164
int find_smbios(struct smbios *smbios)
uint16_t version
SMBIOS version.
Definition: smbios.h:172
PROVIDE_SMBIOS(efi, find_smbios, efi_find_smbios)
uint16_t smbios_len
Structure table length.
Definition: smbios.h:69
SMBIOS entry point.
Definition: smbios.h:44
uint32_t smbios_address
Structure table address.
Definition: smbios.h:71
#define SMBIOS_VERSION(major, minor)
Calculate SMBIOS version.
Definition: smbios.h:182
static struct smbios_entry * smbios_entry
SMBIOS configuration table.
Definition: efi_smbios.c:34
#define ENODEV
No such device.
Definition: errno.h:509
EFI_USE_TABLE(SMBIOS_TABLE, &smbios_entry, 0)
FILE_LICENCE(GPL2_OR_LATER)
uint16_t smbios_count
Number of SMBIOS structures.
Definition: smbios.h:73
EFI API.
System Management BIOS.
static int efi_find_smbios(struct smbios *smbios)
Find SMBIOS.
Definition: efi_smbios.c:43
uint8_t minor
Minor version.
Definition: smbios.h:57
GUIDs used to locate the SMBIOS tables in the UEFI 2.5 system table.
userptr_t address
Start of SMBIOS structures.
Definition: smbios.h:166
#define DBG(...)
Print a debugging message.
Definition: compiler.h:498
uint8_t major
Major version.
Definition: smbios.h:55