]> git.proxmox.com Git - mirror_edk2.git/blob - Vlv2TbltDevicePkg/SmBiosMiscDxe/MiscSystemSlotDesignationFunction.c
MdeModulePkg/CapsuleApp: Center bitmap at bottom of screen
[mirror_edk2.git] / Vlv2TbltDevicePkg / SmBiosMiscDxe / MiscSystemSlotDesignationFunction.c
1 /*++
2
3 Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>
4
5 This program and the accompanying materials are licensed and made available under
6 the terms and conditions of the BSD License that accompanies this distribution.
7 The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php.
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13
14
15 Module Name:
16
17 MiscSystemSlotDesignatorFunction.c
18
19 Abstract:
20
21 BIOS system slot designator information boot time changes.
22 SMBIOS type 9.
23
24 --*/
25
26 #include "MiscSubclassDriver.h"
27
28 /**
29 This function makes boot time changes to the contents of the
30 MiscSystemSlotDesignator structure (Type 9).
31
32 @param RecordData Pointer to copy of RecordData from the Data Table.
33
34 @retval EFI_SUCCESS All parameters were valid.
35 @retval EFI_UNSUPPORTED Unexpected RecordType value.
36 @retval EFI_INVALID_PARAMETER Invalid parameter was found.
37
38 **/
39 MISC_SMBIOS_TABLE_FUNCTION(MiscSystemSlotDesignation)
40 {
41 CHAR8 *OptionalStrStart;
42 UINTN SlotDesignationStrLen;
43 EFI_STATUS Status;
44 EFI_STRING SlotDesignation;
45 STRING_REF TokenToGet;
46 SMBIOS_TABLE_TYPE9 *SmbiosRecord;
47 EFI_SMBIOS_HANDLE SmbiosHandle;
48 EFI_MISC_SYSTEM_SLOT_DESIGNATION* ForType9InputData;
49
50 ForType9InputData = (EFI_MISC_SYSTEM_SLOT_DESIGNATION *)RecordData;
51
52 //
53 // First check for invalid parameters.
54 //
55 if (RecordData == NULL) {
56 return EFI_INVALID_PARAMETER;
57 }
58
59 TokenToGet = 0;
60 switch (ForType9InputData->SlotDesignation) {
61 case STR_MISC_SYSTEM_SLOT_PCIEX16_1:
62 TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_SLOT_PCIEX16_1);
63 break;
64 case STR_MISC_SYSTEM_SLOT_PCIEX16_2:
65 TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_SLOT_PCIEX16_2);
66 break;
67 case STR_MISC_SYSTEM_SLOT_PCIEX4:
68 TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_SLOT_PCIEX4);
69 break;
70 case STR_MISC_SYSTEM_SLOT_PCIEX1_1:
71 TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_SLOT_PCIEX1_1);
72 break;
73 case STR_MISC_SYSTEM_SLOT_PCIEX1_2:
74 TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_SLOT_PCIEX1_2);
75 break;
76 case STR_MISC_SYSTEM_SLOT_PCIEX1_3:
77 TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_SLOT_PCIEX1_3);
78 break;
79 case STR_MISC_SYSTEM_SLOT_PCI1:
80 TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_SLOT_PCI1);
81 break;
82 case STR_MISC_SYSTEM_SLOT_PCI2:
83 TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_SLOT_PCI2);
84 break;
85 case STR_MISC_SYSTEM_SLOT_PCI3:
86 TokenToGet = STRING_TOKEN (STR_MISC_SYSTEM_SLOT_PCI3);
87 break;
88 default:
89 break;
90 }
91
92 SlotDesignation = SmbiosMiscGetString (TokenToGet);
93 SlotDesignationStrLen = StrLen(SlotDesignation);
94 if (SlotDesignationStrLen > SMBIOS_STRING_MAX_LENGTH) {
95 return EFI_UNSUPPORTED;
96 }
97
98 //
99 // Two zeros following the last string.
100 //
101 SmbiosRecord = AllocatePool(sizeof (SMBIOS_TABLE_TYPE9) + SlotDesignationStrLen + 1 + 1);
102 ZeroMem(SmbiosRecord, sizeof (SMBIOS_TABLE_TYPE9) +SlotDesignationStrLen + 1 + 1);
103
104 SmbiosRecord->Hdr.Type = EFI_SMBIOS_TYPE_SYSTEM_SLOTS;
105 SmbiosRecord->Hdr.Length = sizeof (SMBIOS_TABLE_TYPE9);
106 SmbiosRecord->Hdr.Handle = 0;
107 SmbiosRecord->SlotDesignation = 1;
108 SmbiosRecord->SlotType = (UINT8)ForType9InputData->SlotType;
109 SmbiosRecord->SlotDataBusWidth = (UINT8)ForType9InputData->SlotDataBusWidth;
110 SmbiosRecord->CurrentUsage = (UINT8)ForType9InputData->SlotUsage;
111 SmbiosRecord->SlotLength = (UINT8)ForType9InputData->SlotLength;
112 SmbiosRecord->SlotID = ForType9InputData->SlotId;
113
114 //
115 // Slot Characteristics
116 //
117 CopyMem ((UINT8 *) &SmbiosRecord->SlotCharacteristics1,(UINT8 *) &ForType9InputData->SlotCharacteristics,2);
118 OptionalStrStart = (CHAR8 *)(SmbiosRecord + 1);
119 UnicodeStrToAsciiStr(SlotDesignation, OptionalStrStart);
120 //
121 // Now we have got the full smbios record, call smbios protocol to add this record.
122 //
123 SmbiosHandle = SMBIOS_HANDLE_PI_RESERVED;
124 Status = Smbios-> Add(
125 Smbios,
126 NULL,
127 &SmbiosHandle,
128 (EFI_SMBIOS_TABLE_HEADER *) SmbiosRecord
129 );
130 FreePool(SmbiosRecord);
131 return Status;
132 }