In DMI type 0, there is several fields that encodes a release.
The dmi_save_release() function have the logic to check if the field is valid.
If so, it reports the actual value.

Signed-off-by: Erwan Velu <[email protected]>
---
 drivers/firmware/dmi_scan.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c
index 35ed56b9c34f..202bd2c69d0f 100644
--- a/drivers/firmware/dmi_scan.c
+++ b/drivers/firmware/dmi_scan.c
@@ -181,6 +181,32 @@ static void __init dmi_save_ident(const struct dmi_header 
*dm, int slot,
        dmi_ident[slot] = p;
 }
 
+static void __init dmi_save_release(const struct dmi_header *dm, int slot,
+               int index)
+{
+       const u8 *d;
+       char *s;
+
+       // If the table doesn't have the field, let's return
+       if (dmi_ident[slot] || dm->length < index)
+               return;
+
+       d = (u8 *) dm + index;
+
+       // As per the specification,
+       // if the system doesn't have the field, the value is FF
+       if (d[0] == 0xFF)
+               return;
+
+       s = dmi_alloc(4);
+       if (!s)
+               return;
+
+       sprintf(s, "%u", d[0]);
+
+       dmi_ident[slot] = s;
+}
+
 static void __init dmi_save_uuid(const struct dmi_header *dm, int slot,
                int index)
 {
-- 
2.21.0

Reply via email to