Skip to content

Commit

Permalink
efistub/smbios: Simplify SMBIOS enumeration API
Browse files Browse the repository at this point in the history
Update the efi_get_smbios_string() macro to take a pointer to the entire
record struct rather than the header. This removes the need to pass the
type explicitly, as it can be inferred from the typed pointer. Also,
drop 'type' from the prototype of __efi_get_smbios_string(), as it is
never referenced.

Signed-off-by: Ard Biesheuvel <[email protected]>
  • Loading branch information
ardbiesheuvel committed Jul 1, 2024
1 parent 37aee82 commit 0dad9ee
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 9 deletions.
3 changes: 1 addition & 2 deletions drivers/firmware/efi/libstub/arm64.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,7 @@ static bool system_needs_vamap(void)
static char const emag[] = "eMAG";

default:
version = efi_get_smbios_string(&record->header, 4,
processor_version);
version = efi_get_smbios_string(record, processor_version);
if (!version || (strncmp(version, altra, sizeof(altra) - 1) &&
strncmp(version, emag, sizeof(emag) - 1)))
break;
Expand Down
9 changes: 4 additions & 5 deletions drivers/firmware/efi/libstub/efistub.h
Original file line number Diff line number Diff line change
Expand Up @@ -1204,14 +1204,13 @@ struct efi_smbios_type4_record {
u16 thread_enabled;
};

#define efi_get_smbios_string(__record, __type, __name) ({ \
int off = offsetof(struct efi_smbios_type ## __type ## _record, \
__name); \
__efi_get_smbios_string((__record), __type, off); \
#define efi_get_smbios_string(__record, __field) ({ \
__typeof__(__record) __rec = __record; \
__efi_get_smbios_string(&__rec->header, &__rec->__field); \
})

const u8 *__efi_get_smbios_string(const struct efi_smbios_record *record,
u8 type, int offset);
const u8 *offset);

void efi_remap_image(unsigned long image_base, unsigned alloc_size,
unsigned long code_size);
Expand Down
4 changes: 2 additions & 2 deletions drivers/firmware/efi/libstub/smbios.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,15 @@ const struct efi_smbios_record *efi_get_smbios_record(u8 type)
}

const u8 *__efi_get_smbios_string(const struct efi_smbios_record *record,
u8 type, int offset)
const u8 *offset)
{
const u8 *strtable;

if (!record)
return NULL;

strtable = (u8 *)record + record->length;
for (int i = 1; i < ((u8 *)record)[offset]; i++) {
for (int i = 1; i < *offset; i++) {
int len = strlen(strtable);

if (!len)
Expand Down

0 comments on commit 0dad9ee

Please sign in to comment.