]> git.proxmox.com Git - mirror_edk2.git/blame - EdkCompatibilityPkg/Compatibility/PiSmbiosRecordOnDataHubSmbiosRecordThunk/MiscConv.c
Add missing Type 35 support and correct SmbiosFldMiscType13 implementation.
[mirror_edk2.git] / EdkCompatibilityPkg / Compatibility / PiSmbiosRecordOnDataHubSmbiosRecordThunk / MiscConv.c
CommitLineData
024b1029 1/** @file\r
2 Routines that support Misc SubClass data records translation.\r
3 \r
584d5652
HT
4Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>\r
5This program and the accompanying materials\r
024b1029 6are licensed and made available under the terms and conditions of the BSD License\r
7which accompanies this distribution. The full text of the license may be found at\r
8http://opensource.org/licenses/bsd-license.php\r
9\r
10THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
11WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
12\r
13**/\r
14\r
15#include "Thunk.h"\r
16\r
17/**\r
18 Field Filling Function for Misc SubClass record type 0 -- Bios Information.\r
19 \r
20 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
21 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
22 @param RecordData RecordData buffer will be filled.\r
23 @param RecordDataSize The size of RecordData buffer.\r
24 \r
25 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
26**/\r
27EFI_STATUS\r
28SmbiosFldMiscType0 (\r
29 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
30 IN UINT32 Offset,\r
31 IN VOID *RecordData,\r
32 IN UINT32 RecordDataSize\r
33 )\r
34{\r
35 EFI_STATUS Status;\r
36 EFI_MISC_BIOS_VENDOR_DATA *BiosInfo;\r
37\r
38 Status = EFI_SUCCESS;\r
39 BiosInfo = NULL;\r
40\r
41 BiosInfo = (EFI_MISC_BIOS_VENDOR_DATA *) RecordData;\r
42\r
43 //\r
44 // Bios Vendor\r
45 //\r
46 SmbiosFldString (\r
47 StructureNode,\r
48 OFFSET_OF (SMBIOS_TABLE_TYPE0, Vendor),\r
49 &(BiosInfo->BiosVendor),\r
50 2 // 64 * sizeof(CHAR16)\r
51 );\r
52\r
53 //\r
54 // Bios Version\r
55 //\r
56 SmbiosFldString (\r
57 StructureNode,\r
58 OFFSET_OF (SMBIOS_TABLE_TYPE0, BiosVersion),\r
59 &(BiosInfo->BiosVersion),\r
60 2 // 64 * sizeof(CHAR16)\r
61 );\r
62\r
63 //\r
64 // Bios Release Date\r
65 //\r
66 SmbiosFldString (\r
67 StructureNode,\r
68 OFFSET_OF (SMBIOS_TABLE_TYPE0, BiosReleaseDate),\r
69 &(BiosInfo->BiosReleaseDate),\r
70 2 // 64 * sizeof(CHAR16)\r
71 );\r
72\r
73 //\r
74 // Bios Starting Address Segment\r
75 //\r
76 CopyMem (\r
77 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE0, BiosSegment),\r
78 &BiosInfo->BiosStartingAddress,\r
79 2\r
80 );\r
81\r
82 //\r
83 // Bios Physical device size\r
84 //\r
85 SmbiosFldBase2ToByteWith64K (\r
86 StructureNode,\r
87 OFFSET_OF (SMBIOS_TABLE_TYPE0, BiosSize),\r
88 &BiosInfo->BiosPhysicalDeviceSize,\r
89 sizeof (EFI_EXP_BASE2_DATA)\r
90 );\r
91 (*(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE0, BiosSize)))--;\r
92\r
93 //\r
94 // Bios Characteristics\r
95 //\r
96 CopyMem (\r
97 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE0, BiosCharacteristics),\r
98 &BiosInfo->BiosCharacteristics1,\r
99 4\r
100 );\r
101 \r
102 //\r
103 // Bios Characteristics higher four bytes\r
104 //\r
105 CopyMem (\r
106 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE0, BiosCharacteristics) + 4,\r
107 &BiosInfo->BiosCharacteristics2,\r
108 4\r
109 ); \r
110\r
111 //\r
112 // Bios Characteristics Extension1/2\r
113 //\r
114 CopyMem (\r
115 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE0, BIOSCharacteristicsExtensionBytes),\r
116 (UINT8 *) &BiosInfo->BiosCharacteristics1 + 4,\r
117 2\r
118 );\r
119\r
120 //\r
121 // System BIOS Major Release\r
122 //\r
123 CopyMem (\r
124 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE0, SystemBiosMajorRelease),\r
125 (UINT8 *) &BiosInfo->BiosMajorRelease,\r
126 1\r
127 );\r
128\r
129 //\r
130 // System BIOS Minor Release\r
131 //\r
132 CopyMem (\r
133 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE0, SystemBiosMinorRelease),\r
134 (UINT8 *) &BiosInfo->BiosMinorRelease,\r
135 1\r
136 );\r
137\r
138 //\r
139 // Embedded Controller Firmware Major Release\r
140 //\r
141 CopyMem (\r
142 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE0, EmbeddedControllerFirmwareMajorRelease),\r
143 (UINT8 *) &BiosInfo->BiosEmbeddedFirmwareMajorRelease,\r
144 1\r
145 );\r
146\r
147 //\r
148 // Embedded Controller Firmware Minor Release\r
149 //\r
150 CopyMem (\r
151 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE0, EmbeddedControllerFirmwareMinorRelease),\r
152 (UINT8 *) &BiosInfo->BiosEmbeddedFirmwareMinorRelease,\r
153 1\r
154 );\r
155\r
156 return Status;\r
157}\r
158\r
159/**\r
160 Field Filling Function for Misc SubClass record type 1 -- System Information.\r
161 \r
162 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
163 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
164 @param RecordData RecordData buffer will be filled.\r
165 @param RecordDataSize The size of RecordData buffer.\r
166 \r
167 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
168**/\r
169EFI_STATUS\r
170SmbiosFldMiscType1 (\r
171 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
172 IN UINT32 Offset,\r
173 IN VOID *RecordData,\r
174 IN UINT32 RecordDataSize\r
175 )\r
176{\r
177 EFI_STATUS Status;\r
178 EFI_MISC_SYSTEM_MANUFACTURER_DATA *SystemInfo;\r
179\r
180 Status = EFI_SUCCESS;\r
181 SystemInfo = NULL;\r
182\r
183 SystemInfo = (EFI_MISC_SYSTEM_MANUFACTURER_DATA *) RecordData;\r
184\r
185 //\r
186 // System Manufacturer\r
187 //\r
188 SmbiosFldString (\r
189 StructureNode,\r
190 OFFSET_OF (SMBIOS_TABLE_TYPE1, Manufacturer),\r
191 &(SystemInfo->SystemManufacturer),\r
192 2 // 64 * sizeof(CHAR16)\r
193 );\r
194\r
195 //\r
196 // System Product Name\r
197 //\r
198 SmbiosFldString (\r
199 StructureNode,\r
200 OFFSET_OF (SMBIOS_TABLE_TYPE1, ProductName),\r
201 &(SystemInfo->SystemProductName),\r
202 2 // 64 * sizeof(CHAR16)\r
203 );\r
204\r
205 //\r
206 // System Version\r
207 //\r
208 SmbiosFldString (\r
209 StructureNode,\r
210 OFFSET_OF (SMBIOS_TABLE_TYPE1, Version),\r
211 &(SystemInfo->SystemVersion),\r
212 2 // 64 * sizeof(CHAR16)\r
213 );\r
214\r
215 //\r
216 // System Serial Number\r
217 //\r
218 SmbiosFldString (\r
219 StructureNode,\r
220 OFFSET_OF (SMBIOS_TABLE_TYPE1, SerialNumber),\r
221 &(SystemInfo->SystemSerialNumber),\r
222 2 // 64 * sizeof(CHAR16)\r
223 );\r
224\r
225 //\r
226 // Uuid\r
227 //\r
228 CopyMem (\r
229 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE1, Uuid),\r
230 &SystemInfo->SystemUuid,\r
231 16\r
232 );\r
233\r
234 //\r
235 // Wakeup Type\r
236 //\r
237 CopyMem (\r
238 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE1, WakeUpType),\r
239 &SystemInfo->SystemWakeupType,\r
240 1\r
241 );\r
242\r
243 //\r
244 // System SKU Number\r
245 //\r
246 SmbiosFldString (\r
247 StructureNode,\r
248 OFFSET_OF (SMBIOS_TABLE_TYPE1, SKUNumber),\r
249 &(SystemInfo->SystemSKUNumber),\r
250 2 // 64 * sizeof(CHAR16)\r
251 );\r
252\r
253 //\r
254 // System Family\r
255 //\r
256 SmbiosFldString (\r
257 StructureNode,\r
258 OFFSET_OF (SMBIOS_TABLE_TYPE1, Family),\r
259 &(SystemInfo->SystemFamily),\r
260 2 // 64 * sizeof(CHAR16)\r
261 );\r
262\r
263 return Status;\r
264}\r
265\r
266/**\r
267 Field Filling Function for record type 2 -- Base Board Manufacture.\r
268 \r
269 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
270 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
271 @param RecordData RecordData buffer will be filled.\r
272 @param RecordDataSize The size of RecordData buffer.\r
273 \r
274 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
275**/\r
276EFI_STATUS\r
277SmbiosFldMiscType2 (\r
278 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
279 IN UINT32 Offset,\r
280 IN VOID *RecordData,\r
281 IN UINT32 RecordDataSize\r
282 )\r
283{\r
284 EFI_STATUS Status;\r
285 EFI_MISC_BASE_BOARD_MANUFACTURER_DATA *Bbm;\r
286 Status = EFI_SUCCESS;\r
287 Bbm = (EFI_MISC_BASE_BOARD_MANUFACTURER_DATA *) RecordData;\r
288\r
289 //\r
290 // Manufacturer\r
291 //\r
292 SmbiosFldString (\r
293 StructureNode,\r
294 OFFSET_OF (SMBIOS_TABLE_TYPE2, Manufacturer),\r
295 &(Bbm->BaseBoardManufacturer),\r
296 2\r
297 );\r
298\r
299 //\r
300 // Product\r
301 //\r
302 SmbiosFldString (\r
303 StructureNode,\r
304 OFFSET_OF (SMBIOS_TABLE_TYPE2, ProductName),\r
305 &(Bbm->BaseBoardProductName),\r
306 2\r
307 );\r
308\r
309 //\r
310 // Version\r
311 //\r
312 SmbiosFldString (\r
313 StructureNode,\r
314 OFFSET_OF (SMBIOS_TABLE_TYPE2, Version),\r
315 &(Bbm->BaseBoardVersion),\r
316 2\r
317 );\r
318\r
319 //\r
320 // Serial Number\r
321 //\r
322 SmbiosFldString (\r
323 StructureNode,\r
324 OFFSET_OF (SMBIOS_TABLE_TYPE2, SerialNumber),\r
325 &(Bbm->BaseBoardSerialNumber),\r
326 2\r
327 );\r
328\r
329 //\r
330 // Asset Tag\r
331 //\r
332 SmbiosFldString (\r
333 StructureNode,\r
334 OFFSET_OF (SMBIOS_TABLE_TYPE2, AssetTag),\r
335 &(Bbm->BaseBoardAssetTag),\r
336 2\r
337 );\r
338\r
339 //\r
340 // Location in Chassis\r
341 //\r
342 SmbiosFldString (\r
343 StructureNode,\r
344 OFFSET_OF (SMBIOS_TABLE_TYPE2, LocationInChassis),\r
345 &(Bbm->BaseBoardChassisLocation),\r
346 2\r
347 );\r
348\r
349 //\r
350 // Feature Flags\r
351 //\r
352 CopyMem (\r
353 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE2, FeatureFlag),\r
354 &Bbm->BaseBoardFeatureFlags,\r
355 1\r
356 );\r
357\r
358 //\r
359 // Board Type\r
360 //\r
361 *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE2, BoardType)) = (UINT8) Bbm->BaseBoardType;\r
362\r
363 //\r
364 // Chassis Handle\r
365 //\r
366 SmbiosFldInterLink (\r
367 StructureNode,\r
368 (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE2, ChassisHandle),\r
369 3, // SMBIOS type 3 - System Enclosure or Chassis\r
370 &Bbm->BaseBoardChassisLink,\r
371 &gEfiMiscSubClassGuid\r
372 );\r
373\r
374 //\r
375 // Number of Contained Object Handles\r
376 //\r
377 *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE2, NumberOfContainedObjectHandles)) = (UINT8) Bbm->BaseBoardNumberLinks;\r
378\r
379 return Status;\r
380}\r
381\r
382/**\r
383 Field Filling Function for Misc SubClass record type 3 -\r
384 - System Enclosure or Chassis.\r
385 \r
386 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
387 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
388 @param RecordData RecordData buffer will be filled.\r
389 @param RecordDataSize The size of RecordData buffer.\r
390 \r
391 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
392**/\r
393EFI_STATUS\r
394SmbiosFldMiscType3 (\r
395 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
396 IN UINT32 Offset,\r
397 IN VOID *RecordData,\r
398 IN UINT32 RecordDataSize\r
399 )\r
400{\r
401 EFI_STATUS Status;\r
402 EFI_MISC_CHASSIS_MANUFACTURER_DATA *Ec;\r
403 EFI_MISC_ELEMENTS *Element;\r
404 UINT16 Index;\r
405 UINT8 ContainedElementType;\r
406 Status = EFI_SUCCESS;\r
407 Ec = (EFI_MISC_CHASSIS_MANUFACTURER_DATA *) RecordData;\r
408\r
409 //\r
410 // Chassis Type\r
411 //\r
412 *(UINT8*)((UINT8 *) (StructureNode->Structure) + \r
413 OFFSET_OF (SMBIOS_TABLE_TYPE3, Type)) \r
414 = (UINT8) (Ec->ChassisType.ChassisType | Ec->ChassisType.ChassisLockPresent << 7);\r
415\r
416\r
417 //\r
418 // Chassis Bootup State\r
419 //\r
420 CopyMem (\r
421 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE3, BootupState),\r
422 &Ec->ChassisBootupState,\r
423 1\r
424 );\r
425\r
426 //\r
427 // Chassis Power Supply State\r
428 //\r
429 CopyMem (\r
430 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE3, PowerSupplyState),\r
431 &Ec->ChassisPowerSupplyState,\r
432 1\r
433 );\r
434\r
435 //\r
436 // Chassis Thermal State\r
437 //\r
438 CopyMem (\r
439 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE3, ThermalState),\r
440 &Ec->ChassisThermalState,\r
441 1\r
442 );\r
443\r
444 //\r
445 // Chassis Security State\r
446 //\r
447 CopyMem (\r
448 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE3, SecurityStatus),\r
449 &Ec->ChassisSecurityState,\r
450 1\r
451 );\r
452\r
453 //\r
454 // Chassis Oem Defined\r
455 //\r
456 CopyMem (\r
457 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE3, OemDefined),\r
458 &Ec->ChassisOemDefined,\r
459 4\r
460 );\r
461\r
462 //\r
463 // Chassis Height\r
464 //\r
465 *(UINT8*)((UINT8*)(StructureNode->Structure) + \r
466 OFFSET_OF (SMBIOS_TABLE_TYPE3, Height)) \r
467 = (UINT8)Ec->ChassisHeight;\r
468\r
469 //\r
470 // Chassis Number Power Cords\r
471 //\r
472 *(UINT8*)((UINT8*)(StructureNode->Structure) + \r
473 OFFSET_OF (SMBIOS_TABLE_TYPE3, NumberofPowerCords)) \r
474 = (UINT8)Ec->ChassisNumberPowerCords;\r
475 \r
476 //\r
477 // Chassis Element Count\r
478 //\r
479 *(UINT8*)((UINT8*)(StructureNode->Structure) + \r
480 OFFSET_OF (SMBIOS_TABLE_TYPE3, ContainedElementCount)) \r
481 = (UINT8)Ec->ChassisElementCount;\r
482\r
de558d9d 483 if(Ec->ChassisElementCount > 0) {\r
024b1029 484 //\r
485 // Element Record Length\r
486 // Current solution covers first 3 bytes; user can extend to meet its requirements.\r
487 //\r
488 *(UINT8*)((UINT8*)(StructureNode->Structure) + \r
489 OFFSET_OF (SMBIOS_TABLE_TYPE3, ContainedElementRecordLength)) \r
490 = (UINT8)sizeof(CONTAINED_ELEMENT);\r
491\r
492 //\r
493 // Update the structure's length and StructureSize\r
494 //\r
495 StructureNode->Structure->Length = (UINT8)(StructureNode->Structure->Length + \r
496 Ec->ChassisElementCount * sizeof(CONTAINED_ELEMENT));\r
497 Status = SmbiosEnlargeStructureBuffer (\r
498 StructureNode,\r
499 StructureNode->Structure->Length,\r
500 StructureNode->StructureSize,\r
501 StructureNode->StructureSize + Ec->ChassisElementCount * sizeof(CONTAINED_ELEMENT)\r
502 );\r
503 if (EFI_ERROR (Status)) {\r
504 return Status;\r
505 }\r
506 \r
507 //\r
508 // Contained Elements\r
509 //\r
510 for (Index=0, Element = &Ec->ChassisElements; \r
511 Index < Ec->ChassisElementCount; \r
512 Index += 1, Element ++) {\r
513\r
514 //\r
515 // ContainedElementType\r
516 //\r
517 ContainedElementType = (UINT8)((Element->ChassisElementType.RecordType == 1)\r
518 ? (UINT8)(Element->ChassisElementType.RecordType << 7 | Element->ChassisElementType.Type)\r
519 : (UINT8)(Element->ChassisBaseBoard));\r
520 *(UINT8*)((UINT8*)(StructureNode->Structure) + \r
521 OFFSET_OF (SMBIOS_TABLE_TYPE3, ContainedElements) + \r
522 Index * sizeof(CONTAINED_ELEMENT) + \r
523 OFFSET_OF(CONTAINED_ELEMENT,ContainedElementType)) \r
524 = ContainedElementType;\r
525\r
526 //\r
527 // ContainedElementMinimum\r
528 //\r
529 *(UINT8*)((UINT8*)(StructureNode->Structure) + \r
530 OFFSET_OF (SMBIOS_TABLE_TYPE3, ContainedElements) + \r
531 Index * sizeof(CONTAINED_ELEMENT) + \r
532 OFFSET_OF(CONTAINED_ELEMENT,ContainedElementMinimum))\r
533 = (UINT8)Element->ChassisElementMinimum;\r
534\r
535 //\r
536 // ContainedElementMaximum\r
537 //\r
538 *(UINT8*)((UINT8*)(StructureNode->Structure) + \r
539 OFFSET_OF (SMBIOS_TABLE_TYPE3, ContainedElements) + \r
540 Index * sizeof(CONTAINED_ELEMENT) + \r
541 OFFSET_OF(CONTAINED_ELEMENT,ContainedElementMaximum)) \r
542 = (UINT8)Element->ChassisElementMaximum;\r
543 }\r
544 }\r
545\r
546 //\r
547 // Move the filling of following four String fields after Contained Elements \r
548 // because they would break SMBIOS table.\r
549 // Chassis Manufacturer\r
550 //\r
551 SmbiosFldString (\r
552 StructureNode,\r
553 OFFSET_OF (SMBIOS_TABLE_TYPE3, Manufacturer),\r
554 &(Ec->ChassisManufacturer),\r
555 2 // 64 * sizeof(CHAR16)\r
556 );\r
557\r
558 //\r
559 // Chassis Version\r
560 //\r
561 SmbiosFldString (\r
562 StructureNode,\r
563 OFFSET_OF (SMBIOS_TABLE_TYPE3, Version),\r
564 &(Ec->ChassisVersion),\r
565 2 // 64 * sizeof(CHAR16)\r
566 );\r
567\r
568 //\r
569 // Chassis Serial Number\r
570 //\r
571 SmbiosFldString (\r
572 StructureNode,\r
573 OFFSET_OF (SMBIOS_TABLE_TYPE3, SerialNumber),\r
574 &(Ec->ChassisSerialNumber),\r
575 2 // 64 * sizeof(CHAR16)\r
576 );\r
577\r
578 //\r
579 // Chassis Asset Tag\r
580 //\r
581 SmbiosFldString (\r
582 StructureNode,\r
583 OFFSET_OF (SMBIOS_TABLE_TYPE3, AssetTag),\r
584 &(Ec->ChassisAssetTag),\r
585 2 // 64 * sizeof(CHAR16)\r
586 );\r
587 \r
588 return Status;\r
589}\r
590\r
591/**\r
592 Field Filling Function for Misc SubClass record type 8 -- Port Connector.\r
593 \r
594 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
595 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
596 @param RecordData RecordData buffer will be filled.\r
597 @param RecordDataSize The size of RecordData buffer.\r
598 \r
599 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
600**/\r
601EFI_STATUS\r
602SmbiosFldMiscType8 (\r
603 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
604 IN UINT32 Offset,\r
605 IN VOID *RecordData,\r
606 IN UINT32 RecordDataSize\r
607 )\r
608{\r
609 EFI_STATUS Status;\r
610 EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *Picd;\r
611\r
612 Status = EFI_SUCCESS;\r
613 Picd = (EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR_DATA *) RecordData;\r
614\r
615 //\r
616 // Internal Connector Designator\r
617 //\r
618 SmbiosFldString (\r
619 StructureNode,\r
620 OFFSET_OF (SMBIOS_TABLE_TYPE8, InternalReferenceDesignator),\r
621 &(Picd->PortInternalConnectorDesignator),\r
622 2 // 64 * sizeof(CHAR16)\r
623 );\r
624\r
625 //\r
626 // Internal Connector Type\r
627 //\r
628 *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE8, InternalConnectorType)) = (UINT8) Picd->PortInternalConnectorType;\r
629\r
630 //\r
631 // External Connector Designator\r
632 //\r
633 SmbiosFldString (\r
634 StructureNode,\r
635 OFFSET_OF (SMBIOS_TABLE_TYPE8, ExternalReferenceDesignator),\r
636 &(Picd->PortExternalConnectorDesignator),\r
637 2 // 64 * sizeof(CHAR16)\r
638 );\r
639\r
640 //\r
641 // Internal Connector Type\r
642 //\r
643 *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE8, ExternalConnectorType)) = (UINT8) Picd->PortExternalConnectorType;\r
644\r
645 //\r
646 // Internal Connector Type\r
647 //\r
648 *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE8, PortType)) = (UINT8) Picd->PortType;\r
649\r
650 return Status;\r
651}\r
652\r
653/**\r
654 Field Filling Function for Misc SubClass record type 9 -- System slot.\r
655 \r
656 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
657 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
658 @param RecordData RecordData buffer will be filled.\r
659 @param RecordDataSize The size of RecordData buffer.\r
660 \r
661 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
662**/\r
663EFI_STATUS\r
664SmbiosFldMiscType9 (\r
665 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
666 IN UINT32 Offset,\r
667 IN VOID *RecordData,\r
668 IN UINT32 RecordDataSize\r
669 )\r
670{\r
671 EFI_STATUS Status;\r
672 EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA *Slot;\r
673\r
674 Status = EFI_SUCCESS;\r
675 Slot = (EFI_MISC_SYSTEM_SLOT_DESIGNATION_DATA *) RecordData;\r
676\r
677 //\r
678 // Slot Designation\r
679 //\r
680 SmbiosFldString (\r
681 StructureNode,\r
682 OFFSET_OF (SMBIOS_TABLE_TYPE9, SlotDesignation),\r
683 &(Slot->SlotDesignation),\r
684 2 // 64 * sizeof(CHAR16)\r
685 );\r
686\r
687 //\r
688 // Slot Type\r
689 //\r
690 CopyMem (\r
691 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE9, SlotType),\r
692 &Slot->SlotType,\r
693 1\r
694 );\r
695\r
696 //\r
697 // Slot Data Bus Width\r
698 //\r
699 CopyMem (\r
700 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE9, SlotDataBusWidth),\r
701 &Slot->SlotDataBusWidth,\r
702 1\r
703 );\r
704\r
705 //\r
706 // Slot Usage\r
707 //\r
708 CopyMem (\r
709 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE9, CurrentUsage),\r
710 &Slot->SlotUsage,\r
711 1\r
712 );\r
713\r
714 //\r
715 // Slot Length\r
716 //\r
717 CopyMem (\r
718 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE9, SlotLength),\r
719 &Slot->SlotLength,\r
720 1\r
721 );\r
722\r
723 //\r
724 // Slot Id\r
725 //\r
726 CopyMem (\r
727 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE9, SlotID),\r
728 &Slot->SlotId,\r
729 2\r
730 );\r
731\r
732 //\r
733 // Slot Characteristics\r
734 //\r
735 CopyMem (\r
736 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE9, SlotCharacteristics1),\r
737 &Slot->SlotCharacteristics,\r
738 2\r
739 );\r
740\r
741 return Status;\r
742}\r
743\r
744/**\r
745 Field Filling Function for Misc SubClass record type 10 - Onboard Device.\r
746 \r
747 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
748 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
749 @param RecordData RecordData buffer will be filled.\r
750 @param RecordDataSize The size of RecordData buffer.\r
751 \r
752 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
753**/\r
754EFI_STATUS\r
755SmbiosFldMiscType10 (\r
756 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
757 IN UINT32 Offset,\r
758 IN VOID *RecordData,\r
759 IN UINT32 RecordDataSize\r
760 )\r
761{\r
762 EFI_STATUS Status;\r
763 EFI_MISC_ONBOARD_DEVICE_DATA *OnboardDevice;\r
764 UINTN NumberOfDevices;\r
765 UINTN Index;\r
766 UINT8 StatusAndType;\r
767\r
768 Status = EFI_SUCCESS;\r
769 OnboardDevice = (EFI_MISC_ONBOARD_DEVICE_DATA *) RecordData;\r
770\r
771 NumberOfDevices = (StructureNode->Structure->Length - 4) / 2;\r
772 for (Index = 0; Index < NumberOfDevices; Index += 1) {\r
773 //\r
774 // OnBoard Device Description\r
775 //\r
776 SmbiosFldString (\r
777 StructureNode,\r
778 (UINT32) (OFFSET_OF (SMBIOS_TABLE_TYPE10, Device) + 1 + (2 * Index)),\r
779 &(OnboardDevice->OnBoardDeviceDescription),\r
780 2 // 64 * sizeof(CHAR16)\r
781 );\r
782\r
783 //\r
784 // Status & Type: Bit 7 Devicen Status, Bits 6:0 Type of Device\r
785 //\r
786 StatusAndType = (UINT8) OnboardDevice->OnBoardDeviceStatus.DeviceType;\r
787 if (OnboardDevice->OnBoardDeviceStatus.DeviceEnabled != 0) {\r
788 StatusAndType |= 0x80;\r
789 } else {\r
790 StatusAndType &= 0x7F;\r
791 }\r
792\r
793 * (UINT8 *) ((UINT8 *) (StructureNode->Structure) + (OFFSET_OF (SMBIOS_TABLE_TYPE10, Device) + (2 * Index))) = StatusAndType;\r
794 }\r
795\r
796 return Status;\r
797}\r
798\r
799/**\r
800 Field Filling Function for Misc SubClass record type 11 - OEM Strings.\r
801 \r
802 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
803 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
804 @param RecordData RecordData buffer will be filled.\r
805 @param RecordDataSize The size of RecordData buffer.\r
806 \r
807 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
808**/\r
809EFI_STATUS\r
810SmbiosFldMiscType11 (\r
811 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
812 IN UINT32 Offset,\r
813 IN VOID *RecordData,\r
814 IN UINT32 RecordDataSize\r
815 )\r
816{\r
817 EFI_MISC_OEM_STRING_DATA *OemString;\r
818\r
819 OemString = (EFI_MISC_OEM_STRING_DATA *)RecordData;\r
820 //\r
821 // OEM String data\r
822 //\r
823 SmbiosFldString (\r
824 StructureNode,\r
825 OFFSET_OF (SMBIOS_TABLE_TYPE11, StringCount),\r
826 &(OemString->OemStringRef[0]),\r
827 2\r
828 );\r
829 return EFI_SUCCESS;\r
830}\r
831\r
832/**\r
833 Field Filling Function for Misc SubClass record type 12 - System Options.\r
834 \r
835 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
836 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
837 @param RecordData RecordData buffer will be filled.\r
838 @param RecordDataSize The size of RecordData buffer.\r
839 \r
840 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
841**/\r
842EFI_STATUS\r
843SmbiosFldMiscType12 (\r
844 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
845 IN UINT32 Offset,\r
846 IN VOID *RecordData,\r
847 IN UINT32 RecordDataSize\r
848 )\r
849{\r
850 EFI_STATUS Status;\r
851 EFI_MISC_SYSTEM_OPTION_STRING_DATA *Sos;\r
852 UINTN NumberOfInstallableLanguages;\r
853 UINTN Index;\r
854\r
855 Status = EFI_SUCCESS;\r
856 Sos = (EFI_MISC_SYSTEM_OPTION_STRING_DATA *) RecordData;\r
857\r
858 //\r
859 // As MiscDataHub spec defines,\r
860 // NumberOfInstallableLanguages should retrieve from Type 13.\r
861 //\r
862 NumberOfInstallableLanguages = (StructureNode->Structure->Length - 4);\r
863 for (Index = 0; Index < NumberOfInstallableLanguages; Index += 1) {\r
864 //\r
865 // OnBoard Device Description\r
866 //\r
867 SmbiosFldString (\r
868 StructureNode,\r
869 (UINT32) (OFFSET_OF (SMBIOS_TABLE_TYPE12, StringCount) + (Index)),\r
870 &(Sos->SystemOptionStringRef[Index]),\r
871 2\r
872 );\r
873 }\r
874\r
875 return Status;\r
876}\r
877\r
878/**\r
879 Field Filling Function for Misc SubClass record type 13 - BIOS Language.\r
880 \r
881 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
882 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
883 @param RecordData RecordData buffer will be filled.\r
884 @param RecordDataSize The size of RecordData buffer.\r
885 \r
886 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
887**/\r
888EFI_STATUS\r
889SmbiosFldMiscType13 (\r
890 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
891 IN UINT32 Offset,\r
892 IN VOID *RecordData,\r
893 IN UINT32 RecordDataSize\r
894 )\r
895{\r
896 EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA *InstallableLanguage;\r
897\r
898 InstallableLanguage = (EFI_MISC_NUMBER_OF_INSTALLABLE_LANGUAGES_DATA *) RecordData;\r
899\r
900 //\r
901 // Number Of Installable Languages\r
902 //\r
903 *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE13, InstallableLanguages)) = (UINT8) (InstallableLanguage->NumberOfInstallableLanguages);\r
904\r
905 //\r
906 // Language Flags\r
907 //\r
908 CopyMem (\r
909 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE13, Flags),\r
910 &InstallableLanguage->LanguageFlags,\r
911 1\r
912 );\r
913\r
914 //\r
915 // Current Language Number\r
0ec4f1cb 916 // It's the index of multiple languages. Languages are filled by SmbiosFldMiscType14.\r
024b1029 917 //\r
0ec4f1cb
SZ
918 CopyMem (\r
919 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE13, CurrentLanguages),\r
920 &InstallableLanguage->CurrentLanguageNumber,\r
921 1\r
024b1029 922 );\r
923\r
924 return EFI_SUCCESS;\r
925}\r
926\r
927/**\r
928 Field Filling Function for Misc SubClass record type 14 - System Language String\r
929 Current solution assumes that EFI_MISC_SYSTEM_LANGUAGE_STRINGs are logged with\r
930 their LanguageId having ascending orders.\r
931 \r
932 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
933 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
934 @param RecordData RecordData buffer will be filled.\r
935 @param RecordDataSize The size of RecordData buffer.\r
936 \r
937 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
938**/\r
939EFI_STATUS\r
940SmbiosFldMiscType14 (\r
941 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
942 IN UINT32 Offset,\r
943 IN VOID *RecordData,\r
944 IN UINT32 RecordDataSize\r
945 )\r
946{\r
947 UINT16 CurrentLanguageNumber;\r
948 EFI_MISC_SYSTEM_LANGUAGE_STRING *LanguageString;\r
949 \r
950 LanguageString = (EFI_MISC_SYSTEM_LANGUAGE_STRING *) RecordData;\r
951\r
952 //\r
953 // Backup CurrentLanguage\r
954 //\r
955 CopyMem (\r
956 &CurrentLanguageNumber,\r
957 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE13, CurrentLanguages),\r
958 1\r
959 );\r
960\r
961 //\r
962 // Clear the field so that SmbiosFldString can be reused\r
963 //\r
964 *(UINT8 *)((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE13, CurrentLanguages)) = 0;\r
965 \r
966 SmbiosFldString (\r
967 StructureNode,\r
968 OFFSET_OF (SMBIOS_TABLE_TYPE13, CurrentLanguages),\r
969 &(LanguageString->SystemLanguageString),\r
970 2 // 64 * sizeof(CHAR16)\r
971 );\r
972\r
973 //\r
974 // Restore CurrentLanguage\r
975 //\r
976 CopyMem (\r
977 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE13, CurrentLanguages),\r
978 &CurrentLanguageNumber,\r
979 1\r
980 );\r
981\r
982 return EFI_SUCCESS;\r
983}\r
984\r
985/**\r
986 Field Filling Function for Misc SubClass record type 15 -- System Event Log.\r
987 \r
988 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
989 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
990 @param RecordData RecordData buffer will be filled.\r
991 @param RecordDataSize The size of RecordData buffer.\r
992 \r
993 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
994**/\r
995EFI_STATUS\r
996SmbiosFldMiscType15 (\r
997 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
998 IN UINT32 Offset,\r
999 IN VOID *RecordData,\r
1000 IN UINT32 RecordDataSize\r
1001 )\r
1002{\r
1003 EFI_STATUS Status;\r
1004 EFI_MISC_SYSTEM_EVENT_LOG_DATA *SystemEventLog;\r
1005\r
1006 Status = EFI_SUCCESS;\r
1007 SystemEventLog = NULL;\r
1008\r
1009 SystemEventLog = (EFI_MISC_SYSTEM_EVENT_LOG_DATA *) RecordData;\r
1010\r
1011 //\r
1012 // Log Area Length\r
1013 //\r
1014 CopyMem (\r
1015 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, LogAreaLength),\r
1016 &(SystemEventLog->LogAreaLength),\r
1017 2\r
1018 );\r
1019\r
1020 //\r
1021 // Log Header Start Offset\r
1022 //\r
1023 CopyMem (\r
1024 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, LogHeaderStartOffset),\r
1025 &(SystemEventLog->LogHeaderStartOffset),\r
1026 2\r
1027 );\r
1028\r
1029 //\r
1030 // Log Data Start Offset\r
1031 //\r
1032 CopyMem (\r
1033 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, LogDataStartOffset),\r
1034 &(SystemEventLog->LogDataStartOffset),\r
1035 2\r
1036 );\r
1037\r
1038 //\r
1039 // Access Method\r
1040 //\r
1041 CopyMem (\r
1042 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, AccessMethod),\r
1043 &(SystemEventLog->AccessMethod),\r
1044 1\r
1045 );\r
1046\r
1047 //\r
1048 // Log Status\r
1049 //\r
1050 CopyMem (\r
1051 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, LogStatus),\r
1052 &(SystemEventLog->LogStatus),\r
1053 1\r
1054 );\r
1055\r
1056 //\r
1057 // Log Change Token\r
1058 //\r
1059 CopyMem (\r
1060 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, LogChangeToken),\r
1061 &(SystemEventLog->LogChangeToken),\r
1062 4\r
1063 );\r
1064\r
1065 //\r
1066 // Access Method Address\r
1067 //\r
1068 CopyMem (\r
1069 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, AccessMethodAddress),\r
1070 &(SystemEventLog->AccessMethodAddress),\r
1071 4\r
1072 );\r
1073\r
1074 //\r
1075 // Log Header Format\r
1076 //\r
1077 CopyMem (\r
1078 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, LogHeaderFormat),\r
1079 &(SystemEventLog->LogHeaderFormat),\r
1080 1\r
1081 );\r
1082\r
1083 //\r
1084 // Number of Supported Log Type Descriptors\r
1085 //\r
1086 CopyMem (\r
1087 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, NumberOfSupportedLogTypeDescriptors),\r
1088 &(SystemEventLog->NumberOfSupportedLogType),\r
1089 1\r
1090 );\r
1091\r
1092 //\r
1093 // Length of each Log Type Descriptor\r
1094 //\r
1095 CopyMem (\r
1096 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE15, LengthOfLogTypeDescriptor),\r
1097 &(SystemEventLog->LengthOfLogDescriptor),\r
1098 1\r
1099 );\r
1100\r
1101 return Status;\r
1102}\r
1103\r
1104/**\r
1105 Field Filling Function for Misc SubClass record type 21 - Pointing Device.\r
1106 \r
1107 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
1108 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
1109 @param RecordData RecordData buffer will be filled.\r
1110 @param RecordDataSize The size of RecordData buffer.\r
1111 \r
1112 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
1113**/\r
1114EFI_STATUS\r
1115SmbiosFldMiscType21 (\r
1116 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
1117 IN UINT32 Offset,\r
1118 IN VOID *RecordData,\r
1119 IN UINT32 RecordDataSize\r
1120 )\r
1121{\r
1122 EFI_MISC_POINTING_DEVICE_TYPE_DATA *PointingDeviceData;\r
1123\r
1124 PointingDeviceData = (EFI_MISC_POINTING_DEVICE_TYPE_DATA *) RecordData;\r
1125\r
1126 //\r
1127 // Pointing Device Type\r
1128 //\r
1129 *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE21, Type)) = (UINT8) (PointingDeviceData->PointingDeviceType);\r
1130\r
1131 //\r
1132 // Pointing Device Interface\r
1133 //\r
1134 *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE21, Interface)) = (UINT8) (PointingDeviceData->PointingDeviceInterface);\r
1135\r
1136 //\r
1137 // Number Pointing Device Buttons\r
1138 //\r
1139 *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE21, NumberOfButtons)) = (UINT8) (PointingDeviceData->NumberPointingDeviceButtons);\r
1140\r
1141 return EFI_SUCCESS;\r
1142}\r
1143\r
1144/**\r
1145 Field Filling Function for Misc SubClass record type 22 - Portable Battery.\r
1146 \r
1147 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
1148 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
1149 @param RecordData RecordData buffer will be filled.\r
1150 @param RecordDataSize The size of RecordData buffer.\r
1151 \r
1152 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
1153**/\r
1154EFI_STATUS\r
1155SmbiosFldMiscType22 (\r
1156 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
1157 IN UINT32 Offset,\r
1158 IN VOID *RecordData,\r
1159 IN UINT32 RecordDataSize\r
1160 )\r
1161{\r
1162 EFI_MISC_PORTABLE_BATTERY *PortableBattery;\r
1163 STRING_REF Chemistry;\r
1164 PortableBattery = (EFI_MISC_PORTABLE_BATTERY *)RecordData;\r
1165 \r
1166 //\r
1167 // Location\r
1168 // \r
1169 SmbiosFldString (\r
1170 StructureNode,\r
1171 OFFSET_OF (SMBIOS_TABLE_TYPE22, Location),\r
1172 &(PortableBattery->Location),\r
1173 2 // 64 * sizeof(CHAR16)\r
1174 );\r
1175 \r
1176 //\r
1177 // Manufacturer\r
1178 // \r
1179 SmbiosFldString (\r
1180 StructureNode,\r
1181 OFFSET_OF (SMBIOS_TABLE_TYPE22, Manufacturer),\r
1182 &(PortableBattery->Manufacturer),\r
1183 2 \r
1184 ); \r
1185\r
1186 //\r
1187 // ManufactureDate\r
1188 // \r
1189 SmbiosFldString (\r
1190 StructureNode,\r
1191 OFFSET_OF (SMBIOS_TABLE_TYPE22, ManufactureDate),\r
1192 &(PortableBattery->ManufactureDate),\r
1193 2 \r
1194 ); \r
1195\r
1196 //\r
1197 // SerialNumber\r
1198 // \r
1199 SmbiosFldString (\r
1200 StructureNode,\r
1201 OFFSET_OF (SMBIOS_TABLE_TYPE22, SerialNumber),\r
1202 &(PortableBattery->SerialNumber),\r
1203 2 \r
1204 );\r
1205\r
1206 //\r
1207 // DeviceName\r
1208 // \r
1209 SmbiosFldString (\r
1210 StructureNode,\r
1211 OFFSET_OF (SMBIOS_TABLE_TYPE22, DeviceName),\r
1212 &(PortableBattery->DeviceName),\r
1213 2 \r
1214 ); \r
1215 \r
1216 //\r
1217 // DeviceChemistry\r
1218 //\r
1219 CopyMem (\r
1220 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE22, DeviceChemistry),\r
1221 &PortableBattery->DeviceChemistry,\r
1222 1\r
1223 );\r
1224\r
1225 //\r
1226 // DesignCapacity\r
1227 //\r
1228 CopyMem (\r
1229 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE22, DeviceCapacity),\r
1230 &PortableBattery->DesignCapacity,\r
1231 2\r
1232 );\r
1233 \r
1234 //\r
1235 // DesignVoltage\r
1236 //\r
1237 CopyMem (\r
1238 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE22, DesignVoltage),\r
1239 &PortableBattery->DesignVoltage,\r
1240 2\r
1241 ); \r
1242 \r
1243 //\r
1244 // SBDSVersionNumber\r
1245 //\r
1246 SmbiosFldString (\r
1247 StructureNode,\r
1248 OFFSET_OF (SMBIOS_TABLE_TYPE22, SBDSVersionNumber),\r
1249 &(PortableBattery->SBDSVersionNumber),\r
1250 2 // 64 * sizeof(CHAR16)\r
1251 );\r
1252\r
1253 //\r
1254 // MaximumError\r
1255 //\r
1256 CopyMem (\r
1257 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE22, MaximumErrorInBatteryData),\r
1258 &PortableBattery->MaximumError,\r
1259 1\r
1260 ); \r
1261 \r
1262 //\r
1263 // SBDSSerialNumber\r
1264 //\r
1265 CopyMem (\r
1266 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE22, SBDSSerialNumber),\r
1267 &PortableBattery->SBDSSerialNumber,\r
1268 2\r
1269 ); \r
1270\r
1271 //\r
1272 // SBDSManufactureDate\r
1273 //\r
1274 CopyMem (\r
1275 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE22, SBDSManufactureDate),\r
1276 &PortableBattery->SBDSManufactureDate,\r
1277 2\r
1278 );\r
1279\r
1280 //\r
1281 // Avoid alignment issue on IPF\r
1282 //\r
1283 CopyMem (\r
1284 &Chemistry, \r
1285 &PortableBattery->SBDSDeviceChemistry,\r
1286 2\r
1287 );\r
1288\r
1289 //\r
1290 // SBDSDeviceChemistry\r
1291 // \r
1292 SmbiosFldString (\r
1293 StructureNode,\r
1294 OFFSET_OF (SMBIOS_TABLE_TYPE22, SBDSDeviceChemistry),\r
1295 &Chemistry,\r
1296 2 // 64 * sizeof(CHAR16)\r
1297 ); \r
1298 \r
1299 //\r
1300 // DesignCapacityMultiplier\r
1301 //\r
1302 CopyMem (\r
1303 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE22, DesignCapacityMultiplier),\r
1304 &PortableBattery->DesignCapacityMultiplier,\r
1305 1\r
1306 ); \r
1307 \r
1308 //\r
1309 // OEMSpecific\r
1310 //\r
1311 CopyMem (\r
1312 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE22, OEMSpecific),\r
1313 &PortableBattery->OEMSpecific,\r
1314 4\r
1315 );\r
1316 \r
1317 return EFI_SUCCESS;\r
1318}\r
1319\r
1320/**\r
1321 Field Filling Function for Misc SubClass record type 23 - System Reset.\r
1322 \r
1323 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
1324 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
1325 @param RecordData RecordData buffer will be filled.\r
1326 @param RecordDataSize The size of RecordData buffer.\r
1327 \r
1328 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
1329**/\r
1330EFI_STATUS\r
1331SmbiosFldMiscType23 (\r
1332 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
1333 IN UINT32 Offset,\r
1334 IN VOID *RecordData,\r
1335 IN UINT32 RecordDataSize\r
1336 )\r
1337{\r
1338 EFI_MISC_RESET_CAPABILITIES_DATA *SystemResetData;\r
1339\r
1340 SystemResetData = (EFI_MISC_RESET_CAPABILITIES_DATA *) RecordData;\r
1341\r
1342 //\r
1343 // Reset Capabilities\r
1344 //\r
1345 CopyMem (\r
1346 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE23, Capabilities),\r
1347 &(SystemResetData->ResetCapabilities),\r
1348 1\r
1349 );\r
1350\r
1351 //\r
1352 // Reset Count\r
1353 //\r
1354 CopyMem (\r
1355 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE23, ResetCount),\r
1356 &(SystemResetData->ResetCount),\r
1357 2\r
1358 );\r
1359\r
1360 //\r
1361 // Reset Limit\r
1362 //\r
1363 CopyMem (\r
1364 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE23, ResetLimit),\r
1365 &(SystemResetData->ResetLimit),\r
1366 2\r
1367 );\r
1368\r
1369 //\r
1370 // Reset Timer Interval\r
1371 //\r
1372 CopyMem (\r
1373 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE23, TimerInterval),\r
1374 &(SystemResetData->ResetTimerInterval),\r
1375 2\r
1376 );\r
1377\r
1378 //\r
1379 // Reset Timeout\r
1380 //\r
1381 CopyMem (\r
1382 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE23, Timeout),\r
1383 &(SystemResetData->ResetTimeout),\r
1384 2\r
1385 );\r
1386\r
1387 return EFI_SUCCESS;\r
1388}\r
1389\r
1390/**\r
1391 Field Filling Function for Misc SubClass record type 24 - Hardware Security.\r
1392 \r
1393 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
1394 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
1395 @param RecordData RecordData buffer will be filled.\r
1396 @param RecordDataSize The size of RecordData buffer.\r
1397 \r
1398 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
1399**/\r
1400EFI_STATUS\r
1401SmbiosFldMiscType24 (\r
1402 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
1403 IN UINT32 Offset,\r
1404 IN VOID *RecordData,\r
1405 IN UINT32 RecordDataSize\r
1406 )\r
1407{\r
1408 EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA *HardwareSecurity;\r
1409 \r
1410 HardwareSecurity = (EFI_MISC_HARDWARE_SECURITY_SETTINGS_DATA *)RecordData;\r
1411 \r
1412 //\r
1413 // Hardware Security Settings\r
1414 //\r
1415 CopyMem (\r
1416 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE24, HardwareSecuritySettings),\r
1417 &HardwareSecurity->HardwareSecuritySettings,\r
1418 1\r
1419 );\r
1420 \r
1421 return EFI_SUCCESS;\r
1422}\r
1423\r
1424/**\r
1425 Field Filling Function for Misc SubClass record type 25 - System Power Controls.\r
1426 \r
1427 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
1428 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
1429 @param RecordData RecordData buffer will be filled.\r
1430 @param RecordDataSize The size of RecordData buffer.\r
1431 \r
1432 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
1433**/\r
1434EFI_STATUS\r
1435SmbiosFldMiscType25 (\r
1436 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
1437 IN UINT32 Offset,\r
1438 IN VOID *RecordData,\r
1439 IN UINT32 RecordDataSize\r
1440 )\r
1441{\r
1442 EFI_MISC_SCHEDULED_POWER_ON_MONTH *PowerOnMonth;\r
1443 \r
1444 PowerOnMonth = (EFI_MISC_SCHEDULED_POWER_ON_MONTH *)RecordData;\r
1445 \r
1446 //\r
1447 // ScheduledPoweronMonth\r
1448 //\r
1449 CopyMem (\r
1450 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE25, NextScheduledPowerOnMonth),\r
1451 &PowerOnMonth->ScheduledPoweronMonth,\r
1452 1\r
1453 );\r
1454 \r
1455 //\r
1456 // ScheduledPoweronDayOfMonth\r
1457 //\r
1458 CopyMem (\r
1459 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE25, NextScheduledPowerOnDayOfMonth),\r
1460 &PowerOnMonth->ScheduledPoweronDayOfMonth,\r
1461 1\r
1462 ); \r
1463\r
1464 //\r
1465 // ScheduledPoweronHour\r
1466 //\r
1467 CopyMem (\r
1468 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE25, NextScheduledPowerOnHour),\r
1469 &PowerOnMonth->ScheduledPoweronHour,\r
1470 1\r
1471 ); \r
1472\r
1473 //\r
1474 // ScheduledPoweronMinute\r
1475 //\r
1476 CopyMem (\r
1477 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE25, NextScheduledPowerOnMinute),\r
1478 &PowerOnMonth->ScheduledPoweronMinute,\r
1479 1\r
1480 ); \r
1481\r
1482 //\r
1483 // ScheduledPoweronSecond\r
1484 //\r
1485 CopyMem (\r
1486 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE25, NextScheduledPowerOnSecond),\r
1487 &PowerOnMonth->ScheduledPoweronSecond,\r
1488 1\r
1489 );\r
1490 \r
1491 return EFI_SUCCESS;\r
1492}\r
1493\r
1494/**\r
1495 Field Filling Function for Misc SubClass record type 26 - Voltage Probe.\r
1496 \r
1497 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
1498 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
1499 @param RecordData RecordData buffer will be filled.\r
1500 @param RecordDataSize The size of RecordData buffer.\r
1501 \r
1502 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
1503**/\r
1504EFI_STATUS\r
1505SmbiosFldMiscType26 (\r
1506 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
1507 IN UINT32 Offset,\r
1508 IN VOID *RecordData,\r
1509 IN UINT32 RecordDataSize\r
1510 )\r
1511{\r
1512 EFI_MISC_VOLTAGE_PROBE_DESCRIPTION *VoltageProbe;\r
1513 \r
1514 VoltageProbe = (EFI_MISC_VOLTAGE_PROBE_DESCRIPTION *)RecordData;\r
1515 \r
1516 //\r
1517 // VoltageProbe Description\r
1518 //\r
1519 SmbiosFldString (\r
1520 StructureNode,\r
1521 OFFSET_OF (SMBIOS_TABLE_TYPE26, Description),\r
1522 &(VoltageProbe->VoltageProbeDescription),\r
1523 2 // 64 * sizeof(CHAR16)\r
1524 ); \r
1525 \r
1526 //\r
1527 // VoltageProbeLocation\r
1528 //\r
1529 CopyMem (\r
1530 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE26, LocationAndStatus),\r
1531 &VoltageProbe->VoltageProbeLocation,\r
1532 1\r
1533 ); \r
1534 \r
1535 //\r
1536 // VoltageProbeMaximumValue\r
1537 //\r
1538 CopyMem (\r
1539 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE26, MaximumValue),\r
1540 &VoltageProbe->VoltageProbeMaximumValue,\r
1541 2\r
1542 ); \r
1543 \r
1544 //\r
1545 // VoltageProbeMinimumValue\r
1546 //\r
1547 CopyMem (\r
1548 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE26, MinimumValue),\r
1549 &VoltageProbe->VoltageProbeMinimumValue,\r
1550 2\r
1551 ); \r
1552\r
1553 //\r
1554 // VoltageProbeResolution\r
1555 //\r
1556 CopyMem (\r
1557 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE26, Resolution),\r
1558 &VoltageProbe->VoltageProbeResolution,\r
1559 2\r
1560 ); \r
1561\r
1562 //\r
1563 // VoltageProbeTolerance\r
1564 //\r
1565 CopyMem (\r
1566 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE26, Tolerance),\r
1567 &VoltageProbe->VoltageProbeTolerance,\r
1568 2\r
1569 ); \r
1570\r
1571 //\r
1572 // VoltageProbeAccuracy\r
1573 //\r
1574 CopyMem (\r
1575 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE26, Accuracy),\r
1576 &VoltageProbe->VoltageProbeAccuracy,\r
1577 2\r
1578 ); \r
1579 \r
1580 //\r
1581 // VoltageProbeNominalValue\r
1582 //\r
1583 CopyMem (\r
1584 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE26, NominalValue),\r
1585 &VoltageProbe->VoltageProbeNominalValue,\r
1586 2\r
1587 ); \r
1588\r
1589 //\r
1590 // VoltageProbeOemDefined\r
1591 //\r
1592 CopyMem (\r
1593 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE26, OEMDefined),\r
1594 &VoltageProbe->VoltageProbeOemDefined,\r
1595 4\r
1596 );\r
1597 \r
1598 return EFI_SUCCESS;\r
1599}\r
1600\r
1601/**\r
1602 Field Filling Function for Misc SubClass record type 27 - Cooling Device.\r
1603 \r
1604 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
1605 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
1606 @param RecordData RecordData buffer will be filled.\r
1607 @param RecordDataSize The size of RecordData buffer.\r
1608 \r
1609 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
1610**/\r
1611EFI_STATUS\r
1612SmbiosFldMiscType27 (\r
1613 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
1614 IN UINT32 Offset,\r
1615 IN VOID *RecordData,\r
1616 IN UINT32 RecordDataSize\r
1617 )\r
1618{\r
1619 EFI_MISC_COOLING_DEVICE_TEMP_LINK *CoolingDevice;\r
1620 \r
1621 CoolingDevice = (EFI_MISC_COOLING_DEVICE_TEMP_LINK *)RecordData;\r
1622 \r
1623 //\r
1624 // Device Type\r
1625 //\r
1626 CopyMem (\r
1627 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE27, DeviceTypeAndStatus),\r
1628 &CoolingDevice->CoolingDeviceType,\r
1629 1\r
1630 );\r
1631 \r
1632 //\r
1633 // Temperature Probe\r
1634 //\r
1635 SmbiosFldInterLink (\r
1636 StructureNode,\r
1637 (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE27, TemperatureProbeHandle),\r
1638 28, // SMBIOS type 28 - Temperature Probe\r
1639 &CoolingDevice->CoolingDeviceTemperatureLink,\r
1640 &gEfiMiscSubClassGuid\r
1641 );\r
1642 \r
1643 //\r
1644 // CoolingDeviceUnitGroup\r
1645 //\r
1646 CopyMem (\r
1647 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE27, CoolingUnitGroup),\r
1648 &CoolingDevice->CoolingDeviceUnitGroup,\r
1649 1\r
1650 );\r
1651\r
1652 //\r
1653 // CoolingDeviceUnitGroup\r
1654 //\r
1655 CopyMem (\r
1656 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE27, OEMDefined),\r
1657 &CoolingDevice->CoolingDeviceOemDefined,\r
1658 4\r
1659 );\r
1660\r
1661 //\r
1662 // CoolingDeviceNominalSpeed\r
1663 //\r
1664 CopyMem (\r
1665 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE27, NominalSpeed),\r
1666 &CoolingDevice->CoolingDeviceNominalSpeed,\r
1667 2\r
1668 );\r
1669 \r
1670 return EFI_SUCCESS;\r
1671}\r
1672\r
1673/**\r
1674 Field Filling Function for Misc SubClass record type 28 -- Temperature Probe.\r
1675 \r
1676 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
1677 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
1678 @param RecordData RecordData buffer will be filled.\r
1679 @param RecordDataSize The size of RecordData buffer.\r
1680 \r
1681 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
1682**/\r
1683EFI_STATUS\r
1684SmbiosFldMiscType28 (\r
1685 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
1686 IN UINT32 Offset,\r
1687 IN VOID *RecordData,\r
1688 IN UINT32 RecordDataSize\r
1689 )\r
1690{\r
1691 EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION *TemperatureProbe;\r
1692 \r
1693 TemperatureProbe = (EFI_MISC_TEMPERATURE_PROBE_DESCRIPTION *)RecordData;\r
1694 \r
1695 //\r
1696 // TemperatureProbeDescription\r
1697 //\r
1698 SmbiosFldString (\r
1699 StructureNode,\r
1700 OFFSET_OF (SMBIOS_TABLE_TYPE28, Description),\r
1701 &(TemperatureProbe->TemperatureProbeDescription),\r
1702 2\r
1703 );\r
1704 \r
1705 //\r
1706 // TemperatureProbeLocation\r
1707 //\r
1708 CopyMem (\r
1709 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE28, LocationAndStatus),\r
1710 &TemperatureProbe->TemperatureProbeLocation,\r
1711 1\r
1712 ); \r
1713 \r
1714 //\r
1715 // TemperatureProbeMaximumValue\r
1716 //\r
1717 CopyMem (\r
1718 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE28, MaximumValue),\r
1719 &TemperatureProbe->TemperatureProbeMaximumValue,\r
1720 2\r
1721 ); \r
1722\r
1723 //\r
1724 // TemperatureProbeMinimumValue\r
1725 //\r
1726 CopyMem (\r
1727 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE28, MinimumValue),\r
1728 &TemperatureProbe->TemperatureProbeMinimumValue,\r
1729 2\r
1730 ); \r
1731\r
1732 //\r
1733 // TemperatureProbeResolution\r
1734 //\r
1735 CopyMem (\r
1736 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE28, Resolution),\r
1737 &TemperatureProbe->TemperatureProbeResolution,\r
1738 2\r
1739 ); \r
1740 \r
1741\r
1742 //\r
1743 // TemperatureProbeTolerance\r
1744 //\r
1745 CopyMem (\r
1746 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE28, Tolerance),\r
1747 &TemperatureProbe->TemperatureProbeTolerance,\r
1748 2\r
1749 ); \r
1750\r
1751 //\r
1752 // TemperatureProbeAccuracy\r
1753 //\r
1754 CopyMem (\r
1755 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE28, Accuracy),\r
1756 &TemperatureProbe->TemperatureProbeAccuracy,\r
1757 2\r
1758 );\r
1759\r
1760 //\r
1761 // TemperatureProbeNominalValue\r
1762 //\r
1763 CopyMem (\r
1764 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE28, NominalValue),\r
1765 &TemperatureProbe->TemperatureProbeNominalValue,\r
1766 2\r
1767 );\r
1768\r
1769 //\r
1770 // TemperatureProbeOemDefined\r
1771 //\r
1772 CopyMem (\r
1773 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE28, OEMDefined),\r
1774 &TemperatureProbe->TemperatureProbeOemDefined,\r
1775 4\r
1776 );\r
1777 \r
1778 return EFI_SUCCESS;\r
1779} \r
1780\r
1781/**\r
1782 Field Filling Function for Misc SubClass record type 29 -- Electrical Current Probe.\r
1783 \r
1784 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
1785 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
1786 @param RecordData RecordData buffer will be filled.\r
1787 @param RecordDataSize The size of RecordData buffer.\r
1788 \r
1789 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
1790**/\r
1791EFI_STATUS\r
1792SmbiosFldMiscType29 (\r
1793 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
1794 IN UINT32 Offset,\r
1795 IN VOID *RecordData,\r
1796 IN UINT32 RecordDataSize\r
1797 )\r
1798{\r
1799 EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION *ElectricalProbe;\r
1800 \r
1801 ElectricalProbe = (EFI_MISC_ELECTRICAL_CURRENT_PROBE_DESCRIPTION *)RecordData;\r
1802 \r
1803 //\r
1804 // ElectricalCurrentProbeDescription\r
1805 //\r
1806 SmbiosFldString (\r
1807 StructureNode,\r
1808 OFFSET_OF (SMBIOS_TABLE_TYPE29, Description),\r
1809 &(ElectricalProbe->ElectricalCurrentProbeDescription),\r
1810 2 // 64 * sizeof(CHAR16)\r
1811 );\r
1812 \r
1813 //\r
1814 // ElectricalCurrentProbeLocation\r
1815 //\r
1816 CopyMem (\r
1817 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE29, LocationAndStatus),\r
1818 &ElectricalProbe->ElectricalCurrentProbeLocation,\r
1819 1\r
1820 );\r
1821 \r
1822 //\r
1823 // ElectricalCurrentProbeMaximumValue\r
1824 //\r
1825 CopyMem (\r
1826 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE29, MaximumValue),\r
1827 &ElectricalProbe->ElectricalCurrentProbeMaximumValue,\r
1828 2\r
1829 ); \r
1830\r
1831 //\r
1832 // ElectricalCurrentProbeMinimumValue\r
1833 //\r
1834 CopyMem (\r
1835 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE29, MinimumValue),\r
1836 &ElectricalProbe->ElectricalCurrentProbeMinimumValue,\r
1837 2\r
1838 ); \r
1839\r
1840 //\r
1841 // ElectricalCurrentProbeResolution\r
1842 //\r
1843 CopyMem (\r
1844 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE29, Resolution),\r
1845 &ElectricalProbe->ElectricalCurrentProbeResolution,\r
1846 2\r
1847 ); \r
1848\r
1849 //\r
1850 // ElectricalCurrentProbeTolerance\r
1851 //\r
1852 CopyMem (\r
1853 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE29, Tolerance),\r
1854 &ElectricalProbe->ElectricalCurrentProbeTolerance,\r
1855 2\r
1856 ); \r
1857\r
1858 //\r
1859 // ElectricalCurrentProbeAccuracy\r
1860 //\r
1861 CopyMem (\r
1862 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE29, Accuracy),\r
1863 &ElectricalProbe->ElectricalCurrentProbeAccuracy,\r
1864 2\r
1865 ); \r
1866 //\r
1867 // ElectricalCurrentProbeNominalValue\r
1868 //\r
1869 CopyMem (\r
1870 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE29, NominalValue),\r
1871 &ElectricalProbe->ElectricalCurrentProbeNominalValue,\r
1872 2\r
1873 ); \r
1874\r
1875 //\r
1876 // ElectricalCurrentProbeOemDefined\r
1877 //\r
1878 CopyMem (\r
1879 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE29, OEMDefined),\r
1880 &ElectricalProbe->ElectricalCurrentProbeOemDefined,\r
1881 4\r
1882 );\r
1883 \r
1884 return EFI_SUCCESS;\r
1885}\r
1886\r
1887/**\r
1888 Field Filling Function for Misc SubClass record type 30 -- Out-of-Band Remote Access.\r
1889 \r
1890 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
1891 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
1892 @param RecordData RecordData buffer will be filled.\r
1893 @param RecordDataSize The size of RecordData buffer.\r
1894 \r
1895 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
1896**/\r
1897EFI_STATUS\r
1898SmbiosFldMiscType30 (\r
1899 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
1900 IN UINT32 Offset,\r
1901 IN VOID *RecordData,\r
1902 IN UINT32 RecordDataSize\r
1903 )\r
1904{\r
1905 EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION *RemoteData;\r
1906 \r
1907 RemoteData = (EFI_MISC_REMOTE_ACCESS_MANUFACTURER_DESCRIPTION *)RecordData;\r
1908 \r
1909 //\r
1910 // ManufacturerNameDescription\r
1911 //\r
1912 SmbiosFldString (\r
1913 StructureNode,\r
1914 OFFSET_OF (SMBIOS_TABLE_TYPE30, ManufacturerName),\r
1915 &(RemoteData->RemoteAccessManufacturerNameDescription),\r
1916 2 // 64 * sizeof(CHAR16)\r
1917 ); \r
1918 \r
1919 //\r
1920 // RemoteAccessConnections\r
1921 //\r
1922 CopyMem (\r
1923 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE30, Connections),\r
1924 &RemoteData->RemoteAccessConnections,\r
1925 1\r
1926 );\r
1927 \r
1928 return EFI_SUCCESS;\r
1929}\r
1930\r
1931/**\r
1932 Field Filling Function for Misc SubClass record type 32 -- System Boot Information.\r
1933 \r
1934 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
1935 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
1936 @param RecordData RecordData buffer will be filled.\r
1937 @param RecordDataSize The size of RecordData buffer.\r
1938 \r
1939 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
1940**/\r
1941EFI_STATUS\r
1942SmbiosFldMiscType32 (\r
1943 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
1944 IN UINT32 Offset,\r
1945 IN VOID *RecordData,\r
1946 IN UINT32 RecordDataSize\r
1947 )\r
1948{\r
1949 EFI_STATUS Status;\r
1950 EFI_MISC_BOOT_INFORMATION_STATUS_DATA *BootInfo;\r
1951\r
1952 Status = EFI_SUCCESS;\r
1953 BootInfo = (EFI_MISC_BOOT_INFORMATION_STATUS_DATA *) RecordData;\r
1954\r
1955 //\r
1956 // Set reserved bytes\r
1957 //\r
1958 ZeroMem ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE32, Reserved), 6);\r
1959\r
1960 //\r
1961 // Set BootInformation Status\r
1962 //\r
1963 CopyMem (\r
1964 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE32, BootStatus),\r
1965 &BootInfo->BootInformationStatus,\r
1966 1\r
1967 );\r
1968\r
1969 //\r
1970 // Set Additional Data\r
1971 //\r
1972 CopyMem (\r
1973 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE32, BootStatus) + 1,\r
1974 &BootInfo->BootInformationData,\r
1975 9\r
1976 );\r
1977\r
1978 return Status;\r
1979}\r
1980\r
1981/**\r
1982 Field Filling Function for Misc SubClass record type 34 -- Management Device.\r
1983 \r
1984 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
1985 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
1986 @param RecordData RecordData buffer will be filled.\r
1987 @param RecordDataSize The size of RecordData buffer.\r
1988 \r
1989 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
1990**/\r
1991EFI_STATUS\r
1992SmbiosFldMiscType34 (\r
1993 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
1994 IN UINT32 Offset,\r
1995 IN VOID *RecordData,\r
1996 IN UINT32 RecordDataSize\r
1997 )\r
1998{\r
1999 EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION *ManagementDevice;\r
2000 \r
2001 ManagementDevice = (EFI_MISC_MANAGEMENT_DEVICE_DESCRIPTION *)RecordData;\r
2002 \r
2003 //\r
2004 // ManagementDeviceDescription\r
2005 //\r
2006 SmbiosFldString (\r
2007 StructureNode,\r
2008 OFFSET_OF (SMBIOS_TABLE_TYPE34, Description),\r
2009 &(ManagementDevice->ManagementDeviceDescription),\r
2010 2 // 64 * sizeof(CHAR16)\r
2011 ); \r
2012 \r
2013 //\r
2014 // ManagementDeviceType\r
2015 //\r
2016 CopyMem (\r
2017 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE34, Type),\r
2018 &ManagementDevice->ManagementDeviceType,\r
2019 1\r
2020 ); \r
2021\r
2022 //\r
2023 // ManagementDeviceAddress\r
2024 //\r
2025 CopyMem (\r
2026 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE34, Address),\r
2027 &ManagementDevice->ManagementDeviceAddress,\r
2028 4\r
2029 ); \r
2030\r
2031 //\r
2032 // ManagementDeviceAddressType\r
2033 //\r
2034 CopyMem (\r
2035 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE34, AddressType),\r
2036 &ManagementDevice->ManagementDeviceAddressType,\r
2037 1\r
2038 ); \r
2039 \r
2040 return EFI_SUCCESS;\r
2041}\r
2042\r
0ec4f1cb
SZ
2043/**\r
2044 Field Filling Function for Misc SubClass record type 35 -- Management Device Component.\r
2045 \r
2046 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
2047 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
2048 @param RecordData RecordData buffer will be filled.\r
2049 @param RecordDataSize The size of RecordData buffer.\r
2050 \r
2051 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
2052**/\r
2053EFI_STATUS\r
2054SmbiosFldMiscType35 (\r
2055 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
2056 IN UINT32 Offset,\r
2057 IN VOID *RecordData,\r
2058 IN UINT32 RecordDataSize\r
2059 )\r
2060{\r
2061 EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION *ManagementDeviceComponent;\r
2062 EFI_INTER_LINK_DATA ManagementDeviceLink;\r
2063 EFI_INTER_LINK_DATA ManagementDeviceComponentLink;\r
2064 EFI_INTER_LINK_DATA ManagementDeviceThresholdLink;\r
2065 \r
2066 ManagementDeviceComponent = (EFI_MISC_MANAGEMENT_DEVICE_COMPONENT_DESCRIPTION *)RecordData;\r
2067 CopyMem (\r
2068 &ManagementDeviceLink,\r
2069 &ManagementDeviceComponent->ManagementDeviceLink,\r
2070 sizeof (EFI_INTER_LINK_DATA)\r
2071 );\r
2072 CopyMem (\r
2073 &ManagementDeviceComponentLink,\r
2074 &ManagementDeviceComponent->ManagementDeviceComponentLink,\r
2075 sizeof (EFI_INTER_LINK_DATA)\r
2076 );\r
2077 CopyMem (&ManagementDeviceThresholdLink,\r
2078 &ManagementDeviceComponent->ManagementDeviceThresholdLink,\r
2079 sizeof (EFI_INTER_LINK_DATA)\r
2080 );\r
2081\r
2082 //\r
2083 // ManagementDeviceComponentDescription\r
2084 //\r
2085 SmbiosFldString (\r
2086 StructureNode,\r
2087 OFFSET_OF (SMBIOS_TABLE_TYPE35, Description),\r
2088 &ManagementDeviceComponent->ManagementDeviceComponentDescription,\r
2089 2 // 64 * sizeof(CHAR16)\r
2090 );\r
2091\r
2092 //\r
2093 // ManagementDeviceLink\r
2094 //\r
2095 SmbiosFldInterLink (\r
2096 StructureNode,\r
2097 (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE35, ManagementDeviceHandle),\r
2098 34, // SMBIOS type 34 - Management Device\r
2099 &ManagementDeviceLink,\r
2100 &gEfiMiscSubClassGuid\r
2101 );\r
2102\r
2103 //\r
2104 // ManagementDeviceComponentLink\r
2105 //\r
2106 SmbiosFldInterLink (\r
2107 StructureNode,\r
2108 (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE35, ComponentHandle),\r
2109 ManagementDeviceComponent->ComponentType, // SMBIOS type, according to SMBIOS spec, it can be Type 26, 27, 28, 29\r
2110 &ManagementDeviceComponentLink,\r
2111 &gEfiMiscSubClassGuid\r
2112 );\r
2113\r
2114 //\r
2115 // ManagementDeviceThresholdLink\r
2116 //\r
2117 SmbiosFldInterLink (\r
2118 StructureNode,\r
2119 (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE35, ThresholdHandle),\r
2120 36, // SMBIOS type 36 - Management Device Threshold Data\r
2121 &ManagementDeviceThresholdLink,\r
2122 &gEfiMiscSubClassGuid\r
2123 );\r
2124\r
2125 return EFI_SUCCESS;\r
2126}\r
2127\r
024b1029 2128/**\r
2129 Field Filling Function for Misc SubClass record type 36 -- Management Device Threshold.\r
2130 \r
2131 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
2132 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
2133 @param RecordData RecordData buffer will be filled.\r
2134 @param RecordDataSize The size of RecordData buffer.\r
2135 \r
2136 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
2137**/\r
2138EFI_STATUS\r
2139SmbiosFldMiscType36 (\r
2140 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
2141 IN UINT32 Offset,\r
2142 IN VOID *RecordData,\r
2143 IN UINT32 RecordDataSize\r
2144 )\r
2145{\r
2146 EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD *DeviceThreshold;\r
2147 \r
2148 DeviceThreshold = (EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD *)RecordData;\r
2149\r
2150 //\r
2151 // LowerThresNonCritical\r
2152 //\r
2153 CopyMem (\r
2154 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE36, LowerThresholdNonCritical),\r
2155 &DeviceThreshold->LowerThresNonCritical,\r
2156 2\r
2157 ); \r
2158\r
2159 //\r
2160 // UpperThresNonCritical\r
2161 //\r
2162 CopyMem (\r
2163 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE36, UpperThresholdNonCritical),\r
2164 &DeviceThreshold->UpperThresNonCritical,\r
2165 2\r
2166 );\r
2167 \r
2168 //\r
2169 // LowerThresCritical\r
2170 //\r
2171 CopyMem (\r
2172 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE36, LowerThresholdCritical),\r
2173 &DeviceThreshold->LowerThresCritical,\r
2174 2\r
2175 ); \r
2176\r
2177 //\r
2178 // UpperThresCritical\r
2179 //\r
2180 CopyMem (\r
2181 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE36, UpperThresholdCritical),\r
2182 &DeviceThreshold->UpperThresCritical,\r
2183 2\r
2184 ); \r
2185\r
2186 //\r
2187 // LowerThresNonRecover\r
2188 //\r
2189 CopyMem (\r
2190 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE36, LowerThresholdNonRecoverable),\r
2191 &DeviceThreshold->LowerThresNonRecover,\r
2192 2\r
2193 );\r
2194\r
2195 //\r
2196 // UpperThresNonRecover\r
2197 //\r
2198 CopyMem (\r
2199 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE36, UpperThresholdNonRecoverable),\r
2200 &DeviceThreshold->UpperThresNonRecover,\r
2201 2\r
2202 ); \r
2203 \r
2204 return EFI_SUCCESS;\r
2205}\r
2206\r
2207/**\r
2208 Field Filling Function for Misc SubClass record type 38 -- IPMI device info.\r
2209 \r
2210 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
2211 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
2212 @param RecordData RecordData buffer will be filled.\r
2213 @param RecordDataSize The size of RecordData buffer.\r
2214 \r
2215 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
2216**/\r
2217EFI_STATUS\r
2218SmbiosFldMiscType38 (\r
2219 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
2220 IN UINT32 Offset,\r
2221 IN VOID *RecordData,\r
2222 IN UINT32 RecordDataSize\r
2223 )\r
2224{\r
2225 EFI_MISC_IPMI_INTERFACE_TYPE_DATA *IpmiInfo;\r
2226\r
2227 IpmiInfo = (EFI_MISC_IPMI_INTERFACE_TYPE_DATA *) RecordData;\r
2228\r
2229 //\r
2230 // Interface Type\r
2231 //\r
2232 *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE38, InterfaceType)) = (UINT8) (IpmiInfo->IpmiInterfaceType);\r
2233\r
2234 //\r
2235 // IPMI specification revision\r
2236 //\r
2237 *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE38, IPMISpecificationRevision)) = \r
2238 (UINT8) ((IpmiInfo->IpmiSpecificationRevision.IpmiSpecLeastSignificantDigit) + \\r
2239 (IpmiInfo->IpmiSpecificationRevision.IpmiSpecMostSignificantDigit << 4));\r
2240\r
2241 //\r
2242 // I2C slave address\r
2243 //\r
2244 *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE38, I2CSlaveAddress)) = (UINT8) (IpmiInfo->IpmiI2CSlaveAddress);\r
2245\r
2246 //\r
2247 // NV storage device address\r
2248 //\r
2249 *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE38, NVStorageDeviceAddress)) = (UINT8) (IpmiInfo->IpmiNvDeviceAddress);\r
2250\r
2251 //\r
2252 // Base address\r
2253 //\r
2254 CopyMem (\r
2255 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE38, BaseAddress),\r
2256 &IpmiInfo->IpmiBaseAddress,\r
2257 8\r
2258 );\r
2259\r
2260 return EFI_SUCCESS;\r
2261}\r
2262\r
2263/**\r
2264 Field Filling Function for Misc SubClass record type 39 -- Power supply.\r
2265 \r
2266 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
2267 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
2268 @param RecordData RecordData buffer will be filled.\r
2269 @param RecordDataSize The size of RecordData buffer.\r
2270 \r
2271 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
2272**/\r
2273EFI_STATUS\r
2274SmbiosFldMiscType39 (\r
2275 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
2276 IN UINT32 Offset,\r
2277 IN VOID *RecordData,\r
2278 IN UINT32 RecordDataSize\r
2279 )\r
2280{\r
2281 EFI_MISC_SYSTEM_POWER_SUPPLY *PowerSupply;\r
2282 \r
2283 PowerSupply = (EFI_MISC_SYSTEM_POWER_SUPPLY *)RecordData;\r
2284 \r
2285 //\r
2286 // PowerUnitGroup\r
2287 //\r
2288 CopyMem (\r
2289 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE39, PowerUnitGroup),\r
2290 &PowerSupply->PowerUnitGroup,\r
2291 1\r
2292 ); \r
2293 \r
2294 //\r
2295 // PowerSupplyLocation\r
2296 //\r
2297 SmbiosFldString (\r
2298 StructureNode,\r
2299 OFFSET_OF (SMBIOS_TABLE_TYPE39, Location),\r
2300 &(PowerSupply->PowerSupplyLocation),\r
2301 2 // 64 * sizeof(CHAR16)\r
2302 ); \r
2303\r
2304 //\r
2305 // PowerSupplyDeviceName\r
2306 //\r
2307 SmbiosFldString (\r
2308 StructureNode,\r
2309 OFFSET_OF (SMBIOS_TABLE_TYPE39, DeviceName),\r
2310 &(PowerSupply->PowerSupplyDeviceName),\r
2311 2 // 64 * sizeof(CHAR16)\r
2312 ); \r
2313\r
2314 //\r
2315 // PowerSupplyManufacturer\r
2316 //\r
2317 SmbiosFldString (\r
2318 StructureNode,\r
2319 OFFSET_OF (SMBIOS_TABLE_TYPE39, Manufacturer),\r
2320 &(PowerSupply->PowerSupplyManufacturer),\r
2321 2 // 64 * sizeof(CHAR16)\r
2322 ); \r
2323\r
2324 //\r
2325 // PowerSupplySerialNumber\r
2326 //\r
2327 SmbiosFldString (\r
2328 StructureNode,\r
2329 OFFSET_OF (SMBIOS_TABLE_TYPE39, SerialNumber),\r
2330 &(PowerSupply->PowerSupplySerialNumber),\r
2331 2 // 64 * sizeof(CHAR16)\r
2332 ); \r
2333 \r
2334 //\r
2335 // PowerSupplyAssetTagNumber\r
2336 //\r
2337 SmbiosFldString (\r
2338 StructureNode,\r
2339 OFFSET_OF (SMBIOS_TABLE_TYPE39, AssetTagNumber),\r
2340 &(PowerSupply->PowerSupplyAssetTagNumber),\r
2341 2 // 64 * sizeof(CHAR16)\r
2342 ); \r
2343\r
2344 //\r
2345 // PowerSupplyModelPartNumber\r
2346 //\r
2347 SmbiosFldString (\r
2348 StructureNode,\r
2349 OFFSET_OF (SMBIOS_TABLE_TYPE39, ModelPartNumber),\r
2350 &(PowerSupply->PowerSupplyModelPartNumber),\r
2351 2 // 64 * sizeof(CHAR16)\r
2352 ); \r
2353 \r
2354 //\r
2355 // PowerSupplyRevisionLevel\r
2356 //\r
2357 SmbiosFldString (\r
2358 StructureNode,\r
2359 OFFSET_OF (SMBIOS_TABLE_TYPE39, RevisionLevel),\r
2360 &(PowerSupply->PowerSupplyRevisionLevel),\r
2361 2 // 64 * sizeof(CHAR16)\r
2362 ); \r
2363\r
2364 //\r
2365 // PowerSupplyMaxPowerCapacity\r
2366 //\r
2367 CopyMem (\r
2368 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE39, MaxPowerCapacity),\r
2369 &PowerSupply->PowerSupplyMaxPowerCapacity,\r
2370 2\r
2371 );\r
2372\r
2373 //\r
2374 // PowerSupplyCharacteristics\r
2375 //\r
2376 CopyMem (\r
2377 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE39, PowerSupplyCharacteristics),\r
2378 &PowerSupply->PowerSupplyCharacteristics,\r
2379 2\r
2380 );\r
2381 \r
2382 //\r
2383 // PowerSupplyInputVoltageProbeLink\r
2384 //\r
2385 SmbiosFldInterLink (\r
2386 StructureNode,\r
2387 (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE39, InputVoltageProbeHandle),\r
2388 26, // SMBIOS type 26 - Voltage Probe\r
2389 &PowerSupply->PowerSupplyInputVoltageProbeLink,\r
2390 &gEfiMiscSubClassGuid\r
2391 ); \r
2392\r
2393 //\r
2394 // PowerSupplyCoolingDeviceLink\r
2395 //\r
2396 SmbiosFldInterLink (\r
2397 StructureNode,\r
2398 (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE39, CoolingDeviceHandle),\r
2399 27, // SMBIOS type 27 - Cooling Device\r
2400 &PowerSupply->PowerSupplyCoolingDeviceLink,\r
2401 &gEfiMiscSubClassGuid\r
2402 ); \r
2403\r
2404 //\r
2405 // PowerSupplyInputCurrentProbeLink\r
2406 //\r
2407 SmbiosFldInterLink (\r
2408 StructureNode,\r
2409 (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE39, InputCurrentProbeHandle),\r
2410 29, // SMBIOS type 29 - Electrical Current Probe\r
2411 &PowerSupply->PowerSupplyInputCurrentProbeLink,\r
2412 &gEfiMiscSubClassGuid\r
2413 ); \r
2414 \r
2415 return EFI_SUCCESS;\r
2416}\r
2417\r
2418/**\r
2419 Field Filling Function for Misc SubClass record type 0x80-0xFF -- OEM.\r
2420 \r
2421 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
2422 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
2423 @param RecordData RecordData buffer will be filled.\r
2424 @param RecordDataSize The size of RecordData buffer.\r
2425 \r
2426 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
2427**/\r
2428EFI_STATUS\r
2429SmbiosFldMiscTypeOEM (\r
2430 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
2431 IN UINT32 Offset,\r
2432 IN VOID *RecordData,\r
2433 IN UINT32 RecordDataSize\r
2434 )\r
2435{\r
2436 EFI_STATUS Status;\r
2437 UINT8 *NewRecordData;\r
2438 UINT32 IncrementDataSize;\r
2439 UINT16 Handle;\r
2440 INT8 Result;\r
2441 UINT32 StructureSize;\r
2442 UINT8 CountOfString;\r
2443 \r
2444 Status = EFI_SUCCESS;\r
2445 NewRecordData = NULL;\r
2446\r
2447 //\r
2448 // Check if OEM structure has included 2 trailing 0s in data record, if not, \r
2449 // we append them at the end to ensure OEM structure is always correct with 2 trailing 0s.\r
2450 //\r
2451 Result = SmbiosCheckTrailingZero (RecordData, RecordDataSize);\r
2452 \r
2453 if (Result != 0) {\r
2454 DEBUG ((EFI_D_ERROR, "OEM SMBIOS type %x is not valid!!\n", ((SMBIOS_STRUCTURE *) RecordData) -> Type));\r
2455 if (Result == -1) {\r
2456 //\r
2457 // No 2 trailing 0s exist\r
2458 //\r
2459 DEBUG ((EFI_D_ERROR, "OEM SMBIOS type has NO 2 trailing 0s!!\n"));\r
2460 IncrementDataSize = 2;\r
2461 } else {\r
2462 //\r
2463 // Only 1 trailing 0 exist at the end\r
2464 //\r
2465 DEBUG ((EFI_D_ERROR, "OEM SMBIOS type has only 1 trailing 0!!\n"));\r
2466 IncrementDataSize = 1;\r
2467 }\r
2468 NewRecordData = AllocateZeroPool (RecordDataSize + IncrementDataSize);\r
2469 ASSERT (NewRecordData != NULL);\r
2470 CopyMem (NewRecordData, RecordData, RecordDataSize);\r
2471 RecordData = NewRecordData;\r
2472 RecordDataSize += IncrementDataSize;\r
2473 }\r
2474 \r
2475 Status = GetSmbiosStructureSize (StructureNode->Structure, &StructureSize, &CountOfString);\r
2476 ASSERT_EFI_ERROR (Status);\r
2477 \r
2478 if (StructureSize < RecordDataSize) {\r
2788ff51 2479 //\r
2480 // Create new SMBIOS table entry\r
2481 //\r
2482 SmbiosUpdateStructureBuffer (\r
2483 StructureNode,\r
2484 RecordData\r
2485 );\r
2486 } else {\r
2487 //\r
2488 // Copy the entire data (including the Smbios structure header),\r
2489 // but preserve the handle that is already allocated.\r
2490 //\r
2491 Handle = StructureNode->Structure->Handle;\r
2492 CopyMem (\r
2493 StructureNode->Structure,\r
2494 RecordData,\r
2495 RecordDataSize\r
2496 );\r
2497 StructureNode->Structure->Handle = Handle;\r
2498 StructureNode->StructureSize = RecordDataSize;\r
024b1029 2499 }\r
2500 \r
024b1029 2501 if (NewRecordData != NULL) {\r
2502 FreePool (NewRecordData);\r
2503 }\r
2504\r
2505 return Status;\r
2506}\r
2507\r
2508/**\r
2509 Field Filling Function for Misc SubClass record type 127 - End-of-Table.\r
2510 \r
2511 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
2512 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
2513 @param RecordData RecordData buffer will be filled.\r
2514 @param RecordDataSize The size of RecordData buffer.\r
2515 \r
2516 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
2517**/\r
2518EFI_STATUS\r
2519SmbiosFldMiscType127 (\r
2520 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
2521 IN UINT32 Offset,\r
2522 IN VOID *RecordData,\r
2523 IN UINT32 RecordDataSize\r
2524 )\r
2525{\r
2526 return EFI_SUCCESS;\r
2527}\r