]> git.proxmox.com Git - mirror_edk2.git/blame - EdkCompatibilityPkg/Compatibility/DataHubSmBiosRecordsOnPiSmBiosThunk/MiscConv.c
Fix bug that that the template does not match fields in structure EFI_BLOCK_IO_MEDIA
[mirror_edk2.git] / EdkCompatibilityPkg / Compatibility / DataHubSmBiosRecordsOnPiSmBiosThunk / MiscConv.c
CommitLineData
024b1029 1/** @file\r
2 Routines that support Misc SubClass data records translation.\r
3 \r
4Copyright (c) 2009, Intel Corporation\r
5All rights reserved. This program and the accompanying materials\r
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
483 if( Ec->ChassisElementCount ) {\r
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
916 //\r
917 SmbiosFldString (\r
918 StructureNode,\r
919 OFFSET_OF (SMBIOS_TABLE_TYPE13, CurrentLanguages),\r
920 &(InstallableLanguage->CurrentLanguageNumber),\r
921 2 // 64 * sizeof(CHAR16)\r
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
2043/**\r
2044 Field Filling Function for Misc SubClass record type 36 -- Management Device Threshold.\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
2054SmbiosFldMiscType36 (\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_THRESHOLD *DeviceThreshold;\r
2062 \r
2063 DeviceThreshold = (EFI_MISC_MANAGEMENT_DEVICE_THRESHOLD *)RecordData;\r
2064\r
2065 //\r
2066 // LowerThresNonCritical\r
2067 //\r
2068 CopyMem (\r
2069 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE36, LowerThresholdNonCritical),\r
2070 &DeviceThreshold->LowerThresNonCritical,\r
2071 2\r
2072 ); \r
2073\r
2074 //\r
2075 // UpperThresNonCritical\r
2076 //\r
2077 CopyMem (\r
2078 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE36, UpperThresholdNonCritical),\r
2079 &DeviceThreshold->UpperThresNonCritical,\r
2080 2\r
2081 );\r
2082 \r
2083 //\r
2084 // LowerThresCritical\r
2085 //\r
2086 CopyMem (\r
2087 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE36, LowerThresholdCritical),\r
2088 &DeviceThreshold->LowerThresCritical,\r
2089 2\r
2090 ); \r
2091\r
2092 //\r
2093 // UpperThresCritical\r
2094 //\r
2095 CopyMem (\r
2096 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE36, UpperThresholdCritical),\r
2097 &DeviceThreshold->UpperThresCritical,\r
2098 2\r
2099 ); \r
2100\r
2101 //\r
2102 // LowerThresNonRecover\r
2103 //\r
2104 CopyMem (\r
2105 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE36, LowerThresholdNonRecoverable),\r
2106 &DeviceThreshold->LowerThresNonRecover,\r
2107 2\r
2108 );\r
2109\r
2110 //\r
2111 // UpperThresNonRecover\r
2112 //\r
2113 CopyMem (\r
2114 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE36, UpperThresholdNonRecoverable),\r
2115 &DeviceThreshold->UpperThresNonRecover,\r
2116 2\r
2117 ); \r
2118 \r
2119 return EFI_SUCCESS;\r
2120}\r
2121\r
2122/**\r
2123 Field Filling Function for Misc SubClass record type 38 -- IPMI device info.\r
2124 \r
2125 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
2126 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
2127 @param RecordData RecordData buffer will be filled.\r
2128 @param RecordDataSize The size of RecordData buffer.\r
2129 \r
2130 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
2131**/\r
2132EFI_STATUS\r
2133SmbiosFldMiscType38 (\r
2134 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
2135 IN UINT32 Offset,\r
2136 IN VOID *RecordData,\r
2137 IN UINT32 RecordDataSize\r
2138 )\r
2139{\r
2140 EFI_MISC_IPMI_INTERFACE_TYPE_DATA *IpmiInfo;\r
2141\r
2142 IpmiInfo = (EFI_MISC_IPMI_INTERFACE_TYPE_DATA *) RecordData;\r
2143\r
2144 //\r
2145 // Interface Type\r
2146 //\r
2147 *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE38, InterfaceType)) = (UINT8) (IpmiInfo->IpmiInterfaceType);\r
2148\r
2149 //\r
2150 // IPMI specification revision\r
2151 //\r
2152 *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE38, IPMISpecificationRevision)) = \r
2153 (UINT8) ((IpmiInfo->IpmiSpecificationRevision.IpmiSpecLeastSignificantDigit) + \\r
2154 (IpmiInfo->IpmiSpecificationRevision.IpmiSpecMostSignificantDigit << 4));\r
2155\r
2156 //\r
2157 // I2C slave address\r
2158 //\r
2159 *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE38, I2CSlaveAddress)) = (UINT8) (IpmiInfo->IpmiI2CSlaveAddress);\r
2160\r
2161 //\r
2162 // NV storage device address\r
2163 //\r
2164 *(UINT8 *) ((UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE38, NVStorageDeviceAddress)) = (UINT8) (IpmiInfo->IpmiNvDeviceAddress);\r
2165\r
2166 //\r
2167 // Base address\r
2168 //\r
2169 CopyMem (\r
2170 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE38, BaseAddress),\r
2171 &IpmiInfo->IpmiBaseAddress,\r
2172 8\r
2173 );\r
2174\r
2175 return EFI_SUCCESS;\r
2176}\r
2177\r
2178/**\r
2179 Field Filling Function for Misc SubClass record type 39 -- Power supply.\r
2180 \r
2181 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
2182 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
2183 @param RecordData RecordData buffer will be filled.\r
2184 @param RecordDataSize The size of RecordData buffer.\r
2185 \r
2186 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
2187**/\r
2188EFI_STATUS\r
2189SmbiosFldMiscType39 (\r
2190 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
2191 IN UINT32 Offset,\r
2192 IN VOID *RecordData,\r
2193 IN UINT32 RecordDataSize\r
2194 )\r
2195{\r
2196 EFI_MISC_SYSTEM_POWER_SUPPLY *PowerSupply;\r
2197 \r
2198 PowerSupply = (EFI_MISC_SYSTEM_POWER_SUPPLY *)RecordData;\r
2199 \r
2200 //\r
2201 // PowerUnitGroup\r
2202 //\r
2203 CopyMem (\r
2204 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE39, PowerUnitGroup),\r
2205 &PowerSupply->PowerUnitGroup,\r
2206 1\r
2207 ); \r
2208 \r
2209 //\r
2210 // PowerSupplyLocation\r
2211 //\r
2212 SmbiosFldString (\r
2213 StructureNode,\r
2214 OFFSET_OF (SMBIOS_TABLE_TYPE39, Location),\r
2215 &(PowerSupply->PowerSupplyLocation),\r
2216 2 // 64 * sizeof(CHAR16)\r
2217 ); \r
2218\r
2219 //\r
2220 // PowerSupplyDeviceName\r
2221 //\r
2222 SmbiosFldString (\r
2223 StructureNode,\r
2224 OFFSET_OF (SMBIOS_TABLE_TYPE39, DeviceName),\r
2225 &(PowerSupply->PowerSupplyDeviceName),\r
2226 2 // 64 * sizeof(CHAR16)\r
2227 ); \r
2228\r
2229 //\r
2230 // PowerSupplyManufacturer\r
2231 //\r
2232 SmbiosFldString (\r
2233 StructureNode,\r
2234 OFFSET_OF (SMBIOS_TABLE_TYPE39, Manufacturer),\r
2235 &(PowerSupply->PowerSupplyManufacturer),\r
2236 2 // 64 * sizeof(CHAR16)\r
2237 ); \r
2238\r
2239 //\r
2240 // PowerSupplySerialNumber\r
2241 //\r
2242 SmbiosFldString (\r
2243 StructureNode,\r
2244 OFFSET_OF (SMBIOS_TABLE_TYPE39, SerialNumber),\r
2245 &(PowerSupply->PowerSupplySerialNumber),\r
2246 2 // 64 * sizeof(CHAR16)\r
2247 ); \r
2248 \r
2249 //\r
2250 // PowerSupplyAssetTagNumber\r
2251 //\r
2252 SmbiosFldString (\r
2253 StructureNode,\r
2254 OFFSET_OF (SMBIOS_TABLE_TYPE39, AssetTagNumber),\r
2255 &(PowerSupply->PowerSupplyAssetTagNumber),\r
2256 2 // 64 * sizeof(CHAR16)\r
2257 ); \r
2258\r
2259 //\r
2260 // PowerSupplyModelPartNumber\r
2261 //\r
2262 SmbiosFldString (\r
2263 StructureNode,\r
2264 OFFSET_OF (SMBIOS_TABLE_TYPE39, ModelPartNumber),\r
2265 &(PowerSupply->PowerSupplyModelPartNumber),\r
2266 2 // 64 * sizeof(CHAR16)\r
2267 ); \r
2268 \r
2269 //\r
2270 // PowerSupplyRevisionLevel\r
2271 //\r
2272 SmbiosFldString (\r
2273 StructureNode,\r
2274 OFFSET_OF (SMBIOS_TABLE_TYPE39, RevisionLevel),\r
2275 &(PowerSupply->PowerSupplyRevisionLevel),\r
2276 2 // 64 * sizeof(CHAR16)\r
2277 ); \r
2278\r
2279 //\r
2280 // PowerSupplyMaxPowerCapacity\r
2281 //\r
2282 CopyMem (\r
2283 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE39, MaxPowerCapacity),\r
2284 &PowerSupply->PowerSupplyMaxPowerCapacity,\r
2285 2\r
2286 );\r
2287\r
2288 //\r
2289 // PowerSupplyCharacteristics\r
2290 //\r
2291 CopyMem (\r
2292 (UINT8 *) (StructureNode->Structure) + OFFSET_OF (SMBIOS_TABLE_TYPE39, PowerSupplyCharacteristics),\r
2293 &PowerSupply->PowerSupplyCharacteristics,\r
2294 2\r
2295 );\r
2296 \r
2297 //\r
2298 // PowerSupplyInputVoltageProbeLink\r
2299 //\r
2300 SmbiosFldInterLink (\r
2301 StructureNode,\r
2302 (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE39, InputVoltageProbeHandle),\r
2303 26, // SMBIOS type 26 - Voltage Probe\r
2304 &PowerSupply->PowerSupplyInputVoltageProbeLink,\r
2305 &gEfiMiscSubClassGuid\r
2306 ); \r
2307\r
2308 //\r
2309 // PowerSupplyCoolingDeviceLink\r
2310 //\r
2311 SmbiosFldInterLink (\r
2312 StructureNode,\r
2313 (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE39, CoolingDeviceHandle),\r
2314 27, // SMBIOS type 27 - Cooling Device\r
2315 &PowerSupply->PowerSupplyCoolingDeviceLink,\r
2316 &gEfiMiscSubClassGuid\r
2317 ); \r
2318\r
2319 //\r
2320 // PowerSupplyInputCurrentProbeLink\r
2321 //\r
2322 SmbiosFldInterLink (\r
2323 StructureNode,\r
2324 (UINT16) OFFSET_OF (SMBIOS_TABLE_TYPE39, InputCurrentProbeHandle),\r
2325 29, // SMBIOS type 29 - Electrical Current Probe\r
2326 &PowerSupply->PowerSupplyInputCurrentProbeLink,\r
2327 &gEfiMiscSubClassGuid\r
2328 ); \r
2329 \r
2330 return EFI_SUCCESS;\r
2331}\r
2332\r
2333/**\r
2334 Field Filling Function for Misc SubClass record type 0x80-0xFF -- OEM.\r
2335 \r
2336 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
2337 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
2338 @param RecordData RecordData buffer will be filled.\r
2339 @param RecordDataSize The size of RecordData buffer.\r
2340 \r
2341 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
2342**/\r
2343EFI_STATUS\r
2344SmbiosFldMiscTypeOEM (\r
2345 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
2346 IN UINT32 Offset,\r
2347 IN VOID *RecordData,\r
2348 IN UINT32 RecordDataSize\r
2349 )\r
2350{\r
2351 EFI_STATUS Status;\r
2352 UINT8 *NewRecordData;\r
2353 UINT32 IncrementDataSize;\r
2354 UINT16 Handle;\r
2355 INT8 Result;\r
2356 UINT32 StructureSize;\r
2357 UINT8 CountOfString;\r
2358 \r
2359 Status = EFI_SUCCESS;\r
2360 NewRecordData = NULL;\r
2361\r
2362 //\r
2363 // Check if OEM structure has included 2 trailing 0s in data record, if not, \r
2364 // we append them at the end to ensure OEM structure is always correct with 2 trailing 0s.\r
2365 //\r
2366 Result = SmbiosCheckTrailingZero (RecordData, RecordDataSize);\r
2367 \r
2368 if (Result != 0) {\r
2369 DEBUG ((EFI_D_ERROR, "OEM SMBIOS type %x is not valid!!\n", ((SMBIOS_STRUCTURE *) RecordData) -> Type));\r
2370 if (Result == -1) {\r
2371 //\r
2372 // No 2 trailing 0s exist\r
2373 //\r
2374 DEBUG ((EFI_D_ERROR, "OEM SMBIOS type has NO 2 trailing 0s!!\n"));\r
2375 IncrementDataSize = 2;\r
2376 } else {\r
2377 //\r
2378 // Only 1 trailing 0 exist at the end\r
2379 //\r
2380 DEBUG ((EFI_D_ERROR, "OEM SMBIOS type has only 1 trailing 0!!\n"));\r
2381 IncrementDataSize = 1;\r
2382 }\r
2383 NewRecordData = AllocateZeroPool (RecordDataSize + IncrementDataSize);\r
2384 ASSERT (NewRecordData != NULL);\r
2385 CopyMem (NewRecordData, RecordData, RecordDataSize);\r
2386 RecordData = NewRecordData;\r
2387 RecordDataSize += IncrementDataSize;\r
2388 }\r
2389 \r
2390 Status = GetSmbiosStructureSize (StructureNode->Structure, &StructureSize, &CountOfString);\r
2391 ASSERT_EFI_ERROR (Status);\r
2392 \r
2393 if (StructureSize < RecordDataSize) {\r
2394 Status = SmbiosEnlargeStructureBuffer (\r
2395 StructureNode,\r
2396 ((EFI_SMBIOS_TABLE_HEADER *)RecordData)->Length,\r
2397 StructureSize,\r
2398 RecordDataSize\r
2399 );\r
2400 if (EFI_ERROR (Status)) {\r
2401 return Status;\r
2402 }\r
2403 }\r
2404 \r
2405 //\r
2406 // Copy the entire data (including the Smbios structure header),\r
2407 // but preserve the handle that is already allocated.\r
2408 //\r
2409 Handle = StructureNode->Structure->Handle;\r
2410 CopyMem (\r
2411 StructureNode->Structure,\r
2412 RecordData,\r
2413 RecordDataSize\r
2414 );\r
2415 StructureNode->Structure->Handle = Handle;\r
2416 StructureNode->StructureSize = RecordDataSize;\r
2417 \r
2418 if (NewRecordData != NULL) {\r
2419 FreePool (NewRecordData);\r
2420 }\r
2421\r
2422 return Status;\r
2423}\r
2424\r
2425/**\r
2426 Field Filling Function for Misc SubClass record type 127 - End-of-Table.\r
2427 \r
2428 @param StructureNode Pointer to SMBIOS_STRUCTURE_NODE which is current processed.\r
2429 @param Offset Offset of SMBIOS record which RecordData will be filled.\r
2430 @param RecordData RecordData buffer will be filled.\r
2431 @param RecordDataSize The size of RecordData buffer.\r
2432 \r
2433 @retval EFI_SUCCESS Success fill RecordData into SMBIOS's record buffer.\r
2434**/\r
2435EFI_STATUS\r
2436SmbiosFldMiscType127 (\r
2437 IN OUT SMBIOS_STRUCTURE_NODE *StructureNode,\r
2438 IN UINT32 Offset,\r
2439 IN VOID *RecordData,\r
2440 IN UINT32 RecordDataSize\r
2441 )\r
2442{\r
2443 return EFI_SUCCESS;\r
2444}\r