From 680742607132a7733880407453b5f792699d7143 Mon Sep 17 00:00:00 2001 From: Ronald Cron Date: Wed, 15 Jul 2015 15:39:53 +0000 Subject: ShellPkg: Add optional 'tftp' EFI Shell command This 'tftp' command allows to download a file from a TFTP server. A specific network interface can be chosen in case there are multiple interfaces. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ronald Cron Reviewed-by: Olivier Martin Reviewed-by: Jaben Carsey git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18015 6f19259b-4bc3-4df7-8a09-765794883524 --- .../UefiShellTftpCommandLib.c | 97 ++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 ShellPkg/Library/UefiShellTftpCommandLib/UefiShellTftpCommandLib.c (limited to 'ShellPkg/Library/UefiShellTftpCommandLib/UefiShellTftpCommandLib.c') diff --git a/ShellPkg/Library/UefiShellTftpCommandLib/UefiShellTftpCommandLib.c b/ShellPkg/Library/UefiShellTftpCommandLib/UefiShellTftpCommandLib.c new file mode 100644 index 0000000000..22c81b8d2a --- /dev/null +++ b/ShellPkg/Library/UefiShellTftpCommandLib/UefiShellTftpCommandLib.c @@ -0,0 +1,97 @@ +/** @file + Main file for NULL named library for 'tftp' Shell command functions. + + Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.
+ Copyright (c) 2015, ARM Ltd. All rights reserved.
+ + This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +**/ +#include "UefiShellTftpCommandLib.h" + +CONST CHAR16 gShellTftpFileName[] = L"ShellCommand"; +EFI_HANDLE gShellTftpHiiHandle = NULL; + +/** + Return the file name of the help text file if not using HII. + + @return The string pointer to the file name. +**/ +CONST CHAR16* +EFIAPI +ShellCommandGetManFileNameTftp ( + VOID + ) +{ + return gShellTftpFileName; +} + +/** + Constructor for the Shell Tftp Command library. + + Install the handlers for Tftp UEFI Shell command. + + @param ImageHandle The image handle of the process. + @param SystemTable The EFI System Table pointer. + + @retval EFI_SUCCESS The Shell command handlers were installed sucessfully. + @retval EFI_UNSUPPORTED The Shell level required was not found. +**/ +EFI_STATUS +EFIAPI +ShellTftpCommandLibConstructor ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + gShellTftpHiiHandle = NULL; + + // + // check our bit of the profiles mask + // + if ((PcdGet8 (PcdShellProfileMask) & BIT3) == 0) { + return EFI_SUCCESS; + } + + gShellTftpHiiHandle = HiiAddPackages ( + &gShellTftpHiiGuid, gImageHandle, + UefiShellTftpCommandLibStrings, NULL + ); + if (gShellTftpHiiHandle == NULL) { + return EFI_DEVICE_ERROR; + } + // + // Install our Shell command handler + // + ShellCommandRegisterCommandName ( + L"tftp", ShellCommandRunTftp, ShellCommandGetManFileNameTftp, 0, + L"tftp", TRUE , gShellTftpHiiHandle, STRING_TOKEN (STR_GET_HELP_TFTP) + ); + + return EFI_SUCCESS; +} + +/** + Destructor for the library. free any resources. + + @param ImageHandle The image handle of the process. + @param SystemTable The EFI System Table pointer. +**/ +EFI_STATUS +EFIAPI +ShellTftpCommandLibDestructor ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + if (gShellTftpHiiHandle != NULL) { + HiiRemovePackages (gShellTftpHiiHandle); + } + return EFI_SUCCESS; +} -- cgit v1.2.3