928ef08468e150b56dacca8da4df70657f0b3ced
[mirror_edk2.git] / ShellPkg / DynamicCommand / TftpDynamicCommand / TftpDynamicCommand.c
1 /** @file\r
2   Produce "tftp" shell dynamic command.\r
3 \r
4   Copyright (c) 2010 - 2017, Intel Corporation. All rights reserved. <BR>\r
5   Copyright (c) 2015, ARM Ltd. All rights reserved.<BR>\r
6 \r
7   This program and the accompanying materials\r
8   are licensed and made available under the terms and conditions of the BSD License\r
9   which accompanies this distribution.  The full text of the license may be found at\r
10   http://opensource.org/licenses/bsd-license.php\r
11 \r
12   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
13   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
14 \r
15 **/\r
16 #include "Tftp.h"\r
17 #include <Protocol/ShellDynamicCommand.h>\r
18 \r
19 /**\r
20   This is the shell command handler function pointer callback type.  This\r
21   function handles the command when it is invoked in the shell.\r
22 \r
23   @param[in] This                   The instance of the EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL.\r
24   @param[in] SystemTable            The pointer to the system table.\r
25   @param[in] ShellParameters        The parameters associated with the command.\r
26   @param[in] Shell                  The instance of the shell protocol used in the context\r
27                                     of processing this command.\r
28 \r
29   @return EFI_SUCCESS               the operation was sucessful\r
30   @return other                     the operation failed.\r
31 **/\r
32 SHELL_STATUS\r
33 EFIAPI\r
34 TftpCommandHandler (\r
35   IN EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL    *This,\r
36   IN EFI_SYSTEM_TABLE                      *SystemTable,\r
37   IN EFI_SHELL_PARAMETERS_PROTOCOL         *ShellParameters,\r
38   IN EFI_SHELL_PROTOCOL                    *Shell\r
39   )\r
40 {\r
41   gEfiShellParametersProtocol = ShellParameters;\r
42   return RunTftp (gImageHandle, SystemTable);\r
43 }\r
44 \r
45 /**\r
46   This is the command help handler function pointer callback type.  This\r
47   function is responsible for displaying help information for the associated\r
48   command.\r
49 \r
50   @param[in] This                   The instance of the EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL.\r
51   @param[in] Language               The pointer to the language string to use.\r
52 \r
53   @return string                    Pool allocated help string, must be freed by caller\r
54 **/\r
55 CHAR16 *\r
56 EFIAPI\r
57 TftpCommandGetHelp (\r
58   IN EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL    *This,\r
59   IN CONST CHAR8                           *Language\r
60   )\r
61 {\r
62   return HiiGetString (mTftpHiiHandle, STRING_TOKEN (STR_GET_HELP_TFTP), Language);\r
63 }\r
64 \r
65 EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL mTftpDynamicCommand = {\r
66   L"tftp",\r
67   TftpCommandHandler,\r
68   TftpCommandGetHelp\r
69 };\r
70 \r
71 /**\r
72   Entry point of Tftp Dynamic Command.\r
73 \r
74   Produce the DynamicCommand protocol to handle "tftp" command.\r
75 \r
76   @param ImageHandle            The image handle of the process.\r
77   @param SystemTable            The EFI System Table pointer.\r
78 \r
79   @retval EFI_SUCCESS           Tftp command is executed sucessfully.\r
80   @retval EFI_ABORTED           HII package was failed to initialize.\r
81   @retval others                Other errors when executing tftp command.\r
82 **/\r
83 EFI_STATUS\r
84 EFIAPI\r
85 TftpCommandInitialize (\r
86   IN EFI_HANDLE               ImageHandle,\r
87   IN EFI_SYSTEM_TABLE         *SystemTable\r
88   )\r
89 {\r
90   EFI_STATUS                  Status;\r
91   mTftpHiiHandle = InitializeHiiPackage (ImageHandle);\r
92   if (mTftpHiiHandle == NULL) {\r
93     return EFI_ABORTED;\r
94   }\r
95 \r
96   Status = gBS->InstallProtocolInterface (\r
97                   &ImageHandle,\r
98                   &gEfiShellDynamicCommandProtocolGuid,\r
99                   EFI_NATIVE_INTERFACE,\r
100                   &mTftpDynamicCommand\r
101                   );\r
102   ASSERT_EFI_ERROR (Status);\r
103   return Status;\r
104 }\r
105 \r
106 /**\r
107   Tftp driver unload handler.\r
108 \r
109   @param ImageHandle            The image handle of the process.\r
110 \r
111   @retval EFI_SUCCESS           The image is unloaded.\r
112   @retval Others                Failed to unload the image.\r
113 **/\r
114 EFI_STATUS\r
115 EFIAPI\r
116 TftpUnload (\r
117   IN EFI_HANDLE               ImageHandle\r
118 )\r
119 {\r
120   EFI_STATUS                  Status;\r
121   Status = gBS->UninstallProtocolInterface (\r
122                   ImageHandle,\r
123                   &gEfiShellDynamicCommandProtocolGuid,\r
124                   &mTftpDynamicCommand\r
125                   );\r
126   if (EFI_ERROR (Status)) {\r
127     return Status;\r
128   }\r
129   HiiRemovePackages (mTftpHiiHandle);\r
130   return EFI_SUCCESS;\r
131 }\r