Index: stand/libsa/smbios.c =================================================================== --- stand/libsa/smbios.c +++ stand/libsa/smbios.c @@ -209,6 +209,124 @@ #endif +static void +smbios_parse_chassis_type(caddr_t addr) +{ + int type; + + type = SMBIOS_GET8(addr, 0x5); + switch (type) { + case 0x1: + setenv("smbios.chassis.type", "Other", 1); + break; + case 0x2: + setenv("smbios.chassis.type", "Unknown", 1); + break; + case 0x3: + setenv("smbios.chassis.type", "Desktop", 1); + break; + case 0x4: + setenv("smbios.chassis.type", "Low Profile Desktop", 1); + break; + case 0x5: + setenv("smbios.chassis.type", "Pizza Box", 1); + break; + case 0x6: + setenv("smbios.chassis.type", "Mini Tower", 1); + break; + case 0x7: + setenv("smbios.chassis.type", "Tower", 1); + break; + case 0x8: + setenv("smbios.chassis.type", "Portable", 1); + break; + case 0x9: + setenv("smbios.chassis.type", "Laptop", 1); + break; + case 0xA: + setenv("smbios.chassis.type", "Notebook", 1); + break; + case 0xB: + setenv("smbios.chassis.type", "Hand Held", 1); + break; + case 0xC: + setenv("smbios.chassis.type", "Docking Station", 1); + break; + case 0xD: + setenv("smbios.chassis.type", "All in One", 1); + break; + case 0xE: + setenv("smbios.chassis.type", "Sub Notebook", 1); + break; + case 0xF: + setenv("smbios.chassis.type", "Lunch Box", 1); + break; + case 0x10: + setenv("smbios.chassis.type", "Space-saving", 1); + break; + case 0x11: + setenv("smbios.chassis.type", "Main Server Chassis", 1); + break; + case 0x12: + setenv("smbios.chassis.type", "Expansion Chassis", 1); + break; + case 0x13: + setenv("smbios.chassis.type", "SubChassis", 1); + break; + case 0x14: + setenv("smbios.chassis.type", "Bus Expansion Chassis", 1); + break; + case 0x15: + setenv("smbios.chassis.type", "Peripheral Chassis", 1); + break; + case 0x16: + setenv("smbios.chassis.type", "RAID Chassis", 1); + break; + case 0x17: + setenv("smbios.chassis.type", "Rack Mount Chassis", 1); + break; + case 0x18: + setenv("smbios.chassis.type", "Sealed-case PC", 1); + break; + case 0x19: + setenv("smbios.chassis.type", "Multi-system chassis", 1); + break; + case 0x1A: + setenv("smbios.chassis.type", "Compact PCI", 1); + break; + case 0x1B: + setenv("smbios.chassis.type", "Advanced TCA", 1); + break; + case 0x1C: + setenv("smbios.chassis.type", "Blade", 1); + break; + case 0x1D: + setenv("smbios.chassis.type", "Blade Enclosure", 1); + break; + case 0x1E: + setenv("smbios.chassis.type", "Tablet", 1); + break; + case 0x1F: + setenv("smbios.chassis.type", "Convertible", 1); + break; + case 0x20: + setenv("smbios.chassis.type", "Detachable", 1); + break; + case 0x21: + setenv("smbios.chassis.type", "IoT Gateway", 1); + break; + case 0x22: + setenv("smbios.chassis.type", "Embedded PC", 1); + break; + case 0x23: + setenv("smbios.chassis.type", "Mini PC", 1); + break; + case 0x24: + setenv("smbios.chassis.type", "Stick PC", 1); + break; + } +} + static caddr_t smbios_parse_table(const caddr_t addr) { @@ -251,6 +369,7 @@ case 3: /* 3.3.4 System Enclosure or Chassis (Type 3) */ smbios_setenv("smbios.chassis.maker", addr, 0x04); + smbios_parse_chassis_type(addr); smbios_setenv("smbios.chassis.version", addr, 0x06); #ifdef SMBIOS_SERIAL_NUMBERS smbios_setenv("smbios.chassis.serial", addr, 0x07);