+++ /dev/null
-/** @file\r
- Main file for connect shell Driver1 function.\r
-\r
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
- This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#include "UefiShellDriver1CommandsLib.h"\r
-#include <Guid/GlobalVariable.h>\r
-#include <Guid/ConsoleInDevice.h>\r
-#include <Guid/ConsoleOutDevice.h>\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-ConnectControllers (\r
- IN CONST EFI_HANDLE ControllerHandle,\r
- IN CONST EFI_HANDLE DriverHandle,\r
- IN CONST BOOLEAN Recursive,\r
- IN CONST BOOLEAN Output\r
- ){\r
- EFI_STATUS Status;\r
- EFI_HANDLE *ControllerHandleList;\r
- EFI_HANDLE *DriverHandleList;\r
- EFI_HANDLE *HandleWalker;\r
-\r
- ControllerHandleList = NULL;\r
- Status = EFI_NOT_FOUND;\r
-\r
- //\r
- // If we have a single handle to connect make that a 'list'\r
- //\r
- if (DriverHandle == NULL) {\r
- DriverHandleList = NULL;\r
- } else {\r
- DriverHandleList = AllocatePool(2*sizeof(EFI_HANDLE));\r
- DriverHandleList[0] = DriverHandle;\r
- DriverHandleList[1] = NULL;\r
- }\r
-\r
- //\r
- // do we connect all controllers (with a loop) or a single one...\r
- // This is where we call the gBS->ConnectController function.\r
- //\r
- if (ControllerHandle == NULL) {\r
- ControllerHandleList = GetHandleListByPotocol(&gEfiDevicePathProtocolGuid);\r
- for (HandleWalker = ControllerHandleList\r
- ; HandleWalker != NULL && *HandleWalker != NULL\r
- ; HandleWalker++\r
- ){\r
- Status = gBS->ConnectController(*HandleWalker, DriverHandleList, NULL, Recursive);\r
- if (Output) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN(STR_CON_RESULT), gShellDriver1HiiHandle, *HandleWalker, Status);\r
- }\r
- }\r
- } else {\r
- Status = gBS->ConnectController(ControllerHandle, DriverHandleList, NULL, Recursive);\r
- ASSERT(Output == FALSE);\r
- }\r
-\r
- //\r
- // Free any memory we allocated.\r
- //\r
- if (ControllerHandleList != NULL) {\r
- FreePool(ControllerHandleList);\r
- }\r
- if (DriverHandleList != NULL) {\r
- FreePool(DriverHandleList);\r
- }\r
- return (Status);\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-ConnectFromDevPaths (\r
- IN CONST CHAR16 *Key\r
- ){\r
- EFI_DEVICE_PATH_PROTOCOL *DevPath;\r
- EFI_DEVICE_PATH_PROTOCOL *DevPathWalker;\r
- UINTN Length;\r
- EFI_HANDLE Handle;\r
- EFI_STATUS Status;\r
-\r
- DevPath = NULL;\r
- Length = 0;\r
-\r
- //\r
- // Get the DevicePath buffer from the variable...\r
- //\r
- Status = gRT->GetVariable((CHAR16*)Key, (EFI_GUID*)&gEfiGlobalVariableGuid, NULL, &Length, DevPath);\r
- if (Status == EFI_BUFFER_TOO_SMALL) {\r
- DevPath = AllocatePool(Length);\r
- Status = gRT->GetVariable((CHAR16*)Key, (EFI_GUID*)&gEfiGlobalVariableGuid, NULL, &Length, DevPath);\r
- }\r
-\r
- //\r
- // walk the list of devices and connect them\r
- //\r
- for (DevPathWalker = DevPath\r
- ; DevPathWalker < (DevPath + Length) && !EFI_ERROR(Status) && DevPath != NULL\r
- ; DevPathWalker += GetDevicePathSize(DevPathWalker)\r
- ){\r
- //\r
- // get the correct handle from a given device path\r
- //\r
- if (StrCmp(Key, L"ConInDev") == 0) {\r
- Status = gBS->LocateDevicePath((EFI_GUID*)&gEfiConsoleInDeviceGuid, &DevPathWalker, &Handle);\r
- } else if (StrCmp(Key, L"ConOutDev") == 0) {\r
- Status = gBS->LocateDevicePath((EFI_GUID*)&gEfiConsoleOutDeviceGuid, &DevPathWalker, &Handle);\r
- } else {\r
- Handle = NULL;\r
- Status = EFI_INVALID_PARAMETER;\r
- ASSERT(FALSE);\r
- }\r
- if (!EFI_ERROR(Status)) {\r
- Status = ConnectControllers(Handle, NULL, FALSE, FALSE);\r
- }\r
- }\r
-\r
- if (DevPath != NULL) {\r
- FreePool(DevPath);\r
- }\r
- return (Status);\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-ConvertAndConnectControllers (\r
- IN CONST CHAR16 *StringHandle1,\r
- IN CONST CHAR16 *StringHandle2 OPTIONAL,\r
- IN CONST BOOLEAN Recursive,\r
- IN CONST BOOLEAN Output\r
- ){\r
- EFI_HANDLE Handle1;\r
- EFI_HANDLE Handle2;\r
-\r
- //\r
- // Convert the command line parameters to HANDLES. They must be in HEX according to spec.\r
- //\r
- if (StringHandle1 != NULL) {\r
- Handle1 = (EFI_HANDLE)StrHexToUintn(StringHandle1);\r
- } else {\r
- Handle1 = NULL;\r
- }\r
- if (StringHandle2 != NULL) {\r
- Handle2 = (EFI_HANDLE)StrHexToUintn(StringHandle2);\r
- } else {\r
- Handle2 = NULL;\r
- }\r
-\r
- //\r
- // if only one is NULL verify it's the proper one...\r
- //\r
- if ( (Handle1 == NULL && Handle2 != NULL)\r
- || (Handle1 != NULL && Handle2 == NULL)\r
- ){\r
- //\r
- // Figure out which one should be NULL and move the handle to the right place.\r
- // If Handle1 is NULL then test Handle2 and vise versa.\r
- // The one that DOES has driver binding must be Handle2\r
- //\r
- if (Handle1 == NULL) {\r
- if (EFI_ERROR(gBS->OpenProtocol(Handle2, &gEfiDriverBindingProtocolGuid, NULL, NULL, gImageHandle, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) {\r
- // swap\r
- Handle1 = Handle2;\r
- Handle2 = NULL;\r
- } else {\r
- // We're all good...\r
- }\r
- } else {\r
- if (EFI_ERROR(gBS->OpenProtocol(Handle1, &gEfiDriverBindingProtocolGuid, NULL, NULL, gImageHandle, EFI_OPEN_PROTOCOL_TEST_PROTOCOL))) {\r
- // We're all good...\r
- } else {\r
- // swap\r
- Handle2 = Handle1;\r
- Handle1 = NULL;\r
- }\r
- }\r
- }\r
-\r
- return (ConnectControllers(Handle1, Handle2, Recursive, Output));\r
-}\r
-\r
-STATIC CONST SHELL_PARAM_ITEM ParamList[] = {\r
- {L"-c", TypeFlag},\r
- {L"-r", TypeFlag},\r
- {NULL, TypeMax}\r
- };\r
-\r
-SHELL_STATUS\r
-EFIAPI\r
-ShellCommandRunConnect (\r
- VOID *RESERVED\r
- ) {\r
- EFI_STATUS Status;\r
- LIST_ENTRY *Package;\r
- CHAR16 *ProblemParam;\r
- SHELL_STATUS ShellStatus;\r
-\r
- ShellStatus = SHELL_SUCCESS;\r
-\r
- //\r
- // initialize the shell lib (we must be in non-auto-init...)\r
- //\r
- Status = ShellInitialize();\r
- ASSERT_EFI_ERROR(Status);\r
-\r
- Status = CommandInit();\r
- ASSERT_EFI_ERROR(Status);\r
-\r
- //\r
- // parse the command line\r
- //\r
- Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);\r
- if EFI_ERROR(Status) {\r
- if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDriver1HiiHandle, ProblemParam);\r
- FreePool(ProblemParam);\r
- ShellStatus = SHELL_INVALID_PARAMETER;\r
- } else {\r
- ASSERT(FALSE);\r
- }\r
- } else {\r
- //\r
- // if more than 2 'value' parameters (plus the name one) or either -r or -c with any value parameters we have too many parameters\r
- //\r
- if ((ShellCommandLineGetCount() > 3)\r
- ||((ShellCommandLineGetFlag(Package, L"-r") != FALSE || ShellCommandLineGetFlag(Package, L"-c") != FALSE) && ShellCommandLineGetCount()!=0)\r
- ){\r
- //\r
- // error for too many parameters\r
- //\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDriver1HiiHandle);\r
- ShellStatus = SHELL_INVALID_PARAMETER;\r
- } else if (ShellCommandLineGetFlag(Package, L"-c") != FALSE) {\r
- //\r
- // do the conin and conout from EFI variables\r
- // if the first fails dont 'loose' the error\r
- //\r
- Status = ConnectFromDevPaths(L"ConInDev");\r
- if (EFI_ERROR(Status)) {\r
- ConnectFromDevPaths(L"ConOutDev");\r
- } else {\r
- Status = ConnectFromDevPaths(L"ConOutDev");\r
- }\r
- ShellStatus = Status & (~MAX_BIT);\r
- } else {\r
- //\r
- // 0, 1, or 2 specific handles and possibly recursive\r
- //\r
- if (ShellCommandLineGetRawValue(Package, 1) != NULL && CommandLibGetHandleValue(StrHexToUintn(ShellCommandLineGetRawValue(Package, 1))) == NULL){\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, ShellCommandLineGetRawValue(Package, 1));\r
- ShellStatus = SHELL_INVALID_PARAMETER;\r
- } else if (ShellCommandLineGetRawValue(Package, 2) != NULL && CommandLibGetHandleValue(StrHexToUintn(ShellCommandLineGetRawValue(Package, 2))) == NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, ShellCommandLineGetRawValue(Package, 2));\r
- ShellStatus = SHELL_INVALID_PARAMETER;\r
- } else {\r
- Status = ConvertAndConnectControllers(ShellCommandLineGetRawValue(Package, 1), ShellCommandLineGetRawValue(Package, 2), ShellCommandLineGetFlag(Package, L"-r"), (BOOLEAN)(ShellCommandLineGetCount()!=0));\r
- ShellStatus = Status & (~MAX_BIT);\r
- }\r
- }\r
-\r
- ShellCommandLineFreeVarList (Package);\r
- }\r
- return (ShellStatus);\r
-}\r
-\r
+++ /dev/null
-/** @file\r
- Main file for devices shell Driver1 function.\r
-\r
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
- This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#include "UefiShellDriver1CommandsLib.h"\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-GetDeviceHandleInfo (\r
- IN EFI_HANDLE TheHandle,\r
- IN CHAR16 *Type,\r
- IN BOOLEAN *Cfg,\r
- IN BOOLEAN *Diag,\r
- IN UINT8 *Parents,\r
- IN UINT8 *Devices,\r
- IN UINT8 *Children,\r
- OUT CHAR16 **Name,\r
- IN CONST CHAR8 *Language\r
- ){\r
- *Name = NULL;\r
-\r
- gEfiShellProtocol->GetDeviceName(TheHandle, EFI_DEVICE_NAME_USE_COMPONENT_NAME|EFI_DEVICE_NAME_USE_DEVICE_PATH, (CHAR8*)Language, Name);\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
- return (EFI_SUCCESS);\r
-}\r
-\r
-STATIC CONST SHELL_PARAM_ITEM ParamList[] = {\r
- {L"-l", TypeValue},\r
- {NULL, TypeMax}\r
- };\r
-\r
-SHELL_STATUS\r
-EFIAPI\r
-ShellCommandRunDevices (\r
- VOID *RESERVED\r
- ) {\r
- EFI_STATUS Status;\r
- LIST_ENTRY *Package;\r
- CHAR16 *ProblemParam;\r
- SHELL_STATUS ShellStatus;\r
- CHAR8 *Language;\r
- EFI_HANDLE *HandleList;\r
- EFI_HANDLE *HandleListWalker;\r
- CHAR16 Type;\r
- BOOLEAN Cfg;\r
- BOOLEAN Diag;\r
- UINT8 Parents;\r
- UINT8 Devices;\r
- UINT8 Children;\r
- CHAR16 *Name;\r
-\r
- ShellStatus = SHELL_SUCCESS;\r
- Language = NULL;\r
-\r
- //\r
- // initialize the shell lib (we must be in non-auto-init...)\r
- //\r
- Status = ShellInitialize();\r
- ASSERT_EFI_ERROR(Status);\r
-\r
- Status = CommandInit();\r
- ASSERT_EFI_ERROR(Status);\r
-\r
- //\r
- // parse the command line\r
- //\r
- Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);\r
- if EFI_ERROR(Status) {\r
- if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDriver1HiiHandle, ProblemParam);\r
- FreePool(ProblemParam);\r
- ShellStatus = SHELL_INVALID_PARAMETER;\r
- } else {\r
- ASSERT(FALSE);\r
- }\r
- } else {\r
- //\r
- // if more than 0 'value' parameters we have too many parameters\r
- //\r
- if (ShellCommandLineGetRawValue(Package, 1) != NULL){\r
- //\r
- // error for too many parameters\r
- //\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDriver1HiiHandle);\r
- ShellStatus = SHELL_INVALID_PARAMETER;\r
- } else {\r
- //\r
- // get the language if necessary\r
- //\r
- if (ShellCommandLineGetFlag(Package, L"-l") != FALSE) {\r
- Language = AllocateZeroPool(StrSize(ShellCommandLineGetValue(Package, L"-l")));\r
- AsciiSPrint(Language, StrSize(ShellCommandLineGetValue(Package, L"-l")), "%S", ShellCommandLineGetValue(Package, L"-l"));\r
- }\r
-\r
- //\r
- // Print Header\r
- //\r
- ShellPrintHiiEx(-1, -1, Language, STRING_TOKEN (STR_DEVICES_HEADER_LINES), gShellDriver1HiiHandle);\r
-\r
- //\r
- // loop through each handle\r
- //\r
- HandleList = GetHandleListByPotocol(NULL);\r
- ASSERT(HandleList != NULL);\r
- for (HandleListWalker = HandleList\r
- ; HandleListWalker != NULL && *HandleListWalker != NULL && !EFI_ERROR(Status)\r
- ; HandleListWalker++\r
- ){\r
- //\r
- // get all the info on each handle\r
- //\r
- Status = GetDeviceHandleInfo(*HandleListWalker, &Type, &Cfg, &Diag, &Parents, &Devices, &Children, &Name, Language);\r
- if (Parents != 0 || Devices != 0 || Children != 0) {\r
- ShellPrintHiiEx(\r
- -1,\r
- -1,\r
- Language,\r
- STRING_TOKEN (STR_DEVICES_ITEM_LINE),\r
- gShellDriver1HiiHandle,\r
- *HandleListWalker,\r
- Type,\r
- Cfg!=FALSE?L'X':L'-',\r
- Diag!=FALSE?L'X':L'-',\r
- Parents,\r
- Devices,\r
- Children,\r
- Name);\r
- }\r
- if (Name != NULL) {\r
- FreePool(Name);\r
- }\r
- }\r
-\r
- if (HandleList != NULL) {\r
- FreePool(HandleList);\r
- }\r
- }\r
- ShellCommandLineFreeVarList (Package);\r
- }\r
- return (ShellStatus);\r
-}\r
-\r
+++ /dev/null
-/** @file\r
- Main file for OpenInfo shell Driver1 function.\r
-\r
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
- This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#include "UefiShellDriver1CommandsLib.h"\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-TraverseHandleDatabase (\r
- IN CONST EFI_HANDLE DriverBindingHandle OPTIONAL,\r
- IN CONST EFI_HANDLE ControllerHandle OPTIONAL,\r
- IN UINTN *HandleCount,\r
- OUT EFI_HANDLE **HandleBuffer,\r
- OUT UINTN **HandleType\r
- ){\r
- EFI_STATUS Status;\r
- UINTN HandleIndex;\r
- EFI_GUID **ProtocolGuidArray;\r
- UINTN ArrayCount;\r
- UINTN ProtocolIndex;\r
- EFI_OPEN_PROTOCOL_INFORMATION_ENTRY *OpenInfo;\r
- UINTN OpenInfoCount;\r
- UINTN OpenInfoIndex;\r
- UINTN ChildIndex;\r
-\r
- ASSERT(HandleCount != NULL);\r
- ASSERT(HandleBuffer != NULL);\r
- ASSERT(HandleType != NULL);\r
- ASSERT(DriverBindingHandle != NULL || ControllerHandle != NULL);\r
-\r
- *HandleCount = 0;\r
- *HandleBuffer = NULL;\r
- *HandleType = NULL;\r
-\r
- //\r
- // Retrieve the list of all handles from the handle database\r
- //\r
- Status = gBS->LocateHandleBuffer (\r
- AllHandles,\r
- NULL,\r
- NULL,\r
- HandleCount,\r
- HandleBuffer\r
- );\r
- if (EFI_ERROR (Status)) {\r
- return (Status);\r
- }\r
-\r
- *HandleType = AllocateZeroPool (*HandleCount * sizeof (UINTN));\r
- ASSERT(*HandleType != NULL);\r
-\r
- for (HandleIndex = 0; HandleIndex < *HandleCount; HandleIndex++) {\r
- //\r
- // Retrieve the list of all the protocols on each handle\r
- //\r
- Status = gBS->ProtocolsPerHandle (\r
- (*HandleBuffer)[HandleIndex],\r
- &ProtocolGuidArray,\r
- &ArrayCount\r
- );\r
- if (!EFI_ERROR (Status)) {\r
-\r
- for (ProtocolIndex = 0; ProtocolIndex < ArrayCount; ProtocolIndex++) {\r
-\r
- //\r
- // Set the bit describing what this handle has\r
- //\r
- if (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiLoadedImageProtocolGuid) != FALSE) {\r
- (*HandleType)[HandleIndex] |= HANDLE_RELATIONSHIP_IMAGE_HANDLE;\r
- } else if (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiDriverBindingProtocolGuid) != FALSE) {\r
- (*HandleType)[HandleIndex] |= HANDLE_RELATIONSHIP_DRIVER_BINDING_HANDLE;\r
- } else if (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiDriverConfiguration2ProtocolGuid) != FALSE) {\r
- (*HandleType)[HandleIndex] |= HANDLE_RELATIONSHIP_DRIVER_CONFIGURATION_HANDLE;\r
- } else if (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiDriverConfigurationProtocolGuid) != FALSE) {\r
- (*HandleType)[HandleIndex] |= HANDLE_RELATIONSHIP_DRIVER_CONFIGURATION_HANDLE;\r
- } else if (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiDriverDiagnostics2ProtocolGuid) != FALSE) {\r
- (*HandleType)[HandleIndex] |= HANDLE_RELATIONSHIP_DRIVER_DIAGNOSTICS_HANDLE;\r
- } else if (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiDriverDiagnosticsProtocolGuid) != FALSE) {\r
- (*HandleType)[HandleIndex] |= HANDLE_RELATIONSHIP_DRIVER_DIAGNOSTICS_HANDLE;\r
- } else if (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiComponentName2ProtocolGuid) != FALSE) {\r
- (*HandleType)[HandleIndex] |= HANDLE_RELATIONSHIP_COMPONENT_NAME_HANDLE;\r
- } else if (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiComponentNameProtocolGuid) != FALSE) {\r
- (*HandleType)[HandleIndex] |= HANDLE_RELATIONSHIP_COMPONENT_NAME_HANDLE;\r
- } else if (CompareGuid (ProtocolGuidArray[ProtocolIndex], &gEfiDevicePathProtocolGuid) != FALSE) {\r
- (*HandleType)[HandleIndex] |= HANDLE_RELATIONSHIP_DEVICE_HANDLE;\r
- } else {\r
- DEBUG_CODE_BEGIN();\r
- ASSERT((*HandleType)[HandleIndex] == (*HandleType)[HandleIndex]);\r
- DEBUG_CODE_END();\r
- }\r
- //\r
- // Retrieve the list of agents that have opened each protocol\r
- //\r
- Status = gBS->OpenProtocolInformation (\r
- (*HandleBuffer)[HandleIndex],\r
- ProtocolGuidArray[ProtocolIndex],\r
- &OpenInfo,\r
- &OpenInfoCount\r
- );\r
- if (!EFI_ERROR (Status)) {\r
- for (OpenInfoIndex = 0; OpenInfoIndex < OpenInfoCount; OpenInfoIndex++) {\r
- if (DriverBindingHandle != NULL && OpenInfo[OpenInfoIndex].AgentHandle == DriverBindingHandle) {\r
- if ((OpenInfo[OpenInfoIndex].Attributes & EFI_OPEN_PROTOCOL_BY_DRIVER) == EFI_OPEN_PROTOCOL_BY_DRIVER) {\r
- //\r
- // Mark the device handle as being managed by the driver specified by DriverBindingHandle\r
- //\r
- (*HandleType)[HandleIndex] |= (HANDLE_RELATIONSHIP_DEVICE_HANDLE | HANDLE_RELATIONSHIP_CONTROLLER_HANDLE);\r
- }\r
- if (ControllerHandle != NULL && (*HandleBuffer)[HandleIndex] == ControllerHandle) {\r
- if ((OpenInfo[OpenInfoIndex].Attributes & EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER) == EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER) {\r
- for (ChildIndex = 0; ChildIndex < *HandleCount; ChildIndex++) {\r
- if ((*HandleBuffer)[ChildIndex] == OpenInfo[OpenInfoIndex].ControllerHandle) {\r
- (*HandleType)[ChildIndex] |= (HANDLE_RELATIONSHIP_DEVICE_HANDLE | HANDLE_RELATIONSHIP_CHILD_HANDLE);\r
- }\r
- }\r
- }\r
- }\r
- } else if (DriverBindingHandle == NULL && OpenInfo[OpenInfoIndex].ControllerHandle == ControllerHandle) {\r
- if ((OpenInfo[OpenInfoIndex].Attributes & EFI_OPEN_PROTOCOL_BY_DRIVER) == EFI_OPEN_PROTOCOL_BY_DRIVER) {\r
- for (ChildIndex = 0; ChildIndex < *HandleCount; ChildIndex++) {\r
- if ((*HandleBuffer)[ChildIndex] == OpenInfo[OpenInfoIndex].AgentHandle) {\r
- //\r
- // mark the handle who opened this as a device driver\r
- //\r
- (*HandleType)[ChildIndex] |= HANDLE_RELATIONSHIP_DEVICE_DRIVER;\r
- }\r
- }\r
- }\r
- if ((OpenInfo[OpenInfoIndex].Attributes & EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER) == EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER) {\r
- //\r
- // this handle has people opening by child so it must be a parent\r
- //\r
- (*HandleType)[HandleIndex] |= HANDLE_RELATIONSHIP_PARENT_HANDLE;\r
- for (ChildIndex = 0; ChildIndex < *HandleCount; ChildIndex++) {\r
- if ((*HandleBuffer)[ChildIndex] == OpenInfo[OpenInfoIndex].AgentHandle) {\r
- (*HandleType)[ChildIndex] |= HANDLE_RELATIONSHIP_BUS_DRIVER;\r
- }\r
- }\r
- }\r
- }\r
- }\r
-\r
- FreePool (OpenInfo);\r
- }\r
- }\r
-\r
- FreePool (ProtocolGuidArray);\r
- }\r
- }\r
-\r
- if (EFI_ERROR(Status)) {\r
- if (*HandleType != NULL) {\r
- FreePool (*HandleType);\r
- }\r
- if (*HandleBuffer != NULL) {\r
- FreePool (*HandleBuffer);\r
- }\r
-\r
- *HandleCount = 0;\r
- *HandleBuffer = NULL;\r
- *HandleType = NULL;\r
- }\r
-\r
- return Status;\r
-}\r
-\r
-\r
-SHELL_STATUS\r
-EFIAPI\r
-ShellCommandRunOpenInfo (\r
- VOID *RESERVED\r
- ) {\r
- EFI_STATUS Status;\r
- LIST_ENTRY *Package;\r
- CHAR16 *ProblemParam;\r
- SHELL_STATUS ShellStatus;\r
- EFI_HANDLE theHandle;\r
- EFI_HANDLE *HandleList;\r
- UINTN Count;\r
- UINTN *Type;\r
-\r
- ShellStatus = SHELL_SUCCESS;\r
-\r
- //\r
- // initialize the shell lib (we must be in non-auto-init...)\r
- //\r
- Status = ShellInitialize();\r
- ASSERT_EFI_ERROR(Status);\r
-\r
- Status = CommandInit();\r
- ASSERT_EFI_ERROR(Status);\r
-\r
- //\r
- // parse the command line\r
- //\r
- Status = ShellCommandLineParse (EmptyParamList, &Package, &ProblemParam, TRUE);\r
- if EFI_ERROR(Status) {\r
- if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDriver1HiiHandle, ProblemParam);\r
- FreePool(ProblemParam);\r
- ShellStatus = SHELL_INVALID_PARAMETER;\r
- } else {\r
- ASSERT(FALSE);\r
- }\r
- } else {\r
- if (ShellCommandLineGetCount() > 2){\r
- //\r
- // error for too many parameters\r
- //\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDriver1HiiHandle);\r
- ShellStatus = SHELL_INVALID_PARAMETER;\r
- } else if (ShellCommandLineGetCount() == 0) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDriver1HiiHandle);\r
- ShellStatus = SHELL_INVALID_PARAMETER;\r
- } else {\r
- if (ShellCommandLineGetRawValue(Package, 1) != NULL && CommandLibGetHandleValue(StrHexToUintn(ShellCommandLineGetRawValue(Package, 1))) == NULL){\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, ShellCommandLineGetRawValue(Package, 1));\r
- ShellStatus = SHELL_INVALID_PARAMETER;\r
- } else {\r
- theHandle = CommandLibGetHandleValue(StrHexToUintn(ShellCommandLineGetRawValue(Package, 1)));\r
- ASSERT(theHandle != NULL);\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_OPENINFO_HEADER_LINE), gShellDriver1HiiHandle, StrHexToUintn(ShellCommandLineGetRawValue(Package, 1)), theHandle);\r
- Status = TraverseHandleDatabase (NULL, theHandle, &Count, &HandleList, &Type);\r
- if (EFI_ERROR(Status) == FALSE && Count > 0) {\r
- } else {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_INV_HANDLE), gShellDriver1HiiHandle, ShellCommandLineGetRawValue(Package, 1));\r
- ShellStatus = SHELL_NOT_FOUND;\r
- }\r
- }\r
- }\r
- }\r
- return (ShellStatus);\r
-}\r
+++ /dev/null
-/** @file\r
- Main file for NULL named library for level 1 shell command functions.\r
-\r
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
- This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#include "UefiShellDriver1CommandsLib.h"\r
-\r
-STATIC CONST CHAR16 mFileName[] = L"Driver1Commands";\r
-EFI_HANDLE gShellDriver1HiiHandle = NULL;\r
-CONST EFI_GUID gShellDriver1HiiGuid = \\r
- { \\r
- 0xaf0b742, 0x63ec, 0x45bd, {0x8d, 0xb6, 0x71, 0xad, 0x7f, 0x2f, 0xe8, 0xe8} \\r
- };\r
-\r
-\r
-CONST CHAR16*\r
-EFIAPI\r
-ShellCommandGetManFileNameDriver1 (\r
- VOID\r
- ){\r
- return (mFileName);\r
-}\r
-\r
-/**\r
- Constructor for the Shell Driver1 Commands library.\r
-\r
- @param ImageHandle the image handle of the process\r
- @param SystemTable the EFI System Table pointer\r
-\r
- @retval EFI_SUCCESS the shell command handlers were installed sucessfully\r
- @retval EFI_UNSUPPORTED the shell level required was not found.\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-UefiShellDriver1CommandsLibConstructor (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
- ) {\r
- //\r
- // check or bit of the profiles mask\r
- //\r
- if (PcdGet8(PcdShellProfileMask) && BIT0 == 0) {\r
- return (EFI_UNSUPPORTED);\r
- }\r
-\r
- //\r
- // install our shell command handlers that are always installed\r
- //\r
- ShellCommandRegisterCommandName(L"connect", ShellCommandRunConnect , ShellCommandGetManFileNameDriver1, 0, L"Driver1", TRUE);\r
- ShellCommandRegisterCommandName(L"devices", ShellCommandRunDevices , ShellCommandGetManFileNameDriver1, 0, L"Driver1", TRUE);\r
- ShellCommandRegisterCommandName(L"openinfo", ShellCommandRunOpenInfo , ShellCommandGetManFileNameDriver1, 0, L"Driver1", TRUE);\r
-/*\r
- ShellCommandRegisterCommandName(L"devtree", ShellCommandRunDevTree , ShellCommandGetManFileNameDriver1, 0, L"Driver1", TRUE);\r
- ShellCommandRegisterCommandName(L"dh", ShellCommandRunDH , ShellCommandGetManFileNameDriver1, 0, L"Driver1", TRUE);\r
- ShellCommandRegisterCommandName(L"disconnect", ShellCommandRunDisconnect , ShellCommandGetManFileNameDriver1, 0, L"Driver1", TRUE);\r
- ShellCommandRegisterCommandName(L"drivers", ShellCommandRunDrivers , ShellCommandGetManFileNameDriver1, 0, L"Driver1", TRUE);\r
- ShellCommandRegisterCommandName(L"drvcfg", ShellCommandRunDrvCfg , ShellCommandGetManFileNameDriver1, 0, L"Driver1", TRUE);\r
- ShellCommandRegisterCommandName(L"drvdiag", ShellCommandRunDrvDiag , ShellCommandGetManFileNameDriver1, 0, L"Driver1", TRUE);\r
- ShellCommandRegisterCommandName(L"reconnect", ShellCommandRunReconnect , ShellCommandGetManFileNameDriver1, 0, L"Driver1", TRUE);\r
- ShellCommandRegisterCommandName(L"unload", ShellCommandRunUnload , ShellCommandGetManFileNameDriver1, 0, L"Driver1", TRUE);\r
-*/\r
-\r
- //\r
- // install the HII stuff.\r
- //\r
- gShellDriver1HiiHandle = HiiAddPackages (&gShellDriver1HiiGuid, gImageHandle, UefiShellDriver1CommandsLibStrings, NULL);\r
- if (gShellDriver1HiiHandle == NULL) {\r
- return (EFI_DEVICE_ERROR);\r
- }\r
-\r
- return (EFI_SUCCESS);\r
-}\r
-\r
-/**\r
- Destructory for the library. free any resources.\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-UefiShellDriver1CommandsLibDestructor (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
- )\r
-{\r
- if (gShellDriver1HiiHandle != NULL) {\r
- HiiRemovePackages(gShellDriver1HiiHandle);\r
- }\r
- return (EFI_SUCCESS);\r
-}\r
-\r
-EFI_HANDLE*\r
-EFIAPI\r
-GetHandleListByPotocol (\r
- IN CONST EFI_GUID *ProtocolGuid\r
- ){\r
- EFI_HANDLE *HandleList;\r
- UINTN Size;\r
- EFI_STATUS Status;\r
-\r
- Size = 0;\r
- HandleList = NULL;\r
-\r
- //\r
- // We cannot use LocateHandleBuffer since we need that NULL item on the ends of the list!\r
- //\r
- if (ProtocolGuid == NULL) {\r
- Status = gBS->LocateHandle(AllHandles, NULL, NULL, &Size, HandleList);\r
- if (Status == EFI_BUFFER_TOO_SMALL) {\r
- HandleList = AllocatePool(Size + sizeof(EFI_HANDLE));\r
- Status = gBS->LocateHandle(AllHandles, NULL, NULL, &Size, HandleList);\r
- HandleList[Size/sizeof(EFI_HANDLE)] = NULL;\r
- }\r
- } else {\r
- Status = gBS->LocateHandle(ByProtocol, (EFI_GUID*)ProtocolGuid, NULL, &Size, HandleList);\r
- if (Status == EFI_BUFFER_TOO_SMALL) {\r
- HandleList = AllocatePool(Size + sizeof(EFI_HANDLE));\r
- Status = gBS->LocateHandle(ByProtocol, (EFI_GUID*)ProtocolGuid, NULL, &Size, HandleList);\r
- HandleList[Size/sizeof(EFI_HANDLE)] = NULL;\r
- }\r
- }\r
- if (EFI_ERROR(Status)) {\r
- if (HandleList != NULL) {\r
- FreePool(HandleList);\r
- }\r
- return (NULL);\r
- }\r
- return (HandleList);\r
-}\r
-\r
+++ /dev/null
-/** @file\r
- Main file for NULL named library for Profile1 shell command functions.\r
-\r
- Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>\r
- This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at\r
- http://opensource.org/licenses/bsd-license.php\r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
-**/\r
-\r
-#include <Uefi.h>\r
-#include <ShellBase.h>\r
-\r
-#include <Protocol/EfiShell.h>\r
-#include <Protocol/EfiShellParameters.h>\r
-#include <Protocol/DevicePath.h>\r
-#include <Protocol/LoadedImage.h>\r
-#include <Protocol/UnicodeCollation.h>\r
-#include <Protocol/DevicePathToText.h>\r
-\r
-#include <Library/BaseLib.h>\r
-#include <Library/BaseMemoryLib.h>\r
-#include <Library/DebugLib.h>\r
-#include <Library/MemoryAllocationLib.h>\r
-#include <Library/PcdLib.h>\r
-#include <Library/ShellCommandLib.h>\r
-#include <Library/ShellLib.h>\r
-#include <Library/SortLib.h>\r
-#include <Library/UefiLib.h>\r
-#include <Library/UefiRuntimeServicesTableLib.h>\r
-#include <Library/UefiBootServicesTableLib.h>\r
-#include <Library/HiiLib.h>\r
-#include <Library/FileHandleLib.h>\r
-#include <Library/DevicePathLib.h>\r
-#include <Library/PrintLib.h>\r
-\r
-\r
-extern EFI_HANDLE gShellDriver1HiiHandle;\r
-extern CONST EFI_GUID gShellDriver1HiiGuid;\r
-\r
-EFI_HANDLE*\r
-EFIAPI\r
-GetHandleListByPotocol (\r
- IN CONST EFI_GUID *ProtocolGuid\r
- );\r
-\r
-SHELL_STATUS\r
-EFIAPI\r
-ShellCommandRunConnect (\r
- VOID *RESERVED\r
- );\r
-\r
-SHELL_STATUS\r
-EFIAPI\r
-ShellCommandRunDevices (\r
- VOID *RESERVED\r
- );\r
-\r
-SHELL_STATUS\r
-EFIAPI\r
-ShellCommandRunOpenInfo (\r
- VOID *RESERVED\r
- );\r
-\r
-\r
-\r
-\r
+++ /dev/null
-#/** @file\r
-# Provides shell driver1 profile functions\r
-#\r
-# Copyright (c) 2010, Intel Corporation. All rights reserved. <BR>\r
-#\r
-# This program and the accompanying materials\r
-# are licensed and made available under the terms and conditions of the BSD License\r
-# which accompanies this distribution. The full text of the license may be found at\r
-# http://opensource.org/licenses/bsd-license.php\r
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-#\r
-#\r
-#**/\r
-[Defines]\r
- INF_VERSION = 0x00010006\r
- BASE_NAME = UefiShellDriver1CommandsLib\r
- FILE_GUID = 313D3674-3ED4-48fd-BF97-7DB35D4190D1\r
- MODULE_TYPE = UEFI_DRIVER\r
- VERSION_STRING = 1.0\r
- LIBRARY_CLASS = NULL|UEFI_APPLICATION UEFI_DRIVER\r
- CONSTRUCTOR = UefiShellDriver1CommandsLibConstructor\r
- DESTRUCTOR = UefiShellDriver1CommandsLibDestructor\r
-\r
-[Sources]\r
- Connect.c\r
- Devices.c\r
- OpenInfo.c\r
- UefiShellDriver1CommandsLib.c\r
- UefiShellDriver1CommandsLib.h\r
- UefiShellDriver1CommandsLib.uni\r
-\r
-[Packages]\r
- MdePkg/MdePkg.dec\r
- ShellPkg/ShellPkg.dec\r
- MdeModulePkg/MdeModulePkg.dec\r
-\r
-[LibraryClasses]\r
- MemoryAllocationLib\r
- BaseLib\r
- BaseMemoryLib\r
- DebugLib\r
- ShellCommandLib\r
- ShellLib\r
- UefiLib\r
- UefiRuntimeServicesTableLib\r
- UefiBootServicesTableLib\r
- SortLib\r
- PrintLib\r
-\r
-[Pcd]\r
- gEfiShellPkgTokenSpaceGuid.PcdShellProfileMask # ALWAYS_CONSUMED\r
-\r
-[Guids]\r
- gEfiGlobalVariableGuid\r
- gEfiConsoleInDeviceGuid\r
- gEfiConsoleOutDeviceGuid\r