]> git.proxmox.com Git - mirror_edk2.git/blame - Nt32Pkg/MiscSubClassPlatformDxe/MiscPortInternalConnectorDesignatorFunction.c
Nt32Pkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / Nt32Pkg / MiscSubClassPlatformDxe / MiscPortInternalConnectorDesignatorFunction.c
CommitLineData
6ae81428 1/**@file\r
8879d432 2 \r
7ee85aa2 3Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>\r
9d2eedba 4SPDX-License-Identifier: BSD-2-Clause-Patent\r
8879d432 5\r
6Module Name:\r
7\r
8 MiscPortInternalConnectorDesignatorFunction.c\r
9 \r
10Abstract: \r
11\r
12 This driver parses the mMiscSubclassDataTable structure and reports\r
13 any generated data to the DataHub.\r
14\r
6ae81428 15**/\r
8879d432 16\r
8879d432 17#include "MiscSubclassDriver.h"\r
18\r
0df31784 19\r
1fdd39d3 20MISC_SMBIOS_TABLE_FUNCTION (\r
8879d432 21 MiscPortInternalConnectorDesignator\r
22 )\r
23/*++\r
24Description:\r
25\r
26 This function makes boot time changes to the contents of the\r
27 MiscPortConnectorInformation (Type 8).\r
28\r
29Parameters:\r
30\r
31 RecordType\r
32 Type of record to be processed from the Data Table.\r
33 mMiscSubclassDataTable[].RecordType\r
34\r
35 RecordLen\r
36 Size of static RecordData from the Data Table.\r
37 mMiscSubclassDataTable[].RecordLen\r
38\r
39 RecordData\r
40 Pointer to copy of RecordData from the Data Table. Changes made\r
41 to this copy will be written to the Data Hub but will not alter\r
42 the contents of the static Data Table.\r
43\r
44 LogRecordData\r
45 Set *LogRecordData to TRUE to log RecordData to Data Hub.\r
46 Set *LogRecordData to FALSE when there is no more data to log.\r
47\r
48Returns:\r
49\r
50 EFI_SUCCESS\r
51 All parameters were valid and *RecordData and *LogRecordData have\r
52 been set.\r
53\r
54 EFI_UNSUPPORTED\r
55 Unexpected RecordType value.\r
56\r
57 EFI_INVALID_PARAMETER\r
58 One of the following parameter conditions was true:\r
59 RecordLen was zero.\r
60 RecordData was NULL.\r
61 LogRecordData was NULL.\r
62--*/\r
63{\r
1fdd39d3 64 CHAR8 *OptionalStrStart;\r
65 UINTN InternalRefStrLen;\r
66 UINTN ExternalRefStrLen; \r
67 EFI_STRING InternalRef;\r
68 EFI_STRING ExternalRef;\r
69 STRING_REF TokenForInternal;\r
70 STRING_REF TokenForExternal;\r
71 EFI_STATUS Status;\r
72 SMBIOS_TABLE_TYPE8 *SmbiosRecord;\r
73 EFI_SMBIOS_HANDLE SmbiosHandle;\r
74 EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR *ForType8InputData;\r
75 \r
76 ForType8InputData = (EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR *)RecordData;\r
8879d432 77 //\r
78 // First check for invalid parameters.\r
79 //\r
1fdd39d3 80 if (RecordData == NULL) {\r
8879d432 81 return EFI_INVALID_PARAMETER;\r
82 }\r
8879d432 83\r
1fdd39d3 84 TokenForInternal = 0;\r
85 TokenForExternal = 0;\r
86 \r
87 switch (ForType8InputData->PortInternalConnectorDesignator) { \r
8879d432 88\r
1fdd39d3 89 case STR_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR:\r
90 TokenForInternal = STRING_TOKEN (STR_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR);\r
91 TokenForExternal = STRING_TOKEN(STR_MISC_PORT_EXTERNAL_CONNECTOR_DESIGNATOR);\r
92 break;\r
8879d432 93 case STR_MISC_PORT_INTERNAL_KEYBOARD:\r
1fdd39d3 94 TokenForInternal = STRING_TOKEN (STR_MISC_PORT_INTERNAL_KEYBOARD);\r
95 TokenForExternal = STRING_TOKEN(STR_MISC_PORT_EXTERNAL_KEYBOARD);\r
96 break;\r
97 case STR_MISC_PORT_INTERNAL_MOUSE:\r
98 TokenForInternal = STRING_TOKEN (STR_MISC_PORT_INTERNAL_MOUSE);\r
99 TokenForExternal = STRING_TOKEN(STR_MISC_PORT_EXTERNAL_MOUSE);\r
8879d432 100 break;\r
8879d432 101 case STR_MISC_PORT_INTERNAL_COM1:\r
1fdd39d3 102 TokenForInternal = STRING_TOKEN (STR_MISC_PORT_INTERNAL_COM1);\r
103 TokenForExternal = STRING_TOKEN(STR_MISC_PORT_EXTERNAL_COM1);\r
8879d432 104 break;\r
8879d432 105 case STR_MISC_PORT_INTERNAL_COM2:\r
1fdd39d3 106 TokenForInternal = STRING_TOKEN (STR_MISC_PORT_INTERNAL_COM2);\r
107 TokenForExternal = STRING_TOKEN(STR_MISC_PORT_EXTERNAL_COM2);\r
108 break;\r
109 case STR_MISC_PORT_INTERNAL_EXTENSION_POWER:\r
110 TokenForInternal = STRING_TOKEN (STR_MISC_PORT_INTERNAL_EXTENSION_POWER);\r
111 TokenForExternal = STRING_TOKEN(STR_MISC_PORT_EXTERNAL_EXTENSION_POWER);\r
8879d432 112 break;\r
8879d432 113 case STR_MISC_PORT_INTERNAL_FLOPPY:\r
1fdd39d3 114 TokenForInternal = STRING_TOKEN (STR_MISC_PORT_INTERNAL_FLOPPY);\r
115 TokenForExternal = STRING_TOKEN(STR_MISC_PORT_EXTERNAL_FLOPPY);\r
8879d432 116 break;\r
8879d432 117 default:\r
8879d432 118 break;\r
8879d432 119 }\r
120\r
1fdd39d3 121 InternalRef = HiiGetPackageString(&gEfiCallerIdGuid, TokenForInternal, NULL);\r
122 InternalRefStrLen = StrLen(InternalRef);\r
123 if (InternalRefStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
124 return EFI_UNSUPPORTED;\r
125 }\r
126\r
127 ExternalRef = HiiGetPackageString(&gEfiCallerIdGuid, TokenForExternal, NULL);\r
128 ExternalRefStrLen = StrLen(ExternalRef);\r
129 if (ExternalRefStrLen > SMBIOS_STRING_MAX_LENGTH) {\r
130 return EFI_UNSUPPORTED;\r
131 }\r
132\r
133 //\r
134 // Two zeros following the last string.\r
135 //\r
136 SmbiosRecord = AllocatePool(sizeof (SMBIOS_TABLE_TYPE8) + InternalRefStrLen + 1 + ExternalRefStrLen + 1 + 1);\r
137 ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE8) + InternalRefStrLen + 1 + ExternalRefStrLen + 1 + 1);\r
138\r
139 SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION;\r
140 SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE8);\r
141 //\r
142 // Make handle chosen by smbios protocol.add automatically.\r
143 //\r
144 SmbiosRecord->Hdr.Handle = 0; \r
145 SmbiosRecord->InternalReferenceDesignator = 1;\r
146 SmbiosRecord->InternalConnectorType = (UINT8)ForType8InputData->PortInternalConnectorType;\r
147 SmbiosRecord->ExternalReferenceDesignator = 2;\r
148 SmbiosRecord->ExternalConnectorType = (UINT8)ForType8InputData->PortExternalConnectorType;\r
149 SmbiosRecord->PortType = (UINT8)ForType8InputData->PortType;\r
150 \r
151 OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);\r
152 UnicodeStrToAsciiStr(InternalRef, OptionalStrStart);\r
153 UnicodeStrToAsciiStr(ExternalRef, OptionalStrStart + InternalRefStrLen + 1);\r
154\r
155 //\r
156 // Now we have got the full smbios record, call smbios protocol to add this record.\r
157 //\r
7ee85aa2
SZ
158 Status = AddSmbiosRecord (Smbios, &SmbiosHandle, (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord);\r
159\r
1fdd39d3 160 FreePool(SmbiosRecord);\r
161 return Status;\r
8879d432 162}\r
163\r
1fdd39d3 164\r
165\r
8879d432 166/* eof - MiscSystemManufacturerFunction.c */\r