On Mon, Apr 18, 2016 at 01:35:07AM +0200, Marcin Wojtas wrote:
From: Jan Dąbroś jsd@semihalf.com
'fupdate' command performs updating firmware from file placed on local filesystem or on TFTP server. It uses tftp and sf commands.
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jan Dabros jsd@semihalf.com Signed-off-by: Marcin Wojtas mw@semihalf.com
Applications/FirmwareUpdate/FUpdate.c | 438 ++++++++++++++++++++++++++++++++ Applications/FirmwareUpdate/FUpdate.inf | 69 +++++ Applications/FirmwareUpdate/FUpdate.uni | Bin 0 -> 5838 bytes Platforms/Marvell/Marvell.dec | 1 + 4 files changed, 508 insertions(+) create mode 100644 Applications/FirmwareUpdate/FUpdate.c create mode 100644 Applications/FirmwareUpdate/FUpdate.inf create mode 100644 Applications/FirmwareUpdate/FUpdate.uni
diff --git a/Applications/FirmwareUpdate/FUpdate.c b/Applications/FirmwareUpdate/FUpdate.c new file mode 100644 index 0000000..40a1994 --- /dev/null +++ b/Applications/FirmwareUpdate/FUpdate.c @@ -0,0 +1,438 @@ +/******************************************************************************* +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/DebugLib.h> +#include <Library/MemoryAllocationLib.h> +#include <Library/ShellCommandLib.h> +#include <Library/ShellLib.h> +#include <Library/UefiLib.h> +#include <Library/PrintLib.h> +#include <Library/UefiLib.h> +#include <Library/ShellCEntryLib.h> +#include <Library/HiiLib.h> +#include <Guid/ShellLibHiiGuid.h> +#include <Library/UefiBootServicesTableLib.h> +#include <Library/FileHandleLib.h> +#include "../../../ShellPkg/Application/Shell/Shell.h"
This relative search path should not be needed. Does #include <Protocol/EfiShell.h> not do what you need?
+#define TFTP_CMD_STRING L"tftp " +#define SPACE_STRING L" " +#define SF_PROBE_CMD_STRING L"sf probe" +#define SF_WRITE_CMD_STRING L"sf updatefile " +#define SF_LOAD_ADDR_STRING L"0x0"
+#define HEADER_SIZE 49152 +#define MAIN_HDR_MAGIC 0xB105B002
+typedef struct {
- UINT32 Magic; // 0-3
 - UINT32 PrologSize; // 4-7
 - UINT32 PrologChecksum; // 8-11
 - UINT32 BootImageSize; // 12-15
 - UINT32 BootImageChecksum; // 16-19
 - UINT32 Reserved0; // 20-23
 - UINT32 LoadAddr; // 24-27
 - UINT32 ExecAddr; // 28-31
 - UINT8 UartConfig; // 32
 - UINT8 Baudrate; // 33
 - UINT8 ExtCount; // 34
 - UINT8 AuxFlags; // 35
 - UINT32 IoArg0; // 36-39
 - UINT32 IoArg1; // 40-43
 - UINT32 IoArg2; // 43-47
 - UINT32 IoArg3; // 48-51
 - UINT32 Reserved1; // 52-55
 - UINT32 Reserved2; // 56-59
 - UINT32 Reserved3; // 60-63
 +} MV_IMAGE_HEADER;
+STATIC +UINT32 +CountChecksum (
- UINT32 *Start,
 - UINT32 Length
 - )
 +{
- UINT32 Sum = 0;
 - UINT32 *Startp = Start;
 - do {
 - Sum += *Startp;
 - Startp++;
 - Length -= 4;
 - } while (Length > 0);
 - return Sum;
 +}
+STATIC +EFI_STATUS +CheckImageHeader (
- IN VOID *ImageHeader
 - )
 +{
- MV_IMAGE_HEADER *Header;
 - UINT32 HeaderLength, Checksum, ChecksumBackup;
 - Header = (MV_IMAGE_HEADER *) ImageHeader;
 - HeaderLength = Header->PrologSize;
 - ChecksumBackup = Header->PrologChecksum;
 - // Compare magic number
 - if (Header->Magic != MAIN_HDR_MAGIC) {
 - Print (L"fupdate: Bad Image magic 0x%08x != 0x%08x", Header->Magic,
 MAIN_HDR_MAGIC);- return EFI_DEVICE_ERROR;
 - }
 - // The checksum field is discarded from calculation
 - Header->PrologChecksum = 0;
 - Checksum = CountChecksum((UINT32 *)Header, HeaderLength);
 - if (Checksum != ChecksumBackup) {
 - Print (L"fupdate: Bad Image checksum. 0x%x != 0x%x", Checksum,
 ChecksumBackup);- return EFI_DEVICE_ERROR;
 - }
 - // Restore checksum backup
 - Header->PrologChecksum = ChecksumBackup;
 - return 0;
 +}
+STATIC +EFI_STATUS +CheckFirmwareImage (
- CONST CHAR16* FirmwareImage
 - )
 +{
- EFI_STATUS Status;
 - VOID *FileBuffer;
 - UINT64 OpenMode;
 - UINTN HeaderSize;
 - SHELL_FILE_HANDLE FileHandle = NULL;
 - OpenMode = EFI_FILE_MODE_READ;
 - HeaderSize = HEADER_SIZE;
 - FileBuffer = AllocateZeroPool (HEADER_SIZE);
 - Status = ShellOpenFileByName (FirmwareImage, &FileHandle, OpenMode, 0);
 - if (EFI_ERROR (Status)) {
 Print (L"fupdate: Cannot open Image file\n");return EFI_DEVICE_ERROR;- }
 - // Read Image header into buffer
 - Status = FileHandleRead (FileHandle, &HeaderSize, FileBuffer);
 - if (EFI_ERROR (Status)) {
 Print (L"fupdate: Cannot read Image file header\n");ShellCloseFile (&FileHandle);FreePool (FileBuffer);return EFI_DEVICE_ERROR;- }
 - Status = CheckImageHeader (FileBuffer);
 - if (EFI_ERROR(Status)) {
 - return EFI_DEVICE_ERROR;
 - }
 - FreePool (FileBuffer);
 - return EFI_SUCCESS;
 +}
+STATIC +CONST CHAR16 * +FileNameFromFilePath (
- CONST CHAR16 *RemoteFilePath
 - )
 +{
- CONST CHAR16 *Walker;
 - // Gather FileName from FilePath
 - Walker = RemoteFilePath + StrLen (RemoteFilePath);
 - while ((--Walker) >= RemoteFilePath) {
 - if ((*Walker == L'\') || (*Walker == L'/')) {
 break;- }
 - }
 - return (Walker + 1);
 +}
+STATIC +CONST CHAR16* +PrepareFile (
- LIST_ENTRY *CheckPackage
 - )
 +{
- EFI_STATUS Status;
 - CONST CHAR16 *ValueStr;
 - ValueStr = ShellCommandLineGetValue (CheckPackage, L"-f");
 - if (ValueStr == NULL) {
 - Print (L"fupdate: No LocalFilePath parameter!\n");
 - return NULL;
 - } else {
 - Status = ShellIsFile (ValueStr);
 - if (EFI_ERROR(Status)) {
 Print (L"fupdate: Wrong LocalFilePath parameter!\n");return NULL;- }
 - }
 - return ValueStr;
 +}
+CONST CHAR16 gShellFUpdateFileName[] = L"ShellCommand"; +EFI_HANDLE gShellFUpdateHiiHandle = NULL; +EFI_HANDLE gShellFUpdateHiiHandle;
+STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
- {L"help", TypeFlag},
 - {L"-t", TypeFlag},
 - {L"-f", TypeValue},
 - {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 +ShellCommandGetManFileNameFUpdate (
- VOID
 - )
 +{
- return gShellFUpdateFileName;
 +}
+VOID +FUpdateUsage (
- VOID
 - )
 +{
- Print (L"\nFirmware update command\n"
 "fupdate [-f <LocalFilePath>] [-t <Host> <RemoteFilePath>]\n\n""LocalFilePath - path to local firmware image file\n""Host - IP number of TFTP server\n""RemoteFilePath - path to firmware image file on TFTP server\n""Examples:\n""Update firmware from file fs2:Uefi.img\n"" fupdate -f fs2:Uefi.img\n""Update firmware from file path/Uefi.img TFTP server with IP address 10.0.0.200\n"" fupdate -t 10.0.0.200 path/Uefi.img\n"- );
 +}
+SHELL_STATUS +EFIAPI +ShellCommandRunFUpdate (
- IN EFI_HANDLE ImageHandle,
 - IN EFI_SYSTEM_TABLE *SystemTable
 - )
 +{
- EFI_STATUS Status;
 - LIST_ENTRY *CheckPackage;
 - CHAR16 *ProblemParam, *TftpCmd = NULL, *SfCmd = NULL;
 - CONST CHAR16 *RemoteFilePath, *Host, *FileToWrite;
 - UINT8 CmdLen;
 - BOOLEAN FileFlag, TftpFlag;
 - Status = ShellInitialize ();
 - if (EFI_ERROR (Status)) {
 - Print (L"fupdate: Error while initializinf Shell\n");
 - ASSERT_EFI_ERROR (Status);
 - return SHELL_ABORTED;
 - }
 - Status = ShellCommandLineParse (ParamList, &CheckPackage, &ProblemParam, TRUE);
 - if (EFI_ERROR (Status)) {
 - Print (L"Parse error!\n");
 - }
 - if (ShellCommandLineGetFlag (CheckPackage, L"help")) {
 - FUpdateUsage();
 - return EFI_SUCCESS;
 - }
 - FileFlag = ShellCommandLineGetFlag (CheckPackage, L"-f");
 - TftpFlag = ShellCommandLineGetFlag (CheckPackage, L"-t");
 - if (!FileFlag && !TftpFlag) {
 - Print (L"fupdate: Please specify -f or -t flag\n");
 - return SHELL_ABORTED;
 - } else if (FileFlag && !TftpFlag) {
 - // Prepare local file to be burned into flash
 - FileToWrite = PrepareFile (CheckPackage);
 - if (FileToWrite == NULL) {
 Print (L"fupdate: Error while preparing file for burn\n");return SHELL_ABORTED;- }
 - } else if (TftpFlag && !FileFlag) {
 - Host = ShellCommandLineGetRawValue (CheckPackage, 1);
 - if (Host == NULL) {
 Print (L"fupdate: No Host parameter!\n");return SHELL_ABORTED;- }
 - RemoteFilePath = ShellCommandLineGetRawValue (CheckPackage, 2);
 - if (RemoteFilePath == NULL) {
 Print (L"fupdate: No remote_file_path parameter!\n");return SHELL_ABORTED;- }
 - // Gather firmware image name from remote filepath
 - FileToWrite = FileNameFromFilePath (RemoteFilePath);
 - // Allocate buffer for tftp command string
 - CmdLen = StrSize (TFTP_CMD_STRING) + StrSize (SPACE_STRING) + StrSize (Host) +
 StrSize (RemoteFilePath);- TftpCmd = (CHAR16 *) AllocateZeroPool (CmdLen + sizeof(CHAR16));
 - if (TftpCmd == NULL) {
 Print (L"fupdate: Cannot allocate memory\n");return SHELL_ABORTED;- }
 - // Concatenate parameters and form tftp command string
 - StrCatS (TftpCmd, CmdLen / sizeof(CHAR16), TFTP_CMD_STRING);
 - StrCatS (TftpCmd, CmdLen / sizeof(CHAR16), (CHAR16 *)Host);
 - // Insert space
 - StrCatS (TftpCmd, CmdLen / sizeof(CHAR16), SPACE_STRING);
 - StrCatS (TftpCmd, CmdLen / sizeof(CHAR16), (CHAR16 *)RemoteFilePath);
 - RunShellCommand (TftpCmd, &Status);
 - FreePool (TftpCmd);
 - if (EFI_ERROR(Status)) {
 Print (L"fupdate: Error while performing tftp command\n");
So ... these are an awful lot of "fupdate" misspellings waiting to happen :)
Could you change this to a static string used throughout the file and L"%s: ..."?
return SHELL_ABORTED;- }
 - } else {
 - Print (L"fupdate: Both -f and -t flag specified, please choose one\n");
 - return SHELL_ABORTED;
 - }
 - // Check image checksum and magic
 - Status = CheckFirmwareImage (FileToWrite);
 - if (EFI_ERROR(Status)) {
 - Print (L"fupdate: Wrong firmware Image\n");
 - return SHELL_ABORTED;
 - }
 - // Probe spi bus
 - RunShellCommand (SF_PROBE_CMD_STRING, &Status);
 - if (EFI_ERROR(Status)) {
 - Print (L"fupdate: Error while performing sf probe\n");
 - return SHELL_ABORTED;
 - }
 - // Allocate buffer for sf command string
 - CmdLen = StrSize (SF_WRITE_CMD_STRING) + StrSize (FileToWrite) +
 - StrSize (SPACE_STRING) + StrSize (SF_LOAD_ADDR_STRING);
 - SfCmd = (CHAR16 *) AllocateZeroPool (CmdLen + sizeof(CHAR16));
 - if (SfCmd == NULL) {
 - Print (L"fupdate: Cannot allocate memory\n");
 - return SHELL_ABORTED;
 - }
 - // Concatenate parameters and form command string
 - StrCatS (SfCmd, CmdLen / sizeof(CHAR16), SF_WRITE_CMD_STRING);
 - StrCatS (SfCmd, CmdLen / sizeof(CHAR16), (CHAR16 *)FileToWrite);
 - StrCatS (SfCmd, CmdLen / sizeof(CHAR16), SPACE_STRING);
 - StrCatS (SfCmd, CmdLen / sizeof(CHAR16), SF_LOAD_ADDR_STRING);
 - // Update firmware image in flash
 - RunShellCommand (SfCmd, &Status);
 - FreePool (SfCmd);
 - if (EFI_ERROR(Status)) {
 - Print (L"fupdate: Error while performing sf update\n");
 - return SHELL_ABORTED;
 - }
 - return EFI_SUCCESS;
 +}
+EFI_STATUS +EFIAPI +FUpdateConstructor (
- IN EFI_HANDLE ImageHandle,
 - IN EFI_SYSTEM_TABLE *SystemTable
 - )
 +{
- EFI_STATUS Status;
 - gShellFUpdateHiiHandle = NULL;
 - gShellFUpdateHiiHandle = HiiAddPackages (
 &gShellFUpdateHiiGuid, gImageHandle,FUpdateShellStrings, NULL);- if (gShellFUpdateHiiHandle == NULL) {
 - Print (L"fupdate: Cannot add Hii package\n");
 - return EFI_DEVICE_ERROR;
 - }
 - Status = ShellCommandRegisterCommandName (
 L"fupdate", ShellCommandRunFUpdate, ShellCommandGetManFileNameFUpdate, 0,L"fupdate", TRUE , gShellFUpdateHiiHandle, STRING_TOKEN (STR_GET_HELP_FUPDATE));- if (EFI_ERROR(Status)) {
 - Print (L"fupdate: Error while registering command\n");
 - return SHELL_ABORTED;
 - }
 - return EFI_SUCCESS;
 +}
+EFI_STATUS +EFIAPI +FUpdateDestructor (
- IN EFI_HANDLE ImageHandle,
 - IN EFI_SYSTEM_TABLE *SystemTable
 - )
 +{
- if (gShellFUpdateHiiHandle != NULL) {
 - HiiRemovePackages (gShellFUpdateHiiHandle);
 - }
 - return EFI_SUCCESS;
 +} diff --git a/Applications/FirmwareUpdate/FUpdate.inf b/Applications/FirmwareUpdate/FUpdate.inf new file mode 100644 index 0000000..d7cd7ed --- /dev/null +++ b/Applications/FirmwareUpdate/FUpdate.inf @@ -0,0 +1,69 @@ +# 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. +#
+[Defines]
- INF_VERSION = 0x00010006
 - BASE_NAME = FUpdateShell
 
UefiShellFUpdateCommandLib
- FILE_GUID = 470292b2-926b-4ed8-8080-be7a260db627
 - MODULE_TYPE = UEFI_APPLICATION
 - VERSION_STRING = 0.1
 - LIBRARY_CLASS = NULL|UEFI_APPLICATION UEFI_DRIVER
 - CONSTRUCTOR = FUpdateConstructor
 - DESTRUCTOR = FUpdateDestructor
 
ShellFUpdateCommand*?
+[Sources]
- FUpdate.c
 - FUpdate.uni
 +[Packages]
- MdePkg/MdePkg.dec
 - ShellPkg/ShellPkg.dec
 - MdeModulePkg/MdeModulePkg.dec
 - OpenPlatformPkg/Platforms/Marvell/Marvell.dec
 +[LibraryClasses]
- UefiLib
 - UefiBootServicesTableLib
 - MemoryAllocationLib
 - BaseLib
 - BaseMemoryLib
 - DebugLib
 - ShellCommandLib
 - ShellLib
 - UefiLib
 - UefiRuntimeServicesTableLib
 - PcdLib
 - HiiLib
 - FileHandleLib
 +[Guids]
- gShellFUpdateHiiGuid
 diff --git a/Applications/FirmwareUpdate/FUpdate.uni b/Applications/FirmwareUpdate/FUpdate.uni new file mode 100644 index 0000000000000000000000000000000000000000..6143c0580f1d1ef8ce4fe619a1df1ce380adf2c0 GIT binary patch literal 5838 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 QHyJ;b`f6NX>FQbZ9}*T`00000
literal 0 HcmV?d00001
diff --git a/Platforms/Marvell/Marvell.dec b/Platforms/Marvell/Marvell.dec index 690062d..b17f23a 100644 --- a/Platforms/Marvell/Marvell.dec +++ b/Platforms/Marvell/Marvell.dec @@ -54,6 +54,7 @@ gShellEepromHiiGuid = { 0xb2f4c714, 0x147f, 0x4ff7, { 0x82, 0x1b, 0xce, 0x7b, 0x91, 0x7f, 0x5f, 0x2f } } gShellSfHiiGuid = { 0x03a67756, 0x8cde, 0x4638, { 0x82, 0x34, 0x4a, 0x0f, 0x6d, 0x58, 0x81, 0x39 } }
- gShellFUpdateHiiGuid = { 0x9b5d2176, 0x590a, 0x49db, { 0x89, 0x5d, 0x4a, 0x70, 0xfe, 0xad, 0xbe, 0x24 } }
 [PcdsFixedAtBuild.common]
#MPP
1.8.3.1