diff options
Diffstat (limited to 'sysutils/dmidecode')
-rw-r--r-- | sysutils/dmidecode/Makefile | 1 | ||||
-rw-r--r-- | sysutils/dmidecode/files/patch-dmidecode.c | 58 |
2 files changed, 59 insertions, 0 deletions
diff --git a/sysutils/dmidecode/Makefile b/sysutils/dmidecode/Makefile index 0f2343bfbeaa..ead39913f2c4 100644 --- a/sysutils/dmidecode/Makefile +++ b/sysutils/dmidecode/Makefile @@ -3,6 +3,7 @@ PORTNAME= dmidecode PORTVERSION= 3.1 +PORTREVISION= 1 CATEGORIES= sysutils MASTER_SITES= SAVANNAH diff --git a/sysutils/dmidecode/files/patch-dmidecode.c b/sysutils/dmidecode/files/patch-dmidecode.c new file mode 100644 index 000000000000..293a5e205967 --- /dev/null +++ b/sysutils/dmidecode/files/patch-dmidecode.c @@ -0,0 +1,58 @@ +--- dmidecode.c.orig 2017-05-23 13:34:14 UTC ++++ dmidecode.c +@@ -58,6 +58,10 @@ + * https://trustedcomputinggroup.org/pc-client-platform-tpm-profile-ptp-specification/ + */ + ++#ifdef __FreeBSD__ ++#include <errno.h> ++#include <kenv.h> ++#endif + #include <stdio.h> + #include <string.h> + #include <strings.h> +@@ -4934,13 +4938,18 @@ static int legacy_decode(u8 *buf, const + #define EFI_NO_SMBIOS (-2) + static int address_from_efi(off_t *address) + { ++#if defined(__linux__) + FILE *efi_systab; + const char *filename; + char linebuf[64]; ++#elif defined(__FreeBSD__) ++ char addrstr[KENV_MVALLEN + 1]; ++#endif + int ret; + + *address = 0; /* Prevent compiler warning */ + ++#if defined(__linux__) + /* + * Linux up to 2.6.6: /proc/efi/systab + * Linux 2.6.7 and up: /sys/firmware/efi/systab +@@ -4973,6 +4982,25 @@ static int address_from_efi(off_t *addre + if (ret == EFI_NO_SMBIOS) + fprintf(stderr, "%s: SMBIOS entry point missing\n", filename); + return ret; ++#elif defined(__FreeBSD__) ++ /* ++ * On FreeBSD, SMBIOS anchor base address in UEFI mode is exposed ++ * via kernel environment: ++ * https://svnweb.freebsd.org/base?view=revision&revision=307326 ++ */ ++ ret = kenv(KENV_GET, "hint.smbios.0.mem", addrstr, sizeof(addrstr)); ++ if (ret == -1) { ++ if (errno != ENOENT) ++ perror("kenv"); ++ return EFI_NOT_FOUND; ++ } ++ ++ *address = strtoull(addrstr, NULL, 0); ++ if (!(opt.flags & FLAG_QUIET)) ++ printf("# SMBIOS entry point at 0x%08llx\n", ++ (unsigned long long)*address); ++ return 0; ++#endif + } + + int main(int argc, char * const argv[]) |