Add PCIe Riser.

Signed-off-by: Jerry Hoemann <jerry.hoem...@hpe.com>
---
 dmioem.c | 40 ++++++++++++++++++++++++++++++++++++++--
 1 file changed, 38 insertions(+), 2 deletions(-)

diff --git a/dmioem.c b/dmioem.c
index d4a49ae..4e02d29 100644
--- a/dmioem.c
+++ b/dmioem.c
@@ -965,6 +965,27 @@ static void dmi_hp_245_pcie_riser(const struct dmi_header 
*h)
        pr_attr("Riser Name", dmi_string(h, data[0x08]));
 }
 
+static void dmi_hp_245_pcie_mhs_riser(const struct dmi_header *h)
+{
+       u8 *data = h->data;
+       u8 i, count;
+       int len = h->length;
+
+       pr_attr("Board Type", "PCIe Riser (MHS Platform)");
+       if (h->length < 0x0B) return;
+       pr_attr("Riser ID", "%d", data[0x05]);
+       if (data[0x06])
+               pr_attr("Firmware Version", "%x.%x", data[0x06], data[0x07]);
+       pr_attr("Downgradable", "%s", data[0x08] & 0x01 ? "Yes" : "No");
+       pr_attr("Riser Name", dmi_string(h, data[0x09]));
+       count = data[0x0A];
+       pr_attr("Slot Count", "%d", count);
+       pr_list_start("Slot IDs", NULL);
+       for (i = 0; (i < count) && ((0x0B + i) < len); i++)
+               pr_list_item("0x%x", data[0x0B + i]);
+       pr_list_end();
+}
+
 static int dmi_decode_hp(const struct dmi_header *h)
 {
        u8 *data = h->data;
@@ -1713,18 +1734,33 @@ static int dmi_decode_hp(const struct dmi_header *h)
                         *  0x00  | Type       | BYTE  | 0xF5, Extension Board 
Inventory Record
                         *  0x01  | Length     | BYTE  | Length of structure
                         *  0x02  | Handle     | WORD  | Unique handle
-                        *  0x04  | Board Type | WORD  | 0: PCIe Riser, Other 
Reserved
+                        *  0x04  | Board Type | WORD  | See below
                         *
                         *  If Board Type == 0
                         *  0x05  | Riser Pos  | WORD  |
                         *  0x06  | Riser ID   | BYTE  |
                         *  0x07  | CPLD Vers  | BTYE  | 0-> No CPLD. Bits 
[7][6:0] Release:Vers
                         *  0x08  | Riser Name | STRING|
+                        *
+                        *  If Board Type == 1
+                        *  0x05  | Riser ID       | BYTE  |
+                        *  0x06  | Riser FW Major | BYTE  |
+                        *  0x07  | Riser FW Minor | BYTE  |
+                        *  0x08  | Misc Attr      | BYTE  |
+                        *  0x09  | Riser Name     | STRING|
+                        *  0x0A  | Slot Count     | BYTE  |
+                        *  0x0B  | Slot ID        | Varies| One per slot
                         */
                        pr_handle_name("%s ProLiant Extension Board Inventory 
Record", company);
                        if (h->length < 0x05) break;
-                       if (data[0x04] == 0)
+                       switch (data[0x04]) {
+                       case 0:
                                dmi_hp_245_pcie_riser(h);
+                               break;
+                       case 1:
+                               dmi_hp_245_pcie_mhs_riser(h);
+                               break;
+                       }
                        break;
 
                default:
-- 
2.47.1


Reply via email to