2 Port internal connector designator information boot time changes.
5 Copyright (c) 2013-2015 Intel Corporation.
7 SPDX-License-Identifier: BSD-2-Clause-Patent
13 #include "CommonHeader.h"
15 #include "SmbiosMisc.h"
17 //STATIC PS2_CONN_DEVICE_PATH mPs2KeyboardDevicePath = { DP_ACPI, DP_PCI( 0x1F,0x00 ),DP_LPC( 0x0303,0 ), DP_END };
18 //STATIC PS2_CONN_DEVICE_PATH mPs2MouseDevicePath = { DP_ACPI, DP_PCI( 0x1F,0x00 ),DP_LPC( 0x0303,1 ), DP_END };
19 //STATIC SERIAL_CONN_DEVICE_PATH mCom1DevicePath = { DP_ACPI, DP_PCI( 0x1F,0x00 ),DP_LPC( 0x0501,0 ), DP_END };
20 //STATIC SERIAL_CONN_DEVICE_PATH mCom2DevicePath = { DP_ACPI, DP_PCI( 0x1F,0x00 ),DP_LPC( 0x0501,1 ), DP_END };
21 //STATIC PARALLEL_CONN_DEVICE_PATH mLpt1DevicePath = { DP_ACPI, DP_PCI( 0x1F,0x00 ),DP_LPC( 0x0401,0 ), DP_END };
22 //STATIC FLOOPY_CONN_DEVICE_PATH mFloopyADevicePath = { DP_ACPI, DP_PCI( 0x1F,0x00 ),DP_LPC( 0x0604,0 ), DP_END };
23 //STATIC FLOOPY_CONN_DEVICE_PATH mFloopyBDevicePath = { DP_ACPI, DP_PCI( 0x1F,0x00 ),DP_LPC( 0x0604,1 ), DP_END };
24 //STATIC USB_PORT_DEVICE_PATH mUsb0DevicePath = { DP_ACPI, DP_PCI( 0x1d,0x00 ), DP_END };
25 //STATIC USB_PORT_DEVICE_PATH mUsb1DevicePath = { DP_ACPI, DP_PCI( 0x1d,0x01 ), DP_END };
26 //STATIC USB_PORT_DEVICE_PATH mUsb2DevicePath = { DP_ACPI, DP_PCI( 0x1d,0x02 ), DP_END };
27 //STATIC USB_PORT_DEVICE_PATH mUsb3DevicePath = { DP_ACPI, DP_PCI( 0x1d,0x03 ), DP_END };
28 //STATIC IDE_DEVICE_PATH mIdeDevicePath = { DP_ACPI, DP_PCI( 0x1F,0x01 ), DP_END };
29 //STATIC IDE_DEVICE_PATH mSata1DevicePath = { DP_ACPI, DP_PCI( 0x1F,0x02 ), DP_END };
30 //STATIC GB_NIC_DEVICE_PATH mGbNicDevicePath = { DP_ACPI, DP_PCI( 0x03,0x00 ),DP_PCI( 0x1F,0x00 ),DP_PCI( 0x07,0x00 ), DP_END };
31 EFI_DEVICE_PATH_PROTOCOL mEndDevicePath
= DP_END
;
33 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR
, MiscPortConnector1
);
34 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR
, MiscPortConnector2
);
35 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR
, MiscPortConnector3
);
36 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR
, MiscPortConnector4
);
37 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR
, MiscPortConnector5
);
38 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR
, MiscPortConnector6
);
39 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR
, MiscPortConnector7
);
40 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR
, MiscPortConnector8
);
41 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR
, MiscPortConnector9
);
42 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR
, MiscPortConnector10
);
43 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR
, MiscPortConnector11
);
44 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR
, MiscPortConnector12
);
45 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR
, MiscPortConnector13
);
46 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR
, MiscPortConnector14
);
49 EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR
*mMiscConnectorArray
[SMBIOS_PORT_CONNECTOR_MAX_NUM
] =
51 MISC_SMBIOS_DATA_TABLE_POINTER(MiscPortConnector1
),
52 MISC_SMBIOS_DATA_TABLE_POINTER(MiscPortConnector2
),
53 MISC_SMBIOS_DATA_TABLE_POINTER(MiscPortConnector3
),
54 MISC_SMBIOS_DATA_TABLE_POINTER(MiscPortConnector4
),
55 MISC_SMBIOS_DATA_TABLE_POINTER(MiscPortConnector5
),
56 MISC_SMBIOS_DATA_TABLE_POINTER(MiscPortConnector6
),
57 MISC_SMBIOS_DATA_TABLE_POINTER(MiscPortConnector7
),
58 MISC_SMBIOS_DATA_TABLE_POINTER(MiscPortConnector8
),
59 MISC_SMBIOS_DATA_TABLE_POINTER(MiscPortConnector9
),
60 MISC_SMBIOS_DATA_TABLE_POINTER(MiscPortConnector10
),
61 MISC_SMBIOS_DATA_TABLE_POINTER(MiscPortConnector11
),
62 MISC_SMBIOS_DATA_TABLE_POINTER(MiscPortConnector12
),
63 MISC_SMBIOS_DATA_TABLE_POINTER(MiscPortConnector13
),
64 MISC_SMBIOS_DATA_TABLE_POINTER(MiscPortConnector14
),
67 BOOLEAN PcdMiscPortIsInit
= FALSE
;
68 SMBIOS_PORT_CONNECTOR_DESIGNATOR_COFNIG SMBIOSPortConnector
= {0};
72 Get Misc Port Configuration information from PCD
73 @param SMBIOSPortConnector Pointer to SMBIOSPortConnector table.
78 GetMiscPortConfigFromPcd ()
83 SMBIOSPortConnector
.SMBIOSConnectorNumber
= PcdGet8 (PcdSMBIOSConnectorNumber
);
84 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort1InternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[0].PortInternalConnectorDesignator
);
85 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort1ExternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[0].PortExternalConnectorDesignator
);
86 SMBIOSPortConnector
.SMBIOSPortConnector
[0].PortInternalConnectorType
= PcdGet8 (PcdSMBIOSPort1InternalConnectorType
);
87 SMBIOSPortConnector
.SMBIOSPortConnector
[0].PortExternalConnectorType
= PcdGet8 (PcdSMBIOSPort1ExternalConnectorType
);
88 SMBIOSPortConnector
.SMBIOSPortConnector
[0].PortType
= PcdGet8 (PcdSMBIOSPort1Type
);
90 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort2InternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[1].PortInternalConnectorDesignator
);
91 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort2ExternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[1].PortExternalConnectorDesignator
);
92 SMBIOSPortConnector
.SMBIOSPortConnector
[1].PortInternalConnectorType
= PcdGet8 (PcdSMBIOSPort2InternalConnectorType
);
93 SMBIOSPortConnector
.SMBIOSPortConnector
[1].PortExternalConnectorType
= PcdGet8 (PcdSMBIOSPort2ExternalConnectorType
);
94 SMBIOSPortConnector
.SMBIOSPortConnector
[1].PortType
= PcdGet8 (PcdSMBIOSPort2Type
);
96 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort3InternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[2].PortInternalConnectorDesignator
);
97 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort3ExternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[2].PortExternalConnectorDesignator
);
98 SMBIOSPortConnector
.SMBIOSPortConnector
[2].PortInternalConnectorType
= PcdGet8 (PcdSMBIOSPort3InternalConnectorType
);
99 SMBIOSPortConnector
.SMBIOSPortConnector
[2].PortExternalConnectorType
= PcdGet8 (PcdSMBIOSPort3ExternalConnectorType
);
100 SMBIOSPortConnector
.SMBIOSPortConnector
[2].PortType
= PcdGet8 (PcdSMBIOSPort3Type
);
102 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort4InternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[3].PortInternalConnectorDesignator
);
103 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort4ExternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[3].PortExternalConnectorDesignator
);
104 SMBIOSPortConnector
.SMBIOSPortConnector
[3].PortInternalConnectorType
= PcdGet8 (PcdSMBIOSPort4InternalConnectorType
);
105 SMBIOSPortConnector
.SMBIOSPortConnector
[3].PortExternalConnectorType
= PcdGet8 (PcdSMBIOSPort4ExternalConnectorType
);
106 SMBIOSPortConnector
.SMBIOSPortConnector
[3].PortType
= PcdGet8 (PcdSMBIOSPort4Type
);
108 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort5InternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[4].PortInternalConnectorDesignator
);
109 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort5ExternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[4].PortExternalConnectorDesignator
);
110 SMBIOSPortConnector
.SMBIOSPortConnector
[4].PortInternalConnectorType
= PcdGet8 (PcdSMBIOSPort5InternalConnectorType
);
111 SMBIOSPortConnector
.SMBIOSPortConnector
[4].PortExternalConnectorType
= PcdGet8 (PcdSMBIOSPort5ExternalConnectorType
);
112 SMBIOSPortConnector
.SMBIOSPortConnector
[4].PortType
= PcdGet8 (PcdSMBIOSPort5Type
);
114 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort6InternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[5].PortInternalConnectorDesignator
);
115 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort6ExternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[5].PortExternalConnectorDesignator
);
116 SMBIOSPortConnector
.SMBIOSPortConnector
[5].PortInternalConnectorType
= PcdGet8 (PcdSMBIOSPort6InternalConnectorType
);
117 SMBIOSPortConnector
.SMBIOSPortConnector
[5].PortExternalConnectorType
= PcdGet8 (PcdSMBIOSPort6ExternalConnectorType
);
118 SMBIOSPortConnector
.SMBIOSPortConnector
[5].PortType
= PcdGet8 (PcdSMBIOSPort6Type
);
120 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort7InternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[6].PortInternalConnectorDesignator
);
121 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort7ExternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[6].PortExternalConnectorDesignator
);
122 SMBIOSPortConnector
.SMBIOSPortConnector
[6].PortInternalConnectorType
= PcdGet8 (PcdSMBIOSPort7InternalConnectorType
);
123 SMBIOSPortConnector
.SMBIOSPortConnector
[6].PortExternalConnectorType
= PcdGet8 (PcdSMBIOSPort7ExternalConnectorType
);
124 SMBIOSPortConnector
.SMBIOSPortConnector
[6].PortType
= PcdGet8 (PcdSMBIOSPort7Type
);
126 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort8InternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[7].PortInternalConnectorDesignator
);
127 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort8ExternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[7].PortExternalConnectorDesignator
);
128 SMBIOSPortConnector
.SMBIOSPortConnector
[7].PortInternalConnectorType
= PcdGet8 (PcdSMBIOSPort8InternalConnectorType
);
129 SMBIOSPortConnector
.SMBIOSPortConnector
[7].PortExternalConnectorType
= PcdGet8 (PcdSMBIOSPort8ExternalConnectorType
);
130 SMBIOSPortConnector
.SMBIOSPortConnector
[7].PortType
= PcdGet8 (PcdSMBIOSPort8Type
);
132 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort9InternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[8].PortInternalConnectorDesignator
);
133 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort9ExternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[8].PortExternalConnectorDesignator
);
134 SMBIOSPortConnector
.SMBIOSPortConnector
[8].PortInternalConnectorType
= PcdGet8 (PcdSMBIOSPort9InternalConnectorType
);
135 SMBIOSPortConnector
.SMBIOSPortConnector
[8].PortExternalConnectorType
= PcdGet8 (PcdSMBIOSPort9ExternalConnectorType
);
136 SMBIOSPortConnector
.SMBIOSPortConnector
[8].PortType
= PcdGet8 (PcdSMBIOSPort9Type
);
138 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort10InternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[9].PortInternalConnectorDesignator
);
139 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort10ExternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[9].PortExternalConnectorDesignator
);
140 SMBIOSPortConnector
.SMBIOSPortConnector
[9].PortInternalConnectorType
= PcdGet8 (PcdSMBIOSPort10InternalConnectorType
);
141 SMBIOSPortConnector
.SMBIOSPortConnector
[9].PortExternalConnectorType
= PcdGet8 (PcdSMBIOSPort10ExternalConnectorType
);
142 SMBIOSPortConnector
.SMBIOSPortConnector
[9].PortType
= PcdGet8 (PcdSMBIOSPort10Type
);
144 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort11InternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[10].PortInternalConnectorDesignator
);
145 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort11ExternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[10].PortExternalConnectorDesignator
);
146 SMBIOSPortConnector
.SMBIOSPortConnector
[10].PortInternalConnectorType
= PcdGet8 (PcdSMBIOSPort11InternalConnectorType
);
147 SMBIOSPortConnector
.SMBIOSPortConnector
[10].PortExternalConnectorType
= PcdGet8 (PcdSMBIOSPort11ExternalConnectorType
);
148 SMBIOSPortConnector
.SMBIOSPortConnector
[10].PortType
= PcdGet8 (PcdSMBIOSPort11Type
);
150 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort12InternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[11].PortInternalConnectorDesignator
);
151 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort12ExternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[11].PortExternalConnectorDesignator
);
152 SMBIOSPortConnector
.SMBIOSPortConnector
[11].PortInternalConnectorType
= PcdGet8 (PcdSMBIOSPort12InternalConnectorType
);
153 SMBIOSPortConnector
.SMBIOSPortConnector
[11].PortExternalConnectorType
= PcdGet8 (PcdSMBIOSPort12ExternalConnectorType
);
154 SMBIOSPortConnector
.SMBIOSPortConnector
[11].PortType
= PcdGet8 (PcdSMBIOSPort12Type
);
156 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort13InternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[12].PortInternalConnectorDesignator
);
157 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort13ExternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[12].PortExternalConnectorDesignator
);
158 SMBIOSPortConnector
.SMBIOSPortConnector
[12].PortInternalConnectorType
= PcdGet8 (PcdSMBIOSPort13InternalConnectorType
);
159 SMBIOSPortConnector
.SMBIOSPortConnector
[12].PortExternalConnectorType
= PcdGet8 (PcdSMBIOSPort13ExternalConnectorType
);
160 SMBIOSPortConnector
.SMBIOSPortConnector
[12].PortType
= PcdGet8 (PcdSMBIOSPort13Type
);
162 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort14InternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[13].PortInternalConnectorDesignator
);
163 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSPort14ExternalConnectorDesignator
), SMBIOSPortConnector
.SMBIOSPortConnector
[13].PortExternalConnectorDesignator
);
164 SMBIOSPortConnector
.SMBIOSPortConnector
[13].PortInternalConnectorType
= PcdGet8 (PcdSMBIOSPort14InternalConnectorType
);
165 SMBIOSPortConnector
.SMBIOSPortConnector
[13].PortExternalConnectorType
= PcdGet8 (PcdSMBIOSPort14ExternalConnectorType
);
166 SMBIOSPortConnector
.SMBIOSPortConnector
[13].PortType
= PcdGet8 (PcdSMBIOSPort14Type
);
169 This function makes boot time changes to the contents of the
170 MiscPortConnectorInformation (Type 8).
172 @param RecordData Pointer to copy of RecordData from the Data Table.
174 @retval EFI_SUCCESS All parameters were valid.
175 @retval EFI_UNSUPPORTED Unexpected RecordType value.
176 @retval EFI_INVALID_PARAMETER Invalid parameter was found.
179 MISC_SMBIOS_TABLE_FUNCTION(MiscPortInternalConnectorDesignator
)
181 CHAR8
*OptionalStrStart
;
182 UINTN InternalRefStrLen
;
183 UINTN ExternalRefStrLen
;
184 EFI_STRING InternalRef
;
185 EFI_STRING ExternalRef
;
186 STRING_REF TokenForInternal
;
187 STRING_REF TokenForExternal
;
188 STRING_REF TokenToUpdate
;
193 SMBIOS_TABLE_TYPE8
*SmbiosRecord
;
194 EFI_SMBIOS_HANDLE SmbiosHandle
;
195 EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR
*ForType8InputData
;
198 ForType8InputData
= (EFI_MISC_PORT_INTERNAL_CONNECTOR_DESIGNATOR
*)RecordData
;
200 // First check for invalid parameters.
202 if (RecordData
== NULL
) {
203 return EFI_INVALID_PARAMETER
;
206 TokenForInternal
= 0;
207 TokenForExternal
= 0;
212 if (!PcdMiscPortIsInit
) {
213 GetMiscPortConfigFromPcd ();
214 PcdMiscPortIsInit
= TRUE
;
217 for (Index
= 0; Index
< SMBIOS_PORT_CONNECTOR_MAX_NUM
; Index
++) {
218 if (ForType8InputData
->PortInternalConnectorDesignator
== (mMiscConnectorArray
[Index
])->PortInternalConnectorDesignator
) {
219 //DEBUG ((EFI_D_ERROR, "Found Port Connector Data %d : ", Index));
223 if (Index
>= SMBIOSPortConnector
.SMBIOSConnectorNumber
) {
227 if (Index
>= SMBIOS_PORT_CONNECTOR_MAX_NUM
) {
228 return EFI_INVALID_PARAMETER
;
231 InternalRef
= SMBIOSPortConnector
.SMBIOSPortConnector
[Index
].PortInternalConnectorDesignator
;
232 if (StrLen (InternalRef
) > 0) {
233 TokenToUpdate
= STRING_TOKEN ((mMiscConnectorArray
[Index
])->PortInternalConnectorDesignator
);
234 HiiSetString (mHiiHandle
, TokenToUpdate
, InternalRef
, NULL
);
236 ExternalRef
= SMBIOSPortConnector
.SMBIOSPortConnector
[Index
].PortExternalConnectorDesignator
;
237 if (StrLen (ExternalRef
) > 0) {
238 TokenToUpdate
= STRING_TOKEN ((mMiscConnectorArray
[Index
])->PortExternalConnectorDesignator
);
239 HiiSetString (mHiiHandle
, TokenToUpdate
, ExternalRef
, NULL
);
241 TokenForInternal
= STRING_TOKEN ((mMiscConnectorArray
[Index
])->PortInternalConnectorDesignator
);
242 TokenForExternal
= STRING_TOKEN ((mMiscConnectorArray
[Index
])->PortExternalConnectorDesignator
);
243 InternalType
= SMBIOSPortConnector
.SMBIOSPortConnector
[Index
].PortInternalConnectorType
;
244 ExternalType
= SMBIOSPortConnector
.SMBIOSPortConnector
[Index
].PortExternalConnectorType
;
245 PortType
= SMBIOSPortConnector
.SMBIOSPortConnector
[Index
].PortType
;
247 InternalRef
= HiiGetPackageString(&gEfiCallerIdGuid
, TokenForInternal
, NULL
);
248 InternalRefStrLen
= StrLen(InternalRef
);
249 if (InternalRefStrLen
> SMBIOS_STRING_MAX_LENGTH
) {
250 return EFI_UNSUPPORTED
;
253 ExternalRef
= HiiGetPackageString(&gEfiCallerIdGuid
, TokenForExternal
, NULL
);
254 ExternalRefStrLen
= StrLen(ExternalRef
);
255 if (ExternalRefStrLen
> SMBIOS_STRING_MAX_LENGTH
) {
256 return EFI_UNSUPPORTED
;
259 // Two zeros following the last string.
261 SmbiosRecord
= AllocatePool(sizeof (SMBIOS_TABLE_TYPE8
) + InternalRefStrLen
+ 1 + ExternalRefStrLen
+ 1 + 1);
262 ZeroMem(SmbiosRecord
, sizeof (SMBIOS_TABLE_TYPE8
) + InternalRefStrLen
+ 1 + ExternalRefStrLen
+ 1 + 1);
264 SmbiosRecord
->Hdr
.Type
= EFI_SMBIOS_TYPE_PORT_CONNECTOR_INFORMATION
;
265 SmbiosRecord
->Hdr
.Length
= sizeof (SMBIOS_TABLE_TYPE8
);
267 // Make handle chosen by smbios protocol.add automatically.
269 SmbiosRecord
->Hdr
.Handle
= 0;
270 SmbiosRecord
->InternalReferenceDesignator
= 1;
271 SmbiosRecord
->InternalConnectorType
= InternalType
;
272 SmbiosRecord
->ExternalReferenceDesignator
= 2;
273 SmbiosRecord
->ExternalConnectorType
= ExternalType
;
274 SmbiosRecord
->PortType
= PortType
;
276 OptionalStrStart
= (CHAR8
*)(SmbiosRecord
+ 1);
277 UnicodeStrToAsciiStr(InternalRef
, OptionalStrStart
);
278 UnicodeStrToAsciiStr(ExternalRef
, OptionalStrStart
+ InternalRefStrLen
+ 1);
281 // Now we have got the full smbios record, call smbios protocol to add this record.
283 SmbiosHandle
= SMBIOS_HANDLE_PI_RESERVED
;
284 Status
= Smbios
-> Add(
288 (EFI_SMBIOS_TABLE_HEADER
*) SmbiosRecord
290 FreePool(SmbiosRecord
);