mirror of https://github.com/ipxe/ipxe.git
[smbios] Provide SMBIOS version number via smbios_version()
Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/13/head
parent
2ec0c1ea48
commit
4f742bcd95
|
@ -77,6 +77,8 @@ static int bios_find_smbios ( struct smbios *smbios ) {
|
|||
smbios->address = phys_to_user ( u.entry.smbios_address );
|
||||
smbios->len = u.entry.smbios_len;
|
||||
smbios->count = u.entry.smbios_count;
|
||||
smbios->version =
|
||||
SMBIOS_VERSION ( u.entry.major, u.entry.minor );
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -148,8 +148,19 @@ struct smbios {
|
|||
size_t len;
|
||||
/** Number of SMBIOS structures */
|
||||
unsigned int count;
|
||||
/** SMBIOS version */
|
||||
uint16_t version;
|
||||
};
|
||||
|
||||
/**
|
||||
* Calculate SMBIOS version
|
||||
*
|
||||
* @v major Major version
|
||||
* @v minor Minor version
|
||||
* @ret version SMBIOS version
|
||||
*/
|
||||
#define SMBIOS_VERSION( major, minor ) ( ( (major) << 8 ) | (minor) )
|
||||
|
||||
extern int find_smbios ( struct smbios *smbios );
|
||||
extern int find_smbios_structure ( unsigned int type,
|
||||
struct smbios_structure *structure );
|
||||
|
@ -158,5 +169,6 @@ extern int read_smbios_structure ( struct smbios_structure *structure,
|
|||
extern int read_smbios_string ( struct smbios_structure *structure,
|
||||
unsigned int index,
|
||||
void *data, size_t len );
|
||||
extern int smbios_version ( void );
|
||||
|
||||
#endif /* _IPXE_SMBIOS_H */
|
||||
|
|
|
@ -55,6 +55,8 @@ static int efi_find_smbios ( struct smbios *smbios ) {
|
|||
smbios->address = phys_to_user ( smbios_entry->smbios_address );
|
||||
smbios->len = smbios_entry->smbios_len;
|
||||
smbios->count = smbios_entry->smbios_count;
|
||||
smbios->version =
|
||||
SMBIOS_VERSION ( smbios_entry->major, smbios_entry->minor );
|
||||
DBG ( "Found SMBIOS v%d.%d entry point at %p (%x+%zx)\n",
|
||||
smbios_entry->major, smbios_entry->minor, smbios_entry,
|
||||
smbios_entry->smbios_address, smbios->len );
|
||||
|
|
|
@ -179,3 +179,20 @@ int read_smbios_string ( struct smbios_structure *structure,
|
|||
DBG ( "SMBIOS string index %d not found\n", index );
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get SMBIOS version
|
||||
*
|
||||
* @ret version Version, or negative error
|
||||
*/
|
||||
int smbios_version ( void ) {
|
||||
int rc;
|
||||
|
||||
/* Find SMBIOS */
|
||||
if ( ( smbios.address == UNULL ) &&
|
||||
( ( rc = find_smbios ( &smbios ) ) != 0 ) )
|
||||
return rc;
|
||||
assert ( smbios.address != UNULL );
|
||||
|
||||
return smbios.version;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue