aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Certner <olce@FreeBSD.org>2025-03-03 14:30:16 +0000
committerOlivier Certner <olce@FreeBSD.org>2025-03-11 13:54:08 +0000
commitd1f351fcb22f46805ff0a0cecf6ce787f84d31d5 (patch)
tree4daa1ed26a12cd4f326e8841e1a33eeec154b207
parent3b2303ba3dba4e33ee0866953b4390c5481cac83 (diff)
libsa: smbios: probe: BCD revision parsing is v2-only code; Expand comments
The code parsing the BCD revision is only meaningful on v2, so move it away into the appropriate 'if' branch to ease reading (and to avoid a useless test). Expand comments. In particular, make it clear that setting 'smbios.count' to '-1' removes the limit of the number of structures to parse. No functional change. Reviewed by: imp, markj MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D49284
-rw-r--r--stand/libsa/smbios.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/stand/libsa/smbios.c b/stand/libsa/smbios.c
index c864dc9cdc5b..e726dfeb7af3 100644
--- a/stand/libsa/smbios.c
+++ b/stand/libsa/smbios.c
@@ -567,9 +567,12 @@ smbios_probe(const caddr_t addr)
smbios.length = SMBIOS_GET32(saddr, 0x0c);
/* Structure Table Address */
paddr = SMBIOS_GET64(saddr, 0x10);
- /* not present in V3 */
+ /* Not present in V3, set it to the maximum value (no limit). */
smbios.count = -1;
- /* not present in V3 */
+ /*
+ * No BCD revision in V3, we'll determine the version thanks to
+ * the major and minor fields below.
+ */
smbios.ver = 0;
maj_off = 0x07;
min_off = 0x08;
@@ -580,22 +583,26 @@ smbios_probe(const caddr_t addr)
smbios.length = SMBIOS_GET16(saddr, 0x16);
/* Structure Table Address */
paddr = SMBIOS_GET32(saddr, 0x18);
- /* No of SMBIOS Structures */
+ /* No. of SMBIOS Structures */
smbios.count = SMBIOS_GET16(saddr, 0x1c);
/* SMBIOS BCD Revision */
smbios.ver = SMBIOS_GET8(saddr, 0x1e);
+ if (smbios.ver != 0) {
+ smbios.major = smbios.ver >> 4;
+ smbios.minor = smbios.ver & 0x0f;
+ if (smbios.major > 9 || smbios.minor > 9)
+ smbios.ver = 0;
+ }
maj_off = 0x06;
min_off = 0x07;
}
- if (smbios.ver != 0) {
- smbios.major = smbios.ver >> 4;
- smbios.minor = smbios.ver & 0x0f;
- if (smbios.major > 9 || smbios.minor > 9)
- smbios.ver = 0;
- }
if (smbios.ver == 0) {
+ /*
+ * v3 table, or v2 with BCD revision being 0 or bad. Use the
+ * major and minor version fields.
+ */
smbios.major = SMBIOS_GET8(saddr, maj_off);
smbios.minor = SMBIOS_GET8(saddr, min_off);
}