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