/** @file\r
Main file for SerMode shell Debug1 function.\r
\r
- Copyright (c) 2005 - 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
+ (C) Copyright 2015 Hewlett-Packard Development Company, L.P.<BR>\r
+ Copyright (c) 2005 - 2018, Intel Corporation. All rights reserved.<BR>\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
#include <Library/ShellLib.h>\r
#include <Protocol/SerialIo.h>\r
\r
+/**\r
+ Display information about a serial device by it's handle.\r
+\r
+ If HandleValid is FALSE, do all devices.\r
+\r
+ @param[in] HandleIdx The handle index for the device.\r
+ @param[in] HandleValid TRUE if HandleIdx is valid.\r
+\r
+ @retval SHELL_INVALID_PARAMETER A parameter was invalid.\r
+ @retval SHELL_SUCCESS The operation was successful.\r
+**/\r
SHELL_STATUS\r
-EFIAPI\r
-iDisplaySettings (\r
- IN UINTN HandleIdx,\r
- IN BOOLEAN HandleValid\r
+DisplaySettings (\r
+ IN UINTN HandleIdx,\r
+ IN BOOLEAN HandleValid\r
)\r
{\r
EFI_SERIAL_IO_PROTOCOL *SerialIo;\r
CHAR16 Parity;\r
SHELL_STATUS ShellStatus;\r
\r
- Handles = NULL;\r
- StopBits = NULL;\r
+ Handles = NULL;\r
+ StopBits = NULL;\r
\r
ShellStatus = SHELL_SUCCESS;\r
\r
- Status = gBS->LocateHandleBuffer (ByProtocol, &gEfiSerialIoProtocolGuid, NULL, &NoHandles, &Handles);\r
+ Status = gBS->LocateHandleBuffer (ByProtocol, &gEfiSerialIoProtocolGuid, NULL, &NoHandles, &Handles);\r
if (EFI_ERROR (Status)) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SERMODE_NO_FOUND), gShellDebug1HiiHandle);\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SERMODE_NO_FOUND), gShellDebug1HiiHandle, L"sermode");\r
return SHELL_INVALID_PARAMETER;\r
}\r
\r
for (Index = 0; Index < NoHandles; Index++) {\r
if (HandleValid) {\r
- if (ConvertHandleIndexToHandle(HandleIdx) != Handles[Index]) {\r
+ if (ConvertHandleIndexToHandle (HandleIdx) != Handles[Index]) {\r
continue;\r
}\r
}\r
\r
- Status = gBS->HandleProtocol (Handles[Index], &gEfiSerialIoProtocolGuid, (VOID**)&SerialIo);\r
+ Status = gBS->HandleProtocol (Handles[Index], &gEfiSerialIoProtocolGuid, (VOID **)&SerialIo);\r
if (!EFI_ERROR (Status)) {\r
switch (SerialIo->Mode->Parity) {\r
- case DefaultParity:\r
+ case DefaultParity:\r
\r
- Parity = 'D';\r
- break;\r
+ Parity = 'D';\r
+ break;\r
\r
- case NoParity:\r
+ case NoParity:\r
\r
- Parity = 'N';\r
- break;\r
+ Parity = 'N';\r
+ break;\r
\r
- case EvenParity:\r
+ case EvenParity:\r
\r
- Parity = 'E';\r
- break;\r
+ Parity = 'E';\r
+ break;\r
\r
- case OddParity:\r
+ case OddParity:\r
\r
- Parity = 'O';\r
- break;\r
+ Parity = 'O';\r
+ break;\r
\r
- case MarkParity:\r
+ case MarkParity:\r
\r
- Parity = 'M';\r
- break;\r
+ Parity = 'M';\r
+ break;\r
\r
- case SpaceParity:\r
+ case SpaceParity:\r
\r
- Parity = 'S';\r
- break;\r
+ Parity = 'S';\r
+ break;\r
\r
- default:\r
+ default:\r
\r
- Parity = 'U';\r
+ Parity = 'U';\r
}\r
\r
switch (SerialIo->Mode->StopBits) {\r
- case DefaultStopBits:\r
+ case DefaultStopBits:\r
\r
- StopBits = L"Default";\r
- break;\r
+ StopBits = L"Default";\r
+ break;\r
\r
- case OneStopBit:\r
+ case OneStopBit:\r
\r
- StopBits = L"1";\r
- break;\r
+ StopBits = L"1";\r
+ break;\r
\r
- case TwoStopBits:\r
+ case TwoStopBits:\r
\r
- StopBits = L"2";\r
- break;\r
+ StopBits = L"2";\r
+ break;\r
\r
- case OneFiveStopBits:\r
+ case OneFiveStopBits:\r
\r
- StopBits = L"1.5";\r
- break;\r
+ StopBits = L"1.5";\r
+ break;\r
\r
- default:\r
+ default:\r
\r
- StopBits = L"Unknown";\r
+ StopBits = L"Unknown";\r
}\r
- ShellPrintHiiEx(\r
+\r
+ ShellPrintHiiEx (\r
-1,\r
-1,\r
NULL,\r
Parity,\r
SerialIo->Mode->DataBits,\r
StopBits\r
- );\r
+ );\r
} else {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SERMODE_NO_FOUND), gShellDebug1HiiHandle);\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SERMODE_NO_FOUND), gShellDebug1HiiHandle, L"sermode");\r
ShellStatus = SHELL_NOT_FOUND;\r
break;\r
}\r
}\r
\r
if (Index == NoHandles) {\r
- if ((NoHandles != 0 && HandleValid) || 0 == NoHandles) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SERMODE_NOT_FOUND), gShellDebug1HiiHandle);\r
+ if (((NoHandles != 0) && HandleValid) || (0 == NoHandles)) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SERMODE_NOT_FOUND), gShellDebug1HiiHandle, L"sermode");\r
ShellStatus = SHELL_NOT_FOUND;\r
}\r
}\r
return ShellStatus;\r
}\r
\r
+/**\r
+ Function for 'sermode' command.\r
+\r
+ @param[in] ImageHandle Handle to the Image (NULL if Internal).\r
+ @param[in] SystemTable Pointer to the System Table (NULL if Internal).\r
+**/\r
SHELL_STATUS\r
EFIAPI\r
ShellCommandRunSerMode (\r
LIST_ENTRY *Package;\r
CHAR16 *ProblemParam;\r
CONST CHAR16 *Temp;\r
+ UINT64 Intermediate;\r
\r
ShellStatus = SHELL_SUCCESS;\r
HandleIdx = 0;\r
Package = NULL;\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), gShellDebug1HiiHandle, ProblemParam);\r
- FreePool(ProblemParam);\r
+ if (EFI_ERROR (Status)) {\r
+ if ((Status == EFI_VOLUME_CORRUPTED) && (ProblemParam != NULL)) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, L"sermode", ProblemParam);\r
+ FreePool (ProblemParam);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else {\r
- ASSERT(FALSE);\r
+ ASSERT (FALSE);\r
}\r
} else {\r
- if (ShellCommandLineGetCount(Package) < 5 && ShellCommandLineGetCount(Package) > 1) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle);\r
+ if ((ShellCommandLineGetCount (Package) < 6) && (ShellCommandLineGetCount (Package) > 2)) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle, L"sermode");\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
- } else if (ShellCommandLineGetCount(Package) > 5) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle);\r
+ } else if (ShellCommandLineGetCount (Package) > 6) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"sermode");\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else {\r
- Temp = ShellCommandLineGetRawValue(Package, 1);\r
+ Temp = ShellCommandLineGetRawValue (Package, 1);\r
if (Temp != NULL) {\r
- HandleIdx = StrHexToUintn(Temp);\r
- Temp = ShellCommandLineGetRawValue(Package, 2);\r
+ Status = ShellConvertStringToUint64 (Temp, &Intermediate, TRUE, FALSE);\r
+ HandleIdx = (UINTN)Intermediate;\r
+ Temp = ShellCommandLineGetRawValue (Package, 2);\r
if (Temp == NULL) {\r
- ShellStatus = iDisplaySettings (HandleIdx, TRUE);\r
+ ShellStatus = DisplaySettings (HandleIdx, TRUE);\r
goto Done;\r
}\r
} else {\r
- ShellStatus = iDisplaySettings (0, FALSE);\r
+ ShellStatus = DisplaySettings (0, FALSE);\r
goto Done;\r
}\r
- Temp = ShellCommandLineGetRawValue(Package, 2);\r
+\r
+ Temp = ShellCommandLineGetRawValue (Package, 2);\r
if (Temp != NULL) {\r
- BaudRate = StrHexToUintn(Temp);\r
+ BaudRate = ShellStrToUintn (Temp);\r
} else {\r
- ASSERT(FALSE);\r
+ ASSERT (FALSE);\r
BaudRate = 0;\r
}\r
- Temp = ShellCommandLineGetRawValue(Package, 3);\r
- if (Temp == NULL || StrLen(Temp)>1) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, Temp);\r
+\r
+ Temp = ShellCommandLineGetRawValue (Package, 3);\r
+ if ((Temp == NULL) || (StrLen (Temp) > 1)) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"sermode", Temp);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
} else {\r
- switch(Temp[0]){\r
- case 'd':\r
- case 'D':\r
- Parity = DefaultParity;\r
- break;\r
- case 'n':\r
- case 'N':\r
- Parity = NoParity;\r
- break;\r
- case 'e':\r
- case 'E':\r
- Parity = EvenParity;\r
- break;\r
- case 'o':\r
- case 'O':\r
- Parity = OddParity;\r
- break;\r
- case 'm':\r
- case 'M':\r
- Parity = MarkParity;\r
- break;\r
- case 's':\r
- case 'S':\r
- Parity = SpaceParity;\r
- break;\r
- default:\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, Temp);\r
- ShellStatus = SHELL_INVALID_PARAMETER;\r
- goto Done;\r
+ switch (Temp[0]) {\r
+ case 'd':\r
+ case 'D':\r
+ Parity = DefaultParity;\r
+ break;\r
+ case 'n':\r
+ case 'N':\r
+ Parity = NoParity;\r
+ break;\r
+ case 'e':\r
+ case 'E':\r
+ Parity = EvenParity;\r
+ break;\r
+ case 'o':\r
+ case 'O':\r
+ Parity = OddParity;\r
+ break;\r
+ case 'm':\r
+ case 'M':\r
+ Parity = MarkParity;\r
+ break;\r
+ case 's':\r
+ case 'S':\r
+ Parity = SpaceParity;\r
+ break;\r
+ default:\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"sermode", Temp);\r
+ ShellStatus = SHELL_INVALID_PARAMETER;\r
+ goto Done;\r
}\r
}\r
- Temp = ShellCommandLineGetRawValue(Package, 4);\r
+\r
+ Temp = ShellCommandLineGetRawValue (Package, 4);\r
if (Temp != NULL) {\r
- DataBits = StrHexToUintn(Temp);\r
+ DataBits = ShellStrToUintn (Temp);\r
} else {\r
//\r
// make sure this is some number not in the list below.\r
//\r
DataBits = 0;\r
}\r
+\r
switch (DataBits) {\r
- case 4:\r
- case 7:\r
- case 8:\r
- break;\r
- default:\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, Temp);\r
- ShellStatus = SHELL_INVALID_PARAMETER;\r
- goto Done;\r
+ case 4:\r
+ case 7:\r
+ case 8:\r
+ break;\r
+ default:\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"sermode", Temp);\r
+ ShellStatus = SHELL_INVALID_PARAMETER;\r
+ goto Done;\r
}\r
- Temp = ShellCommandLineGetRawValue(Package, 5);\r
- Value = StrHexToUintn(Temp);\r
+\r
+ Temp = ShellCommandLineGetRawValue (Package, 5);\r
+ Value = ShellStrToUintn (Temp);\r
switch (Value) {\r
- case 0:\r
- StopBits = DefaultStopBits;\r
- break;\r
+ case 0:\r
+ StopBits = DefaultStopBits;\r
+ break;\r
\r
- case 1:\r
- StopBits = OneStopBit;\r
- break;\r
+ case 1:\r
+ StopBits = OneStopBit;\r
+ break;\r
\r
- case 2:\r
- StopBits = TwoStopBits;\r
- break;\r
+ case 2:\r
+ StopBits = TwoStopBits;\r
+ break;\r
\r
- case 15:\r
- StopBits = OneFiveStopBits;\r
- break;\r
+ case 15:\r
+ StopBits = OneFiveStopBits;\r
+ break;\r
\r
- default:\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, Temp);\r
- ShellStatus = SHELL_INVALID_PARAMETER;\r
- goto Done;\r
+ default:\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"sermode", Temp);\r
+ ShellStatus = SHELL_INVALID_PARAMETER;\r
+ goto Done;\r
}\r
- Status = gBS->LocateHandleBuffer(ByProtocol, &gEfiSerialIoProtocolGuid, NULL, &NoHandles, &Handles);\r
+\r
+ Status = gBS->LocateHandleBuffer (ByProtocol, &gEfiSerialIoProtocolGuid, NULL, &NoHandles, &Handles);\r
if (EFI_ERROR (Status)) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SERMODE_NO_FOUND), gShellDebug1HiiHandle);\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SERMODE_NO_FOUND), gShellDebug1HiiHandle, L"sermode");\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
goto Done;\r
}\r
continue;\r
}\r
\r
- Status = gBS->HandleProtocol (Handles[Index], &gEfiSerialIoProtocolGuid, (VOID**)&SerialIo);\r
+ Status = gBS->HandleProtocol (Handles[Index], &gEfiSerialIoProtocolGuid, (VOID **)&SerialIo);\r
if (!EFI_ERROR (Status)) {\r
Status = SerialIo->SetAttributes (\r
- SerialIo,\r
- (UINT64) BaudRate,\r
- SerialIo->Mode->ReceiveFifoDepth,\r
- SerialIo->Mode->Timeout,\r
- Parity,\r
- (UINT8) DataBits,\r
- StopBits\r
- );\r
+ SerialIo,\r
+ (UINT64)BaudRate,\r
+ SerialIo->Mode->ReceiveFifoDepth,\r
+ SerialIo->Mode->Timeout,\r
+ Parity,\r
+ (UINT8)DataBits,\r
+ StopBits\r
+ );\r
if (EFI_ERROR (Status)) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SERMODE_SET_FAIL), gShellDebug1HiiHandle, ConvertHandleToHandleIndex(Handles[Index]), Status);\r
- ShellStatus = SHELL_ACCESS_DENIED;\r
+ if (Status == EFI_INVALID_PARAMETER) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SERMODE_SET_UNSUPPORTED), gShellDebug1HiiHandle, L"sermode", ConvertHandleToHandleIndex (Handles[Index]));\r
+ ShellStatus = SHELL_UNSUPPORTED;\r
+ } else if (Status == EFI_DEVICE_ERROR) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SERMODE_SET_DEV_ERROR), gShellDebug1HiiHandle, L"sermode", ConvertHandleToHandleIndex (Handles[Index]));\r
+ ShellStatus = SHELL_ACCESS_DENIED;\r
+ } else {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SERMODE_SET_FAIL), gShellDebug1HiiHandle, L"sermode", ConvertHandleToHandleIndex (Handles[Index]));\r
+ ShellStatus = SHELL_ACCESS_DENIED;\r
+ }\r
} else {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SERMODE_SET_HANDLE), gShellDebug1HiiHandle, ConvertHandleToHandleIndex(Handles[Index]));\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SERMODE_SET_HANDLE), gShellDebug1HiiHandle, ConvertHandleToHandleIndex (Handles[Index]));\r
}\r
+\r
break;\r
}\r
}\r
}\r
}\r
\r
- if (Index == NoHandles) {\r
- ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_SERMODE_BAD_HANDLE), gShellDebug1HiiHandle, HandleIdx);\r
+ if ((ShellStatus == SHELL_SUCCESS) && (Index == NoHandles)) {\r
+ ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_SERMODE_BAD_HANDLE), gShellDebug1HiiHandle, L"sermode", HandleIdx);\r
ShellStatus = SHELL_INVALID_PARAMETER;\r
}\r
\r
if (Package != NULL) {\r
ShellCommandLineFreeVarList (Package);\r
}\r
+\r
if (Handles != NULL) {\r
FreePool (Handles);\r
}\r
+\r
return ShellStatus;\r
}\r