1 /** @file 2 Static SMBIOS Table for platform 3 4 Note SMBIOS 2.7.1 Required structures: 5 BIOS Information (Type 0) 6 System Information (Type 1) 7 System Enclosure (Type 3) 8 Processor Information (Type 4) - CPU Driver 9 Cache Information (Type 7) - For cache that is external to processor 10 System Slots (Type 9) - If system has slots 11 Physical Memory Array (Type 16) 12 Memory Device (Type 17) - For each socketed system-memory Device 13 Memory Array Mapped Address (Type 19) - One per contiguous block per Physical Memroy Array 14 System Boot Information (Type 32) 15 16 Copyright (c) 2012, Apple Inc. All rights reserved.<BR> 17 This program and the accompanying materials 18 are licensed and made available under the terms and conditions of the BSD License 19 which accompanies this distribution. The full text of the license may be found at 20 http://opensource.org/licenses/bsd-license.php 21 22 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 23 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 24 25 **/ 26 27 #include <PiDxe.h> 28 #include <IndustryStandard/SmBios.h> 29 #include <Protocol/Smbios.h> 30 #include <Library/SmbiosLib.h> 31 32 33 SMBIOS_TABLE_TYPE0 gSmbiosType0Template = { 34 { EFI_SMBIOS_TYPE_BIOS_INFORMATION, sizeof (SMBIOS_TABLE_TYPE0), 0 }, 35 1, // Vendor String 36 2, // BiosVersion String 37 0xE000, // BiosSegment 38 3, // BiosReleaseDate String 39 0x7F, // BiosSize 40 { // BiosCharacteristics 41 0, // Reserved :2; ///< Bits 0-1. 42 0, // Unknown :1; 43 0, // BiosCharacteristicsNotSupported :1; 44 0, // IsaIsSupported :1; 45 0, // McaIsSupported :1; 46 0, // EisaIsSupported :1; 47 1, // PciIsSupported :1; 48 0, // PcmciaIsSupported :1; 49 0, // PlugAndPlayIsSupported :1; 50 0, // ApmIsSupported :1; 51 1, // BiosIsUpgradable :1; 52 1, // BiosShadowingAllowed :1; 53 0, // VlVesaIsSupported :1; 54 0, // EscdSupportIsAvailable :1; 55 0, // BootFromCdIsSupported :1; 56 1, // SelectableBootIsSupported :1; 57 0, // RomBiosIsSocketed :1; 58 0, // BootFromPcmciaIsSupported :1; 59 0, // EDDSpecificationIsSupported :1; 60 0, // JapaneseNecFloppyIsSupported :1; 61 0, // JapaneseToshibaFloppyIsSupported :1; 62 0, // Floppy525_360IsSupported :1; 63 0, // Floppy525_12IsSupported :1; 64 0, // Floppy35_720IsSupported :1; 65 0, // Floppy35_288IsSupported :1; 66 0, // PrintScreenIsSupported :1; 67 0, // Keyboard8042IsSupported :1; 68 0, // SerialIsSupported :1; 69 0, // PrinterIsSupported :1; 70 0, // CgaMonoIsSupported :1; 71 0, // NecPc98 :1; 72 0 // ReservedForVendor :32; ///< Bits 32-63. Bits 32-47 reserved for BIOS vendor 73 ///< and bits 48-63 reserved for System Vendor. 74 }, 75 { // BIOSCharacteristicsExtensionBytes[] 76 0x81, // AcpiIsSupported :1; 77 // UsbLegacyIsSupported :1; 78 // AgpIsSupported :1; 79 // I2OBootIsSupported :1; 80 // Ls120BootIsSupported :1; 81 // AtapiZipDriveBootIsSupported :1; 82 // Boot1394IsSupported :1; 83 // SmartBatteryIsSupported :1; 84 // BIOSCharacteristicsExtensionBytes[1] 85 0x0a, // BiosBootSpecIsSupported :1; 86 // FunctionKeyNetworkBootIsSupported :1; 87 // TargetContentDistributionEnabled :1; 88 // UefiSpecificationSupported :1; 89 // VirtualMachineSupported :1; 90 // ExtensionByte2Reserved :3; 91 }, 92 0x00, // SystemBiosMajorRelease 93 0x01, // SystemBiosMinorRelease 94 0xFF, // EmbeddedControllerFirmwareMajorRelease 95 0xFF, // EmbeddedControllerFirmwareMinorRelease 96 }; 97 CHAR8 *gSmbiosType0Strings[] = { 98 "http://www.tianocore.org/edk2/", // Vendor String 99 __TIME__, // BiosVersion String 100 __DATE__, // BiosReleaseDate String 101 NULL 102 }; 103 104 SMBIOS_TABLE_TYPE1 gSmbiosType1Template = { 105 { EFI_SMBIOS_TYPE_SYSTEM_INFORMATION, sizeof (SMBIOS_TABLE_TYPE1), 0 }, 106 1, // Manufacturer String 107 2, // ProductName String 108 3, // Version String 109 4, // SerialNumber String 110 { 0x25EF0280, 0xEC82, 0x42B0, { 0x8F, 0xB6, 0x10, 0xAD, 0xCC, 0xC6, 0x7C, 0x02 } }, 111 SystemWakeupTypePowerSwitch, 112 5, // SKUNumber String 113 6, // Family String 114 }; 115 CHAR8 *gSmbiosType1Strings[] = { 116 "http://www.tianocore.org/edk2/", 117 "EmulatorPkg", 118 "1.0", 119 "System Serial#", 120 "System SKU#", 121 "edk2", 122 NULL 123 }; 124 125 SMBIOS_TABLE_TYPE2 gSmbiosType2Template = { 126 { EFI_SMBIOS_TYPE_BASEBOARD_INFORMATION, sizeof (SMBIOS_TABLE_TYPE2), 0 }, 127 1, // Manufacturer String 128 2, // ProductName String 129 3, // Version String 130 4, // SerialNumber String 131 5, // AssetTag String 132 { // FeatureFlag 133 1, // Motherboard :1; 134 0, // RequiresDaughterCard :1; 135 0, // Removable :1; 136 0, // Replaceable :1; 137 0, // HotSwappable :1; 138 0, // Reserved :3; 139 }, 140 6, // LocationInChassis String 141 0, // ChassisHandle; 142 BaseBoardTypeMotherBoard, // BoardType; 143 0, // NumberOfContainedObjectHandles; 144 { 0 } // ContainedObjectHandles[1]; 145 }; 146 CHAR8 *gSmbiosType2Strings[] = { 147 "http://www.tianocore.org/edk2/", 148 "EmulatorPkg", 149 "1.0", 150 "Base Board Serial#", 151 "Base Board Asset Tag#", 152 "Part Component", 153 NULL 154 }; 155 156 SMBIOS_TABLE_TYPE3 gSmbiosType3Template = { 157 { EFI_SMBIOS_TYPE_SYSTEM_ENCLOSURE, sizeof (SMBIOS_TABLE_TYPE3), 0 }, 158 1, // Manufacturer String 159 MiscChassisTypeLapTop, // Type; 160 2, // Version String 161 3, // SerialNumber String 162 4, // AssetTag String 163 ChassisStateSafe, // BootupState; 164 ChassisStateSafe, // PowerSupplyState; 165 ChassisStateSafe, // ThermalState; 166 ChassisSecurityStatusNone,// SecurityStatus; 167 { 0, 0, 0, 0 }, // OemDefined[4]; 168 0, // Height; 169 0, // NumberofPowerCords; 170 0, // ContainedElementCount; 171 0, // ContainedElementRecordLength; 172 { { 0 } }, // ContainedElements[1]; 173 }; 174 CHAR8 *gSmbiosType3Strings[] = { 175 "http://www.tianocore.org/edk2/", 176 "EmulatorPkg", 177 "Chassis Board Serial#", 178 "Chassis Board Asset Tag#", 179 NULL 180 }; 181 182 SMBIOS_TABLE_TYPE8 gSmbiosType8Template1 = { 183 { EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, sizeof (SMBIOS_TABLE_TYPE8), 0 }, 184 0, // InternalReferenceDesignator String 185 PortConnectorTypeNone, // InternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE. 186 1, // ExternalReferenceDesignator String 187 PortConnectorTypeNone, // ExternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE. 188 PortTypeOther, // PortType; ///< The enumeration value from MISC_PORT_TYPE. 189 }; 190 CHAR8 *gSmbiosType8Strings1[] = { 191 "Mini DisplayPort", 192 NULL 193 }; 194 195 SMBIOS_TABLE_TYPE8 gSmbiosType8Template2 = { 196 { EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, sizeof (SMBIOS_TABLE_TYPE8), 0 }, 197 0, // InternalReferenceDesignator String 198 PortConnectorTypeNone, // InternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE. 199 1, // ExternalReferenceDesignator String 200 PortConnectorTypeNone, // ExternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE. 201 PortTypeFireWire, // PortType; ///< The enumeration value from MISC_PORT_TYPE. 202 }; 203 CHAR8 *gSmbiosType8Strings2[] = { 204 "FireWire 800", 205 NULL 206 }; 207 208 209 SMBIOS_TABLE_TYPE8 gSmbiosType8Template3 = { 210 { EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, sizeof (SMBIOS_TABLE_TYPE8), 0 }, 211 0, // InternalReferenceDesignator String 212 PortConnectorTypeNone, // InternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE. 213 1, // ExternalReferenceDesignator String 214 PortConnectorTypeRJ45, // ExternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE. 215 PortTypeNetworkPort, // PortType; ///< The enumeration value from MISC_PORT_TYPE. 216 }; 217 CHAR8 *gSmbiosType8Strings3[] = { 218 "Ethernet", 219 NULL 220 }; 221 222 SMBIOS_TABLE_TYPE8 gSmbiosType8Template4 = { 223 { EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, sizeof (SMBIOS_TABLE_TYPE8), 0 }, 224 0, // InternalReferenceDesignator String 225 PortConnectorTypeNone, // InternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE. 226 1, // ExternalReferenceDesignator String 227 PortConnectorTypeUsb, // ExternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE. 228 PortTypeUsb, // PortType; ///< The enumeration value from MISC_PORT_TYPE. 229 }; 230 CHAR8 *gSmbiosType8Strings4[] = { 231 "USB0", 232 NULL 233 }; 234 235 SMBIOS_TABLE_TYPE8 gSmbiosType8Template5 = { 236 { EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, sizeof (SMBIOS_TABLE_TYPE8), 0 }, 237 0, // InternalReferenceDesignator String 238 PortConnectorTypeNone, // InternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE. 239 1, // ExternalReferenceDesignator String 240 PortConnectorTypeUsb, // ExternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE. 241 PortTypeUsb, // PortType; ///< The enumeration value from MISC_PORT_TYPE. 242 }; 243 CHAR8 *gSmbiosType8Strings5[] = { 244 "USB1", 245 NULL 246 }; 247 248 SMBIOS_TABLE_TYPE8 gSmbiosType8Template6 = { 249 { EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, sizeof (SMBIOS_TABLE_TYPE8), 0 }, 250 0, // InternalReferenceDesignator String 251 PortConnectorTypeNone, // InternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE. 252 1, // ExternalReferenceDesignator String 253 PortConnectorTypeUsb, // ExternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE. 254 PortTypeUsb, // PortType; ///< The enumeration value from MISC_PORT_TYPE. 255 }; 256 CHAR8 *gSmbiosType8Strings6[] = { 257 "USB2", 258 NULL 259 }; 260 261 SMBIOS_TABLE_TYPE8 gSmbiosType8Template7 = { 262 { EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, sizeof (SMBIOS_TABLE_TYPE8), 0 }, 263 0, // InternalReferenceDesignator String 264 PortConnectorTypeNone, // InternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE. 265 1, // ExternalReferenceDesignator String 266 PortConnectorTypeUsb, // ExternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE. 267 PortTypeUsb, // PortType; ///< The enumeration value from MISC_PORT_TYPE. 268 }; 269 CHAR8 *gSmbiosType8Strings7[] = { 270 "USB3", 271 NULL 272 }; 273 274 SMBIOS_TABLE_TYPE8 gSmbiosType8Template8 = { 275 { EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, sizeof (SMBIOS_TABLE_TYPE8), 0 }, 276 0, // InternalReferenceDesignator String 277 PortConnectorTypeNone, // InternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE. 278 1, // ExternalReferenceDesignator String 279 PortConnectorTypeHeadPhoneMiniJack, // ExternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE. 280 PortTypeAudioPort, // PortType; ///< The enumeration value from MISC_PORT_TYPE. 281 }; 282 CHAR8 *gSmbiosType8Strings8[] = { 283 "Audio Line In", 284 NULL 285 }; 286 287 SMBIOS_TABLE_TYPE8 gSmbiosType8Template9 = { 288 { EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION, sizeof (SMBIOS_TABLE_TYPE8), 0 }, 289 0, // InternalReferenceDesignator String 290 PortConnectorTypeNone, // InternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE. 291 1, // ExternalReferenceDesignator String 292 PortConnectorTypeHeadPhoneMiniJack, // ExternalConnectorType; ///< The enumeration value from MISC_PORT_CONNECTOR_TYPE. 293 PortTypeAudioPort, // PortType; ///< The enumeration value from MISC_PORT_TYPE. 294 }; 295 CHAR8 *gSmbiosType8Strings9[] = { 296 "Audio Line Out", 297 NULL 298 }; 299 300 SMBIOS_TABLE_TYPE9 gSmbiosType9Template = { 301 { EFI_SMBIOS_TYPE_SYSTEM_SLOTS, sizeof (SMBIOS_TABLE_TYPE9), 0 }, 302 1, // SlotDesignation String 303 SlotTypeOther, // SlotType; ///< The enumeration value from MISC_SLOT_TYPE. 304 SlotDataBusWidthOther, // SlotDataBusWidth; ///< The enumeration value from MISC_SLOT_DATA_BUS_WIDTH. 305 SlotUsageAvailable, // CurrentUsage; ///< The enumeration value from MISC_SLOT_USAGE. 306 SlotLengthOther, // SlotLength; ///< The enumeration value from MISC_SLOT_LENGTH. 307 0, // SlotID; 308 { // SlotCharacteristics1; 309 1, // CharacteristicsUnknown :1; 310 0, // Provides50Volts :1; 311 0, // Provides33Volts :1; 312 0, // SharedSlot :1; 313 0, // PcCard16Supported :1; 314 0, // CardBusSupported :1; 315 0, // ZoomVideoSupported :1; 316 0, // ModemRingResumeSupported:1; 317 }, 318 { // SlotCharacteristics2; 319 0, // PmeSignalSupported :1; 320 0, // HotPlugDevicesSupported :1; 321 0, // SmbusSignalSupported :1; 322 0, // Reserved :5; ///< Set to 0. 323 }, 324 0, // SegmentGroupNum; 325 0, // BusNum; 326 0, // DevFuncNum; 327 }; 328 CHAR8 *gSmbiosType9Strings[] = { 329 "SD Card", 330 NULL 331 }; 332 333 SMBIOS_TABLE_TYPE11 gSmbiosType11Template = { 334 { EFI_SMBIOS_TYPE_OEM_STRINGS, sizeof (SMBIOS_TABLE_TYPE11), 0 }, 335 1 // StringCount 336 }; 337 CHAR8 *gSmbiosType11Strings[] = { 338 "https://svn.code.sf.net/p/edk2/code/trunk/edk2/EmulatorPkg/", 339 NULL 340 }; 341 342 343 SMBIOS_TABLE_TYPE12 gSmbiosType12Template = { 344 { EFI_SMBIOS_TYPE_SYSTEM_CONFIGURATION_OPTIONS, sizeof (SMBIOS_TABLE_TYPE12), 0 }, 345 1 // StringCount 346 }; 347 CHAR8 *gSmbiosType12Strings[] = { 348 "https://svn.code.sf.net/p/edk2/code/trunk/edk2/EmulatorPkg/EmulatorPkg.dsc", 349 NULL 350 }; 351 352 SMBIOS_TABLE_TYPE16 gSmbiosType16Template = { 353 { EFI_SMBIOS_TYPE_PHYSICAL_MEMORY_ARRAY, sizeof (SMBIOS_TABLE_TYPE16), 0 }, 354 MemoryArrayLocationSystemBoard, // Location; ///< The enumeration value from MEMORY_ARRAY_LOCATION. 355 MemoryArrayUseSystemMemory, // Use; ///< The enumeration value from MEMORY_ARRAY_USE. 356 MemoryErrorCorrectionUnknown, // MemoryErrorCorrection; ///< The enumeration value from MEMORY_ERROR_CORRECTION. 357 0x80000000, // MaximumCapacity; 358 0xFFFE, // MemoryErrorInformationHandle; 359 1, // NumberOfMemoryDevices; 360 0x3fffffffffffffffULL, // ExtendedMaximumCapacity; 361 }; 362 363 SMBIOS_TABLE_TYPE17 gSmbiosType17Template = { 364 { EFI_SMBIOS_TYPE_MEMORY_DEVICE, sizeof (SMBIOS_TABLE_TYPE17), 0 }, 365 0, // MemoryArrayHandle; 366 0xFFFE, // MemoryErrorInformationHandle; 367 0xFFFF, // TotalWidth; 368 0xFFFF, // DataWidth; 369 0xFFFF, // Size; 370 MemoryFormFactorUnknown, // FormFactor; ///< The enumeration value from MEMORY_FORM_FACTOR. 371 0xff, // DeviceSet; 372 1, // DeviceLocator String 373 2, // BankLocator String 374 MemoryTypeDram, // MemoryType; ///< The enumeration value from MEMORY_DEVICE_TYPE. 375 { // TypeDetail; 376 0, // Reserved :1; 377 0, // Other :1; 378 1, // Unknown :1; 379 0, // FastPaged :1; 380 0, // StaticColumn :1; 381 0, // PseudoStatic :1; 382 0, // Rambus :1; 383 0, // Synchronous :1; 384 0, // Cmos :1; 385 0, // Edo :1; 386 0, // WindowDram :1; 387 0, // CacheDram :1; 388 0, // Nonvolatile :1; 389 0, // Registered :1; 390 0, // Unbuffered :1; 391 0, // Reserved1 :1; 392 }, 393 0, // Speed; 394 3, // Manufacturer String 395 0, // SerialNumber String 396 0, // AssetTag String 397 0, // PartNumber String 398 0, // Attributes; 399 0, // ExtendedSize; 400 0, // ConfiguredMemoryClockSpeed; 401 }; 402 CHAR8 *gSmbiosType17Strings[] = { 403 "OS Virtual Memory", 404 "malloc", 405 "OSV", 406 NULL 407 }; 408 409 SMBIOS_TABLE_TYPE23 gSmbiosType23Template = { 410 { EFI_SMBIOS_TYPE_SYSTEM_BOOT_INFORMATION, sizeof (SMBIOS_TABLE_TYPE23), 0 }, 411 0, // Capabilities; 412 0, // ResetCount; 413 0, // ResetLimit; 414 0, // TimerInterval; 415 0 // Timeout; 416 }; 417 418 SMBIOS_TABLE_TYPE32 gSmbiosType32Template = { 419 { EFI_SMBIOS_TYPE_SYSTEM_BOOT_INFORMATION, sizeof (SMBIOS_TABLE_TYPE32), 0 }, 420 { 0, 0, 0, 0, 0, 0 }, // Reserved[6]; 421 BootInformationStatusNoError // BootStatus 422 }; 423 424 425 426 SMBIOS_TEMPLATE_ENTRY gSmbiosTemplate[] = { 427 { (SMBIOS_STRUCTURE *)&gSmbiosType0Template, gSmbiosType0Strings }, 428 { (SMBIOS_STRUCTURE *)&gSmbiosType1Template, gSmbiosType1Strings }, 429 { (SMBIOS_STRUCTURE *)&gSmbiosType2Template, gSmbiosType2Strings }, 430 { (SMBIOS_STRUCTURE *)&gSmbiosType3Template, gSmbiosType3Strings }, 431 { (SMBIOS_STRUCTURE *)&gSmbiosType8Template1, gSmbiosType8Strings1 }, 432 { (SMBIOS_STRUCTURE *)&gSmbiosType8Template2, gSmbiosType8Strings2 }, 433 { (SMBIOS_STRUCTURE *)&gSmbiosType8Template3, gSmbiosType8Strings3 }, 434 { (SMBIOS_STRUCTURE *)&gSmbiosType8Template4, gSmbiosType8Strings4 }, 435 { (SMBIOS_STRUCTURE *)&gSmbiosType8Template5, gSmbiosType8Strings5 }, 436 { (SMBIOS_STRUCTURE *)&gSmbiosType8Template6, gSmbiosType8Strings6 }, 437 { (SMBIOS_STRUCTURE *)&gSmbiosType8Template7, gSmbiosType8Strings7 }, 438 { (SMBIOS_STRUCTURE *)&gSmbiosType8Template8, gSmbiosType8Strings8 }, 439 { (SMBIOS_STRUCTURE *)&gSmbiosType8Template9, gSmbiosType8Strings9 }, 440 { (SMBIOS_STRUCTURE *)&gSmbiosType9Template, gSmbiosType9Strings }, 441 { (SMBIOS_STRUCTURE *)&gSmbiosType11Template, gSmbiosType11Strings }, 442 { (SMBIOS_STRUCTURE *)&gSmbiosType12Template, gSmbiosType12Strings }, 443 { (SMBIOS_STRUCTURE *)&gSmbiosType16Template, NULL }, 444 { (SMBIOS_STRUCTURE *)&gSmbiosType17Template, gSmbiosType17Strings }, 445 { (SMBIOS_STRUCTURE *)&gSmbiosType23Template, NULL }, 446 { (SMBIOS_STRUCTURE *)&gSmbiosType32Template, NULL }, 447 { NULL, NULL } 448 }; 449