git: d1f351fcb22f - main - libsa: smbios: probe: BCD revision parsing is v2-only code; Expand comments
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 11 Mar 2025 14:04:41 UTC
The branch main has been updated by olce:
URL: https://cgit.FreeBSD.org/src/commit/?id=d1f351fcb22f46805ff0a0cecf6ce787f84d31d5
commit d1f351fcb22f46805ff0a0cecf6ce787f84d31d5
Author: Olivier Certner <olce@FreeBSD.org>
AuthorDate: 2025-03-03 14:30:16 +0000
Commit: Olivier Certner <olce@FreeBSD.org>
CommitDate: 2025-03-11 13:54:08 +0000
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
---
stand/libsa/smbios.c | 25 ++++++++++++++++---------
1 file 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);
}