1 /** @file
2 *
3 *  Copyright (c) 2014, ARM Ltd. All rights reserved.<BR>
4 *
5 *  This program and the accompanying materials are licensed and made available
6 *  under the terms and conditions of the BSD License which accompanies this
7 *  distribution.  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 #include <Uefi.h>
16 
17 #include <Library/BaseLib.h>
18 #include <Library/DebugLib.h>
19 #include <Library/UefiLib.h>
20 #include <Library/ArmShellCmdLib.h>
21 
22 #include "ArmShellCmdRunAxf.h"
23 
24 EFI_HANDLE gRunAxfHiiHandle = NULL;
25 
26 #define RUNAXF_HII_GUID \
27   { \
28   0xf5a6413b, 0x78d5, 0x448e, { 0xa2, 0x15, 0x22, 0x82, 0x8e, 0xbc, 0x61, 0x61 } \
29   }
30 
31 EFI_GUID gRunAxfHiiGuid = RUNAXF_HII_GUID;
32 
33 static EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL mShellDynCmdProtocolRunAxf = {
34     L"runaxf",                             // *CommandName
35     ShellDynCmdRunAxfHandler,              // Handler
36     ShellDynCmdRunAxfGetHelp               // GetHelp
37 };
38 
39 EFI_STATUS
ShellDynCmdRunAxfInstall(IN EFI_HANDLE ImageHandle)40 ShellDynCmdRunAxfInstall (
41   IN EFI_HANDLE             ImageHandle
42   )
43 {
44   EFI_STATUS Status;
45 
46   // Register our shell command
47   Status = gBS->InstallMultipleProtocolInterfaces (&ImageHandle,
48                  &gEfiShellDynamicCommandProtocolGuid,
49                  &mShellDynCmdProtocolRunAxf,
50                  NULL);
51   if (EFI_ERROR (Status)) {
52     return Status;
53   }
54 
55   // Load the manual page for our command
56   //
57   // 3rd parameter 'HII strings array' must be name of .uni strings file
58   // followed by 'Strings', e.g. mycommands.uni must be specified as
59   // 'mycommandsStrings' because the build Autogen process defines this as a
60   // string array for the strings in your .uni file.  Examine your Build folder
61   // under your package's DEBUG folder and you will find it defined in a
62   // xxxStrDefs.h file.
63   //
64   gRunAxfHiiHandle = HiiAddPackages (&gRunAxfHiiGuid, ImageHandle,
65                                      ArmShellCmdRunAxfStrings, NULL);
66   if (gRunAxfHiiHandle == NULL) {
67     return EFI_UNSUPPORTED;
68   }
69 
70   return EFI_SUCCESS;
71 }
72 
73 
74 EFI_STATUS
ShellDynCmdRunAxfUninstall(IN EFI_HANDLE ImageHandle)75 ShellDynCmdRunAxfUninstall (
76   IN EFI_HANDLE             ImageHandle
77   )
78 {
79 
80   EFI_STATUS Status;
81 
82   if (gRunAxfHiiHandle != NULL) {
83     HiiRemovePackages (gRunAxfHiiHandle);
84   }
85 
86   Status = gBS->UninstallMultipleProtocolInterfaces (ImageHandle,
87                  &gEfiShellDynamicCommandProtocolGuid,
88                  &mShellDynCmdProtocolRunAxf,
89                  NULL);
90   if (EFI_ERROR (Status)) {
91     return Status;
92   }
93 
94   return EFI_SUCCESS;
95 }
96