diff options
Diffstat (limited to 'drivers/firmware/efi/libstub/smbios.c')
| -rw-r--r-- | drivers/firmware/efi/libstub/smbios.c | 15 | 
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/firmware/efi/libstub/smbios.c b/drivers/firmware/efi/libstub/smbios.c index 460418b7f5f5..c217de2cc8d5 100644 --- a/drivers/firmware/efi/libstub/smbios.c +++ b/drivers/firmware/efi/libstub/smbios.c @@ -22,21 +22,30 @@ struct efi_smbios_protocol {  	u8 minor_version;  }; -const u8 *__efi_get_smbios_string(u8 type, int offset, int recsize) +const struct efi_smbios_record *efi_get_smbios_record(u8 type)  {  	struct efi_smbios_record *record;  	efi_smbios_protocol_t *smbios;  	efi_status_t status;  	u16 handle = 0xfffe; -	const u8 *strtable;  	status = efi_bs_call(locate_protocol, &EFI_SMBIOS_PROTOCOL_GUID, NULL,  			     (void **)&smbios) ?:  		 efi_call_proto(smbios, get_next, &handle, &type, &record, NULL);  	if (status != EFI_SUCCESS)  		return NULL; +	return record; +} + +const u8 *__efi_get_smbios_string(const struct efi_smbios_record *record, +				  u8 type, int offset) +{ +	const u8 *strtable; + +	if (!record) +		return NULL; -	strtable = (u8 *)record + recsize; +	strtable = (u8 *)record + record->length;  	for (int i = 1; i < ((u8 *)record)[offset]; i++) {  		int len = strlen(strtable);  |