git: 0ea19e39ff05 - stable/13 - ipmi,smbios: move smbios_walk_table to smbios.h

From: Eric van Gyzen <vangyzen_at_FreeBSD.org>
Date: Thu, 03 Mar 2022 14:20:40 UTC
The branch stable/13 has been updated by vangyzen:

URL: https://cgit.FreeBSD.org/src/commit/?id=0ea19e39ff050b3267d17a4d5209349b77e0b28c

commit 0ea19e39ff050b3267d17a4d5209349b77e0b28c
Author:     Greg V <greg@unrelenting.technology>
AuthorDate: 2021-04-07 20:05:49 +0000
Commit:     Eric van Gyzen <vangyzen@FreeBSD.org>
CommitDate: 2022-03-03 14:20:07 +0000

    ipmi,smbios: move smbios_walk_table to smbios.h
    
    This function will be used for exposing DMI info as sysctls in the
    smbios module (in an upcoming review).
    
    While here, add __packed to the structs.
    
    Reviewed by:    dab
    MFC after:      1 week
    Sponsored by:   Dell EMC Isilon
    Differential Revision:  https://reviews.freebsd.org/D29270
    
    (cherry picked from commit f689cb23b2782d0d0f586bcfabbad68f728ed1df)
---
 sys/dev/ipmi/ipmi_smbios.c | 29 -----------------------------
 sys/dev/smbios/smbios.h    | 31 +++++++++++++++++++++++++++++--
 2 files changed, 29 insertions(+), 31 deletions(-)

diff --git a/sys/dev/ipmi/ipmi_smbios.c b/sys/dev/ipmi/ipmi_smbios.c
index 308a3b076ef7..a1b953365d7c 100644
--- a/sys/dev/ipmi/ipmi_smbios.c
+++ b/sys/dev/ipmi/ipmi_smbios.c
@@ -79,8 +79,6 @@ struct ipmi_entry {
 #define	SPACING_32		0x1
 #define	SPACING_16		0x2
 
-typedef void (*smbios_callback_t)(struct smbios_structure_header *, void *);
-
 static struct ipmi_get_info ipmi_info;
 static int ipmi_probed;
 static struct mtx ipmi_info_mtx;
@@ -88,8 +86,6 @@ MTX_SYSINIT(ipmi_info, &ipmi_info_mtx, "ipmi info", MTX_DEF);
 
 static void	ipmi_smbios_probe(struct ipmi_get_info *);
 static int	smbios_cksum(struct smbios_eps *);
-static void	smbios_walk_table(uint8_t *, int, smbios_callback_t,
-		    void *);
 static void	smbios_ipmi_info(struct smbios_structure_header *, void *);
 
 static void
@@ -146,31 +142,6 @@ smbios_ipmi_info(struct smbios_structure_header *h, void *arg)
 	info->iface_type = s->interface_type;
 }
 
-static void
-smbios_walk_table(uint8_t *p, int entries, smbios_callback_t cb, void *arg)
-{
-	struct smbios_structure_header *s;
-
-	while (entries--) {
-		s = (struct smbios_structure_header *)p;
-		cb(s, arg);
-
-		/*
-		 * Look for a double-nul after the end of the
-		 * formatted area of this structure.
-		 */
-		p += s->length;
-		while (!(p[0] == 0 && p[1] == 0))
-			p++;
-
-		/*
-		 * Skip over the double-nul to the start of the next
-		 * structure.
-		 */
-		p += 2;
-	}
-}
-
 /*
  * Walk the SMBIOS table looking for an IPMI (type 38) entry.  If we find
  * one, return the parsed data in the passed in ipmi_get_info structure and
diff --git a/sys/dev/smbios/smbios.h b/sys/dev/smbios/smbios.h
index 6503cdb73c4c..ec216b676f2b 100644
--- a/sys/dev/smbios/smbios.h
+++ b/sys/dev/smbios/smbios.h
@@ -56,12 +56,39 @@ struct smbios_eps {
 	uint32_t	structure_table_address;
 	uint16_t	number_structures;
 	uint8_t		BCD_revision;
-};
+} __packed;
 
 struct smbios_structure_header {
 	uint8_t		type;
 	uint8_t		length;
 	uint16_t	handle;
-};
+} __packed;
+
+typedef void (*smbios_callback_t)(struct smbios_structure_header *, void *);
+
+static inline void
+smbios_walk_table(uint8_t *p, int entries, smbios_callback_t cb, void *arg)
+{
+	struct smbios_structure_header *s;
+
+	while (entries--) {
+		s = (struct smbios_structure_header *)p;
+		cb(s, arg);
+
+		/*
+		 * Look for a double-nul after the end of the
+		 * formatted area of this structure.
+		 */
+		p += s->length;
+		while (!(p[0] == 0 && p[1] == 0))
+			p++;
+
+		/*
+		 * Skip over the double-nul to the start of the next
+		 * structure.
+		 */
+		p += 2;
+	}
+}
 
 #endif /* _SMBIOS_H_ */