]> git.proxmox.com Git - mirror_edk2.git/blob - ShellPkg/Library/UefiShellDriver1CommandsLib/UefiShellDriver1CommandsLib.c
udk2010.up2.shell initial release.
[mirror_edk2.git] / ShellPkg / Library / UefiShellDriver1CommandsLib / UefiShellDriver1CommandsLib.c
1 /** @file
2 Main file for NULL named library for level 1 shell command functions.
3
4 Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this 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 "UefiShellDriver1CommandsLib.h"
16
17 STATIC CONST CHAR16 mFileName[] = L"Driver1Commands";
18 EFI_HANDLE gShellDriver1HiiHandle = NULL;
19 CONST EFI_GUID gShellDriver1HiiGuid = \
20 { \
21 0xaf0b742, 0x63ec, 0x45bd, {0x8d, 0xb6, 0x71, 0xad, 0x7f, 0x2f, 0xe8, 0xe8} \
22 };
23
24
25 CONST CHAR16*
26 EFIAPI
27 ShellCommandGetManFileNameDriver1 (
28 VOID
29 ){
30 return (mFileName);
31 }
32
33 /**
34 Constructor for the Shell Driver1 Commands library.
35
36 @param ImageHandle the image handle of the process
37 @param SystemTable the EFI System Table pointer
38
39 @retval EFI_SUCCESS the shell command handlers were installed sucessfully
40 @retval EFI_UNSUPPORTED the shell level required was not found.
41 **/
42 EFI_STATUS
43 EFIAPI
44 UefiShellDriver1CommandsLibConstructor (
45 IN EFI_HANDLE ImageHandle,
46 IN EFI_SYSTEM_TABLE *SystemTable
47 ) {
48 //
49 // check or bit of the profiles mask
50 //
51 if (PcdGet8(PcdShellProfileMask) && BIT0 == 0) {
52 return (EFI_UNSUPPORTED);
53 }
54
55 //
56 // install our shell command handlers that are always installed
57 //
58 ShellCommandRegisterCommandName(L"connect", ShellCommandRunConnect , ShellCommandGetManFileNameDriver1, 0, L"Driver1", TRUE);
59 ShellCommandRegisterCommandName(L"devices", ShellCommandRunDevices , ShellCommandGetManFileNameDriver1, 0, L"Driver1", TRUE);
60 ShellCommandRegisterCommandName(L"openinfo", ShellCommandRunOpenInfo , ShellCommandGetManFileNameDriver1, 0, L"Driver1", TRUE);
61 /*
62 ShellCommandRegisterCommandName(L"devtree", ShellCommandRunDevTree , ShellCommandGetManFileNameDriver1, 0, L"Driver1", TRUE);
63 ShellCommandRegisterCommandName(L"dh", ShellCommandRunDH , ShellCommandGetManFileNameDriver1, 0, L"Driver1", TRUE);
64 ShellCommandRegisterCommandName(L"disconnect", ShellCommandRunDisconnect , ShellCommandGetManFileNameDriver1, 0, L"Driver1", TRUE);
65 ShellCommandRegisterCommandName(L"drivers", ShellCommandRunDrivers , ShellCommandGetManFileNameDriver1, 0, L"Driver1", TRUE);
66 ShellCommandRegisterCommandName(L"drvcfg", ShellCommandRunDrvCfg , ShellCommandGetManFileNameDriver1, 0, L"Driver1", TRUE);
67 ShellCommandRegisterCommandName(L"drvdiag", ShellCommandRunDrvDiag , ShellCommandGetManFileNameDriver1, 0, L"Driver1", TRUE);
68 ShellCommandRegisterCommandName(L"reconnect", ShellCommandRunReconnect , ShellCommandGetManFileNameDriver1, 0, L"Driver1", TRUE);
69 ShellCommandRegisterCommandName(L"unload", ShellCommandRunUnload , ShellCommandGetManFileNameDriver1, 0, L"Driver1", TRUE);
70 */
71
72 //
73 // install the HII stuff.
74 //
75 gShellDriver1HiiHandle = HiiAddPackages (&gShellDriver1HiiGuid, gImageHandle, UefiShellDriver1CommandsLibStrings, NULL);
76 if (gShellDriver1HiiHandle == NULL) {
77 return (EFI_DEVICE_ERROR);
78 }
79
80 return (EFI_SUCCESS);
81 }
82
83 /**
84 Destructory for the library. free any resources.
85 **/
86 EFI_STATUS
87 EFIAPI
88 UefiShellDriver1CommandsLibDestructor (
89 IN EFI_HANDLE ImageHandle,
90 IN EFI_SYSTEM_TABLE *SystemTable
91 )
92 {
93 if (gShellDriver1HiiHandle != NULL) {
94 HiiRemovePackages(gShellDriver1HiiHandle);
95 }
96 return (EFI_SUCCESS);
97 }
98
99 EFI_HANDLE*
100 EFIAPI
101 GetHandleListByPotocol (
102 IN CONST EFI_GUID *ProtocolGuid
103 ){
104 EFI_HANDLE *HandleList;
105 UINTN Size;
106 EFI_STATUS Status;
107
108 Size = 0;
109 HandleList = NULL;
110
111 //
112 // We cannot use LocateHandleBuffer since we need that NULL item on the ends of the list!
113 //
114 if (ProtocolGuid == NULL) {
115 Status = gBS->LocateHandle(AllHandles, NULL, NULL, &Size, HandleList);
116 if (Status == EFI_BUFFER_TOO_SMALL) {
117 HandleList = AllocatePool(Size + sizeof(EFI_HANDLE));
118 Status = gBS->LocateHandle(AllHandles, NULL, NULL, &Size, HandleList);
119 HandleList[Size/sizeof(EFI_HANDLE)] = NULL;
120 }
121 } else {
122 Status = gBS->LocateHandle(ByProtocol, (EFI_GUID*)ProtocolGuid, NULL, &Size, HandleList);
123 if (Status == EFI_BUFFER_TOO_SMALL) {
124 HandleList = AllocatePool(Size + sizeof(EFI_HANDLE));
125 Status = gBS->LocateHandle(ByProtocol, (EFI_GUID*)ProtocolGuid, NULL, &Size, HandleList);
126 HandleList[Size/sizeof(EFI_HANDLE)] = NULL;
127 }
128 }
129 if (EFI_ERROR(Status)) {
130 if (HandleList != NULL) {
131 FreePool(HandleList);
132 }
133 return (NULL);
134 }
135 return (HandleList);
136 }
137