mirror of
https://github.com/ipxe/ipxe
synced 2025-12-25 00:17:57 +03:00
[efi] Use EFI-native mechanism for accessing SMBIOS table
EFI provides a copy of the SMBIOS table accessible via the EFI system table, which we should use instead of manually scanning through the F000:0000 segment.
This commit is contained in:
@@ -9,10 +9,9 @@
|
||||
#define ERRFILE_memtop_umalloc ( ERRFILE_ARCH | ERRFILE_CORE | 0x00000000 )
|
||||
#define ERRFILE_memmap ( ERRFILE_ARCH | ERRFILE_CORE | 0x00010000 )
|
||||
#define ERRFILE_pnpbios ( ERRFILE_ARCH | ERRFILE_CORE | 0x00020000 )
|
||||
#define ERRFILE_smbios ( ERRFILE_ARCH | ERRFILE_CORE | 0x00030000 )
|
||||
#define ERRFILE_bios_smbios ( ERRFILE_ARCH | ERRFILE_CORE | 0x00030000 )
|
||||
#define ERRFILE_biosint ( ERRFILE_ARCH | ERRFILE_CORE | 0x00040000 )
|
||||
#define ERRFILE_int13 ( ERRFILE_ARCH | ERRFILE_CORE | 0x00050000 )
|
||||
#define ERRFILE_smbios_settings ( ERRFILE_ARCH | ERRFILE_CORE | 0x00060000 )
|
||||
|
||||
#define ERRFILE_bootsector ( ERRFILE_ARCH | ERRFILE_IMAGE | 0x00000000 )
|
||||
#define ERRFILE_bzimage ( ERRFILE_ARCH | ERRFILE_IMAGE | 0x00010000 )
|
||||
|
||||
12
src/arch/i386/include/bits/smbios.h
Normal file
12
src/arch/i386/include/bits/smbios.h
Normal file
@@ -0,0 +1,12 @@
|
||||
#ifndef _BITS_SMBIOS_H
|
||||
#define _BITS_SMBIOS_H
|
||||
|
||||
/** @file
|
||||
*
|
||||
* i386-specific SMBIOS API implementations
|
||||
*
|
||||
*/
|
||||
|
||||
#include <gpxe/bios_smbios.h>
|
||||
|
||||
#endif /* _BITS_SMBIOS_H */
|
||||
16
src/arch/i386/include/gpxe/bios_smbios.h
Normal file
16
src/arch/i386/include/gpxe/bios_smbios.h
Normal file
@@ -0,0 +1,16 @@
|
||||
#ifndef _GPXE_BIOS_SMBIOS_H
|
||||
#define _GPXE_BIOS_SMBIOS_H
|
||||
|
||||
/** @file
|
||||
*
|
||||
* Standard PC-BIOS SMBIOS interface
|
||||
*
|
||||
*/
|
||||
|
||||
#ifdef SMBIOS_PCBIOS
|
||||
#define SMBIOS_PREFIX_pcbios
|
||||
#else
|
||||
#define SMBIOS_PREFIX_pcbios __pcbios_
|
||||
#endif
|
||||
|
||||
#endif /* _GPXE_BIOS_SMBIOS_H */
|
||||
@@ -1,60 +0,0 @@
|
||||
#ifndef _SMBIOS_H
|
||||
#define _SMBIOS_H
|
||||
|
||||
/** @file
|
||||
*
|
||||
* System Management BIOS
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
/** An SMBIOS structure header */
|
||||
struct smbios_header {
|
||||
/** Type */
|
||||
uint8_t type;
|
||||
/** Length */
|
||||
uint8_t len;
|
||||
/** Handle */
|
||||
uint16_t handle;
|
||||
} __attribute__ (( packed ));
|
||||
|
||||
/** SMBIOS structure descriptor */
|
||||
struct smbios_structure {
|
||||
/** Copy of SMBIOS structure header */
|
||||
struct smbios_header header;
|
||||
/** Offset of structure within SMBIOS */
|
||||
size_t offset;
|
||||
/** Length of strings section */
|
||||
size_t strings_len;
|
||||
};
|
||||
|
||||
/** SMBIOS system information structure */
|
||||
struct smbios_system_information {
|
||||
/** SMBIOS structure header */
|
||||
struct smbios_header header;
|
||||
/** Manufacturer string */
|
||||
uint8_t manufacturer;
|
||||
/** Product string */
|
||||
uint8_t product;
|
||||
/** Version string */
|
||||
uint8_t version;
|
||||
/** Serial number string */
|
||||
uint8_t serial;
|
||||
/** UUID */
|
||||
uint8_t uuid[16];
|
||||
/** Wake-up type */
|
||||
uint8_t wakeup;
|
||||
} __attribute__ (( packed ));
|
||||
|
||||
/** SMBIOS system information structure type */
|
||||
#define SMBIOS_TYPE_SYSTEM_INFORMATION 1
|
||||
|
||||
extern int find_smbios_structure ( unsigned int type,
|
||||
struct smbios_structure *structure );
|
||||
extern int read_smbios_structure ( struct smbios_structure *structure,
|
||||
void *data, size_t len );
|
||||
extern int read_smbios_string ( struct smbios_structure *structure,
|
||||
unsigned int index,
|
||||
void *data, size_t len );
|
||||
|
||||
#endif /* _SMBIOS_H */
|
||||
Reference in New Issue
Block a user