mirror of
https://github.com/ipxe/ipxe
synced 2025-12-23 21:41:43 +03:00
[smbios] Provide SMBIOS version number via smbios_version()
Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -77,6 +77,8 @@ static int bios_find_smbios ( struct smbios *smbios ) {
|
|||||||
smbios->address = phys_to_user ( u.entry.smbios_address );
|
smbios->address = phys_to_user ( u.entry.smbios_address );
|
||||||
smbios->len = u.entry.smbios_len;
|
smbios->len = u.entry.smbios_len;
|
||||||
smbios->count = u.entry.smbios_count;
|
smbios->count = u.entry.smbios_count;
|
||||||
|
smbios->version =
|
||||||
|
SMBIOS_VERSION ( u.entry.major, u.entry.minor );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -148,8 +148,19 @@ struct smbios {
|
|||||||
size_t len;
|
size_t len;
|
||||||
/** Number of SMBIOS structures */
|
/** Number of SMBIOS structures */
|
||||||
unsigned int count;
|
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 ( struct smbios *smbios );
|
||||||
extern int find_smbios_structure ( unsigned int type,
|
extern int find_smbios_structure ( unsigned int type,
|
||||||
struct smbios_structure *structure );
|
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,
|
extern int read_smbios_string ( struct smbios_structure *structure,
|
||||||
unsigned int index,
|
unsigned int index,
|
||||||
void *data, size_t len );
|
void *data, size_t len );
|
||||||
|
extern int smbios_version ( void );
|
||||||
|
|
||||||
#endif /* _IPXE_SMBIOS_H */
|
#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->address = phys_to_user ( smbios_entry->smbios_address );
|
||||||
smbios->len = smbios_entry->smbios_len;
|
smbios->len = smbios_entry->smbios_len;
|
||||||
smbios->count = smbios_entry->smbios_count;
|
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",
|
DBG ( "Found SMBIOS v%d.%d entry point at %p (%x+%zx)\n",
|
||||||
smbios_entry->major, smbios_entry->minor, smbios_entry,
|
smbios_entry->major, smbios_entry->minor, smbios_entry,
|
||||||
smbios_entry->smbios_address, smbios->len );
|
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 );
|
DBG ( "SMBIOS string index %d not found\n", index );
|
||||||
return -ENOENT;
|
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;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user