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