On Fri, Apr 29, 2016 at 07:25:59PM +0200, Marcin Wojtas wrote:
From: Bartosz Szczepanek bsz@semihalf.com
'eeprom' command brings MvEeprom driver capabilities to UEFI shell. It allows reading & writing from/to onboard EEPROM device.
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Bartosz Szczepanek bsz@semihalf.com Signed-off-by: Marcin Wojtas mw@semihalf.com Reviewed-by: Leif Lindholm leif.lindholm@linaro.org
Applications/EepromCmd/EepromCmd.c | 383 +++++++++++++++++++++++++++++++++++ Applications/EepromCmd/EepromCmd.inf | 71 +++++++ Applications/EepromCmd/EepromCmd.uni | Bin 0 -> 6816 bytes Platforms/Marvell/Marvell.dec | 2 + 4 files changed, 456 insertions(+) create mode 100644 Applications/EepromCmd/EepromCmd.c create mode 100644 Applications/EepromCmd/EepromCmd.inf create mode 100644 Applications/EepromCmd/EepromCmd.uni
diff --git a/Applications/EepromCmd/EepromCmd.c b/Applications/EepromCmd/EepromCmd.c new file mode 100644 index 0000000..47f23b9 --- /dev/null +++ b/Applications/EepromCmd/EepromCmd.c @@ -0,0 +1,383 @@ +/******************************************************************************** +Copyright (C) 2016 Marvell International Ltd.
+Marvell BSD License Option
+If you received this File from Marvell, you may opt to use, redistribute and/or +modify this File under the following licensing terms. +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met:
+* Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
 +* Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
 - documentation and/or other materials provided with the distribution.
 +* Neither the name of Marvell nor the names of its contributors may be
- used to endorse or promote products derived from this software without
 - specific prior written permission.
 +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*******************************************************************************/
+#include <Uefi.h>
+#include <ShellBase.h> +#include <Library/BaseLib.h> +#include <Library/BaseMemoryLib.h> +#include <Library/DebugLib.h> +#include <Library/MemoryAllocationLib.h> +#include <Library/ShellCommandLib.h> +#include <Library/ShellLib.h> +#include <Library/UefiLib.h> +#include <Library/UefiRuntimeServicesTableLib.h> +#include <Library/UefiBootServicesTableLib.h> +#include <Library/PrintLib.h> +#include <Library/HiiLib.h>
+#include <Library/UefiLib.h> +#include <Library/ShellCEntryLib.h> +#include <Library/UefiBootServicesTableLib.h>
+#include <Protocol/Eeprom.h>
+CONST CHAR16 gShellEepromFileName[] = L"ShellCommand"; +EFI_HANDLE gShellEepromHiiHandle = NULL;
Really global or just file global?
+STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
- {L"-d", TypeValue},
 - {L"-m", TypeValue},
 - {L"read", TypeFlag},
 - {L"write", TypeFlag},
 - {L"list", TypeFlag},
 - {L"help", TypeFlag},
 - {NULL , TypeMax}
 - };
 +/**
- Return the file name of the help text file if not using HII.
 - @return The string pointer to the file name.
 +**/ +CONST CHAR16* +EFIAPI +ShellCommandGetManFileNameEeprom (
So, this function and several others in this file could probably be turned STATIC.
Regards,
Leif
- VOID
 - )
 +{
- return gShellEepromFileName;
 +}
+VOID +Usage (
- VOID
 - )
 +{
- Print (L"Basic EEPROM commands:\n"
 "eeprom [read] [write] [list] [<Chip>] [<Address>] [<Length>] [-d <Data>] [-m <Source>]\n""All modes except 'list' require Address, Length and Chip set.\n\n""read - read from EEPROM\n""write - write Data to EEPROM, requires -d\n""list - list available EEPROM devices\n\n""-m - transfer from/to RAM memory\n\n""Chip - EEPROM bus address\n""Address - address in EEPROM to read/write\n""Data - data byte to be written\n""Length - length of data to read/write/copy\n""Source - address of data in RAM to be copied\n""Examples:\n""List devices:\n"" eeprom list\n""Read 16 bytes from address 0x0 in chip 0x57:\n"" eeprom read 0x57 0x0 0x10\n""Fill 16 bytes with 0xab at address 0x0 in chip 0x57:\n"" eeprom write 0x57 0x0 0x10 -d 0xab\n""Copy 32 bytes from 0x2000000 in RAM to EEPROM:\n"" eeprom write 0x57 0x0 0x20 -m 0x2000000\n""Copy 32 bytes from EEPROM to RAM:\n"" eeprom read 0x57 0x0 0x20 -m 0x2000000\n"- );
 +}
+EFI_STATUS +EepromList (
- )
 +{
- EFI_HANDLE *HandleBuffer;
 - EFI_STATUS Status;
 - UINTN ProtocolCount;
 - MARVELL_EEPROM_PROTOCOL *EepromProtocol;
 - UINTN i;
 - Status = gBS->LocateHandleBuffer ( ByProtocol,
 &gMarvellEepromProtocolGuid,NULL,&ProtocolCount,&HandleBuffer);- if (ProtocolCount == 0) {
 - Print (L"0 devices found.\n");
 - } else {
 - Print (L"%u devices found: ", ProtocolCount);
 - }
 - for (i = 0; i < ProtocolCount; i++) {
 - Status = gBS->OpenProtocol (
 HandleBuffer[i],&gMarvellEepromProtocolGuid,(VOID **) &EepromProtocol,gImageHandle,NULL,EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL );- Print (L" 0x%x ", EepromProtocol->Identifier);
 - Status = gBS->CloseProtocol ( HandleBuffer[i],
 &gMarvellEepromProtocolGuid,gImageHandle,NULL );- }
 - Print (L"\n");
 - return Status;
 +}
+EFI_STATUS +EepromLocateProtocol (
- IN UINT32 Identifier,
 - OUT EFI_HANDLE *FoundHandle,
 - OUT MARVELL_EEPROM_PROTOCOL **FoundEepromProtocol
 - )
 +{
- EFI_HANDLE *HandleBuffer;
 - EFI_STATUS Status;
 - UINTN ProtocolCount;
 - MARVELL_EEPROM_PROTOCOL *EepromProtocol;
 - UINTN i;
 - Status = gBS->LocateHandleBuffer ( ByProtocol,
 &gMarvellEepromProtocolGuid,NULL,&ProtocolCount,&HandleBuffer);- if (EFI_ERROR(Status))
 - return Status;
 - for (i = 0; i < ProtocolCount; i++) {
 - Status = gBS->OpenProtocol (
 HandleBuffer[i],&gMarvellEepromProtocolGuid,(VOID **) &EepromProtocol,gImageHandle,NULL,EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL );- if (EepromProtocol->Identifier == Identifier) {
 *FoundEepromProtocol = EepromProtocol;*FoundHandle = HandleBuffer[i];return EFI_SUCCESS;- }
 - Status = gBS->CloseProtocol ( HandleBuffer[i],
 &gMarvellEepromProtocolGuid,gImageHandle,NULL );- }
 - *FoundEepromProtocol = NULL;
 - return EFI_UNSUPPORTED;
 +}
+SHELL_STATUS +EFIAPI +ShellCommandRunEeprom (
- IN EFI_HANDLE ImageHandle,
 - IN EFI_SYSTEM_TABLE *SystemTable
 - )
 +{
- EFI_STATUS Status;
 - LIST_ENTRY *CheckPackage;
 - CHAR16 *ProblemParam;
 - CONST CHAR16 *ValueStr;
 - UINTN Address, Length, Chip, Source;
 - UINT8 Data;
 - UINT8 *Buffer;
 - BOOLEAN ReadMode, MemMode;
 - EFI_HANDLE Handle, ProtHandle;
 - MARVELL_EEPROM_PROTOCOL *EepromProtocol;
 - UINTN Count, HandleSize;
 - Source = 0;
 - HandleSize = 2 * sizeof (EFI_HANDLE);
 - Status = gBS->LocateHandle (ByProtocol, &gMarvellEepromProtocolGuid, NULL,
 - &HandleSize, &ProtHandle);
 - if (EFI_ERROR(Status)) {
 - DEBUG((DEBUG_INFO, "No Eeprom protocol, connect I2C stack\n"));
 - Status = gBS->LocateHandle (ByProtocol, &gEfiI2cMasterProtocolGuid, NULL,
 &HandleSize, &ProtHandle);- if (EFI_ERROR(Status)) {
 Print (L"Failed to locate I2cMaster protocol, abort!\n");return SHELL_ABORTED;- }
 - Status = gBS->ConnectController (ProtHandle, NULL, NULL, TRUE);
 - if (EFI_ERROR(Status)) {
 Print (L"Cannot connect I2C stack, abort!\n");return SHELL_ABORTED;- }
 - }
 - Status = ShellInitialize ();
 - if (EFI_ERROR (Status)) {
 - Print (L"Error - failed to initialize shell\n");
 - return SHELL_ABORTED;
 - }
 - Status = ShellCommandLineParse (ParamList, &CheckPackage, &ProblemParam, TRUE);
 - if (EFI_ERROR (Status)) {
 - Print (L"Error - failed to parse command line\n");
 - return SHELL_ABORTED;
 - }
 - if (ShellCommandLineGetFlag (CheckPackage, L"list")) {
 - EepromList();
 - return SHELL_SUCCESS;
 - }
 - if (ShellCommandLineGetFlag (CheckPackage, L"help")) {
 - Usage();
 - return SHELL_SUCCESS;
 - }
 - if (ShellCommandLineGetCount(CheckPackage) < 4) {
 - Print (L"Not enough arguments given.\n");
 - Usage();
 - }
 - ReadMode = ShellCommandLineGetFlag (CheckPackage, L"read");
 - if (ReadMode == ShellCommandLineGetFlag (CheckPackage, L"write")) {
 - Print (L"Error - type read, write, list or help.\n");
 - return SHELL_INVALID_PARAMETER;
 - }
 - MemMode = ShellCommandLineGetFlag (CheckPackage, L"-m");
 - Data = 0;
 - if (!ReadMode && !MemMode) {
 - ValueStr = ShellCommandLineGetValue (CheckPackage, L"-d");
 - if (ValueStr == NULL) {
 Print (L"Error - no data to write.\n");return SHELL_INVALID_PARAMETER;- }
 - Data = ShellHexStrToUintn (ValueStr);
 - }
 - ValueStr = ShellCommandLineGetRawValue(CheckPackage, 1);
 - Chip = ShellHexStrToUintn (ValueStr);
 - ValueStr = ShellCommandLineGetRawValue(CheckPackage, 2);
 - Address = ShellHexStrToUintn (ValueStr);
 - ValueStr = ShellCommandLineGetRawValue(CheckPackage, 3);
 - Length = ShellHexStrToUintn (ValueStr);
 - if (MemMode) {
 - ValueStr = ShellCommandLineGetValue (CheckPackage, L"-m");
 - if (ValueStr == NULL) {
 Print (L"Error - no memory address given.\n");return SHELL_INVALID_PARAMETER;- }
 - Source = ShellHexStrToUintn (ValueStr);
 - }
 - EepromLocateProtocol (Chip, &Handle, &EepromProtocol);
 - if (EepromProtocol == NULL) {
 - Print (L"Failed to locate EEPROM protocol.\n");
 - return SHELL_INVALID_PARAMETER;
 - }
 - if (MemMode) {
 - Buffer = (VOID *) Source;
 - } else {
 - Buffer = AllocateZeroPool (Length);
 - if (Buffer == NULL) {
 Status = SHELL_OUT_OF_RESOURCES;Print (L"Error - out of resources.\n");goto out_close;- }
 - if (!ReadMode) {
 for (Count = 0; Count < Length; Count++)Buffer[Count] = Data;- }
 - }
 - EepromProtocol->Transfer(EepromProtocol, Address, Length, Buffer,
 ReadMode ? EEPROM_READ : EEPROM_WRITE);- if (MemMode) {
 - Print (L"Transfered succesfully.\n");
 - } else {
 - Print (L"Transfered:\n");
 - for (Count = 0; Count < Length; Count++) {
 Print(L"0x%x ", Buffer[Count]);if (Count % 8 == 7)Print(L"\n");- }
 - Print (L"\n");
 - }
 - Status = SHELL_SUCCESS;
 - if (!MemMode)
 - FreePool(Buffer);
 +out_close:
- gBS->CloseProtocol ( Handle,
 &gMarvellEepromProtocolGuid,gImageHandle,NULL );- return Status;
 +}
+EFI_STATUS +EFIAPI +ShellEepromCmdLibConstructor (
- IN EFI_HANDLE ImageHandle,
 - IN EFI_SYSTEM_TABLE *SystemTable
 - )
 +{
- gShellEepromHiiHandle = NULL;
 - gShellEepromHiiHandle = HiiAddPackages (
 &gShellEepromHiiGuid, gImageHandle,UefiShellEepromLibStrings, NULL);- if (gShellEepromHiiHandle == NULL) {
 - Print (L"Filed to add Hii package\n");
 - return EFI_DEVICE_ERROR;
 - }
 - ShellCommandRegisterCommandName (
 L"eeprom", ShellCommandRunEeprom, ShellCommandGetManFileNameEeprom, 0,L"eeprom", TRUE , gShellEepromHiiHandle, STRING_TOKEN (STR_GET_HELP_EEPROM));- return EFI_SUCCESS;
 +}
+EFI_STATUS +EFIAPI +ShellEepromCmdLibDestructor (
- IN EFI_HANDLE ImageHandle,
 - IN EFI_SYSTEM_TABLE *SystemTable
 - )
 +{
- if (gShellEepromHiiHandle != NULL) {
 - HiiRemovePackages (gShellEepromHiiHandle);
 - }
 - return EFI_SUCCESS;
 +} diff --git a/Applications/EepromCmd/EepromCmd.inf b/Applications/EepromCmd/EepromCmd.inf new file mode 100644 index 0000000..1171fc1 --- /dev/null +++ b/Applications/EepromCmd/EepromCmd.inf @@ -0,0 +1,71 @@ +# +# Marvell BSD License Option +# +# If you received this File from Marvell, you may opt to use, redistribute +# and/or modify this File under the following licensing terms. +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# * Neither the name of Marvell nor the names of its contributors may be +# used to endorse or promote products derived from this software without +# specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#
+[Defines]
- INF_VERSION = 0x00010006
 - BASE_NAME = UefiShellEepromLib
 - FILE_GUID = adf4b61c-2ca3-4e1a-9597-99282f5a4aa2
 - MODULE_TYPE = UEFI_APPLICATION
 - VERSION_STRING = 0.1
 - LIBRARY_CLASS = NULL|UEFI_APPLICATION UEFI_DRIVER
 - CONSTRUCTOR = ShellEepromCmdLibConstructor
 - DESTRUCTOR = ShellEepromCmdLibDestructor
 +[Sources]
- EepromCmd.c
 - EepromCmd.uni
 +[Packages]
- MdePkg/MdePkg.dec
 - ShellPkg/ShellPkg.dec
 - StdLib/StdLib.dec
 - MdeModulePkg/MdeModulePkg.dec
 - OpenPlatformPkg/Platforms/Marvell/Marvell.dec
 +[LibraryClasses]
- UefiLib
 - UefiBootServicesTableLib
 - MemoryAllocationLib
 - BaseLib
 - BaseMemoryLib
 - DebugLib
 - ShellCommandLib
 - ShellLib
 - UefiLib
 - UefiRuntimeServicesTableLib
 - PcdLib
 +[Protocols]
- gMarvellEepromProtocolGuid
 - gEfiI2cMasterProtocolGuid
 +[Guids]
- gShellEepromHiiGuid
 diff --git a/Applications/EepromCmd/EepromCmd.uni b/Applications/EepromCmd/EepromCmd.uni new file mode 100644 index 0000000000000000000000000000000000000000..e41c6d812ef5d8e3b23c54e5fcbee017507b5c2f GIT binary patch literal 6816 zcmd6rZEsUY5QX=1rT&Mj@P#50L#wtDrIj4Vfk@6vZHE*=g%UfVmSQKhO@Tk(_B=bD z?C!OlP^3!8^1b^ybLQ;K?C$;N??!m=MgP7IUxik<3fJLdn1)e!8~zCMP=)(y{YLL^ z!=vyx{Gif)IMs;1!g;vVuL^r%qLJrno2X~5xmU47Uq|&}*a}GJU!S`jdSNGy8-;;n zOu|ghDjW)jOY*sU;X*whCH<Y=Q;lQBC?XlEWiG@c&9B0)-j`9%g~nZlvD!+_57pw5 z#zOs3b!^Atxk{CEfP`^q8b--;l}F)Beb`%R-b6hOjh{yA#ws!LBFbBZ=UtouSB4iU z7n%i=SK+<pPQ-krTH?dojN`Fz8K2#ixQu<r=5|z3a;3SjH;v4tF=w%tRfPxeOvTwO zS`Q{HfgezN9XYU-YzA>!|A&zgWMbpBp2$QNcCcR8YPr(tja0K1^dRAOZU&kK@5nN1 zS##GkmaKVra^rE8`tsic)ox=BSy$21O0LifPAtYZK#6U0X=a5I=2LkHb}^P&^@y6N z4di&Qv6SQUa`GO0!Sorfb@szaLb1xL%!>!|E-=H?G>c8w?C(!u$}C^)KXs;Ty@z5C z%M;Su`6BuqQT{GjG-($7|1V!2NvzL#^s*e4mxo&8fh>h%vSW%1k2=d5_?k%~w#Y;l z<s+3Ywd$*)#3L{<xSX9VE>hlgT>fTl4}{HPyUa&qad3Mal$o=VJ(dX!H+37IA_u9| z%v1BM$xM1Y=bqidp=Dt6X)-cQ!YdLC9h{k0k%cTL=U!$gh+6VC5s9?4C!`o7)-NRC zy=<|J<t$sCTjzzdnArxBexd(hfd}?2SEAQ49vLEK!I^BRuTeid*IwGwxSsaE-Ovvw zp{ZQeR*SVCsdgA%sJ5fl9kp+VmwGajQ7!czsimtC&(zje+jF&b;`nZq-PF1>ld%UH z!PxC^tkR*%Xy1@l-ss%W+h)K3CG@q!Z_)#@UL46x#_y}Oqqku*^xZhCA6t8IN7<8< zmc|_m2jyq6)iB_dhY>e&_Vw>Cq=Ap!*ljJffo_#PP7=GCwJ#}MX??yx)0EA75o<qM z<gDyQjR!ZD?M7DMpptE@29~shy%TG+9;@|8<9eFKNO%Dc*7c&LO_e~fqihRL2YO;B zOuo>cbzs#&*U>LoxoSlZWhn^Z+?Zd#mfIS~DQr)YxAmrGHs$LHQc$;q1CBwss;#9S zJP*7eWo%EjGZPKgf_JnRz5p99<G36tO#Ld}Op?v4B)O?sP5A?U1-|<c$>;lu#S5#2 zb*z9fZ9dUcJLgYUw68LrR!RGzemiP+c0t>XQP)zb7k-M^IvVBPkB1$r){d592mHW} zS#3DXx0vtk_<S$g=#d2T;OOdiEM~z*oN@vul26o!$FTM-=`gLtvwJY3^R=~j0SA$5 zmb*Ws2mtGeG_<9Wr^PdVntZEy;~#KF-oRgyca_r2a?2|HwW~=Sw8c4ySa&i5t6;Oq z1cv5B{qPG9_!KqE9Uf1fo5%uYDJ$w0d)6?%@>V3lS3T##h({+nSmUPrg6s<tI5#$3 zw&ehDmANH(8~La7^Rz>M*|)<+<OrS`;pcGgrgkr$CAqV(%W^;C$4<Q&eUsgU+S_=e znd!{5k<H~)%MNLG9`mX<(GU9JO<ehoV&IL~ZtKn7x4+Qf=a}?PNZx4=e=DtZ9Hx0g zIhYlr_x$GcQ0aCH)@{vYXJ#iawQ`mj$8!s(kS&dUE$pv_J;^15<I&`?_EJB$j#JHT z=#*jS0x%BM#`!RvOB#_8yM?w3jGW3i>2Ob5r@bfdXKy)*5z<>4S1q-aJiL;0!}+@~ zy~?m!-A~t6+Y}xvJyqm#|Go~t+_W@h-7w1IyhD2(by`14ufkJh0`nKnW-e({QY!WB zEVxSTv)JAfCw{A4rDaQ8urjdX8TC_`0h6;)BK6v4F(RETbKl8*gn9YuyPWh!Vm`uc z=Csc#IG0S00^gsqezf4ZQsfQAbMi}M`>G{9c?q3q#Hmio+z+`Wp6Q8~=34RD^LTIP z9yg1+>iY1DTtit#ACb@ZlbN!H-9MbY#==rgj{6#!d;L0#SEF!`EVX+L6s28!*}<cT z(&V>w+e)u?Y5qoPIp1%Lr7l}d_pUrA)b%9~a2@#@eJO{WDKpqT$mDasO8!L8WXU)3 zh|48g8Tt4CIhvUCTVc|<-jYVV0rLH$Zc`qyt98~nv~M3tt9^NJAIYt?Z!RNYF5|$n z0OwOYi@OTvuH~FmZ>i6CvNWfoc(HFZWo#^utnWJ>cXgdz;fI52@zvE=7XS1}S@yI? z;X~ZXjGe(EBeT1G2;YYv^<Av4r;f)xGR?6P`y)~w>sgm!-&-$NV)c8p%_gIOdLEy7 zlqD^nk3G+uZgG<9=q*DgJaubY%Cq=v6~5C~?@EX*rb_0K#y9cw^EfYkGLQPZ*}vNY zbYj6+&t(jsXG@OJ_ZhR|Zp3%_%YVb`G0J_7J6Ts}nHP#yz7~91tmZSTV(uzi?AG0u z{Ep6<+z4Co24Xk6GBfoRO=QzkWi|iuOm5}GXy3ZV@*8p`d6vkv9vEVWX0NoKt)&P; x6K51h!fl;9kbnIsk+ijU^6h-8S?^<v+b(V2zHC?K6l>?|^5j~22q${}{{kxp-hluB
literal 0 HcmV?d00001
diff --git a/Platforms/Marvell/Marvell.dec b/Platforms/Marvell/Marvell.dec index 3c32aed..ec8a417 100644 --- a/Platforms/Marvell/Marvell.dec +++ b/Platforms/Marvell/Marvell.dec @@ -52,6 +52,8 @@ [Guids.common] gMarvellTokenSpaceGuid = { 0xf995c6c8, 0xbc9b, 0x4e93, { 0xbd, 0xcf, 0x49, 0x90, 0xc6, 0xe7, 0x8c, 0x7f } }
- gShellEepromHiiGuid = { 0xb2f4c714, 0x147f, 0x4ff7, { 0x82, 0x1b, 0xce, 0x7b, 0x91, 0x7f, 0x5f, 0x2f } }
 [PcdsFixedAtBuild.common] #MPP gMarvellTokenSpaceGuid.PcdMppChipCount|0|UINT32|0x30000001 -- 1.8.3.1