2011-04-03 17:38:48 +02:00
|
|
|
/* Copyright (c) 2011 Wildfire Games
|
|
|
|
*
|
|
|
|
* Permission is hereby granted, free of charge, to any person obtaining
|
|
|
|
* a copy of this software and associated documentation files (the
|
|
|
|
* "Software"), to deal in the Software without restriction, including
|
|
|
|
* without limitation the rights to use, copy, modify, merge, publish,
|
|
|
|
* distribute, sublicense, and/or sell copies of the Software, and to
|
|
|
|
* permit persons to whom the Software is furnished to do so, subject to
|
|
|
|
* the following conditions:
|
|
|
|
*
|
|
|
|
* The above copyright notice and this permission notice shall be included
|
|
|
|
* in all copies or substantial portions of the Software.
|
|
|
|
*
|
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
|
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
|
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
|
|
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
|
|
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
|
|
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
|
|
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef INCLUDED_SMBIOS
|
|
|
|
#define INCLUDED_SMBIOS
|
|
|
|
|
|
|
|
namespace SMBIOS {
|
|
|
|
|
2011-04-05 11:52:57 +02:00
|
|
|
// to introduce another enumeration:
|
|
|
|
// 1) add its name here
|
|
|
|
// 2) define a <name>_ENUMERATORS macro specifying its enumerators
|
|
|
|
// (prefer lower case to avoid conflicts with macros)
|
|
|
|
#define ENUMERATIONS\
|
|
|
|
ENUMERATION(Status)\
|
|
|
|
ENUMERATION(ECC)\
|
|
|
|
ENUMERATION(SystemWakeUpType)\
|
|
|
|
ENUMERATION(BaseboardFlags)\
|
|
|
|
ENUMERATION(BaseboardType)\
|
|
|
|
ENUMERATION(ChassisType)\
|
|
|
|
ENUMERATION(ChassisSecurityStatus)\
|
|
|
|
ENUMERATION(ProcessorType)\
|
|
|
|
ENUMERATION(ProcessorStatus)\
|
|
|
|
ENUMERATION(ProcessorUpgrade)\
|
|
|
|
ENUMERATION(ProcessorFlags)\
|
|
|
|
ENUMERATION(CacheMode)\
|
|
|
|
ENUMERATION(CacheLocation)\
|
|
|
|
ENUMERATION(CacheConfigurationFlags)\
|
|
|
|
ENUMERATION(CacheFlags)\
|
|
|
|
ENUMERATION(CacheType)\
|
|
|
|
ENUMERATION(CacheAssociativity)\
|
|
|
|
ENUMERATION(PortConnectorType)\
|
|
|
|
ENUMERATION(PortType)\
|
|
|
|
ENUMERATION(SystemSlotType)\
|
|
|
|
ENUMERATION(SystemSlotBusWidth)\
|
|
|
|
ENUMERATION(SystemSlotUsage)\
|
|
|
|
ENUMERATION(SystemSlotLength)\
|
|
|
|
ENUMERATION(SystemSlotFlags1)\
|
|
|
|
ENUMERATION(SystemSlotFlags2)\
|
|
|
|
ENUMERATION(OnBoardDeviceType)\
|
|
|
|
ENUMERATION(MemoryArrayLocation)\
|
|
|
|
ENUMERATION(MemoryArrayUse)\
|
|
|
|
ENUMERATION(MemoryDeviceFormFactor)\
|
|
|
|
ENUMERATION(MemoryDeviceType)\
|
|
|
|
ENUMERATION(MemoryDeviceTypeFlags)\
|
|
|
|
ENUMERATION(PortableBatteryChemistry)\
|
|
|
|
ENUMERATION(VoltageProbeLocation)\
|
|
|
|
ENUMERATION(CoolingDeviceType)\
|
|
|
|
ENUMERATION(TemperatureProbeLocation)\
|
|
|
|
ENUMERATION(SystemBootStatus)
|
|
|
|
|
|
|
|
|
2011-04-03 17:38:48 +02:00
|
|
|
// to introduce another structure:
|
|
|
|
// 1) add its name and ID here
|
2011-04-04 19:44:36 +02:00
|
|
|
// 2) define a <name>_FIELDS macro specifying its fields
|
2011-04-03 17:38:48 +02:00
|
|
|
// 3) (optional) add a specialization of Fixup
|
|
|
|
#define STRUCTURES\
|
|
|
|
STRUCTURE(Bios, 0)\
|
|
|
|
STRUCTURE(System, 1)\
|
|
|
|
STRUCTURE(Baseboard, 2)\
|
|
|
|
STRUCTURE(Chassis, 3)\
|
|
|
|
STRUCTURE(Processor, 4)\
|
|
|
|
/* MemoryController (5) and MemoryModule (6) are obsolete */\
|
|
|
|
STRUCTURE(Cache, 7)\
|
2011-04-04 17:01:40 +02:00
|
|
|
STRUCTURE(PortConnector, 8)\
|
2011-04-03 17:38:48 +02:00
|
|
|
STRUCTURE(SystemSlot, 9)\
|
2011-04-04 17:01:40 +02:00
|
|
|
STRUCTURE(OnBoardDevices, 10)\
|
2011-04-03 17:38:48 +02:00
|
|
|
/* OemStrings (11), SystemConfiguration (12), BiosLanguage (13), GroupAssociations (14), SystemEventLog (15) are optional */\
|
|
|
|
STRUCTURE(MemoryArray, 16)\
|
|
|
|
STRUCTURE(MemoryDevice, 17)\
|
|
|
|
/* MemoryError32 (18) is optional */\
|
|
|
|
STRUCTURE(MemoryArrayMappedAddress, 19)\
|
|
|
|
STRUCTURE(MemoryDeviceMappedAddress, 20)\
|
2011-04-04 17:01:40 +02:00
|
|
|
/* PointingDevice (21) is optional */\
|
|
|
|
STRUCTURE(PortableBattery, 22)\
|
|
|
|
/* SystemReset (23), HardwareSecurity (24), SystemPowerControls (25) are optional */\
|
|
|
|
STRUCTURE(VoltageProbe, 26)\
|
|
|
|
STRUCTURE(CoolingDevice, 27)\
|
|
|
|
STRUCTURE(TemperatureProbe, 28)\
|
2011-04-03 17:38:48 +02:00
|
|
|
/* ElectricalCurrentProbe (29), OutOfBandRemoteAccess (30), BootIntegrityServices (31) are optional */\
|
|
|
|
STRUCTURE(SystemBoot, 32)
|
2011-04-04 17:01:40 +02:00
|
|
|
/* MemoryError64 (33), ManagementDevice (34), ManagementDeviceComponent (35), ManagementDeviceThreshold (36) are optional */
|
|
|
|
/* MemoryChannel (37), IpmiDevice (38), SystemPowerSupply (39), Additional (40), OnboardDevices2 (41) are optional */
|
2011-04-03 17:38:48 +02:00
|
|
|
/* ManagementControllerHostInterface (42) is optional */
|
|
|
|
|
|
|
|
|
|
|
|
// indicates a field (:= member of a structure) is:
|
|
|
|
enum FieldFlags
|
|
|
|
{
|
|
|
|
// computed via other fields (i.e. should not be copied from the SMBIOS data).
|
|
|
|
F_DERIVED = 0x01,
|
|
|
|
|
|
|
|
// not intended for use by applications (usually because it is
|
|
|
|
// superseded by another - possibly derived - field).
|
|
|
|
F_INTERNAL = 0x02,
|
|
|
|
|
|
|
|
// an enum type; we'll read an SMBIOS byte and cast it to this type.
|
|
|
|
// (could also be detected via is_enum, but that requires TR1/C++0x)
|
|
|
|
// (using enum member variables instead of the raw u8 means the debugger
|
|
|
|
// will display the enumerators)
|
|
|
|
F_ENUM = 0x04,
|
|
|
|
|
2011-04-04 18:50:02 +02:00
|
|
|
// a collection of bit flags.
|
2011-04-03 17:38:48 +02:00
|
|
|
F_FLAGS = 0x08,
|
|
|
|
|
2011-04-04 18:50:02 +02:00
|
|
|
// a number that should be displayed in hexadecimal form.
|
|
|
|
F_HEX = 0x20,
|
|
|
|
|
|
|
|
F_SIZE = 0x40
|
2011-04-03 17:38:48 +02:00
|
|
|
};
|
|
|
|
|
2011-04-04 19:44:36 +02:00
|
|
|
|
|
|
|
#pragma pack(push, 1)
|
|
|
|
|
|
|
|
// shared by several structures
|
|
|
|
#define Status_ENUMERATORS\
|
2011-04-05 11:52:57 +02:00
|
|
|
ENUM(other, 1)\
|
|
|
|
ENUM(unknown, 2)\
|
|
|
|
ENUM(ok, 3)\
|
|
|
|
ENUM(noncritical, 4)\
|
|
|
|
ENUM(critical, 5)\
|
|
|
|
ENUM(nonrecoverable, 6)
|
|
|
|
|
|
|
|
#define ECC_ENUMERATORS\
|
|
|
|
ENUM(other, 1)\
|
|
|
|
ENUM(unknown, 2)\
|
|
|
|
ENUM(none, 3)\
|
|
|
|
ENUM(parity, 4)\
|
|
|
|
ENUM(single_bit, 5)\
|
|
|
|
ENUM(multiple_bit, 6)\
|
|
|
|
ENUM(crc, 7)
|
2011-04-03 17:38:48 +02:00
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// Bios
|
|
|
|
|
|
|
|
#define Bios_FIELDS\
|
|
|
|
FIELD(0, const char*, vendor, "")\
|
|
|
|
FIELD(0, const char*, version, "")\
|
2011-04-04 18:50:02 +02:00
|
|
|
FIELD(F_HEX, u16, startSegment, "")\
|
2011-04-03 17:38:48 +02:00
|
|
|
FIELD(0, const char*, releaseDate, "")\
|
2011-04-04 18:50:02 +02:00
|
|
|
FIELD(F_INTERNAL, u8, encodedSize, "")\
|
|
|
|
FIELD(F_HEX, u64, characteristics, "")\
|
|
|
|
/* omit subsequent fields because we can't handle the variable-length characteristics extension */\
|
|
|
|
FIELD(F_DERIVED|F_SIZE, u64, size, "")
|
2011-04-03 17:38:48 +02:00
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// System
|
|
|
|
|
2011-04-04 19:44:36 +02:00
|
|
|
#define SystemWakeUpType_ENUMERATORS\
|
2011-04-05 11:52:57 +02:00
|
|
|
ENUM(other, 1)\
|
|
|
|
ENUM(unknown, 2)\
|
|
|
|
ENUM(apm_timer, 3)\
|
|
|
|
ENUM(modem_ring, 4)\
|
|
|
|
ENUM(lan_remote, 5)\
|
|
|
|
ENUM(power_switch, 6)\
|
|
|
|
ENUM(pci_pme, 7)\
|
|
|
|
ENUM(ac_power_restored, 8)
|
2011-04-03 17:38:48 +02:00
|
|
|
|
|
|
|
#define System_FIELDS\
|
|
|
|
FIELD(0, const char*, manufacturer, "")\
|
|
|
|
FIELD(0, const char*, productName, "")\
|
|
|
|
FIELD(0, const char*, version, "")\
|
|
|
|
FIELD(0, const char*, serialNumber, "")\
|
2011-04-04 18:50:02 +02:00
|
|
|
FIELD(F_HEX, u64, uuid0, "")\
|
|
|
|
FIELD(F_HEX, u64, uuid1, "")\
|
2011-04-03 17:38:48 +02:00
|
|
|
FIELD(F_ENUM, SystemWakeUpType, wakeUpType, "")\
|
|
|
|
FIELD(0, const char*, skuNumber, "")\
|
|
|
|
FIELD(0, const char*, family, "")
|
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// Baseboard
|
|
|
|
|
2011-04-04 19:44:36 +02:00
|
|
|
#define BaseboardFlags_ENUMERATORS\
|
2011-04-05 11:52:57 +02:00
|
|
|
ENUM(motherboard, 0x01)\
|
|
|
|
ENUM(requires_add_in, 0x02)\
|
|
|
|
ENUM(removeable, 0x04)\
|
|
|
|
ENUM(replaceable, 0x08)\
|
|
|
|
ENUM(hot_swappable, 0x10)
|
2011-04-04 19:44:36 +02:00
|
|
|
|
|
|
|
#define BaseboardType_ENUMERATORS\
|
2011-04-05 11:52:57 +02:00
|
|
|
ENUM(other, 1)\
|
|
|
|
ENUM(unknown, 2)\
|
|
|
|
ENUM(blade, 3)\
|
|
|
|
ENUM(connectivity_switch, 4)\
|
|
|
|
ENUM(system_management, 5)\
|
|
|
|
ENUM(processor, 6)\
|
|
|
|
ENUM(io, 7)\
|
|
|
|
ENUM(memory, 8)\
|
|
|
|
ENUM(daughter, 9)\
|
|
|
|
ENUM(motherboard, 10)\
|
|
|
|
ENUM(processor_memory, 11)\
|
|
|
|
ENUM(processor_io, 12)\
|
|
|
|
ENUM(interconnect, 13)
|
2011-04-03 17:38:48 +02:00
|
|
|
|
|
|
|
#define Baseboard_FIELDS\
|
|
|
|
FIELD(0, const char*, manufacturer, "")\
|
|
|
|
FIELD(0, const char*, product, "")\
|
|
|
|
FIELD(0, const char*, version, "")\
|
|
|
|
FIELD(0, const char*, serialNumber, "")\
|
|
|
|
FIELD(0, const char*, assetTag, "")\
|
|
|
|
FIELD(F_FLAGS, u8, flags, "")\
|
|
|
|
FIELD(0, const char*, location, "")\
|
2011-04-05 11:52:57 +02:00
|
|
|
FIELD(0, Handle, hChassis, "")\
|
2011-04-03 17:38:48 +02:00
|
|
|
FIELD(F_ENUM, BaseboardType, type, "")\
|
|
|
|
/* omit subsequent fields because we can't handle the variable-length contained objects */
|
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// Chassis
|
|
|
|
|
2011-04-04 19:44:36 +02:00
|
|
|
#define ChassisType_ENUMERATORS\
|
2011-04-05 11:52:57 +02:00
|
|
|
ENUM(other, 1)\
|
|
|
|
ENUM(unknown, 2)\
|
|
|
|
ENUM(desktop, 3)\
|
|
|
|
ENUM(low_profile_desktop, 4)\
|
|
|
|
ENUM(pizza_box, 5)\
|
|
|
|
ENUM(mini_tower, 6)\
|
|
|
|
ENUM(tower, 7)\
|
|
|
|
ENUM(portable, 8)\
|
|
|
|
ENUM(laptop, 9)\
|
|
|
|
ENUM(notebook, 10)\
|
|
|
|
ENUM(handheld, 11)\
|
|
|
|
ENUM(docking_station, 12)\
|
|
|
|
ENUM(all_in_one, 13)\
|
|
|
|
ENUM(subnotebook, 14)\
|
|
|
|
ENUM(space_saving, 15)\
|
|
|
|
ENUM(lunchbox, 16)\
|
|
|
|
ENUM(main_server, 17)\
|
|
|
|
ENUM(expansion, 18)\
|
|
|
|
ENUM(sub, 19)\
|
|
|
|
ENUM(bus_expansion, 20)\
|
|
|
|
ENUM(peripheral, 21)\
|
|
|
|
ENUM(raid, 22)\
|
|
|
|
ENUM(rack_mount, 23)\
|
|
|
|
ENUM(sealed_case, 24)\
|
|
|
|
ENUM(multi_system, 25)\
|
|
|
|
ENUM(compact_pci, 26)\
|
|
|
|
ENUM(advanced_tca, 27)\
|
|
|
|
ENUM(blade, 28)\
|
|
|
|
ENUM(blade_enclosure, 29)
|
2011-04-04 19:44:36 +02:00
|
|
|
|
|
|
|
#define ChassisSecurityStatus_ENUMERATORS\
|
2011-04-05 11:52:57 +02:00
|
|
|
ENUM(other, 1)\
|
|
|
|
ENUM(unknown, 2)\
|
|
|
|
ENUM(none, 3)\
|
|
|
|
ENUM(external_interface_locked, 4)\
|
|
|
|
ENUM(external_interface_enabled, 5)
|
2011-04-03 17:38:48 +02:00
|
|
|
|
|
|
|
#define Chassis_FIELDS\
|
|
|
|
FIELD(0, const char*, manufacturer, "")\
|
|
|
|
FIELD(F_ENUM, ChassisType, type, "")\
|
|
|
|
FIELD(0, const char*, version, "")\
|
|
|
|
FIELD(0, const char*, serialNumber, "")\
|
|
|
|
FIELD(0, const char*, assetTag, "")\
|
2011-04-04 19:44:36 +02:00
|
|
|
FIELD(F_ENUM, Status, state, "")\
|
|
|
|
FIELD(F_ENUM, Status, powerState, "")\
|
|
|
|
FIELD(F_ENUM, Status, thermalState, "")\
|
2011-04-03 17:38:48 +02:00
|
|
|
FIELD(F_ENUM, ChassisSecurityStatus, securityStatus, "")\
|
|
|
|
FIELD(0, u32, oemDefined, "")\
|
|
|
|
FIELD(0, u8, height, "U")\
|
2011-04-04 18:50:02 +02:00
|
|
|
FIELD(0, u8, numPowerCords, "")\
|
2011-04-03 17:38:48 +02:00
|
|
|
/* omit subsequent fields because we can't handle the variable-length contained objects */
|
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// Processor
|
|
|
|
|
2011-04-04 19:44:36 +02:00
|
|
|
#define ProcessorType_ENUMERATORS\
|
2011-04-05 11:52:57 +02:00
|
|
|
ENUM(other, 1)\
|
|
|
|
ENUM(unknown, 2)\
|
|
|
|
ENUM(CPU, 3)\
|
|
|
|
ENUM(FPU, 4)\
|
|
|
|
ENUM(DSP, 5)\
|
|
|
|
ENUM(GPU, 6)
|
2011-04-04 19:44:36 +02:00
|
|
|
|
|
|
|
#define ProcessorStatus_ENUMERATORS\
|
2011-04-05 11:52:57 +02:00
|
|
|
ENUM(unknown, 0)\
|
|
|
|
ENUM(other, 7)\
|
|
|
|
ENUM(enabled, 1)\
|
|
|
|
ENUM(user_disabled, 2)\
|
|
|
|
ENUM(post_disabled, 3)\
|
|
|
|
ENUM(cpu_idle, 4)
|
2011-04-04 19:44:36 +02:00
|
|
|
|
|
|
|
#define ProcessorUpgrade_ENUMERATORS\
|
2011-04-05 11:52:57 +02:00
|
|
|
ENUM(other, 1)\
|
|
|
|
ENUM(unknown, 2)\
|
|
|
|
ENUM(daughter, 3)\
|
|
|
|
ENUM(zif, 4)\
|
|
|
|
ENUM(piggyback, 5)\
|
|
|
|
ENUM(none, 6)\
|
|
|
|
ENUM(lif, 7)\
|
|
|
|
ENUM(slot_1, 8)\
|
|
|
|
ENUM(slot_2, 9)\
|
|
|
|
ENUM(socket_370, 10)\
|
|
|
|
ENUM(slot_a, 11)\
|
|
|
|
ENUM(slot_m, 12)\
|
|
|
|
ENUM(socket_423, 13)\
|
|
|
|
ENUM(socket_a, 14)\
|
|
|
|
ENUM(socket_478, 15)\
|
|
|
|
ENUM(socket_754, 16)\
|
|
|
|
ENUM(socket_940, 17)\
|
|
|
|
ENUM(socket_939, 18)\
|
|
|
|
ENUM(socket_604, 19)\
|
|
|
|
ENUM(socket_771, 20)\
|
|
|
|
ENUM(socket_775, 21)\
|
|
|
|
ENUM(socket_s1, 22)\
|
|
|
|
ENUM(socket_am2, 23)\
|
|
|
|
ENUM(socket_1207, 24)\
|
|
|
|
ENUM(socket_1366, 25)\
|
|
|
|
ENUM(socket_g34, 26)\
|
|
|
|
ENUM(socket_am3, 27)\
|
|
|
|
ENUM(socket_c32, 28)\
|
|
|
|
ENUM(socket_1156, 29)\
|
|
|
|
ENUM(socket_1567, 30)\
|
|
|
|
ENUM(socket_988a, 31)\
|
|
|
|
ENUM(socket_1288, 32)\
|
|
|
|
ENUM(socket_988b, 33)\
|
|
|
|
ENUM(socket_1023, 34)\
|
|
|
|
ENUM(socket_1224, 35)\
|
|
|
|
ENUM(socket_1155, 36)\
|
|
|
|
ENUM(socket_1356, 37)\
|
|
|
|
ENUM(socket_2011, 38)\
|
|
|
|
ENUM(socket_fs1, 39)\
|
|
|
|
ENUM(socket_fs2, 40)\
|
|
|
|
ENUM(socket_fm1, 41)\
|
|
|
|
ENUM(socket_fm2, 42)
|
2011-04-04 19:44:36 +02:00
|
|
|
|
|
|
|
#define ProcessorFlags_ENUMERATORS\
|
2011-04-05 11:52:57 +02:00
|
|
|
ENUM(unknown, 0x2)\
|
|
|
|
ENUM(x64, 0x4)\
|
|
|
|
ENUM(multi_core, 0x8)/* indicates cores are present, but they might be disabled*/\
|
|
|
|
ENUM(ht, 0x10)\
|
|
|
|
ENUM(execute_protection, 0x20)\
|
|
|
|
ENUM(enhanced_virtualization, 0x40)\
|
|
|
|
ENUM(power_control, 0x80)
|
2011-04-03 17:38:48 +02:00
|
|
|
|
|
|
|
#define Processor_FIELDS\
|
|
|
|
FIELD(0, const char*, socket, "")\
|
|
|
|
FIELD(F_ENUM, ProcessorType, type, "")\
|
|
|
|
FIELD(0, u8, family, "") /* we don't bother providing enumerators for > 200 families */\
|
|
|
|
FIELD(0, const char*, manufacturer, "")\
|
2011-04-04 18:50:02 +02:00
|
|
|
FIELD(F_HEX, u64, id, "")\
|
2011-04-03 17:38:48 +02:00
|
|
|
FIELD(0, const char*, version, "")\
|
2011-04-04 18:50:02 +02:00
|
|
|
FIELD(0, u8, voltage, " dV")\
|
|
|
|
FIELD(0, u16, externalClockFrequency, " MHz")\
|
|
|
|
FIELD(0, u16, maxFrequency, " MHz")\
|
|
|
|
FIELD(0, u16, bootFrequency, " MHz")\
|
2011-04-03 17:38:48 +02:00
|
|
|
FIELD(F_ENUM, ProcessorStatus, status, "")\
|
|
|
|
FIELD(F_ENUM, ProcessorUpgrade, upgrade, "")\
|
2011-04-05 11:52:57 +02:00
|
|
|
FIELD(0, Handle, hL1, "")\
|
|
|
|
FIELD(0, Handle, hL2, "")\
|
|
|
|
FIELD(0, Handle, hL3, "")\
|
2011-04-03 17:38:48 +02:00
|
|
|
FIELD(0, const char*, serialNumber, "")\
|
|
|
|
FIELD(0, const char*, assetTag, "")\
|
|
|
|
FIELD(0, const char*, partNumber, "")\
|
|
|
|
FIELD(0, u8, coresPerPackage, "")\
|
|
|
|
FIELD(0, u8, enabledCores, "")\
|
|
|
|
FIELD(0, u8, logicalPerPackage, "")\
|
|
|
|
FIELD(F_FLAGS, u16, characteristics, "")\
|
2011-04-04 18:50:02 +02:00
|
|
|
FIELD(0, u16, family2, "")\
|
2011-04-05 11:52:57 +02:00
|
|
|
FIELD(F_DERIVED, bool, populated, "")
|
2011-04-03 17:38:48 +02:00
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// Cache
|
|
|
|
|
2011-04-05 11:52:57 +02:00
|
|
|
#define CacheMode_ENUMERATORS\
|
|
|
|
ENUM(write_through, 0)\
|
|
|
|
ENUM(write_back, 1)\
|
|
|
|
ENUM(varies, 2)\
|
|
|
|
ENUM(unknown, 3)
|
|
|
|
|
|
|
|
#define CacheLocation_ENUMERATORS\
|
|
|
|
ENUM(internal, 0)\
|
|
|
|
ENUM(external, 1)\
|
|
|
|
ENUM(reserved, 2)\
|
|
|
|
ENUM(unknown, 3)
|
|
|
|
|
|
|
|
#define CacheConfigurationFlags_ENUMERATORS\
|
|
|
|
ENUM(socketed, 0x08)\
|
|
|
|
ENUM(enabled, 0x80)
|
|
|
|
|
|
|
|
#define CacheFlags_ENUMERATORS\
|
|
|
|
ENUM(other, 0x01)\
|
|
|
|
ENUM(unknown, 0x02)\
|
|
|
|
ENUM(non_burst, 0x04)\
|
|
|
|
ENUM(burst, 0x08)\
|
|
|
|
ENUM(pipeline_burst, 0x10)\
|
|
|
|
ENUM(synchronous, 0x20)\
|
|
|
|
ENUM(asynchronous, 0x40)
|
|
|
|
|
|
|
|
#define CacheType_ENUMERATORS\
|
|
|
|
ENUM(other, 1)\
|
|
|
|
ENUM(unknown, 2)\
|
|
|
|
ENUM(instruction, 3)\
|
|
|
|
ENUM(data, 4)\
|
|
|
|
ENUM(unified, 5)
|
|
|
|
|
|
|
|
#define CacheAssociativity_ENUMERATORS\
|
|
|
|
ENUM(other, 1)\
|
|
|
|
ENUM(unknown, 2)\
|
|
|
|
ENUM(direct_mapped, 3)\
|
|
|
|
ENUM(A2, 4)\
|
|
|
|
ENUM(A4, 5)\
|
|
|
|
ENUM(full, 6)\
|
|
|
|
ENUM(A8, 7)\
|
|
|
|
ENUM(A16, 8)\
|
|
|
|
ENUM(A12, 9)\
|
|
|
|
ENUM(A24, 10)\
|
|
|
|
ENUM(A32, 11)\
|
|
|
|
ENUM(A48, 12)\
|
|
|
|
ENUM(A64, 13)\
|
|
|
|
ENUM(A20, 14)
|
2011-04-03 17:38:48 +02:00
|
|
|
|
|
|
|
#define Cache_FIELDS\
|
|
|
|
FIELD(0, const char*, designation, "")\
|
|
|
|
FIELD(F_FLAGS, u16, configuration, "")\
|
|
|
|
FIELD(F_INTERNAL, u16, maxSize16, "")\
|
|
|
|
FIELD(F_INTERNAL, u16, installedSize16, "")\
|
|
|
|
FIELD(F_FLAGS, u16, supportedFlags, "")\
|
|
|
|
FIELD(F_FLAGS, u16, currentFlags, "")\
|
|
|
|
FIELD(0, u8, speed, " ns")\
|
2011-04-05 11:52:57 +02:00
|
|
|
FIELD(F_ENUM, ECC, ecc, "")\
|
2011-04-03 17:38:48 +02:00
|
|
|
FIELD(F_ENUM, CacheType, type, "")\
|
|
|
|
FIELD(F_ENUM, CacheAssociativity, associativity, "")\
|
|
|
|
FIELD(F_DERIVED, size_t, level, "") /* 1..8 */\
|
|
|
|
FIELD(F_DERIVED|F_ENUM, CacheLocation, location, "")\
|
|
|
|
FIELD(F_DERIVED|F_ENUM, CacheMode, mode, "")\
|
2011-04-04 18:50:02 +02:00
|
|
|
FIELD(F_DERIVED|F_SIZE, size_t, maxSize, "")\
|
|
|
|
FIELD(F_DERIVED|F_SIZE, size_t, installedSize, "")
|
2011-04-03 17:38:48 +02:00
|
|
|
|
|
|
|
|
2011-04-04 17:01:40 +02:00
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// PortConnector
|
|
|
|
|
2011-04-05 11:52:57 +02:00
|
|
|
#define PortConnectorType_ENUMERATORS\
|
|
|
|
ENUM(other, 255)\
|
|
|
|
ENUM(none, 0)\
|
|
|
|
ENUM(centronics, 1)\
|
|
|
|
ENUM(mini_centronics, 2)\
|
|
|
|
ENUM(proprietary, 3)\
|
|
|
|
ENUM(db25_male, 4)\
|
|
|
|
ENUM(db25_pin_female, 5)\
|
|
|
|
ENUM(db15_pin_male, 6)\
|
|
|
|
ENUM(db15_pin_female, 7)\
|
|
|
|
ENUM(db9_pin_male, 8)\
|
|
|
|
ENUM(db9_pin_female, 9)\
|
|
|
|
ENUM(rj11, 10)\
|
|
|
|
ENUM(rj45, 11)\
|
|
|
|
ENUM(mini_scsi, 12)\
|
|
|
|
ENUM(mini_din, 13)\
|
|
|
|
ENUM(micro_din, 14)\
|
|
|
|
ENUM(ps2, 15)\
|
|
|
|
ENUM(infrared, 16)\
|
|
|
|
ENUM(hp_hil, 17)\
|
|
|
|
ENUM(access_bus_usb, 18)\
|
|
|
|
ENUM(pc_ssa_scsi, 19)\
|
|
|
|
ENUM(din8_male, 20)\
|
|
|
|
ENUM(din8_female, 21)\
|
|
|
|
ENUM(on_board_ide, 22)\
|
|
|
|
ENUM(on_board_floppy, 23)\
|
|
|
|
ENUM(dual_inline_9, 24)\
|
|
|
|
ENUM(dual_inline_25, 25)\
|
|
|
|
ENUM(dual_inline_50, 26)\
|
|
|
|
ENUM(dual_inline_68, 27)\
|
|
|
|
ENUM(on_board_sound_input_from_cd, 28)\
|
|
|
|
ENUM(mini_centronics_14, 29)\
|
|
|
|
ENUM(mini_centronics_26, 30)\
|
|
|
|
ENUM(headphones, 31)\
|
|
|
|
ENUM(bnc, 32)\
|
|
|
|
ENUM(pc_firewire, 33)\
|
|
|
|
ENUM(sas_sata, 34)\
|
|
|
|
ENUM(pc_98, 160)\
|
|
|
|
ENUM(pc_98_hireso, 161)\
|
|
|
|
ENUM(pc_h98, 162)\
|
|
|
|
ENUM(pc_98_note, 163)\
|
|
|
|
ENUM(pc_98_full, 164)
|
|
|
|
|
|
|
|
#define PortType_ENUMERATORS\
|
|
|
|
ENUM(other, 255)\
|
|
|
|
ENUM(none, 0)\
|
|
|
|
ENUM(parallel_xt_at, 1)\
|
|
|
|
ENUM(parallel_ps2, 2)\
|
|
|
|
ENUM(parallel_ecp, 3)\
|
|
|
|
ENUM(parallel_epp, 4)\
|
|
|
|
ENUM(parallel_ecepp, 5)\
|
|
|
|
ENUM(serial_xt_at, 6)\
|
|
|
|
ENUM(serial_16450, 7)\
|
|
|
|
ENUM(serial_16550, 8)\
|
|
|
|
ENUM(serial_16550a, 9)\
|
|
|
|
ENUM(scsi, 10)\
|
|
|
|
ENUM(midi, 11)\
|
|
|
|
ENUM(joystick, 12)\
|
|
|
|
ENUM(keyboard, 13)\
|
|
|
|
ENUM(mouse, 14)\
|
|
|
|
ENUM(ssa_scsi, 15)\
|
|
|
|
ENUM(usb, 16)\
|
|
|
|
ENUM(firewire, 17)\
|
|
|
|
ENUM(pcmcia_i, 18)\
|
|
|
|
ENUM(pcmcia_ii, 19)\
|
|
|
|
ENUM(pcmcia_iii, 20)\
|
|
|
|
ENUM(cardbus, 21)\
|
|
|
|
ENUM(access_bus, 22)\
|
|
|
|
ENUM(scsi_ii, 23)\
|
|
|
|
ENUM(scsi_wide, 24)\
|
|
|
|
ENUM(pc_98, 25)\
|
|
|
|
ENUM(pc_98_hireso, 26)\
|
|
|
|
ENUM(pc_h98, 27)\
|
|
|
|
ENUM(video, 28)\
|
|
|
|
ENUM(audio, 29)\
|
|
|
|
ENUM(modem, 30)\
|
|
|
|
ENUM(network, 31)\
|
|
|
|
ENUM(sata, 32)\
|
|
|
|
ENUM(sas, 33)\
|
|
|
|
ENUM(_8251_compatible, 160)\
|
|
|
|
ENUM(_8251_fifo_compatible, 161)
|
2011-04-04 17:01:40 +02:00
|
|
|
|
|
|
|
#define PortConnector_FIELDS\
|
|
|
|
FIELD(0, const char*, internalDesignator, "")\
|
|
|
|
FIELD(F_ENUM, PortConnectorType, internalConnectorType, "")\
|
|
|
|
FIELD(0, const char*, externalDesignator, "")\
|
|
|
|
FIELD(F_ENUM, PortConnectorType, externalConnectorType, "")\
|
|
|
|
FIELD(F_ENUM, PortType, portType, "")
|
|
|
|
|
|
|
|
|
2011-04-03 17:38:48 +02:00
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// SystemSlot
|
|
|
|
|
2011-04-05 11:52:57 +02:00
|
|
|
#define SystemSlotType_ENUMERATORS\
|
|
|
|
ENUM(other, 1)\
|
|
|
|
ENUM(unknown, 2)\
|
|
|
|
ENUM(isa, 3)\
|
|
|
|
ENUM(mca, 4)\
|
|
|
|
ENUM(eisa, 5)\
|
|
|
|
ENUM(pci, 6)\
|
|
|
|
ENUM(pcmcia, 7)\
|
|
|
|
ENUM(vesa, 8)\
|
|
|
|
ENUM(proprietary, 9)\
|
|
|
|
ENUM(processor, 10)\
|
|
|
|
ENUM(memory_card, 11)\
|
|
|
|
ENUM(io_riser, 12)\
|
|
|
|
ENUM(nubus, 13)\
|
|
|
|
ENUM(pci_66, 14)\
|
|
|
|
ENUM(agp, 15)\
|
|
|
|
ENUM(agp_2x, 16)\
|
|
|
|
ENUM(agp_4x, 17)\
|
|
|
|
ENUM(pcix, 18)\
|
|
|
|
ENUM(agp_8x, 19)\
|
|
|
|
ENUM(pc_98_c20, 160)\
|
|
|
|
ENUM(pc_98_c24, 161)\
|
|
|
|
ENUM(pc_98_e, 162)\
|
|
|
|
ENUM(pc_98_local_bus, 163)\
|
|
|
|
ENUM(pc_98_card, 164)\
|
|
|
|
ENUM(pcie, 165)\
|
|
|
|
ENUM(pcie_x1, 166)\
|
|
|
|
ENUM(pcie_x2, 167)\
|
|
|
|
ENUM(pcie_x4, 168)\
|
|
|
|
ENUM(pcie_x8, 169)\
|
|
|
|
ENUM(pcie_x16, 170)\
|
|
|
|
ENUM(pcie2, 171)\
|
|
|
|
ENUM(pcie2_x1, 172)\
|
|
|
|
ENUM(pcie2_x2, 173)\
|
|
|
|
ENUM(pcie2_x4, 174)\
|
|
|
|
ENUM(pcie2_x8, 175)\
|
|
|
|
ENUM(pcie2_x16, 176)\
|
|
|
|
ENUM(pcie3, 177)\
|
|
|
|
ENUM(pcie3_x1, 178)\
|
|
|
|
ENUM(pcie3_x2, 179)\
|
|
|
|
ENUM(pcie3_x4, 180)\
|
|
|
|
ENUM(pcie3_x8, 181)\
|
|
|
|
ENUM(pcie3_x16, 182)
|
|
|
|
|
|
|
|
#define SystemSlotBusWidth_ENUMERATORS\
|
|
|
|
ENUM(other, 1)\
|
|
|
|
ENUM(unknown, 2)\
|
|
|
|
ENUM(_8, 3)\
|
|
|
|
ENUM(_16, 4)\
|
|
|
|
ENUM(_32, 5)\
|
|
|
|
ENUM(_64, 6)\
|
|
|
|
ENUM(_128, 7)\
|
|
|
|
ENUM(x1, 8)\
|
|
|
|
ENUM(x2, 9)\
|
|
|
|
ENUM(x4, 10)\
|
|
|
|
ENUM(x8, 11)\
|
|
|
|
ENUM(x12, 12)\
|
|
|
|
ENUM(x16, 13)\
|
|
|
|
ENUM(x32, 14)
|
|
|
|
|
|
|
|
#define SystemSlotUsage_ENUMERATORS\
|
|
|
|
ENUM(other, 1)\
|
|
|
|
ENUM(unknown, 2)\
|
|
|
|
ENUM(available, 3)\
|
|
|
|
ENUM(in_use, 4)
|
|
|
|
|
|
|
|
#define SystemSlotLength_ENUMERATORS\
|
|
|
|
ENUM(other, 1)\
|
|
|
|
ENUM(unknown, 2)\
|
|
|
|
ENUM(short_length, 3)\
|
|
|
|
ENUM(long_length, 4)
|
|
|
|
|
|
|
|
#define SystemSlotFlags1_ENUMERATORS\
|
|
|
|
ENUM(unknown, 0x1)\
|
|
|
|
ENUM(v5, 0x2)\
|
|
|
|
ENUM(v3_3, 0x4)\
|
|
|
|
ENUM(shared, 0x8)\
|
|
|
|
ENUM(pc_card_16, 0x10)\
|
|
|
|
ENUM(pc_cardbus, 0x20)\
|
|
|
|
ENUM(pc_zoom_video, 0x40)\
|
|
|
|
ENUM(pc_modem_ring_resume, 0x80)
|
|
|
|
|
|
|
|
#define SystemSlotFlags2_ENUMERATORS\
|
|
|
|
ENUM(pme, 0x1)\
|
|
|
|
ENUM(hot_plug, 0x2)\
|
|
|
|
ENUM(smbus, 0x4)\
|
2011-04-03 17:38:48 +02:00
|
|
|
|
|
|
|
#define SystemSlot_FIELDS\
|
|
|
|
FIELD(0, const char*, designation, "")\
|
|
|
|
FIELD(F_ENUM, SystemSlotType, type, "")\
|
|
|
|
FIELD(F_ENUM, SystemSlotBusWidth, busWidth, "")\
|
|
|
|
FIELD(F_ENUM, SystemSlotUsage, usage, "")\
|
|
|
|
FIELD(F_ENUM, SystemSlotLength, length, "")\
|
|
|
|
FIELD(0, u16, id, "")\
|
|
|
|
FIELD(F_FLAGS, u8, characteristics, "")\
|
|
|
|
FIELD(F_FLAGS, u8, characteristics2, "")\
|
|
|
|
FIELD(0, u8, busNumber, "")\
|
2011-04-05 11:52:57 +02:00
|
|
|
FIELD(F_INTERNAL, u8, functionAndDeviceNumber, "")\
|
|
|
|
FIELD(F_DERIVED, u8, deviceNumber, "")\
|
|
|
|
FIELD(F_DERIVED, u8, functionNumber, "")
|
2011-04-03 17:38:48 +02:00
|
|
|
|
|
|
|
|
2011-04-04 17:01:40 +02:00
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// OnBoardDevices
|
|
|
|
|
2011-04-05 11:52:57 +02:00
|
|
|
#define OnBoardDeviceType_ENUMERATORS\
|
|
|
|
ENUM(other, 1)\
|
|
|
|
ENUM(unknown, 2)\
|
|
|
|
ENUM(video, 3)\
|
|
|
|
ENUM(scsi_controller, 4)\
|
|
|
|
ENUM(ethernet, 5)\
|
|
|
|
ENUM(token_ring, 6)\
|
|
|
|
ENUM(sound, 7)\
|
|
|
|
ENUM(pata_controller, 8)\
|
|
|
|
ENUM(sata_controller, 9)\
|
|
|
|
ENUM(sas_controller, 10)
|
2011-04-04 17:01:40 +02:00
|
|
|
|
|
|
|
#define OnBoardDevices_FIELDS\
|
|
|
|
FIELD(F_ENUM, OnBoardDeviceType, type, "")\
|
|
|
|
FIELD(0, const char*, description, "")\
|
2011-04-05 11:52:57 +02:00
|
|
|
FIELD(F_DERIVED, bool, enabled, "")\
|
2011-04-04 17:01:40 +02:00
|
|
|
/* NB: this structure could contain any number of type/description pairs, but Dell BIOS only provides 1 */
|
|
|
|
|
|
|
|
|
2011-04-03 17:38:48 +02:00
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// MemoryArray
|
|
|
|
|
2011-04-05 11:52:57 +02:00
|
|
|
#define MemoryArrayLocation_ENUMERATORS\
|
|
|
|
ENUM(other, 1)\
|
|
|
|
ENUM(unknown, 2)\
|
|
|
|
ENUM(motherboard, 3)\
|
|
|
|
ENUM(isa_addon, 4)\
|
|
|
|
ENUM(eisa_addon, 5)\
|
|
|
|
ENUM(pci_addon, 6)\
|
|
|
|
ENUM(mca_addon, 7)\
|
|
|
|
ENUM(pcmcia_addon, 8)\
|
|
|
|
ENUM(proprietary_addon, 9)\
|
|
|
|
ENUM(nubus, 10)\
|
|
|
|
ENUM(pc_98_c20, 160)\
|
|
|
|
ENUM(pc_98_c24, 161)\
|
|
|
|
ENUM(pc_98_e, 162)\
|
|
|
|
ENUM(pc_98_local_bus, 163)
|
|
|
|
|
|
|
|
#define MemoryArrayUse_ENUMERATORS\
|
|
|
|
ENUM(other, 1)\
|
|
|
|
ENUM(unknown, 2)\
|
|
|
|
ENUM(system, 3)\
|
|
|
|
ENUM(video, 4)\
|
|
|
|
ENUM(flash, 5)\
|
|
|
|
ENUM(nvram, 6)\
|
|
|
|
ENUM(cache, 7)
|
2011-04-03 17:38:48 +02:00
|
|
|
|
|
|
|
#define MemoryArray_FIELDS\
|
|
|
|
FIELD(F_ENUM, MemoryArrayLocation, location, "")\
|
|
|
|
FIELD(F_ENUM, MemoryArrayUse, use, "")\
|
2011-04-05 11:52:57 +02:00
|
|
|
FIELD(F_ENUM, ECC, ecc, "")\
|
2011-04-03 17:38:48 +02:00
|
|
|
FIELD(F_INTERNAL, u32, maxCapacity32, "")\
|
2011-04-05 11:52:57 +02:00
|
|
|
FIELD(0, Handle, hError, "")\
|
2011-04-03 17:38:48 +02:00
|
|
|
FIELD(0, u16, numDevices, "")\
|
2011-04-04 18:50:02 +02:00
|
|
|
FIELD(F_SIZE, u64, maxCapacity, "")
|
2011-04-03 17:38:48 +02:00
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// MemoryDevice
|
|
|
|
|
2011-04-05 11:52:57 +02:00
|
|
|
#define MemoryDeviceFormFactor_ENUMERATORS\
|
|
|
|
ENUM(other, 1)\
|
|
|
|
ENUM(unknown, 2)\
|
|
|
|
ENUM(SIMM, 3)\
|
|
|
|
ENUM(SIP, 4)\
|
|
|
|
ENUM(chip, 5)\
|
|
|
|
ENUM(DIP, 6)\
|
|
|
|
ENUM(ZIP, 7)\
|
|
|
|
ENUM(proprietary_card, 8)\
|
|
|
|
ENUM(DIMM, 9)\
|
|
|
|
ENUM(TSOP, 10)\
|
|
|
|
ENUM(row_of_chips, 11)\
|
|
|
|
ENUM(RIMM, 12)\
|
|
|
|
ENUM(SODIMM, 13)\
|
|
|
|
ENUM(SRIMM, 14)\
|
|
|
|
ENUM(FBDIMM, 15)
|
|
|
|
|
|
|
|
#define MemoryDeviceType_ENUMERATORS\
|
|
|
|
ENUM(other, 1)\
|
|
|
|
ENUM(unknown, 2)\
|
|
|
|
ENUM(DRAM, 3)\
|
|
|
|
ENUM(EDRAM, 4)\
|
|
|
|
ENUM(VRAM, 5)\
|
|
|
|
ENUM(SRAM, 6)\
|
|
|
|
ENUM(RAM, 7)\
|
|
|
|
ENUM(ROM, 8)\
|
|
|
|
ENUM(FLASH, 9)\
|
|
|
|
ENUM(EEPROM, 10)\
|
|
|
|
ENUM(FEPROM, 11)\
|
|
|
|
ENUM(EPROM, 12)\
|
|
|
|
ENUM(CRRAM, 13)\
|
|
|
|
ENUM(_3DRAM, 14)\
|
|
|
|
ENUM(SDRAM, 15)\
|
|
|
|
ENUM(SGRAM, 16)\
|
|
|
|
ENUM(RDRAM, 17)\
|
|
|
|
ENUM(DDR, 18)\
|
|
|
|
ENUM(DDR2, 19)\
|
|
|
|
ENUM(DDR2_FBDIMM, 20)\
|
|
|
|
ENUM(DDR3, 24)\
|
|
|
|
ENUM(FBD2, 25)
|
|
|
|
|
|
|
|
#define MemoryDeviceTypeFlags_ENUMERATORS\
|
|
|
|
ENUM(other, 0x0002)\
|
|
|
|
ENUM(unknown, 0x0004)\
|
|
|
|
ENUM(fast_paged, 0x0008)\
|
|
|
|
ENUM(static_column, 0x0010)\
|
|
|
|
ENUM(pseudo_static, 0x0020)\
|
|
|
|
ENUM(rambus, 0x0040)\
|
|
|
|
ENUM(synchronous, 0x0080)\
|
|
|
|
ENUM(cmos, 0x0100)\
|
|
|
|
ENUM(edo, 0x0200)\
|
|
|
|
ENUM(window_dram, 0x0400)\
|
|
|
|
ENUM(cache_dram, 0x0800)\
|
|
|
|
ENUM(non_volatile, 0x1000)\
|
|
|
|
ENUM(buffered, 0x2000)\
|
|
|
|
ENUM(unbuffered, 0x4000)
|
2011-04-03 17:38:48 +02:00
|
|
|
|
|
|
|
#define MemoryDevice_FIELDS\
|
2011-04-05 11:52:57 +02:00
|
|
|
FIELD(0, Handle, hMemoryArray, "")\
|
|
|
|
FIELD(0, Handle, hError, "")\
|
2011-04-03 17:38:48 +02:00
|
|
|
FIELD(0, u16, totalWidth, " bits")\
|
|
|
|
FIELD(0, u16, dataWidth, " bits")\
|
|
|
|
FIELD(F_INTERNAL, u16, size16, "")\
|
|
|
|
FIELD(F_ENUM, MemoryDeviceFormFactor, formFactor, "")\
|
|
|
|
FIELD(0, u8, deviceSet, "")\
|
|
|
|
FIELD(0, const char*, locator, "")\
|
|
|
|
FIELD(0, const char*, bank, "")\
|
|
|
|
FIELD(F_ENUM, MemoryDeviceType, type, "")\
|
|
|
|
FIELD(F_FLAGS, u16, typeFlags, "")\
|
|
|
|
FIELD(0, u16, speed, " MHz")\
|
|
|
|
FIELD(0, const char*, manufacturer, "")\
|
|
|
|
FIELD(0, const char*, serialNumber, "")\
|
|
|
|
FIELD(0, const char*, assetTag, "")\
|
|
|
|
FIELD(0, const char*, partNumber, "")\
|
|
|
|
FIELD(F_FLAGS, u8, attributes, "")\
|
|
|
|
FIELD(F_INTERNAL, u32, size32, "")\
|
|
|
|
FIELD(0, u16, configuredSpeed, " MHz")\
|
2011-04-04 18:50:02 +02:00
|
|
|
FIELD(F_DERIVED|F_SIZE, u64, size, "")
|
2011-04-03 17:38:48 +02:00
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// MemoryArrayMappedAddress
|
|
|
|
|
|
|
|
#define MemoryArrayMappedAddress_FIELDS\
|
|
|
|
FIELD(F_INTERNAL, u32, startAddress32, " bits")\
|
|
|
|
FIELD(F_INTERNAL, u32, endAddress32, " bits")\
|
2011-04-05 11:52:57 +02:00
|
|
|
FIELD(0, Handle, hMemoryArray, "")\
|
2011-04-03 17:38:48 +02:00
|
|
|
FIELD(0, u8, partitionWidth, "")\
|
2011-04-04 18:50:02 +02:00
|
|
|
FIELD(F_HEX, u64, startAddress, "")\
|
2011-04-04 19:44:36 +02:00
|
|
|
FIELD(F_HEX, u64, endAddress, "")
|
2011-04-03 17:38:48 +02:00
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// MemoryDeviceMappedAddress
|
|
|
|
|
|
|
|
#define MemoryDeviceMappedAddress_FIELDS\
|
|
|
|
FIELD(F_INTERNAL, u32, startAddress32, " bits")\
|
|
|
|
FIELD(F_INTERNAL, u32, endAddress32, " bits")\
|
2011-04-05 11:52:57 +02:00
|
|
|
FIELD(0, Handle, hMemoryDevice, "")\
|
|
|
|
FIELD(0, Handle, hMemoryArrayMappedAddress, "")\
|
2011-04-03 17:38:48 +02:00
|
|
|
FIELD(0, u8, partitionRowPosition, "")\
|
|
|
|
FIELD(0, u8, interleavePosition, "")\
|
|
|
|
FIELD(0, u8, interleavedDataDepth, "")\
|
2011-04-04 18:50:02 +02:00
|
|
|
FIELD(F_HEX, u64, startAddress, "")\
|
2011-04-04 19:44:36 +02:00
|
|
|
FIELD(F_HEX, u64, endAddress, "")
|
2011-04-03 17:38:48 +02:00
|
|
|
|
|
|
|
|
2011-04-04 17:01:40 +02:00
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
// PortableBattery
|
|
|
|
|
2011-04-05 11:52:57 +02:00
|
|
|
#define PortableBatteryChemistry_ENUMERATORS\
|
|
|
|
ENUM(other, 1)\
|
|
|
|
ENUM(unknown, 2)\
|
|
|
|
ENUM(lead_acid, 3)\
|
|
|
|
ENUM(nickel_cadmium, 4)\
|
|
|
|
ENUM(nickel_metal_hydride, 5)\
|
|
|
|
ENUM(lithium_ion, 6)\
|
|
|
|
ENUM(zinc_air, 7)\
|
|
|
|
ENUM(lithium_polymer, 8)
|
2011-04-04 17:01:40 +02:00
|
|
|
|
|
|
|
#define PortableBattery_FIELDS\
|
|
|
|
FIELD(0, const char*, location, "")\
|
|
|
|
FIELD(0, const char*, manufacturer, "")\
|
|
|
|
FIELD(0, const char*, date, "")\
|
|
|
|
FIELD(0, const char*, serialNumber, "")\
|
|
|
|
FIELD(0, const char*, deviceName, "")\
|
|
|
|
FIELD(F_ENUM, PortableBatteryChemistry, chemistry, "")\
|
|
|
|
FIELD(0, u16, capacity, " mWh")\
|
|
|
|
FIELD(0, u16, voltage, " mV")\
|
|
|
|
FIELD(0, const char*, sbdsVersion, "")\
|
|
|
|
FIELD(0, u8, maxError, "%")\
|
|
|
|
FIELD(0, u16, sbdsSerialNumber, "")\
|
|
|
|
FIELD(0, u16, sbdsDate, "")\
|
|
|
|
FIELD(0, const char*, sbdsChemistry, "")\
|
|
|
|
FIELD(0, u8, capacityMultiplier, "")\
|
|
|
|
FIELD(0, u32, oemSpecific, "")
|
|
|
|
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
// VoltageProbe
|
|
|
|
|
2011-04-05 11:52:57 +02:00
|
|
|
#define VoltageProbeLocation_ENUMERATORS\
|
|
|
|
ENUM(other, 1)\
|
|
|
|
ENUM(unknown, 2)\
|
|
|
|
ENUM(processor, 3)\
|
|
|
|
ENUM(disk, 4)\
|
|
|
|
ENUM(peripheral_bay, 5)\
|
|
|
|
ENUM(system_management_module, 6)\
|
|
|
|
ENUM(motherboard, 7)\
|
|
|
|
ENUM(memory_module, 8)\
|
|
|
|
ENUM(processor_module, 9)\
|
|
|
|
ENUM(power_unit, 10)\
|
|
|
|
ENUM(add_in_card, 11)
|
2011-04-04 17:01:40 +02:00
|
|
|
|
|
|
|
#define VoltageProbe_FIELDS\
|
|
|
|
FIELD(0, const char*, description, "")\
|
|
|
|
FIELD(F_INTERNAL, u8, locationAndStatus, "")\
|
|
|
|
FIELD(0, u16, maxValue, " mV")\
|
|
|
|
FIELD(0, u16, minValue, " mV")\
|
|
|
|
FIELD(0, u16, resolution, " x 0.1 mV")\
|
|
|
|
FIELD(0, u16, tolerance, " mV")\
|
2011-04-05 11:52:57 +02:00
|
|
|
FIELD(0, u16, accuracy, " x 0.01%")\
|
2011-04-04 17:01:40 +02:00
|
|
|
FIELD(0, u32, oemDefined, "")\
|
2011-04-04 18:50:02 +02:00
|
|
|
FIELD(0, u16, nominalValue, " mv")\
|
2011-04-04 17:01:40 +02:00
|
|
|
FIELD(F_DERIVED, VoltageProbeLocation, location, "")\
|
|
|
|
FIELD(F_DERIVED, Status, status, "")
|
|
|
|
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
// CoolingDevice
|
|
|
|
|
2011-04-05 11:52:57 +02:00
|
|
|
#define CoolingDeviceType_ENUMERATORS\
|
|
|
|
ENUM(other, 1)\
|
|
|
|
ENUM(unknown, 2)\
|
|
|
|
ENUM(fan, 3)\
|
|
|
|
ENUM(centrifugal_blower, 4)\
|
|
|
|
ENUM(chip_fan, 5)\
|
|
|
|
ENUM(cabinet_fan, 6)\
|
|
|
|
ENUM(power_supply_fan, 7)\
|
|
|
|
ENUM(heat_pipe, 8)\
|
|
|
|
ENUM(integrated_refrigeration, 9)\
|
|
|
|
ENUM(active_cooling, 16)\
|
|
|
|
ENUM(passive_cooling, 17)
|
2011-04-04 17:01:40 +02:00
|
|
|
|
|
|
|
#define CoolingDevice_FIELDS\
|
2011-04-05 11:52:57 +02:00
|
|
|
FIELD(0, Handle, hTemperatureProbe, "")\
|
2011-04-04 17:01:40 +02:00
|
|
|
FIELD(F_INTERNAL, u8, typeAndStatus, "")\
|
|
|
|
FIELD(0, u8, group, "")\
|
|
|
|
FIELD(0, u32, oemDefined, "")\
|
|
|
|
FIELD(0, u16, nominalSpeed, " rpm")\
|
|
|
|
FIELD(0, const char*, description, "")\
|
|
|
|
FIELD(F_DERIVED, CoolingDeviceType, type, "")\
|
|
|
|
FIELD(F_DERIVED, Status, status, "")
|
|
|
|
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
// TemperatureProbe
|
|
|
|
|
2011-04-05 11:52:57 +02:00
|
|
|
#define TemperatureProbeLocation_ENUMERATORS\
|
|
|
|
ENUM(other, 1)\
|
|
|
|
ENUM(unknown, 2)\
|
|
|
|
ENUM(processor, 3)\
|
|
|
|
ENUM(disk, 4)\
|
|
|
|
ENUM(peripheral_bay, 5)\
|
|
|
|
ENUM(system_management_module, 6)\
|
|
|
|
ENUM(motherboard, 7)\
|
|
|
|
ENUM(memory_module, 8)\
|
|
|
|
ENUM(processor_module, 9)\
|
|
|
|
ENUM(power_unit, 10)\
|
|
|
|
ENUM(add_in_card, 11)\
|
|
|
|
ENUM(front_panel_board, 12)\
|
|
|
|
ENUM(back_panel_board, 13)\
|
|
|
|
ENUM(power_system_board, 14)\
|
|
|
|
ENUM(drive_backplane, 15)
|
2011-04-04 17:01:40 +02:00
|
|
|
|
|
|
|
#define TemperatureProbe_FIELDS\
|
|
|
|
FIELD(0, const char*, description, "")\
|
|
|
|
FIELD(F_INTERNAL, u8, locationAndStatus, "")\
|
2011-04-04 18:50:02 +02:00
|
|
|
FIELD(0, i16, maxValue, " dDegC")\
|
|
|
|
FIELD(0, i16, minValue, " dDegC")\
|
2011-04-04 17:01:40 +02:00
|
|
|
FIELD(0, u16, resolution, " mDegC")\
|
|
|
|
FIELD(0, u16, tolerance, " dDegC")\
|
2011-04-05 11:52:57 +02:00
|
|
|
FIELD(0, u16, accuracy, " x 0.01%")\
|
2011-04-04 17:01:40 +02:00
|
|
|
FIELD(0, u32, oemDefined, "")\
|
2011-04-04 18:50:02 +02:00
|
|
|
FIELD(0, i16, nominalValue, " dDegC")\
|
2011-04-04 17:01:40 +02:00
|
|
|
FIELD(F_DERIVED, TemperatureProbeLocation, location, "")\
|
|
|
|
FIELD(F_DERIVED, Status, status, "")
|
|
|
|
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
2011-04-03 17:38:48 +02:00
|
|
|
// SystemBoot
|
|
|
|
|
2011-04-05 11:52:57 +02:00
|
|
|
#define SystemBootStatus_ENUMERATORS\
|
|
|
|
ENUM(no_error, 0)\
|
|
|
|
ENUM(no_bootable_media, 1)\
|
|
|
|
ENUM(os_load_failed, 2)\
|
|
|
|
ENUM(hardware_failure_firmware, 3)\
|
|
|
|
ENUM(hardware_failure_os, 4)\
|
|
|
|
ENUM(user_requested_boot, 5)\
|
|
|
|
ENUM(security_violation, 6)\
|
|
|
|
ENUM(previously_requested_image, 7)\
|
|
|
|
ENUM(watchdog_expired, 8)
|
2011-04-03 17:38:48 +02:00
|
|
|
|
|
|
|
#define SystemBoot_FIELDS\
|
|
|
|
FIELD(F_INTERNAL, u32, reserved32, "")\
|
|
|
|
FIELD(F_INTERNAL, u16, reserved16, "")\
|
2011-04-05 11:52:57 +02:00
|
|
|
FIELD(F_ENUM, SystemBootStatus, status, "")\
|
2011-04-03 17:38:48 +02:00
|
|
|
|
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
2011-04-05 11:52:57 +02:00
|
|
|
// (can't be a typedef due to template specialization)
|
|
|
|
struct Handle
|
|
|
|
{
|
|
|
|
Handle(): value(0) {}
|
|
|
|
Handle(u16 value): value(value) {}
|
|
|
|
|
|
|
|
u16 value;
|
|
|
|
};
|
2011-04-04 19:44:36 +02:00
|
|
|
|
2011-04-03 17:38:48 +02:00
|
|
|
struct Header
|
|
|
|
{
|
|
|
|
u8 id;
|
|
|
|
u8 length;
|
|
|
|
Handle handle;
|
|
|
|
};
|
|
|
|
|
2011-04-04 19:44:36 +02:00
|
|
|
// define each enumeration
|
|
|
|
#define ENUM(enumerator, value) enumerator = value,
|
2011-04-05 11:52:57 +02:00
|
|
|
#define ENUMERATION(name)\
|
|
|
|
struct name\
|
|
|
|
{\
|
|
|
|
name(): value((Enum)0) {}\
|
|
|
|
name(u8 value8): value((Enum)value8) {}\
|
|
|
|
enum Enum { name##_ENUMERATORS } value;\
|
|
|
|
operator int() const { return value; }\
|
|
|
|
};
|
2011-04-04 19:44:36 +02:00
|
|
|
ENUMERATIONS
|
|
|
|
#undef ENUMERATION
|
|
|
|
#undef ENUM
|
|
|
|
|
2011-04-03 17:38:48 +02:00
|
|
|
// declare each structure
|
|
|
|
#define FIELD(flags, type, name, units) type name;
|
|
|
|
#define STRUCTURE(name, id) struct name { Header header; name* next; name##_FIELDS };
|
|
|
|
STRUCTURES
|
|
|
|
#undef STRUCTURE
|
|
|
|
#undef FIELD
|
|
|
|
|
|
|
|
// declare a UDT holding pointers (freed at exit) to each structure
|
|
|
|
struct Structures
|
|
|
|
{
|
|
|
|
#define STRUCTURE(name, id) name* name##_;
|
|
|
|
STRUCTURES
|
|
|
|
#undef STRUCTURE
|
|
|
|
};
|
|
|
|
|
2011-04-04 19:44:36 +02:00
|
|
|
#pragma pack(pop)
|
2011-04-03 17:38:48 +02:00
|
|
|
|
|
|
|
LIB_API const Structures* GetStructures();
|
2011-04-04 18:50:02 +02:00
|
|
|
LIB_API std::string StringizeStructures(const Structures*);
|
2011-04-03 17:38:48 +02:00
|
|
|
|
|
|
|
} // namespace SMBIOS
|
|
|
|
|
|
|
|
#endif // #ifndef INCLUDED_SMBIOS
|