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

Reply via email to