]>
Commit | Line | Data |
---|---|---|
b303605e MK |
1 | /** @file\r |
2 | BIOS system slot designator information boot time changes.\r | |
3 | SMBIOS type 9.\r | |
4 | \r | |
5 | Copyright (c) 2013-2015 Intel Corporation.\r | |
6 | \r | |
0eb3de2e | 7 | SPDX-License-Identifier: BSD-2-Clause-Patent\r |
b303605e MK |
8 | \r |
9 | \r | |
10 | MiscSystemSlotDesignatorFunction.c\r | |
11 | \r | |
12 | **/\r | |
13 | \r | |
14 | \r | |
15 | #include "CommonHeader.h"\r | |
16 | \r | |
17 | #include "SmbiosMisc.h"\r | |
18 | \r | |
19 | //\r | |
20 | //\r | |
21 | //\r | |
22 | \r | |
23 | MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION, MiscSystemSlot1);\r | |
24 | MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION, MiscSystemSlot2);\r | |
25 | MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION, MiscSystemSlot3);\r | |
26 | MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION, MiscSystemSlot4);\r | |
27 | MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION, MiscSystemSlot5);\r | |
28 | MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION, MiscSystemSlot6);\r | |
29 | MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION, MiscSystemSlot7);\r | |
30 | MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION, MiscSystemSlot8);\r | |
31 | MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION, MiscSystemSlot9);\r | |
32 | MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION, MiscSystemSlot10);\r | |
33 | MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION, MiscSystemSlot11);\r | |
34 | MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION, MiscSystemSlot12);\r | |
35 | MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION, MiscSystemSlot13);\r | |
36 | MISC_SMBIOS_DATA_TABLE_EXTERNS (EFI_MISC_SYSTEM_SLOT_DESIGNATION, MiscSystemSlot14);\r | |
37 | \r | |
38 | EFI_MISC_SYSTEM_SLOT_DESIGNATION *mMiscSlotArray[SMBIOS_SYSTEM_SLOT_MAX_NUM] =\r | |
39 | {\r | |
40 | MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot1),\r | |
41 | MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot2),\r | |
42 | MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot3),\r | |
43 | MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot4),\r | |
44 | MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot5),\r | |
45 | MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot6),\r | |
46 | MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot7),\r | |
47 | MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot8),\r | |
48 | MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot9),\r | |
49 | MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot10),\r | |
50 | MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot11),\r | |
51 | MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot12),\r | |
52 | MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot13),\r | |
53 | MISC_SMBIOS_DATA_TABLE_POINTER (MiscSystemSlot14),\r | |
54 | };\r | |
55 | \r | |
56 | BOOLEAN PcdMiscSlotIsInit = FALSE;\r | |
57 | SMBIOS_SLOT_COFNIG SMBIOSlotConfig = {0};\r | |
58 | \r | |
59 | /**\r | |
60 | Get Misc Slot Configuration information from PCD\r | |
61 | @param SMBIOSPortConnector Pointer to SMBIOSPortConnector table.\r | |
62 | \r | |
63 | **/\r | |
64 | \r | |
65 | VOID\r | |
66 | GetMiscSLotConfigFromPcd ()\r | |
67 | {\r | |
68 | //\r | |
69 | // Type 9\r | |
70 | //\r | |
71 | SMBIOSlotConfig.SMBIOSSystemSlotNumber = PcdGet8 (PcdSMBIOSSystemSlotNumber);\r | |
72 | AsciiStrToUnicodeStr ((CHAR8 *) PcdGetPtr(PcdSMBIOSSystemSlot1Designation), SMBIOSlotConfig.SMBIOSSystemSlot[0].SlotDesignation);\r | |
73 | SMBIOSlotConfig.SMBIOSSystemSlot[0].SlotType = PcdGet8(PcdSMBIOSSystemSlot1Type);\r | |
74 | SMBIOSlotConfig.SMBIOSSystemSlot[0].SlotDataBusWidth = PcdGet8(PcdSMBIOSSystemSlot1DataBusWidth);\r | |
75 | SMBIOSlotConfig.SMBIOSSystemSlot[0].SlotUsage = PcdGet8(PcdSMBIOSSystemSlot1Usage);\r | |
76 | SMBIOSlotConfig.SMBIOSSystemSlot[0].SlotLength = PcdGet8(PcdSMBIOSSystemSlot1Length);\r | |
77 | SMBIOSlotConfig.SMBIOSSystemSlot[0].SlotId = PcdGet16(PcdSMBIOSSystemSlot1Id);\r | |
78 | SMBIOSlotConfig.SMBIOSSystemSlot[0].SlotCharacteristics = PcdGet32(PcdSMBIOSSystemSlot1Characteristics);\r | |
79 | \r | |
80 | AsciiStrToUnicodeStr ((CHAR8 *) PcdGetPtr(PcdSMBIOSSystemSlot2Designation), SMBIOSlotConfig.SMBIOSSystemSlot[1].SlotDesignation);\r | |
81 | SMBIOSlotConfig.SMBIOSSystemSlot[1].SlotType = PcdGet8(PcdSMBIOSSystemSlot2Type);\r | |
82 | SMBIOSlotConfig.SMBIOSSystemSlot[1].SlotDataBusWidth = PcdGet8(PcdSMBIOSSystemSlot2DataBusWidth);\r | |
83 | SMBIOSlotConfig.SMBIOSSystemSlot[1].SlotUsage = PcdGet8(PcdSMBIOSSystemSlot2Usage);\r | |
84 | SMBIOSlotConfig.SMBIOSSystemSlot[1].SlotLength = PcdGet8(PcdSMBIOSSystemSlot2Length);\r | |
85 | SMBIOSlotConfig.SMBIOSSystemSlot[1].SlotId = PcdGet16(PcdSMBIOSSystemSlot2Id);\r | |
86 | SMBIOSlotConfig.SMBIOSSystemSlot[1].SlotCharacteristics = PcdGet32(PcdSMBIOSSystemSlot2Characteristics);\r | |
87 | \r | |
88 | AsciiStrToUnicodeStr ((CHAR8 *) PcdGetPtr(PcdSMBIOSSystemSlot3Designation), SMBIOSlotConfig.SMBIOSSystemSlot[2].SlotDesignation);\r | |
89 | SMBIOSlotConfig.SMBIOSSystemSlot[2].SlotType = PcdGet8(PcdSMBIOSSystemSlot3Type);\r | |
90 | SMBIOSlotConfig.SMBIOSSystemSlot[2].SlotDataBusWidth = PcdGet8(PcdSMBIOSSystemSlot3DataBusWidth);\r | |
91 | SMBIOSlotConfig.SMBIOSSystemSlot[2].SlotUsage = PcdGet8(PcdSMBIOSSystemSlot3Usage);\r | |
92 | SMBIOSlotConfig.SMBIOSSystemSlot[2].SlotLength = PcdGet8(PcdSMBIOSSystemSlot3Length);\r | |
93 | SMBIOSlotConfig.SMBIOSSystemSlot[2].SlotId = PcdGet16(PcdSMBIOSSystemSlot3Id);\r | |
94 | SMBIOSlotConfig.SMBIOSSystemSlot[2].SlotCharacteristics = PcdGet32(PcdSMBIOSSystemSlot3Characteristics);\r | |
95 | \r | |
96 | AsciiStrToUnicodeStr ((CHAR8 *) PcdGetPtr(PcdSMBIOSSystemSlot4Designation), SMBIOSlotConfig.SMBIOSSystemSlot[3].SlotDesignation);\r | |
97 | SMBIOSlotConfig.SMBIOSSystemSlot[3].SlotType = PcdGet8(PcdSMBIOSSystemSlot4Type);\r | |
98 | SMBIOSlotConfig.SMBIOSSystemSlot[3].SlotDataBusWidth = PcdGet8(PcdSMBIOSSystemSlot4DataBusWidth);\r | |
99 | SMBIOSlotConfig.SMBIOSSystemSlot[3].SlotUsage = PcdGet8(PcdSMBIOSSystemSlot4Usage);\r | |
100 | SMBIOSlotConfig.SMBIOSSystemSlot[3].SlotLength = PcdGet8(PcdSMBIOSSystemSlot4Length);\r | |
101 | SMBIOSlotConfig.SMBIOSSystemSlot[3].SlotId = PcdGet16(PcdSMBIOSSystemSlot4Id);\r | |
102 | SMBIOSlotConfig.SMBIOSSystemSlot[3].SlotCharacteristics = PcdGet32(PcdSMBIOSSystemSlot4Characteristics);\r | |
103 | \r | |
104 | AsciiStrToUnicodeStr ((CHAR8 *) PcdGetPtr(PcdSMBIOSSystemSlot5Designation), SMBIOSlotConfig.SMBIOSSystemSlot[4].SlotDesignation);\r | |
105 | SMBIOSlotConfig.SMBIOSSystemSlot[4].SlotType = PcdGet8(PcdSMBIOSSystemSlot5Type);\r | |
106 | SMBIOSlotConfig.SMBIOSSystemSlot[4].SlotDataBusWidth = PcdGet8(PcdSMBIOSSystemSlot5DataBusWidth);\r | |
107 | SMBIOSlotConfig.SMBIOSSystemSlot[4].SlotUsage = PcdGet8(PcdSMBIOSSystemSlot5Usage);\r | |
108 | SMBIOSlotConfig.SMBIOSSystemSlot[4].SlotLength = PcdGet8(PcdSMBIOSSystemSlot5Length);\r | |
109 | SMBIOSlotConfig.SMBIOSSystemSlot[4].SlotId = PcdGet16(PcdSMBIOSSystemSlot5Id);\r | |
110 | SMBIOSlotConfig.SMBIOSSystemSlot[4].SlotCharacteristics = PcdGet32(PcdSMBIOSSystemSlot5Characteristics);\r | |
111 | \r | |
112 | AsciiStrToUnicodeStr ((CHAR8 *) PcdGetPtr(PcdSMBIOSSystemSlot6Designation), SMBIOSlotConfig.SMBIOSSystemSlot[5].SlotDesignation);\r | |
113 | SMBIOSlotConfig.SMBIOSSystemSlot[5].SlotType = PcdGet8(PcdSMBIOSSystemSlot6Type);\r | |
114 | SMBIOSlotConfig.SMBIOSSystemSlot[5].SlotDataBusWidth = PcdGet8(PcdSMBIOSSystemSlot6DataBusWidth);\r | |
115 | SMBIOSlotConfig.SMBIOSSystemSlot[5].SlotUsage = PcdGet8(PcdSMBIOSSystemSlot6Usage);\r | |
116 | SMBIOSlotConfig.SMBIOSSystemSlot[5].SlotLength = PcdGet8(PcdSMBIOSSystemSlot6Length);\r | |
117 | SMBIOSlotConfig.SMBIOSSystemSlot[5].SlotId = PcdGet16(PcdSMBIOSSystemSlot6Id);\r | |
118 | SMBIOSlotConfig.SMBIOSSystemSlot[5].SlotCharacteristics = PcdGet32(PcdSMBIOSSystemSlot6Characteristics);\r | |
119 | \r | |
120 | AsciiStrToUnicodeStr ((CHAR8 *) PcdGetPtr(PcdSMBIOSSystemSlot7Designation), SMBIOSlotConfig.SMBIOSSystemSlot[6].SlotDesignation);\r | |
121 | SMBIOSlotConfig.SMBIOSSystemSlot[6].SlotType = PcdGet8(PcdSMBIOSSystemSlot7Type);\r | |
122 | SMBIOSlotConfig.SMBIOSSystemSlot[6].SlotDataBusWidth = PcdGet8(PcdSMBIOSSystemSlot7DataBusWidth);\r | |
123 | SMBIOSlotConfig.SMBIOSSystemSlot[6].SlotUsage = PcdGet8(PcdSMBIOSSystemSlot7Usage);\r | |
124 | SMBIOSlotConfig.SMBIOSSystemSlot[6].SlotLength = PcdGet8(PcdSMBIOSSystemSlot7Length);\r | |
125 | SMBIOSlotConfig.SMBIOSSystemSlot[6].SlotId = PcdGet16(PcdSMBIOSSystemSlot7Id);\r | |
126 | SMBIOSlotConfig.SMBIOSSystemSlot[6].SlotCharacteristics = PcdGet32(PcdSMBIOSSystemSlot7Characteristics);\r | |
127 | \r | |
128 | AsciiStrToUnicodeStr ((CHAR8 *) PcdGetPtr(PcdSMBIOSSystemSlot8Designation), SMBIOSlotConfig.SMBIOSSystemSlot[7].SlotDesignation);\r | |
129 | SMBIOSlotConfig.SMBIOSSystemSlot[7].SlotType = PcdGet8(PcdSMBIOSSystemSlot8Type);\r | |
130 | SMBIOSlotConfig.SMBIOSSystemSlot[7].SlotDataBusWidth = PcdGet8(PcdSMBIOSSystemSlot8DataBusWidth);\r | |
131 | SMBIOSlotConfig.SMBIOSSystemSlot[7].SlotUsage = PcdGet8(PcdSMBIOSSystemSlot8Usage);\r | |
132 | SMBIOSlotConfig.SMBIOSSystemSlot[7].SlotLength = PcdGet8(PcdSMBIOSSystemSlot8Length);\r | |
133 | SMBIOSlotConfig.SMBIOSSystemSlot[7].SlotId = PcdGet16(PcdSMBIOSSystemSlot8Id);\r | |
134 | SMBIOSlotConfig.SMBIOSSystemSlot[7].SlotCharacteristics = PcdGet32(PcdSMBIOSSystemSlot8Characteristics);\r | |
135 | \r | |
136 | AsciiStrToUnicodeStr ((CHAR8 *) PcdGetPtr(PcdSMBIOSSystemSlot9Designation), SMBIOSlotConfig.SMBIOSSystemSlot[8].SlotDesignation);\r | |
137 | SMBIOSlotConfig.SMBIOSSystemSlot[8].SlotType = PcdGet8(PcdSMBIOSSystemSlot9Type);\r | |
138 | SMBIOSlotConfig.SMBIOSSystemSlot[8].SlotDataBusWidth = PcdGet8(PcdSMBIOSSystemSlot9DataBusWidth);\r | |
139 | SMBIOSlotConfig.SMBIOSSystemSlot[8].SlotUsage = PcdGet8(PcdSMBIOSSystemSlot9Usage);\r | |
140 | SMBIOSlotConfig.SMBIOSSystemSlot[8].SlotLength = PcdGet8(PcdSMBIOSSystemSlot9Length);\r | |
141 | SMBIOSlotConfig.SMBIOSSystemSlot[8].SlotId = PcdGet16(PcdSMBIOSSystemSlot9Id);\r | |
142 | SMBIOSlotConfig.SMBIOSSystemSlot[8].SlotCharacteristics = PcdGet32(PcdSMBIOSSystemSlot9Characteristics);\r | |
143 | \r | |
144 | AsciiStrToUnicodeStr ((CHAR8 *) PcdGetPtr(PcdSMBIOSSystemSlot10Designation), SMBIOSlotConfig.SMBIOSSystemSlot[9].SlotDesignation);\r | |
145 | SMBIOSlotConfig.SMBIOSSystemSlot[9].SlotType = PcdGet8(PcdSMBIOSSystemSlot10Type);\r | |
146 | SMBIOSlotConfig.SMBIOSSystemSlot[9].SlotDataBusWidth = PcdGet8(PcdSMBIOSSystemSlot10DataBusWidth);\r | |
147 | SMBIOSlotConfig.SMBIOSSystemSlot[9].SlotUsage = PcdGet8(PcdSMBIOSSystemSlot10Usage);\r | |
148 | SMBIOSlotConfig.SMBIOSSystemSlot[9].SlotLength = PcdGet8(PcdSMBIOSSystemSlot10Length);\r | |
149 | SMBIOSlotConfig.SMBIOSSystemSlot[9].SlotId = PcdGet16(PcdSMBIOSSystemSlot10Id);\r | |
150 | SMBIOSlotConfig.SMBIOSSystemSlot[9].SlotCharacteristics = PcdGet32(PcdSMBIOSSystemSlot10Characteristics);\r | |
151 | \r | |
152 | AsciiStrToUnicodeStr ((CHAR8 *) PcdGetPtr(PcdSMBIOSSystemSlot11Designation), SMBIOSlotConfig.SMBIOSSystemSlot[10].SlotDesignation);\r | |
153 | SMBIOSlotConfig.SMBIOSSystemSlot[10].SlotType = PcdGet8(PcdSMBIOSSystemSlot11Type);\r | |
154 | SMBIOSlotConfig.SMBIOSSystemSlot[10].SlotDataBusWidth = PcdGet8(PcdSMBIOSSystemSlot11DataBusWidth);\r | |
155 | SMBIOSlotConfig.SMBIOSSystemSlot[10].SlotUsage = PcdGet8(PcdSMBIOSSystemSlot11Usage);\r | |
156 | SMBIOSlotConfig.SMBIOSSystemSlot[10].SlotLength = PcdGet8(PcdSMBIOSSystemSlot11Length);\r | |
157 | SMBIOSlotConfig.SMBIOSSystemSlot[10].SlotId = PcdGet16(PcdSMBIOSSystemSlot11Id);\r | |
158 | SMBIOSlotConfig.SMBIOSSystemSlot[10].SlotCharacteristics = PcdGet32(PcdSMBIOSSystemSlot11Characteristics);\r | |
159 | \r | |
160 | AsciiStrToUnicodeStr ((CHAR8 *) PcdGetPtr(PcdSMBIOSSystemSlot12Designation), SMBIOSlotConfig.SMBIOSSystemSlot[11].SlotDesignation);\r | |
161 | SMBIOSlotConfig.SMBIOSSystemSlot[11].SlotType = PcdGet8(PcdSMBIOSSystemSlot12Type);\r | |
162 | SMBIOSlotConfig.SMBIOSSystemSlot[11].SlotDataBusWidth = PcdGet8(PcdSMBIOSSystemSlot12DataBusWidth);\r | |
163 | SMBIOSlotConfig.SMBIOSSystemSlot[11].SlotUsage = PcdGet8(PcdSMBIOSSystemSlot12Usage);\r | |
164 | SMBIOSlotConfig.SMBIOSSystemSlot[11].SlotLength = PcdGet8(PcdSMBIOSSystemSlot12Length);\r | |
165 | SMBIOSlotConfig.SMBIOSSystemSlot[11].SlotId = PcdGet16(PcdSMBIOSSystemSlot12Id);\r | |
166 | SMBIOSlotConfig.SMBIOSSystemSlot[11].SlotCharacteristics = PcdGet32(PcdSMBIOSSystemSlot12Characteristics);\r | |
167 | \r | |
168 | AsciiStrToUnicodeStr ((CHAR8 *) PcdGetPtr(PcdSMBIOSSystemSlot13Designation), SMBIOSlotConfig.SMBIOSSystemSlot[12].SlotDesignation);\r | |
169 | SMBIOSlotConfig.SMBIOSSystemSlot[12].SlotType = PcdGet8(PcdSMBIOSSystemSlot13Type);\r | |
170 | SMBIOSlotConfig.SMBIOSSystemSlot[12].SlotDataBusWidth = PcdGet8(PcdSMBIOSSystemSlot13DataBusWidth);\r | |
171 | SMBIOSlotConfig.SMBIOSSystemSlot[12].SlotUsage = PcdGet8(PcdSMBIOSSystemSlot13Usage);\r | |
172 | SMBIOSlotConfig.SMBIOSSystemSlot[12].SlotLength = PcdGet8(PcdSMBIOSSystemSlot13Length);\r | |
173 | SMBIOSlotConfig.SMBIOSSystemSlot[12].SlotId = PcdGet16(PcdSMBIOSSystemSlot13Id);\r | |
174 | SMBIOSlotConfig.SMBIOSSystemSlot[12].SlotCharacteristics = PcdGet32(PcdSMBIOSSystemSlot13Characteristics);\r | |
175 | \r | |
176 | AsciiStrToUnicodeStr ((CHAR8 *) PcdGetPtr(PcdSMBIOSSystemSlot14Designation), SMBIOSlotConfig.SMBIOSSystemSlot[13].SlotDesignation);\r | |
177 | SMBIOSlotConfig.SMBIOSSystemSlot[13].SlotType = PcdGet8(PcdSMBIOSSystemSlot14Type);\r | |
178 | SMBIOSlotConfig.SMBIOSSystemSlot[13].SlotDataBusWidth = PcdGet8(PcdSMBIOSSystemSlot14DataBusWidth);\r | |
179 | SMBIOSlotConfig.SMBIOSSystemSlot[13].SlotUsage = PcdGet8(PcdSMBIOSSystemSlot14Usage);\r | |
180 | SMBIOSlotConfig.SMBIOSSystemSlot[13].SlotLength = PcdGet8(PcdSMBIOSSystemSlot14Length);\r | |
181 | SMBIOSlotConfig.SMBIOSSystemSlot[13].SlotId = PcdGet16(PcdSMBIOSSystemSlot14Id);\r | |
182 | SMBIOSlotConfig.SMBIOSSystemSlot[13].SlotCharacteristics = PcdGet32(PcdSMBIOSSystemSlot14Characteristics);\r | |
183 | }\r | |
184 | /**\r | |
185 | This function makes boot time changes to the contents of the\r | |
186 | MiscSystemSlotDesignator structure (Type 9).\r | |
187 | \r | |
188 | @param RecordData Pointer to copy of RecordData from the Data Table.\r | |
189 | \r | |
190 | @retval EFI_SUCCESS All parameters were valid.\r | |
191 | @retval EFI_UNSUPPORTED Unexpected RecordType value.\r | |
192 | @retval EFI_INVALID_PARAMETER Invalid parameter was found.\r | |
193 | \r | |
194 | **/\r | |
195 | MISC_SMBIOS_TABLE_FUNCTION(MiscSystemSlotDesignator)\r | |
196 | {\r | |
197 | CHAR8 *OptionalStrStart;\r | |
198 | UINTN SlotDesignationStrLen;\r | |
199 | EFI_STATUS Status;\r | |
200 | EFI_STRING SlotDesignation;\r | |
201 | STRING_REF TokenToUpdate;\r | |
202 | STRING_REF TokenToGet;\r | |
203 | SMBIOS_TABLE_TYPE9 *SmbiosRecord;\r | |
204 | EFI_SMBIOS_HANDLE SmbiosHandle;\r | |
205 | EFI_MISC_SYSTEM_SLOT_DESIGNATION* ForType9InputData;\r | |
206 | UINT8 Index;\r | |
207 | \r | |
208 | ForType9InputData = (EFI_MISC_SYSTEM_SLOT_DESIGNATION *)RecordData;\r | |
209 | \r | |
210 | TokenToGet = 0;\r | |
211 | \r | |
212 | //\r | |
213 | // First check for invalid parameters.\r | |
214 | //\r | |
215 | if (RecordData == NULL) {\r | |
216 | return EFI_INVALID_PARAMETER;\r | |
217 | }\r | |
218 | \r | |
219 | if (!PcdMiscSlotIsInit) {\r | |
220 | GetMiscSLotConfigFromPcd ();\r | |
221 | PcdMiscSlotIsInit = TRUE;\r | |
222 | }\r | |
223 | \r | |
224 | for (Index = 0; Index < SMBIOS_SYSTEM_SLOT_MAX_NUM; Index++) {\r | |
225 | if (ForType9InputData->SlotDesignation == (mMiscSlotArray[Index])->SlotDesignation) {\r | |
226 | //DEBUG ((EFI_D_ERROR, "Found slot Data %d : ", Index));\r | |
227 | break;\r | |
228 | }\r | |
229 | }\r | |
230 | if (Index >= SMBIOSlotConfig.SMBIOSSystemSlotNumber) {\r | |
231 | return EFI_SUCCESS;\r | |
232 | }\r | |
233 | \r | |
234 | if (Index >= SMBIOS_SYSTEM_SLOT_MAX_NUM) {\r | |
235 | return EFI_INVALID_PARAMETER;\r | |
236 | }\r | |
237 | \r | |
238 | SlotDesignation = SMBIOSlotConfig.SMBIOSSystemSlot[Index].SlotDesignation;\r | |
239 | TokenToGet = STRING_TOKEN ((mMiscSlotArray[Index])->SlotDesignation);\r | |
240 | \r | |
241 | if (StrLen (SlotDesignation) > 0) {\r | |
242 | TokenToUpdate = STRING_TOKEN ((mMiscSlotArray[Index])->SlotDesignation);\r | |
243 | HiiSetString (mHiiHandle, TokenToUpdate, SlotDesignation, NULL);\r | |
244 | }\r | |
245 | \r | |
246 | SlotDesignation = HiiGetPackageString(&gEfiCallerIdGuid, TokenToGet, NULL);\r | |
247 | SlotDesignationStrLen = StrLen(SlotDesignation);\r | |
248 | if (SlotDesignationStrLen > SMBIOS_STRING_MAX_LENGTH) {\r | |
249 | return EFI_UNSUPPORTED;\r | |
250 | }\r | |
251 | //\r | |
252 | // Two zeros following the last string.\r | |
253 | //\r | |
254 | SmbiosRecord = AllocatePool(sizeof (SMBIOS_TABLE_TYPE9) + SlotDesignationStrLen + 1 + 1);\r | |
255 | ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE9) +SlotDesignationStrLen + 1 + 1);\r | |
256 | \r | |
257 | SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_SYSTEM_SLOTS;\r | |
258 | SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE9);\r | |
259 | SmbiosRecord->Hdr.Handle = 0;\r | |
260 | SmbiosRecord->SlotDesignation = 1;\r | |
261 | SmbiosRecord->SlotType = SMBIOSlotConfig.SMBIOSSystemSlot[Index].SlotType;\r | |
262 | SmbiosRecord->SlotDataBusWidth = SMBIOSlotConfig.SMBIOSSystemSlot[Index].SlotDataBusWidth;\r | |
263 | SmbiosRecord->CurrentUsage = SMBIOSlotConfig.SMBIOSSystemSlot[Index].SlotUsage;\r | |
264 | SmbiosRecord->SlotLength = SMBIOSlotConfig.SMBIOSSystemSlot[Index].SlotLength;\r | |
265 | SmbiosRecord->SlotID = SMBIOSlotConfig.SMBIOSSystemSlot[Index].SlotId;\r | |
266 | *(UINT16 *)&SmbiosRecord->SlotCharacteristics1 = (UINT16)(SMBIOSlotConfig.SMBIOSSystemSlot[Index].SlotCharacteristics);\r | |
267 | \r | |
268 | //\r | |
269 | // Slot Characteristics\r | |
270 | //\r | |
271 | OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);\r | |
272 | UnicodeStrToAsciiStr(SlotDesignation, OptionalStrStart);\r | |
273 | //\r | |
274 | // Now we have got the full smbios record, call smbios protocol to add this record.\r | |
275 | //\r | |
276 | SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;\r | |
277 | Status = Smbios-> Add(\r | |
278 | Smbios,\r | |
279 | NULL,\r | |
280 | &SmbiosHandle,\r | |
281 | (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord\r | |
282 | );\r | |
283 | FreePool(SmbiosRecord);\r | |
284 | return Status;\r | |
285 | }\r |