]> git.proxmox.com Git - mirror_edk2.git/blob - QuarkPlatformPkg/Platform/Dxe/SmbiosMiscDxe/MiscOnboardDeviceFunction.c
QuarkPlatformPkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / QuarkPlatformPkg / Platform / Dxe / SmbiosMiscDxe / MiscOnboardDeviceFunction.c
1 /** @file
2 Onboard device information boot time changes.
3 SMBIOS type 10.
4
5 Copyright (c) 2013-2015 Intel Corporation.
6
7 SPDX-License-Identifier: BSD-2-Clause-Patent
8
9
10 **/
11
12
13 #include "CommonHeader.h"
14
15 #include "SmbiosMisc.h"
16
17
18 /**
19 This function makes boot time changes to the contents of the
20 MiscOnboardDevice (Type 10).
21
22 @param RecordData Pointer to copy of RecordData from the Data Table.
23
24 @retval EFI_SUCCESS All parameters were valid.
25 @retval EFI_UNSUPPORTED Unexpected RecordType value.
26 @retval EFI_INVALID_PARAMETER Invalid parameter was found.
27
28 **/
29 MISC_SMBIOS_TABLE_FUNCTION(MiscOnboardDevice)
30 {
31 CHAR8 *OptionalStrStart;
32 UINT8 StatusAndType;
33 UINTN DescriptionStrLen;
34 EFI_STRING DeviceDescription;
35 STRING_REF TokenToGet;
36 EFI_STATUS Status;
37 EFI_SMBIOS_HANDLE SmbiosHandle;
38 SMBIOS_TABLE_TYPE10 *SmbiosRecord;
39 EFI_MISC_ONBOARD_DEVICE *ForType10InputData;
40
41 ForType10InputData = (EFI_MISC_ONBOARD_DEVICE *)RecordData;
42 //
43 // First check for invalid parameters.
44 //
45 if (RecordData == NULL) {
46 return EFI_INVALID_PARAMETER;
47 }
48
49 TokenToGet = 0;
50 switch (ForType10InputData->OnBoardDeviceDescription) {
51 case STR_MISC_ONBOARD_DEVICE_VIDEO:
52 TokenToGet = STRING_TOKEN (STR_MISC_ONBOARD_DEVICE_VIDEO);
53 break;
54 case STR_MISC_ONBOARD_DEVICE_AUDIO:
55 TokenToGet = STRING_TOKEN (STR_MISC_ONBOARD_DEVICE_AUDIO);
56 break;
57 }
58
59 DeviceDescription = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);
60 DescriptionStrLen = StrLen(DeviceDescription);
61 if (DescriptionStrLen > SMBIOS_STRING_MAX_LENGTH) {
62 return EFI_UNSUPPORTED;
63 }
64
65 //
66 // Two zeros following the last string.
67 //
68 SmbiosRecord = AllocatePool(sizeof (SMBIOS_TABLE_TYPE10) + DescriptionStrLen + 1 + 1);
69 ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE10) + DescriptionStrLen + 1 + 1);
70
71 SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_ONBOARD_DEVICE_INFORMATION;
72 SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE10);
73 //
74 // Make handle chosen by smbios protocol.add automatically.
75 //
76 SmbiosRecord->Hdr.Handle = 0;
77
78 //
79 // Status & Type: Bit 7 Devicen Status, Bits 6:0 Type of Device
80 //
81 StatusAndType = (UINT8) ForType10InputData->OnBoardDeviceStatus.DeviceType;
82 if (ForType10InputData->OnBoardDeviceStatus.DeviceEnabled != 0) {
83 StatusAndType |= 0x80;
84 } else {
85 StatusAndType &= 0x7F;
86 }
87
88 SmbiosRecord->Device[0].DeviceType = StatusAndType;
89 SmbiosRecord->Device[0].DescriptionString = 1;
90 OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);
91 UnicodeStrToAsciiStr(DeviceDescription, OptionalStrStart);
92
93 //
94 // Now we have got the full smbios record, call smbios protocol to add this record.
95 //
96 SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;
97 Status = Smbios-> Add(
98 Smbios,
99 NULL,
100 &SmbiosHandle,
101 (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord
102 );
103 FreePool(SmbiosRecord);
104 return Status;
105 }