diff options
Diffstat (limited to 'src/arch/x86')
-rw-r--r-- | src/arch/x86/smbios.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/arch/x86/smbios.c b/src/arch/x86/smbios.c index da1b711535..582ae8da11 100644 --- a/src/arch/x86/smbios.c +++ b/src/arch/x86/smbios.c @@ -4,6 +4,7 @@ * Copyright (C) 2015 Timothy Pearson <tpearson@raptorengineeringinc.com>, * Raptor Engineering * Copyright (C) 2011 Sven Schnelle <svens@stackframe.org> + * Copyright (C) 2018 Patrick Rudolph <siro@das-labor.org> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -629,6 +630,33 @@ static int smbios_write_type32(unsigned long *current, int handle) return len; } +int smbios_write_type38(unsigned long *current, int *handle, + const enum smbios_bmc_interface_type interface_type, + const u8 ipmi_rev, const u8 i2c_addr, const u8 nv_addr, + const u64 base_addr, const u8 base_modifier, + const u8 irq) +{ + struct smbios_type38 *t = (struct smbios_type38 *)*current; + int len = sizeof(struct smbios_type38); + + memset(t, 0, sizeof(struct smbios_type38)); + t->type = SMBIOS_IPMI_DEVICE_INFORMATION; + t->handle = *handle; + t->length = len - 2; + t->interface_type = interface_type; + t->ipmi_rev = ipmi_rev; + t->i2c_slave_addr = i2c_addr; + t->nv_storage_addr = nv_addr; + t->base_address = base_addr; + t->base_address_modifier = base_modifier; + t->irq = irq; + + *current += len; + *handle += 1; + + return len; +} + int smbios_write_type41(unsigned long *current, int *handle, const char *name, u8 instance, u16 segment, u8 bus, u8 device, u8 function) |