123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- #ifndef _GPXE_SMBIOS_H
- #define _GPXE_SMBIOS_H
-
- /** @file
- *
- * System Management BIOS
- *
- */
-
- FILE_LICENCE ( GPL2_OR_LATER );
-
- #include <stdint.h>
- #include <gpxe/api.h>
- #include <config/general.h>
- #include <gpxe/uaccess.h>
-
- /**
- * Provide an SMBIOS API implementation
- *
- * @v _prefix Subsystem prefix
- * @v _api_func API function
- * @v _func Implementing function
- */
- #define PROVIDE_SMBIOS( _subsys, _api_func, _func ) \
- PROVIDE_SINGLE_API ( SMBIOS_PREFIX_ ## _subsys, _api_func, _func )
-
- /* Include all architecture-independent SMBIOS API headers */
- #include <gpxe/efi/efi_smbios.h>
-
- /* Include all architecture-dependent SMBIOS API headers */
- #include <bits/smbios.h>
-
- /** Signature for SMBIOS entry point */
- #define SMBIOS_SIGNATURE \
- ( ( '_' << 0 ) + ( 'S' << 8 ) + ( 'M' << 16 ) + ( '_' << 24 ) )
-
- /**
- * SMBIOS entry point
- *
- * This is the single table which describes the list of SMBIOS
- * structures. It is located by scanning through the BIOS segment.
- */
- struct smbios_entry {
- /** Signature
- *
- * Must be equal to SMBIOS_SIGNATURE
- */
- uint32_t signature;
- /** Checksum */
- uint8_t checksum;
- /** Length */
- uint8_t len;
- /** Major version */
- uint8_t major;
- /** Minor version */
- uint8_t minor;
- /** Maximum structure size */
- uint16_t max;
- /** Entry point revision */
- uint8_t revision;
- /** Formatted area */
- uint8_t formatted[5];
- /** DMI Signature */
- uint8_t dmi_signature[5];
- /** DMI checksum */
- uint8_t dmi_checksum;
- /** Structure table length */
- uint16_t smbios_len;
- /** Structure table address */
- uint32_t smbios_address;
- /** Number of SMBIOS structures */
- uint16_t smbios_count;
- /** BCD revision */
- uint8_t bcd_revision;
- } __attribute__ (( packed ));
-
- /** 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
-
- /** SMBIOS enclosure information structure */
- struct smbios_enclosure_information {
- /** SMBIOS structure header */
- struct smbios_header header;
- /** Manufacturer string */
- uint8_t manufacturer;
- /** Type string */
- uint8_t type;
- /** Version string */
- uint8_t version;
- /** Serial number string */
- uint8_t serial;
- /** Asset tag */
- uint8_t asset_tag;
- } __attribute__ (( packed ));
-
- /** SMBIOS enclosure information structure type */
- #define SMBIOS_TYPE_ENCLOSURE_INFORMATION 3
-
- /**
- * SMBIOS entry point descriptor
- *
- * This contains the information from the SMBIOS entry point that we
- * care about.
- */
- struct smbios {
- /** Start of SMBIOS structures */
- userptr_t address;
- /** Length of SMBIOS structures */
- size_t len;
- /** Number of SMBIOS structures */
- unsigned int count;
- };
-
- extern int find_smbios ( struct smbios *smbios );
- 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 /* _GPXE_SMBIOS_H */
|