2 BIOS system slot designator information boot time changes.
5 Copyright (c) 2013-2015 Intel Corporation.
7 This program and the accompanying materials
8 are licensed and made available under the terms and conditions of the BSD License
9 which accompanies this distribution. The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16 MiscSystemSlotDesignatorFunction.c
21 #include "CommonHeader.h"
23 #include "SmbiosMisc.h"
29 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION
, MiscSystemSlot1
);
30 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION
, MiscSystemSlot2
);
31 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION
, MiscSystemSlot3
);
32 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION
, MiscSystemSlot4
);
33 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION
, MiscSystemSlot5
);
34 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION
, MiscSystemSlot6
);
35 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION
, MiscSystemSlot7
);
36 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION
, MiscSystemSlot8
);
37 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION
, MiscSystemSlot9
);
38 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION
, MiscSystemSlot10
);
39 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION
, MiscSystemSlot11
);
40 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION
, MiscSystemSlot12
);
41 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION
, MiscSystemSlot13
);
42 MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION
, MiscSystemSlot14
);
44 EFI_MISC_SYSTEM_SLOT_DESIGNATION
*mMiscSlotArray
[SMBIOS_SYSTEM_SLOT_MAX_NUM
] =
46 MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot1
),
47 MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot2
),
48 MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot3
),
49 MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot4
),
50 MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot5
),
51 MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot6
),
52 MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot7
),
53 MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot8
),
54 MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot9
),
55 MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot10
),
56 MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot11
),
57 MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot12
),
58 MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot13
),
59 MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot14
),
62 BOOLEAN PcdMiscSlotIsInit
= FALSE
;
63 SMBIOS_SLOT_COFNIG SMBIOSlotConfig
= {0};
66 Get Misc Slot Configuration information from PCD
67 @param SMBIOSPortConnector Pointer to SMBIOSPortConnector table.
72 GetMiscSLotConfigFromPcd ()
77 SMBIOSlotConfig
.SMBIOSSystemSlotNumber
= PcdGet8 (PcdSMBIOSSystemSlotNumber
);
78 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSSystemSlot1Designation
), SMBIOSlotConfig
.SMBIOSSystemSlot
[0].SlotDesignation
);
79 SMBIOSlotConfig
.SMBIOSSystemSlot
[0].SlotType
= PcdGet8(PcdSMBIOSSystemSlot1Type
);
80 SMBIOSlotConfig
.SMBIOSSystemSlot
[0].SlotDataBusWidth
= PcdGet8(PcdSMBIOSSystemSlot1DataBusWidth
);
81 SMBIOSlotConfig
.SMBIOSSystemSlot
[0].SlotUsage
= PcdGet8(PcdSMBIOSSystemSlot1Usage
);
82 SMBIOSlotConfig
.SMBIOSSystemSlot
[0].SlotLength
= PcdGet8(PcdSMBIOSSystemSlot1Length
);
83 SMBIOSlotConfig
.SMBIOSSystemSlot
[0].SlotId
= PcdGet16(PcdSMBIOSSystemSlot1Id
);
84 SMBIOSlotConfig
.SMBIOSSystemSlot
[0].SlotCharacteristics
= PcdGet32(PcdSMBIOSSystemSlot1Characteristics
);
86 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSSystemSlot2Designation
), SMBIOSlotConfig
.SMBIOSSystemSlot
[1].SlotDesignation
);
87 SMBIOSlotConfig
.SMBIOSSystemSlot
[1].SlotType
= PcdGet8(PcdSMBIOSSystemSlot2Type
);
88 SMBIOSlotConfig
.SMBIOSSystemSlot
[1].SlotDataBusWidth
= PcdGet8(PcdSMBIOSSystemSlot2DataBusWidth
);
89 SMBIOSlotConfig
.SMBIOSSystemSlot
[1].SlotUsage
= PcdGet8(PcdSMBIOSSystemSlot2Usage
);
90 SMBIOSlotConfig
.SMBIOSSystemSlot
[1].SlotLength
= PcdGet8(PcdSMBIOSSystemSlot2Length
);
91 SMBIOSlotConfig
.SMBIOSSystemSlot
[1].SlotId
= PcdGet16(PcdSMBIOSSystemSlot2Id
);
92 SMBIOSlotConfig
.SMBIOSSystemSlot
[1].SlotCharacteristics
= PcdGet32(PcdSMBIOSSystemSlot2Characteristics
);
94 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSSystemSlot3Designation
), SMBIOSlotConfig
.SMBIOSSystemSlot
[2].SlotDesignation
);
95 SMBIOSlotConfig
.SMBIOSSystemSlot
[2].SlotType
= PcdGet8(PcdSMBIOSSystemSlot3Type
);
96 SMBIOSlotConfig
.SMBIOSSystemSlot
[2].SlotDataBusWidth
= PcdGet8(PcdSMBIOSSystemSlot3DataBusWidth
);
97 SMBIOSlotConfig
.SMBIOSSystemSlot
[2].SlotUsage
= PcdGet8(PcdSMBIOSSystemSlot3Usage
);
98 SMBIOSlotConfig
.SMBIOSSystemSlot
[2].SlotLength
= PcdGet8(PcdSMBIOSSystemSlot3Length
);
99 SMBIOSlotConfig
.SMBIOSSystemSlot
[2].SlotId
= PcdGet16(PcdSMBIOSSystemSlot3Id
);
100 SMBIOSlotConfig
.SMBIOSSystemSlot
[2].SlotCharacteristics
= PcdGet32(PcdSMBIOSSystemSlot3Characteristics
);
102 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSSystemSlot4Designation
), SMBIOSlotConfig
.SMBIOSSystemSlot
[3].SlotDesignation
);
103 SMBIOSlotConfig
.SMBIOSSystemSlot
[3].SlotType
= PcdGet8(PcdSMBIOSSystemSlot4Type
);
104 SMBIOSlotConfig
.SMBIOSSystemSlot
[3].SlotDataBusWidth
= PcdGet8(PcdSMBIOSSystemSlot4DataBusWidth
);
105 SMBIOSlotConfig
.SMBIOSSystemSlot
[3].SlotUsage
= PcdGet8(PcdSMBIOSSystemSlot4Usage
);
106 SMBIOSlotConfig
.SMBIOSSystemSlot
[3].SlotLength
= PcdGet8(PcdSMBIOSSystemSlot4Length
);
107 SMBIOSlotConfig
.SMBIOSSystemSlot
[3].SlotId
= PcdGet16(PcdSMBIOSSystemSlot4Id
);
108 SMBIOSlotConfig
.SMBIOSSystemSlot
[3].SlotCharacteristics
= PcdGet32(PcdSMBIOSSystemSlot4Characteristics
);
110 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSSystemSlot5Designation
), SMBIOSlotConfig
.SMBIOSSystemSlot
[4].SlotDesignation
);
111 SMBIOSlotConfig
.SMBIOSSystemSlot
[4].SlotType
= PcdGet8(PcdSMBIOSSystemSlot5Type
);
112 SMBIOSlotConfig
.SMBIOSSystemSlot
[4].SlotDataBusWidth
= PcdGet8(PcdSMBIOSSystemSlot5DataBusWidth
);
113 SMBIOSlotConfig
.SMBIOSSystemSlot
[4].SlotUsage
= PcdGet8(PcdSMBIOSSystemSlot5Usage
);
114 SMBIOSlotConfig
.SMBIOSSystemSlot
[4].SlotLength
= PcdGet8(PcdSMBIOSSystemSlot5Length
);
115 SMBIOSlotConfig
.SMBIOSSystemSlot
[4].SlotId
= PcdGet16(PcdSMBIOSSystemSlot5Id
);
116 SMBIOSlotConfig
.SMBIOSSystemSlot
[4].SlotCharacteristics
= PcdGet32(PcdSMBIOSSystemSlot5Characteristics
);
118 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSSystemSlot6Designation
), SMBIOSlotConfig
.SMBIOSSystemSlot
[5].SlotDesignation
);
119 SMBIOSlotConfig
.SMBIOSSystemSlot
[5].SlotType
= PcdGet8(PcdSMBIOSSystemSlot6Type
);
120 SMBIOSlotConfig
.SMBIOSSystemSlot
[5].SlotDataBusWidth
= PcdGet8(PcdSMBIOSSystemSlot6DataBusWidth
);
121 SMBIOSlotConfig
.SMBIOSSystemSlot
[5].SlotUsage
= PcdGet8(PcdSMBIOSSystemSlot6Usage
);
122 SMBIOSlotConfig
.SMBIOSSystemSlot
[5].SlotLength
= PcdGet8(PcdSMBIOSSystemSlot6Length
);
123 SMBIOSlotConfig
.SMBIOSSystemSlot
[5].SlotId
= PcdGet16(PcdSMBIOSSystemSlot6Id
);
124 SMBIOSlotConfig
.SMBIOSSystemSlot
[5].SlotCharacteristics
= PcdGet32(PcdSMBIOSSystemSlot6Characteristics
);
126 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSSystemSlot7Designation
), SMBIOSlotConfig
.SMBIOSSystemSlot
[6].SlotDesignation
);
127 SMBIOSlotConfig
.SMBIOSSystemSlot
[6].SlotType
= PcdGet8(PcdSMBIOSSystemSlot7Type
);
128 SMBIOSlotConfig
.SMBIOSSystemSlot
[6].SlotDataBusWidth
= PcdGet8(PcdSMBIOSSystemSlot7DataBusWidth
);
129 SMBIOSlotConfig
.SMBIOSSystemSlot
[6].SlotUsage
= PcdGet8(PcdSMBIOSSystemSlot7Usage
);
130 SMBIOSlotConfig
.SMBIOSSystemSlot
[6].SlotLength
= PcdGet8(PcdSMBIOSSystemSlot7Length
);
131 SMBIOSlotConfig
.SMBIOSSystemSlot
[6].SlotId
= PcdGet16(PcdSMBIOSSystemSlot7Id
);
132 SMBIOSlotConfig
.SMBIOSSystemSlot
[6].SlotCharacteristics
= PcdGet32(PcdSMBIOSSystemSlot7Characteristics
);
134 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSSystemSlot8Designation
), SMBIOSlotConfig
.SMBIOSSystemSlot
[7].SlotDesignation
);
135 SMBIOSlotConfig
.SMBIOSSystemSlot
[7].SlotType
= PcdGet8(PcdSMBIOSSystemSlot8Type
);
136 SMBIOSlotConfig
.SMBIOSSystemSlot
[7].SlotDataBusWidth
= PcdGet8(PcdSMBIOSSystemSlot8DataBusWidth
);
137 SMBIOSlotConfig
.SMBIOSSystemSlot
[7].SlotUsage
= PcdGet8(PcdSMBIOSSystemSlot8Usage
);
138 SMBIOSlotConfig
.SMBIOSSystemSlot
[7].SlotLength
= PcdGet8(PcdSMBIOSSystemSlot8Length
);
139 SMBIOSlotConfig
.SMBIOSSystemSlot
[7].SlotId
= PcdGet16(PcdSMBIOSSystemSlot8Id
);
140 SMBIOSlotConfig
.SMBIOSSystemSlot
[7].SlotCharacteristics
= PcdGet32(PcdSMBIOSSystemSlot8Characteristics
);
142 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSSystemSlot9Designation
), SMBIOSlotConfig
.SMBIOSSystemSlot
[8].SlotDesignation
);
143 SMBIOSlotConfig
.SMBIOSSystemSlot
[8].SlotType
= PcdGet8(PcdSMBIOSSystemSlot9Type
);
144 SMBIOSlotConfig
.SMBIOSSystemSlot
[8].SlotDataBusWidth
= PcdGet8(PcdSMBIOSSystemSlot9DataBusWidth
);
145 SMBIOSlotConfig
.SMBIOSSystemSlot
[8].SlotUsage
= PcdGet8(PcdSMBIOSSystemSlot9Usage
);
146 SMBIOSlotConfig
.SMBIOSSystemSlot
[8].SlotLength
= PcdGet8(PcdSMBIOSSystemSlot9Length
);
147 SMBIOSlotConfig
.SMBIOSSystemSlot
[8].SlotId
= PcdGet16(PcdSMBIOSSystemSlot9Id
);
148 SMBIOSlotConfig
.SMBIOSSystemSlot
[8].SlotCharacteristics
= PcdGet32(PcdSMBIOSSystemSlot9Characteristics
);
150 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSSystemSlot10Designation
), SMBIOSlotConfig
.SMBIOSSystemSlot
[9].SlotDesignation
);
151 SMBIOSlotConfig
.SMBIOSSystemSlot
[9].SlotType
= PcdGet8(PcdSMBIOSSystemSlot10Type
);
152 SMBIOSlotConfig
.SMBIOSSystemSlot
[9].SlotDataBusWidth
= PcdGet8(PcdSMBIOSSystemSlot10DataBusWidth
);
153 SMBIOSlotConfig
.SMBIOSSystemSlot
[9].SlotUsage
= PcdGet8(PcdSMBIOSSystemSlot10Usage
);
154 SMBIOSlotConfig
.SMBIOSSystemSlot
[9].SlotLength
= PcdGet8(PcdSMBIOSSystemSlot10Length
);
155 SMBIOSlotConfig
.SMBIOSSystemSlot
[9].SlotId
= PcdGet16(PcdSMBIOSSystemSlot10Id
);
156 SMBIOSlotConfig
.SMBIOSSystemSlot
[9].SlotCharacteristics
= PcdGet32(PcdSMBIOSSystemSlot10Characteristics
);
158 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSSystemSlot11Designation
), SMBIOSlotConfig
.SMBIOSSystemSlot
[10].SlotDesignation
);
159 SMBIOSlotConfig
.SMBIOSSystemSlot
[10].SlotType
= PcdGet8(PcdSMBIOSSystemSlot11Type
);
160 SMBIOSlotConfig
.SMBIOSSystemSlot
[10].SlotDataBusWidth
= PcdGet8(PcdSMBIOSSystemSlot11DataBusWidth
);
161 SMBIOSlotConfig
.SMBIOSSystemSlot
[10].SlotUsage
= PcdGet8(PcdSMBIOSSystemSlot11Usage
);
162 SMBIOSlotConfig
.SMBIOSSystemSlot
[10].SlotLength
= PcdGet8(PcdSMBIOSSystemSlot11Length
);
163 SMBIOSlotConfig
.SMBIOSSystemSlot
[10].SlotId
= PcdGet16(PcdSMBIOSSystemSlot11Id
);
164 SMBIOSlotConfig
.SMBIOSSystemSlot
[10].SlotCharacteristics
= PcdGet32(PcdSMBIOSSystemSlot11Characteristics
);
166 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSSystemSlot12Designation
), SMBIOSlotConfig
.SMBIOSSystemSlot
[11].SlotDesignation
);
167 SMBIOSlotConfig
.SMBIOSSystemSlot
[11].SlotType
= PcdGet8(PcdSMBIOSSystemSlot12Type
);
168 SMBIOSlotConfig
.SMBIOSSystemSlot
[11].SlotDataBusWidth
= PcdGet8(PcdSMBIOSSystemSlot12DataBusWidth
);
169 SMBIOSlotConfig
.SMBIOSSystemSlot
[11].SlotUsage
= PcdGet8(PcdSMBIOSSystemSlot12Usage
);
170 SMBIOSlotConfig
.SMBIOSSystemSlot
[11].SlotLength
= PcdGet8(PcdSMBIOSSystemSlot12Length
);
171 SMBIOSlotConfig
.SMBIOSSystemSlot
[11].SlotId
= PcdGet16(PcdSMBIOSSystemSlot12Id
);
172 SMBIOSlotConfig
.SMBIOSSystemSlot
[11].SlotCharacteristics
= PcdGet32(PcdSMBIOSSystemSlot12Characteristics
);
174 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSSystemSlot13Designation
), SMBIOSlotConfig
.SMBIOSSystemSlot
[12].SlotDesignation
);
175 SMBIOSlotConfig
.SMBIOSSystemSlot
[12].SlotType
= PcdGet8(PcdSMBIOSSystemSlot13Type
);
176 SMBIOSlotConfig
.SMBIOSSystemSlot
[12].SlotDataBusWidth
= PcdGet8(PcdSMBIOSSystemSlot13DataBusWidth
);
177 SMBIOSlotConfig
.SMBIOSSystemSlot
[12].SlotUsage
= PcdGet8(PcdSMBIOSSystemSlot13Usage
);
178 SMBIOSlotConfig
.SMBIOSSystemSlot
[12].SlotLength
= PcdGet8(PcdSMBIOSSystemSlot13Length
);
179 SMBIOSlotConfig
.SMBIOSSystemSlot
[12].SlotId
= PcdGet16(PcdSMBIOSSystemSlot13Id
);
180 SMBIOSlotConfig
.SMBIOSSystemSlot
[12].SlotCharacteristics
= PcdGet32(PcdSMBIOSSystemSlot13Characteristics
);
182 AsciiStrToUnicodeStr ((CHAR8
*) PcdGetPtr(PcdSMBIOSSystemSlot14Designation
), SMBIOSlotConfig
.SMBIOSSystemSlot
[13].SlotDesignation
);
183 SMBIOSlotConfig
.SMBIOSSystemSlot
[13].SlotType
= PcdGet8(PcdSMBIOSSystemSlot14Type
);
184 SMBIOSlotConfig
.SMBIOSSystemSlot
[13].SlotDataBusWidth
= PcdGet8(PcdSMBIOSSystemSlot14DataBusWidth
);
185 SMBIOSlotConfig
.SMBIOSSystemSlot
[13].SlotUsage
= PcdGet8(PcdSMBIOSSystemSlot14Usage
);
186 SMBIOSlotConfig
.SMBIOSSystemSlot
[13].SlotLength
= PcdGet8(PcdSMBIOSSystemSlot14Length
);
187 SMBIOSlotConfig
.SMBIOSSystemSlot
[13].SlotId
= PcdGet16(PcdSMBIOSSystemSlot14Id
);
188 SMBIOSlotConfig
.SMBIOSSystemSlot
[13].SlotCharacteristics
= PcdGet32(PcdSMBIOSSystemSlot14Characteristics
);
191 This function makes boot time changes to the contents of the
192 MiscSystemSlotDesignator structure (Type 9).
194 @param RecordData Pointer to copy of RecordData from the Data Table.
196 @retval EFI_SUCCESS All parameters were valid.
197 @retval EFI_UNSUPPORTED Unexpected RecordType value.
198 @retval EFI_INVALID_PARAMETER Invalid parameter was found.
201 MISC_SMBIOS_TABLE_FUNCTION(MiscSystemSlotDesignator
)
203 CHAR8
*OptionalStrStart
;
204 UINTN SlotDesignationStrLen
;
206 EFI_STRING SlotDesignation
;
207 STRING_REF TokenToUpdate
;
208 STRING_REF TokenToGet
;
209 SMBIOS_TABLE_TYPE9
*SmbiosRecord
;
210 EFI_SMBIOS_HANDLE SmbiosHandle
;
211 EFI_MISC_SYSTEM_SLOT_DESIGNATION
* ForType9InputData
;
214 ForType9InputData
= (EFI_MISC_SYSTEM_SLOT_DESIGNATION
*)RecordData
;
219 // First check for invalid parameters.
221 if (RecordData
== NULL
) {
222 return EFI_INVALID_PARAMETER
;
225 if (!PcdMiscSlotIsInit
) {
226 GetMiscSLotConfigFromPcd ();
227 PcdMiscSlotIsInit
= TRUE
;
230 for (Index
= 0; Index
< SMBIOS_SYSTEM_SLOT_MAX_NUM
; Index
++) {
231 if (ForType9InputData
->SlotDesignation
== (mMiscSlotArray
[Index
])->SlotDesignation
) {
232 //DEBUG ((EFI_D_ERROR, "Found slot Data %d : ", Index));
236 if (Index
>= SMBIOSlotConfig
.SMBIOSSystemSlotNumber
) {
240 if (Index
>= SMBIOS_SYSTEM_SLOT_MAX_NUM
) {
241 return EFI_INVALID_PARAMETER
;
244 SlotDesignation
= SMBIOSlotConfig
.SMBIOSSystemSlot
[Index
].SlotDesignation
;
245 TokenToGet
= STRING_TOKEN ((mMiscSlotArray
[Index
])->SlotDesignation
);
247 if (StrLen (SlotDesignation
) > 0) {
248 TokenToUpdate
= STRING_TOKEN ((mMiscSlotArray
[Index
])->SlotDesignation
);
249 HiiSetString (mHiiHandle
, TokenToUpdate
, SlotDesignation
, NULL
);
252 SlotDesignation
= HiiGetPackageString(&gEfiCallerIdGuid
, TokenToGet
, NULL
);
253 SlotDesignationStrLen
= StrLen(SlotDesignation
);
254 if (SlotDesignationStrLen
> SMBIOS_STRING_MAX_LENGTH
) {
255 return EFI_UNSUPPORTED
;
258 // Two zeros following the last string.
260 SmbiosRecord
= AllocatePool(sizeof (SMBIOS_TABLE_TYPE9
) + SlotDesignationStrLen
+ 1 + 1);
261 ZeroMem(SmbiosRecord
, sizeof (SMBIOS_TABLE_TYPE9
) +SlotDesignationStrLen
+ 1 + 1);
263 SmbiosRecord
->Hdr
.Type
= EFI_SMBIOS_TYPE_SYSTEM_SLOTS
;
264 SmbiosRecord
->Hdr
.Length
= sizeof (SMBIOS_TABLE_TYPE9
);
265 SmbiosRecord
->Hdr
.Handle
= 0;
266 SmbiosRecord
->SlotDesignation
= 1;
267 SmbiosRecord
->SlotType
= SMBIOSlotConfig
.SMBIOSSystemSlot
[Index
].SlotType
;
268 SmbiosRecord
->SlotDataBusWidth
= SMBIOSlotConfig
.SMBIOSSystemSlot
[Index
].SlotDataBusWidth
;
269 SmbiosRecord
->CurrentUsage
= SMBIOSlotConfig
.SMBIOSSystemSlot
[Index
].SlotUsage
;
270 SmbiosRecord
->SlotLength
= SMBIOSlotConfig
.SMBIOSSystemSlot
[Index
].SlotLength
;
271 SmbiosRecord
->SlotID
= SMBIOSlotConfig
.SMBIOSSystemSlot
[Index
].SlotId
;
272 *(UINT16
*)&SmbiosRecord
->SlotCharacteristics1
= (UINT16
)(SMBIOSlotConfig
.SMBIOSSystemSlot
[Index
].SlotCharacteristics
);
275 // Slot Characteristics
277 OptionalStrStart
= (CHAR8
*)(SmbiosRecord
+ 1);
278 UnicodeStrToAsciiStr(SlotDesignation
, OptionalStrStart
);
280 // Now we have got the full smbios record, call smbios protocol to add this record.
282 SmbiosHandle
= SMBIOS_HANDLE_PI_RESERVED
;
283 Status
= Smbios
-> Add(
287 (EFI_SMBIOS_TABLE_HEADER
*) SmbiosRecord
289 FreePool(SmbiosRecord
);