On Thu, 25 Sep 2025 10:40:12 -0600, Jerry Hoemann wrote:
> Physical Attribute Information.
>
> Signed-off-by: Jerry Hoemann <[email protected]>
> ---
> dmioem.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 48 insertions(+)
>
> diff --git a/dmioem.c b/dmioem.c
> index 051fd09..b8eac5c 100644
> --- a/dmioem.c
> +++ b/dmioem.c
> @@ -1594,6 +1594,54 @@ static int dmi_decode_hp(const struct dmi_header *h)
> dmi_hp_224_chipid(WORD(data + 0x0a));
> break;
>
> + case 226:
> + /*
> + * Vendor Specific: Physical Attribute Information
> + *
> + * This OEM SMBIOS Record is used to communicate
> physical attributes of the
> + * system for which virtual values have been stored in
> the standard SMBIOS
> + * fields. This Record was initially created for the
> SYNERGY project. This
> + * SMBIOS Record's definition is intended to be
> expanded as needed if any
> + * future physical attributes stored in industry
> standard SMBIOS fields
> + * must be replaced by virtual values. It is intended
> that the format of
> + * the fields in this SMBIOS record match the format of
> the fields in the
> + * corresponding industry standard SMBIOS Records. For
> example, the UUID
> + * field is stored as a 16-byte value and the Serial
> Number is stored as a
> + * String field. Software should not make any
> assumptions on the overall
> + * length of this record as it is intended to grow in
> length if necessary.
> + * Software should utilize the same mechanisms for
> retrieving string fields
> + * as are defined for accessing string fields in the
> industry standard
> + * SMBIOS records. It is intended that these fields
> will ALWAYS contain
> + * the implemented physical attribute values whether or
> not the industry
> + * standard SMBIOS fields include the physical or
> virtual values.
> + *
> + * This structure exists to store physical attributes
> for which virtual
> + * attributes have been stored in the industry standard
> SMBIOS fields
> + * which would normally store these physical
> attributes. This OEM SMBIOS
> + * Record was initially defined for the SYNERGY project
> where it was
> + * required that a virtual serial number and UUID be
> applied to the
> + * system. These virtual values must be stored in the
> standard SMBIOS
> + * fields so that industry standard software would
> detect these virtual
> + * values, allowing a workload to transition from one
> physical piece of
> + * hardware to another. This Record was created because
> a place was needed
> + * to store the physical attributes (serial number and
> UUID) for use in
> + * asset tracking and warranty events.
This second paragraph seems essentially redundant with the first one.
> + *
> + * Offset | Name | Width | Description
> + * -------------------------------------
> + * 0x00 | Type | BYTE | 0xE2, Physical Attribute
> + * 0x01 | Length | BYTE | Length of structure
> + * 0x02 | Handle | WORD | Unique handle
> + * 0x04 | UUID |16 BYTE| if !0 => Physical
> Universal Unique ID Number
> + * 0x14 | SN | STRING| Physical Serial Number.
> Match Record Type 1
> + */
> + pr_handle_name("%s Physical Attribut Information",
> company);
Typo: Attribute
> + if (h->length < 0x15) break;
> + if (DWORD(data + 0x08) || DWORD(data + 0x04))
> + pr_attr("UUID", "0x%08x%08x", DWORD(data +
> 0x08), DWORD(data + 0x04));
The code above if incorrect, it prints only 8 bytes, which is half of
the UUID field size.
Also I checked the samples I have and all the byte values were always
within the printable ASCII characters range. So I have the feeling that
the UUID is meant to be printed as an ASCII string, rather than an
hexadecimal number.
> + pr_attr("Serial Number", "%s", dmi_string(h,
> data[0x14]));
> + break;
> +
> case 230:
> /*
> * Vendor Specific: Power Supply Information OEM SMBIOS
> Record
--
Jean Delvare
SUSE L3 Support