ShellPkg: Apply uncrustify changes
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the ShellPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Ray Ni <ray.ni@intel.com>
This commit is contained in:
committed by
mergify[bot]
parent
c411b485b6
commit
47d20b54f9
@ -21,7 +21,7 @@
|
|||||||
// the resource section. Thus the application can use '-?' option to show help message in
|
// the resource section. Thus the application can use '-?' option to show help message in
|
||||||
// Shell.
|
// Shell.
|
||||||
//
|
//
|
||||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_STRING_ID mStringHelpTokenId = STRING_TOKEN (STR_GET_HELP_ACPIVIEW);
|
GLOBAL_REMOVE_IF_UNREFERENCED EFI_STRING_ID mStringHelpTokenId = STRING_TOKEN (STR_GET_HELP_ACPIVIEW);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Application Entry Point wrapper around the shell command
|
Application Entry Point wrapper around the shell command
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -12,31 +12,31 @@
|
|||||||
|
|
||||||
#define CONSOLE_LOGGER_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('c', 'o', 'P', 'D')
|
#define CONSOLE_LOGGER_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('c', 'o', 'P', 'D')
|
||||||
|
|
||||||
typedef struct _CONSOLE_LOGGER_PRIVATE_DATA{
|
typedef struct _CONSOLE_LOGGER_PRIVATE_DATA {
|
||||||
UINTN Signature;
|
UINTN Signature;
|
||||||
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL OurConOut; ///< the protocol we installed onto the system table
|
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL OurConOut; ///< the protocol we installed onto the system table
|
||||||
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *OldConOut; ///< old protocol to reinstall upon exiting
|
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *OldConOut; ///< old protocol to reinstall upon exiting
|
||||||
EFI_HANDLE OldConHandle; ///< old protocol handle
|
EFI_HANDLE OldConHandle; ///< old protocol handle
|
||||||
UINTN ScreenCount; ///< How many screens worth of data to save
|
UINTN ScreenCount; ///< How many screens worth of data to save
|
||||||
CHAR16 *Buffer; ///< Buffer to save data
|
CHAR16 *Buffer; ///< Buffer to save data
|
||||||
UINTN BufferSize; ///< size of buffer in bytes
|
UINTN BufferSize; ///< size of buffer in bytes
|
||||||
|
|
||||||
// start row is the top of the screen
|
// start row is the top of the screen
|
||||||
UINTN OriginalStartRow; ///< What the originally visible start row was
|
UINTN OriginalStartRow; ///< What the originally visible start row was
|
||||||
UINTN CurrentStartRow; ///< what the currently visible start row is
|
UINTN CurrentStartRow; ///< what the currently visible start row is
|
||||||
|
|
||||||
UINTN RowsPerScreen; ///< how many rows the screen can display
|
UINTN RowsPerScreen; ///< how many rows the screen can display
|
||||||
UINTN ColsPerScreen; ///< how many columns the screen can display
|
UINTN ColsPerScreen; ///< how many columns the screen can display
|
||||||
|
|
||||||
INT32 *Attributes; ///< Buffer for Attribute to be saved for each character
|
INT32 *Attributes; ///< Buffer for Attribute to be saved for each character
|
||||||
UINTN AttribSize; ///< Size of Attributes in bytes
|
UINTN AttribSize; ///< Size of Attributes in bytes
|
||||||
|
|
||||||
EFI_SIMPLE_TEXT_OUTPUT_MODE HistoryMode; ///< mode of the history log
|
EFI_SIMPLE_TEXT_OUTPUT_MODE HistoryMode; ///< mode of the history log
|
||||||
BOOLEAN Enabled; ///< Set to FALSE when a break is requested.
|
BOOLEAN Enabled; ///< Set to FALSE when a break is requested.
|
||||||
UINTN RowCounter; ///< Initial row of each print job.
|
UINTN RowCounter; ///< Initial row of each print job.
|
||||||
} CONSOLE_LOGGER_PRIVATE_DATA;
|
} CONSOLE_LOGGER_PRIVATE_DATA;
|
||||||
|
|
||||||
#define CONSOLE_LOGGER_PRIVATE_DATA_FROM_THIS(a) CR (a, CONSOLE_LOGGER_PRIVATE_DATA, OurConOut, CONSOLE_LOGGER_PRIVATE_DATA_SIGNATURE)
|
#define CONSOLE_LOGGER_PRIVATE_DATA_FROM_THIS(a) CR (a, CONSOLE_LOGGER_PRIVATE_DATA, OurConOut, CONSOLE_LOGGER_PRIVATE_DATA_SIGNATURE)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Install our intermediate ConOut into the system table to
|
Install our intermediate ConOut into the system table to
|
||||||
@ -52,9 +52,9 @@ typedef struct _CONSOLE_LOGGER_PRIVATE_DATA{
|
|||||||
@sa InstallProtocolInterface
|
@sa InstallProtocolInterface
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
ConsoleLoggerInstall(
|
ConsoleLoggerInstall (
|
||||||
IN CONST UINTN ScreensToSave,
|
IN CONST UINTN ScreensToSave,
|
||||||
OUT CONSOLE_LOGGER_PRIVATE_DATA **ConsoleInfo
|
OUT CONSOLE_LOGGER_PRIVATE_DATA **ConsoleInfo
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -67,8 +67,8 @@ ConsoleLoggerInstall(
|
|||||||
@return other The operation failed. This was from UninstallProtocolInterface.
|
@return other The operation failed. This was from UninstallProtocolInterface.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
ConsoleLoggerUninstall(
|
ConsoleLoggerUninstall (
|
||||||
IN OUT CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo
|
IN OUT CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -84,10 +84,10 @@ ConsoleLoggerUninstall(
|
|||||||
@param[in] ConsoleInfo The pointer to the instance of the console logger information.
|
@param[in] ConsoleInfo The pointer to the instance of the console logger information.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
ConsoleLoggerDisplayHistory(
|
ConsoleLoggerDisplayHistory (
|
||||||
IN CONST BOOLEAN Forward,
|
IN CONST BOOLEAN Forward,
|
||||||
IN CONST UINTN Rows,
|
IN CONST UINTN Rows,
|
||||||
IN CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo
|
IN CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -100,8 +100,8 @@ ConsoleLoggerDisplayHistory(
|
|||||||
@sa UpdateDisplayFromHistory
|
@sa UpdateDisplayFromHistory
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
ConsoleLoggerStopHistory(
|
ConsoleLoggerStopHistory (
|
||||||
IN CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo
|
IN CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -112,8 +112,8 @@ ConsoleLoggerStopHistory(
|
|||||||
@return other The operation failed.
|
@return other The operation failed.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
UpdateDisplayFromHistory(
|
UpdateDisplayFromHistory (
|
||||||
IN CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo
|
IN CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -129,8 +129,8 @@ UpdateDisplayFromHistory(
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ConsoleLoggerReset (
|
ConsoleLoggerReset (
|
||||||
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
||||||
IN BOOLEAN ExtendedVerification
|
IN BOOLEAN ExtendedVerification
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -151,9 +151,9 @@ ConsoleLoggerReset (
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ConsoleLoggerOutputString(
|
ConsoleLoggerOutputString (
|
||||||
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
||||||
IN CHAR16 *WString
|
IN CHAR16 *WString
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -173,8 +173,8 @@ ConsoleLoggerOutputString(
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ConsoleLoggerTestString (
|
ConsoleLoggerTestString (
|
||||||
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
||||||
IN CHAR16 *WString
|
IN CHAR16 *WString
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -237,8 +237,8 @@ ConsoleLoggerSetMode (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ConsoleLoggerSetAttribute (
|
ConsoleLoggerSetAttribute (
|
||||||
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
||||||
IN UINTN Attribute
|
IN UINTN Attribute
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -275,8 +275,8 @@ EFI_STATUS
|
|||||||
EFIAPI
|
EFIAPI
|
||||||
ConsoleLoggerSetCursorPosition (
|
ConsoleLoggerSetCursorPosition (
|
||||||
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
||||||
IN UINTN Column,
|
IN UINTN Column,
|
||||||
IN UINTN Row
|
IN UINTN Row
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -309,9 +309,8 @@ ConsoleLoggerEnableCursor (
|
|||||||
history buffers.
|
history buffers.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
ConsoleLoggerResetBuffers(
|
ConsoleLoggerResetBuffers (
|
||||||
IN CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo
|
IN CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo
|
||||||
);
|
);
|
||||||
|
|
||||||
#endif //_CONSOLE_LOGGER_HEADER_
|
#endif //_CONSOLE_LOGGER_HEADER_
|
||||||
|
|
||||||
|
@ -9,20 +9,20 @@
|
|||||||
|
|
||||||
#include "Shell.h"
|
#include "Shell.h"
|
||||||
|
|
||||||
extern BOOLEAN AsciiRedirection;
|
extern BOOLEAN AsciiRedirection;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
EFI_SIMPLE_TEXT_INPUT_PROTOCOL SimpleTextIn;
|
EFI_SIMPLE_TEXT_INPUT_PROTOCOL SimpleTextIn;
|
||||||
SHELL_FILE_HANDLE FileHandle;
|
SHELL_FILE_HANDLE FileHandle;
|
||||||
EFI_HANDLE TheHandle;
|
EFI_HANDLE TheHandle;
|
||||||
UINT64 RemainingBytesOfInputFile;
|
UINT64 RemainingBytesOfInputFile;
|
||||||
} SHELL_EFI_SIMPLE_TEXT_INPUT_PROTOCOL;
|
} SHELL_EFI_SIMPLE_TEXT_INPUT_PROTOCOL;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL SimpleTextOut;
|
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL SimpleTextOut;
|
||||||
SHELL_FILE_HANDLE FileHandle;
|
SHELL_FILE_HANDLE FileHandle;
|
||||||
EFI_HANDLE TheHandle;
|
EFI_HANDLE TheHandle;
|
||||||
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *OriginalSimpleTextOut;
|
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *OriginalSimpleTextOut;
|
||||||
} SHELL_EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL;
|
} SHELL_EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -36,8 +36,8 @@ typedef struct {
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ConInWaitForKey (
|
ConInWaitForKey (
|
||||||
IN EFI_EVENT Event,
|
IN EFI_EVENT Event,
|
||||||
IN VOID *Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
gBS->SignalEvent (Event);
|
gBS->SignalEvent (Event);
|
||||||
@ -53,9 +53,9 @@ ConInWaitForKey (
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
FileBasedSimpleTextInReset(
|
FileBasedSimpleTextInReset (
|
||||||
IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,
|
IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,
|
||||||
IN BOOLEAN ExtendedVerification
|
IN BOOLEAN ExtendedVerification
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return (EFI_SUCCESS);
|
return (EFI_SUCCESS);
|
||||||
@ -71,18 +71,18 @@ FileBasedSimpleTextInReset(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
FileBasedSimpleTextInReadKeyStroke(
|
FileBasedSimpleTextInReadKeyStroke (
|
||||||
IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,
|
IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,
|
||||||
IN OUT EFI_INPUT_KEY *Key
|
IN OUT EFI_INPUT_KEY *Key
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINTN Size;
|
UINTN Size;
|
||||||
UINTN CharSize;
|
UINTN CharSize;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Verify the parameters
|
// Verify the parameters
|
||||||
//
|
//
|
||||||
if (Key == NULL || This == NULL) {
|
if ((Key == NULL) || (This == NULL)) {
|
||||||
return (EFI_INVALID_PARAMETER);
|
return (EFI_INVALID_PARAMETER);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -93,13 +93,14 @@ FileBasedSimpleTextInReadKeyStroke(
|
|||||||
return (EFI_NOT_READY);
|
return (EFI_NOT_READY);
|
||||||
}
|
}
|
||||||
|
|
||||||
Size = sizeof(CHAR16);
|
Size = sizeof (CHAR16);
|
||||||
|
|
||||||
if(!AsciiRedirection) {
|
if (!AsciiRedirection) {
|
||||||
CharSize = sizeof(CHAR16);
|
CharSize = sizeof (CHAR16);
|
||||||
} else {
|
} else {
|
||||||
CharSize = sizeof(CHAR8);
|
CharSize = sizeof (CHAR8);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Decrement the amount of free space by Size or set to zero (for odd length files)
|
// Decrement the amount of free space by Size or set to zero (for odd length files)
|
||||||
//
|
//
|
||||||
@ -110,10 +111,11 @@ FileBasedSimpleTextInReadKeyStroke(
|
|||||||
}
|
}
|
||||||
|
|
||||||
Key->ScanCode = 0;
|
Key->ScanCode = 0;
|
||||||
return (ShellInfoObject.NewEfiShellProtocol->ReadFile(
|
return (ShellInfoObject.NewEfiShellProtocol->ReadFile (
|
||||||
((SHELL_EFI_SIMPLE_TEXT_INPUT_PROTOCOL *)This)->FileHandle,
|
((SHELL_EFI_SIMPLE_TEXT_INPUT_PROTOCOL *)This)->FileHandle,
|
||||||
&Size,
|
&Size,
|
||||||
&Key->UnicodeChar));
|
&Key->UnicodeChar
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -126,8 +128,8 @@ FileBasedSimpleTextInReadKeyStroke(
|
|||||||
@retval NULL There was insufficient memory available.
|
@retval NULL There was insufficient memory available.
|
||||||
@return A pointer to the allocated protocol structure;
|
@return A pointer to the allocated protocol structure;
|
||||||
**/
|
**/
|
||||||
EFI_SIMPLE_TEXT_INPUT_PROTOCOL*
|
EFI_SIMPLE_TEXT_INPUT_PROTOCOL *
|
||||||
CreateSimpleTextInOnFile(
|
CreateSimpleTextInOnFile (
|
||||||
IN SHELL_FILE_HANDLE FileHandleToUse,
|
IN SHELL_FILE_HANDLE FileHandleToUse,
|
||||||
IN EFI_HANDLE *HandleLocation
|
IN EFI_HANDLE *HandleLocation
|
||||||
)
|
)
|
||||||
@ -137,17 +139,17 @@ CreateSimpleTextInOnFile(
|
|||||||
UINT64 CurrentPosition;
|
UINT64 CurrentPosition;
|
||||||
UINT64 FileSize;
|
UINT64 FileSize;
|
||||||
|
|
||||||
if (HandleLocation == NULL || FileHandleToUse == NULL) {
|
if ((HandleLocation == NULL) || (FileHandleToUse == NULL)) {
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
ProtocolToReturn = AllocateZeroPool(sizeof(SHELL_EFI_SIMPLE_TEXT_INPUT_PROTOCOL));
|
ProtocolToReturn = AllocateZeroPool (sizeof (SHELL_EFI_SIMPLE_TEXT_INPUT_PROTOCOL));
|
||||||
if (ProtocolToReturn == NULL) {
|
if (ProtocolToReturn == NULL) {
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
ShellGetFileSize (FileHandleToUse, &FileSize);
|
ShellGetFileSize (FileHandleToUse, &FileSize);
|
||||||
ShellGetFilePosition(FileHandleToUse, &CurrentPosition);
|
ShellGetFilePosition (FileHandleToUse, &CurrentPosition);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Initialize the protocol members
|
// Initialize the protocol members
|
||||||
@ -165,21 +167,23 @@ CreateSimpleTextInOnFile(
|
|||||||
&ProtocolToReturn->SimpleTextIn.WaitForKey
|
&ProtocolToReturn->SimpleTextIn.WaitForKey
|
||||||
);
|
);
|
||||||
|
|
||||||
if (EFI_ERROR(Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
FreePool(ProtocolToReturn);
|
FreePool (ProtocolToReturn);
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
///@todo possibly also install SimpleTextInputEx on the handle at this point.
|
|
||||||
Status = gBS->InstallProtocolInterface(
|
/// @todo possibly also install SimpleTextInputEx on the handle at this point.
|
||||||
&(ProtocolToReturn->TheHandle),
|
Status = gBS->InstallProtocolInterface (
|
||||||
&gEfiSimpleTextInProtocolGuid,
|
&(ProtocolToReturn->TheHandle),
|
||||||
EFI_NATIVE_INTERFACE,
|
&gEfiSimpleTextInProtocolGuid,
|
||||||
&(ProtocolToReturn->SimpleTextIn));
|
EFI_NATIVE_INTERFACE,
|
||||||
if (!EFI_ERROR(Status)) {
|
&(ProtocolToReturn->SimpleTextIn)
|
||||||
|
);
|
||||||
|
if (!EFI_ERROR (Status)) {
|
||||||
*HandleLocation = ProtocolToReturn->TheHandle;
|
*HandleLocation = ProtocolToReturn->TheHandle;
|
||||||
return ((EFI_SIMPLE_TEXT_INPUT_PROTOCOL*)ProtocolToReturn);
|
return ((EFI_SIMPLE_TEXT_INPUT_PROTOCOL *)ProtocolToReturn);
|
||||||
} else {
|
} else {
|
||||||
FreePool(ProtocolToReturn);
|
FreePool (ProtocolToReturn);
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -193,26 +197,27 @@ CreateSimpleTextInOnFile(
|
|||||||
@retval EFI_SUCCESS The object was closed.
|
@retval EFI_SUCCESS The object was closed.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
CloseSimpleTextInOnFile(
|
CloseSimpleTextInOnFile (
|
||||||
IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *SimpleTextIn
|
IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *SimpleTextIn
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_STATUS Status1;
|
EFI_STATUS Status1;
|
||||||
|
|
||||||
if (SimpleTextIn == NULL) {
|
if (SimpleTextIn == NULL) {
|
||||||
return (EFI_INVALID_PARAMETER);
|
return (EFI_INVALID_PARAMETER);
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = gBS->CloseEvent(((SHELL_EFI_SIMPLE_TEXT_INPUT_PROTOCOL *)SimpleTextIn)->SimpleTextIn.WaitForKey);
|
Status = gBS->CloseEvent (((SHELL_EFI_SIMPLE_TEXT_INPUT_PROTOCOL *)SimpleTextIn)->SimpleTextIn.WaitForKey);
|
||||||
|
|
||||||
Status1 = gBS->UninstallProtocolInterface(
|
Status1 = gBS->UninstallProtocolInterface (
|
||||||
((SHELL_EFI_SIMPLE_TEXT_INPUT_PROTOCOL*)SimpleTextIn)->TheHandle,
|
((SHELL_EFI_SIMPLE_TEXT_INPUT_PROTOCOL *)SimpleTextIn)->TheHandle,
|
||||||
&gEfiSimpleTextInProtocolGuid,
|
&gEfiSimpleTextInProtocolGuid,
|
||||||
&(((SHELL_EFI_SIMPLE_TEXT_INPUT_PROTOCOL*)SimpleTextIn)->SimpleTextIn));
|
&(((SHELL_EFI_SIMPLE_TEXT_INPUT_PROTOCOL *)SimpleTextIn)->SimpleTextIn)
|
||||||
|
);
|
||||||
|
|
||||||
FreePool(SimpleTextIn);
|
FreePool (SimpleTextIn);
|
||||||
if (!EFI_ERROR(Status)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
return (Status1);
|
return (Status1);
|
||||||
} else {
|
} else {
|
||||||
return (Status);
|
return (Status);
|
||||||
@ -230,8 +235,8 @@ CloseSimpleTextInOnFile(
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
FileBasedSimpleTextOutReset (
|
FileBasedSimpleTextOutReset (
|
||||||
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
||||||
IN BOOLEAN ExtendedVerification
|
IN BOOLEAN ExtendedVerification
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return (EFI_SUCCESS);
|
return (EFI_SUCCESS);
|
||||||
@ -249,8 +254,8 @@ FileBasedSimpleTextOutReset (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
FileBasedSimpleTextOutTestString (
|
FileBasedSimpleTextOutTestString (
|
||||||
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
||||||
IN CHAR16 *WString
|
IN CHAR16 *WString
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return (EFI_SUCCESS);
|
return (EFI_SUCCESS);
|
||||||
@ -270,22 +275,23 @@ FileBasedSimpleTextOutTestString (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
FileBasedSimpleTextOutQueryMode (
|
FileBasedSimpleTextOutQueryMode (
|
||||||
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
||||||
IN UINTN ModeNumber,
|
IN UINTN ModeNumber,
|
||||||
OUT UINTN *Columns,
|
OUT UINTN *Columns,
|
||||||
OUT UINTN *Rows
|
OUT UINTN *Rows
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *PassThruProtocol;
|
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *PassThruProtocol;
|
||||||
|
|
||||||
PassThruProtocol = ((SHELL_EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *)This)->OriginalSimpleTextOut;
|
PassThruProtocol = ((SHELL_EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *)This)->OriginalSimpleTextOut;
|
||||||
|
|
||||||
// Pass the QueryMode call thru to the original SimpleTextOutProtocol
|
// Pass the QueryMode call thru to the original SimpleTextOutProtocol
|
||||||
return (PassThruProtocol->QueryMode(
|
return (PassThruProtocol->QueryMode (
|
||||||
PassThruProtocol,
|
PassThruProtocol,
|
||||||
ModeNumber,
|
ModeNumber,
|
||||||
Columns,
|
Columns,
|
||||||
Rows));
|
Rows
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -300,7 +306,7 @@ EFI_STATUS
|
|||||||
EFIAPI
|
EFIAPI
|
||||||
FileBasedSimpleTextOutSetMode (
|
FileBasedSimpleTextOutSetMode (
|
||||||
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
||||||
IN UINTN ModeNumber
|
IN UINTN ModeNumber
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return (EFI_UNSUPPORTED);
|
return (EFI_UNSUPPORTED);
|
||||||
@ -320,8 +326,8 @@ FileBasedSimpleTextOutSetMode (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
FileBasedSimpleTextOutSetAttribute (
|
FileBasedSimpleTextOutSetAttribute (
|
||||||
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
||||||
IN UINTN Attribute
|
IN UINTN Attribute
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return (EFI_SUCCESS);
|
return (EFI_SUCCESS);
|
||||||
@ -357,8 +363,8 @@ EFI_STATUS
|
|||||||
EFIAPI
|
EFIAPI
|
||||||
FileBasedSimpleTextOutSetCursorPosition (
|
FileBasedSimpleTextOutSetCursorPosition (
|
||||||
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
||||||
IN UINTN Column,
|
IN UINTN Column,
|
||||||
IN UINTN Row
|
IN UINTN Row
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return (EFI_SUCCESS);
|
return (EFI_SUCCESS);
|
||||||
@ -377,7 +383,7 @@ EFI_STATUS
|
|||||||
EFIAPI
|
EFIAPI
|
||||||
FileBasedSimpleTextOutEnableCursor (
|
FileBasedSimpleTextOutEnableCursor (
|
||||||
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
||||||
IN BOOLEAN Visible
|
IN BOOLEAN Visible
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return (EFI_SUCCESS);
|
return (EFI_SUCCESS);
|
||||||
@ -402,16 +408,18 @@ FileBasedSimpleTextOutEnableCursor (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
FileBasedSimpleTextOutOutputString (
|
FileBasedSimpleTextOutOutputString (
|
||||||
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
|
||||||
IN CHAR16 *WString
|
IN CHAR16 *WString
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINTN Size;
|
UINTN Size;
|
||||||
Size = StrLen(WString) * sizeof(CHAR16);
|
|
||||||
return (ShellInfoObject.NewEfiShellProtocol->WriteFile(
|
Size = StrLen (WString) * sizeof (CHAR16);
|
||||||
((SHELL_EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *)This)->FileHandle,
|
return (ShellInfoObject.NewEfiShellProtocol->WriteFile (
|
||||||
&Size,
|
((SHELL_EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *)This)->FileHandle,
|
||||||
WString));
|
&Size,
|
||||||
|
WString
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -425,24 +433,25 @@ FileBasedSimpleTextOutOutputString (
|
|||||||
@retval NULL There was insufficient memory available.
|
@retval NULL There was insufficient memory available.
|
||||||
@return A pointer to the allocated protocol structure;
|
@return A pointer to the allocated protocol structure;
|
||||||
**/
|
**/
|
||||||
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL*
|
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *
|
||||||
CreateSimpleTextOutOnFile(
|
CreateSimpleTextOutOnFile (
|
||||||
IN SHELL_FILE_HANDLE FileHandleToUse,
|
IN SHELL_FILE_HANDLE FileHandleToUse,
|
||||||
IN EFI_HANDLE *HandleLocation,
|
IN EFI_HANDLE *HandleLocation,
|
||||||
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *OriginalProtocol
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *OriginalProtocol
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
SHELL_EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ProtocolToReturn;
|
SHELL_EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ProtocolToReturn;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
if (HandleLocation == NULL || FileHandleToUse == NULL) {
|
if ((HandleLocation == NULL) || (FileHandleToUse == NULL)) {
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
ProtocolToReturn = AllocateZeroPool(sizeof(SHELL_EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL));
|
ProtocolToReturn = AllocateZeroPool (sizeof (SHELL_EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL));
|
||||||
if (ProtocolToReturn == NULL) {
|
if (ProtocolToReturn == NULL) {
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
ProtocolToReturn->FileHandle = FileHandleToUse;
|
ProtocolToReturn->FileHandle = FileHandleToUse;
|
||||||
ProtocolToReturn->OriginalSimpleTextOut = OriginalProtocol;
|
ProtocolToReturn->OriginalSimpleTextOut = OriginalProtocol;
|
||||||
ProtocolToReturn->SimpleTextOut.Reset = FileBasedSimpleTextOutReset;
|
ProtocolToReturn->SimpleTextOut.Reset = FileBasedSimpleTextOutReset;
|
||||||
@ -454,11 +463,12 @@ CreateSimpleTextOutOnFile(
|
|||||||
ProtocolToReturn->SimpleTextOut.SetCursorPosition = FileBasedSimpleTextOutSetCursorPosition;
|
ProtocolToReturn->SimpleTextOut.SetCursorPosition = FileBasedSimpleTextOutSetCursorPosition;
|
||||||
ProtocolToReturn->SimpleTextOut.EnableCursor = FileBasedSimpleTextOutEnableCursor;
|
ProtocolToReturn->SimpleTextOut.EnableCursor = FileBasedSimpleTextOutEnableCursor;
|
||||||
ProtocolToReturn->SimpleTextOut.OutputString = FileBasedSimpleTextOutOutputString;
|
ProtocolToReturn->SimpleTextOut.OutputString = FileBasedSimpleTextOutOutputString;
|
||||||
ProtocolToReturn->SimpleTextOut.Mode = AllocateZeroPool(sizeof(EFI_SIMPLE_TEXT_OUTPUT_MODE));
|
ProtocolToReturn->SimpleTextOut.Mode = AllocateZeroPool (sizeof (EFI_SIMPLE_TEXT_OUTPUT_MODE));
|
||||||
if (ProtocolToReturn->SimpleTextOut.Mode == NULL) {
|
if (ProtocolToReturn->SimpleTextOut.Mode == NULL) {
|
||||||
FreePool(ProtocolToReturn);
|
FreePool (ProtocolToReturn);
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
ProtocolToReturn->SimpleTextOut.Mode->MaxMode = OriginalProtocol->Mode->MaxMode;
|
ProtocolToReturn->SimpleTextOut.Mode->MaxMode = OriginalProtocol->Mode->MaxMode;
|
||||||
ProtocolToReturn->SimpleTextOut.Mode->Mode = OriginalProtocol->Mode->Mode;
|
ProtocolToReturn->SimpleTextOut.Mode->Mode = OriginalProtocol->Mode->Mode;
|
||||||
ProtocolToReturn->SimpleTextOut.Mode->Attribute = OriginalProtocol->Mode->Attribute;
|
ProtocolToReturn->SimpleTextOut.Mode->Attribute = OriginalProtocol->Mode->Attribute;
|
||||||
@ -466,17 +476,18 @@ CreateSimpleTextOutOnFile(
|
|||||||
ProtocolToReturn->SimpleTextOut.Mode->CursorRow = OriginalProtocol->Mode->CursorRow;
|
ProtocolToReturn->SimpleTextOut.Mode->CursorRow = OriginalProtocol->Mode->CursorRow;
|
||||||
ProtocolToReturn->SimpleTextOut.Mode->CursorVisible = OriginalProtocol->Mode->CursorVisible;
|
ProtocolToReturn->SimpleTextOut.Mode->CursorVisible = OriginalProtocol->Mode->CursorVisible;
|
||||||
|
|
||||||
Status = gBS->InstallProtocolInterface(
|
Status = gBS->InstallProtocolInterface (
|
||||||
&(ProtocolToReturn->TheHandle),
|
&(ProtocolToReturn->TheHandle),
|
||||||
&gEfiSimpleTextOutProtocolGuid,
|
&gEfiSimpleTextOutProtocolGuid,
|
||||||
EFI_NATIVE_INTERFACE,
|
EFI_NATIVE_INTERFACE,
|
||||||
&(ProtocolToReturn->SimpleTextOut));
|
&(ProtocolToReturn->SimpleTextOut)
|
||||||
if (!EFI_ERROR(Status)) {
|
);
|
||||||
|
if (!EFI_ERROR (Status)) {
|
||||||
*HandleLocation = ProtocolToReturn->TheHandle;
|
*HandleLocation = ProtocolToReturn->TheHandle;
|
||||||
return ((EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL*)ProtocolToReturn);
|
return ((EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *)ProtocolToReturn);
|
||||||
} else {
|
} else {
|
||||||
SHELL_FREE_NON_NULL(ProtocolToReturn->SimpleTextOut.Mode);
|
SHELL_FREE_NON_NULL (ProtocolToReturn->SimpleTextOut.Mode);
|
||||||
SHELL_FREE_NON_NULL(ProtocolToReturn);
|
SHELL_FREE_NON_NULL (ProtocolToReturn);
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -490,19 +501,22 @@ CreateSimpleTextOutOnFile(
|
|||||||
@retval EFI_SUCCESS The object was closed.
|
@retval EFI_SUCCESS The object was closed.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
CloseSimpleTextOutOnFile(
|
CloseSimpleTextOutOnFile (
|
||||||
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *SimpleTextOut
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *SimpleTextOut
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
if (SimpleTextOut == NULL) {
|
if (SimpleTextOut == NULL) {
|
||||||
return (EFI_INVALID_PARAMETER);
|
return (EFI_INVALID_PARAMETER);
|
||||||
}
|
}
|
||||||
Status = gBS->UninstallProtocolInterface(
|
|
||||||
((SHELL_EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL*)SimpleTextOut)->TheHandle,
|
Status = gBS->UninstallProtocolInterface (
|
||||||
&gEfiSimpleTextOutProtocolGuid,
|
((SHELL_EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *)SimpleTextOut)->TheHandle,
|
||||||
&(((SHELL_EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL*)SimpleTextOut)->SimpleTextOut));
|
&gEfiSimpleTextOutProtocolGuid,
|
||||||
FreePool(SimpleTextOut->Mode);
|
&(((SHELL_EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *)SimpleTextOut)->SimpleTextOut)
|
||||||
FreePool(SimpleTextOut);
|
);
|
||||||
|
FreePool (SimpleTextOut->Mode);
|
||||||
|
FreePool (SimpleTextOut);
|
||||||
return (Status);
|
return (Status);
|
||||||
}
|
}
|
||||||
|
@ -20,8 +20,8 @@
|
|||||||
@retval NULL There was insufficient memory available.
|
@retval NULL There was insufficient memory available.
|
||||||
@return A pointer to the allocated protocol structure;
|
@return A pointer to the allocated protocol structure;
|
||||||
**/
|
**/
|
||||||
EFI_SIMPLE_TEXT_INPUT_PROTOCOL*
|
EFI_SIMPLE_TEXT_INPUT_PROTOCOL *
|
||||||
CreateSimpleTextInOnFile(
|
CreateSimpleTextInOnFile (
|
||||||
IN SHELL_FILE_HANDLE FileHandleToUse,
|
IN SHELL_FILE_HANDLE FileHandleToUse,
|
||||||
IN EFI_HANDLE *HandleLocation
|
IN EFI_HANDLE *HandleLocation
|
||||||
);
|
);
|
||||||
@ -35,7 +35,7 @@ CreateSimpleTextInOnFile(
|
|||||||
@retval EFI_SUCCESS The object was closed.
|
@retval EFI_SUCCESS The object was closed.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
CloseSimpleTextInOnFile(
|
CloseSimpleTextInOnFile (
|
||||||
IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *SimpleTextIn
|
IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *SimpleTextIn
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -50,11 +50,11 @@ CloseSimpleTextInOnFile(
|
|||||||
@retval NULL There was insufficient memory available.
|
@retval NULL There was insufficient memory available.
|
||||||
@return A pointer to the allocated protocol structure;
|
@return A pointer to the allocated protocol structure;
|
||||||
**/
|
**/
|
||||||
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL*
|
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *
|
||||||
CreateSimpleTextOutOnFile(
|
CreateSimpleTextOutOnFile (
|
||||||
IN SHELL_FILE_HANDLE FileHandleToUse,
|
IN SHELL_FILE_HANDLE FileHandleToUse,
|
||||||
IN EFI_HANDLE *HandleLocation,
|
IN EFI_HANDLE *HandleLocation,
|
||||||
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *OriginalProtocol
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *OriginalProtocol
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -66,9 +66,8 @@ CreateSimpleTextOutOnFile(
|
|||||||
@retval EFI_SUCCESS The object was closed.
|
@retval EFI_SUCCESS The object was closed.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
CloseSimpleTextOutOnFile(
|
CloseSimpleTextOutOnFile (
|
||||||
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *SimpleTextOut
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *SimpleTextOut
|
||||||
);
|
);
|
||||||
|
|
||||||
#endif //_SHELL_CONSOLE_WRAPPERS_HEADER_
|
#endif //_SHELL_CONSOLE_WRAPPERS_HEADER_
|
||||||
|
|
||||||
|
@ -18,9 +18,9 @@
|
|||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
MoveCursorBackward (
|
MoveCursorBackward (
|
||||||
IN UINTN LineLength,
|
IN UINTN LineLength,
|
||||||
IN OUT UINTN *Column,
|
IN OUT UINTN *Column,
|
||||||
IN OUT UINTN *Row
|
IN OUT UINTN *Row
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -33,10 +33,10 @@ MoveCursorBackward (
|
|||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
MoveCursorForward (
|
MoveCursorForward (
|
||||||
IN UINTN LineLength,
|
IN UINTN LineLength,
|
||||||
IN UINTN TotalRow,
|
IN UINTN TotalRow,
|
||||||
IN OUT UINTN *Column,
|
IN OUT UINTN *Column,
|
||||||
IN OUT UINTN *Row
|
IN OUT UINTN *Row
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -50,10 +50,9 @@ MoveCursorForward (
|
|||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
PrintCommandHistory (
|
PrintCommandHistory (
|
||||||
IN CONST UINTN TotalCols,
|
IN CONST UINTN TotalCols,
|
||||||
IN CONST UINTN TotalRows,
|
IN CONST UINTN TotalRows,
|
||||||
IN CONST UINTN StartColumn
|
IN CONST UINTN StartColumn
|
||||||
);
|
);
|
||||||
|
|
||||||
#endif //_FILE_HANDLE_INTERNAL_HEADER_
|
#endif //_FILE_HANDLE_INTERNAL_HEADER_
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -10,34 +10,34 @@
|
|||||||
#define _SHELL_FILE_HANDLE_WRAPPERS_HEADER_
|
#define _SHELL_FILE_HANDLE_WRAPPERS_HEADER_
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
LIST_ENTRY Link;
|
LIST_ENTRY Link;
|
||||||
CHAR16* Buffer;
|
CHAR16 *Buffer;
|
||||||
} SHELL_LINE_LIST;
|
} SHELL_LINE_LIST;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
UINTN LogCount;
|
UINTN LogCount;
|
||||||
SHELL_LINE_LIST *Log;
|
SHELL_LINE_LIST *Log;
|
||||||
} SHELL_LINE_LOG;
|
} SHELL_LINE_LOG;
|
||||||
|
|
||||||
///
|
///
|
||||||
/// FILE styte interfaces for StdIn.
|
/// FILE styte interfaces for StdIn.
|
||||||
///
|
///
|
||||||
extern EFI_FILE_PROTOCOL FileInterfaceStdIn;
|
extern EFI_FILE_PROTOCOL FileInterfaceStdIn;
|
||||||
|
|
||||||
///
|
///
|
||||||
/// FILE styte interfaces for StdOut.
|
/// FILE styte interfaces for StdOut.
|
||||||
///
|
///
|
||||||
extern EFI_FILE_PROTOCOL FileInterfaceStdOut;
|
extern EFI_FILE_PROTOCOL FileInterfaceStdOut;
|
||||||
|
|
||||||
///
|
///
|
||||||
/// FILE styte interfaces for StdErr.
|
/// FILE styte interfaces for StdErr.
|
||||||
///
|
///
|
||||||
extern EFI_FILE_PROTOCOL FileInterfaceStdErr;
|
extern EFI_FILE_PROTOCOL FileInterfaceStdErr;
|
||||||
|
|
||||||
///
|
///
|
||||||
/// FILE style interface for NUL file.
|
/// FILE style interface for NUL file.
|
||||||
///
|
///
|
||||||
extern EFI_FILE_PROTOCOL FileInterfaceNulFile;
|
extern EFI_FILE_PROTOCOL FileInterfaceNulFile;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Creates a EFI_FILE_PROTOCOL (almost) object for using to access
|
Creates a EFI_FILE_PROTOCOL (almost) object for using to access
|
||||||
@ -48,9 +48,9 @@ extern EFI_FILE_PROTOCOL FileInterfaceNulFile;
|
|||||||
@retval NULL Memory could not be allocated.
|
@retval NULL Memory could not be allocated.
|
||||||
@return other a pointer to an EFI_FILE_PROTOCOL structure
|
@return other a pointer to an EFI_FILE_PROTOCOL structure
|
||||||
**/
|
**/
|
||||||
EFI_FILE_PROTOCOL*
|
EFI_FILE_PROTOCOL *
|
||||||
CreateFileInterfaceEnv(
|
CreateFileInterfaceEnv (
|
||||||
CONST CHAR16 *EnvName
|
CONST CHAR16 *EnvName
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -62,9 +62,9 @@ CreateFileInterfaceEnv(
|
|||||||
@retval NULL Memory could not be allocated.
|
@retval NULL Memory could not be allocated.
|
||||||
@return other a pointer to an EFI_FILE_PROTOCOL structure
|
@return other a pointer to an EFI_FILE_PROTOCOL structure
|
||||||
**/
|
**/
|
||||||
EFI_FILE_PROTOCOL*
|
EFI_FILE_PROTOCOL *
|
||||||
CreateFileInterfaceMem(
|
CreateFileInterfaceMem (
|
||||||
IN CONST BOOLEAN Unicode
|
IN CONST BOOLEAN Unicode
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -77,11 +77,10 @@ CreateFileInterfaceMem(
|
|||||||
@retval NULL Memory could not be allocated.
|
@retval NULL Memory could not be allocated.
|
||||||
@return other a pointer to an EFI_FILE_PROTOCOL structure
|
@return other a pointer to an EFI_FILE_PROTOCOL structure
|
||||||
**/
|
**/
|
||||||
EFI_FILE_PROTOCOL*
|
EFI_FILE_PROTOCOL *
|
||||||
CreateFileInterfaceFile(
|
CreateFileInterfaceFile (
|
||||||
IN CONST EFI_FILE_PROTOCOL *Template,
|
IN CONST EFI_FILE_PROTOCOL *Template,
|
||||||
IN CONST BOOLEAN Unicode
|
IN CONST BOOLEAN Unicode
|
||||||
);
|
);
|
||||||
|
|
||||||
#endif //_SHELL_FILE_HANDLE_WRAPPERS_HEADER_
|
#endif //_SHELL_FILE_HANDLE_WRAPPERS_HEADER_
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -51,75 +51,75 @@
|
|||||||
#include "ConsoleWrappers.h"
|
#include "ConsoleWrappers.h"
|
||||||
#include "FileHandleWrappers.h"
|
#include "FileHandleWrappers.h"
|
||||||
|
|
||||||
extern CONST CHAR16 mNoNestingEnvVarName[];
|
extern CONST CHAR16 mNoNestingEnvVarName[];
|
||||||
extern CONST CHAR16 mNoNestingTrue[];
|
extern CONST CHAR16 mNoNestingTrue[];
|
||||||
extern CONST CHAR16 mNoNestingFalse[];
|
extern CONST CHAR16 mNoNestingFalse[];
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
LIST_ENTRY Link; ///< Standard linked list handler.
|
LIST_ENTRY Link; ///< Standard linked list handler.
|
||||||
SHELL_FILE_HANDLE SplitStdOut; ///< ConsoleOut for use in the split.
|
SHELL_FILE_HANDLE SplitStdOut; ///< ConsoleOut for use in the split.
|
||||||
SHELL_FILE_HANDLE SplitStdIn; ///< ConsoleIn for use in the split.
|
SHELL_FILE_HANDLE SplitStdIn; ///< ConsoleIn for use in the split.
|
||||||
} SPLIT_LIST;
|
} SPLIT_LIST;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
UINT32 Startup:1; ///< Was "-startup" found on command line.
|
UINT32 Startup : 1; ///< Was "-startup" found on command line.
|
||||||
UINT32 NoStartup:1; ///< Was "-nostartup" found on command line.
|
UINT32 NoStartup : 1; ///< Was "-nostartup" found on command line.
|
||||||
UINT32 NoConsoleOut:1; ///< Was "-noconsoleout" found on command line.
|
UINT32 NoConsoleOut : 1; ///< Was "-noconsoleout" found on command line.
|
||||||
UINT32 NoConsoleIn:1; ///< Was "-noconsolein" found on command line.
|
UINT32 NoConsoleIn : 1; ///< Was "-noconsolein" found on command line.
|
||||||
UINT32 NoInterrupt:1; ///< Was "-nointerrupt" found on command line.
|
UINT32 NoInterrupt : 1; ///< Was "-nointerrupt" found on command line.
|
||||||
UINT32 NoMap:1; ///< Was "-nomap" found on command line.
|
UINT32 NoMap : 1; ///< Was "-nomap" found on command line.
|
||||||
UINT32 NoVersion:1; ///< Was "-noversion" found on command line.
|
UINT32 NoVersion : 1; ///< Was "-noversion" found on command line.
|
||||||
UINT32 Delay:1; ///< Was "-delay[:n] found on command line
|
UINT32 Delay : 1; ///< Was "-delay[:n] found on command line
|
||||||
UINT32 Exit:1; ///< Was "-_exit" found on command line
|
UINT32 Exit : 1; ///< Was "-_exit" found on command line
|
||||||
UINT32 NoNest:1; ///< Was "-nonest" found on command line
|
UINT32 NoNest : 1; ///< Was "-nonest" found on command line
|
||||||
UINT32 Reserved:7; ///< Extra bits
|
UINT32 Reserved : 7; ///< Extra bits
|
||||||
} SHELL_BITS;
|
} SHELL_BITS;
|
||||||
|
|
||||||
typedef union {
|
typedef union {
|
||||||
SHELL_BITS Bits;
|
SHELL_BITS Bits;
|
||||||
UINT16 AllBits;
|
UINT16 AllBits;
|
||||||
} SHELL_BIT_UNION;
|
} SHELL_BIT_UNION;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
SHELL_BIT_UNION BitUnion;
|
SHELL_BIT_UNION BitUnion;
|
||||||
UINTN Delay; ///< Seconds of delay default:5.
|
UINTN Delay; ///< Seconds of delay default:5.
|
||||||
CHAR16 *FileName; ///< Filename to run upon successful initialization.
|
CHAR16 *FileName; ///< Filename to run upon successful initialization.
|
||||||
CHAR16 *FileOptions; ///< Options to pass to FileName.
|
CHAR16 *FileOptions; ///< Options to pass to FileName.
|
||||||
} SHELL_INIT_SETTINGS;
|
} SHELL_INIT_SETTINGS;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
BUFFER_LIST CommandHistory;
|
BUFFER_LIST CommandHistory;
|
||||||
UINTN VisibleRowNumber;
|
UINTN VisibleRowNumber;
|
||||||
UINTN OriginalVisibleRowNumber;
|
UINTN OriginalVisibleRowNumber;
|
||||||
BOOLEAN InsertMode; ///< Is the current typing mode insert (FALSE = overwrite).
|
BOOLEAN InsertMode; ///< Is the current typing mode insert (FALSE = overwrite).
|
||||||
} SHELL_VIEWING_SETTINGS;
|
} SHELL_VIEWING_SETTINGS;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
EFI_SHELL_PARAMETERS_PROTOCOL *NewShellParametersProtocol;
|
EFI_SHELL_PARAMETERS_PROTOCOL *NewShellParametersProtocol;
|
||||||
EFI_SHELL_PROTOCOL *NewEfiShellProtocol;
|
EFI_SHELL_PROTOCOL *NewEfiShellProtocol;
|
||||||
BOOLEAN PageBreakEnabled;
|
BOOLEAN PageBreakEnabled;
|
||||||
BOOLEAN RootShellInstance;
|
BOOLEAN RootShellInstance;
|
||||||
SHELL_INIT_SETTINGS ShellInitSettings;
|
SHELL_INIT_SETTINGS ShellInitSettings;
|
||||||
BUFFER_LIST BufferToFreeList; ///< List of buffers that were returned to the user to free.
|
BUFFER_LIST BufferToFreeList; ///< List of buffers that were returned to the user to free.
|
||||||
SHELL_VIEWING_SETTINGS ViewingSettings;
|
SHELL_VIEWING_SETTINGS ViewingSettings;
|
||||||
EFI_HII_HANDLE HiiHandle; ///< Handle from HiiLib.
|
EFI_HII_HANDLE HiiHandle; ///< Handle from HiiLib.
|
||||||
UINTN LogScreenCount; ///< How many screens of log information to save.
|
UINTN LogScreenCount; ///< How many screens of log information to save.
|
||||||
EFI_EVENT UserBreakTimer; ///< Timer event for polling for CTRL-C.
|
EFI_EVENT UserBreakTimer; ///< Timer event for polling for CTRL-C.
|
||||||
EFI_DEVICE_PATH_PROTOCOL *ImageDevPath; ///< DevicePath for ourselves.
|
EFI_DEVICE_PATH_PROTOCOL *ImageDevPath; ///< DevicePath for ourselves.
|
||||||
EFI_DEVICE_PATH_PROTOCOL *FileDevPath; ///< DevicePath for ourselves.
|
EFI_DEVICE_PATH_PROTOCOL *FileDevPath; ///< DevicePath for ourselves.
|
||||||
CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo; ///< Pointer for ConsoleInformation.
|
CONSOLE_LOGGER_PRIVATE_DATA *ConsoleInfo; ///< Pointer for ConsoleInformation.
|
||||||
EFI_SHELL_PARAMETERS_PROTOCOL *OldShellParameters; ///< old shell parameters to reinstall upon exiting.
|
EFI_SHELL_PARAMETERS_PROTOCOL *OldShellParameters; ///< old shell parameters to reinstall upon exiting.
|
||||||
SHELL_PROTOCOL_HANDLE_LIST OldShellList; ///< List of other instances to reinstall when closing.
|
SHELL_PROTOCOL_HANDLE_LIST OldShellList; ///< List of other instances to reinstall when closing.
|
||||||
SPLIT_LIST SplitList; ///< List of Splits in FILO stack.
|
SPLIT_LIST SplitList; ///< List of Splits in FILO stack.
|
||||||
VOID *CtrlCNotifyHandle1; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.
|
VOID *CtrlCNotifyHandle1; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.
|
||||||
VOID *CtrlCNotifyHandle2; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.
|
VOID *CtrlCNotifyHandle2; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.
|
||||||
VOID *CtrlCNotifyHandle3; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.
|
VOID *CtrlCNotifyHandle3; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.
|
||||||
VOID *CtrlCNotifyHandle4; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.
|
VOID *CtrlCNotifyHandle4; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.
|
||||||
VOID *CtrlSNotifyHandle1; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.
|
VOID *CtrlSNotifyHandle1; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.
|
||||||
VOID *CtrlSNotifyHandle2; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.
|
VOID *CtrlSNotifyHandle2; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.
|
||||||
VOID *CtrlSNotifyHandle3; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.
|
VOID *CtrlSNotifyHandle3; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.
|
||||||
VOID *CtrlSNotifyHandle4; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.
|
VOID *CtrlSNotifyHandle4; ///< The NotifyHandle returned from SimpleTextInputEx.RegisterKeyNotify.
|
||||||
BOOLEAN HaltOutput; ///< TRUE to start a CTRL-S halt.
|
BOOLEAN HaltOutput; ///< TRUE to start a CTRL-S halt.
|
||||||
} SHELL_INFO;
|
} SHELL_INFO;
|
||||||
|
|
||||||
#pragma pack(1)
|
#pragma pack(1)
|
||||||
@ -127,12 +127,12 @@ typedef struct {
|
|||||||
/// HII specific Vendor Device Path definition.
|
/// HII specific Vendor Device Path definition.
|
||||||
///
|
///
|
||||||
typedef struct {
|
typedef struct {
|
||||||
VENDOR_DEVICE_PATH VendorDevicePath;
|
VENDOR_DEVICE_PATH VendorDevicePath;
|
||||||
EFI_DEVICE_PATH_PROTOCOL End;
|
EFI_DEVICE_PATH_PROTOCOL End;
|
||||||
} SHELL_MAN_HII_VENDOR_DEVICE_PATH;
|
} SHELL_MAN_HII_VENDOR_DEVICE_PATH;
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
|
|
||||||
extern SHELL_INFO ShellInfoObject;
|
extern SHELL_INFO ShellInfoObject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Converts the command line to its post-processed form. this replaces variables and alias' per UEFI Shell spec.
|
Converts the command line to its post-processed form. this replaces variables and alias' per UEFI Shell spec.
|
||||||
@ -144,8 +144,8 @@ extern SHELL_INFO ShellInfoObject;
|
|||||||
@return some other error occurred
|
@return some other error occurred
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
ProcessCommandLineToFinal(
|
ProcessCommandLineToFinal (
|
||||||
IN OUT CHAR16 **CmdLine
|
IN OUT CHAR16 **CmdLine
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -154,8 +154,8 @@ ProcessCommandLineToFinal(
|
|||||||
@param[in] ErrorCode the error code to put into lasterror
|
@param[in] ErrorCode the error code to put into lasterror
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
SetLastError(
|
SetLastError (
|
||||||
IN CONST SHELL_STATUS ErrorCode
|
IN CONST SHELL_STATUS ErrorCode
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -164,7 +164,7 @@ SetLastError(
|
|||||||
@retval EFI_SUCCESS all init commands were run successfully.
|
@retval EFI_SUCCESS all init commands were run successfully.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
SetBuiltInAlias(
|
SetBuiltInAlias (
|
||||||
VOID
|
VOID
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -184,8 +184,8 @@ SetBuiltInAlias(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
GetDevicePathsForImageAndFile (
|
GetDevicePathsForImageAndFile (
|
||||||
IN OUT EFI_DEVICE_PATH_PROTOCOL **DevPath,
|
IN OUT EFI_DEVICE_PATH_PROTOCOL **DevPath,
|
||||||
IN OUT EFI_DEVICE_PATH_PROTOCOL **FilePath
|
IN OUT EFI_DEVICE_PATH_PROTOCOL **FilePath
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -216,7 +216,7 @@ GetDevicePathsForImageAndFile (
|
|||||||
@retval EFI_SUCCESS the variable is initialized.
|
@retval EFI_SUCCESS the variable is initialized.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
ProcessCommandLine(
|
ProcessCommandLine (
|
||||||
VOID
|
VOID
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -231,9 +231,9 @@ ProcessCommandLine(
|
|||||||
@retval EFI_SUCCESS The variable is initialized.
|
@retval EFI_SUCCESS The variable is initialized.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
DoStartupScript(
|
DoStartupScript (
|
||||||
IN EFI_DEVICE_PATH_PROTOCOL *ImagePath,
|
IN EFI_DEVICE_PATH_PROTOCOL *ImagePath,
|
||||||
IN EFI_DEVICE_PATH_PROTOCOL *FilePath
|
IN EFI_DEVICE_PATH_PROTOCOL *FilePath
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -255,9 +255,9 @@ DoShellPrompt (
|
|||||||
|
|
||||||
@param Buffer Something to pass to FreePool when the shell is exiting.
|
@param Buffer Something to pass to FreePool when the shell is exiting.
|
||||||
**/
|
**/
|
||||||
VOID*
|
VOID *
|
||||||
AddBufferToFreeList(
|
AddBufferToFreeList (
|
||||||
VOID *Buffer
|
VOID *Buffer
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -266,8 +266,8 @@ AddBufferToFreeList(
|
|||||||
@param Buffer[in] The line buffer to add.
|
@param Buffer[in] The line buffer to add.
|
||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
AddLineToCommandHistory(
|
AddLineToCommandHistory (
|
||||||
IN CONST CHAR16 *Buffer
|
IN CONST CHAR16 *Buffer
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -281,8 +281,8 @@ AddLineToCommandHistory(
|
|||||||
@retval EFI_ABORTED the command's operation was aborted
|
@retval EFI_ABORTED the command's operation was aborted
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
RunCommand(
|
RunCommand (
|
||||||
IN CONST CHAR16 *CmdLine
|
IN CONST CHAR16 *CmdLine
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -298,12 +298,11 @@ RunCommand(
|
|||||||
@retval EFI_ABORTED The command's operation was aborted.
|
@retval EFI_ABORTED The command's operation was aborted.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
RunShellCommand(
|
RunShellCommand (
|
||||||
IN CONST CHAR16 *CmdLine,
|
IN CONST CHAR16 *CmdLine,
|
||||||
OUT EFI_STATUS *CommandStatus
|
OUT EFI_STATUS *CommandStatus
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Function to process a NSH script file via SHELL_FILE_HANDLE.
|
Function to process a NSH script file via SHELL_FILE_HANDLE.
|
||||||
|
|
||||||
@ -346,11 +345,11 @@ RunScriptFile (
|
|||||||
@return the location of the first character in the string
|
@return the location of the first character in the string
|
||||||
@retval CHAR_NULL no instance of any character in CharacterList was found in String
|
@retval CHAR_NULL no instance of any character in CharacterList was found in String
|
||||||
**/
|
**/
|
||||||
CONST CHAR16*
|
CONST CHAR16 *
|
||||||
FindFirstCharacter(
|
FindFirstCharacter (
|
||||||
IN CONST CHAR16 *String,
|
IN CONST CHAR16 *String,
|
||||||
IN CONST CHAR16 *CharacterList,
|
IN CONST CHAR16 *CharacterList,
|
||||||
IN CONST CHAR16 EscapeCharacter
|
IN CONST CHAR16 EscapeCharacter
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -359,8 +358,8 @@ FindFirstCharacter(
|
|||||||
@param[in] String pointer to the string to trim them off.
|
@param[in] String pointer to the string to trim them off.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
TrimSpaces(
|
TrimSpaces (
|
||||||
IN CHAR16 **String
|
IN CHAR16 **String
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -371,7 +370,7 @@ TrimSpaces(
|
|||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
SaveBufferList (
|
SaveBufferList (
|
||||||
OUT LIST_ENTRY *OldBufferList
|
OUT LIST_ENTRY *OldBufferList
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -381,10 +380,7 @@ SaveBufferList (
|
|||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
RestoreBufferList (
|
RestoreBufferList (
|
||||||
IN OUT LIST_ENTRY *OldBufferList
|
IN OUT LIST_ENTRY *OldBufferList
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif //_SHELL_INTERNAL_HEADER_
|
#endif //_SHELL_INTERNAL_HEADER_
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
//
|
//
|
||||||
// The list is used to cache the environment variables.
|
// The list is used to cache the environment variables.
|
||||||
//
|
//
|
||||||
ENV_VAR_LIST gShellEnvVarList;
|
ENV_VAR_LIST gShellEnvVarList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Reports whether an environment variable is Volatile or Non-Volatile.
|
Reports whether an environment variable is Volatile or Non-Volatile.
|
||||||
@ -27,8 +27,8 @@ ENV_VAR_LIST gShellEnvVarList;
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
IsVolatileEnv (
|
IsVolatileEnv (
|
||||||
IN CONST CHAR16 *EnvVarName,
|
IN CONST CHAR16 *EnvVarName,
|
||||||
OUT BOOLEAN *Volatile
|
OUT BOOLEAN *Volatile
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
@ -38,29 +38,35 @@ IsVolatileEnv (
|
|||||||
|
|
||||||
ASSERT (Volatile != NULL);
|
ASSERT (Volatile != NULL);
|
||||||
|
|
||||||
Size = 0;
|
Size = 0;
|
||||||
Buffer = NULL;
|
Buffer = NULL;
|
||||||
|
|
||||||
//
|
//
|
||||||
// get the variable
|
// get the variable
|
||||||
//
|
//
|
||||||
Status = gRT->GetVariable((CHAR16*)EnvVarName,
|
Status = gRT->GetVariable (
|
||||||
&gShellVariableGuid,
|
(CHAR16 *)EnvVarName,
|
||||||
&Attribs,
|
&gShellVariableGuid,
|
||||||
&Size,
|
&Attribs,
|
||||||
Buffer);
|
&Size,
|
||||||
|
Buffer
|
||||||
|
);
|
||||||
if (Status == EFI_BUFFER_TOO_SMALL) {
|
if (Status == EFI_BUFFER_TOO_SMALL) {
|
||||||
Buffer = AllocateZeroPool(Size);
|
Buffer = AllocateZeroPool (Size);
|
||||||
if (Buffer == NULL) {
|
if (Buffer == NULL) {
|
||||||
return EFI_OUT_OF_RESOURCES;
|
return EFI_OUT_OF_RESOURCES;
|
||||||
}
|
}
|
||||||
Status = gRT->GetVariable((CHAR16*)EnvVarName,
|
|
||||||
&gShellVariableGuid,
|
Status = gRT->GetVariable (
|
||||||
&Attribs,
|
(CHAR16 *)EnvVarName,
|
||||||
&Size,
|
&gShellVariableGuid,
|
||||||
Buffer);
|
&Attribs,
|
||||||
FreePool(Buffer);
|
&Size,
|
||||||
|
Buffer
|
||||||
|
);
|
||||||
|
FreePool (Buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// not found means volatile
|
// not found means volatile
|
||||||
//
|
//
|
||||||
@ -68,6 +74,7 @@ IsVolatileEnv (
|
|||||||
*Volatile = TRUE;
|
*Volatile = TRUE;
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
@ -75,7 +82,7 @@ IsVolatileEnv (
|
|||||||
//
|
//
|
||||||
// check for the Non Volatile bit
|
// check for the Non Volatile bit
|
||||||
//
|
//
|
||||||
*Volatile = !(BOOLEAN) ((Attribs & EFI_VARIABLE_NON_VOLATILE) == EFI_VARIABLE_NON_VOLATILE);
|
*Volatile = !(BOOLEAN)((Attribs & EFI_VARIABLE_NON_VOLATILE) == EFI_VARIABLE_NON_VOLATILE);
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,30 +92,33 @@ IsVolatileEnv (
|
|||||||
@param[in] List The pointer to pointer to list.
|
@param[in] List The pointer to pointer to list.
|
||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
FreeEnvironmentVariableList(
|
FreeEnvironmentVariableList (
|
||||||
IN LIST_ENTRY *List
|
IN LIST_ENTRY *List
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
ENV_VAR_LIST *Node;
|
ENV_VAR_LIST *Node;
|
||||||
|
|
||||||
ASSERT (List != NULL);
|
ASSERT (List != NULL);
|
||||||
if (List == NULL) {
|
if (List == NULL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( Node = (ENV_VAR_LIST*)GetFirstNode(List)
|
for ( Node = (ENV_VAR_LIST *)GetFirstNode (List)
|
||||||
; !IsListEmpty(List)
|
; !IsListEmpty (List)
|
||||||
; Node = (ENV_VAR_LIST*)GetFirstNode(List)
|
; Node = (ENV_VAR_LIST *)GetFirstNode (List)
|
||||||
){
|
)
|
||||||
ASSERT(Node != NULL);
|
{
|
||||||
RemoveEntryList(&Node->Link);
|
ASSERT (Node != NULL);
|
||||||
|
RemoveEntryList (&Node->Link);
|
||||||
if (Node->Key != NULL) {
|
if (Node->Key != NULL) {
|
||||||
FreePool(Node->Key);
|
FreePool (Node->Key);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Node->Val != NULL) {
|
if (Node->Val != NULL) {
|
||||||
FreePool(Node->Val);
|
FreePool (Node->Val);
|
||||||
}
|
}
|
||||||
FreePool(Node);
|
|
||||||
|
FreePool (Node);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,18 +131,18 @@ FreeEnvironmentVariableList(
|
|||||||
@retval EFI_SUCCESS the list was created successfully.
|
@retval EFI_SUCCESS the list was created successfully.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
GetEnvironmentVariableList(
|
GetEnvironmentVariableList (
|
||||||
IN OUT LIST_ENTRY *ListHead
|
IN OUT LIST_ENTRY *ListHead
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
CHAR16 *VariableName;
|
CHAR16 *VariableName;
|
||||||
UINTN NameSize;
|
UINTN NameSize;
|
||||||
UINTN NameBufferSize;
|
UINTN NameBufferSize;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_GUID Guid;
|
EFI_GUID Guid;
|
||||||
UINTN ValSize;
|
UINTN ValSize;
|
||||||
UINTN ValBufferSize;
|
UINTN ValBufferSize;
|
||||||
ENV_VAR_LIST *VarList;
|
ENV_VAR_LIST *VarList;
|
||||||
|
|
||||||
if (ListHead == NULL) {
|
if (ListHead == NULL) {
|
||||||
return (EFI_INVALID_PARAMETER);
|
return (EFI_INVALID_PARAMETER);
|
||||||
@ -140,34 +150,36 @@ GetEnvironmentVariableList(
|
|||||||
|
|
||||||
Status = EFI_SUCCESS;
|
Status = EFI_SUCCESS;
|
||||||
|
|
||||||
ValBufferSize = INIT_DATA_BUFFER_SIZE;
|
ValBufferSize = INIT_DATA_BUFFER_SIZE;
|
||||||
NameBufferSize = INIT_NAME_BUFFER_SIZE;
|
NameBufferSize = INIT_NAME_BUFFER_SIZE;
|
||||||
VariableName = AllocateZeroPool(NameBufferSize);
|
VariableName = AllocateZeroPool (NameBufferSize);
|
||||||
if (VariableName == NULL) {
|
if (VariableName == NULL) {
|
||||||
return (EFI_OUT_OF_RESOURCES);
|
return (EFI_OUT_OF_RESOURCES);
|
||||||
}
|
}
|
||||||
|
|
||||||
*VariableName = CHAR_NULL;
|
*VariableName = CHAR_NULL;
|
||||||
|
|
||||||
while (!EFI_ERROR(Status)) {
|
while (!EFI_ERROR (Status)) {
|
||||||
NameSize = NameBufferSize;
|
NameSize = NameBufferSize;
|
||||||
Status = gRT->GetNextVariableName(&NameSize, VariableName, &Guid);
|
Status = gRT->GetNextVariableName (&NameSize, VariableName, &Guid);
|
||||||
if (Status == EFI_NOT_FOUND){
|
if (Status == EFI_NOT_FOUND) {
|
||||||
Status = EFI_SUCCESS;
|
Status = EFI_SUCCESS;
|
||||||
break;
|
break;
|
||||||
} else if (Status == EFI_BUFFER_TOO_SMALL) {
|
} else if (Status == EFI_BUFFER_TOO_SMALL) {
|
||||||
NameBufferSize = NameSize > NameBufferSize * 2 ? NameSize : NameBufferSize * 2;
|
NameBufferSize = NameSize > NameBufferSize * 2 ? NameSize : NameBufferSize * 2;
|
||||||
SHELL_FREE_NON_NULL(VariableName);
|
SHELL_FREE_NON_NULL (VariableName);
|
||||||
VariableName = AllocateZeroPool(NameBufferSize);
|
VariableName = AllocateZeroPool (NameBufferSize);
|
||||||
if (VariableName == NULL) {
|
if (VariableName == NULL) {
|
||||||
Status = EFI_OUT_OF_RESOURCES;
|
Status = EFI_OUT_OF_RESOURCES;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
NameSize = NameBufferSize;
|
NameSize = NameBufferSize;
|
||||||
Status = gRT->GetNextVariableName(&NameSize, VariableName, &Guid);
|
Status = gRT->GetNextVariableName (&NameSize, VariableName, &Guid);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!EFI_ERROR(Status) && CompareGuid(&Guid, &gShellVariableGuid)){
|
if (!EFI_ERROR (Status) && CompareGuid (&Guid, &gShellVariableGuid)) {
|
||||||
VarList = AllocateZeroPool(sizeof(ENV_VAR_LIST));
|
VarList = AllocateZeroPool (sizeof (ENV_VAR_LIST));
|
||||||
if (VarList == NULL) {
|
if (VarList == NULL) {
|
||||||
Status = EFI_OUT_OF_RESOURCES;
|
Status = EFI_OUT_OF_RESOURCES;
|
||||||
} else {
|
} else {
|
||||||
@ -177,12 +189,13 @@ GetEnvironmentVariableList(
|
|||||||
//
|
//
|
||||||
VarList->Val = AllocateZeroPool (ValSize + sizeof (CHAR16));
|
VarList->Val = AllocateZeroPool (ValSize + sizeof (CHAR16));
|
||||||
if (VarList->Val == NULL) {
|
if (VarList->Val == NULL) {
|
||||||
SHELL_FREE_NON_NULL(VarList);
|
SHELL_FREE_NON_NULL (VarList);
|
||||||
Status = EFI_OUT_OF_RESOURCES;
|
Status = EFI_OUT_OF_RESOURCES;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Status = SHELL_GET_ENVIRONMENT_VARIABLE_AND_ATTRIBUTES(VariableName, &VarList->Atts, &ValSize, VarList->Val);
|
|
||||||
if (Status == EFI_BUFFER_TOO_SMALL){
|
Status = SHELL_GET_ENVIRONMENT_VARIABLE_AND_ATTRIBUTES (VariableName, &VarList->Atts, &ValSize, VarList->Val);
|
||||||
|
if (Status == EFI_BUFFER_TOO_SMALL) {
|
||||||
ValBufferSize = ValSize > ValBufferSize * 2 ? ValSize : ValBufferSize * 2;
|
ValBufferSize = ValSize > ValBufferSize * 2 ? ValSize : ValBufferSize * 2;
|
||||||
SHELL_FREE_NON_NULL (VarList->Val);
|
SHELL_FREE_NON_NULL (VarList->Val);
|
||||||
//
|
//
|
||||||
@ -190,34 +203,36 @@ GetEnvironmentVariableList(
|
|||||||
//
|
//
|
||||||
VarList->Val = AllocateZeroPool (ValBufferSize + sizeof (CHAR16));
|
VarList->Val = AllocateZeroPool (ValBufferSize + sizeof (CHAR16));
|
||||||
if (VarList->Val == NULL) {
|
if (VarList->Val == NULL) {
|
||||||
SHELL_FREE_NON_NULL(VarList);
|
SHELL_FREE_NON_NULL (VarList);
|
||||||
Status = EFI_OUT_OF_RESOURCES;
|
Status = EFI_OUT_OF_RESOURCES;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ValSize = ValBufferSize;
|
ValSize = ValBufferSize;
|
||||||
Status = SHELL_GET_ENVIRONMENT_VARIABLE_AND_ATTRIBUTES(VariableName, &VarList->Atts, &ValSize, VarList->Val);
|
Status = SHELL_GET_ENVIRONMENT_VARIABLE_AND_ATTRIBUTES (VariableName, &VarList->Atts, &ValSize, VarList->Val);
|
||||||
}
|
}
|
||||||
if (!EFI_ERROR(Status)) {
|
|
||||||
VarList->Key = AllocateCopyPool(StrSize(VariableName), VariableName);
|
if (!EFI_ERROR (Status)) {
|
||||||
|
VarList->Key = AllocateCopyPool (StrSize (VariableName), VariableName);
|
||||||
if (VarList->Key == NULL) {
|
if (VarList->Key == NULL) {
|
||||||
SHELL_FREE_NON_NULL(VarList->Val);
|
SHELL_FREE_NON_NULL (VarList->Val);
|
||||||
SHELL_FREE_NON_NULL(VarList);
|
SHELL_FREE_NON_NULL (VarList);
|
||||||
Status = EFI_OUT_OF_RESOURCES;
|
Status = EFI_OUT_OF_RESOURCES;
|
||||||
} else {
|
} else {
|
||||||
InsertTailList(ListHead, &VarList->Link);
|
InsertTailList (ListHead, &VarList->Link);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
SHELL_FREE_NON_NULL(VarList->Val);
|
SHELL_FREE_NON_NULL (VarList->Val);
|
||||||
SHELL_FREE_NON_NULL(VarList);
|
SHELL_FREE_NON_NULL (VarList);
|
||||||
}
|
}
|
||||||
} // if (VarList == NULL) ... else ...
|
} // if (VarList == NULL) ... else ...
|
||||||
} // compare guid
|
} // compare guid
|
||||||
} // while
|
} // while
|
||||||
|
|
||||||
SHELL_FREE_NON_NULL (VariableName);
|
SHELL_FREE_NON_NULL (VariableName);
|
||||||
|
|
||||||
if (EFI_ERROR(Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
FreeEnvironmentVariableList(ListHead);
|
FreeEnvironmentVariableList (ListHead);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (Status);
|
return (Status);
|
||||||
@ -236,51 +251,56 @@ GetEnvironmentVariableList(
|
|||||||
@retval EFI_SUCCESS the list was Set successfully.
|
@retval EFI_SUCCESS the list was Set successfully.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
SetEnvironmentVariableList(
|
SetEnvironmentVariableList (
|
||||||
IN LIST_ENTRY *ListHead
|
IN LIST_ENTRY *ListHead
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
ENV_VAR_LIST VarList;
|
ENV_VAR_LIST VarList;
|
||||||
ENV_VAR_LIST *Node;
|
ENV_VAR_LIST *Node;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
UINTN Size;
|
UINTN Size;
|
||||||
|
|
||||||
InitializeListHead(&VarList.Link);
|
InitializeListHead (&VarList.Link);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Delete all the current environment variables
|
// Delete all the current environment variables
|
||||||
//
|
//
|
||||||
Status = GetEnvironmentVariableList(&VarList.Link);
|
Status = GetEnvironmentVariableList (&VarList.Link);
|
||||||
ASSERT_EFI_ERROR(Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
for ( Node = (ENV_VAR_LIST*)GetFirstNode(&VarList.Link)
|
for ( Node = (ENV_VAR_LIST *)GetFirstNode (&VarList.Link)
|
||||||
; !IsNull(&VarList.Link, &Node->Link)
|
; !IsNull (&VarList.Link, &Node->Link)
|
||||||
; Node = (ENV_VAR_LIST*)GetNextNode(&VarList.Link, &Node->Link)
|
; Node = (ENV_VAR_LIST *)GetNextNode (&VarList.Link, &Node->Link)
|
||||||
){
|
)
|
||||||
|
{
|
||||||
if (Node->Key != NULL) {
|
if (Node->Key != NULL) {
|
||||||
Status = SHELL_DELETE_ENVIRONMENT_VARIABLE(Node->Key);
|
Status = SHELL_DELETE_ENVIRONMENT_VARIABLE (Node->Key);
|
||||||
}
|
}
|
||||||
ASSERT_EFI_ERROR(Status);
|
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
}
|
}
|
||||||
|
|
||||||
FreeEnvironmentVariableList(&VarList.Link);
|
FreeEnvironmentVariableList (&VarList.Link);
|
||||||
|
|
||||||
//
|
//
|
||||||
// set all the variables from the list
|
// set all the variables from the list
|
||||||
//
|
//
|
||||||
for ( Node = (ENV_VAR_LIST*)GetFirstNode(ListHead)
|
for ( Node = (ENV_VAR_LIST *)GetFirstNode (ListHead)
|
||||||
; !IsNull(ListHead, &Node->Link)
|
; !IsNull (ListHead, &Node->Link)
|
||||||
; Node = (ENV_VAR_LIST*)GetNextNode(ListHead, &Node->Link)
|
; Node = (ENV_VAR_LIST *)GetNextNode (ListHead, &Node->Link)
|
||||||
){
|
)
|
||||||
|
{
|
||||||
Size = StrSize (Node->Val) - sizeof (CHAR16);
|
Size = StrSize (Node->Val) - sizeof (CHAR16);
|
||||||
if (Node->Atts & EFI_VARIABLE_NON_VOLATILE) {
|
if (Node->Atts & EFI_VARIABLE_NON_VOLATILE) {
|
||||||
Status = SHELL_SET_ENVIRONMENT_VARIABLE_NV(Node->Key, Size, Node->Val);
|
Status = SHELL_SET_ENVIRONMENT_VARIABLE_NV (Node->Key, Size, Node->Val);
|
||||||
} else {
|
} else {
|
||||||
Status = SHELL_SET_ENVIRONMENT_VARIABLE_V (Node->Key, Size, Node->Val);
|
Status = SHELL_SET_ENVIRONMENT_VARIABLE_V (Node->Key, Size, Node->Val);
|
||||||
}
|
}
|
||||||
ASSERT_EFI_ERROR(Status);
|
|
||||||
|
ASSERT_EFI_ERROR (Status);
|
||||||
}
|
}
|
||||||
FreeEnvironmentVariableList(ListHead);
|
|
||||||
|
FreeEnvironmentVariableList (ListHead);
|
||||||
|
|
||||||
return (Status);
|
return (Status);
|
||||||
}
|
}
|
||||||
@ -299,8 +319,8 @@ SetEnvironmentVariableList(
|
|||||||
@sa SetEnvironmentVariableList
|
@sa SetEnvironmentVariableList
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
SetEnvironmentVariables(
|
SetEnvironmentVariables (
|
||||||
IN CONST CHAR16 **Environment
|
IN CONST CHAR16 **Environment
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
CONST CHAR16 *CurrentString;
|
CONST CHAR16 *CurrentString;
|
||||||
@ -318,61 +338,65 @@ SetEnvironmentVariables(
|
|||||||
// Build a list identical to the ones used for get/set list functions above
|
// Build a list identical to the ones used for get/set list functions above
|
||||||
//
|
//
|
||||||
for ( CurrentCount = 0
|
for ( CurrentCount = 0
|
||||||
;
|
;
|
||||||
; CurrentCount++
|
; CurrentCount++
|
||||||
){
|
)
|
||||||
|
{
|
||||||
CurrentString = Environment[CurrentCount];
|
CurrentString = Environment[CurrentCount];
|
||||||
if (CurrentString == NULL) {
|
if (CurrentString == NULL) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ASSERT(StrStr(CurrentString, L"=") != NULL);
|
|
||||||
Node = AllocateZeroPool(sizeof(ENV_VAR_LIST));
|
ASSERT (StrStr (CurrentString, L"=") != NULL);
|
||||||
|
Node = AllocateZeroPool (sizeof (ENV_VAR_LIST));
|
||||||
if (Node == NULL) {
|
if (Node == NULL) {
|
||||||
SetEnvironmentVariableList(&VarList->Link);
|
SetEnvironmentVariableList (&VarList->Link);
|
||||||
return (EFI_OUT_OF_RESOURCES);
|
return (EFI_OUT_OF_RESOURCES);
|
||||||
}
|
}
|
||||||
|
|
||||||
Node->Key = AllocateZeroPool((StrStr(CurrentString, L"=") - CurrentString + 1) * sizeof(CHAR16));
|
Node->Key = AllocateZeroPool ((StrStr (CurrentString, L"=") - CurrentString + 1) * sizeof (CHAR16));
|
||||||
if (Node->Key == NULL) {
|
if (Node->Key == NULL) {
|
||||||
SHELL_FREE_NON_NULL(Node);
|
SHELL_FREE_NON_NULL (Node);
|
||||||
SetEnvironmentVariableList(&VarList->Link);
|
SetEnvironmentVariableList (&VarList->Link);
|
||||||
return (EFI_OUT_OF_RESOURCES);
|
return (EFI_OUT_OF_RESOURCES);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Copy the string into the Key, leaving the last character allocated as NULL to terminate
|
// Copy the string into the Key, leaving the last character allocated as NULL to terminate
|
||||||
//
|
//
|
||||||
StrnCpyS( Node->Key,
|
StrnCpyS (
|
||||||
StrStr(CurrentString, L"=") - CurrentString + 1,
|
Node->Key,
|
||||||
CurrentString,
|
StrStr (CurrentString, L"=") - CurrentString + 1,
|
||||||
StrStr(CurrentString, L"=") - CurrentString
|
CurrentString,
|
||||||
);
|
StrStr (CurrentString, L"=") - CurrentString
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
// ValueSize = TotalSize - already removed size - size for '=' + size for terminator (the last 2 items cancel each other)
|
// ValueSize = TotalSize - already removed size - size for '=' + size for terminator (the last 2 items cancel each other)
|
||||||
//
|
//
|
||||||
Node->Val = AllocateCopyPool(StrSize(CurrentString) - StrSize(Node->Key), CurrentString + StrLen(Node->Key) + 1);
|
Node->Val = AllocateCopyPool (StrSize (CurrentString) - StrSize (Node->Key), CurrentString + StrLen (Node->Key) + 1);
|
||||||
if (Node->Val == NULL) {
|
if (Node->Val == NULL) {
|
||||||
SHELL_FREE_NON_NULL(Node->Key);
|
SHELL_FREE_NON_NULL (Node->Key);
|
||||||
SHELL_FREE_NON_NULL(Node);
|
SHELL_FREE_NON_NULL (Node);
|
||||||
SetEnvironmentVariableList(&VarList->Link);
|
SetEnvironmentVariableList (&VarList->Link);
|
||||||
return (EFI_OUT_OF_RESOURCES);
|
return (EFI_OUT_OF_RESOURCES);
|
||||||
}
|
}
|
||||||
|
|
||||||
Node->Atts = EFI_VARIABLE_BOOTSERVICE_ACCESS;
|
Node->Atts = EFI_VARIABLE_BOOTSERVICE_ACCESS;
|
||||||
|
|
||||||
if (VarList == NULL) {
|
if (VarList == NULL) {
|
||||||
VarList = AllocateZeroPool(sizeof(ENV_VAR_LIST));
|
VarList = AllocateZeroPool (sizeof (ENV_VAR_LIST));
|
||||||
if (VarList == NULL) {
|
if (VarList == NULL) {
|
||||||
SHELL_FREE_NON_NULL(Node->Key);
|
SHELL_FREE_NON_NULL (Node->Key);
|
||||||
SHELL_FREE_NON_NULL(Node->Val);
|
SHELL_FREE_NON_NULL (Node->Val);
|
||||||
SHELL_FREE_NON_NULL(Node);
|
SHELL_FREE_NON_NULL (Node);
|
||||||
return (EFI_OUT_OF_RESOURCES);
|
return (EFI_OUT_OF_RESOURCES);
|
||||||
}
|
}
|
||||||
InitializeListHead(&VarList->Link);
|
|
||||||
}
|
|
||||||
InsertTailList(&VarList->Link, &Node->Link);
|
|
||||||
|
|
||||||
|
InitializeListHead (&VarList->Link);
|
||||||
|
}
|
||||||
|
|
||||||
|
InsertTailList (&VarList->Link, &Node->Link);
|
||||||
} // for loop
|
} // for loop
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -380,7 +404,7 @@ SetEnvironmentVariables(
|
|||||||
// this function also frees the memory and deletes all pre-existing
|
// this function also frees the memory and deletes all pre-existing
|
||||||
// shell-guid based environment variables.
|
// shell-guid based environment variables.
|
||||||
//
|
//
|
||||||
return (SetEnvironmentVariableList(&VarList->Link));
|
return (SetEnvironmentVariableList (&VarList->Link));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -400,28 +424,30 @@ SetEnvironmentVariables(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
ShellFindEnvVarInList (
|
ShellFindEnvVarInList (
|
||||||
IN CONST CHAR16 *Key,
|
IN CONST CHAR16 *Key,
|
||||||
OUT CHAR16 **Value,
|
OUT CHAR16 **Value,
|
||||||
OUT UINTN *ValueSize,
|
OUT UINTN *ValueSize,
|
||||||
OUT UINT32 *Atts OPTIONAL
|
OUT UINT32 *Atts OPTIONAL
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
ENV_VAR_LIST *Node;
|
ENV_VAR_LIST *Node;
|
||||||
|
|
||||||
if (Key == NULL || Value == NULL || ValueSize == NULL) {
|
if ((Key == NULL) || (Value == NULL) || (ValueSize == NULL)) {
|
||||||
return SHELL_INVALID_PARAMETER;
|
return SHELL_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( Node = (ENV_VAR_LIST*)GetFirstNode(&gShellEnvVarList.Link)
|
for ( Node = (ENV_VAR_LIST *)GetFirstNode (&gShellEnvVarList.Link)
|
||||||
; !IsNull(&gShellEnvVarList.Link, &Node->Link)
|
; !IsNull (&gShellEnvVarList.Link, &Node->Link)
|
||||||
; Node = (ENV_VAR_LIST*)GetNextNode(&gShellEnvVarList.Link, &Node->Link)
|
; Node = (ENV_VAR_LIST *)GetNextNode (&gShellEnvVarList.Link, &Node->Link)
|
||||||
){
|
)
|
||||||
if (Node->Key != NULL && StrCmp(Key, Node->Key) == 0) {
|
{
|
||||||
*Value = AllocateCopyPool(StrSize(Node->Val), Node->Val);
|
if ((Node->Key != NULL) && (StrCmp (Key, Node->Key) == 0)) {
|
||||||
*ValueSize = StrSize(Node->Val);
|
*Value = AllocateCopyPool (StrSize (Node->Val), Node->Val);
|
||||||
|
*ValueSize = StrSize (Node->Val);
|
||||||
if (Atts != NULL) {
|
if (Atts != NULL) {
|
||||||
*Atts = Node->Atts;
|
*Atts = Node->Atts;
|
||||||
}
|
}
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -444,17 +470,17 @@ ShellFindEnvVarInList (
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
ShellAddEnvVarToList (
|
ShellAddEnvVarToList (
|
||||||
IN CONST CHAR16 *Key,
|
IN CONST CHAR16 *Key,
|
||||||
IN CONST CHAR16 *Value,
|
IN CONST CHAR16 *Value,
|
||||||
IN UINTN ValueSize,
|
IN UINTN ValueSize,
|
||||||
IN UINT32 Atts
|
IN UINT32 Atts
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
ENV_VAR_LIST *Node;
|
ENV_VAR_LIST *Node;
|
||||||
CHAR16 *LocalKey;
|
CHAR16 *LocalKey;
|
||||||
CHAR16 *LocalValue;
|
CHAR16 *LocalValue;
|
||||||
|
|
||||||
if (Key == NULL || Value == NULL || ValueSize == 0) {
|
if ((Key == NULL) || (Value == NULL) || (ValueSize == 0)) {
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -466,14 +492,15 @@ ShellAddEnvVarToList (
|
|||||||
//
|
//
|
||||||
// Update the variable value if it exists in gShellEnvVarList.
|
// Update the variable value if it exists in gShellEnvVarList.
|
||||||
//
|
//
|
||||||
for ( Node = (ENV_VAR_LIST*)GetFirstNode(&gShellEnvVarList.Link)
|
for ( Node = (ENV_VAR_LIST *)GetFirstNode (&gShellEnvVarList.Link)
|
||||||
; !IsNull(&gShellEnvVarList.Link, &Node->Link)
|
; !IsNull (&gShellEnvVarList.Link, &Node->Link)
|
||||||
; Node = (ENV_VAR_LIST*)GetNextNode(&gShellEnvVarList.Link, &Node->Link)
|
; Node = (ENV_VAR_LIST *)GetNextNode (&gShellEnvVarList.Link, &Node->Link)
|
||||||
){
|
)
|
||||||
if (Node->Key != NULL && StrCmp(Key, Node->Key) == 0) {
|
{
|
||||||
|
if ((Node->Key != NULL) && (StrCmp (Key, Node->Key) == 0)) {
|
||||||
Node->Atts = Atts;
|
Node->Atts = Atts;
|
||||||
SHELL_FREE_NON_NULL(Node->Val);
|
SHELL_FREE_NON_NULL (Node->Val);
|
||||||
Node->Val = LocalValue;
|
Node->Val = LocalValue;
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -482,21 +509,23 @@ ShellAddEnvVarToList (
|
|||||||
// If the environment variable key doesn't exist in list just insert
|
// If the environment variable key doesn't exist in list just insert
|
||||||
// a new node.
|
// a new node.
|
||||||
//
|
//
|
||||||
LocalKey = AllocateCopyPool (StrSize(Key), Key);
|
LocalKey = AllocateCopyPool (StrSize (Key), Key);
|
||||||
if (LocalKey == NULL) {
|
if (LocalKey == NULL) {
|
||||||
FreePool (LocalValue);
|
FreePool (LocalValue);
|
||||||
return EFI_OUT_OF_RESOURCES;
|
return EFI_OUT_OF_RESOURCES;
|
||||||
}
|
}
|
||||||
Node = (ENV_VAR_LIST*)AllocateZeroPool (sizeof(ENV_VAR_LIST));
|
|
||||||
|
Node = (ENV_VAR_LIST *)AllocateZeroPool (sizeof (ENV_VAR_LIST));
|
||||||
if (Node == NULL) {
|
if (Node == NULL) {
|
||||||
FreePool (LocalKey);
|
FreePool (LocalKey);
|
||||||
FreePool (LocalValue);
|
FreePool (LocalValue);
|
||||||
return EFI_OUT_OF_RESOURCES;
|
return EFI_OUT_OF_RESOURCES;
|
||||||
}
|
}
|
||||||
Node->Key = LocalKey;
|
|
||||||
Node->Val = LocalValue;
|
Node->Key = LocalKey;
|
||||||
|
Node->Val = LocalValue;
|
||||||
Node->Atts = Atts;
|
Node->Atts = Atts;
|
||||||
InsertTailList(&gShellEnvVarList.Link, &Node->Link);
|
InsertTailList (&gShellEnvVarList.Link, &Node->Link);
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -512,24 +541,25 @@ ShellAddEnvVarToList (
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
ShellRemvoeEnvVarFromList (
|
ShellRemvoeEnvVarFromList (
|
||||||
IN CONST CHAR16 *Key
|
IN CONST CHAR16 *Key
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
ENV_VAR_LIST *Node;
|
ENV_VAR_LIST *Node;
|
||||||
|
|
||||||
if (Key == NULL) {
|
if (Key == NULL) {
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( Node = (ENV_VAR_LIST*)GetFirstNode(&gShellEnvVarList.Link)
|
for ( Node = (ENV_VAR_LIST *)GetFirstNode (&gShellEnvVarList.Link)
|
||||||
; !IsNull(&gShellEnvVarList.Link, &Node->Link)
|
; !IsNull (&gShellEnvVarList.Link, &Node->Link)
|
||||||
; Node = (ENV_VAR_LIST*)GetNextNode(&gShellEnvVarList.Link, &Node->Link)
|
; Node = (ENV_VAR_LIST *)GetNextNode (&gShellEnvVarList.Link, &Node->Link)
|
||||||
){
|
)
|
||||||
if (Node->Key != NULL && StrCmp(Key, Node->Key) == 0) {
|
{
|
||||||
SHELL_FREE_NON_NULL(Node->Key);
|
if ((Node->Key != NULL) && (StrCmp (Key, Node->Key) == 0)) {
|
||||||
SHELL_FREE_NON_NULL(Node->Val);
|
SHELL_FREE_NON_NULL (Node->Key);
|
||||||
RemoveEntryList(&Node->Link);
|
SHELL_FREE_NON_NULL (Node->Val);
|
||||||
SHELL_FREE_NON_NULL(Node);
|
RemoveEntryList (&Node->Link);
|
||||||
|
SHELL_FREE_NON_NULL (Node);
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -547,9 +577,9 @@ ShellInitEnvVarList (
|
|||||||
VOID
|
VOID
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
InitializeListHead(&gShellEnvVarList.Link);
|
InitializeListHead (&gShellEnvVarList.Link);
|
||||||
Status = GetEnvironmentVariableList (&gShellEnvVarList.Link);
|
Status = GetEnvironmentVariableList (&gShellEnvVarList.Link);
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
@ -565,8 +595,7 @@ ShellFreeEnvVarList (
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
FreeEnvironmentVariableList (&gShellEnvVarList.Link);
|
FreeEnvironmentVariableList (&gShellEnvVarList.Link);
|
||||||
InitializeListHead(&gShellEnvVarList.Link);
|
InitializeListHead (&gShellEnvVarList.Link);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,17 +15,16 @@
|
|||||||
#define _SHELL_ENVIRONMENT_VARIABLE_HEADER_
|
#define _SHELL_ENVIRONMENT_VARIABLE_HEADER_
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
LIST_ENTRY Link;
|
LIST_ENTRY Link;
|
||||||
CHAR16 *Key;
|
CHAR16 *Key;
|
||||||
CHAR16 *Val;
|
CHAR16 *Val;
|
||||||
UINT32 Atts;
|
UINT32 Atts;
|
||||||
} ENV_VAR_LIST;
|
} ENV_VAR_LIST;
|
||||||
|
|
||||||
//
|
//
|
||||||
// The list is used to cache the environment variables.
|
// The list is used to cache the environment variables.
|
||||||
//
|
//
|
||||||
extern ENV_VAR_LIST gShellEnvVarList;
|
extern ENV_VAR_LIST gShellEnvVarList;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Reports whether an environment variable is Volatile or Non-Volatile.
|
Reports whether an environment variable is Volatile or Non-Volatile.
|
||||||
@ -38,8 +37,8 @@ extern ENV_VAR_LIST gShellEnvVarList;
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
IsVolatileEnv (
|
IsVolatileEnv (
|
||||||
IN CONST CHAR16 *EnvVarName,
|
IN CONST CHAR16 *EnvVarName,
|
||||||
OUT BOOLEAN *Volatile
|
OUT BOOLEAN *Volatile
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -73,7 +72,7 @@ IsVolatileEnv (
|
|||||||
@retval other An error occurred
|
@retval other An error occurred
|
||||||
@sa SetVariable
|
@sa SetVariable
|
||||||
**/
|
**/
|
||||||
#define SHELL_SET_ENVIRONMENT_VARIABLE_NV(EnvVarName,BufferSize,Buffer) \
|
#define SHELL_SET_ENVIRONMENT_VARIABLE_NV(EnvVarName, BufferSize, Buffer) \
|
||||||
(gRT->SetVariable((CHAR16*)EnvVarName, \
|
(gRT->SetVariable((CHAR16*)EnvVarName, \
|
||||||
&gShellVariableGuid, \
|
&gShellVariableGuid, \
|
||||||
EFI_VARIABLE_NON_VOLATILE|EFI_VARIABLE_BOOTSERVICE_ACCESS, \
|
EFI_VARIABLE_NON_VOLATILE|EFI_VARIABLE_BOOTSERVICE_ACCESS, \
|
||||||
@ -93,7 +92,7 @@ IsVolatileEnv (
|
|||||||
@retval other An error occurred
|
@retval other An error occurred
|
||||||
@sa SetVariable
|
@sa SetVariable
|
||||||
**/
|
**/
|
||||||
#define SHELL_GET_ENVIRONMENT_VARIABLE(EnvVarName,BufferSize,Buffer) \
|
#define SHELL_GET_ENVIRONMENT_VARIABLE(EnvVarName, BufferSize, Buffer) \
|
||||||
(gRT->GetVariable((CHAR16*)EnvVarName, \
|
(gRT->GetVariable((CHAR16*)EnvVarName, \
|
||||||
&gShellVariableGuid, \
|
&gShellVariableGuid, \
|
||||||
0, \
|
0, \
|
||||||
@ -114,7 +113,7 @@ IsVolatileEnv (
|
|||||||
@retval other An error occurred
|
@retval other An error occurred
|
||||||
@sa SetVariable
|
@sa SetVariable
|
||||||
**/
|
**/
|
||||||
#define SHELL_GET_ENVIRONMENT_VARIABLE_AND_ATTRIBUTES(EnvVarName,Atts,BufferSize,Buffer) \
|
#define SHELL_GET_ENVIRONMENT_VARIABLE_AND_ATTRIBUTES(EnvVarName, Atts, BufferSize, Buffer) \
|
||||||
(gRT->GetVariable((CHAR16*)EnvVarName, \
|
(gRT->GetVariable((CHAR16*)EnvVarName, \
|
||||||
&gShellVariableGuid, \
|
&gShellVariableGuid, \
|
||||||
Atts, \
|
Atts, \
|
||||||
@ -134,7 +133,7 @@ IsVolatileEnv (
|
|||||||
@retval other An error occurred
|
@retval other An error occurred
|
||||||
@sa SetVariable
|
@sa SetVariable
|
||||||
**/
|
**/
|
||||||
#define SHELL_SET_ENVIRONMENT_VARIABLE_V(EnvVarName,BufferSize,Buffer) \
|
#define SHELL_SET_ENVIRONMENT_VARIABLE_V(EnvVarName, BufferSize, Buffer) \
|
||||||
(gRT->SetVariable((CHAR16*)EnvVarName, \
|
(gRT->SetVariable((CHAR16*)EnvVarName, \
|
||||||
&gShellVariableGuid, \
|
&gShellVariableGuid, \
|
||||||
EFI_VARIABLE_BOOTSERVICE_ACCESS, \
|
EFI_VARIABLE_BOOTSERVICE_ACCESS, \
|
||||||
@ -150,8 +149,8 @@ IsVolatileEnv (
|
|||||||
@retval EFI_SUCCESS the list was created successfully.
|
@retval EFI_SUCCESS the list was created successfully.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
GetEnvironmentVariableList(
|
GetEnvironmentVariableList (
|
||||||
IN OUT LIST_ENTRY *List
|
IN OUT LIST_ENTRY *List
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -167,8 +166,8 @@ GetEnvironmentVariableList(
|
|||||||
@retval EFI_SUCCESS The list was Set successfully.
|
@retval EFI_SUCCESS The list was Set successfully.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
SetEnvironmentVariableList(
|
SetEnvironmentVariableList (
|
||||||
IN LIST_ENTRY *List
|
IN LIST_ENTRY *List
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -187,8 +186,8 @@ SetEnvironmentVariableList(
|
|||||||
@sa SetEnvironmentVariableList
|
@sa SetEnvironmentVariableList
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
SetEnvironmentVariables(
|
SetEnvironmentVariables (
|
||||||
IN CONST CHAR16 **Environment
|
IN CONST CHAR16 **Environment
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -197,8 +196,8 @@ SetEnvironmentVariables(
|
|||||||
@param[in] List The pointer to pointer to list.
|
@param[in] List The pointer to pointer to list.
|
||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
FreeEnvironmentVariableList(
|
FreeEnvironmentVariableList (
|
||||||
IN LIST_ENTRY *List
|
IN LIST_ENTRY *List
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -218,10 +217,10 @@ FreeEnvironmentVariableList(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
ShellFindEnvVarInList (
|
ShellFindEnvVarInList (
|
||||||
IN CONST CHAR16 *Key,
|
IN CONST CHAR16 *Key,
|
||||||
OUT CHAR16 **Value,
|
OUT CHAR16 **Value,
|
||||||
OUT UINTN *ValueSize,
|
OUT UINTN *ValueSize,
|
||||||
OUT UINT32 *Atts OPTIONAL
|
OUT UINT32 *Atts OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -239,10 +238,10 @@ ShellFindEnvVarInList (
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
ShellAddEnvVarToList (
|
ShellAddEnvVarToList (
|
||||||
IN CONST CHAR16 *Key,
|
IN CONST CHAR16 *Key,
|
||||||
IN CONST CHAR16 *Value,
|
IN CONST CHAR16 *Value,
|
||||||
IN UINTN ValueSize,
|
IN UINTN ValueSize,
|
||||||
IN UINT32 Atts
|
IN UINT32 Atts
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -256,7 +255,7 @@ ShellAddEnvVarToList (
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
ShellRemvoeEnvVarFromList (
|
ShellRemvoeEnvVarFromList (
|
||||||
IN CONST CHAR16 *Key
|
IN CONST CHAR16 *Key
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -279,4 +278,3 @@ ShellFreeEnvVarList (
|
|||||||
);
|
);
|
||||||
|
|
||||||
#endif //_SHELL_ENVIRONMENT_VARIABLE_HEADER_
|
#endif //_SHELL_ENVIRONMENT_VARIABLE_HEADER_
|
||||||
|
|
||||||
|
@ -17,15 +17,14 @@
|
|||||||
EFI_HII_HANDLE mShellManHiiHandle = NULL;
|
EFI_HII_HANDLE mShellManHiiHandle = NULL;
|
||||||
EFI_HANDLE mShellManDriverHandle = NULL;
|
EFI_HANDLE mShellManDriverHandle = NULL;
|
||||||
|
|
||||||
|
|
||||||
SHELL_MAN_HII_VENDOR_DEVICE_PATH mShellManHiiDevicePath = {
|
SHELL_MAN_HII_VENDOR_DEVICE_PATH mShellManHiiDevicePath = {
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
HARDWARE_DEVICE_PATH,
|
HARDWARE_DEVICE_PATH,
|
||||||
HW_VENDOR_DP,
|
HW_VENDOR_DP,
|
||||||
{
|
{
|
||||||
(UINT8) (sizeof (VENDOR_DEVICE_PATH)),
|
(UINT8)(sizeof (VENDOR_DEVICE_PATH)),
|
||||||
(UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)
|
(UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
SHELL_MAN_HII_GUID
|
SHELL_MAN_HII_GUID
|
||||||
@ -34,8 +33,8 @@ SHELL_MAN_HII_VENDOR_DEVICE_PATH mShellManHiiDevicePath = {
|
|||||||
END_DEVICE_PATH_TYPE,
|
END_DEVICE_PATH_TYPE,
|
||||||
END_ENTIRE_DEVICE_PATH_SUBTYPE,
|
END_ENTIRE_DEVICE_PATH_SUBTYPE,
|
||||||
{
|
{
|
||||||
(UINT8) (END_DEVICE_PATH_LENGTH),
|
(UINT8)(END_DEVICE_PATH_LENGTH),
|
||||||
(UINT8) ((END_DEVICE_PATH_LENGTH) >> 8)
|
(UINT8)((END_DEVICE_PATH_LENGTH) >> 8)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -52,11 +51,12 @@ SHELL_MAN_HII_VENDOR_DEVICE_PATH mShellManHiiDevicePath = {
|
|||||||
**/
|
**/
|
||||||
CHAR16 *
|
CHAR16 *
|
||||||
GetExecuatableFileName (
|
GetExecuatableFileName (
|
||||||
IN CONST CHAR16 *NameString
|
IN CONST CHAR16 *NameString
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
CHAR16 *Buffer;
|
CHAR16 *Buffer;
|
||||||
CHAR16 *SuffixStr;
|
CHAR16 *SuffixStr;
|
||||||
|
|
||||||
if (NameString == NULL) {
|
if (NameString == NULL) {
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
@ -64,31 +64,33 @@ GetExecuatableFileName (
|
|||||||
//
|
//
|
||||||
// Fix the file name
|
// Fix the file name
|
||||||
//
|
//
|
||||||
if (StrnCmp(NameString+StrLen(NameString)-StrLen(L".efi"), L".efi", StrLen(L".efi"))==0) {
|
if (StrnCmp (NameString+StrLen (NameString)-StrLen (L".efi"), L".efi", StrLen (L".efi")) == 0) {
|
||||||
Buffer = AllocateCopyPool(StrSize(NameString), NameString);
|
Buffer = AllocateCopyPool (StrSize (NameString), NameString);
|
||||||
} else if (StrnCmp(NameString+StrLen(NameString)-StrLen(L".man"), L".man", StrLen(L".man"))==0) {
|
} else if (StrnCmp (NameString+StrLen (NameString)-StrLen (L".man"), L".man", StrLen (L".man")) == 0) {
|
||||||
Buffer = AllocateCopyPool(StrSize(NameString), NameString);
|
Buffer = AllocateCopyPool (StrSize (NameString), NameString);
|
||||||
if (Buffer != NULL) {
|
if (Buffer != NULL) {
|
||||||
SuffixStr = Buffer+StrLen(Buffer)-StrLen(L".man");
|
SuffixStr = Buffer+StrLen (Buffer)-StrLen (L".man");
|
||||||
StrnCpyS (SuffixStr, StrSize(L".man")/sizeof(CHAR16), L".efi", StrLen(L".efi"));
|
StrnCpyS (SuffixStr, StrSize (L".man")/sizeof (CHAR16), L".efi", StrLen (L".efi"));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Buffer = AllocateZeroPool(StrSize(NameString) + StrLen(L".efi")*sizeof(CHAR16));
|
Buffer = AllocateZeroPool (StrSize (NameString) + StrLen (L".efi")*sizeof (CHAR16));
|
||||||
if (Buffer != NULL) {
|
if (Buffer != NULL) {
|
||||||
StrnCpyS( Buffer,
|
StrnCpyS (
|
||||||
(StrSize(NameString) + StrLen(L".efi")*sizeof(CHAR16))/sizeof(CHAR16),
|
Buffer,
|
||||||
NameString,
|
(StrSize (NameString) + StrLen (L".efi")*sizeof (CHAR16))/sizeof (CHAR16),
|
||||||
StrLen(NameString)
|
NameString,
|
||||||
);
|
StrLen (NameString)
|
||||||
StrnCatS( Buffer,
|
);
|
||||||
(StrSize(NameString) + StrLen(L".efi")*sizeof(CHAR16))/sizeof(CHAR16),
|
StrnCatS (
|
||||||
L".efi",
|
Buffer,
|
||||||
StrLen(L".efi")
|
(StrSize (NameString) + StrLen (L".efi")*sizeof (CHAR16))/sizeof (CHAR16),
|
||||||
);
|
L".efi",
|
||||||
|
StrLen (L".efi")
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return (Buffer);
|
|
||||||
|
|
||||||
|
return (Buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -103,34 +105,39 @@ GetExecuatableFileName (
|
|||||||
@return the new filename with .man as the extension.
|
@return the new filename with .man as the extension.
|
||||||
**/
|
**/
|
||||||
CHAR16 *
|
CHAR16 *
|
||||||
GetManFileName(
|
GetManFileName (
|
||||||
IN CONST CHAR16 *ManFileName
|
IN CONST CHAR16 *ManFileName
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
CHAR16 *Buffer;
|
CHAR16 *Buffer;
|
||||||
|
|
||||||
if (ManFileName == NULL) {
|
if (ManFileName == NULL) {
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Fix the file name
|
// Fix the file name
|
||||||
//
|
//
|
||||||
if (StrnCmp(ManFileName+StrLen(ManFileName)-4, L".man", 4)==0) {
|
if (StrnCmp (ManFileName+StrLen (ManFileName)-4, L".man", 4) == 0) {
|
||||||
Buffer = AllocateCopyPool(StrSize(ManFileName), ManFileName);
|
Buffer = AllocateCopyPool (StrSize (ManFileName), ManFileName);
|
||||||
} else {
|
} else {
|
||||||
Buffer = AllocateZeroPool(StrSize(ManFileName) + 4*sizeof(CHAR16));
|
Buffer = AllocateZeroPool (StrSize (ManFileName) + 4*sizeof (CHAR16));
|
||||||
if (Buffer != NULL) {
|
if (Buffer != NULL) {
|
||||||
StrnCpyS( Buffer,
|
StrnCpyS (
|
||||||
(StrSize(ManFileName) + 4*sizeof(CHAR16))/sizeof(CHAR16),
|
Buffer,
|
||||||
ManFileName,
|
(StrSize (ManFileName) + 4*sizeof (CHAR16))/sizeof (CHAR16),
|
||||||
StrLen(ManFileName)
|
ManFileName,
|
||||||
);
|
StrLen (ManFileName)
|
||||||
StrnCatS( Buffer,
|
);
|
||||||
(StrSize(ManFileName) + 4*sizeof(CHAR16))/sizeof(CHAR16),
|
StrnCatS (
|
||||||
L".man",
|
Buffer,
|
||||||
4
|
(StrSize (ManFileName) + 4*sizeof (CHAR16))/sizeof (CHAR16),
|
||||||
);
|
L".man",
|
||||||
|
4
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (Buffer);
|
return (Buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -149,22 +156,23 @@ GetManFileName(
|
|||||||
@retval EFI_NOT_FOUND The file was not found.
|
@retval EFI_NOT_FOUND The file was not found.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
SearchPathForFile(
|
SearchPathForFile (
|
||||||
IN CONST CHAR16 *FileName,
|
IN CONST CHAR16 *FileName,
|
||||||
OUT SHELL_FILE_HANDLE *Handle
|
OUT SHELL_FILE_HANDLE *Handle
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
CHAR16 *FullFileName;
|
CHAR16 *FullFileName;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
if ( FileName == NULL
|
if ( (FileName == NULL)
|
||||||
|| Handle == NULL
|
|| (Handle == NULL)
|
||||||
|| StrLen(FileName) == 0
|
|| (StrLen (FileName) == 0)
|
||||||
){
|
)
|
||||||
|
{
|
||||||
return (EFI_INVALID_PARAMETER);
|
return (EFI_INVALID_PARAMETER);
|
||||||
}
|
}
|
||||||
|
|
||||||
FullFileName = ShellFindFilePath(FileName);
|
FullFileName = ShellFindFilePath (FileName);
|
||||||
if (FullFileName == NULL) {
|
if (FullFileName == NULL) {
|
||||||
return (EFI_NOT_FOUND);
|
return (EFI_NOT_FOUND);
|
||||||
}
|
}
|
||||||
@ -172,8 +180,8 @@ SearchPathForFile(
|
|||||||
//
|
//
|
||||||
// now open that file
|
// now open that file
|
||||||
//
|
//
|
||||||
Status = EfiShellOpenFileByName(FullFileName, Handle, EFI_FILE_MODE_READ);
|
Status = EfiShellOpenFileByName (FullFileName, Handle, EFI_FILE_MODE_READ);
|
||||||
FreePool(FullFileName);
|
FreePool (FullFileName);
|
||||||
|
|
||||||
return (Status);
|
return (Status);
|
||||||
}
|
}
|
||||||
@ -197,7 +205,7 @@ SearchPathForFile(
|
|||||||
an allocated buffer.
|
an allocated buffer.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
ManFileFindSections(
|
ManFileFindSections (
|
||||||
IN SHELL_FILE_HANDLE Handle,
|
IN SHELL_FILE_HANDLE Handle,
|
||||||
IN CONST CHAR16 *Sections,
|
IN CONST CHAR16 *Sections,
|
||||||
OUT CHAR16 **HelpText,
|
OUT CHAR16 **HelpText,
|
||||||
@ -205,75 +213,84 @@ ManFileFindSections(
|
|||||||
IN BOOLEAN Ascii
|
IN BOOLEAN Ascii
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
CHAR16 *ReadLine;
|
CHAR16 *ReadLine;
|
||||||
UINTN Size;
|
UINTN Size;
|
||||||
BOOLEAN CurrentlyReading;
|
BOOLEAN CurrentlyReading;
|
||||||
CHAR16 *SectionName;
|
CHAR16 *SectionName;
|
||||||
UINTN SectionLen;
|
UINTN SectionLen;
|
||||||
BOOLEAN Found;
|
BOOLEAN Found;
|
||||||
|
|
||||||
if ( Handle == NULL
|
if ( (Handle == NULL)
|
||||||
|| HelpText == NULL
|
|| (HelpText == NULL)
|
||||||
|| HelpSize == NULL
|
|| (HelpSize == NULL)
|
||||||
){
|
)
|
||||||
|
{
|
||||||
return (EFI_INVALID_PARAMETER);
|
return (EFI_INVALID_PARAMETER);
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = EFI_SUCCESS;
|
Status = EFI_SUCCESS;
|
||||||
CurrentlyReading = FALSE;
|
CurrentlyReading = FALSE;
|
||||||
Size = 1024;
|
Size = 1024;
|
||||||
Found = FALSE;
|
Found = FALSE;
|
||||||
|
|
||||||
ReadLine = AllocateZeroPool(Size);
|
ReadLine = AllocateZeroPool (Size);
|
||||||
if (ReadLine == NULL) {
|
if (ReadLine == NULL) {
|
||||||
return (EFI_OUT_OF_RESOURCES);
|
return (EFI_OUT_OF_RESOURCES);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (;!ShellFileHandleEof(Handle);Size = 1024) {
|
for ( ; !ShellFileHandleEof (Handle); Size = 1024) {
|
||||||
Status = ShellFileHandleReadLine(Handle, ReadLine, &Size, TRUE, &Ascii);
|
Status = ShellFileHandleReadLine (Handle, ReadLine, &Size, TRUE, &Ascii);
|
||||||
if (ReadLine[0] == L'#') {
|
if (ReadLine[0] == L'#') {
|
||||||
//
|
//
|
||||||
// Skip comment lines
|
// Skip comment lines
|
||||||
//
|
//
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// ignore too small of buffer...
|
// ignore too small of buffer...
|
||||||
//
|
//
|
||||||
if (Status == EFI_BUFFER_TOO_SMALL) {
|
if (Status == EFI_BUFFER_TOO_SMALL) {
|
||||||
Status = EFI_SUCCESS;
|
Status = EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
if (EFI_ERROR(Status)) {
|
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
break;
|
break;
|
||||||
} else if (StrnCmp(ReadLine, L".TH", 3) == 0) {
|
} else if (StrnCmp (ReadLine, L".TH", 3) == 0) {
|
||||||
//
|
//
|
||||||
// we hit the end of this commands section so stop.
|
// we hit the end of this commands section so stop.
|
||||||
//
|
//
|
||||||
break;
|
break;
|
||||||
} else if (StrnCmp(ReadLine, L".SH", 3) == 0) {
|
} else if (StrnCmp (ReadLine, L".SH", 3) == 0) {
|
||||||
if (Sections == NULL) {
|
if (Sections == NULL) {
|
||||||
CurrentlyReading = TRUE;
|
CurrentlyReading = TRUE;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// we found a section
|
// we found a section
|
||||||
//
|
//
|
||||||
if (CurrentlyReading) {
|
if (CurrentlyReading) {
|
||||||
CurrentlyReading = FALSE;
|
CurrentlyReading = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// is this a section we want to read in?
|
// is this a section we want to read in?
|
||||||
//
|
//
|
||||||
for ( SectionName = ReadLine + 3
|
for ( SectionName = ReadLine + 3
|
||||||
; *SectionName == L' '
|
; *SectionName == L' '
|
||||||
; SectionName++);
|
; SectionName++)
|
||||||
SectionLen = StrLen(SectionName);
|
{
|
||||||
SectionName = StrStr(Sections, SectionName);
|
}
|
||||||
|
|
||||||
|
SectionLen = StrLen (SectionName);
|
||||||
|
SectionName = StrStr (Sections, SectionName);
|
||||||
if (SectionName == NULL) {
|
if (SectionName == NULL) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (*(SectionName + SectionLen) == CHAR_NULL || *(SectionName + SectionLen) == L',') {
|
|
||||||
|
if ((*(SectionName + SectionLen) == CHAR_NULL) || (*(SectionName + SectionLen) == L',')) {
|
||||||
CurrentlyReading = TRUE;
|
CurrentlyReading = TRUE;
|
||||||
}
|
}
|
||||||
} else if (CurrentlyReading) {
|
} else if (CurrentlyReading) {
|
||||||
@ -281,15 +298,17 @@ ManFileFindSections(
|
|||||||
//
|
//
|
||||||
// copy and save the current line.
|
// copy and save the current line.
|
||||||
//
|
//
|
||||||
ASSERT((*HelpText == NULL && *HelpSize == 0) || (*HelpText != NULL));
|
ASSERT ((*HelpText == NULL && *HelpSize == 0) || (*HelpText != NULL));
|
||||||
StrnCatGrow (HelpText, HelpSize, ReadLine, 0);
|
StrnCatGrow (HelpText, HelpSize, ReadLine, 0);
|
||||||
StrnCatGrow (HelpText, HelpSize, L"\r\n", 0);
|
StrnCatGrow (HelpText, HelpSize, L"\r\n", 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
FreePool(ReadLine);
|
|
||||||
if (!Found && !EFI_ERROR(Status)) {
|
FreePool (ReadLine);
|
||||||
|
if (!Found && !EFI_ERROR (Status)) {
|
||||||
return (EFI_NOT_FOUND);
|
return (EFI_NOT_FOUND);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (Status);
|
return (Status);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -315,12 +334,12 @@ ManFileFindSections(
|
|||||||
@retval FALSE Line did not contain the Title Header
|
@retval FALSE Line did not contain the Title Header
|
||||||
**/
|
**/
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
IsTitleHeader(
|
IsTitleHeader (
|
||||||
IN CONST CHAR16 *Command,
|
IN CONST CHAR16 *Command,
|
||||||
IN CHAR16 *Line,
|
IN CHAR16 *Line,
|
||||||
OUT CHAR16 **BriefDesc OPTIONAL,
|
OUT CHAR16 **BriefDesc OPTIONAL,
|
||||||
OUT UINTN *BriefSize OPTIONAL,
|
OUT UINTN *BriefSize OPTIONAL,
|
||||||
OUT BOOLEAN *Found
|
OUT BOOLEAN *Found
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
// The states of a simple state machine used to recognize a title header line
|
// The states of a simple state machine used to recognize a title header line
|
||||||
@ -334,86 +353,84 @@ IsTitleHeader(
|
|||||||
BOOLEAN ReturnValue; // TRUE if this the Title Header line of *some* MAN file.
|
BOOLEAN ReturnValue; // TRUE if this the Title Header line of *some* MAN file.
|
||||||
BOOLEAN ReturnFound; // TRUE if this the Title Header line of *the desired* MAN file.
|
BOOLEAN ReturnFound; // TRUE if this the Title Header line of *the desired* MAN file.
|
||||||
|
|
||||||
ReturnValue = FALSE;
|
ReturnValue = FALSE;
|
||||||
ReturnFound = FALSE;
|
ReturnFound = FALSE;
|
||||||
CommandIndex = 0;
|
CommandIndex = 0;
|
||||||
State = LookForThMacro;
|
State = LookForThMacro;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
|
||||||
if (*Line == L'\0') {
|
if (*Line == L'\0') {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (State) {
|
switch (State) {
|
||||||
|
|
||||||
// Handle "^\s*.TH\s"
|
// Handle "^\s*.TH\s"
|
||||||
// Go to state LookForCommandName if the title header macro is present; otherwise,
|
// Go to state LookForCommandName if the title header macro is present; otherwise,
|
||||||
// eat white space. If we see something other than white space, this is not a
|
// eat white space. If we see something other than white space, this is not a
|
||||||
// title header line.
|
// title header line.
|
||||||
case LookForThMacro:
|
case LookForThMacro:
|
||||||
if (StrnCmp (L".TH ", Line, 4) == 0 || StrnCmp (L".TH\t", Line, 4) == 0) {
|
if ((StrnCmp (L".TH ", Line, 4) == 0) || (StrnCmp (L".TH\t", Line, 4) == 0)) {
|
||||||
Line += 4;
|
Line += 4;
|
||||||
State = LookForCommandName;
|
State = LookForCommandName;
|
||||||
}
|
} else if ((*Line == L' ') || (*Line == L'\t')) {
|
||||||
else if (*Line == L' ' || *Line == L'\t') {
|
|
||||||
Line++;
|
Line++;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
State = Final;
|
State = Final;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
|
break;
|
||||||
|
|
||||||
// Handle "\s*"
|
// Handle "\s*"
|
||||||
// Eat any "extra" whitespace after the title header macro (we have already seen
|
// Eat any "extra" whitespace after the title header macro (we have already seen
|
||||||
// at least one white space character). Go to state CompareCommands when a
|
// at least one white space character). Go to state CompareCommands when a
|
||||||
// non-white space is seen.
|
// non-white space is seen.
|
||||||
case LookForCommandName:
|
case LookForCommandName:
|
||||||
if (*Line == L' ' || *Line == L'\t') {
|
if ((*Line == L' ') || (*Line == L'\t')) {
|
||||||
Line++;
|
Line++;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
ReturnValue = TRUE; // This is *some* command's title header line.
|
ReturnValue = TRUE; // This is *some* command's title header line.
|
||||||
State = CompareCommands;
|
State = CompareCommands;
|
||||||
// Do not increment Line; it points to the first character of the command
|
// Do not increment Line; it points to the first character of the command
|
||||||
// name on the title header line.
|
// name on the title header line.
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
|
break;
|
||||||
|
|
||||||
// Handle "(\S)\s"
|
// Handle "(\S)\s"
|
||||||
// Compare Command to the title header command name, ignoring case. When we
|
// Compare Command to the title header command name, ignoring case. When we
|
||||||
// reach the end of the command (i.e. we see white space), the next state
|
// reach the end of the command (i.e. we see white space), the next state
|
||||||
// depends on whether the caller wants a copy of the Brief Description.
|
// depends on whether the caller wants a copy of the Brief Description.
|
||||||
case CompareCommands:
|
case CompareCommands:
|
||||||
if (*Line == L' ' || *Line == L'\t') {
|
if ((*Line == L' ') || (*Line == L'\t')) {
|
||||||
ReturnFound = TRUE; // This is the desired command's title header line.
|
ReturnFound = TRUE; // This is the desired command's title header line.
|
||||||
State = (BriefDesc == NULL) ? Final : GetBriefDescription;
|
State = (BriefDesc == NULL) ? Final : GetBriefDescription;
|
||||||
}
|
} else if (CharToUpper (*Line) != CharToUpper (*(Command + CommandIndex++))) {
|
||||||
else if (CharToUpper (*Line) != CharToUpper (*(Command + CommandIndex++))) {
|
|
||||||
State = Final;
|
State = Final;
|
||||||
}
|
}
|
||||||
|
|
||||||
Line++;
|
Line++;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Handle "[\s01]*(.*)$"
|
// Handle "[\s01]*(.*)$"
|
||||||
// Skip whitespace, '0', and '1' characters, if any, prior to the brief description.
|
// Skip whitespace, '0', and '1' characters, if any, prior to the brief description.
|
||||||
// Return the description to the caller.
|
// Return the description to the caller.
|
||||||
case GetBriefDescription:
|
case GetBriefDescription:
|
||||||
if (*Line != L' ' && *Line != L'\t' && *Line != L'0' && *Line != L'1') {
|
if ((*Line != L' ') && (*Line != L'\t') && (*Line != L'0') && (*Line != L'1')) {
|
||||||
*BriefSize = StrSize(Line);
|
*BriefSize = StrSize (Line);
|
||||||
*BriefDesc = AllocateZeroPool(*BriefSize);
|
*BriefDesc = AllocateZeroPool (*BriefSize);
|
||||||
if (*BriefDesc != NULL) {
|
if (*BriefDesc != NULL) {
|
||||||
StrCpyS(*BriefDesc, (*BriefSize)/sizeof(CHAR16), Line);
|
StrCpyS (*BriefDesc, (*BriefSize)/sizeof (CHAR16), Line);
|
||||||
}
|
}
|
||||||
|
|
||||||
State = Final;
|
State = Final;
|
||||||
}
|
}
|
||||||
|
|
||||||
Line++;
|
Line++;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
} while (State < Final);
|
} while (State < Final);
|
||||||
|
|
||||||
*Found = ReturnFound;
|
*Found = ReturnFound;
|
||||||
@ -441,7 +458,7 @@ IsTitleHeader(
|
|||||||
an allocated buffer if requested.
|
an allocated buffer if requested.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
ManFileFindTitleSection(
|
ManFileFindTitleSection (
|
||||||
IN SHELL_FILE_HANDLE Handle,
|
IN SHELL_FILE_HANDLE Handle,
|
||||||
IN CONST CHAR16 *Command,
|
IN CONST CHAR16 *Command,
|
||||||
OUT CHAR16 **BriefDesc OPTIONAL,
|
OUT CHAR16 **BriefDesc OPTIONAL,
|
||||||
@ -455,18 +472,19 @@ ManFileFindTitleSection(
|
|||||||
BOOLEAN Found;
|
BOOLEAN Found;
|
||||||
UINTN Start;
|
UINTN Start;
|
||||||
|
|
||||||
if ( Handle == NULL
|
if ( (Handle == NULL)
|
||||||
|| Command == NULL
|
|| (Command == NULL)
|
||||||
|| (BriefDesc != NULL && BriefSize == NULL)
|
|| ((BriefDesc != NULL) && (BriefSize == NULL))
|
||||||
){
|
)
|
||||||
|
{
|
||||||
return (EFI_INVALID_PARAMETER);
|
return (EFI_INVALID_PARAMETER);
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = EFI_SUCCESS;
|
Status = EFI_SUCCESS;
|
||||||
Size = 1024;
|
Size = 1024;
|
||||||
Found = FALSE;
|
Found = FALSE;
|
||||||
|
|
||||||
ReadLine = AllocateZeroPool(Size);
|
ReadLine = AllocateZeroPool (Size);
|
||||||
if (ReadLine == NULL) {
|
if (ReadLine == NULL) {
|
||||||
return (EFI_OUT_OF_RESOURCES);
|
return (EFI_OUT_OF_RESOURCES);
|
||||||
}
|
}
|
||||||
@ -474,20 +492,21 @@ ManFileFindTitleSection(
|
|||||||
//
|
//
|
||||||
// Do not pass any leading path information that may be present to IsTitleHeader().
|
// Do not pass any leading path information that may be present to IsTitleHeader().
|
||||||
//
|
//
|
||||||
Start = StrLen(Command);
|
Start = StrLen (Command);
|
||||||
while ((Start != 0)
|
while ( (Start != 0)
|
||||||
&& (*(Command + Start - 1) != L'\\')
|
&& (*(Command + Start - 1) != L'\\')
|
||||||
&& (*(Command + Start - 1) != L'/')
|
&& (*(Command + Start - 1) != L'/')
|
||||||
&& (*(Command + Start - 1) != L':')) {
|
&& (*(Command + Start - 1) != L':'))
|
||||||
|
{
|
||||||
--Start;
|
--Start;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (;!ShellFileHandleEof(Handle);Size = 1024) {
|
for ( ; !ShellFileHandleEof (Handle); Size = 1024) {
|
||||||
Status = ShellFileHandleReadLine(Handle, ReadLine, &Size, TRUE, Ascii);
|
Status = ShellFileHandleReadLine (Handle, ReadLine, &Size, TRUE, Ascii);
|
||||||
//
|
//
|
||||||
// ignore too small of buffer...
|
// ignore too small of buffer...
|
||||||
//
|
//
|
||||||
if (EFI_ERROR(Status) && Status != EFI_BUFFER_TOO_SMALL) {
|
if (EFI_ERROR (Status) && (Status != EFI_BUFFER_TOO_SMALL)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -498,7 +517,7 @@ ManFileFindTitleSection(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FreePool(ReadLine);
|
FreePool (ReadLine);
|
||||||
return (Status);
|
return (Status);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -533,32 +552,33 @@ ManFileFindTitleSection(
|
|||||||
@retval EFI_NOT_FOUND There is no help text available for Command.
|
@retval EFI_NOT_FOUND There is no help text available for Command.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
ProcessManFile(
|
ProcessManFile (
|
||||||
IN CONST CHAR16 *ManFileName,
|
IN CONST CHAR16 *ManFileName,
|
||||||
IN CONST CHAR16 *Command,
|
IN CONST CHAR16 *Command,
|
||||||
IN CONST CHAR16 *Sections OPTIONAL,
|
IN CONST CHAR16 *Sections OPTIONAL,
|
||||||
OUT CHAR16 **BriefDesc OPTIONAL,
|
OUT CHAR16 **BriefDesc OPTIONAL,
|
||||||
OUT CHAR16 **HelpText
|
OUT CHAR16 **HelpText
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
CHAR16 *TempString;
|
CHAR16 *TempString;
|
||||||
SHELL_FILE_HANDLE FileHandle;
|
SHELL_FILE_HANDLE FileHandle;
|
||||||
EFI_HANDLE CmdFileImgHandle;
|
EFI_HANDLE CmdFileImgHandle;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
UINTN HelpSize;
|
UINTN HelpSize;
|
||||||
UINTN BriefSize;
|
UINTN BriefSize;
|
||||||
UINTN StringIdWalker;
|
UINTN StringIdWalker;
|
||||||
BOOLEAN Ascii;
|
BOOLEAN Ascii;
|
||||||
CHAR16 *CmdFileName;
|
CHAR16 *CmdFileName;
|
||||||
CHAR16 *CmdFilePathName;
|
CHAR16 *CmdFilePathName;
|
||||||
EFI_DEVICE_PATH_PROTOCOL *FileDevPath;
|
EFI_DEVICE_PATH_PROTOCOL *FileDevPath;
|
||||||
EFI_DEVICE_PATH_PROTOCOL *DevPath;
|
EFI_DEVICE_PATH_PROTOCOL *DevPath;
|
||||||
EFI_HII_PACKAGE_LIST_HEADER *PackageListHeader;
|
EFI_HII_PACKAGE_LIST_HEADER *PackageListHeader;
|
||||||
|
|
||||||
if ( ManFileName == NULL
|
if ( (ManFileName == NULL)
|
||||||
|| Command == NULL
|
|| (Command == NULL)
|
||||||
|| HelpText == NULL
|
|| (HelpText == NULL)
|
||||||
){
|
)
|
||||||
|
{
|
||||||
return (EFI_INVALID_PARAMETER);
|
return (EFI_INVALID_PARAMETER);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -577,47 +597,49 @@ ProcessManFile(
|
|||||||
//
|
//
|
||||||
// See if it's in HII first
|
// See if it's in HII first
|
||||||
//
|
//
|
||||||
TempString = ShellCommandGetCommandHelp(Command);
|
TempString = ShellCommandGetCommandHelp (Command);
|
||||||
if (TempString != NULL) {
|
if (TempString != NULL) {
|
||||||
FileHandle = ConvertEfiFileProtocolToShellHandle (CreateFileInterfaceMem (TRUE), NULL);
|
FileHandle = ConvertEfiFileProtocolToShellHandle (CreateFileInterfaceMem (TRUE), NULL);
|
||||||
HelpSize = StrLen (TempString) * sizeof (CHAR16);
|
HelpSize = StrLen (TempString) * sizeof (CHAR16);
|
||||||
ShellWriteFile (FileHandle, &HelpSize, TempString);
|
ShellWriteFile (FileHandle, &HelpSize, TempString);
|
||||||
ShellSetFilePosition (FileHandle, 0);
|
ShellSetFilePosition (FileHandle, 0);
|
||||||
HelpSize = 0;
|
HelpSize = 0;
|
||||||
BriefSize = 0;
|
BriefSize = 0;
|
||||||
Status = ManFileFindTitleSection(FileHandle, Command, BriefDesc, &BriefSize, &Ascii);
|
Status = ManFileFindTitleSection (FileHandle, Command, BriefDesc, &BriefSize, &Ascii);
|
||||||
if (!EFI_ERROR(Status) && HelpText != NULL){
|
if (!EFI_ERROR (Status) && (HelpText != NULL)) {
|
||||||
Status = ManFileFindSections(FileHandle, Sections, HelpText, &HelpSize, Ascii);
|
Status = ManFileFindSections (FileHandle, Sections, HelpText, &HelpSize, Ascii);
|
||||||
}
|
}
|
||||||
|
|
||||||
ShellCloseFile (&FileHandle);
|
ShellCloseFile (&FileHandle);
|
||||||
} else {
|
} else {
|
||||||
//
|
//
|
||||||
// If the image is a external app, check .MAN file first.
|
// If the image is a external app, check .MAN file first.
|
||||||
//
|
//
|
||||||
FileHandle = NULL;
|
FileHandle = NULL;
|
||||||
TempString = GetManFileName(ManFileName);
|
TempString = GetManFileName (ManFileName);
|
||||||
if (TempString == NULL) {
|
if (TempString == NULL) {
|
||||||
return (EFI_INVALID_PARAMETER);
|
return (EFI_INVALID_PARAMETER);
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = SearchPathForFile(TempString, &FileHandle);
|
Status = SearchPathForFile (TempString, &FileHandle);
|
||||||
if (EFI_ERROR(Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
FileDevPath = FileDevicePath(NULL, TempString);
|
FileDevPath = FileDevicePath (NULL, TempString);
|
||||||
DevPath = AppendDevicePath (ShellInfoObject.ImageDevPath, FileDevPath);
|
DevPath = AppendDevicePath (ShellInfoObject.ImageDevPath, FileDevPath);
|
||||||
Status = InternalOpenFileDevicePath(DevPath, &FileHandle, EFI_FILE_MODE_READ, 0);
|
Status = InternalOpenFileDevicePath (DevPath, &FileHandle, EFI_FILE_MODE_READ, 0);
|
||||||
SHELL_FREE_NON_NULL(FileDevPath);
|
SHELL_FREE_NON_NULL (FileDevPath);
|
||||||
SHELL_FREE_NON_NULL(DevPath);
|
SHELL_FREE_NON_NULL (DevPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!EFI_ERROR(Status)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
HelpSize = 0;
|
HelpSize = 0;
|
||||||
BriefSize = 0;
|
BriefSize = 0;
|
||||||
Status = ManFileFindTitleSection(FileHandle, Command, BriefDesc, &BriefSize, &Ascii);
|
Status = ManFileFindTitleSection (FileHandle, Command, BriefDesc, &BriefSize, &Ascii);
|
||||||
if (!EFI_ERROR(Status) && HelpText != NULL){
|
if (!EFI_ERROR (Status) && (HelpText != NULL)) {
|
||||||
Status = ManFileFindSections(FileHandle, Sections, HelpText, &HelpSize, Ascii);
|
Status = ManFileFindSections (FileHandle, Sections, HelpText, &HelpSize, Ascii);
|
||||||
}
|
}
|
||||||
ShellInfoObject.NewEfiShellProtocol->CloseFile(FileHandle);
|
|
||||||
if (!EFI_ERROR(Status)) {
|
ShellInfoObject.NewEfiShellProtocol->CloseFile (FileHandle);
|
||||||
|
if (!EFI_ERROR (Status)) {
|
||||||
//
|
//
|
||||||
// Get help text from .MAN file success.
|
// Get help text from .MAN file success.
|
||||||
//
|
//
|
||||||
@ -628,23 +650,25 @@ ProcessManFile(
|
|||||||
//
|
//
|
||||||
// Load the app image to check EFI_HII_PACKAGE_LIST_PROTOCOL.
|
// Load the app image to check EFI_HII_PACKAGE_LIST_PROTOCOL.
|
||||||
//
|
//
|
||||||
CmdFileName = GetExecuatableFileName(TempString);
|
CmdFileName = GetExecuatableFileName (TempString);
|
||||||
if (CmdFileName == NULL) {
|
if (CmdFileName == NULL) {
|
||||||
Status = EFI_OUT_OF_RESOURCES;
|
Status = EFI_OUT_OF_RESOURCES;
|
||||||
goto Done;
|
goto Done;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// If the file in CWD then use the file name, else use the full
|
// If the file in CWD then use the file name, else use the full
|
||||||
// path name.
|
// path name.
|
||||||
//
|
//
|
||||||
CmdFilePathName = ShellFindFilePath(CmdFileName);
|
CmdFilePathName = ShellFindFilePath (CmdFileName);
|
||||||
if (CmdFilePathName == NULL) {
|
if (CmdFilePathName == NULL) {
|
||||||
Status = EFI_NOT_FOUND;
|
Status = EFI_NOT_FOUND;
|
||||||
goto Done;
|
goto Done;
|
||||||
}
|
}
|
||||||
DevPath = ShellInfoObject.NewEfiShellProtocol->GetDevicePathFromFilePath(CmdFilePathName);
|
|
||||||
Status = gBS->LoadImage(FALSE, gImageHandle, DevPath, NULL, 0, &CmdFileImgHandle);
|
DevPath = ShellInfoObject.NewEfiShellProtocol->GetDevicePathFromFilePath (CmdFilePathName);
|
||||||
if(EFI_ERROR(Status)) {
|
Status = gBS->LoadImage (FALSE, gImageHandle, DevPath, NULL, 0, &CmdFileImgHandle);
|
||||||
|
if (EFI_ERROR (Status)) {
|
||||||
//
|
//
|
||||||
// With EFI_SECURITY_VIOLATION retval, the Image was loaded and an ImageHandle was created
|
// With EFI_SECURITY_VIOLATION retval, the Image was loaded and an ImageHandle was created
|
||||||
// with a valid EFI_LOADED_IMAGE_PROTOCOL, but the image can not be started right now.
|
// with a valid EFI_LOADED_IMAGE_PROTOCOL, but the image can not be started right now.
|
||||||
@ -654,18 +678,20 @@ ProcessManFile(
|
|||||||
if (Status == EFI_SECURITY_VIOLATION) {
|
if (Status == EFI_SECURITY_VIOLATION) {
|
||||||
gBS->UnloadImage (CmdFileImgHandle);
|
gBS->UnloadImage (CmdFileImgHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
*HelpText = NULL;
|
*HelpText = NULL;
|
||||||
goto Done;
|
goto Done;
|
||||||
}
|
}
|
||||||
Status = gBS->OpenProtocol(
|
|
||||||
|
Status = gBS->OpenProtocol (
|
||||||
CmdFileImgHandle,
|
CmdFileImgHandle,
|
||||||
&gEfiHiiPackageListProtocolGuid,
|
&gEfiHiiPackageListProtocolGuid,
|
||||||
(VOID**)&PackageListHeader,
|
(VOID **)&PackageListHeader,
|
||||||
gImageHandle,
|
gImageHandle,
|
||||||
NULL,
|
NULL,
|
||||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||||
);
|
);
|
||||||
if(EFI_ERROR(Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
*HelpText = NULL;
|
*HelpText = NULL;
|
||||||
goto Done;
|
goto Done;
|
||||||
}
|
}
|
||||||
@ -679,60 +705,62 @@ ProcessManFile(
|
|||||||
EFI_NATIVE_INTERFACE,
|
EFI_NATIVE_INTERFACE,
|
||||||
&mShellManHiiDevicePath
|
&mShellManHiiDevicePath
|
||||||
);
|
);
|
||||||
if (EFI_ERROR(Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
goto Done;
|
goto Done;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = gHiiDatabase->NewPackageList (
|
Status = gHiiDatabase->NewPackageList (
|
||||||
gHiiDatabase,
|
gHiiDatabase,
|
||||||
PackageListHeader,
|
PackageListHeader,
|
||||||
mShellManDriverHandle,
|
mShellManDriverHandle,
|
||||||
&mShellManHiiHandle
|
&mShellManHiiHandle
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
goto Done;
|
goto Done;
|
||||||
}
|
}
|
||||||
|
|
||||||
StringIdWalker = 1;
|
StringIdWalker = 1;
|
||||||
do {
|
do {
|
||||||
SHELL_FREE_NON_NULL(TempString);
|
SHELL_FREE_NON_NULL (TempString);
|
||||||
if (BriefDesc != NULL) {
|
if (BriefDesc != NULL) {
|
||||||
SHELL_FREE_NON_NULL(*BriefDesc);
|
SHELL_FREE_NON_NULL (*BriefDesc);
|
||||||
}
|
}
|
||||||
TempString = HiiGetString (mShellManHiiHandle, (EFI_STRING_ID)StringIdWalker, NULL);
|
|
||||||
if (TempString == NULL) {
|
|
||||||
Status = EFI_NOT_FOUND;
|
|
||||||
goto Done;
|
|
||||||
}
|
|
||||||
FileHandle = ConvertEfiFileProtocolToShellHandle (CreateFileInterfaceMem (TRUE), NULL);
|
|
||||||
HelpSize = StrLen (TempString) * sizeof (CHAR16);
|
|
||||||
ShellWriteFile (FileHandle, &HelpSize, TempString);
|
|
||||||
ShellSetFilePosition (FileHandle, 0);
|
|
||||||
HelpSize = 0;
|
|
||||||
BriefSize = 0;
|
|
||||||
Status = ManFileFindTitleSection(FileHandle, Command, BriefDesc, &BriefSize, &Ascii);
|
|
||||||
if (!EFI_ERROR(Status) && HelpText != NULL){
|
|
||||||
Status = ManFileFindSections(FileHandle, Sections, HelpText, &HelpSize, Ascii);
|
|
||||||
}
|
|
||||||
ShellCloseFile (&FileHandle);
|
|
||||||
if (!EFI_ERROR(Status)){
|
|
||||||
//
|
|
||||||
// Found what we need and return
|
|
||||||
//
|
|
||||||
goto Done;
|
|
||||||
}
|
|
||||||
|
|
||||||
StringIdWalker += 1;
|
TempString = HiiGetString (mShellManHiiHandle, (EFI_STRING_ID)StringIdWalker, NULL);
|
||||||
|
if (TempString == NULL) {
|
||||||
|
Status = EFI_NOT_FOUND;
|
||||||
|
goto Done;
|
||||||
|
}
|
||||||
|
|
||||||
|
FileHandle = ConvertEfiFileProtocolToShellHandle (CreateFileInterfaceMem (TRUE), NULL);
|
||||||
|
HelpSize = StrLen (TempString) * sizeof (CHAR16);
|
||||||
|
ShellWriteFile (FileHandle, &HelpSize, TempString);
|
||||||
|
ShellSetFilePosition (FileHandle, 0);
|
||||||
|
HelpSize = 0;
|
||||||
|
BriefSize = 0;
|
||||||
|
Status = ManFileFindTitleSection (FileHandle, Command, BriefDesc, &BriefSize, &Ascii);
|
||||||
|
if (!EFI_ERROR (Status) && (HelpText != NULL)) {
|
||||||
|
Status = ManFileFindSections (FileHandle, Sections, HelpText, &HelpSize, Ascii);
|
||||||
|
}
|
||||||
|
|
||||||
|
ShellCloseFile (&FileHandle);
|
||||||
|
if (!EFI_ERROR (Status)) {
|
||||||
|
//
|
||||||
|
// Found what we need and return
|
||||||
|
//
|
||||||
|
goto Done;
|
||||||
|
}
|
||||||
|
|
||||||
|
StringIdWalker += 1;
|
||||||
} while (StringIdWalker < 0xFFFF && TempString != NULL);
|
} while (StringIdWalker < 0xFFFF && TempString != NULL);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Done:
|
Done:
|
||||||
if (mShellManDriverHandle != NULL) {
|
if (mShellManDriverHandle != NULL) {
|
||||||
gBS->UninstallProtocolInterface (
|
gBS->UninstallProtocolInterface (
|
||||||
mShellManDriverHandle,
|
mShellManDriverHandle,
|
||||||
&gEfiDevicePathProtocolGuid,
|
&gEfiDevicePathProtocolGuid,
|
||||||
&mShellManHiiDevicePath
|
&mShellManHiiDevicePath
|
||||||
);
|
);
|
||||||
mShellManDriverHandle = NULL;
|
mShellManDriverHandle = NULL;
|
||||||
}
|
}
|
||||||
@ -746,12 +774,11 @@ Done:
|
|||||||
Status = gBS->UnloadImage (CmdFileImgHandle);
|
Status = gBS->UnloadImage (CmdFileImgHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
SHELL_FREE_NON_NULL(TempString);
|
SHELL_FREE_NON_NULL (TempString);
|
||||||
SHELL_FREE_NON_NULL(CmdFileName);
|
SHELL_FREE_NON_NULL (CmdFileName);
|
||||||
SHELL_FREE_NON_NULL(CmdFilePathName);
|
SHELL_FREE_NON_NULL (CmdFilePathName);
|
||||||
SHELL_FREE_NON_NULL(FileDevPath);
|
SHELL_FREE_NON_NULL (FileDevPath);
|
||||||
SHELL_FREE_NON_NULL(DevPath);
|
SHELL_FREE_NON_NULL (DevPath);
|
||||||
|
|
||||||
return (Status);
|
return (Status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,12 +39,12 @@
|
|||||||
@retval EFI_NOT_FOUND There is no help text available for Command.
|
@retval EFI_NOT_FOUND There is no help text available for Command.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
ProcessManFile(
|
ProcessManFile (
|
||||||
IN CONST CHAR16 *ManFileName,
|
IN CONST CHAR16 *ManFileName,
|
||||||
IN CONST CHAR16 *Command,
|
IN CONST CHAR16 *Command,
|
||||||
IN CONST CHAR16 *Sections OPTIONAL,
|
IN CONST CHAR16 *Sections OPTIONAL,
|
||||||
OUT CHAR16 **BriefDesc,
|
OUT CHAR16 **BriefDesc,
|
||||||
OUT CHAR16 **HelpText
|
OUT CHAR16 **HelpText
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -66,7 +66,7 @@ ProcessManFile(
|
|||||||
an allocated buffer.
|
an allocated buffer.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
ManFileFindSections(
|
ManFileFindSections (
|
||||||
IN SHELL_FILE_HANDLE Handle,
|
IN SHELL_FILE_HANDLE Handle,
|
||||||
IN CONST CHAR16 *Sections,
|
IN CONST CHAR16 *Sections,
|
||||||
OUT CHAR16 **HelpText,
|
OUT CHAR16 **HelpText,
|
||||||
@ -75,4 +75,3 @@ ManFileFindSections(
|
|||||||
);
|
);
|
||||||
|
|
||||||
#endif //_SHELL_MAN_FILE_PARSER_HEADER_
|
#endif //_SHELL_MAN_FILE_PARSER_HEADER_
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -75,7 +75,7 @@ CleanUpShellParametersProtocol (
|
|||||||
@retval EFI_OUT_OF_RESOURCES a memory allocation failed.
|
@retval EFI_OUT_OF_RESOURCES a memory allocation failed.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
UpdateArgcArgv(
|
UpdateArgcArgv (
|
||||||
IN OUT EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters,
|
IN OUT EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters,
|
||||||
IN CONST CHAR16 *NewCommandLine,
|
IN CONST CHAR16 *NewCommandLine,
|
||||||
IN SHELL_OPERATION_TYPES Type,
|
IN SHELL_OPERATION_TYPES Type,
|
||||||
@ -93,19 +93,19 @@ UpdateArgcArgv(
|
|||||||
@param[in] OldArgc pointer to old number of items in Argv list
|
@param[in] OldArgc pointer to old number of items in Argv list
|
||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
RestoreArgcArgv(
|
RestoreArgcArgv (
|
||||||
IN OUT EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters,
|
IN OUT EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters,
|
||||||
IN CHAR16 ***OldArgv,
|
IN CHAR16 ***OldArgv,
|
||||||
IN UINTN *OldArgc
|
IN UINTN *OldArgc
|
||||||
);
|
);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
EFI_SIMPLE_TEXT_INPUT_PROTOCOL *ConIn;
|
EFI_SIMPLE_TEXT_INPUT_PROTOCOL *ConIn;
|
||||||
EFI_HANDLE ConInHandle;
|
EFI_HANDLE ConInHandle;
|
||||||
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ConOut;
|
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ConOut;
|
||||||
EFI_HANDLE ConOutHandle;
|
EFI_HANDLE ConOutHandle;
|
||||||
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ErrOut;
|
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ErrOut;
|
||||||
EFI_HANDLE ErrOutHandle;
|
EFI_HANDLE ErrOutHandle;
|
||||||
} SYSTEM_TABLE_INFO;
|
} SYSTEM_TABLE_INFO;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -126,7 +126,7 @@ typedef struct {
|
|||||||
@retval EFI_OUT_OF_RESOURCES A memory allocation failed.
|
@retval EFI_OUT_OF_RESOURCES A memory allocation failed.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
UpdateStdInStdOutStdErr(
|
UpdateStdInStdOutStdErr (
|
||||||
IN OUT EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters,
|
IN OUT EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters,
|
||||||
IN CHAR16 *NewCommandLine,
|
IN CHAR16 *NewCommandLine,
|
||||||
OUT SHELL_FILE_HANDLE *OldStdIn,
|
OUT SHELL_FILE_HANDLE *OldStdIn,
|
||||||
@ -172,11 +172,11 @@ RestoreStdInStdOutStdErr (
|
|||||||
@return EFI_OUT_OF_RESOURCES a memory allocation failed.
|
@return EFI_OUT_OF_RESOURCES a memory allocation failed.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
ParseCommandLineToArgs(
|
ParseCommandLineToArgs (
|
||||||
IN CONST CHAR16 *CommandLine,
|
IN CONST CHAR16 *CommandLine,
|
||||||
IN BOOLEAN StripQuotation,
|
IN BOOLEAN StripQuotation,
|
||||||
IN OUT CHAR16 ***Argv,
|
IN OUT CHAR16 ***Argv,
|
||||||
IN OUT UINTN *Argc
|
IN OUT UINTN *Argc
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -200,7 +200,7 @@ ParseCommandLineToArgs(
|
|||||||
@return EFI_NOT_FOUND A closing " could not be found on the specified string
|
@return EFI_NOT_FOUND A closing " could not be found on the specified string
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
GetNextParameter(
|
GetNextParameter (
|
||||||
IN OUT CHAR16 **Walker,
|
IN OUT CHAR16 **Walker,
|
||||||
IN OUT CHAR16 **TempParameter,
|
IN OUT CHAR16 **TempParameter,
|
||||||
IN CONST UINTN Length,
|
IN CONST UINTN Length,
|
||||||
@ -208,4 +208,3 @@ GetNextParameter(
|
|||||||
);
|
);
|
||||||
|
|
||||||
#endif //_SHELL_PARAMETERS_PROTOCOL_PROVIDER_HEADER_
|
#endif //_SHELL_PARAMETERS_PROTOCOL_PROVIDER_HEADER_
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -14,13 +14,13 @@
|
|||||||
#include "Shell.h"
|
#include "Shell.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
LIST_ENTRY Link;
|
LIST_ENTRY Link;
|
||||||
EFI_SHELL_PROTOCOL *Interface;
|
EFI_SHELL_PROTOCOL *Interface;
|
||||||
EFI_HANDLE Handle;
|
EFI_HANDLE Handle;
|
||||||
} SHELL_PROTOCOL_HANDLE_LIST;
|
} SHELL_PROTOCOL_HANDLE_LIST;
|
||||||
|
|
||||||
// flags values...
|
// flags values...
|
||||||
#define SHELL_MAP_FLAGS_CONSIST BIT1
|
#define SHELL_MAP_FLAGS_CONSIST BIT1
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Function to create and install on the current handle.
|
Function to create and install on the current handle.
|
||||||
@ -87,9 +87,9 @@ CleanUpShellEnvironment (
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
EfiShellSetMap(
|
EfiShellSetMap (
|
||||||
IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath OPTIONAL,
|
IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath OPTIONAL,
|
||||||
IN CONST CHAR16 *Mapping
|
IN CONST CHAR16 *Mapping
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -107,8 +107,8 @@ EfiShellSetMap(
|
|||||||
**/
|
**/
|
||||||
CONST EFI_DEVICE_PATH_PROTOCOL *
|
CONST EFI_DEVICE_PATH_PROTOCOL *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
EfiShellGetDevicePathFromMap(
|
EfiShellGetDevicePathFromMap (
|
||||||
IN CONST CHAR16 *Mapping
|
IN CONST CHAR16 *Mapping
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -130,8 +130,8 @@ EfiShellGetDevicePathFromMap(
|
|||||||
**/
|
**/
|
||||||
CONST CHAR16 *
|
CONST CHAR16 *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
EfiShellGetMapFromDevicePath(
|
EfiShellGetMapFromDevicePath (
|
||||||
IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath
|
IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -149,8 +149,8 @@ EfiShellGetMapFromDevicePath(
|
|||||||
**/
|
**/
|
||||||
CHAR16 *
|
CHAR16 *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
EfiShellGetFilePathFromDevicePath(
|
EfiShellGetFilePathFromDevicePath (
|
||||||
IN CONST EFI_DEVICE_PATH_PROTOCOL *Path
|
IN CONST EFI_DEVICE_PATH_PROTOCOL *Path
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -166,8 +166,8 @@ EfiShellGetFilePathFromDevicePath(
|
|||||||
**/
|
**/
|
||||||
EFI_DEVICE_PATH_PROTOCOL *
|
EFI_DEVICE_PATH_PROTOCOL *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
EfiShellGetDevicePathFromFilePath(
|
EfiShellGetDevicePathFromFilePath (
|
||||||
IN CONST CHAR16 *Path
|
IN CONST CHAR16 *Path
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -208,11 +208,11 @@ EfiShellGetDevicePathFromFilePath(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
EfiShellGetDeviceName(
|
EfiShellGetDeviceName (
|
||||||
IN EFI_HANDLE DeviceHandle,
|
IN EFI_HANDLE DeviceHandle,
|
||||||
IN EFI_SHELL_DEVICE_NAME_FLAGS Flags,
|
IN EFI_SHELL_DEVICE_NAME_FLAGS Flags,
|
||||||
IN CHAR8 *Language,
|
IN CHAR8 *Language,
|
||||||
OUT CHAR16 **BestDeviceName
|
OUT CHAR16 **BestDeviceName
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -232,9 +232,9 @@ EfiShellGetDeviceName(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
EfiShellOpenRootByHandle(
|
EfiShellOpenRootByHandle (
|
||||||
IN EFI_HANDLE DeviceHandle,
|
IN EFI_HANDLE DeviceHandle,
|
||||||
OUT SHELL_FILE_HANDLE *FileHandle
|
OUT SHELL_FILE_HANDLE *FileHandle
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -255,9 +255,9 @@ EfiShellOpenRootByHandle(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
EfiShellOpenRoot(
|
EfiShellOpenRoot (
|
||||||
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
|
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
|
||||||
OUT SHELL_FILE_HANDLE *FileHandle
|
OUT SHELL_FILE_HANDLE *FileHandle
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -287,11 +287,11 @@ EfiShellBatchIsActive (
|
|||||||
@retval other an error occurred.
|
@retval other an error occurred.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
InternalOpenFileDevicePath(
|
InternalOpenFileDevicePath (
|
||||||
IN OUT EFI_DEVICE_PATH_PROTOCOL *DevicePath2,
|
IN OUT EFI_DEVICE_PATH_PROTOCOL *DevicePath2,
|
||||||
OUT SHELL_FILE_HANDLE *FileHandle,
|
OUT SHELL_FILE_HANDLE *FileHandle,
|
||||||
IN UINT64 OpenMode,
|
IN UINT64 OpenMode,
|
||||||
IN UINT64 Attributes OPTIONAL
|
IN UINT64 Attributes OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -332,10 +332,10 @@ InternalOpenFileDevicePath(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
EfiShellCreateFile(
|
EfiShellCreateFile (
|
||||||
IN CONST CHAR16 *FileName,
|
IN CONST CHAR16 *FileName,
|
||||||
IN UINT64 FileAttribs,
|
IN UINT64 FileAttribs,
|
||||||
OUT SHELL_FILE_HANDLE *FileHandle
|
OUT SHELL_FILE_HANDLE *FileHandle
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -392,10 +392,10 @@ EfiShellCreateFile(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
EfiShellOpenFileByName(
|
EfiShellOpenFileByName (
|
||||||
IN CONST CHAR16 *FileName,
|
IN CONST CHAR16 *FileName,
|
||||||
OUT SHELL_FILE_HANDLE *FileHandle,
|
OUT SHELL_FILE_HANDLE *FileHandle,
|
||||||
IN UINT64 OpenMode
|
IN UINT64 OpenMode
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -412,8 +412,8 @@ EfiShellOpenFileByName(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
EfiShellDeleteFileByName(
|
EfiShellDeleteFileByName (
|
||||||
IN CONST CHAR16 *FileName
|
IN CONST CHAR16 *FileName
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -456,12 +456,12 @@ EfiShellEnablePageBreak (
|
|||||||
@retval EFI_UNSUPPORTED Nested shell invocations are not allowed.
|
@retval EFI_UNSUPPORTED Nested shell invocations are not allowed.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
InternalShellExecuteDevicePath(
|
InternalShellExecuteDevicePath (
|
||||||
IN CONST EFI_HANDLE *ParentImageHandle,
|
IN CONST EFI_HANDLE *ParentImageHandle,
|
||||||
IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath,
|
IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath,
|
||||||
IN CONST CHAR16 *CommandLine OPTIONAL,
|
IN CONST CHAR16 *CommandLine OPTIONAL,
|
||||||
IN CONST CHAR16 **Environment OPTIONAL,
|
IN CONST CHAR16 **Environment OPTIONAL,
|
||||||
OUT EFI_STATUS *StartImageStatus OPTIONAL
|
OUT EFI_STATUS *StartImageStatus OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -497,11 +497,11 @@ InternalShellExecuteDevicePath(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
EfiShellExecute(
|
EfiShellExecute (
|
||||||
IN EFI_HANDLE *ParentImageHandle,
|
IN EFI_HANDLE *ParentImageHandle,
|
||||||
IN CHAR16 *CommandLine OPTIONAL,
|
IN CHAR16 *CommandLine OPTIONAL,
|
||||||
IN CHAR16 **Environment OPTIONAL,
|
IN CHAR16 **Environment OPTIONAL,
|
||||||
OUT EFI_STATUS *StatusCode OPTIONAL
|
OUT EFI_STATUS *StatusCode OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -513,8 +513,8 @@ EfiShellExecute(
|
|||||||
@param FileListNode pointer to the list node to free
|
@param FileListNode pointer to the list node to free
|
||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
FreeShellFileInfoNode(
|
FreeShellFileInfoNode (
|
||||||
IN EFI_SHELL_FILE_INFO *FileListNode
|
IN EFI_SHELL_FILE_INFO *FileListNode
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -531,8 +531,8 @@ FreeShellFileInfoNode(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
EfiShellFreeFileList(
|
EfiShellFreeFileList (
|
||||||
IN EFI_SHELL_FILE_INFO **FileList
|
IN EFI_SHELL_FILE_INFO **FileList
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -547,8 +547,8 @@ EfiShellFreeFileList(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
EfiShellRemoveDupInFileList(
|
EfiShellRemoveDupInFileList (
|
||||||
IN EFI_SHELL_FILE_INFO **FileList
|
IN EFI_SHELL_FILE_INFO **FileList
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -563,12 +563,12 @@ EfiShellRemoveDupInFileList(
|
|||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_SHELL_FILE_INFO *
|
EFI_SHELL_FILE_INFO *
|
||||||
CreateAndPopulateShellFileInfo(
|
CreateAndPopulateShellFileInfo (
|
||||||
IN CONST CHAR16 *BasePath,
|
IN CONST CHAR16 *BasePath,
|
||||||
IN CONST EFI_STATUS Status,
|
IN CONST EFI_STATUS Status,
|
||||||
IN CONST CHAR16 *FileName,
|
IN CONST CHAR16 *FileName,
|
||||||
IN CONST SHELL_FILE_HANDLE Handle,
|
IN CONST SHELL_FILE_HANDLE Handle,
|
||||||
IN CONST EFI_FILE_INFO *Info
|
IN CONST EFI_FILE_INFO *Info
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -586,9 +586,9 @@ CreateAndPopulateShellFileInfo(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
EfiShellFindFilesInDir(
|
EfiShellFindFilesInDir (
|
||||||
IN SHELL_FILE_HANDLE FileDirHandle,
|
IN SHELL_FILE_HANDLE FileDirHandle,
|
||||||
OUT EFI_SHELL_FILE_INFO **FileList
|
OUT EFI_SHELL_FILE_INFO **FileList
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -619,9 +619,9 @@ EfiShellFindFilesInDir(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
EfiShellFindFiles(
|
EfiShellFindFiles (
|
||||||
IN CONST CHAR16 *FilePattern,
|
IN CONST CHAR16 *FilePattern,
|
||||||
OUT EFI_SHELL_FILE_INFO **FileList
|
OUT EFI_SHELL_FILE_INFO **FileList
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -641,10 +641,10 @@ EfiShellFindFiles(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
EfiShellOpenFileList(
|
EfiShellOpenFileList (
|
||||||
IN CHAR16 *Path,
|
IN CHAR16 *Path,
|
||||||
IN UINT64 OpenMode,
|
IN UINT64 OpenMode,
|
||||||
IN OUT EFI_SHELL_FILE_INFO **FileList
|
IN OUT EFI_SHELL_FILE_INFO **FileList
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -660,8 +660,8 @@ EfiShellOpenFileList(
|
|||||||
**/
|
**/
|
||||||
CONST CHAR16 *
|
CONST CHAR16 *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
EfiShellGetEnv(
|
EfiShellGetEnv (
|
||||||
IN CONST CHAR16 *Name
|
IN CONST CHAR16 *Name
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -687,10 +687,10 @@ EfiShellGetEnv(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
EfiShellSetEnv(
|
EfiShellSetEnv (
|
||||||
IN CONST CHAR16 *Name,
|
IN CONST CHAR16 *Name,
|
||||||
IN CONST CHAR16 *Value,
|
IN CONST CHAR16 *Value,
|
||||||
IN BOOLEAN Volatile
|
IN BOOLEAN Volatile
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -709,8 +709,8 @@ EfiShellSetEnv(
|
|||||||
**/
|
**/
|
||||||
CONST CHAR16 *
|
CONST CHAR16 *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
EfiShellGetCurDir(
|
EfiShellGetCurDir (
|
||||||
IN CONST CHAR16 *FileSystemMapping OPTIONAL
|
IN CONST CHAR16 *FileSystemMapping OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -738,9 +738,9 @@ EfiShellGetCurDir(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
EfiShellSetCurDir(
|
EfiShellSetCurDir (
|
||||||
IN CONST CHAR16 *FileSystem OPTIONAL,
|
IN CONST CHAR16 *FileSystem OPTIONAL,
|
||||||
IN CONST CHAR16 *Dir
|
IN CONST CHAR16 *Dir
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -770,10 +770,10 @@ EfiShellSetCurDir(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
EfiShellGetHelpText(
|
EfiShellGetHelpText (
|
||||||
IN CONST CHAR16 *Command,
|
IN CONST CHAR16 *Command,
|
||||||
IN CONST CHAR16 *Sections OPTIONAL,
|
IN CONST CHAR16 *Sections OPTIONAL,
|
||||||
OUT CHAR16 **HelpText
|
OUT CHAR16 **HelpText
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -786,7 +786,7 @@ EfiShellGetHelpText(
|
|||||||
**/
|
**/
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
EfiShellGetPageBreak(
|
EfiShellGetPageBreak (
|
||||||
VOID
|
VOID
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -800,7 +800,7 @@ EfiShellGetPageBreak(
|
|||||||
**/
|
**/
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
EfiShellIsRootShell(
|
EfiShellIsRootShell (
|
||||||
VOID
|
VOID
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -823,9 +823,9 @@ EfiShellIsRootShell(
|
|||||||
**/
|
**/
|
||||||
CONST CHAR16 *
|
CONST CHAR16 *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
EfiShellGetAlias(
|
EfiShellGetAlias (
|
||||||
IN CONST CHAR16 *Command,
|
IN CONST CHAR16 *Command,
|
||||||
OUT BOOLEAN *Volatile OPTIONAL
|
OUT BOOLEAN *Volatile OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -845,10 +845,10 @@ EfiShellGetAlias(
|
|||||||
@retval EFI_NOT_FOUND the Alias intended to be deleted was not found
|
@retval EFI_NOT_FOUND the Alias intended to be deleted was not found
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
InternalSetAlias(
|
InternalSetAlias (
|
||||||
IN CONST CHAR16 *Command,
|
IN CONST CHAR16 *Command,
|
||||||
IN CONST CHAR16 *Alias OPTIONAL,
|
IN CONST CHAR16 *Alias OPTIONAL,
|
||||||
IN BOOLEAN Volatile
|
IN BOOLEAN Volatile
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -873,11 +873,11 @@ InternalSetAlias(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
EfiShellSetAlias(
|
EfiShellSetAlias (
|
||||||
IN CONST CHAR16 *Command,
|
IN CONST CHAR16 *Command,
|
||||||
IN CONST CHAR16 *Alias OPTIONAL,
|
IN CONST CHAR16 *Alias OPTIONAL,
|
||||||
IN BOOLEAN Replace,
|
IN BOOLEAN Replace,
|
||||||
IN BOOLEAN Volatile
|
IN BOOLEAN Volatile
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -889,8 +889,8 @@ EfiShellSetAlias(
|
|||||||
@param FileListNode pointer to the list node to free
|
@param FileListNode pointer to the list node to free
|
||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
InternalFreeShellFileInfoNode(
|
InternalFreeShellFileInfoNode (
|
||||||
IN EFI_SHELL_FILE_INFO *FileListNode
|
IN EFI_SHELL_FILE_INFO *FileListNode
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -904,10 +904,10 @@ InternalFreeShellFileInfoNode(
|
|||||||
@retval EFI_SUCCESS The environment variable was successfully updated.
|
@retval EFI_SUCCESS The environment variable was successfully updated.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
InternalEfiShellSetEnv(
|
InternalEfiShellSetEnv (
|
||||||
IN CONST CHAR16 *Name,
|
IN CONST CHAR16 *Name,
|
||||||
IN CONST CHAR16 *Value,
|
IN CONST CHAR16 *Value,
|
||||||
IN BOOLEAN Volatile
|
IN BOOLEAN Volatile
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -918,7 +918,7 @@ InternalEfiShellSetEnv(
|
|||||||
@retval EFI_OUT_OF_RESOURCES There is not enough memory available.
|
@retval EFI_OUT_OF_RESOURCES There is not enough memory available.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
InernalEfiShellStartMonitor(
|
InernalEfiShellStartMonitor (
|
||||||
VOID
|
VOID
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -931,8 +931,8 @@ InernalEfiShellStartMonitor(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
NotificationFunction(
|
NotificationFunction (
|
||||||
IN EFI_KEY_DATA *KeyData
|
IN EFI_KEY_DATA *KeyData
|
||||||
);
|
);
|
||||||
#endif //_SHELL_PROTOCOL_HEADER_
|
|
||||||
|
|
||||||
|
#endif //_SHELL_PROTOCOL_HEADER_
|
||||||
|
@ -29,16 +29,18 @@
|
|||||||
INTN
|
INTN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellAppMain (
|
ShellAppMain (
|
||||||
IN UINTN Argc,
|
IN UINTN Argc,
|
||||||
IN CHAR16 **Argv
|
IN CHAR16 **Argv
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINTN Index;
|
UINTN Index;
|
||||||
|
|
||||||
if (Argc == 1) {
|
if (Argc == 1) {
|
||||||
Print (L"Argv[1] = NULL\n");
|
Print (L"Argv[1] = NULL\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Index = 1; Index < Argc; Index++) {
|
for (Index = 1; Index < Argc; Index++) {
|
||||||
Print(L"Argv[%d]: \"%s\"\n", Index, Argv[Index]);
|
Print (L"Argv[%d]: \"%s\"\n", Index, Argv[Index]);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -27,6 +27,6 @@ UefiMain (
|
|||||||
IN EFI_SYSTEM_TABLE *SystemTable
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Print(L"ShellExecute - Pass");
|
Print (L"ShellExecute - Pass");
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -24,14 +24,19 @@
|
|||||||
**/
|
**/
|
||||||
INTN
|
INTN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
Test(CONST VOID *b1, CONST VOID *b2)
|
Test (
|
||||||
|
CONST VOID *b1,
|
||||||
|
CONST VOID *b2
|
||||||
|
)
|
||||||
{
|
{
|
||||||
if (*(INTN*)b1 == *(INTN*)b2) {
|
if (*(INTN *)b1 == *(INTN *)b2) {
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
if (*(INTN*)b1 < *(INTN*)b2) {
|
|
||||||
return(-1);
|
if (*(INTN *)b1 < *(INTN *)b2) {
|
||||||
|
return (-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (1);
|
return (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -52,11 +57,11 @@ Test(CONST VOID *b1, CONST VOID *b2)
|
|||||||
INTN
|
INTN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellAppMain (
|
ShellAppMain (
|
||||||
IN UINTN Argc,
|
IN UINTN Argc,
|
||||||
IN CHAR16 **Argv
|
IN CHAR16 **Argv
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
INTN Array[10];
|
INTN Array[10];
|
||||||
|
|
||||||
Array[0] = 2;
|
Array[0] = 2;
|
||||||
Array[1] = 3;
|
Array[1] = 3;
|
||||||
@ -69,9 +74,9 @@ ShellAppMain (
|
|||||||
Array[8] = 1;
|
Array[8] = 1;
|
||||||
Array[9] = 5;
|
Array[9] = 5;
|
||||||
|
|
||||||
Print(L"Array = %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\r\n", Array[0],Array[1],Array[2],Array[3],Array[4],Array[5],Array[6],Array[7],Array[8],Array[9]);
|
Print (L"Array = %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\r\n", Array[0], Array[1], Array[2], Array[3], Array[4], Array[5], Array[6], Array[7], Array[8], Array[9]);
|
||||||
PerformQuickSort(Array, 10, sizeof(INTN), Test);
|
PerformQuickSort (Array, 10, sizeof (INTN), Test);
|
||||||
Print(L"POST-SORT\r\n");
|
Print (L"POST-SORT\r\n");
|
||||||
Print(L"Array = %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\r\n", Array[0],Array[1],Array[2],Array[3],Array[4],Array[5],Array[6],Array[7],Array[8],Array[9]);
|
Print (L"Array = %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\r\n", Array[0], Array[1], Array[2], Array[3], Array[4], Array[5], Array[6], Array[7], Array[8], Array[9]);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -9,7 +9,6 @@
|
|||||||
#ifndef _DP_H_
|
#ifndef _DP_H_
|
||||||
#define _DP_H_
|
#define _DP_H_
|
||||||
|
|
||||||
|
|
||||||
#include <Uefi.h>
|
#include <Uefi.h>
|
||||||
|
|
||||||
#include <Guid/Performance.h>
|
#include <Guid/Performance.h>
|
||||||
@ -36,32 +35,32 @@
|
|||||||
#include <Library/UefiHiiServicesLib.h>
|
#include <Library/UefiHiiServicesLib.h>
|
||||||
#include <Library/PerformanceLib.h>
|
#include <Library/PerformanceLib.h>
|
||||||
|
|
||||||
extern EFI_HII_HANDLE mDpHiiHandle;
|
extern EFI_HII_HANDLE mDpHiiHandle;
|
||||||
|
|
||||||
#define DP_MAJOR_VERSION 2
|
#define DP_MAJOR_VERSION 2
|
||||||
#define DP_MINOR_VERSION 5
|
#define DP_MINOR_VERSION 5
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The value assigned to DP_DEBUG controls which debug output
|
* The value assigned to DP_DEBUG controls which debug output
|
||||||
* is generated. Set it to ZERO to disable.
|
* is generated. Set it to ZERO to disable.
|
||||||
**/
|
**/
|
||||||
#define DP_DEBUG 0
|
#define DP_DEBUG 0
|
||||||
|
|
||||||
#define DEFAULT_THRESHOLD 1000 ///< One millisecond.
|
#define DEFAULT_THRESHOLD 1000 ///< One millisecond.
|
||||||
#define DEFAULT_DISPLAYCOUNT 50
|
#define DEFAULT_DISPLAYCOUNT 50
|
||||||
#define MAXIMUM_DISPLAYCOUNT 999999 ///< Arbitrary maximum reasonable number.
|
#define MAXIMUM_DISPLAYCOUNT 999999 ///< Arbitrary maximum reasonable number.
|
||||||
|
|
||||||
#define PERF_MAXDUR 0xFFFFFFFFFFFFFFFFULL
|
#define PERF_MAXDUR 0xFFFFFFFFFFFFFFFFULL
|
||||||
|
|
||||||
/// Determine whether 0 <= C < L. If L == 0, return true regardless of C.
|
/// Determine whether 0 <= C < L. If L == 0, return true regardless of C.
|
||||||
#define WITHIN_LIMIT( C, L) ( ((L) == 0) || ((C) < (L)) )
|
#define WITHIN_LIMIT(C, L) ( ((L) == 0) || ((C) < (L)) )
|
||||||
|
|
||||||
/// Structure for storing Timer specific information.
|
/// Structure for storing Timer specific information.
|
||||||
typedef struct {
|
typedef struct {
|
||||||
UINT64 StartCount; ///< Value timer is initialized with.
|
UINT64 StartCount; ///< Value timer is initialized with.
|
||||||
UINT64 EndCount; ///< Value timer has just before it wraps.
|
UINT64 EndCount; ///< Value timer has just before it wraps.
|
||||||
UINT32 Frequency; ///< Timer count frequency in KHz.
|
UINT32 Frequency; ///< Timer count frequency in KHz.
|
||||||
BOOLEAN CountUp; ///< TRUE if the counter counts up.
|
BOOLEAN CountUp; ///< TRUE if the counter counts up.
|
||||||
} TIMER_INFO;
|
} TIMER_INFO;
|
||||||
|
|
||||||
/** Initialize one PERF_CUM_DATA structure instance for token t.
|
/** Initialize one PERF_CUM_DATA structure instance for token t.
|
||||||
@ -73,40 +72,40 @@ typedef struct {
|
|||||||
* - PERF_INIT_CUM_DATA(pointer) A pointer -- CHAR8 *pointer;
|
* - PERF_INIT_CUM_DATA(pointer) A pointer -- CHAR8 *pointer;
|
||||||
* - PERF_INIT_CUM_DATA(array) Address of an array -- CHAR8 array[N];
|
* - PERF_INIT_CUM_DATA(array) Address of an array -- CHAR8 array[N];
|
||||||
**/
|
**/
|
||||||
#define PERF_INIT_CUM_DATA(t) { 0ULL, PERF_MAXDUR, 0ULL, (t), 0U }
|
#define PERF_INIT_CUM_DATA(t) { 0ULL, PERF_MAXDUR, 0ULL, (t), 0U }
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
UINT64 Duration; ///< Cumulative duration for this item.
|
UINT64 Duration; ///< Cumulative duration for this item.
|
||||||
UINT64 MinDur; ///< Smallest duration encountered.
|
UINT64 MinDur; ///< Smallest duration encountered.
|
||||||
UINT64 MaxDur; ///< Largest duration encountered.
|
UINT64 MaxDur; ///< Largest duration encountered.
|
||||||
CHAR8 *Name; ///< ASCII name of this item.
|
CHAR8 *Name; ///< ASCII name of this item.
|
||||||
UINT32 Count; ///< Total number of measurements accumulated.
|
UINT32 Count; ///< Total number of measurements accumulated.
|
||||||
} PERF_CUM_DATA;
|
} PERF_CUM_DATA;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
UINT32 NumTrace; ///< Number of recorded TRACE performance measurements.
|
UINT32 NumTrace; ///< Number of recorded TRACE performance measurements.
|
||||||
UINT32 NumIncomplete; ///< Number of measurements with no END value.
|
UINT32 NumIncomplete; ///< Number of measurements with no END value.
|
||||||
UINT32 NumSummary; ///< Number of summary section measurements.
|
UINT32 NumSummary; ///< Number of summary section measurements.
|
||||||
UINT32 NumHandles; ///< Number of measurements with handles.
|
UINT32 NumHandles; ///< Number of measurements with handles.
|
||||||
UINT32 NumPEIMs; ///< Number of measurements of PEIMs.
|
UINT32 NumPEIMs; ///< Number of measurements of PEIMs.
|
||||||
UINT32 NumGlobal; ///< Number of measurements with END value and NULL handle.
|
UINT32 NumGlobal; ///< Number of measurements with END value and NULL handle.
|
||||||
} PERF_SUMMARY_DATA;
|
} PERF_SUMMARY_DATA;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
CONST VOID *Handle;
|
CONST VOID *Handle;
|
||||||
CONST CHAR8 *Token; ///< Measured token string name.
|
CONST CHAR8 *Token; ///< Measured token string name.
|
||||||
CONST CHAR8 *Module; ///< Module string name.
|
CONST CHAR8 *Module; ///< Module string name.
|
||||||
UINT64 StartTimeStamp; ///< Start time point.
|
UINT64 StartTimeStamp; ///< Start time point.
|
||||||
UINT64 EndTimeStamp; ///< End time point.
|
UINT64 EndTimeStamp; ///< End time point.
|
||||||
UINT32 Identifier; ///< Identifier.
|
UINT32 Identifier; ///< Identifier.
|
||||||
} MEASUREMENT_RECORD;
|
} MEASUREMENT_RECORD;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
CHAR8 *Name; ///< Measured token string name.
|
CHAR8 *Name; ///< Measured token string name.
|
||||||
UINT64 CumulativeTime; ///< Accumulated Elapsed Time.
|
UINT64 CumulativeTime; ///< Accumulated Elapsed Time.
|
||||||
UINT64 MinTime; ///< Minimum Elapsed Time.
|
UINT64 MinTime; ///< Minimum Elapsed Time.
|
||||||
UINT64 MaxTime; ///< Maximum Elapsed Time.
|
UINT64 MaxTime; ///< Maximum Elapsed Time.
|
||||||
UINT32 Count; ///< Number of measurements accumulated.
|
UINT32 Count; ///< Number of measurements accumulated.
|
||||||
} PROFILE_RECORD;
|
} PROFILE_RECORD;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -122,8 +121,8 @@ typedef struct {
|
|||||||
**/
|
**/
|
||||||
SHELL_STATUS
|
SHELL_STATUS
|
||||||
RunDp (
|
RunDp (
|
||||||
IN EFI_HANDLE ImageHandle,
|
IN EFI_HANDLE ImageHandle,
|
||||||
IN EFI_SYSTEM_TABLE *SystemTable
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -135,6 +134,7 @@ RunDp (
|
|||||||
**/
|
**/
|
||||||
EFI_HII_HANDLE
|
EFI_HII_HANDLE
|
||||||
InitializeHiiPackage (
|
InitializeHiiPackage (
|
||||||
EFI_HANDLE ImageHandle
|
EFI_HANDLE ImageHandle
|
||||||
);
|
);
|
||||||
#endif // _DP_H_
|
|
||||||
|
#endif // _DP_H_
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
// the resource section. Thus the application can use '-?' option to show help message in
|
// the resource section. Thus the application can use '-?' option to show help message in
|
||||||
// Shell.
|
// Shell.
|
||||||
//
|
//
|
||||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_STRING_ID mStringHelpTokenId = STRING_TOKEN (STR_GET_HELP_DP);
|
GLOBAL_REMOVE_IF_UNREFERENCED EFI_STRING_ID mStringHelpTokenId = STRING_TOKEN (STR_GET_HELP_DP);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Entry point of Tftp standalone application.
|
Entry point of Tftp standalone application.
|
||||||
@ -31,11 +31,12 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_STRING_ID mStringHelpTokenId = STRING_TOKEN (S
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DpAppInitialize (
|
DpAppInitialize (
|
||||||
IN EFI_HANDLE ImageHandle,
|
IN EFI_HANDLE ImageHandle,
|
||||||
IN EFI_SYSTEM_TABLE *SystemTable
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
mDpHiiHandle = InitializeHiiPackage (ImageHandle);
|
mDpHiiHandle = InitializeHiiPackage (ImageHandle);
|
||||||
if (mDpHiiHandle == NULL) {
|
if (mDpHiiHandle == NULL) {
|
||||||
return EFI_ABORTED;
|
return EFI_ABORTED;
|
||||||
|
@ -25,10 +25,10 @@
|
|||||||
SHELL_STATUS
|
SHELL_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DpCommandHandler (
|
DpCommandHandler (
|
||||||
IN EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This,
|
IN EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This,
|
||||||
IN EFI_SYSTEM_TABLE *SystemTable,
|
IN EFI_SYSTEM_TABLE *SystemTable,
|
||||||
IN EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters,
|
IN EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters,
|
||||||
IN EFI_SHELL_PROTOCOL *Shell
|
IN EFI_SHELL_PROTOCOL *Shell
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
gEfiShellParametersProtocol = ShellParameters;
|
gEfiShellParametersProtocol = ShellParameters;
|
||||||
@ -49,14 +49,14 @@ DpCommandHandler (
|
|||||||
CHAR16 *
|
CHAR16 *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DpCommandGetHelp (
|
DpCommandGetHelp (
|
||||||
IN EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This,
|
IN EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This,
|
||||||
IN CONST CHAR8 *Language
|
IN CONST CHAR8 *Language
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return HiiGetString (mDpHiiHandle, STRING_TOKEN (STR_GET_HELP_DP), Language);
|
return HiiGetString (mDpHiiHandle, STRING_TOKEN (STR_GET_HELP_DP), Language);
|
||||||
}
|
}
|
||||||
|
|
||||||
EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL mDpDynamicCommand = {
|
EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL mDpDynamicCommand = {
|
||||||
L"dp",
|
L"dp",
|
||||||
DpCommandHandler,
|
DpCommandHandler,
|
||||||
DpCommandGetHelp
|
DpCommandGetHelp
|
||||||
@ -77,11 +77,12 @@ EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL mDpDynamicCommand = {
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DpCommandInitialize (
|
DpCommandInitialize (
|
||||||
IN EFI_HANDLE ImageHandle,
|
IN EFI_HANDLE ImageHandle,
|
||||||
IN EFI_SYSTEM_TABLE *SystemTable
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
mDpHiiHandle = InitializeHiiPackage (ImageHandle);
|
mDpHiiHandle = InitializeHiiPackage (ImageHandle);
|
||||||
if (mDpHiiHandle == NULL) {
|
if (mDpHiiHandle == NULL) {
|
||||||
return EFI_ABORTED;
|
return EFI_ABORTED;
|
||||||
@ -108,10 +109,11 @@ DpCommandInitialize (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DpUnload (
|
DpUnload (
|
||||||
IN EFI_HANDLE ImageHandle
|
IN EFI_HANDLE ImageHandle
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
Status = gBS->UninstallProtocolInterface (
|
Status = gBS->UninstallProtocolInterface (
|
||||||
ImageHandle,
|
ImageHandle,
|
||||||
&gEfiShellDynamicCommandProtocolGuid,
|
&gEfiShellDynamicCommandProtocolGuid,
|
||||||
@ -120,6 +122,7 @@ DpUnload (
|
|||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
HiiRemovePackages (mDpHiiHandle);
|
HiiRemovePackages (mDpHiiHandle);
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -10,31 +10,32 @@
|
|||||||
(C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<BR>
|
(C) Copyright 2015-2016 Hewlett Packard Enterprise Development LP<BR>
|
||||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#ifndef _DP_INTELNAL_H_
|
#ifndef _DP_INTELNAL_H_
|
||||||
#define _DP_INTELNAL_H_
|
#define _DP_INTELNAL_H_
|
||||||
|
|
||||||
#define DP_GAUGE_STRING_LENGTH 36
|
#define DP_GAUGE_STRING_LENGTH 36
|
||||||
|
|
||||||
//
|
//
|
||||||
/// Module-Global Variables
|
/// Module-Global Variables
|
||||||
///@{
|
///@{
|
||||||
extern EFI_HII_HANDLE mDpHiiHandle;
|
extern EFI_HII_HANDLE mDpHiiHandle;
|
||||||
extern CHAR16 mGaugeString[DP_GAUGE_STRING_LENGTH + 1];
|
extern CHAR16 mGaugeString[DP_GAUGE_STRING_LENGTH + 1];
|
||||||
extern CHAR16 mUnicodeToken[DXE_PERFORMANCE_STRING_SIZE];
|
extern CHAR16 mUnicodeToken[DXE_PERFORMANCE_STRING_SIZE];
|
||||||
extern UINT64 mInterestThreshold;
|
extern UINT64 mInterestThreshold;
|
||||||
extern BOOLEAN mShowId;
|
extern BOOLEAN mShowId;
|
||||||
extern UINT8 *mBootPerformanceTable;
|
extern UINT8 *mBootPerformanceTable;
|
||||||
extern UINTN mBootPerformanceTableLength;
|
extern UINTN mBootPerformanceTableLength;
|
||||||
extern MEASUREMENT_RECORD *mMeasurementList;
|
extern MEASUREMENT_RECORD *mMeasurementList;
|
||||||
extern UINTN mMeasurementNum;
|
extern UINTN mMeasurementNum;
|
||||||
|
|
||||||
extern PERF_SUMMARY_DATA SummaryData; ///< Create the SummaryData structure and init. to ZERO.
|
extern PERF_SUMMARY_DATA SummaryData; ///< Create the SummaryData structure and init. to ZERO.
|
||||||
|
|
||||||
/// Items for which to gather cumulative statistics.
|
/// Items for which to gather cumulative statistics.
|
||||||
extern PERF_CUM_DATA CumData[];
|
extern PERF_CUM_DATA CumData[];
|
||||||
|
|
||||||
/// Number of items for which we are gathering cumulative statistics.
|
/// Number of items for which we are gathering cumulative statistics.
|
||||||
extern UINT32 const NumCum;
|
extern UINT32 const NumCum;
|
||||||
|
|
||||||
///@}
|
///@}
|
||||||
|
|
||||||
@ -60,7 +61,7 @@ extern UINT32 const NumCum;
|
|||||||
**/
|
**/
|
||||||
UINT64
|
UINT64
|
||||||
GetDuration (
|
GetDuration (
|
||||||
IN OUT MEASUREMENT_RECORD *Measurement
|
IN OUT MEASUREMENT_RECORD *Measurement
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -75,8 +76,8 @@ GetDuration (
|
|||||||
@retval FALSE The measurement record is NOT for an EFI Phase.
|
@retval FALSE The measurement record is NOT for an EFI Phase.
|
||||||
**/
|
**/
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
IsPhase(
|
IsPhase (
|
||||||
IN MEASUREMENT_RECORD *Measurement
|
IN MEASUREMENT_RECORD *Measurement
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -89,8 +90,8 @@ IsPhase(
|
|||||||
|
|
||||||
**/
|
**/
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
IsCorePerf(
|
IsCorePerf (
|
||||||
IN MEASUREMENT_RECORD *Measurement
|
IN MEASUREMENT_RECORD *Measurement
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -107,8 +108,8 @@ IsCorePerf(
|
|||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
DpGetShortPdbFileName (
|
DpGetShortPdbFileName (
|
||||||
IN CHAR8 *PdbFileName,
|
IN CHAR8 *PdbFileName,
|
||||||
OUT CHAR16 *UnicodeBuffer
|
OUT CHAR16 *UnicodeBuffer
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -129,7 +130,7 @@ DpGetShortPdbFileName (
|
|||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
DpGetNameFromHandle (
|
DpGetNameFromHandle (
|
||||||
IN EFI_HANDLE Handle
|
IN EFI_HANDLE Handle
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -147,7 +148,7 @@ DpGetNameFromHandle (
|
|||||||
**/
|
**/
|
||||||
UINT64
|
UINT64
|
||||||
DurationInMicroSeconds (
|
DurationInMicroSeconds (
|
||||||
IN UINT64 Duration
|
IN UINT64 Duration
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -164,8 +165,8 @@ DurationInMicroSeconds (
|
|||||||
@retval >=0 Return value is the index into CumData where Token is found.
|
@retval >=0 Return value is the index into CumData where Token is found.
|
||||||
**/
|
**/
|
||||||
INTN
|
INTN
|
||||||
GetCumulativeItem(
|
GetCumulativeItem (
|
||||||
IN MEASUREMENT_RECORD *Measurement
|
IN MEASUREMENT_RECORD *Measurement
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -186,8 +187,8 @@ GetCumulativeItem(
|
|||||||
|
|
||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
GatherStatistics(
|
GatherStatistics (
|
||||||
IN OUT PERF_CUM_DATA *CustomCumulativeData OPTIONAL
|
IN OUT PERF_CUM_DATA *CustomCumulativeData OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -212,9 +213,9 @@ GatherStatistics(
|
|||||||
@return Others from a call to gBS->LocateHandleBuffer().
|
@return Others from a call to gBS->LocateHandleBuffer().
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
DumpAllTrace(
|
DumpAllTrace (
|
||||||
IN UINTN Limit,
|
IN UINTN Limit,
|
||||||
IN BOOLEAN ExcludeFlag
|
IN BOOLEAN ExcludeFlag
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -237,9 +238,9 @@ DumpAllTrace(
|
|||||||
@retval EFI_ABORTED The user aborts the operation.
|
@retval EFI_ABORTED The user aborts the operation.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
DumpRawTrace(
|
DumpRawTrace (
|
||||||
IN UINTN Limit,
|
IN UINTN Limit,
|
||||||
IN BOOLEAN ExcludeFlag
|
IN BOOLEAN ExcludeFlag
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -247,11 +248,10 @@ DumpRawTrace(
|
|||||||
|
|
||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
ProcessPhases(
|
ProcessPhases (
|
||||||
VOID
|
VOID
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Gather and print Handle data.
|
Gather and print Handle data.
|
||||||
|
|
||||||
@ -262,11 +262,10 @@ ProcessPhases(
|
|||||||
@return Others from a call to gBS->LocateHandleBuffer().
|
@return Others from a call to gBS->LocateHandleBuffer().
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
ProcessHandles(
|
ProcessHandles (
|
||||||
IN BOOLEAN ExcludeFlag
|
IN BOOLEAN ExcludeFlag
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Gather and print PEIM data.
|
Gather and print PEIM data.
|
||||||
|
|
||||||
@ -276,7 +275,7 @@ ProcessHandles(
|
|||||||
@retval EFI_ABORTED The user aborts the operation.
|
@retval EFI_ABORTED The user aborts the operation.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
ProcessPeims(
|
ProcessPeims (
|
||||||
VOID
|
VOID
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -292,7 +291,7 @@ ProcessPeims(
|
|||||||
@retval EFI_ABORTED The user aborts the operation.
|
@retval EFI_ABORTED The user aborts the operation.
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
ProcessGlobal(
|
ProcessGlobal (
|
||||||
VOID
|
VOID
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -308,8 +307,8 @@ ProcessGlobal(
|
|||||||
|
|
||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
ProcessCumulative(
|
ProcessCumulative (
|
||||||
IN PERF_CUM_DATA *CustomCumulativeData OPTIONAL
|
IN PERF_CUM_DATA *CustomCumulativeData OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -55,23 +55,24 @@
|
|||||||
**/
|
**/
|
||||||
UINT64
|
UINT64
|
||||||
GetDuration (
|
GetDuration (
|
||||||
IN OUT MEASUREMENT_RECORD *Measurement
|
IN OUT MEASUREMENT_RECORD *Measurement
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT64 Duration;
|
UINT64 Duration;
|
||||||
BOOLEAN Error;
|
BOOLEAN Error;
|
||||||
|
|
||||||
if (Measurement->EndTimeStamp == 0) {
|
if (Measurement->EndTimeStamp == 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Duration = Measurement->EndTimeStamp - Measurement->StartTimeStamp;
|
Duration = Measurement->EndTimeStamp - Measurement->StartTimeStamp;
|
||||||
Error = (BOOLEAN)(Duration > Measurement->EndTimeStamp);
|
Error = (BOOLEAN)(Duration > Measurement->EndTimeStamp);
|
||||||
|
|
||||||
if (Error) {
|
if (Error) {
|
||||||
DEBUG ((DEBUG_ERROR, ALit_TimerLibError));
|
DEBUG ((DEBUG_ERROR, ALit_TimerLibError));
|
||||||
Duration = 0;
|
Duration = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return Duration;
|
return Duration;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,18 +88,18 @@ GetDuration (
|
|||||||
@retval FALSE The measurement record is NOT for an EFI Phase.
|
@retval FALSE The measurement record is NOT for an EFI Phase.
|
||||||
**/
|
**/
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
IsPhase(
|
IsPhase (
|
||||||
IN MEASUREMENT_RECORD *Measurement
|
IN MEASUREMENT_RECORD *Measurement
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
BOOLEAN RetVal;
|
BOOLEAN RetVal;
|
||||||
|
|
||||||
RetVal = (BOOLEAN)(
|
RetVal = (BOOLEAN)(
|
||||||
((AsciiStrCmp (Measurement->Token, ALit_SEC) == 0) ||
|
((AsciiStrCmp (Measurement->Token, ALit_SEC) == 0) ||
|
||||||
(AsciiStrCmp (Measurement->Token, ALit_PEI) == 0) ||
|
(AsciiStrCmp (Measurement->Token, ALit_PEI) == 0) ||
|
||||||
(AsciiStrCmp (Measurement->Token, ALit_DXE) == 0) ||
|
(AsciiStrCmp (Measurement->Token, ALit_DXE) == 0) ||
|
||||||
(AsciiStrCmp (Measurement->Token, ALit_BDS) == 0))
|
(AsciiStrCmp (Measurement->Token, ALit_BDS) == 0))
|
||||||
);
|
);
|
||||||
return RetVal;
|
return RetVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,24 +113,24 @@ IsPhase(
|
|||||||
|
|
||||||
**/
|
**/
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
IsCorePerf(
|
IsCorePerf (
|
||||||
IN MEASUREMENT_RECORD *Measurement
|
IN MEASUREMENT_RECORD *Measurement
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
BOOLEAN RetVal;
|
BOOLEAN RetVal;
|
||||||
|
|
||||||
RetVal = (BOOLEAN)(
|
RetVal = (BOOLEAN)(
|
||||||
((Measurement->Identifier == MODULE_START_ID) ||
|
((Measurement->Identifier == MODULE_START_ID) ||
|
||||||
(Measurement->Identifier == MODULE_END_ID) ||
|
(Measurement->Identifier == MODULE_END_ID) ||
|
||||||
(Measurement->Identifier == MODULE_LOADIMAGE_START_ID) ||
|
(Measurement->Identifier == MODULE_LOADIMAGE_START_ID) ||
|
||||||
(Measurement->Identifier == MODULE_LOADIMAGE_END_ID) ||
|
(Measurement->Identifier == MODULE_LOADIMAGE_END_ID) ||
|
||||||
(Measurement->Identifier == MODULE_DB_START_ID) ||
|
(Measurement->Identifier == MODULE_DB_START_ID) ||
|
||||||
(Measurement->Identifier == MODULE_DB_END_ID) ||
|
(Measurement->Identifier == MODULE_DB_END_ID) ||
|
||||||
(Measurement->Identifier == MODULE_DB_SUPPORT_START_ID) ||
|
(Measurement->Identifier == MODULE_DB_SUPPORT_START_ID) ||
|
||||||
(Measurement->Identifier == MODULE_DB_SUPPORT_END_ID) ||
|
(Measurement->Identifier == MODULE_DB_SUPPORT_END_ID) ||
|
||||||
(Measurement->Identifier == MODULE_DB_STOP_START_ID) ||
|
(Measurement->Identifier == MODULE_DB_STOP_START_ID) ||
|
||||||
(Measurement->Identifier == MODULE_DB_STOP_START_ID))
|
(Measurement->Identifier == MODULE_DB_STOP_START_ID))
|
||||||
);
|
);
|
||||||
return RetVal;
|
return RetVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -147,14 +148,14 @@ IsCorePerf(
|
|||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
DpGetShortPdbFileName (
|
DpGetShortPdbFileName (
|
||||||
IN CHAR8 *PdbFileName,
|
IN CHAR8 *PdbFileName,
|
||||||
OUT CHAR16 *UnicodeBuffer
|
OUT CHAR16 *UnicodeBuffer
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINTN IndexA; // Current work location within an ASCII string.
|
UINTN IndexA; // Current work location within an ASCII string.
|
||||||
UINTN IndexU; // Current work location within a Unicode string.
|
UINTN IndexU; // Current work location within a Unicode string.
|
||||||
UINTN StartIndex;
|
UINTN StartIndex;
|
||||||
UINTN EndIndex;
|
UINTN EndIndex;
|
||||||
|
|
||||||
ZeroMem (UnicodeBuffer, (DP_GAUGE_STRING_LENGTH + 1) * sizeof (CHAR16));
|
ZeroMem (UnicodeBuffer, (DP_GAUGE_STRING_LENGTH + 1) * sizeof (CHAR16));
|
||||||
|
|
||||||
@ -162,8 +163,9 @@ DpGetShortPdbFileName (
|
|||||||
StrnCpyS (UnicodeBuffer, DP_GAUGE_STRING_LENGTH + 1, L" ", 1);
|
StrnCpyS (UnicodeBuffer, DP_GAUGE_STRING_LENGTH + 1, L" ", 1);
|
||||||
} else {
|
} else {
|
||||||
StartIndex = 0;
|
StartIndex = 0;
|
||||||
for (EndIndex = 0; PdbFileName[EndIndex] != 0; EndIndex++)
|
for (EndIndex = 0; PdbFileName[EndIndex] != 0; EndIndex++) {
|
||||||
;
|
}
|
||||||
|
|
||||||
for (IndexA = 0; PdbFileName[IndexA] != 0; IndexA++) {
|
for (IndexA = 0; PdbFileName[IndexA] != 0; IndexA++) {
|
||||||
if ((PdbFileName[IndexA] == '\\') || (PdbFileName[IndexA] == '/')) {
|
if ((PdbFileName[IndexA] == '\\') || (PdbFileName[IndexA] == '/')) {
|
||||||
StartIndex = IndexA + 1;
|
StartIndex = IndexA + 1;
|
||||||
@ -176,7 +178,7 @@ DpGetShortPdbFileName (
|
|||||||
|
|
||||||
IndexU = 0;
|
IndexU = 0;
|
||||||
for (IndexA = StartIndex; IndexA < EndIndex; IndexA++) {
|
for (IndexA = StartIndex; IndexA < EndIndex; IndexA++) {
|
||||||
UnicodeBuffer[IndexU] = (CHAR16) PdbFileName[IndexA];
|
UnicodeBuffer[IndexU] = (CHAR16)PdbFileName[IndexA];
|
||||||
IndexU++;
|
IndexU++;
|
||||||
if (IndexU >= DP_GAUGE_STRING_LENGTH) {
|
if (IndexU >= DP_GAUGE_STRING_LENGTH) {
|
||||||
UnicodeBuffer[DP_GAUGE_STRING_LENGTH] = 0;
|
UnicodeBuffer[DP_GAUGE_STRING_LENGTH] = 0;
|
||||||
@ -204,26 +206,26 @@ DpGetShortPdbFileName (
|
|||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
DpGetNameFromHandle (
|
DpGetNameFromHandle (
|
||||||
IN EFI_HANDLE Handle
|
IN EFI_HANDLE Handle
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_LOADED_IMAGE_PROTOCOL *Image;
|
EFI_LOADED_IMAGE_PROTOCOL *Image;
|
||||||
CHAR8 *PdbFileName;
|
CHAR8 *PdbFileName;
|
||||||
EFI_DRIVER_BINDING_PROTOCOL *DriverBinding;
|
EFI_DRIVER_BINDING_PROTOCOL *DriverBinding;
|
||||||
EFI_STRING StringPtr;
|
EFI_STRING StringPtr;
|
||||||
EFI_DEVICE_PATH_PROTOCOL *LoadedImageDevicePath;
|
EFI_DEVICE_PATH_PROTOCOL *LoadedImageDevicePath;
|
||||||
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||||
EFI_GUID *NameGuid;
|
EFI_GUID *NameGuid;
|
||||||
CHAR16 *NameString;
|
CHAR16 *NameString;
|
||||||
UINTN StringSize;
|
UINTN StringSize;
|
||||||
CHAR8 *PlatformLanguage;
|
CHAR8 *PlatformLanguage;
|
||||||
CHAR8 *BestLanguage;
|
CHAR8 *BestLanguage;
|
||||||
EFI_COMPONENT_NAME2_PROTOCOL *ComponentName2;
|
EFI_COMPONENT_NAME2_PROTOCOL *ComponentName2;
|
||||||
|
|
||||||
Image = NULL;
|
Image = NULL;
|
||||||
LoadedImageDevicePath = NULL;
|
LoadedImageDevicePath = NULL;
|
||||||
DevicePath = NULL;
|
DevicePath = NULL;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Method 1: Get the name string from image PDB
|
// Method 1: Get the name string from image PDB
|
||||||
@ -231,14 +233,14 @@ DpGetNameFromHandle (
|
|||||||
Status = gBS->HandleProtocol (
|
Status = gBS->HandleProtocol (
|
||||||
Handle,
|
Handle,
|
||||||
&gEfiLoadedImageProtocolGuid,
|
&gEfiLoadedImageProtocolGuid,
|
||||||
(VOID **) &Image
|
(VOID **)&Image
|
||||||
);
|
);
|
||||||
|
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
Status = gBS->OpenProtocol (
|
Status = gBS->OpenProtocol (
|
||||||
Handle,
|
Handle,
|
||||||
&gEfiDriverBindingProtocolGuid,
|
&gEfiDriverBindingProtocolGuid,
|
||||||
(VOID **) &DriverBinding,
|
(VOID **)&DriverBinding,
|
||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||||
@ -247,7 +249,7 @@ DpGetNameFromHandle (
|
|||||||
Status = gBS->HandleProtocol (
|
Status = gBS->HandleProtocol (
|
||||||
DriverBinding->ImageHandle,
|
DriverBinding->ImageHandle,
|
||||||
&gEfiLoadedImageProtocolGuid,
|
&gEfiLoadedImageProtocolGuid,
|
||||||
(VOID **) &Image
|
(VOID **)&Image
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -267,14 +269,14 @@ DpGetNameFromHandle (
|
|||||||
Status = gBS->HandleProtocol (
|
Status = gBS->HandleProtocol (
|
||||||
Handle,
|
Handle,
|
||||||
&gEfiComponentName2ProtocolGuid,
|
&gEfiComponentName2ProtocolGuid,
|
||||||
(VOID **) &ComponentName2
|
(VOID **)&ComponentName2
|
||||||
);
|
);
|
||||||
if (!EFI_ERROR (Status)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
//
|
//
|
||||||
// Firstly use platform language setting, secondly use driver's first supported language.
|
// Firstly use platform language setting, secondly use driver's first supported language.
|
||||||
//
|
//
|
||||||
GetVariable2 (L"PlatformLang", &gEfiGlobalVariableGuid, (VOID**)&PlatformLanguage, NULL);
|
GetVariable2 (L"PlatformLang", &gEfiGlobalVariableGuid, (VOID **)&PlatformLanguage, NULL);
|
||||||
BestLanguage = GetBestLanguage(
|
BestLanguage = GetBestLanguage (
|
||||||
ComponentName2->SupportedLanguages,
|
ComponentName2->SupportedLanguages,
|
||||||
FALSE,
|
FALSE,
|
||||||
(PlatformLanguage != NULL) ? PlatformLanguage : "",
|
(PlatformLanguage != NULL) ? PlatformLanguage : "",
|
||||||
@ -299,7 +301,7 @@ DpGetNameFromHandle (
|
|||||||
Status = gBS->HandleProtocol (
|
Status = gBS->HandleProtocol (
|
||||||
Handle,
|
Handle,
|
||||||
&gEfiLoadedImageDevicePathProtocolGuid,
|
&gEfiLoadedImageDevicePathProtocolGuid,
|
||||||
(VOID **) &LoadedImageDevicePath
|
(VOID **)&LoadedImageDevicePath
|
||||||
);
|
);
|
||||||
if (!EFI_ERROR (Status) && (LoadedImageDevicePath != NULL)) {
|
if (!EFI_ERROR (Status) && (LoadedImageDevicePath != NULL)) {
|
||||||
DevicePath = LoadedImageDevicePath;
|
DevicePath = LoadedImageDevicePath;
|
||||||
@ -313,10 +315,11 @@ DpGetNameFromHandle (
|
|||||||
//
|
//
|
||||||
NameGuid = NULL;
|
NameGuid = NULL;
|
||||||
while (!IsDevicePathEndType (DevicePath)) {
|
while (!IsDevicePathEndType (DevicePath)) {
|
||||||
NameGuid = EfiGetNameGuidFromFwVolDevicePathNode ((MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *) DevicePath);
|
NameGuid = EfiGetNameGuidFromFwVolDevicePathNode ((MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *)DevicePath);
|
||||||
if (NameGuid != NULL) {
|
if (NameGuid != NULL) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
DevicePath = NextDevicePathNode (DevicePath);
|
DevicePath = NextDevicePathNode (DevicePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -326,13 +329,13 @@ DpGetNameFromHandle (
|
|||||||
//
|
//
|
||||||
NameString = NULL;
|
NameString = NULL;
|
||||||
StringSize = 0;
|
StringSize = 0;
|
||||||
Status = GetSectionFromAnyFv (
|
Status = GetSectionFromAnyFv (
|
||||||
NameGuid,
|
NameGuid,
|
||||||
EFI_SECTION_USER_INTERFACE,
|
EFI_SECTION_USER_INTERFACE,
|
||||||
0,
|
0,
|
||||||
(VOID **) &NameString,
|
(VOID **)&NameString,
|
||||||
&StringSize
|
&StringSize
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!EFI_ERROR (Status)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
//
|
//
|
||||||
@ -347,6 +350,7 @@ DpGetNameFromHandle (
|
|||||||
//
|
//
|
||||||
UnicodeSPrint (mGaugeString, sizeof (mGaugeString), L"%g", NameGuid);
|
UnicodeSPrint (mGaugeString, sizeof (mGaugeString), L"%g", NameGuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
//
|
//
|
||||||
@ -386,7 +390,7 @@ DpGetNameFromHandle (
|
|||||||
**/
|
**/
|
||||||
UINT64
|
UINT64
|
||||||
DurationInMicroSeconds (
|
DurationInMicroSeconds (
|
||||||
IN UINT64 Duration
|
IN UINT64 Duration
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return DivU64x32 (Duration, 1000);
|
return DivU64x32 (Duration, 1000);
|
||||||
@ -406,17 +410,18 @@ DurationInMicroSeconds (
|
|||||||
@retval >=0 Return value is the index into CumData where Token is found.
|
@retval >=0 Return value is the index into CumData where Token is found.
|
||||||
**/
|
**/
|
||||||
INTN
|
INTN
|
||||||
GetCumulativeItem(
|
GetCumulativeItem (
|
||||||
IN MEASUREMENT_RECORD *Measurement
|
IN MEASUREMENT_RECORD *Measurement
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
INTN Index;
|
INTN Index;
|
||||||
|
|
||||||
for( Index = 0; Index < (INTN)NumCum; ++Index) {
|
for ( Index = 0; Index < (INTN)NumCum; ++Index) {
|
||||||
if (AsciiStrCmp (Measurement->Token, CumData[Index].Name) == 0) {
|
if (AsciiStrCmp (Measurement->Token, CumData[Index].Name) == 0) {
|
||||||
return Index; // Exit, we found a match
|
return Index; // Exit, we found a match
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the for loop exits, Token was not found.
|
// If the for loop exits, Token was not found.
|
||||||
return -1; // Indicate failure
|
return -1; // Indicate failure
|
||||||
}
|
}
|
||||||
|
@ -7,16 +7,16 @@
|
|||||||
#include <Guid/ExtendedFirmwarePerformance.h>
|
#include <Guid/ExtendedFirmwarePerformance.h>
|
||||||
|
|
||||||
// ASCII String literals which probably don't need translation
|
// ASCII String literals which probably don't need translation
|
||||||
CHAR8 const ALit_TimerLibError[] = "Timer library instance error!\n";
|
CHAR8 const ALit_TimerLibError[] = "Timer library instance error!\n";
|
||||||
CHAR8 const ALit_SEC[] = SEC_TOK;
|
CHAR8 const ALit_SEC[] = SEC_TOK;
|
||||||
CHAR8 const ALit_DXE[] = DXE_TOK;
|
CHAR8 const ALit_DXE[] = DXE_TOK;
|
||||||
CHAR8 const ALit_PEI[] = PEI_TOK;
|
CHAR8 const ALit_PEI[] = PEI_TOK;
|
||||||
CHAR8 const ALit_BDS[] = BDS_TOK;
|
CHAR8 const ALit_BDS[] = BDS_TOK;
|
||||||
CHAR8 const ALit_START_IMAGE[] = START_IMAGE_TOK;
|
CHAR8 const ALit_START_IMAGE[] = START_IMAGE_TOK;
|
||||||
CHAR8 const ALit_LOAD_IMAGE[] = LOAD_IMAGE_TOK;
|
CHAR8 const ALit_LOAD_IMAGE[] = LOAD_IMAGE_TOK;
|
||||||
CHAR8 const ALit_DB_START[] = DRIVERBINDING_START_TOK;
|
CHAR8 const ALit_DB_START[] = DRIVERBINDING_START_TOK;
|
||||||
CHAR8 const ALit_DB_SUPPORT[] = DRIVERBINDING_SUPPORT_TOK;
|
CHAR8 const ALit_DB_SUPPORT[] = DRIVERBINDING_SUPPORT_TOK;
|
||||||
CHAR8 const ALit_DB_STOP[] = DRIVERBINDING_STOP_TOK;
|
CHAR8 const ALit_DB_STOP[] = DRIVERBINDING_STOP_TOK;
|
||||||
|
|
||||||
CHAR8 const ALit_BdsTO[] = "BdsTimeOut";
|
CHAR8 const ALit_BdsTO[] = "BdsTimeOut";
|
||||||
CHAR8 const ALit_PEIM[] = "PEIM";
|
CHAR8 const ALit_PEIM[] = "PEIM";
|
||||||
|
@ -4,23 +4,24 @@
|
|||||||
Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
|
Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>
|
||||||
SPDX-License-Identifier: BSD-2-Clause-Patent
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#ifndef _LITERALS_H_
|
#ifndef _LITERALS_H_
|
||||||
#define _LITERALS_H_
|
#define _LITERALS_H_
|
||||||
|
|
||||||
// ASCII String literals which probably don't need translation
|
// ASCII String literals which probably don't need translation
|
||||||
extern CHAR8 const ALit_TimerLibError[];
|
extern CHAR8 const ALit_TimerLibError[];
|
||||||
extern CHAR8 const ALit_SEC[];
|
extern CHAR8 const ALit_SEC[];
|
||||||
extern CHAR8 const ALit_DXE[];
|
extern CHAR8 const ALit_DXE[];
|
||||||
extern CHAR8 const ALit_SHELL[];
|
extern CHAR8 const ALit_SHELL[];
|
||||||
extern CHAR8 const ALit_PEI[];
|
extern CHAR8 const ALit_PEI[];
|
||||||
extern CHAR8 const ALit_BDS[];
|
extern CHAR8 const ALit_BDS[];
|
||||||
extern CHAR8 const ALit_PEIM[];
|
extern CHAR8 const ALit_PEIM[];
|
||||||
extern CHAR8 const ALit_START_IMAGE[];
|
extern CHAR8 const ALit_START_IMAGE[];
|
||||||
extern CHAR8 const ALit_LOAD_IMAGE[];
|
extern CHAR8 const ALit_LOAD_IMAGE[];
|
||||||
extern CHAR8 const ALit_DB_START[];
|
extern CHAR8 const ALit_DB_START[];
|
||||||
extern CHAR8 const ALit_DB_SUPPORT[];
|
extern CHAR8 const ALit_DB_SUPPORT[];
|
||||||
extern CHAR8 const ALit_DB_STOP[];
|
extern CHAR8 const ALit_DB_STOP[];
|
||||||
extern CHAR8 const ALit_BdsTO[];
|
extern CHAR8 const ALit_BdsTO[];
|
||||||
extern CHAR8 const ALit_PEIM[];
|
extern CHAR8 const ALit_PEIM[];
|
||||||
|
|
||||||
#endif // _LITERALS_H_
|
#endif // _LITERALS_H_
|
||||||
|
@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
#include "Http.h"
|
#include "Http.h"
|
||||||
|
|
||||||
#define IP4_CONFIG2_INTERFACE_INFO_NAME_LENGTH 32
|
#define IP4_CONFIG2_INTERFACE_INFO_NAME_LENGTH 32
|
||||||
|
|
||||||
//
|
//
|
||||||
// Constant strings and definitions related to the message
|
// Constant strings and definitions related to the message
|
||||||
@ -37,17 +37,17 @@
|
|||||||
//
|
//
|
||||||
// Buffer size. Note that larger buffer does not mean better speed.
|
// Buffer size. Note that larger buffer does not mean better speed.
|
||||||
//
|
//
|
||||||
#define DEFAULT_BUF_SIZE SIZE_32KB
|
#define DEFAULT_BUF_SIZE SIZE_32KB
|
||||||
#define MAX_BUF_SIZE SIZE_4MB
|
#define MAX_BUF_SIZE SIZE_4MB
|
||||||
|
|
||||||
#define MIN_PARAM_COUNT 2
|
#define MIN_PARAM_COUNT 2
|
||||||
#define MAX_PARAM_COUNT 4
|
#define MAX_PARAM_COUNT 4
|
||||||
#define NEED_REDIRECTION(Code) \
|
#define NEED_REDIRECTION(Code) \
|
||||||
(((Code >= HTTP_STATUS_300_MULTIPLE_CHOICES) \
|
(((Code >= HTTP_STATUS_300_MULTIPLE_CHOICES) \
|
||||||
&& (Code <= HTTP_STATUS_307_TEMPORARY_REDIRECT)) \
|
&& (Code <= HTTP_STATUS_307_TEMPORARY_REDIRECT)) \
|
||||||
|| (Code == HTTP_STATUS_308_PERMANENT_REDIRECT))
|
|| (Code == HTTP_STATUS_308_PERMANENT_REDIRECT))
|
||||||
|
|
||||||
#define CLOSE_HTTP_HANDLE(ControllerHandle,HttpChildHandle) \
|
#define CLOSE_HTTP_HANDLE(ControllerHandle, HttpChildHandle) \
|
||||||
do { \
|
do { \
|
||||||
if (HttpChildHandle) { \
|
if (HttpChildHandle) { \
|
||||||
CloseProtocolAndDestroyServiceChild ( \
|
CloseProtocolAndDestroyServiceChild ( \
|
||||||
@ -69,13 +69,13 @@ typedef enum {
|
|||||||
|
|
||||||
#define USER_AGENT_HDR "Mozilla/5.0 (EDK2; Linux) Gecko/20100101 Firefox/79.0"
|
#define USER_AGENT_HDR "Mozilla/5.0 (EDK2; Linux) Gecko/20100101 Firefox/79.0"
|
||||||
|
|
||||||
#define TIMER_MAX_TIMEOUT_S 10
|
#define TIMER_MAX_TIMEOUT_S 10
|
||||||
|
|
||||||
//
|
//
|
||||||
// File name to use when Uri ends with "/".
|
// File name to use when Uri ends with "/".
|
||||||
//
|
//
|
||||||
#define DEFAULT_HTML_FILE L"index.html"
|
#define DEFAULT_HTML_FILE L"index.html"
|
||||||
#define DEFAULT_HTTP_PROTO L"http"
|
#define DEFAULT_HTTP_PROTO L"http"
|
||||||
|
|
||||||
//
|
//
|
||||||
// String to delete the HTTP progress message to be able to update it :
|
// String to delete the HTTP progress message to be able to update it :
|
||||||
@ -85,20 +85,20 @@ typedef enum {
|
|||||||
L"\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\
|
L"\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\
|
||||||
\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"
|
\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"
|
||||||
|
|
||||||
#define HTTP_KB L"\b\b\b\b\b\b\b\b\b\b"
|
#define HTTP_KB L"\b\b\b\b\b\b\b\b\b\b"
|
||||||
//
|
//
|
||||||
// Frame for the progression slider.
|
// Frame for the progression slider.
|
||||||
//
|
//
|
||||||
#define HTTP_PROGR_FRAME L"[ ]"
|
#define HTTP_PROGR_FRAME L"[ ]"
|
||||||
|
|
||||||
//
|
//
|
||||||
// Improve readability by using these macros.
|
// Improve readability by using these macros.
|
||||||
//
|
//
|
||||||
#define PRINT_HII(token,...) \
|
#define PRINT_HII(token, ...) \
|
||||||
ShellPrintHiiEx (\
|
ShellPrintHiiEx (\
|
||||||
-1, -1, NULL, token, mHttpHiiHandle, __VA_ARGS__)
|
-1, -1, NULL, token, mHttpHiiHandle, __VA_ARGS__)
|
||||||
|
|
||||||
#define PRINT_HII_APP(token,value) \
|
#define PRINT_HII_APP(token, value) \
|
||||||
PRINT_HII (token, HTTP_APP_NAME, value)
|
PRINT_HII (token, HTTP_APP_NAME, value)
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -109,19 +109,19 @@ typedef enum {
|
|||||||
//
|
//
|
||||||
// Define EPOCH (1970-JANUARY-01) in the Julian Date representation.
|
// Define EPOCH (1970-JANUARY-01) in the Julian Date representation.
|
||||||
//
|
//
|
||||||
#define EPOCH_JULIAN_DATE 2440588
|
#define EPOCH_JULIAN_DATE 2440588
|
||||||
|
|
||||||
//
|
//
|
||||||
// Seconds per unit.
|
// Seconds per unit.
|
||||||
//
|
//
|
||||||
#define SEC_PER_MIN ((UINTN) 60)
|
#define SEC_PER_MIN ((UINTN) 60)
|
||||||
#define SEC_PER_HOUR ((UINTN) 3600)
|
#define SEC_PER_HOUR ((UINTN) 3600)
|
||||||
#define SEC_PER_DAY ((UINTN) 86400)
|
#define SEC_PER_DAY ((UINTN) 86400)
|
||||||
|
|
||||||
//
|
//
|
||||||
// String descriptions for server errors.
|
// String descriptions for server errors.
|
||||||
//
|
//
|
||||||
STATIC CONST CHAR16 *ErrStatusDesc[] =
|
STATIC CONST CHAR16 *ErrStatusDesc[] =
|
||||||
{
|
{
|
||||||
L"400 Bad Request",
|
L"400 Bad Request",
|
||||||
L"401 Unauthorized",
|
L"401 Unauthorized",
|
||||||
@ -149,32 +149,32 @@ STATIC CONST CHAR16 *ErrStatusDesc[] =
|
|||||||
L"505 HTTP version not supported"
|
L"505 HTTP version not supported"
|
||||||
};
|
};
|
||||||
|
|
||||||
STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
|
STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
|
||||||
{L"-i", TypeValue},
|
{ L"-i", TypeValue },
|
||||||
{L"-k", TypeFlag},
|
{ L"-k", TypeFlag },
|
||||||
{L"-l", TypeValue},
|
{ L"-l", TypeValue },
|
||||||
{L"-m", TypeFlag},
|
{ L"-m", TypeFlag },
|
||||||
{L"-s", TypeValue},
|
{ L"-s", TypeValue },
|
||||||
{L"-t", TypeValue},
|
{ L"-t", TypeValue },
|
||||||
{NULL , TypeMax}
|
{ NULL, TypeMax }
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
// Local File Handle.
|
// Local File Handle.
|
||||||
//
|
//
|
||||||
STATIC SHELL_FILE_HANDLE mFileHandle = NULL;
|
STATIC SHELL_FILE_HANDLE mFileHandle = NULL;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Path of the local file, Unicode encoded.
|
// Path of the local file, Unicode encoded.
|
||||||
//
|
//
|
||||||
STATIC CONST CHAR16 *mLocalFilePath;
|
STATIC CONST CHAR16 *mLocalFilePath;
|
||||||
|
|
||||||
STATIC BOOLEAN gRequestCallbackComplete = FALSE;
|
STATIC BOOLEAN gRequestCallbackComplete = FALSE;
|
||||||
STATIC BOOLEAN gResponseCallbackComplete = FALSE;
|
STATIC BOOLEAN gResponseCallbackComplete = FALSE;
|
||||||
|
|
||||||
STATIC BOOLEAN gHttpError;
|
STATIC BOOLEAN gHttpError;
|
||||||
|
|
||||||
EFI_HII_HANDLE mHttpHiiHandle;
|
EFI_HII_HANDLE mHttpHiiHandle;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Functions declarations.
|
// Functions declarations.
|
||||||
@ -286,9 +286,9 @@ CloseProtocolAndDestroyServiceChild (
|
|||||||
STATIC
|
STATIC
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
DownloadFile (
|
DownloadFile (
|
||||||
IN HTTP_DOWNLOAD_CONTEXT *Context,
|
IN HTTP_DOWNLOAD_CONTEXT *Context,
|
||||||
IN EFI_HANDLE ControllerHandle,
|
IN EFI_HANDLE ControllerHandle,
|
||||||
IN CHAR16 *NicName
|
IN CHAR16 *NicName
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -302,11 +302,11 @@ DownloadFile (
|
|||||||
STATIC
|
STATIC
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
TrimSpaces (
|
TrimSpaces (
|
||||||
IN CHAR16 *String
|
IN CHAR16 *String
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
CHAR16 *Str;
|
CHAR16 *Str;
|
||||||
UINTN Len;
|
UINTN Len;
|
||||||
|
|
||||||
ASSERT (String != NULL);
|
ASSERT (String != NULL);
|
||||||
|
|
||||||
@ -328,7 +328,7 @@ TrimSpaces (
|
|||||||
//
|
//
|
||||||
do {
|
do {
|
||||||
Len = StrLen (Str);
|
Len = StrLen (Str);
|
||||||
if (!Len || (Str[Len - 1] != L' ' && Str[Len - 1] != '\t')) {
|
if (!Len || ((Str[Len - 1] != L' ') && (Str[Len - 1] != '\t'))) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -355,8 +355,8 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
RequestCallback (
|
RequestCallback (
|
||||||
IN EFI_EVENT Event,
|
IN EFI_EVENT Event,
|
||||||
IN VOID *Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
gRequestCallbackComplete = TRUE;
|
gRequestCallbackComplete = TRUE;
|
||||||
@ -371,8 +371,8 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ResponseCallback (
|
ResponseCallback (
|
||||||
IN EFI_EVENT Event,
|
IN EFI_EVENT Event,
|
||||||
IN VOID *Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
gResponseCallbackComplete = TRUE;
|
gResponseCallbackComplete = TRUE;
|
||||||
@ -396,19 +396,19 @@ EfiGetEpochDays (
|
|||||||
IN EFI_TIME *Time
|
IN EFI_TIME *Time
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINTN a;
|
UINTN a;
|
||||||
UINTN y;
|
UINTN y;
|
||||||
UINTN m;
|
UINTN m;
|
||||||
//
|
//
|
||||||
// Absolute Julian Date representation of the supplied Time.
|
// Absolute Julian Date representation of the supplied Time.
|
||||||
//
|
//
|
||||||
UINTN JulianDate;
|
UINTN JulianDate;
|
||||||
//
|
//
|
||||||
// Number of days elapsed since EPOCH_JULIAN_DAY.
|
// Number of days elapsed since EPOCH_JULIAN_DAY.
|
||||||
//
|
//
|
||||||
UINTN EpochDays;
|
UINTN EpochDays;
|
||||||
|
|
||||||
a = (14 - Time->Month) / 12 ;
|
a = (14 - Time->Month) / 12;
|
||||||
y = Time->Year + 4800 - a;
|
y = Time->Year + 4800 - a;
|
||||||
m = Time->Month + (12 * a) - 3;
|
m = Time->Month + (12 * a) - 3;
|
||||||
|
|
||||||
@ -437,8 +437,8 @@ EfiTimeToEpoch (
|
|||||||
//
|
//
|
||||||
// Number of days elapsed since EPOCH_JULIAN_DAY.
|
// Number of days elapsed since EPOCH_JULIAN_DAY.
|
||||||
//
|
//
|
||||||
UINTN EpochDays;
|
UINTN EpochDays;
|
||||||
UINTN EpochSeconds;
|
UINTN EpochSeconds;
|
||||||
|
|
||||||
EpochDays = EfiGetEpochDays (Time);
|
EpochDays = EfiGetEpochDays (Time);
|
||||||
|
|
||||||
@ -471,32 +471,32 @@ RunHttp (
|
|||||||
IN EFI_SYSTEM_TABLE *SystemTable
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
LIST_ENTRY *CheckPackage;
|
LIST_ENTRY *CheckPackage;
|
||||||
UINTN ParamCount;
|
UINTN ParamCount;
|
||||||
UINTN HandleCount;
|
UINTN HandleCount;
|
||||||
UINTN NicNumber;
|
UINTN NicNumber;
|
||||||
UINTN InitialSize;
|
UINTN InitialSize;
|
||||||
UINTN ParamOffset;
|
UINTN ParamOffset;
|
||||||
UINTN StartSize;
|
UINTN StartSize;
|
||||||
CHAR16 *ProblemParam;
|
CHAR16 *ProblemParam;
|
||||||
CHAR16 NicName[IP4_CONFIG2_INTERFACE_INFO_NAME_LENGTH];
|
CHAR16 NicName[IP4_CONFIG2_INTERFACE_INFO_NAME_LENGTH];
|
||||||
CHAR16 *Walker1;
|
CHAR16 *Walker1;
|
||||||
CHAR16 *VStr;
|
CHAR16 *VStr;
|
||||||
CONST CHAR16 *UserNicName;
|
CONST CHAR16 *UserNicName;
|
||||||
CONST CHAR16 *ValueStr;
|
CONST CHAR16 *ValueStr;
|
||||||
CONST CHAR16 *RemoteFilePath;
|
CONST CHAR16 *RemoteFilePath;
|
||||||
CONST CHAR16 *Walker;
|
CONST CHAR16 *Walker;
|
||||||
EFI_HTTPv4_ACCESS_POINT IPv4Node;
|
EFI_HTTPv4_ACCESS_POINT IPv4Node;
|
||||||
EFI_HANDLE *Handles;
|
EFI_HANDLE *Handles;
|
||||||
EFI_HANDLE ControllerHandle;
|
EFI_HANDLE ControllerHandle;
|
||||||
HTTP_DOWNLOAD_CONTEXT Context;
|
HTTP_DOWNLOAD_CONTEXT Context;
|
||||||
BOOLEAN NicFound;
|
BOOLEAN NicFound;
|
||||||
|
|
||||||
ProblemParam = NULL;
|
ProblemParam = NULL;
|
||||||
RemoteFilePath = NULL;
|
RemoteFilePath = NULL;
|
||||||
NicFound = FALSE;
|
NicFound = FALSE;
|
||||||
Handles = NULL;
|
Handles = NULL;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Initialize the Shell library (we must be in non-auto-init...).
|
// Initialize the Shell library (we must be in non-auto-init...).
|
||||||
@ -522,8 +522,8 @@ RunHttp (
|
|||||||
TRUE
|
TRUE
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
if ((Status == EFI_VOLUME_CORRUPTED)
|
if ( (Status == EFI_VOLUME_CORRUPTED)
|
||||||
&& (ProblemParam != NULL))
|
&& (ProblemParam != NULL))
|
||||||
{
|
{
|
||||||
PRINT_HII_APP (STRING_TOKEN (STR_GEN_PROBLEM), ProblemParam);
|
PRINT_HII_APP (STRING_TOKEN (STR_GEN_PROBLEM), ProblemParam);
|
||||||
SHELL_FREE_NON_NULL (ProblemParam);
|
SHELL_FREE_NON_NULL (ProblemParam);
|
||||||
@ -554,7 +554,7 @@ RunHttp (
|
|||||||
ZeroMem (&IPv4Node, sizeof (IPv4Node));
|
ZeroMem (&IPv4Node, sizeof (IPv4Node));
|
||||||
IPv4Node.UseDefaultAddress = TRUE;
|
IPv4Node.UseDefaultAddress = TRUE;
|
||||||
|
|
||||||
Context.HttpConfigData.HttpVersion = HttpVersion11;
|
Context.HttpConfigData.HttpVersion = HttpVersion11;
|
||||||
Context.HttpConfigData.AccessPoint.IPv4Node = &IPv4Node;
|
Context.HttpConfigData.AccessPoint.IPv4Node = &IPv4Node;
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -592,7 +592,7 @@ RunHttp (
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (*Walker1 == L'/') {
|
if (*Walker1 == L'/') {
|
||||||
ParamOffset = 1;
|
ParamOffset = 1;
|
||||||
RemoteFilePath = Walker1;
|
RemoteFilePath = Walker1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -629,7 +629,8 @@ RunHttp (
|
|||||||
Walker = RemoteFilePath + StrLen (RemoteFilePath);
|
Walker = RemoteFilePath + StrLen (RemoteFilePath);
|
||||||
while ((--Walker) >= RemoteFilePath) {
|
while ((--Walker) >= RemoteFilePath) {
|
||||||
if ((*Walker == L'\\') ||
|
if ((*Walker == L'\\') ||
|
||||||
(*Walker == L'/' ) ) {
|
(*Walker == L'/'))
|
||||||
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -659,12 +660,12 @@ RunHttp (
|
|||||||
UserNicName = ShellCommandLineGetValue (CheckPackage, L"-i");
|
UserNicName = ShellCommandLineGetValue (CheckPackage, L"-i");
|
||||||
|
|
||||||
ValueStr = ShellCommandLineGetValue (CheckPackage, L"-l");
|
ValueStr = ShellCommandLineGetValue (CheckPackage, L"-l");
|
||||||
if ((ValueStr != NULL)
|
if ( (ValueStr != NULL)
|
||||||
&& (!StringToUint16 (
|
&& (!StringToUint16 (
|
||||||
ValueStr,
|
ValueStr,
|
||||||
&Context.HttpConfigData.AccessPoint.IPv4Node->LocalPort
|
&Context.HttpConfigData.AccessPoint.IPv4Node->LocalPort
|
||||||
)
|
)
|
||||||
))
|
))
|
||||||
{
|
{
|
||||||
goto Error;
|
goto Error;
|
||||||
}
|
}
|
||||||
@ -674,7 +675,7 @@ RunHttp (
|
|||||||
ValueStr = ShellCommandLineGetValue (CheckPackage, L"-s");
|
ValueStr = ShellCommandLineGetValue (CheckPackage, L"-s");
|
||||||
if (ValueStr != NULL) {
|
if (ValueStr != NULL) {
|
||||||
Context.BufferSize = ShellStrToUintn (ValueStr);
|
Context.BufferSize = ShellStrToUintn (ValueStr);
|
||||||
if (!Context.BufferSize || Context.BufferSize > MAX_BUF_SIZE) {
|
if (!Context.BufferSize || (Context.BufferSize > MAX_BUF_SIZE)) {
|
||||||
PRINT_HII_APP (STRING_TOKEN (STR_GEN_PARAM_INV), ValueStr);
|
PRINT_HII_APP (STRING_TOKEN (STR_GEN_PARAM_INV), ValueStr);
|
||||||
goto Error;
|
goto Error;
|
||||||
}
|
}
|
||||||
@ -756,10 +757,10 @@ RunHttp (
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (gHttpError) {
|
if (gHttpError) {
|
||||||
//
|
//
|
||||||
// This is not related to connection, so no need to repeat with
|
// This is not related to connection, so no need to repeat with
|
||||||
// another interface.
|
// another interface.
|
||||||
//
|
//
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -841,7 +842,7 @@ GetNicName (
|
|||||||
&gEfiManagedNetworkServiceBindingProtocolGuid,
|
&gEfiManagedNetworkServiceBindingProtocolGuid,
|
||||||
&gEfiManagedNetworkProtocolGuid,
|
&gEfiManagedNetworkProtocolGuid,
|
||||||
&MnpHandle,
|
&MnpHandle,
|
||||||
(VOID**)&Mnp
|
(VOID **)&Mnp
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
goto Error;
|
goto Error;
|
||||||
@ -907,12 +908,12 @@ CreateServiceChildAndOpenProtocol (
|
|||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
*ChildHandle = NULL;
|
*ChildHandle = NULL;
|
||||||
Status = NetLibCreateServiceChild (
|
Status = NetLibCreateServiceChild (
|
||||||
ControllerHandle,
|
ControllerHandle,
|
||||||
gImageHandle,
|
gImageHandle,
|
||||||
ServiceBindingProtocolGuid,
|
ServiceBindingProtocolGuid,
|
||||||
ChildHandle
|
ChildHandle
|
||||||
);
|
);
|
||||||
if (!EFI_ERROR (Status)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
Status = gBS->OpenProtocol (
|
Status = gBS->OpenProtocol (
|
||||||
*ChildHandle,
|
*ChildHandle,
|
||||||
@ -990,8 +991,8 @@ WaitForCompletion (
|
|||||||
IN OUT BOOLEAN *CallBackComplete
|
IN OUT BOOLEAN *CallBackComplete
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_EVENT WaitEvt;
|
EFI_EVENT WaitEvt;
|
||||||
|
|
||||||
Status = EFI_SUCCESS;
|
Status = EFI_SUCCESS;
|
||||||
|
|
||||||
@ -1005,25 +1006,25 @@ WaitForCompletion (
|
|||||||
NULL,
|
NULL,
|
||||||
&WaitEvt
|
&WaitEvt
|
||||||
);
|
);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
if (!EFI_ERROR (Status)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
Status = gBS->SetTimer (
|
Status = gBS->SetTimer (
|
||||||
WaitEvt,
|
WaitEvt,
|
||||||
TimerRelative,
|
TimerRelative,
|
||||||
EFI_TIMER_PERIOD_SECONDS (TIMER_MAX_TIMEOUT_S)
|
EFI_TIMER_PERIOD_SECONDS (TIMER_MAX_TIMEOUT_S)
|
||||||
);
|
);
|
||||||
|
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
}
|
}
|
||||||
|
|
||||||
while (! *CallBackComplete
|
while ( !*CallBackComplete
|
||||||
&& (!EFI_ERROR (Status))
|
&& (!EFI_ERROR (Status))
|
||||||
&& EFI_ERROR (gBS->CheckEvent (WaitEvt)))
|
&& EFI_ERROR (gBS->CheckEvent (WaitEvt)))
|
||||||
{
|
{
|
||||||
Status = Context->Http->Poll (Context->Http);
|
Status = Context->Http->Poll (Context->Http);
|
||||||
if (!Context->ContentDownloaded
|
if ( !Context->ContentDownloaded
|
||||||
&& CallBackComplete == &gResponseCallbackComplete)
|
&& (CallBackComplete == &gResponseCallbackComplete))
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// An HTTP server may just send a response redirection header.
|
// An HTTP server may just send a response redirection header.
|
||||||
@ -1032,12 +1033,12 @@ WaitForCompletion (
|
|||||||
// Note that at this point Response may not has been populated,
|
// Note that at this point Response may not has been populated,
|
||||||
// so it needs to be checked first.
|
// so it needs to be checked first.
|
||||||
//
|
//
|
||||||
if (Context->ResponseToken.Message
|
if ( Context->ResponseToken.Message
|
||||||
&& Context->ResponseToken.Message->Data.Response
|
&& Context->ResponseToken.Message->Data.Response
|
||||||
&& (NEED_REDIRECTION (
|
&& (NEED_REDIRECTION (
|
||||||
Context->ResponseToken.Message->Data.Response->StatusCode
|
Context->ResponseToken.Message->Data.Response->StatusCode
|
||||||
)
|
)
|
||||||
))
|
))
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1079,20 +1080,20 @@ SendRequest (
|
|||||||
IN CHAR16 *DownloadUrl
|
IN CHAR16 *DownloadUrl
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_HTTP_REQUEST_DATA RequestData;
|
EFI_HTTP_REQUEST_DATA RequestData;
|
||||||
EFI_HTTP_HEADER RequestHeader[HdrMax];
|
EFI_HTTP_HEADER RequestHeader[HdrMax];
|
||||||
EFI_HTTP_MESSAGE RequestMessage;
|
EFI_HTTP_MESSAGE RequestMessage;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
CHAR16 *Host;
|
CHAR16 *Host;
|
||||||
UINTN StringSize;
|
UINTN StringSize;
|
||||||
|
|
||||||
ZeroMem (&RequestData, sizeof (RequestData));
|
ZeroMem (&RequestData, sizeof (RequestData));
|
||||||
ZeroMem (&RequestHeader, sizeof (RequestHeader));
|
ZeroMem (&RequestHeader, sizeof (RequestHeader));
|
||||||
ZeroMem (&RequestMessage, sizeof (RequestMessage));
|
ZeroMem (&RequestMessage, sizeof (RequestMessage));
|
||||||
ZeroMem (&Context->RequestToken, sizeof (Context->RequestToken));
|
ZeroMem (&Context->RequestToken, sizeof (Context->RequestToken));
|
||||||
|
|
||||||
RequestHeader[HdrHost].FieldName = "Host";
|
RequestHeader[HdrHost].FieldName = "Host";
|
||||||
RequestHeader[HdrConn].FieldName = "Connection";
|
RequestHeader[HdrConn].FieldName = "Connection";
|
||||||
RequestHeader[HdrAgent].FieldName = "User-Agent";
|
RequestHeader[HdrAgent].FieldName = "User-Agent";
|
||||||
|
|
||||||
Host = (CHAR16 *)Context->ServerAddrAndProto;
|
Host = (CHAR16 *)Context->ServerAddrAndProto;
|
||||||
@ -1113,7 +1114,7 @@ SendRequest (
|
|||||||
//
|
//
|
||||||
Host++;
|
Host++;
|
||||||
|
|
||||||
StringSize = StrLen (Host) + 1;
|
StringSize = StrLen (Host) + 1;
|
||||||
RequestHeader[HdrHost].FieldValue = AllocatePool (StringSize);
|
RequestHeader[HdrHost].FieldValue = AllocatePool (StringSize);
|
||||||
if (!RequestHeader[HdrHost].FieldValue) {
|
if (!RequestHeader[HdrHost].FieldValue) {
|
||||||
return EFI_OUT_OF_RESOURCES;
|
return EFI_OUT_OF_RESOURCES;
|
||||||
@ -1125,17 +1126,17 @@ SendRequest (
|
|||||||
StringSize
|
StringSize
|
||||||
);
|
);
|
||||||
|
|
||||||
RequestHeader[HdrConn].FieldValue = "close";
|
RequestHeader[HdrConn].FieldValue = "close";
|
||||||
RequestHeader[HdrAgent].FieldValue = USER_AGENT_HDR;
|
RequestHeader[HdrAgent].FieldValue = USER_AGENT_HDR;
|
||||||
RequestMessage.HeaderCount = HdrMax;
|
RequestMessage.HeaderCount = HdrMax;
|
||||||
|
|
||||||
RequestData.Method = HttpMethodGet;
|
RequestData.Method = HttpMethodGet;
|
||||||
RequestData.Url = DownloadUrl;
|
RequestData.Url = DownloadUrl;
|
||||||
|
|
||||||
RequestMessage.Data.Request = &RequestData;
|
RequestMessage.Data.Request = &RequestData;
|
||||||
RequestMessage.Headers = RequestHeader;
|
RequestMessage.Headers = RequestHeader;
|
||||||
RequestMessage.BodyLength = 0;
|
RequestMessage.BodyLength = 0;
|
||||||
RequestMessage.Body = NULL;
|
RequestMessage.Body = NULL;
|
||||||
Context->RequestToken.Event = NULL;
|
Context->RequestToken.Event = NULL;
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -1150,10 +1151,10 @@ SendRequest (
|
|||||||
);
|
);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
Context->RequestToken.Status = EFI_SUCCESS;
|
Context->RequestToken.Status = EFI_SUCCESS;
|
||||||
Context->RequestToken.Message = &RequestMessage;
|
Context->RequestToken.Message = &RequestMessage;
|
||||||
gRequestCallbackComplete = FALSE;
|
gRequestCallbackComplete = FALSE;
|
||||||
Status = Context->Http->Request (Context->Http, &Context->RequestToken);
|
Status = Context->Http->Request (Context->Http, &Context->RequestToken);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
goto Error;
|
goto Error;
|
||||||
}
|
}
|
||||||
@ -1193,15 +1194,15 @@ SavePortion (
|
|||||||
IN CHAR8 *Buffer
|
IN CHAR8 *Buffer
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
CHAR16 Progress[HTTP_PROGRESS_MESSAGE_SIZE];
|
CHAR16 Progress[HTTP_PROGRESS_MESSAGE_SIZE];
|
||||||
UINTN NbOfKb;
|
UINTN NbOfKb;
|
||||||
UINTN Index;
|
UINTN Index;
|
||||||
UINTN LastStep;
|
UINTN LastStep;
|
||||||
UINTN Step;
|
UINTN Step;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
LastStep = 0;
|
LastStep = 0;
|
||||||
Step = 0;
|
Step = 0;
|
||||||
|
|
||||||
ShellSetFilePosition (mFileHandle, Context->LastReportedNbOfBytes);
|
ShellSetFilePosition (mFileHandle, Context->LastReportedNbOfBytes);
|
||||||
Status = ShellWriteFile (mFileHandle, &DownloadLen, Buffer);
|
Status = ShellWriteFile (mFileHandle, &DownloadLen, Buffer);
|
||||||
@ -1219,14 +1220,14 @@ SavePortion (
|
|||||||
}
|
}
|
||||||
|
|
||||||
Context->ContentDownloaded += DownloadLen;
|
Context->ContentDownloaded += DownloadLen;
|
||||||
NbOfKb = Context->ContentDownloaded >> 10;
|
NbOfKb = Context->ContentDownloaded >> 10;
|
||||||
|
|
||||||
Progress[0] = L'\0';
|
Progress[0] = L'\0';
|
||||||
if (Context->ContentLength) {
|
if (Context->ContentLength) {
|
||||||
LastStep = (Context->LastReportedNbOfBytes * HTTP_PROGRESS_SLIDER_STEPS) /
|
LastStep = (Context->LastReportedNbOfBytes * HTTP_PROGRESS_SLIDER_STEPS) /
|
||||||
Context->ContentLength;
|
Context->ContentLength;
|
||||||
Step = (Context->ContentDownloaded * HTTP_PROGRESS_SLIDER_STEPS) /
|
Step = (Context->ContentDownloaded * HTTP_PROGRESS_SLIDER_STEPS) /
|
||||||
Context->ContentLength;
|
Context->ContentLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
Context->LastReportedNbOfBytes = Context->ContentDownloaded;
|
Context->LastReportedNbOfBytes = Context->ContentDownloaded;
|
||||||
@ -1265,7 +1266,6 @@ SavePortion (
|
|||||||
NbOfKb
|
NbOfKb
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
ShellPrintEx (-1, -1, L"%s", Progress);
|
ShellPrintEx (-1, -1, L"%s", Progress);
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
@ -1286,29 +1286,29 @@ SavePortion (
|
|||||||
STATIC
|
STATIC
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
SetHostURI (
|
SetHostURI (
|
||||||
IN CHAR8 *Location,
|
IN CHAR8 *Location,
|
||||||
IN HTTP_DOWNLOAD_CONTEXT *Context,
|
IN HTTP_DOWNLOAD_CONTEXT *Context,
|
||||||
IN CHAR16 *DownloadUrl
|
IN CHAR16 *DownloadUrl
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
UINTN StringSize;
|
UINTN StringSize;
|
||||||
UINTN FirstStep;
|
UINTN FirstStep;
|
||||||
UINTN Idx;
|
UINTN Idx;
|
||||||
UINTN Step;
|
UINTN Step;
|
||||||
CHAR8 *Walker;
|
CHAR8 *Walker;
|
||||||
CHAR16 *Temp;
|
CHAR16 *Temp;
|
||||||
CHAR8 *Tmp;
|
CHAR8 *Tmp;
|
||||||
CHAR16 *Url;
|
CHAR16 *Url;
|
||||||
BOOLEAN IsAbEmptyUrl;
|
BOOLEAN IsAbEmptyUrl;
|
||||||
|
|
||||||
Tmp = NULL;
|
Tmp = NULL;
|
||||||
Url = NULL;
|
Url = NULL;
|
||||||
IsAbEmptyUrl = FALSE;
|
IsAbEmptyUrl = FALSE;
|
||||||
FirstStep = 0;
|
FirstStep = 0;
|
||||||
|
|
||||||
StringSize = (AsciiStrSize (Location) * sizeof (CHAR16));
|
StringSize = (AsciiStrSize (Location) * sizeof (CHAR16));
|
||||||
Url = AllocateZeroPool (StringSize);
|
Url = AllocateZeroPool (StringSize);
|
||||||
if (!Url) {
|
if (!Url) {
|
||||||
return EFI_OUT_OF_RESOURCES;
|
return EFI_OUT_OF_RESOURCES;
|
||||||
}
|
}
|
||||||
@ -1320,7 +1320,7 @@ SetHostURI (
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
goto Error;
|
goto Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -1347,11 +1347,11 @@ SetHostURI (
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (AsciiStrStr (Location, "://") || IsAbEmptyUrl) {
|
if (AsciiStrStr (Location, "://") || IsAbEmptyUrl) {
|
||||||
Idx = 0;
|
Idx = 0;
|
||||||
Walker = Location;
|
Walker = Location;
|
||||||
|
|
||||||
for (Step = FirstStep; Step < 2; Step++) {
|
for (Step = FirstStep; Step < 2; Step++) {
|
||||||
for (; *Walker != '/' && *Walker != '\0'; Walker++) {
|
for ( ; *Walker != '/' && *Walker != '\0'; Walker++) {
|
||||||
Idx++;
|
Idx++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1359,7 +1359,7 @@ SetHostURI (
|
|||||||
//
|
//
|
||||||
// Skip "//"
|
// Skip "//"
|
||||||
//
|
//
|
||||||
Idx += 2;
|
Idx += 2;
|
||||||
Walker += 2;
|
Walker += 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1375,7 +1375,7 @@ SetHostURI (
|
|||||||
//
|
//
|
||||||
// Location now points to Uri
|
// Location now points to Uri
|
||||||
//
|
//
|
||||||
Location += Idx;
|
Location += Idx;
|
||||||
StringSize = (Idx + 1) * sizeof (CHAR16);
|
StringSize = (Idx + 1) * sizeof (CHAR16);
|
||||||
|
|
||||||
SHELL_FREE_NON_NULL (Context->ServerAddrAndProto);
|
SHELL_FREE_NON_NULL (Context->ServerAddrAndProto);
|
||||||
@ -1421,7 +1421,7 @@ SetHostURI (
|
|||||||
|
|
||||||
SHELL_FREE_NON_NULL (Context->Uri);
|
SHELL_FREE_NON_NULL (Context->Uri);
|
||||||
|
|
||||||
StringSize = AsciiStrSize (Location) * sizeof (CHAR16);
|
StringSize = AsciiStrSize (Location) * sizeof (CHAR16);
|
||||||
Context->Uri = AllocateZeroPool (StringSize);
|
Context->Uri = AllocateZeroPool (StringSize);
|
||||||
if (!Context->Uri) {
|
if (!Context->Uri) {
|
||||||
Status = EFI_OUT_OF_RESOURCES;
|
Status = EFI_OUT_OF_RESOURCES;
|
||||||
@ -1460,15 +1460,15 @@ STATIC
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseMsg (
|
ParseMsg (
|
||||||
IN HTTP_BODY_PARSE_EVENT EventType,
|
IN HTTP_BODY_PARSE_EVENT EventType,
|
||||||
IN CHAR8 *Data,
|
IN CHAR8 *Data,
|
||||||
IN UINTN Length,
|
IN UINTN Length,
|
||||||
IN VOID *Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if ((Data == NULL)
|
if ( (Data == NULL)
|
||||||
|| (EventType == BodyParseEventOnComplete)
|
|| (EventType == BodyParseEventOnComplete)
|
||||||
|| (Context == NULL))
|
|| (Context == NULL))
|
||||||
{
|
{
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -1476,7 +1476,6 @@ ParseMsg (
|
|||||||
return SavePortion (Context, Length, Data);
|
return SavePortion (Context, Length, Data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Get HTTP server response and collect the whole body as a file.
|
Get HTTP server response and collect the whole body as a file.
|
||||||
Set appropriate status in Context (REQ_OK, REQ_REPEAT, REQ_ERROR).
|
Set appropriate status in Context (REQ_OK, REQ_REPEAT, REQ_ERROR).
|
||||||
@ -1498,38 +1497,38 @@ ParseMsg (
|
|||||||
STATIC
|
STATIC
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
GetResponse (
|
GetResponse (
|
||||||
IN HTTP_DOWNLOAD_CONTEXT *Context,
|
IN HTTP_DOWNLOAD_CONTEXT *Context,
|
||||||
IN CHAR16 *DownloadUrl
|
IN CHAR16 *DownloadUrl
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_HTTP_RESPONSE_DATA ResponseData;
|
EFI_HTTP_RESPONSE_DATA ResponseData;
|
||||||
EFI_HTTP_MESSAGE ResponseMessage;
|
EFI_HTTP_MESSAGE ResponseMessage;
|
||||||
EFI_HTTP_HEADER *Header;
|
EFI_HTTP_HEADER *Header;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
VOID *MsgParser;
|
VOID *MsgParser;
|
||||||
EFI_TIME StartTime;
|
EFI_TIME StartTime;
|
||||||
EFI_TIME EndTime;
|
EFI_TIME EndTime;
|
||||||
CONST CHAR16 *Desc;
|
CONST CHAR16 *Desc;
|
||||||
UINTN ElapsedSeconds;
|
UINTN ElapsedSeconds;
|
||||||
BOOLEAN IsTrunked;
|
BOOLEAN IsTrunked;
|
||||||
BOOLEAN CanMeasureTime;
|
BOOLEAN CanMeasureTime;
|
||||||
|
|
||||||
ZeroMem (&ResponseData, sizeof (ResponseData));
|
ZeroMem (&ResponseData, sizeof (ResponseData));
|
||||||
ZeroMem (&ResponseMessage, sizeof (ResponseMessage));
|
ZeroMem (&ResponseMessage, sizeof (ResponseMessage));
|
||||||
ZeroMem (&Context->ResponseToken, sizeof (Context->ResponseToken));
|
ZeroMem (&Context->ResponseToken, sizeof (Context->ResponseToken));
|
||||||
IsTrunked = FALSE;
|
IsTrunked = FALSE;
|
||||||
|
|
||||||
ResponseMessage.Body = Context->Buffer;
|
ResponseMessage.Body = Context->Buffer;
|
||||||
Context->ResponseToken.Status = EFI_SUCCESS;
|
Context->ResponseToken.Status = EFI_SUCCESS;
|
||||||
Context->ResponseToken.Message = &ResponseMessage;
|
Context->ResponseToken.Message = &ResponseMessage;
|
||||||
Context->ContentLength = 0;
|
Context->ContentLength = 0;
|
||||||
Context->Status = REQ_OK;
|
Context->Status = REQ_OK;
|
||||||
Status = EFI_SUCCESS;
|
Status = EFI_SUCCESS;
|
||||||
MsgParser = NULL;
|
MsgParser = NULL;
|
||||||
ResponseData.StatusCode = HTTP_STATUS_UNSUPPORTED_STATUS;
|
ResponseData.StatusCode = HTTP_STATUS_UNSUPPORTED_STATUS;
|
||||||
ResponseMessage.Data.Response = &ResponseData;
|
ResponseMessage.Data.Response = &ResponseData;
|
||||||
Context->ResponseToken.Event = NULL;
|
Context->ResponseToken.Event = NULL;
|
||||||
CanMeasureTime = FALSE;
|
CanMeasureTime = FALSE;
|
||||||
if (Context->Flags & DL_FLAG_TIME) {
|
if (Context->Flags & DL_FLAG_TIME) {
|
||||||
ZeroMem (&StartTime, sizeof (StartTime));
|
ZeroMem (&StartTime, sizeof (StartTime));
|
||||||
CanMeasureTime = !EFI_ERROR (gRT->GetTime (&StartTime, NULL));
|
CanMeasureTime = !EFI_ERROR (gRT->GetTime (&StartTime, NULL));
|
||||||
@ -1538,8 +1537,8 @@ GetResponse (
|
|||||||
do {
|
do {
|
||||||
SHELL_FREE_NON_NULL (ResponseMessage.Headers);
|
SHELL_FREE_NON_NULL (ResponseMessage.Headers);
|
||||||
ResponseMessage.HeaderCount = 0;
|
ResponseMessage.HeaderCount = 0;
|
||||||
gResponseCallbackComplete = FALSE;
|
gResponseCallbackComplete = FALSE;
|
||||||
ResponseMessage.BodyLength = Context->BufferSize;
|
ResponseMessage.BodyLength = Context->BufferSize;
|
||||||
|
|
||||||
if (ShellGetExecutionBreakFlag ()) {
|
if (ShellGetExecutionBreakFlag ()) {
|
||||||
Status = EFI_ABORTED;
|
Status = EFI_ABORTED;
|
||||||
@ -1642,8 +1641,8 @@ GetResponse (
|
|||||||
|
|
||||||
HttpGetEntityLength (MsgParser, &Context->ContentLength);
|
HttpGetEntityLength (MsgParser, &Context->ContentLength);
|
||||||
|
|
||||||
if (ResponseData.StatusCode >= HTTP_STATUS_400_BAD_REQUEST
|
if ( (ResponseData.StatusCode >= HTTP_STATUS_400_BAD_REQUEST)
|
||||||
&& (ResponseData.StatusCode != HTTP_STATUS_308_PERMANENT_REDIRECT))
|
&& (ResponseData.StatusCode != HTTP_STATUS_308_PERMANENT_REDIRECT))
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Server reported an error via Response code.
|
// Server reported an error via Response code.
|
||||||
@ -1665,7 +1664,7 @@ GetResponse (
|
|||||||
// This gives an RFC HTTP error.
|
// This gives an RFC HTTP error.
|
||||||
//
|
//
|
||||||
Context->Status = ShellStrToUintn (Desc);
|
Context->Status = ShellStrToUintn (Desc);
|
||||||
Status = ENCODE_ERROR (Context->Status);
|
Status = ENCODE_ERROR (Context->Status);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1680,13 +1679,13 @@ GetResponse (
|
|||||||
ResponseMessage.Body
|
ResponseMessage.Body
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} while (!HttpIsMessageComplete (MsgParser)
|
} while ( !HttpIsMessageComplete (MsgParser)
|
||||||
&& !EFI_ERROR (Status)
|
&& !EFI_ERROR (Status)
|
||||||
&& ResponseMessage.BodyLength);
|
&& ResponseMessage.BodyLength);
|
||||||
|
|
||||||
if (Context->Status != REQ_NEED_REPEAT
|
if ( (Context->Status != REQ_NEED_REPEAT)
|
||||||
&& Status == EFI_SUCCESS
|
&& (Status == EFI_SUCCESS)
|
||||||
&& CanMeasureTime)
|
&& CanMeasureTime)
|
||||||
{
|
{
|
||||||
if (!EFI_ERROR (gRT->GetTime (&EndTime, NULL))) {
|
if (!EFI_ERROR (gRT->GetTime (&EndTime, NULL))) {
|
||||||
ElapsedSeconds = EfiTimeToEpoch (&EndTime) - EfiTimeToEpoch (&StartTime);
|
ElapsedSeconds = EfiTimeToEpoch (&EndTime) - EfiTimeToEpoch (&StartTime);
|
||||||
@ -1726,22 +1725,22 @@ GetResponse (
|
|||||||
STATIC
|
STATIC
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
DownloadFile (
|
DownloadFile (
|
||||||
IN HTTP_DOWNLOAD_CONTEXT *Context,
|
IN HTTP_DOWNLOAD_CONTEXT *Context,
|
||||||
IN EFI_HANDLE ControllerHandle,
|
IN EFI_HANDLE ControllerHandle,
|
||||||
IN CHAR16 *NicName
|
IN CHAR16 *NicName
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
CHAR16 *DownloadUrl;
|
CHAR16 *DownloadUrl;
|
||||||
UINTN UrlSize;
|
UINTN UrlSize;
|
||||||
EFI_HANDLE HttpChildHandle;
|
EFI_HANDLE HttpChildHandle;
|
||||||
|
|
||||||
ASSERT (Context);
|
ASSERT (Context);
|
||||||
if (Context == NULL) {
|
if (Context == NULL) {
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
DownloadUrl = NULL;
|
DownloadUrl = NULL;
|
||||||
HttpChildHandle = NULL;
|
HttpChildHandle = NULL;
|
||||||
|
|
||||||
Context->Buffer = AllocatePool (Context->BufferSize);
|
Context->Buffer = AllocatePool (Context->BufferSize);
|
||||||
@ -1780,7 +1779,7 @@ DownloadFile (
|
|||||||
&gEfiHttpServiceBindingProtocolGuid,
|
&gEfiHttpServiceBindingProtocolGuid,
|
||||||
&gEfiHttpProtocolGuid,
|
&gEfiHttpProtocolGuid,
|
||||||
&HttpChildHandle,
|
&HttpChildHandle,
|
||||||
(VOID**)&Context->Http
|
(VOID **)&Context->Http
|
||||||
);
|
);
|
||||||
|
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
@ -1794,7 +1793,7 @@ DownloadFile (
|
|||||||
goto ON_EXIT;
|
goto ON_EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
UrlSize = 0;
|
UrlSize = 0;
|
||||||
DownloadUrl = StrnCatGrow (
|
DownloadUrl = StrnCatGrow (
|
||||||
&DownloadUrl,
|
&DownloadUrl,
|
||||||
&UrlSize,
|
&UrlSize,
|
||||||
@ -1814,7 +1813,8 @@ DownloadFile (
|
|||||||
&DownloadUrl,
|
&DownloadUrl,
|
||||||
&UrlSize,
|
&UrlSize,
|
||||||
Context->Uri,
|
Context->Uri,
|
||||||
StrLen (Context->Uri));
|
StrLen (Context->Uri)
|
||||||
|
);
|
||||||
|
|
||||||
PRINT_HII (STRING_TOKEN (STR_HTTP_DOWNLOADING), DownloadUrl);
|
PRINT_HII (STRING_TOKEN (STR_HTTP_DOWNLOADING), DownloadUrl);
|
||||||
|
|
||||||
@ -1828,7 +1828,6 @@ DownloadFile (
|
|||||||
if (Status) {
|
if (Status) {
|
||||||
goto ON_EXIT;
|
goto ON_EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
} while (Context->Status == REQ_NEED_REPEAT);
|
} while (Context->Status == REQ_NEED_REPEAT);
|
||||||
|
|
||||||
if (Context->Status) {
|
if (Context->Status) {
|
||||||
@ -1864,12 +1863,12 @@ ON_EXIT:
|
|||||||
**/
|
**/
|
||||||
EFI_HII_HANDLE
|
EFI_HII_HANDLE
|
||||||
InitializeHiiPackage (
|
InitializeHiiPackage (
|
||||||
IN EFI_HANDLE ImageHandle
|
IN EFI_HANDLE ImageHandle
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_HII_PACKAGE_LIST_HEADER *PackageList;
|
EFI_HII_PACKAGE_LIST_HEADER *PackageList;
|
||||||
EFI_HII_HANDLE HiiHandle;
|
EFI_HII_HANDLE HiiHandle;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Retrieve HII package list from ImageHandle.
|
// Retrieve HII package list from ImageHandle.
|
||||||
@ -1891,11 +1890,11 @@ InitializeHiiPackage (
|
|||||||
// Publish HII package list to HII Database.
|
// Publish HII package list to HII Database.
|
||||||
//
|
//
|
||||||
Status = gHiiDatabase->NewPackageList (
|
Status = gHiiDatabase->NewPackageList (
|
||||||
gHiiDatabase,
|
gHiiDatabase,
|
||||||
PackageList,
|
PackageList,
|
||||||
NULL,
|
NULL,
|
||||||
&HiiHandle
|
&HiiHandle
|
||||||
);
|
);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
#include <Protocol/HttpUtilities.h>
|
#include <Protocol/HttpUtilities.h>
|
||||||
#include <Protocol/ServiceBinding.h>
|
#include <Protocol/ServiceBinding.h>
|
||||||
|
|
||||||
#define HTTP_APP_NAME L"http"
|
#define HTTP_APP_NAME L"http"
|
||||||
|
|
||||||
#define REQ_OK 0
|
#define REQ_OK 0
|
||||||
#define REQ_NEED_REPEAT 1
|
#define REQ_NEED_REPEAT 1
|
||||||
@ -40,25 +40,25 @@
|
|||||||
//
|
//
|
||||||
// Download Flags.
|
// Download Flags.
|
||||||
//
|
//
|
||||||
#define DL_FLAG_TIME BIT0 // Show elapsed time.
|
#define DL_FLAG_TIME BIT0 // Show elapsed time.
|
||||||
#define DL_FLAG_KEEP_BAD BIT1 // Keep files even if download failed.
|
#define DL_FLAG_KEEP_BAD BIT1 // Keep files even if download failed.
|
||||||
|
|
||||||
extern EFI_HII_HANDLE mHttpHiiHandle;
|
extern EFI_HII_HANDLE mHttpHiiHandle;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
UINTN ContentDownloaded;
|
UINTN ContentDownloaded;
|
||||||
UINTN ContentLength;
|
UINTN ContentLength;
|
||||||
UINTN LastReportedNbOfBytes;
|
UINTN LastReportedNbOfBytes;
|
||||||
UINTN BufferSize;
|
UINTN BufferSize;
|
||||||
UINTN Status;
|
UINTN Status;
|
||||||
UINTN Flags;
|
UINTN Flags;
|
||||||
UINT8 *Buffer;
|
UINT8 *Buffer;
|
||||||
CHAR16 *ServerAddrAndProto;
|
CHAR16 *ServerAddrAndProto;
|
||||||
CHAR16 *Uri;
|
CHAR16 *Uri;
|
||||||
EFI_HTTP_TOKEN ResponseToken;
|
EFI_HTTP_TOKEN ResponseToken;
|
||||||
EFI_HTTP_TOKEN RequestToken;
|
EFI_HTTP_TOKEN RequestToken;
|
||||||
EFI_HTTP_PROTOCOL *Http;
|
EFI_HTTP_PROTOCOL *Http;
|
||||||
EFI_HTTP_CONFIG_DATA HttpConfigData;
|
EFI_HTTP_CONFIG_DATA HttpConfigData;
|
||||||
} HTTP_DOWNLOAD_CONTEXT;
|
} HTTP_DOWNLOAD_CONTEXT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -87,6 +87,7 @@ RunHttp (
|
|||||||
**/
|
**/
|
||||||
EFI_HII_HANDLE
|
EFI_HII_HANDLE
|
||||||
InitializeHiiPackage (
|
InitializeHiiPackage (
|
||||||
IN EFI_HANDLE ImageHandle
|
IN EFI_HANDLE ImageHandle
|
||||||
);
|
);
|
||||||
|
|
||||||
#endif // _HTTP_H_
|
#endif // _HTTP_H_
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
* Thus the application can use '-?' option to show help message in Shell.
|
* Thus the application can use '-?' option to show help message in Shell.
|
||||||
*/
|
*/
|
||||||
GLOBAL_REMOVE_IF_UNREFERENCED
|
GLOBAL_REMOVE_IF_UNREFERENCED
|
||||||
EFI_STRING_ID mStringHelpTokenId = STRING_TOKEN (STR_GET_HELP_HTTP);
|
EFI_STRING_ID mStringHelpTokenId = STRING_TOKEN (STR_GET_HELP_HTTP);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Entry point of Http standalone application.
|
Entry point of Http standalone application.
|
||||||
@ -35,12 +35,12 @@ EFI_STRING_ID mStringHelpTokenId = STRING_TOKEN (STR_GET_HELP_HTTP);
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
HttpAppInitialize (
|
HttpAppInitialize (
|
||||||
IN EFI_HANDLE ImageHandle,
|
IN EFI_HANDLE ImageHandle,
|
||||||
IN EFI_SYSTEM_TABLE *SystemTable
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
SHELL_STATUS ShellStatus;
|
SHELL_STATUS ShellStatus;
|
||||||
|
|
||||||
mHttpHiiHandle = InitializeHiiPackage (ImageHandle);
|
mHttpHiiHandle = InitializeHiiPackage (ImageHandle);
|
||||||
if (mHttpHiiHandle == NULL) {
|
if (mHttpHiiHandle == NULL) {
|
||||||
|
@ -28,10 +28,10 @@
|
|||||||
SHELL_STATUS
|
SHELL_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
HttpCommandHandler (
|
HttpCommandHandler (
|
||||||
IN EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This,
|
IN EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This,
|
||||||
IN EFI_SYSTEM_TABLE *SystemTable,
|
IN EFI_SYSTEM_TABLE *SystemTable,
|
||||||
IN EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters,
|
IN EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters,
|
||||||
IN EFI_SHELL_PROTOCOL *Shell
|
IN EFI_SHELL_PROTOCOL *Shell
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
gEfiShellParametersProtocol = ShellParameters;
|
gEfiShellParametersProtocol = ShellParameters;
|
||||||
@ -53,8 +53,8 @@ HttpCommandHandler (
|
|||||||
CHAR16 *
|
CHAR16 *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
HttpCommandGetHelp (
|
HttpCommandGetHelp (
|
||||||
IN EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This,
|
IN EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This,
|
||||||
IN CONST CHAR8 *Language
|
IN CONST CHAR8 *Language
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return HiiGetString (
|
return HiiGetString (
|
||||||
@ -64,7 +64,7 @@ HttpCommandGetHelp (
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL mHttpDynamicCommand = {
|
EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL mHttpDynamicCommand = {
|
||||||
HTTP_APP_NAME,
|
HTTP_APP_NAME,
|
||||||
HttpCommandHandler,
|
HttpCommandHandler,
|
||||||
HttpCommandGetHelp
|
HttpCommandGetHelp
|
||||||
@ -85,11 +85,11 @@ EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL mHttpDynamicCommand = {
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
HttpCommandInitialize (
|
HttpCommandInitialize (
|
||||||
IN EFI_HANDLE ImageHandle,
|
IN EFI_HANDLE ImageHandle,
|
||||||
IN EFI_SYSTEM_TABLE *SystemTable
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
mHttpHiiHandle = InitializeHiiPackage (ImageHandle);
|
mHttpHiiHandle = InitializeHiiPackage (ImageHandle);
|
||||||
if (mHttpHiiHandle == NULL) {
|
if (mHttpHiiHandle == NULL) {
|
||||||
@ -117,10 +117,10 @@ HttpCommandInitialize (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
HttpUnload (
|
HttpUnload (
|
||||||
IN EFI_HANDLE ImageHandle
|
IN EFI_HANDLE ImageHandle
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
Status = gBS->UninstallProtocolInterface (
|
Status = gBS->UninstallProtocolInterface (
|
||||||
ImageHandle,
|
ImageHandle,
|
||||||
|
@ -10,8 +10,8 @@
|
|||||||
|
|
||||||
#include "Tftp.h"
|
#include "Tftp.h"
|
||||||
|
|
||||||
#define IP4_CONFIG2_INTERFACE_INFO_NAME_LENGTH 32
|
#define IP4_CONFIG2_INTERFACE_INFO_NAME_LENGTH 32
|
||||||
EFI_HII_HANDLE mTftpHiiHandle;
|
EFI_HII_HANDLE mTftpHiiHandle;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Constant strings and definitions related to the message indicating the amount of
|
Constant strings and definitions related to the message indicating the amount of
|
||||||
@ -19,7 +19,7 @@ EFI_HII_HANDLE mTftpHiiHandle;
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// Frame for the progression slider
|
// Frame for the progression slider
|
||||||
STATIC CONST CHAR16 mTftpProgressFrame[] = L"[ ]";
|
STATIC CONST CHAR16 mTftpProgressFrame[] = L"[ ]";
|
||||||
|
|
||||||
// Number of steps in the progression slider
|
// Number of steps in the progression slider
|
||||||
#define TFTP_PROGRESS_SLIDER_STEPS ((sizeof (mTftpProgressFrame) / sizeof (CHAR16)) - 3)
|
#define TFTP_PROGRESS_SLIDER_STEPS ((sizeof (mTftpProgressFrame) / sizeof (CHAR16)) - 3)
|
||||||
@ -33,13 +33,13 @@ STATIC CONST CHAR16 mTftpProgressFrame[] = L"[
|
|||||||
|
|
||||||
// String to delete the TFTP progress message to be able to update it :
|
// String to delete the TFTP progress message to be able to update it :
|
||||||
// (TFTP_PROGRESS_MESSAGE_SIZE-1) '\b'
|
// (TFTP_PROGRESS_MESSAGE_SIZE-1) '\b'
|
||||||
STATIC CONST CHAR16 mTftpProgressDelete[] = L"\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b";
|
STATIC CONST CHAR16 mTftpProgressDelete[] = L"\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b";
|
||||||
|
|
||||||
// Local File Handle
|
// Local File Handle
|
||||||
SHELL_FILE_HANDLE mFileHandle;
|
SHELL_FILE_HANDLE mFileHandle;
|
||||||
|
|
||||||
// Path of the local file, Unicode encoded
|
// Path of the local file, Unicode encoded
|
||||||
CONST CHAR16 *mLocalFilePath;
|
CONST CHAR16 *mLocalFilePath;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Check and convert the UINT16 option values of the 'tftp' command
|
Check and convert the UINT16 option values of the 'tftp' command
|
||||||
@ -206,49 +206,57 @@ CheckPacket (
|
|||||||
IN EFI_MTFTP4_PACKET *Packet
|
IN EFI_MTFTP4_PACKET *Packet
|
||||||
);
|
);
|
||||||
|
|
||||||
EFI_MTFTP4_CONFIG_DATA DefaultMtftp4ConfigData = {
|
EFI_MTFTP4_CONFIG_DATA DefaultMtftp4ConfigData = {
|
||||||
TRUE, // Use default setting
|
TRUE, // Use default setting
|
||||||
{ { 0, 0, 0, 0 } }, // StationIp - Not relevant as UseDefaultSetting=TRUE
|
{
|
||||||
{ { 0, 0, 0, 0 } }, // SubnetMask - Not relevant as UseDefaultSetting=TRUE
|
{ 0, 0, 0, 0 }
|
||||||
|
}, // StationIp - Not relevant as UseDefaultSetting=TRUE
|
||||||
|
{
|
||||||
|
{ 0, 0, 0, 0 }
|
||||||
|
}, // SubnetMask - Not relevant as UseDefaultSetting=TRUE
|
||||||
0, // LocalPort - Automatically assigned port number.
|
0, // LocalPort - Automatically assigned port number.
|
||||||
{ { 0, 0, 0, 0 } }, // GatewayIp - Not relevant as UseDefaultSetting=TRUE
|
{
|
||||||
{ { 0, 0, 0, 0 } }, // ServerIp - Not known yet
|
{ 0, 0, 0, 0 }
|
||||||
|
}, // GatewayIp - Not relevant as UseDefaultSetting=TRUE
|
||||||
|
{
|
||||||
|
{ 0, 0, 0, 0 }
|
||||||
|
}, // ServerIp - Not known yet
|
||||||
69, // InitialServerPort - Standard TFTP server port
|
69, // InitialServerPort - Standard TFTP server port
|
||||||
6, // TryCount - The number of times to transmit request packets and wait for a response.
|
6, // TryCount - The number of times to transmit request packets and wait for a response.
|
||||||
4 // TimeoutValue - Retransmission timeout in seconds.
|
4 // TimeoutValue - Retransmission timeout in seconds.
|
||||||
};
|
};
|
||||||
|
|
||||||
STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
|
STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
|
||||||
{L"-i", TypeValue},
|
{ L"-i", TypeValue },
|
||||||
{L"-l", TypeValue},
|
{ L"-l", TypeValue },
|
||||||
{L"-r", TypeValue},
|
{ L"-r", TypeValue },
|
||||||
{L"-c", TypeValue},
|
{ L"-c", TypeValue },
|
||||||
{L"-t", TypeValue},
|
{ L"-t", TypeValue },
|
||||||
{L"-s", TypeValue},
|
{ L"-s", TypeValue },
|
||||||
{L"-w", TypeValue},
|
{ L"-w", TypeValue },
|
||||||
{NULL , TypeMax}
|
{ NULL, TypeMax }
|
||||||
};
|
};
|
||||||
|
|
||||||
///
|
///
|
||||||
/// The default block size (512) of tftp is defined in the RFC1350.
|
/// The default block size (512) of tftp is defined in the RFC1350.
|
||||||
///
|
///
|
||||||
#define MTFTP_DEFAULT_BLKSIZE 512
|
#define MTFTP_DEFAULT_BLKSIZE 512
|
||||||
///
|
///
|
||||||
/// The valid range of block size option is defined in the RFC2348.
|
/// The valid range of block size option is defined in the RFC2348.
|
||||||
///
|
///
|
||||||
#define MTFTP_MIN_BLKSIZE 8
|
#define MTFTP_MIN_BLKSIZE 8
|
||||||
#define MTFTP_MAX_BLKSIZE 65464
|
#define MTFTP_MAX_BLKSIZE 65464
|
||||||
///
|
///
|
||||||
/// The default windowsize (1) of tftp.
|
/// The default windowsize (1) of tftp.
|
||||||
///
|
///
|
||||||
#define MTFTP_DEFAULT_WINDOWSIZE 1
|
#define MTFTP_DEFAULT_WINDOWSIZE 1
|
||||||
///
|
///
|
||||||
/// The valid range of window size option.
|
/// The valid range of window size option.
|
||||||
/// Note that: RFC 7440 does not mention max window size value, but for the
|
/// Note that: RFC 7440 does not mention max window size value, but for the
|
||||||
/// stability reason, the value is limited to 64.
|
/// stability reason, the value is limited to 64.
|
||||||
///
|
///
|
||||||
#define MTFTP_MIN_WINDOWSIZE 1
|
#define MTFTP_MIN_WINDOWSIZE 1
|
||||||
#define MTFTP_MAX_WINDOWSIZE 64
|
#define MTFTP_MAX_WINDOWSIZE 64
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Function for 'tftp' command.
|
Function for 'tftp' command.
|
||||||
@ -319,15 +327,22 @@ RunTftp (
|
|||||||
Status = ShellCommandLineParse (ParamList, &CheckPackage, &ProblemParam, TRUE);
|
Status = ShellCommandLineParse (ParamList, &CheckPackage, &ProblemParam, TRUE);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
if ((Status == EFI_VOLUME_CORRUPTED) &&
|
if ((Status == EFI_VOLUME_CORRUPTED) &&
|
||||||
(ProblemParam != NULL) ) {
|
(ProblemParam != NULL))
|
||||||
|
{
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), mTftpHiiHandle,
|
-1,
|
||||||
L"tftp", ProblemParam
|
-1,
|
||||||
|
NULL,
|
||||||
|
STRING_TOKEN (STR_GEN_PROBLEM),
|
||||||
|
mTftpHiiHandle,
|
||||||
|
L"tftp",
|
||||||
|
ProblemParam
|
||||||
);
|
);
|
||||||
FreePool (ProblemParam);
|
FreePool (ProblemParam);
|
||||||
} else {
|
} else {
|
||||||
ASSERT (FALSE);
|
ASSERT (FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
goto Error;
|
goto Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -337,15 +352,24 @@ RunTftp (
|
|||||||
ParamCount = ShellCommandLineGetCount (CheckPackage);
|
ParamCount = ShellCommandLineGetCount (CheckPackage);
|
||||||
if (ParamCount > 4) {
|
if (ParamCount > 4) {
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY),
|
-1,
|
||||||
mTftpHiiHandle, L"tftp"
|
-1,
|
||||||
|
NULL,
|
||||||
|
STRING_TOKEN (STR_GEN_TOO_MANY),
|
||||||
|
mTftpHiiHandle,
|
||||||
|
L"tftp"
|
||||||
);
|
);
|
||||||
goto Error;
|
goto Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ParamCount < 3) {
|
if (ParamCount < 3) {
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW),
|
-1,
|
||||||
mTftpHiiHandle, L"tftp"
|
-1,
|
||||||
|
NULL,
|
||||||
|
STRING_TOKEN (STR_GEN_TOO_FEW),
|
||||||
|
mTftpHiiHandle,
|
||||||
|
L"tftp"
|
||||||
);
|
);
|
||||||
goto Error;
|
goto Error;
|
||||||
}
|
}
|
||||||
@ -356,23 +380,29 @@ RunTftp (
|
|||||||
// Check the host IPv4 address
|
// Check the host IPv4 address
|
||||||
//
|
//
|
||||||
ValueStr = ShellCommandLineGetRawValue (CheckPackage, 1);
|
ValueStr = ShellCommandLineGetRawValue (CheckPackage, 1);
|
||||||
Status = NetLibStrToIp4 (ValueStr, &Mtftp4ConfigData.ServerIp);
|
Status = NetLibStrToIp4 (ValueStr, &Mtftp4ConfigData.ServerIp);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV),
|
-1,
|
||||||
mTftpHiiHandle, L"tftp", ValueStr
|
-1,
|
||||||
);
|
NULL,
|
||||||
|
STRING_TOKEN (STR_GEN_PARAM_INV),
|
||||||
|
mTftpHiiHandle,
|
||||||
|
L"tftp",
|
||||||
|
ValueStr
|
||||||
|
);
|
||||||
goto Error;
|
goto Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
RemoteFilePath = ShellCommandLineGetRawValue (CheckPackage, 2);
|
RemoteFilePath = ShellCommandLineGetRawValue (CheckPackage, 2);
|
||||||
ASSERT(RemoteFilePath != NULL);
|
ASSERT (RemoteFilePath != NULL);
|
||||||
FilePathSize = StrLen (RemoteFilePath) + 1;
|
FilePathSize = StrLen (RemoteFilePath) + 1;
|
||||||
AsciiRemoteFilePath = AllocatePool (FilePathSize);
|
AsciiRemoteFilePath = AllocatePool (FilePathSize);
|
||||||
if (AsciiRemoteFilePath == NULL) {
|
if (AsciiRemoteFilePath == NULL) {
|
||||||
ShellStatus = SHELL_OUT_OF_RESOURCES;
|
ShellStatus = SHELL_OUT_OF_RESOURCES;
|
||||||
goto Error;
|
goto Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
UnicodeStrToAsciiStrS (RemoteFilePath, AsciiRemoteFilePath, FilePathSize);
|
UnicodeStrToAsciiStrS (RemoteFilePath, AsciiRemoteFilePath, FilePathSize);
|
||||||
|
|
||||||
if (ParamCount == 4) {
|
if (ParamCount == 4) {
|
||||||
@ -381,10 +411,12 @@ RunTftp (
|
|||||||
Walker = RemoteFilePath + StrLen (RemoteFilePath);
|
Walker = RemoteFilePath + StrLen (RemoteFilePath);
|
||||||
while ((--Walker) >= RemoteFilePath) {
|
while ((--Walker) >= RemoteFilePath) {
|
||||||
if ((*Walker == L'\\') ||
|
if ((*Walker == L'\\') ||
|
||||||
(*Walker == L'/' ) ) {
|
(*Walker == L'/'))
|
||||||
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mLocalFilePath = Walker + 1;
|
mLocalFilePath = Walker + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -423,11 +455,17 @@ RunTftp (
|
|||||||
if (!StringToUint16 (ValueStr, &Mtftp4ConfigData.TimeoutValue)) {
|
if (!StringToUint16 (ValueStr, &Mtftp4ConfigData.TimeoutValue)) {
|
||||||
goto Error;
|
goto Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Mtftp4ConfigData.TimeoutValue == 0) {
|
if (Mtftp4ConfigData.TimeoutValue == 0) {
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV),
|
-1,
|
||||||
mTftpHiiHandle, L"tftp", ValueStr
|
-1,
|
||||||
);
|
NULL,
|
||||||
|
STRING_TOKEN (STR_GEN_PARAM_INV),
|
||||||
|
mTftpHiiHandle,
|
||||||
|
L"tftp",
|
||||||
|
ValueStr
|
||||||
|
);
|
||||||
goto Error;
|
goto Error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -437,11 +475,17 @@ RunTftp (
|
|||||||
if (!StringToUint16 (ValueStr, &BlockSize)) {
|
if (!StringToUint16 (ValueStr, &BlockSize)) {
|
||||||
goto Error;
|
goto Error;
|
||||||
}
|
}
|
||||||
if (BlockSize < MTFTP_MIN_BLKSIZE || BlockSize > MTFTP_MAX_BLKSIZE) {
|
|
||||||
|
if ((BlockSize < MTFTP_MIN_BLKSIZE) || (BlockSize > MTFTP_MAX_BLKSIZE)) {
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV),
|
-1,
|
||||||
mTftpHiiHandle, L"tftp", ValueStr
|
-1,
|
||||||
);
|
NULL,
|
||||||
|
STRING_TOKEN (STR_GEN_PARAM_INV),
|
||||||
|
mTftpHiiHandle,
|
||||||
|
L"tftp",
|
||||||
|
ValueStr
|
||||||
|
);
|
||||||
goto Error;
|
goto Error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -451,11 +495,17 @@ RunTftp (
|
|||||||
if (!StringToUint16 (ValueStr, &WindowSize)) {
|
if (!StringToUint16 (ValueStr, &WindowSize)) {
|
||||||
goto Error;
|
goto Error;
|
||||||
}
|
}
|
||||||
if (WindowSize < MTFTP_MIN_WINDOWSIZE || WindowSize > MTFTP_MAX_WINDOWSIZE) {
|
|
||||||
|
if ((WindowSize < MTFTP_MIN_WINDOWSIZE) || (WindowSize > MTFTP_MAX_WINDOWSIZE)) {
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV),
|
-1,
|
||||||
mTftpHiiHandle, L"tftp", ValueStr
|
-1,
|
||||||
);
|
NULL,
|
||||||
|
STRING_TOKEN (STR_GEN_PARAM_INV),
|
||||||
|
mTftpHiiHandle,
|
||||||
|
L"tftp",
|
||||||
|
ValueStr
|
||||||
|
);
|
||||||
goto Error;
|
goto Error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -464,32 +514,41 @@ RunTftp (
|
|||||||
// Locate all MTFTP4 Service Binding protocols
|
// Locate all MTFTP4 Service Binding protocols
|
||||||
//
|
//
|
||||||
ShellStatus = SHELL_NOT_FOUND;
|
ShellStatus = SHELL_NOT_FOUND;
|
||||||
Status = gBS->LocateHandleBuffer (
|
Status = gBS->LocateHandleBuffer (
|
||||||
ByProtocol,
|
ByProtocol,
|
||||||
&gEfiManagedNetworkServiceBindingProtocolGuid,
|
&gEfiManagedNetworkServiceBindingProtocolGuid,
|
||||||
NULL,
|
NULL,
|
||||||
&HandleCount,
|
&HandleCount,
|
||||||
&Handles
|
&Handles
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status) || (HandleCount == 0)) {
|
if (EFI_ERROR (Status) || (HandleCount == 0)) {
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1, -1, NULL, STRING_TOKEN (STR_TFTP_ERR_NO_NIC),
|
-1,
|
||||||
|
-1,
|
||||||
|
NULL,
|
||||||
|
STRING_TOKEN (STR_TFTP_ERR_NO_NIC),
|
||||||
mTftpHiiHandle
|
mTftpHiiHandle
|
||||||
);
|
);
|
||||||
goto Error;
|
goto Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (NicNumber = 0;
|
for (NicNumber = 0;
|
||||||
(NicNumber < HandleCount) && (ShellStatus != SHELL_SUCCESS);
|
(NicNumber < HandleCount) && (ShellStatus != SHELL_SUCCESS);
|
||||||
NicNumber++) {
|
NicNumber++)
|
||||||
|
{
|
||||||
ControllerHandle = Handles[NicNumber];
|
ControllerHandle = Handles[NicNumber];
|
||||||
|
|
||||||
Status = GetNicName (ControllerHandle, NicNumber, NicName);
|
Status = GetNicName (ControllerHandle, NicNumber, NicName);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1, -1, NULL, STRING_TOKEN (STR_TFTP_ERR_NIC_NAME),
|
-1,
|
||||||
mTftpHiiHandle, NicNumber, Status
|
-1,
|
||||||
);
|
NULL,
|
||||||
|
STRING_TOKEN (STR_TFTP_ERR_NIC_NAME),
|
||||||
|
mTftpHiiHandle,
|
||||||
|
NicNumber,
|
||||||
|
Status
|
||||||
|
);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -497,6 +556,7 @@ RunTftp (
|
|||||||
if (StrCmp (NicName, UserNicName) != 0) {
|
if (StrCmp (NicName, UserNicName) != 0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
NicFound = TRUE;
|
NicFound = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -505,46 +565,68 @@ RunTftp (
|
|||||||
&gEfiMtftp4ServiceBindingProtocolGuid,
|
&gEfiMtftp4ServiceBindingProtocolGuid,
|
||||||
&gEfiMtftp4ProtocolGuid,
|
&gEfiMtftp4ProtocolGuid,
|
||||||
&Mtftp4ChildHandle,
|
&Mtftp4ChildHandle,
|
||||||
(VOID**)&Mtftp4
|
(VOID **)&Mtftp4
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1, -1, NULL, STRING_TOKEN (STR_TFTP_ERR_OPEN_PROTOCOL),
|
-1,
|
||||||
mTftpHiiHandle, NicName, Status
|
-1,
|
||||||
);
|
NULL,
|
||||||
|
STRING_TOKEN (STR_TFTP_ERR_OPEN_PROTOCOL),
|
||||||
|
mTftpHiiHandle,
|
||||||
|
NicName,
|
||||||
|
Status
|
||||||
|
);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = Mtftp4->Configure (Mtftp4, &Mtftp4ConfigData);
|
Status = Mtftp4->Configure (Mtftp4, &Mtftp4ConfigData);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1, -1, NULL, STRING_TOKEN (STR_TFTP_ERR_CONFIGURE),
|
-1,
|
||||||
mTftpHiiHandle, NicName, Status
|
-1,
|
||||||
);
|
NULL,
|
||||||
|
STRING_TOKEN (STR_TFTP_ERR_CONFIGURE),
|
||||||
|
mTftpHiiHandle,
|
||||||
|
NicName,
|
||||||
|
Status
|
||||||
|
);
|
||||||
goto NextHandle;
|
goto NextHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = GetFileSize (Mtftp4, AsciiRemoteFilePath, &FileSize);
|
Status = GetFileSize (Mtftp4, AsciiRemoteFilePath, &FileSize);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1, -1, NULL, STRING_TOKEN (STR_TFTP_ERR_FILE_SIZE),
|
-1,
|
||||||
mTftpHiiHandle, RemoteFilePath, NicName, Status
|
-1,
|
||||||
);
|
NULL,
|
||||||
|
STRING_TOKEN (STR_TFTP_ERR_FILE_SIZE),
|
||||||
|
mTftpHiiHandle,
|
||||||
|
RemoteFilePath,
|
||||||
|
NicName,
|
||||||
|
Status
|
||||||
|
);
|
||||||
goto NextHandle;
|
goto NextHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = DownloadFile (Mtftp4, RemoteFilePath, AsciiRemoteFilePath, FileSize, BlockSize, WindowSize);
|
Status = DownloadFile (Mtftp4, RemoteFilePath, AsciiRemoteFilePath, FileSize, BlockSize, WindowSize);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1, -1, NULL, STRING_TOKEN (STR_TFTP_ERR_DOWNLOAD),
|
-1,
|
||||||
mTftpHiiHandle, RemoteFilePath, NicName, Status
|
-1,
|
||||||
);
|
NULL,
|
||||||
|
STRING_TOKEN (STR_TFTP_ERR_DOWNLOAD),
|
||||||
|
mTftpHiiHandle,
|
||||||
|
RemoteFilePath,
|
||||||
|
NicName,
|
||||||
|
Status
|
||||||
|
);
|
||||||
goto NextHandle;
|
goto NextHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
ShellStatus = SHELL_SUCCESS;
|
ShellStatus = SHELL_SUCCESS;
|
||||||
|
|
||||||
NextHandle:
|
NextHandle:
|
||||||
|
|
||||||
CloseProtocolAndDestroyServiceChild (
|
CloseProtocolAndDestroyServiceChild (
|
||||||
ControllerHandle,
|
ControllerHandle,
|
||||||
@ -556,22 +638,27 @@ RunTftp (
|
|||||||
|
|
||||||
if ((UserNicName != NULL) && (!NicFound)) {
|
if ((UserNicName != NULL) && (!NicFound)) {
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1, -1, NULL, STRING_TOKEN (STR_TFTP_ERR_NIC_NOT_FOUND),
|
-1,
|
||||||
mTftpHiiHandle, UserNicName
|
-1,
|
||||||
);
|
NULL,
|
||||||
|
STRING_TOKEN (STR_TFTP_ERR_NIC_NOT_FOUND),
|
||||||
|
mTftpHiiHandle,
|
||||||
|
UserNicName
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Error:
|
Error:
|
||||||
|
|
||||||
ShellCommandLineFreeVarList (CheckPackage);
|
ShellCommandLineFreeVarList (CheckPackage);
|
||||||
if (AsciiRemoteFilePath != NULL) {
|
if (AsciiRemoteFilePath != NULL) {
|
||||||
FreePool (AsciiRemoteFilePath);
|
FreePool (AsciiRemoteFilePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Handles != NULL) {
|
if (Handles != NULL) {
|
||||||
FreePool (Handles);
|
FreePool (Handles);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((ShellStatus != SHELL_SUCCESS) && (EFI_ERROR(Status))) {
|
if ((ShellStatus != SHELL_SUCCESS) && (EFI_ERROR (Status))) {
|
||||||
ShellStatus = Status & ~MAX_BIT;
|
ShellStatus = Status & ~MAX_BIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -599,9 +686,14 @@ StringToUint16 (
|
|||||||
Val = ShellStrToUintn (ValueStr);
|
Val = ShellStrToUintn (ValueStr);
|
||||||
if (Val > MAX_UINT16) {
|
if (Val > MAX_UINT16) {
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV),
|
-1,
|
||||||
mTftpHiiHandle, L"tftp", ValueStr
|
-1,
|
||||||
);
|
NULL,
|
||||||
|
STRING_TOKEN (STR_GEN_PARAM_INV),
|
||||||
|
mTftpHiiHandle,
|
||||||
|
L"tftp",
|
||||||
|
ValueStr
|
||||||
|
);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -645,7 +737,7 @@ GetNicName (
|
|||||||
&gEfiManagedNetworkServiceBindingProtocolGuid,
|
&gEfiManagedNetworkServiceBindingProtocolGuid,
|
||||||
&gEfiManagedNetworkProtocolGuid,
|
&gEfiManagedNetworkProtocolGuid,
|
||||||
&MnpHandle,
|
&MnpHandle,
|
||||||
(VOID**)&Mnp
|
(VOID **)&Mnp
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
goto Error;
|
goto Error;
|
||||||
@ -661,7 +753,7 @@ GetNicName (
|
|||||||
IP4_CONFIG2_INTERFACE_INFO_NAME_LENGTH,
|
IP4_CONFIG2_INTERFACE_INFO_NAME_LENGTH,
|
||||||
SnpMode.IfType == NET_IFTYPE_ETHERNET ?
|
SnpMode.IfType == NET_IFTYPE_ETHERNET ?
|
||||||
L"eth%d" :
|
L"eth%d" :
|
||||||
L"unk%d" ,
|
L"unk%d",
|
||||||
NicNumber
|
NicNumber
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -713,12 +805,12 @@ CreateServiceChildAndOpenProtocol (
|
|||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
*ChildHandle = NULL;
|
*ChildHandle = NULL;
|
||||||
Status = NetLibCreateServiceChild (
|
Status = NetLibCreateServiceChild (
|
||||||
ControllerHandle,
|
ControllerHandle,
|
||||||
gImageHandle,
|
gImageHandle,
|
||||||
ServiceBindingProtocolGuid,
|
ServiceBindingProtocolGuid,
|
||||||
ChildHandle
|
ChildHandle
|
||||||
);
|
);
|
||||||
if (!EFI_ERROR (Status)) {
|
if (!EFI_ERROR (Status)) {
|
||||||
Status = gBS->OpenProtocol (
|
Status = gBS->OpenProtocol (
|
||||||
*ChildHandle,
|
*ChildHandle,
|
||||||
@ -810,21 +902,21 @@ GetFileSize (
|
|||||||
UINT32 OptCnt;
|
UINT32 OptCnt;
|
||||||
UINT8 OptBuf[128];
|
UINT8 OptBuf[128];
|
||||||
|
|
||||||
ReqOpt[0].OptionStr = (UINT8*)"tsize";
|
ReqOpt[0].OptionStr = (UINT8 *)"tsize";
|
||||||
OptBuf[0] = '0';
|
OptBuf[0] = '0';
|
||||||
OptBuf[1] = 0;
|
OptBuf[1] = 0;
|
||||||
ReqOpt[0].ValueStr = OptBuf;
|
ReqOpt[0].ValueStr = OptBuf;
|
||||||
|
|
||||||
Status = Mtftp4->GetInfo (
|
Status = Mtftp4->GetInfo (
|
||||||
Mtftp4,
|
Mtftp4,
|
||||||
NULL,
|
NULL,
|
||||||
(UINT8*)FilePath,
|
(UINT8 *)FilePath,
|
||||||
NULL,
|
NULL,
|
||||||
1,
|
1,
|
||||||
ReqOpt,
|
ReqOpt,
|
||||||
&PktLen,
|
&PktLen,
|
||||||
&Packet
|
&Packet
|
||||||
);
|
);
|
||||||
|
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
goto Error;
|
goto Error;
|
||||||
@ -834,7 +926,7 @@ GetFileSize (
|
|||||||
Mtftp4,
|
Mtftp4,
|
||||||
PktLen,
|
PktLen,
|
||||||
Packet,
|
Packet,
|
||||||
(UINT32 *) &OptCnt,
|
(UINT32 *)&OptCnt,
|
||||||
&TableOfOptions
|
&TableOfOptions
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
@ -847,16 +939,18 @@ GetFileSize (
|
|||||||
*FileSize = AsciiStrDecimalToUintn ((CHAR8 *)Option->ValueStr);
|
*FileSize = AsciiStrDecimalToUintn ((CHAR8 *)Option->ValueStr);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
OptCnt--;
|
OptCnt--;
|
||||||
Option++;
|
Option++;
|
||||||
}
|
}
|
||||||
|
|
||||||
FreePool (TableOfOptions);
|
FreePool (TableOfOptions);
|
||||||
|
|
||||||
if (OptCnt == 0) {
|
if (OptCnt == 0) {
|
||||||
Status = EFI_UNSUPPORTED;
|
Status = EFI_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
Error :
|
Error:
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
@ -889,11 +983,11 @@ DownloadFile (
|
|||||||
IN UINT16 WindowSize
|
IN UINT16 WindowSize
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
DOWNLOAD_CONTEXT *TftpContext;
|
DOWNLOAD_CONTEXT *TftpContext;
|
||||||
EFI_MTFTP4_TOKEN Mtftp4Token;
|
EFI_MTFTP4_TOKEN Mtftp4Token;
|
||||||
UINT8 BlksizeBuf[10];
|
UINT8 BlksizeBuf[10];
|
||||||
UINT8 WindowsizeBuf[10];
|
UINT8 WindowsizeBuf[10];
|
||||||
|
|
||||||
ZeroMem (&Mtftp4Token, sizeof (EFI_MTFTP4_TOKEN));
|
ZeroMem (&Mtftp4Token, sizeof (EFI_MTFTP4_TOKEN));
|
||||||
|
|
||||||
@ -902,13 +996,14 @@ DownloadFile (
|
|||||||
Status = EFI_OUT_OF_RESOURCES;
|
Status = EFI_OUT_OF_RESOURCES;
|
||||||
goto Error;
|
goto Error;
|
||||||
}
|
}
|
||||||
TftpContext->FileSize = FileSize;
|
|
||||||
|
TftpContext->FileSize = FileSize;
|
||||||
TftpContext->DownloadedNbOfBytes = 0;
|
TftpContext->DownloadedNbOfBytes = 0;
|
||||||
TftpContext->LastReportedNbOfBytes = 0;
|
TftpContext->LastReportedNbOfBytes = 0;
|
||||||
|
|
||||||
Mtftp4Token.Filename = (UINT8*)AsciiFilePath;
|
Mtftp4Token.Filename = (UINT8 *)AsciiFilePath;
|
||||||
Mtftp4Token.CheckPacket = CheckPacket;
|
Mtftp4Token.CheckPacket = CheckPacket;
|
||||||
Mtftp4Token.Context = (VOID*)TftpContext;
|
Mtftp4Token.Context = (VOID *)TftpContext;
|
||||||
Mtftp4Token.OptionCount = 0;
|
Mtftp4Token.OptionCount = 0;
|
||||||
Mtftp4Token.OptionList = AllocatePool (sizeof (EFI_MTFTP4_OPTION) * 2);
|
Mtftp4Token.OptionList = AllocatePool (sizeof (EFI_MTFTP4_OPTION) * 2);
|
||||||
if (Mtftp4Token.OptionList == NULL) {
|
if (Mtftp4Token.OptionList == NULL) {
|
||||||
@ -917,22 +1012,26 @@ DownloadFile (
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (BlockSize != MTFTP_DEFAULT_BLKSIZE) {
|
if (BlockSize != MTFTP_DEFAULT_BLKSIZE) {
|
||||||
Mtftp4Token.OptionList[Mtftp4Token.OptionCount].OptionStr = (UINT8 *) "blksize";
|
Mtftp4Token.OptionList[Mtftp4Token.OptionCount].OptionStr = (UINT8 *)"blksize";
|
||||||
AsciiSPrint ((CHAR8 *) BlksizeBuf, sizeof (BlksizeBuf), "%d", BlockSize);
|
AsciiSPrint ((CHAR8 *)BlksizeBuf, sizeof (BlksizeBuf), "%d", BlockSize);
|
||||||
Mtftp4Token.OptionList[Mtftp4Token.OptionCount].ValueStr = BlksizeBuf;
|
Mtftp4Token.OptionList[Mtftp4Token.OptionCount].ValueStr = BlksizeBuf;
|
||||||
Mtftp4Token.OptionCount ++;
|
Mtftp4Token.OptionCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (WindowSize != MTFTP_DEFAULT_WINDOWSIZE) {
|
if (WindowSize != MTFTP_DEFAULT_WINDOWSIZE) {
|
||||||
Mtftp4Token.OptionList[Mtftp4Token.OptionCount].OptionStr = (UINT8 *) "windowsize";
|
Mtftp4Token.OptionList[Mtftp4Token.OptionCount].OptionStr = (UINT8 *)"windowsize";
|
||||||
AsciiSPrint ((CHAR8 *) WindowsizeBuf, sizeof (WindowsizeBuf), "%d", WindowSize);
|
AsciiSPrint ((CHAR8 *)WindowsizeBuf, sizeof (WindowsizeBuf), "%d", WindowSize);
|
||||||
Mtftp4Token.OptionList[Mtftp4Token.OptionCount].ValueStr = WindowsizeBuf;
|
Mtftp4Token.OptionList[Mtftp4Token.OptionCount].ValueStr = WindowsizeBuf;
|
||||||
Mtftp4Token.OptionCount ++;
|
Mtftp4Token.OptionCount++;
|
||||||
}
|
}
|
||||||
|
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1, -1, NULL, STRING_TOKEN (STR_TFTP_DOWNLOADING),
|
-1,
|
||||||
mTftpHiiHandle, FilePath
|
-1,
|
||||||
|
NULL,
|
||||||
|
STRING_TOKEN (STR_TFTP_DOWNLOADING),
|
||||||
|
mTftpHiiHandle,
|
||||||
|
FilePath
|
||||||
);
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -943,24 +1042,32 @@ DownloadFile (
|
|||||||
}
|
}
|
||||||
|
|
||||||
Status = ShellOpenFileByName (
|
Status = ShellOpenFileByName (
|
||||||
mLocalFilePath,
|
mLocalFilePath,
|
||||||
&mFileHandle,
|
&mFileHandle,
|
||||||
EFI_FILE_MODE_CREATE |
|
EFI_FILE_MODE_CREATE |
|
||||||
EFI_FILE_MODE_WRITE |
|
EFI_FILE_MODE_WRITE |
|
||||||
EFI_FILE_MODE_READ,
|
EFI_FILE_MODE_READ,
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL),
|
-1,
|
||||||
mTftpHiiHandle, L"tftp", mLocalFilePath
|
-1,
|
||||||
);
|
NULL,
|
||||||
|
STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL),
|
||||||
|
mTftpHiiHandle,
|
||||||
|
L"tftp",
|
||||||
|
mLocalFilePath
|
||||||
|
);
|
||||||
goto Error;
|
goto Error;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = Mtftp4->ReadFile (Mtftp4, &Mtftp4Token);
|
Status = Mtftp4->ReadFile (Mtftp4, &Mtftp4Token);
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1, -1, NULL, STRING_TOKEN (STR_GEN_CRLF),
|
-1,
|
||||||
|
-1,
|
||||||
|
NULL,
|
||||||
|
STRING_TOKEN (STR_GEN_CRLF),
|
||||||
mTftpHiiHandle
|
mTftpHiiHandle
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -969,7 +1076,7 @@ DownloadFile (
|
|||||||
//
|
//
|
||||||
ShellCloseFile (&mFileHandle);
|
ShellCloseFile (&mFileHandle);
|
||||||
|
|
||||||
Error :
|
Error:
|
||||||
if (TftpContext != NULL) {
|
if (TftpContext != NULL) {
|
||||||
FreePool (TftpContext);
|
FreePool (TftpContext);
|
||||||
}
|
}
|
||||||
@ -1016,7 +1123,7 @@ CheckPacket (
|
|||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
Context = (DOWNLOAD_CONTEXT*)Token->Context;
|
Context = (DOWNLOAD_CONTEXT *)Token->Context;
|
||||||
|
|
||||||
//
|
//
|
||||||
// The data in the packet are prepended with two UINT16 :
|
// The data in the packet are prepended with two UINT16 :
|
||||||
@ -1025,19 +1132,28 @@ CheckPacket (
|
|||||||
//
|
//
|
||||||
DownloadLen = (UINTN)PacketLen - sizeof (Packet->OpCode) - sizeof (Packet->Data.Block);
|
DownloadLen = (UINTN)PacketLen - sizeof (Packet->OpCode) - sizeof (Packet->Data.Block);
|
||||||
|
|
||||||
ShellSetFilePosition(mFileHandle, Context->DownloadedNbOfBytes);
|
ShellSetFilePosition (mFileHandle, Context->DownloadedNbOfBytes);
|
||||||
Status = ShellWriteFile (mFileHandle, &DownloadLen, Packet->Data.Data);
|
Status = ShellWriteFile (mFileHandle, &DownloadLen, Packet->Data.Data);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
if (Context->DownloadedNbOfBytes > 0) {
|
if (Context->DownloadedNbOfBytes > 0) {
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1, -1, NULL, STRING_TOKEN (STR_GEN_CRLF),
|
-1,
|
||||||
|
-1,
|
||||||
|
NULL,
|
||||||
|
STRING_TOKEN (STR_GEN_CRLF),
|
||||||
mTftpHiiHandle
|
mTftpHiiHandle
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1, -1, NULL, STRING_TOKEN (STR_TFTP_ERR_WRITE),
|
-1,
|
||||||
mTftpHiiHandle, mLocalFilePath, Status
|
-1,
|
||||||
);
|
NULL,
|
||||||
|
STRING_TOKEN (STR_TFTP_ERR_WRITE),
|
||||||
|
mTftpHiiHandle,
|
||||||
|
mLocalFilePath,
|
||||||
|
Status
|
||||||
|
);
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1046,11 +1162,11 @@ CheckPacket (
|
|||||||
}
|
}
|
||||||
|
|
||||||
Context->DownloadedNbOfBytes += DownloadLen;
|
Context->DownloadedNbOfBytes += DownloadLen;
|
||||||
NbOfKb = Context->DownloadedNbOfBytes / 1024;
|
NbOfKb = Context->DownloadedNbOfBytes / 1024;
|
||||||
|
|
||||||
Progress[0] = L'\0';
|
Progress[0] = L'\0';
|
||||||
LastStep = (Context->LastReportedNbOfBytes * TFTP_PROGRESS_SLIDER_STEPS) / Context->FileSize;
|
LastStep = (Context->LastReportedNbOfBytes * TFTP_PROGRESS_SLIDER_STEPS) / Context->FileSize;
|
||||||
Step = (Context->DownloadedNbOfBytes * TFTP_PROGRESS_SLIDER_STEPS) / Context->FileSize;
|
Step = (Context->DownloadedNbOfBytes * TFTP_PROGRESS_SLIDER_STEPS) / Context->FileSize;
|
||||||
|
|
||||||
if (Step <= LastStep) {
|
if (Step <= LastStep) {
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
@ -1059,12 +1175,14 @@ CheckPacket (
|
|||||||
ShellPrintEx (-1, -1, L"%s", mTftpProgressDelete);
|
ShellPrintEx (-1, -1, L"%s", mTftpProgressDelete);
|
||||||
|
|
||||||
Status = StrCpyS (Progress, TFTP_PROGRESS_MESSAGE_SIZE, mTftpProgressFrame);
|
Status = StrCpyS (Progress, TFTP_PROGRESS_MESSAGE_SIZE, mTftpProgressFrame);
|
||||||
if (EFI_ERROR(Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Index = 1; Index < Step; Index++) {
|
for (Index = 1; Index < Step; Index++) {
|
||||||
Progress[Index] = L'=';
|
Progress[Index] = L'=';
|
||||||
}
|
}
|
||||||
|
|
||||||
Progress[Step] = L'>';
|
Progress[Step] = L'>';
|
||||||
|
|
||||||
UnicodeSPrint (
|
UnicodeSPrint (
|
||||||
@ -1089,12 +1207,12 @@ CheckPacket (
|
|||||||
**/
|
**/
|
||||||
EFI_HII_HANDLE
|
EFI_HII_HANDLE
|
||||||
InitializeHiiPackage (
|
InitializeHiiPackage (
|
||||||
EFI_HANDLE ImageHandle
|
EFI_HANDLE ImageHandle
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_HII_PACKAGE_LIST_HEADER *PackageList;
|
EFI_HII_PACKAGE_LIST_HEADER *PackageList;
|
||||||
EFI_HII_HANDLE HiiHandle;
|
EFI_HII_HANDLE HiiHandle;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Retrieve HII package list from ImageHandle
|
// Retrieve HII package list from ImageHandle
|
||||||
@ -1125,5 +1243,6 @@ InitializeHiiPackage (
|
|||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return HiiHandle;
|
return HiiHandle;
|
||||||
}
|
}
|
||||||
|
@ -30,12 +30,12 @@
|
|||||||
#include <Library/PrintLib.h>
|
#include <Library/PrintLib.h>
|
||||||
#include <Library/UefiHiiServicesLib.h>
|
#include <Library/UefiHiiServicesLib.h>
|
||||||
|
|
||||||
extern EFI_HII_HANDLE mTftpHiiHandle;
|
extern EFI_HII_HANDLE mTftpHiiHandle;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
UINTN FileSize;
|
UINTN FileSize;
|
||||||
UINTN DownloadedNbOfBytes;
|
UINTN DownloadedNbOfBytes;
|
||||||
UINTN LastReportedNbOfBytes;
|
UINTN LastReportedNbOfBytes;
|
||||||
} DOWNLOAD_CONTEXT;
|
} DOWNLOAD_CONTEXT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -64,6 +64,7 @@ RunTftp (
|
|||||||
**/
|
**/
|
||||||
EFI_HII_HANDLE
|
EFI_HII_HANDLE
|
||||||
InitializeHiiPackage (
|
InitializeHiiPackage (
|
||||||
EFI_HANDLE ImageHandle
|
EFI_HANDLE ImageHandle
|
||||||
);
|
);
|
||||||
|
|
||||||
#endif // _TFTP_H_
|
#endif // _TFTP_H_
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
// the resource section. Thus the application can use '-?' option to show help message in
|
// the resource section. Thus the application can use '-?' option to show help message in
|
||||||
// Shell.
|
// Shell.
|
||||||
//
|
//
|
||||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_STRING_ID mStringHelpTokenId = STRING_TOKEN (STR_GET_HELP_TFTP);
|
GLOBAL_REMOVE_IF_UNREFERENCED EFI_STRING_ID mStringHelpTokenId = STRING_TOKEN (STR_GET_HELP_TFTP);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Entry point of Tftp standalone application.
|
Entry point of Tftp standalone application.
|
||||||
@ -32,11 +32,12 @@ GLOBAL_REMOVE_IF_UNREFERENCED EFI_STRING_ID mStringHelpTokenId = STRING_TOKEN (S
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
TftpAppInitialize (
|
TftpAppInitialize (
|
||||||
IN EFI_HANDLE ImageHandle,
|
IN EFI_HANDLE ImageHandle,
|
||||||
IN EFI_SYSTEM_TABLE *SystemTable
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
mTftpHiiHandle = InitializeHiiPackage (ImageHandle);
|
mTftpHiiHandle = InitializeHiiPackage (ImageHandle);
|
||||||
if (mTftpHiiHandle == NULL) {
|
if (mTftpHiiHandle == NULL) {
|
||||||
return EFI_ABORTED;
|
return EFI_ABORTED;
|
||||||
|
@ -26,10 +26,10 @@
|
|||||||
SHELL_STATUS
|
SHELL_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
TftpCommandHandler (
|
TftpCommandHandler (
|
||||||
IN EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This,
|
IN EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This,
|
||||||
IN EFI_SYSTEM_TABLE *SystemTable,
|
IN EFI_SYSTEM_TABLE *SystemTable,
|
||||||
IN EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters,
|
IN EFI_SHELL_PARAMETERS_PROTOCOL *ShellParameters,
|
||||||
IN EFI_SHELL_PROTOCOL *Shell
|
IN EFI_SHELL_PROTOCOL *Shell
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
gEfiShellParametersProtocol = ShellParameters;
|
gEfiShellParametersProtocol = ShellParameters;
|
||||||
@ -50,14 +50,14 @@ TftpCommandHandler (
|
|||||||
CHAR16 *
|
CHAR16 *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
TftpCommandGetHelp (
|
TftpCommandGetHelp (
|
||||||
IN EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This,
|
IN EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL *This,
|
||||||
IN CONST CHAR8 *Language
|
IN CONST CHAR8 *Language
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return HiiGetString (mTftpHiiHandle, STRING_TOKEN (STR_GET_HELP_TFTP), Language);
|
return HiiGetString (mTftpHiiHandle, STRING_TOKEN (STR_GET_HELP_TFTP), Language);
|
||||||
}
|
}
|
||||||
|
|
||||||
EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL mTftpDynamicCommand = {
|
EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL mTftpDynamicCommand = {
|
||||||
L"tftp",
|
L"tftp",
|
||||||
TftpCommandHandler,
|
TftpCommandHandler,
|
||||||
TftpCommandGetHelp
|
TftpCommandGetHelp
|
||||||
@ -78,11 +78,12 @@ EFI_SHELL_DYNAMIC_COMMAND_PROTOCOL mTftpDynamicCommand = {
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
TftpCommandInitialize (
|
TftpCommandInitialize (
|
||||||
IN EFI_HANDLE ImageHandle,
|
IN EFI_HANDLE ImageHandle,
|
||||||
IN EFI_SYSTEM_TABLE *SystemTable
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
mTftpHiiHandle = InitializeHiiPackage (ImageHandle);
|
mTftpHiiHandle = InitializeHiiPackage (ImageHandle);
|
||||||
if (mTftpHiiHandle == NULL) {
|
if (mTftpHiiHandle == NULL) {
|
||||||
return EFI_ABORTED;
|
return EFI_ABORTED;
|
||||||
@ -109,10 +110,11 @@ TftpCommandInitialize (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
TftpUnload (
|
TftpUnload (
|
||||||
IN EFI_HANDLE ImageHandle
|
IN EFI_HANDLE ImageHandle
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
Status = gBS->UninstallProtocolInterface (
|
Status = gBS->UninstallProtocolInterface (
|
||||||
ImageHandle,
|
ImageHandle,
|
||||||
&gEfiShellDynamicCommandProtocolGuid,
|
&gEfiShellDynamicCommandProtocolGuid,
|
||||||
@ -121,6 +123,7 @@ TftpUnload (
|
|||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
HiiRemovePackages (mTftpHiiHandle);
|
HiiRemovePackages (mTftpHiiHandle);
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -14,6 +14,6 @@
|
|||||||
0x0053d9d6, 0x2659, 0x4599, { 0xa2, 0x6b, 0xef, 0x45, 0x36, 0xe6, 0x31, 0xa9 } \
|
0x0053d9d6, 0x2659, 0x4599, { 0xa2, 0x6b, 0xef, 0x45, 0x36, 0xe6, 0x31, 0xa9 } \
|
||||||
}
|
}
|
||||||
|
|
||||||
extern EFI_GUID gShellAliasGuid;
|
extern EFI_GUID gShellAliasGuid;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -14,6 +14,6 @@
|
|||||||
0xd2c18636, 0x40e5, 0x4eb5, {0xa3, 0x1b, 0x36, 0x69, 0x5f, 0xd4, 0x2c, 0x87} \
|
0xd2c18636, 0x40e5, 0x4eb5, {0xa3, 0x1b, 0x36, 0x69, 0x5f, 0xd4, 0x2c, 0x87} \
|
||||||
}
|
}
|
||||||
|
|
||||||
extern EFI_GUID gEfiShellEnvironment2ExtGuid;
|
extern EFI_GUID gEfiShellEnvironment2ExtGuid;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -69,17 +69,17 @@
|
|||||||
0x5f5f605d, 0x1583, 0x4a2d, {0xa6, 0xb2, 0xeb, 0x12, 0xda, 0xb4, 0xa2, 0xb6 } \
|
0x5f5f605d, 0x1583, 0x4a2d, {0xa6, 0xb2, 0xeb, 0x12, 0xda, 0xb4, 0xa2, 0xb6 } \
|
||||||
}
|
}
|
||||||
|
|
||||||
extern EFI_GUID gHandleParsingHiiGuid;
|
extern EFI_GUID gHandleParsingHiiGuid;
|
||||||
extern EFI_GUID gShellDebug1HiiGuid;
|
extern EFI_GUID gShellDebug1HiiGuid;
|
||||||
extern EFI_GUID gShellDriver1HiiGuid;
|
extern EFI_GUID gShellDriver1HiiGuid;
|
||||||
extern EFI_GUID gShellInstall1HiiGuid;
|
extern EFI_GUID gShellInstall1HiiGuid;
|
||||||
extern EFI_GUID gShellLevel1HiiGuid;
|
extern EFI_GUID gShellLevel1HiiGuid;
|
||||||
extern EFI_GUID gShellLevel2HiiGuid;
|
extern EFI_GUID gShellLevel2HiiGuid;
|
||||||
extern EFI_GUID gShellLevel3HiiGuid;
|
extern EFI_GUID gShellLevel3HiiGuid;
|
||||||
extern EFI_GUID gShellNetwork1HiiGuid;
|
extern EFI_GUID gShellNetwork1HiiGuid;
|
||||||
extern EFI_GUID gShellNetwork2HiiGuid;
|
extern EFI_GUID gShellNetwork2HiiGuid;
|
||||||
extern EFI_GUID gShellTftpHiiGuid;
|
extern EFI_GUID gShellTftpHiiGuid;
|
||||||
extern EFI_GUID gShellHttpHiiGuid;
|
extern EFI_GUID gShellHttpHiiGuid;
|
||||||
extern EFI_GUID gShellBcfgHiiGuid;
|
extern EFI_GUID gShellBcfgHiiGuid;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -14,6 +14,6 @@
|
|||||||
0x51271e13, 0x7de3, 0x43af, { 0x8b, 0xc2, 0x71, 0xad, 0x3b, 0x82, 0x43, 0x25 } \
|
0x51271e13, 0x7de3, 0x43af, { 0x8b, 0xc2, 0x71, 0xad, 0x3b, 0x82, 0x43, 0x25 } \
|
||||||
}
|
}
|
||||||
|
|
||||||
extern EFI_GUID gShellMapGuid;
|
extern EFI_GUID gShellMapGuid;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -14,6 +14,6 @@
|
|||||||
0x171e9188, 0x31d3, 0x40f5, { 0xb1, 0xc, 0x53, 0x9b, 0x2d, 0xb9, 0x40, 0xcd } \
|
0x171e9188, 0x31d3, 0x40f5, { 0xb1, 0xc, 0x53, 0x9b, 0x2d, 0xb9, 0x40, 0xcd } \
|
||||||
}
|
}
|
||||||
|
|
||||||
extern EFI_GUID gEfiShellPkgTokenSpaceGuid;
|
extern EFI_GUID gEfiShellPkgTokenSpaceGuid;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -14,6 +14,6 @@
|
|||||||
0x158def5a, 0xf656, 0x419c, { 0xb0, 0x27, 0x7a, 0x31, 0x92, 0xc0, 0x79, 0xd2 } \
|
0x158def5a, 0xf656, 0x419c, { 0xb0, 0x27, 0x7a, 0x31, 0x92, 0xc0, 0x79, 0xd2 } \
|
||||||
}
|
}
|
||||||
|
|
||||||
extern EFI_GUID gShellVariableGuid;
|
extern EFI_GUID gShellVariableGuid;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -21,8 +21,8 @@
|
|||||||
UINTN
|
UINTN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellDumpBufferToFile (
|
ShellDumpBufferToFile (
|
||||||
IN CONST CHAR16* FileNameBuffer,
|
IN CONST CHAR16 *FileNameBuffer,
|
||||||
IN CONST VOID* Buffer,
|
IN CONST VOID *Buffer,
|
||||||
IN CONST UINTN BufferSize
|
IN CONST UINTN BufferSize
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -43,4 +43,3 @@ BcfgLibraryUnregisterBcfgCommand (
|
|||||||
);
|
);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -26,10 +26,10 @@
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
AddNewGuidNameMapping(
|
AddNewGuidNameMapping (
|
||||||
IN CONST EFI_GUID *Guid,
|
IN CONST EFI_GUID *Guid,
|
||||||
IN CONST CHAR16 *TheName,
|
IN CONST CHAR16 *TheName,
|
||||||
IN CONST CHAR8 *Lang OPTIONAL
|
IN CONST CHAR8 *Lang OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -43,11 +43,11 @@ AddNewGuidNameMapping(
|
|||||||
@return The pointer to a string of the name. The caller
|
@return The pointer to a string of the name. The caller
|
||||||
is responsible to free this memory.
|
is responsible to free this memory.
|
||||||
**/
|
**/
|
||||||
CHAR16*
|
CHAR16 *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
GetStringNameFromGuid(
|
GetStringNameFromGuid (
|
||||||
IN CONST EFI_GUID *Guid,
|
IN CONST EFI_GUID *Guid,
|
||||||
IN CONST CHAR8 *Lang OPTIONAL
|
IN CONST CHAR8 *Lang OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -63,10 +63,10 @@ GetStringNameFromGuid(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
GetGuidFromStringName(
|
GetGuidFromStringName (
|
||||||
IN CONST CHAR16 *Name,
|
IN CONST CHAR16 *Name,
|
||||||
IN CONST CHAR8 *Lang OPTIONAL,
|
IN CONST CHAR8 *Lang OPTIONAL,
|
||||||
OUT EFI_GUID **Guid
|
OUT EFI_GUID **Guid
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -85,12 +85,12 @@ GetGuidFromStringName(
|
|||||||
@return The pointer to string.
|
@return The pointer to string.
|
||||||
@retval NULL An error was encountered.
|
@retval NULL An error was encountered.
|
||||||
**/
|
**/
|
||||||
CHAR16*
|
CHAR16 *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
GetProtocolInformationDump(
|
GetProtocolInformationDump (
|
||||||
IN CONST EFI_HANDLE TheHandle,
|
IN CONST EFI_HANDLE TheHandle,
|
||||||
IN CONST EFI_GUID *Guid,
|
IN CONST EFI_GUID *Guid,
|
||||||
IN CONST BOOLEAN Verbose
|
IN CONST BOOLEAN Verbose
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -105,11 +105,11 @@ GetProtocolInformationDump(
|
|||||||
@retval NULL The name could not be found.
|
@retval NULL The name could not be found.
|
||||||
@return A pointer to the string name. Do not de-allocate the memory.
|
@return A pointer to the string name. Do not de-allocate the memory.
|
||||||
**/
|
**/
|
||||||
CONST CHAR16*
|
CONST CHAR16 *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
GetStringNameFromHandle(
|
GetStringNameFromHandle (
|
||||||
IN CONST EFI_HANDLE TheHandle,
|
IN CONST EFI_HANDLE TheHandle,
|
||||||
IN CONST CHAR8 *Language
|
IN CONST CHAR8 *Language
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -133,19 +133,19 @@ GetBestLanguageForDriver (
|
|||||||
IN BOOLEAN Iso639Language
|
IN BOOLEAN Iso639Language
|
||||||
);
|
);
|
||||||
|
|
||||||
#define HR_UNKNOWN 0
|
#define HR_UNKNOWN 0
|
||||||
#define HR_IMAGE_HANDLE BIT1
|
#define HR_IMAGE_HANDLE BIT1
|
||||||
#define HR_DRIVER_BINDING_HANDLE BIT2 // has driver binding
|
#define HR_DRIVER_BINDING_HANDLE BIT2 // has driver binding
|
||||||
#define HR_DEVICE_DRIVER BIT3 // device driver (hybrid?)
|
#define HR_DEVICE_DRIVER BIT3 // device driver (hybrid?)
|
||||||
#define HR_BUS_DRIVER BIT4 // a bus driver (hybrid?)
|
#define HR_BUS_DRIVER BIT4 // a bus driver (hybrid?)
|
||||||
#define HR_DRIVER_CONFIGURATION_HANDLE BIT5
|
#define HR_DRIVER_CONFIGURATION_HANDLE BIT5
|
||||||
#define HR_DRIVER_DIAGNOSTICS_HANDLE BIT6
|
#define HR_DRIVER_DIAGNOSTICS_HANDLE BIT6
|
||||||
#define HR_COMPONENT_NAME_HANDLE BIT7
|
#define HR_COMPONENT_NAME_HANDLE BIT7
|
||||||
#define HR_DEVICE_HANDLE BIT8
|
#define HR_DEVICE_HANDLE BIT8
|
||||||
#define HR_PARENT_HANDLE BIT9
|
#define HR_PARENT_HANDLE BIT9
|
||||||
#define HR_CONTROLLER_HANDLE BIT10
|
#define HR_CONTROLLER_HANDLE BIT10
|
||||||
#define HR_CHILD_HANDLE BIT11
|
#define HR_CHILD_HANDLE BIT11
|
||||||
#define HR_VALID_MASK (BIT1|BIT2|BIT3|BIT4|BIT5|BIT6|BIT7|BIT8|BIT9|BIT10|BIT11)
|
#define HR_VALID_MASK (BIT1|BIT2|BIT3|BIT4|BIT5|BIT6|BIT7|BIT8|BIT9|BIT10|BIT11)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Gets all the related EFI_HANDLEs based on the mask supplied.
|
Gets all the related EFI_HANDLEs based on the mask supplied.
|
||||||
@ -177,11 +177,11 @@ GetBestLanguageForDriver (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseHandleDatabaseByRelationship (
|
ParseHandleDatabaseByRelationship (
|
||||||
IN CONST EFI_HANDLE DriverBindingHandle OPTIONAL,
|
IN CONST EFI_HANDLE DriverBindingHandle OPTIONAL,
|
||||||
IN CONST EFI_HANDLE ControllerHandle OPTIONAL,
|
IN CONST EFI_HANDLE ControllerHandle OPTIONAL,
|
||||||
IN CONST UINTN Mask,
|
IN CONST UINTN Mask,
|
||||||
IN UINTN *MatchingHandleCount,
|
IN UINTN *MatchingHandleCount,
|
||||||
OUT EFI_HANDLE **MatchingHandleBuffer OPTIONAL
|
OUT EFI_HANDLE **MatchingHandleBuffer OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -213,11 +213,11 @@ ParseHandleDatabaseByRelationship (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseHandleDatabaseByRelationshipWithType (
|
ParseHandleDatabaseByRelationshipWithType (
|
||||||
IN CONST EFI_HANDLE DriverBindingHandle OPTIONAL,
|
IN CONST EFI_HANDLE DriverBindingHandle OPTIONAL,
|
||||||
IN CONST EFI_HANDLE ControllerHandle OPTIONAL,
|
IN CONST EFI_HANDLE ControllerHandle OPTIONAL,
|
||||||
IN UINTN *HandleCount,
|
IN UINTN *HandleCount,
|
||||||
OUT EFI_HANDLE **HandleBuffer,
|
OUT EFI_HANDLE **HandleBuffer,
|
||||||
OUT UINTN **HandleType
|
OUT UINTN **HandleType
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -290,10 +290,10 @@ ParseHandleDatabaseByRelationshipWithType (
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseHandleDatabaseForChildDevices(
|
ParseHandleDatabaseForChildDevices (
|
||||||
IN CONST EFI_HANDLE DriverHandle,
|
IN CONST EFI_HANDLE DriverHandle,
|
||||||
IN UINTN *MatchingHandleCount,
|
IN UINTN *MatchingHandleCount,
|
||||||
OUT EFI_HANDLE **MatchingHandleBuffer OPTIONAL
|
OUT EFI_HANDLE **MatchingHandleBuffer OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -309,13 +309,12 @@ ParseHandleDatabaseForChildDevices(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseHandleDatabaseForChildControllers(
|
ParseHandleDatabaseForChildControllers (
|
||||||
IN CONST EFI_HANDLE ControllerHandle,
|
IN CONST EFI_HANDLE ControllerHandle,
|
||||||
OUT UINTN *MatchingHandleCount,
|
OUT UINTN *MatchingHandleCount,
|
||||||
OUT EFI_HANDLE **MatchingHandleBuffer OPTIONAL
|
OUT EFI_HANDLE **MatchingHandleBuffer OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Function to retrieve the human-friendly index of a given handle. If the handle
|
Function to retrieve the human-friendly index of a given handle. If the handle
|
||||||
does not have a index one will be automatically assigned. The index value is valid
|
does not have a index one will be automatically assigned. The index value is valid
|
||||||
@ -329,8 +328,8 @@ ParseHandleDatabaseForChildControllers(
|
|||||||
**/
|
**/
|
||||||
UINTN
|
UINTN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ConvertHandleToHandleIndex(
|
ConvertHandleToHandleIndex (
|
||||||
IN CONST EFI_HANDLE TheHandle
|
IN CONST EFI_HANDLE TheHandle
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -344,8 +343,8 @@ ConvertHandleToHandleIndex(
|
|||||||
**/
|
**/
|
||||||
EFI_HANDLE
|
EFI_HANDLE
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ConvertHandleIndexToHandle(
|
ConvertHandleIndexToHandle (
|
||||||
IN CONST UINTN TheIndex
|
IN CONST UINTN TheIndex
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -359,10 +358,10 @@ ConvertHandleIndexToHandle(
|
|||||||
@retval NULL A memory allocation failed.
|
@retval NULL A memory allocation failed.
|
||||||
@return A NULL terminated list of handles.
|
@return A NULL terminated list of handles.
|
||||||
**/
|
**/
|
||||||
EFI_HANDLE*
|
EFI_HANDLE *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
GetHandleListByProtocol (
|
GetHandleListByProtocol (
|
||||||
IN CONST EFI_GUID *ProtocolGuid OPTIONAL
|
IN CONST EFI_GUID *ProtocolGuid OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -376,13 +375,12 @@ GetHandleListByProtocol (
|
|||||||
@retval NULL ProtocolGuids was NULL.
|
@retval NULL ProtocolGuids was NULL.
|
||||||
@return A NULL terminated list of EFI_HANDLEs.
|
@return A NULL terminated list of EFI_HANDLEs.
|
||||||
**/
|
**/
|
||||||
EFI_HANDLE*
|
EFI_HANDLE *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
GetHandleListByProtocolList (
|
GetHandleListByProtocolList (
|
||||||
IN CONST EFI_GUID **ProtocolGuids
|
IN CONST EFI_GUID **ProtocolGuids
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Return all supported GUIDs.
|
Return all supported GUIDs.
|
||||||
|
|
||||||
@ -397,8 +395,8 @@ GetHandleListByProtocolList (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
GetAllMappingGuids (
|
GetAllMappingGuids (
|
||||||
OUT EFI_GUID *Guids,
|
OUT EFI_GUID *Guids,
|
||||||
IN OUT UINTN *Count
|
IN OUT UINTN *Count
|
||||||
);
|
);
|
||||||
|
|
||||||
#endif // __HANDLE_PARSING_LIB__
|
#endif // __HANDLE_PARSING_LIB__
|
||||||
|
@ -26,9 +26,8 @@
|
|||||||
INTN
|
INTN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellAppMain (
|
ShellAppMain (
|
||||||
IN UINTN Argc,
|
IN UINTN Argc,
|
||||||
IN CHAR16 **Argv
|
IN CHAR16 **Argv
|
||||||
);
|
);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -26,23 +26,23 @@
|
|||||||
//
|
//
|
||||||
// The extern global protocol poionters.
|
// The extern global protocol poionters.
|
||||||
//
|
//
|
||||||
extern EFI_UNICODE_COLLATION_PROTOCOL *gUnicodeCollation;
|
extern EFI_UNICODE_COLLATION_PROTOCOL *gUnicodeCollation;
|
||||||
extern CONST CHAR16* SupportLevel[];
|
extern CONST CHAR16 *SupportLevel[];
|
||||||
|
|
||||||
//
|
//
|
||||||
// The map list objects.
|
// The map list objects.
|
||||||
//
|
//
|
||||||
typedef struct {
|
typedef struct {
|
||||||
LIST_ENTRY Link;
|
LIST_ENTRY Link;
|
||||||
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||||
CHAR16 *MapName;
|
CHAR16 *MapName;
|
||||||
CHAR16 *CurrentDirectoryPath;
|
CHAR16 *CurrentDirectoryPath;
|
||||||
UINT64 Flags;
|
UINT64 Flags;
|
||||||
} SHELL_MAP_LIST;
|
} SHELL_MAP_LIST;
|
||||||
/// List of Mappings - DeviceName and Drive Letter(ism).
|
/// List of Mappings - DeviceName and Drive Letter(ism).
|
||||||
extern SHELL_MAP_LIST gShellMapList;
|
extern SHELL_MAP_LIST gShellMapList;
|
||||||
/// Pointer to node of current directory in the mMapList.
|
/// Pointer to node of current directory in the mMapList.
|
||||||
extern SHELL_MAP_LIST *gShellCurMapping;
|
extern SHELL_MAP_LIST *gShellCurMapping;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Returns the help MAN fileName for a given shell command.
|
Returns the help MAN fileName for a given shell command.
|
||||||
@ -130,14 +130,14 @@ SHELL_STATUS
|
|||||||
RETURN_STATUS
|
RETURN_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandRegisterCommandName (
|
ShellCommandRegisterCommandName (
|
||||||
IN CONST CHAR16 *CommandString,
|
IN CONST CHAR16 *CommandString,
|
||||||
IN SHELL_RUN_COMMAND CommandHandler,
|
IN SHELL_RUN_COMMAND CommandHandler,
|
||||||
IN SHELL_GET_MAN_FILENAME GetManFileName,
|
IN SHELL_GET_MAN_FILENAME GetManFileName,
|
||||||
IN UINT32 ShellMinSupportLevel,
|
IN UINT32 ShellMinSupportLevel,
|
||||||
IN CONST CHAR16 *ProfileName,
|
IN CONST CHAR16 *ProfileName,
|
||||||
IN CONST BOOLEAN CanAffectLE,
|
IN CONST BOOLEAN CanAffectLE,
|
||||||
IN CONST EFI_HII_HANDLE HiiHandle,
|
IN CONST EFI_HII_HANDLE HiiHandle,
|
||||||
IN CONST EFI_STRING_ID ManFormatHelp
|
IN CONST EFI_STRING_ID ManFormatHelp
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -167,9 +167,9 @@ ShellCommandRegisterCommandName (
|
|||||||
RETURN_STATUS
|
RETURN_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandRunCommandHandler (
|
ShellCommandRunCommandHandler (
|
||||||
IN CONST CHAR16 *CommandString,
|
IN CONST CHAR16 *CommandString,
|
||||||
IN OUT SHELL_STATUS *RetVal,
|
IN OUT SHELL_STATUS *RetVal,
|
||||||
IN OUT BOOLEAN *CanAffectLE OPTIONAL
|
IN OUT BOOLEAN *CanAffectLE OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -185,16 +185,15 @@ ShellCommandRunCommandHandler (
|
|||||||
@retval other The name of the MAN file.
|
@retval other The name of the MAN file.
|
||||||
@sa SHELL_GET_MAN_FILENAME
|
@sa SHELL_GET_MAN_FILENAME
|
||||||
**/
|
**/
|
||||||
CONST CHAR16*
|
CONST CHAR16 *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandGetManFileNameHandler (
|
ShellCommandGetManFileNameHandler (
|
||||||
IN CONST CHAR16 *CommandString
|
IN CONST CHAR16 *CommandString
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
LIST_ENTRY Link;
|
LIST_ENTRY Link;
|
||||||
CHAR16 *CommandString;
|
CHAR16 *CommandString;
|
||||||
} COMMAND_LIST;
|
} COMMAND_LIST;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -206,16 +205,16 @@ typedef struct {
|
|||||||
|
|
||||||
@return A linked list of all available shell commands.
|
@return A linked list of all available shell commands.
|
||||||
**/
|
**/
|
||||||
CONST COMMAND_LIST*
|
CONST COMMAND_LIST *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandGetCommandList (
|
ShellCommandGetCommandList (
|
||||||
IN CONST BOOLEAN Sort
|
IN CONST BOOLEAN Sort
|
||||||
);
|
);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
LIST_ENTRY Link;
|
LIST_ENTRY Link;
|
||||||
CHAR16 *CommandString;
|
CHAR16 *CommandString;
|
||||||
CHAR16 *Alias;
|
CHAR16 *Alias;
|
||||||
} ALIAS_LIST;
|
} ALIAS_LIST;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -234,8 +233,8 @@ typedef struct {
|
|||||||
RETURN_STATUS
|
RETURN_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandRegisterAlias (
|
ShellCommandRegisterAlias (
|
||||||
IN CONST CHAR16 *Command,
|
IN CONST CHAR16 *Command,
|
||||||
IN CONST CHAR16 *Alias
|
IN CONST CHAR16 *Alias
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -245,7 +244,7 @@ ShellCommandRegisterAlias (
|
|||||||
|
|
||||||
@return A linked list of all requested shell aliases.
|
@return A linked list of all requested shell aliases.
|
||||||
**/
|
**/
|
||||||
CONST ALIAS_LIST*
|
CONST ALIAS_LIST *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandGetInitAliasList (
|
ShellCommandGetInitAliasList (
|
||||||
VOID
|
VOID
|
||||||
@ -262,7 +261,7 @@ ShellCommandGetInitAliasList (
|
|||||||
BOOLEAN
|
BOOLEAN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandIsOnAliasList (
|
ShellCommandIsOnAliasList (
|
||||||
IN CONST CHAR16 *Alias
|
IN CONST CHAR16 *Alias
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -276,7 +275,7 @@ ShellCommandIsOnAliasList (
|
|||||||
BOOLEAN
|
BOOLEAN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandIsCommandOnList (
|
ShellCommandIsCommandOnList (
|
||||||
IN CONST CHAR16 *CommandString
|
IN CONST CHAR16 *CommandString
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -287,10 +286,10 @@ ShellCommandIsCommandOnList (
|
|||||||
@retval NULL No help text was found.
|
@retval NULL No help text was found.
|
||||||
@return The string of the help text. The caller required to free.
|
@return The string of the help text. The caller required to free.
|
||||||
**/
|
**/
|
||||||
CHAR16*
|
CHAR16 *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandGetCommandHelp (
|
ShellCommandGetCommandHelp (
|
||||||
IN CONST CHAR16 *CommandString
|
IN CONST CHAR16 *CommandString
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -324,11 +323,9 @@ ShellCommandGetEchoState (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandSetEchoState (
|
ShellCommandSetEchoState (
|
||||||
IN BOOLEAN State
|
IN BOOLEAN State
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Indicate that the current shell or script should exit.
|
Indicate that the current shell or script should exit.
|
||||||
|
|
||||||
@ -338,8 +335,8 @@ ShellCommandSetEchoState (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandRegisterExit (
|
ShellCommandRegisterExit (
|
||||||
IN BOOLEAN ScriptOnly,
|
IN BOOLEAN ScriptOnly,
|
||||||
IN CONST UINT64 ErrorCode
|
IN CONST UINT64 ErrorCode
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -380,20 +377,20 @@ ShellCommandGetScriptExit (
|
|||||||
);
|
);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
LIST_ENTRY Link; ///< List enumerator items.
|
LIST_ENTRY Link; ///< List enumerator items.
|
||||||
UINTN Line; ///< What line of the script file this was on.
|
UINTN Line; ///< What line of the script file this was on.
|
||||||
CHAR16 *Cl; ///< The original command line.
|
CHAR16 *Cl; ///< The original command line.
|
||||||
VOID *Data; ///< The data structure format dependant upon Command. (not always used)
|
VOID *Data; ///< The data structure format dependant upon Command. (not always used)
|
||||||
BOOLEAN Reset; ///< Reset the command (it must be treated like a initial run (but it may have data already))
|
BOOLEAN Reset; ///< Reset the command (it must be treated like a initial run (but it may have data already))
|
||||||
} SCRIPT_COMMAND_LIST;
|
} SCRIPT_COMMAND_LIST;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
CHAR16 *ScriptName; ///< The filename of this script.
|
CHAR16 *ScriptName; ///< The filename of this script.
|
||||||
CHAR16 **Argv; ///< The parmameters to the script file.
|
CHAR16 **Argv; ///< The parmameters to the script file.
|
||||||
UINTN Argc; ///< The count of parameters.
|
UINTN Argc; ///< The count of parameters.
|
||||||
LIST_ENTRY CommandList; ///< The script converted to a list of commands (SCRIPT_COMMAND_LIST objects).
|
LIST_ENTRY CommandList; ///< The script converted to a list of commands (SCRIPT_COMMAND_LIST objects).
|
||||||
SCRIPT_COMMAND_LIST *CurrentCommand; ///< The command currently being operated. If !=NULL must be a member of CommandList.
|
SCRIPT_COMMAND_LIST *CurrentCommand; ///< The command currently being operated. If !=NULL must be a member of CommandList.
|
||||||
LIST_ENTRY SubstList; ///< A list of current script loop alias' (ALIAS_LIST objects) (Used for the for %-based replacement).
|
LIST_ENTRY SubstList; ///< A list of current script loop alias' (ALIAS_LIST objects) (Used for the for %-based replacement).
|
||||||
} SCRIPT_FILE;
|
} SCRIPT_FILE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -402,7 +399,7 @@ typedef struct {
|
|||||||
@retval NULL A script file is not currently running.
|
@retval NULL A script file is not currently running.
|
||||||
@return A pointer to the current script file object.
|
@return A pointer to the current script file object.
|
||||||
**/
|
**/
|
||||||
SCRIPT_FILE*
|
SCRIPT_FILE *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandGetCurrentScriptFile (
|
ShellCommandGetCurrentScriptFile (
|
||||||
VOID
|
VOID
|
||||||
@ -419,10 +416,10 @@ ShellCommandGetCurrentScriptFile (
|
|||||||
@return A pointer to the current running script file after this
|
@return A pointer to the current running script file after this
|
||||||
change. It is NULL if removing the final script.
|
change. It is NULL if removing the final script.
|
||||||
**/
|
**/
|
||||||
SCRIPT_FILE*
|
SCRIPT_FILE *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandSetNewScript (
|
ShellCommandSetNewScript (
|
||||||
IN SCRIPT_FILE *Script OPTIONAL
|
IN SCRIPT_FILE *Script OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -433,7 +430,7 @@ ShellCommandSetNewScript (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DeleteScriptFileStruct (
|
DeleteScriptFileStruct (
|
||||||
IN SCRIPT_FILE *Script
|
IN SCRIPT_FILE *Script
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -466,10 +463,10 @@ typedef enum {
|
|||||||
@retval NULL a memory allocation failed.
|
@retval NULL a memory allocation failed.
|
||||||
@return a new map name string
|
@return a new map name string
|
||||||
**/
|
**/
|
||||||
CHAR16*
|
CHAR16 *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandCreateNewMappingName(
|
ShellCommandCreateNewMappingName (
|
||||||
IN CONST SHELL_MAPPING_TYPE Type
|
IN CONST SHELL_MAPPING_TYPE Type
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -482,7 +479,7 @@ ShellCommandCreateNewMappingName(
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandConsistMappingInitialize (
|
ShellCommandConsistMappingInitialize (
|
||||||
EFI_DEVICE_PATH_PROTOCOL ***Table
|
EFI_DEVICE_PATH_PROTOCOL ***Table
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -497,7 +494,7 @@ ShellCommandConsistMappingInitialize (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandConsistMappingUnInitialize (
|
ShellCommandConsistMappingUnInitialize (
|
||||||
EFI_DEVICE_PATH_PROTOCOL **Table
|
EFI_DEVICE_PATH_PROTOCOL **Table
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -513,11 +510,11 @@ ShellCommandConsistMappingUnInitialize (
|
|||||||
@retval NULL A consistent mapped name could not be created.
|
@retval NULL A consistent mapped name could not be created.
|
||||||
@return A pointer to a string allocated from pool with the device name.
|
@return A pointer to a string allocated from pool with the device name.
|
||||||
**/
|
**/
|
||||||
CHAR16*
|
CHAR16 *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandConsistMappingGenMappingName (
|
ShellCommandConsistMappingGenMappingName (
|
||||||
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
|
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
|
||||||
IN EFI_DEVICE_PATH_PROTOCOL **Table
|
IN EFI_DEVICE_PATH_PROTOCOL **Table
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -528,10 +525,10 @@ ShellCommandConsistMappingGenMappingName (
|
|||||||
|
|
||||||
@return the node on the list.
|
@return the node on the list.
|
||||||
**/
|
**/
|
||||||
SHELL_MAP_LIST*
|
SHELL_MAP_LIST *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandFindMapItem (
|
ShellCommandFindMapItem (
|
||||||
IN CONST CHAR16 *MapKey
|
IN CONST CHAR16 *MapKey
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -553,11 +550,11 @@ ShellCommandFindMapItem (
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandAddMapItemAndUpdatePath(
|
ShellCommandAddMapItemAndUpdatePath (
|
||||||
IN CONST CHAR16 *Name,
|
IN CONST CHAR16 *Name,
|
||||||
IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath,
|
IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath,
|
||||||
IN CONST UINT64 Flags,
|
IN CONST UINT64 Flags,
|
||||||
IN CONST BOOLEAN Path
|
IN CONST BOOLEAN Path
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -574,7 +571,7 @@ ShellCommandAddMapItemAndUpdatePath(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandCreateInitialMappingsAndPaths(
|
ShellCommandCreateInitialMappingsAndPaths (
|
||||||
VOID
|
VOID
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -596,10 +593,10 @@ ShellCommandUpdateMapping (
|
|||||||
|
|
||||||
@return a EFI_FILE_PROTOCOL* representing the same file.
|
@return a EFI_FILE_PROTOCOL* representing the same file.
|
||||||
**/
|
**/
|
||||||
EFI_FILE_PROTOCOL*
|
EFI_FILE_PROTOCOL *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ConvertShellHandleToEfiFileProtocol(
|
ConvertShellHandleToEfiFileProtocol (
|
||||||
IN CONST SHELL_FILE_HANDLE Handle
|
IN CONST SHELL_FILE_HANDLE Handle
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -612,8 +609,8 @@ ConvertShellHandleToEfiFileProtocol(
|
|||||||
**/
|
**/
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellFileHandleRemove(
|
ShellFileHandleRemove (
|
||||||
IN CONST SHELL_FILE_HANDLE Handle
|
IN CONST SHELL_FILE_HANDLE Handle
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -626,9 +623,9 @@ ShellFileHandleRemove(
|
|||||||
**/
|
**/
|
||||||
SHELL_FILE_HANDLE
|
SHELL_FILE_HANDLE
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ConvertEfiFileProtocolToShellHandle(
|
ConvertEfiFileProtocolToShellHandle (
|
||||||
IN CONST EFI_FILE_PROTOCOL *Handle,
|
IN CONST EFI_FILE_PROTOCOL *Handle,
|
||||||
IN CONST CHAR16 *Path
|
IN CONST CHAR16 *Path
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -638,13 +635,12 @@ ConvertEfiFileProtocolToShellHandle(
|
|||||||
|
|
||||||
@return A pointer to the path for the file.
|
@return A pointer to the path for the file.
|
||||||
**/
|
**/
|
||||||
CONST CHAR16*
|
CONST CHAR16 *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellFileHandleGetPath(
|
ShellFileHandleGetPath (
|
||||||
IN CONST SHELL_FILE_HANDLE Handle
|
IN CONST SHELL_FILE_HANDLE Handle
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Function to determine if a SHELL_FILE_HANDLE is at the end of the file.
|
Function to determine if a SHELL_FILE_HANDLE is at the end of the file.
|
||||||
|
|
||||||
@ -659,8 +655,8 @@ ShellFileHandleGetPath(
|
|||||||
**/
|
**/
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellFileHandleEof(
|
ShellFileHandleEof (
|
||||||
IN SHELL_FILE_HANDLE Handle
|
IN SHELL_FILE_HANDLE Handle
|
||||||
);
|
);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -676,7 +672,7 @@ typedef struct {
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
FreeBufferList (
|
FreeBufferList (
|
||||||
IN BUFFER_LIST *List
|
IN BUFFER_LIST *List
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -690,10 +686,10 @@ FreeBufferList (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DumpHex (
|
DumpHex (
|
||||||
IN UINTN Indent,
|
IN UINTN Indent,
|
||||||
IN UINTN Offset,
|
IN UINTN Offset,
|
||||||
IN UINTN DataSize,
|
IN UINTN DataSize,
|
||||||
IN VOID *UserData
|
IN VOID *UserData
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -705,7 +701,7 @@ DumpHex (
|
|||||||
@param[in] DataSize The size in bytes of UserData.
|
@param[in] DataSize The size in bytes of UserData.
|
||||||
@param[in] UserData The data to print out.
|
@param[in] UserData The data to print out.
|
||||||
**/
|
**/
|
||||||
CHAR16*
|
CHAR16 *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
CatSDumpHex (
|
CatSDumpHex (
|
||||||
IN CHAR16 *Buffer,
|
IN CHAR16 *Buffer,
|
||||||
@ -791,8 +787,9 @@ typedef enum {
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellSortFileList (
|
ShellSortFileList (
|
||||||
IN OUT EFI_SHELL_FILE_INFO **FileList,
|
IN OUT EFI_SHELL_FILE_INFO **FileList,
|
||||||
OUT EFI_SHELL_FILE_INFO **Duplicates OPTIONAL,
|
OUT EFI_SHELL_FILE_INFO **Duplicates OPTIONAL,
|
||||||
IN SHELL_SORT_FILE_LIST Order
|
IN SHELL_SORT_FILE_LIST Order
|
||||||
);
|
);
|
||||||
|
|
||||||
#endif //_SHELL_COMMAND_LIB_
|
#endif //_SHELL_COMMAND_LIB_
|
||||||
|
@ -27,8 +27,8 @@
|
|||||||
} \
|
} \
|
||||||
} while(FALSE)
|
} while(FALSE)
|
||||||
|
|
||||||
extern EFI_SHELL_PARAMETERS_PROTOCOL *gEfiShellParametersProtocol;
|
extern EFI_SHELL_PARAMETERS_PROTOCOL *gEfiShellParametersProtocol;
|
||||||
extern EFI_SHELL_PROTOCOL *gEfiShellProtocol;
|
extern EFI_SHELL_PROTOCOL *gEfiShellProtocol;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Return a clean, fully-qualified version of an input path. If the return value
|
Return a clean, fully-qualified version of an input path. If the return value
|
||||||
@ -58,10 +58,10 @@ extern EFI_SHELL_PROTOCOL *gEfiShellProtocol;
|
|||||||
Path. The caller must free this memory when it is no
|
Path. The caller must free this memory when it is no
|
||||||
longer needed.
|
longer needed.
|
||||||
**/
|
**/
|
||||||
CHAR16*
|
CHAR16 *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
FullyQualifyPath(
|
FullyQualifyPath (
|
||||||
IN CONST CHAR16 *Path
|
IN CONST CHAR16 *Path
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -78,10 +78,10 @@ FullyQualifyPath(
|
|||||||
|
|
||||||
@return The information about the file.
|
@return The information about the file.
|
||||||
**/
|
**/
|
||||||
EFI_FILE_INFO*
|
EFI_FILE_INFO *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellGetFileInfo (
|
ShellGetFileInfo (
|
||||||
IN SHELL_FILE_HANDLE FileHandle
|
IN SHELL_FILE_HANDLE FileHandle
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -106,8 +106,8 @@ ShellGetFileInfo (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellSetFileInfo (
|
ShellSetFileInfo (
|
||||||
IN SHELL_FILE_HANDLE FileHandle,
|
IN SHELL_FILE_HANDLE FileHandle,
|
||||||
IN EFI_FILE_INFO *FileInfo
|
IN EFI_FILE_INFO *FileInfo
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -141,11 +141,11 @@ ShellSetFileInfo (
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellOpenFileByDevicePath(
|
ShellOpenFileByDevicePath (
|
||||||
IN OUT EFI_DEVICE_PATH_PROTOCOL **FilePath,
|
IN OUT EFI_DEVICE_PATH_PROTOCOL **FilePath,
|
||||||
OUT SHELL_FILE_HANDLE *FileHandle,
|
OUT SHELL_FILE_HANDLE *FileHandle,
|
||||||
IN UINT64 OpenMode,
|
IN UINT64 OpenMode,
|
||||||
IN UINT64 Attributes
|
IN UINT64 Attributes
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -179,11 +179,11 @@ ShellOpenFileByDevicePath(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellOpenFileByName(
|
ShellOpenFileByName (
|
||||||
IN CONST CHAR16 *FileName,
|
IN CONST CHAR16 *FileName,
|
||||||
OUT SHELL_FILE_HANDLE *FileHandle,
|
OUT SHELL_FILE_HANDLE *FileHandle,
|
||||||
IN UINT64 OpenMode,
|
IN UINT64 OpenMode,
|
||||||
IN UINT64 Attributes
|
IN UINT64 Attributes
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -215,9 +215,9 @@ ShellOpenFileByName(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCreateDirectory(
|
ShellCreateDirectory (
|
||||||
IN CONST CHAR16 *DirectoryName,
|
IN CONST CHAR16 *DirectoryName,
|
||||||
OUT SHELL_FILE_HANDLE *FileHandle
|
OUT SHELL_FILE_HANDLE *FileHandle
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -251,10 +251,10 @@ ShellCreateDirectory(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellReadFile(
|
ShellReadFile (
|
||||||
IN SHELL_FILE_HANDLE FileHandle,
|
IN SHELL_FILE_HANDLE FileHandle,
|
||||||
IN OUT UINTN *ReadSize,
|
IN OUT UINTN *ReadSize,
|
||||||
OUT VOID *Buffer
|
OUT VOID *Buffer
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -285,10 +285,10 @@ ShellReadFile(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellWriteFile(
|
ShellWriteFile (
|
||||||
IN SHELL_FILE_HANDLE FileHandle,
|
IN SHELL_FILE_HANDLE FileHandle,
|
||||||
IN OUT UINTN *BufferSize,
|
IN OUT UINTN *BufferSize,
|
||||||
IN VOID *Buffer
|
IN VOID *Buffer
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -306,7 +306,7 @@ ShellWriteFile(
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCloseFile (
|
ShellCloseFile (
|
||||||
IN SHELL_FILE_HANDLE *FileHandle
|
IN SHELL_FILE_HANDLE *FileHandle
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -326,7 +326,7 @@ ShellCloseFile (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellDeleteFile (
|
ShellDeleteFile (
|
||||||
IN SHELL_FILE_HANDLE *FileHandle
|
IN SHELL_FILE_HANDLE *FileHandle
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -374,8 +374,8 @@ ShellSetFilePosition (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellGetFilePosition (
|
ShellGetFilePosition (
|
||||||
IN SHELL_FILE_HANDLE FileHandle,
|
IN SHELL_FILE_HANDLE FileHandle,
|
||||||
OUT UINT64 *Position
|
OUT UINT64 *Position
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -395,7 +395,7 @@ ShellGetFilePosition (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellFlushFile (
|
ShellFlushFile (
|
||||||
IN SHELL_FILE_HANDLE FileHandle
|
IN SHELL_FILE_HANDLE FileHandle
|
||||||
);
|
);
|
||||||
|
|
||||||
/** Retrieve first entry from a directory.
|
/** Retrieve first entry from a directory.
|
||||||
@ -425,8 +425,8 @@ ShellFlushFile (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellFindFirstFile (
|
ShellFindFirstFile (
|
||||||
IN SHELL_FILE_HANDLE DirHandle,
|
IN SHELL_FILE_HANDLE DirHandle,
|
||||||
OUT EFI_FILE_INFO **Buffer
|
OUT EFI_FILE_INFO **Buffer
|
||||||
);
|
);
|
||||||
|
|
||||||
/** Retrieve next entries from a directory.
|
/** Retrieve next entries from a directory.
|
||||||
@ -451,10 +451,10 @@ ShellFindFirstFile (
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellFindNextFile(
|
ShellFindNextFile (
|
||||||
IN SHELL_FILE_HANDLE DirHandle,
|
IN SHELL_FILE_HANDLE DirHandle,
|
||||||
IN OUT EFI_FILE_INFO *Buffer,
|
IN OUT EFI_FILE_INFO *Buffer,
|
||||||
IN OUT BOOLEAN *NoFile
|
IN OUT BOOLEAN *NoFile
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -472,8 +472,8 @@ ShellFindNextFile(
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellGetFileSize (
|
ShellGetFileSize (
|
||||||
IN SHELL_FILE_HANDLE FileHandle,
|
IN SHELL_FILE_HANDLE FileHandle,
|
||||||
OUT UINT64 *Size
|
OUT UINT64 *Size
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -486,7 +486,7 @@ ShellGetFileSize (
|
|||||||
**/
|
**/
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellGetExecutionBreakFlag(
|
ShellGetExecutionBreakFlag (
|
||||||
VOID
|
VOID
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -501,10 +501,10 @@ ShellGetExecutionBreakFlag(
|
|||||||
@retval NULL The named environment variable does not exist.
|
@retval NULL The named environment variable does not exist.
|
||||||
@return != NULL The pointer to the value of the environment variable.
|
@return != NULL The pointer to the value of the environment variable.
|
||||||
**/
|
**/
|
||||||
CONST CHAR16*
|
CONST CHAR16 *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellGetEnvironmentVariable (
|
ShellGetEnvironmentVariable (
|
||||||
IN CONST CHAR16 *EnvKey
|
IN CONST CHAR16 *EnvKey
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -530,9 +530,9 @@ ShellGetEnvironmentVariable (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellSetEnvironmentVariable (
|
ShellSetEnvironmentVariable (
|
||||||
IN CONST CHAR16 *EnvKey,
|
IN CONST CHAR16 *EnvKey,
|
||||||
IN CONST CHAR16 *EnvVal,
|
IN CONST CHAR16 *EnvVal,
|
||||||
IN BOOLEAN Volatile
|
IN BOOLEAN Volatile
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -568,11 +568,11 @@ ShellSetEnvironmentVariable (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellExecute (
|
ShellExecute (
|
||||||
IN EFI_HANDLE *ParentHandle,
|
IN EFI_HANDLE *ParentHandle,
|
||||||
IN CHAR16 *CommandLine,
|
IN CHAR16 *CommandLine,
|
||||||
IN BOOLEAN Output,
|
IN BOOLEAN Output,
|
||||||
IN CHAR16 **EnvironmentVariables,
|
IN CHAR16 **EnvironmentVariables,
|
||||||
OUT EFI_STATUS *Status
|
OUT EFI_STATUS *Status
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -589,10 +589,10 @@ ShellExecute (
|
|||||||
@retval NULL The directory does not exist.
|
@retval NULL The directory does not exist.
|
||||||
@retval != NULL The directory.
|
@retval != NULL The directory.
|
||||||
**/
|
**/
|
||||||
CONST CHAR16*
|
CONST CHAR16 *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellGetCurrentDir (
|
ShellGetCurrentDir (
|
||||||
IN CHAR16 * CONST DeviceName OPTIONAL
|
IN CHAR16 *CONST DeviceName OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -606,7 +606,7 @@ ShellGetCurrentDir (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellSetPageBreakMode (
|
ShellSetPageBreakMode (
|
||||||
IN BOOLEAN CurrentState
|
IN BOOLEAN CurrentState
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -635,9 +635,9 @@ ShellSetPageBreakMode (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellOpenFileMetaArg (
|
ShellOpenFileMetaArg (
|
||||||
IN CHAR16 *Arg,
|
IN CHAR16 *Arg,
|
||||||
IN UINT64 OpenMode,
|
IN UINT64 OpenMode,
|
||||||
IN OUT EFI_SHELL_FILE_INFO **ListHead
|
IN OUT EFI_SHELL_FILE_INFO **ListHead
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -651,7 +651,7 @@ ShellOpenFileMetaArg (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCloseFileMetaArg (
|
ShellCloseFileMetaArg (
|
||||||
IN OUT EFI_SHELL_FILE_INFO **ListHead
|
IN OUT EFI_SHELL_FILE_INFO **ListHead
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -669,7 +669,7 @@ ShellCloseFileMetaArg (
|
|||||||
CHAR16 *
|
CHAR16 *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellFindFilePath (
|
ShellFindFilePath (
|
||||||
IN CONST CHAR16 *FileName
|
IN CONST CHAR16 *FileName
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -691,12 +691,12 @@ ShellFindFilePath (
|
|||||||
CHAR16 *
|
CHAR16 *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellFindFilePathEx (
|
ShellFindFilePathEx (
|
||||||
IN CONST CHAR16 *FileName,
|
IN CONST CHAR16 *FileName,
|
||||||
IN CONST CHAR16 *FileExtension
|
IN CONST CHAR16 *FileExtension
|
||||||
);
|
);
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
TypeFlag = 0, ///< A flag that is present or not present only (IE "-a").
|
TypeFlag = 0, ///< A flag that is present or not present only (IE "-a").
|
||||||
TypeValue, ///< A flag that has some data following it with a space (IE "-a 1").
|
TypeValue, ///< A flag that has some data following it with a space (IE "-a 1").
|
||||||
TypePosition, ///< Some data that did not follow a parameter (IE "filename.txt").
|
TypePosition, ///< Some data that did not follow a parameter (IE "filename.txt").
|
||||||
TypeStart, ///< A flag that has variable value appended to the end (IE "-ad", "-afd", "-adf", etc...).
|
TypeStart, ///< A flag that has variable value appended to the end (IE "-ad", "-afd", "-adf", etc...).
|
||||||
@ -707,16 +707,15 @@ typedef enum {
|
|||||||
} SHELL_PARAM_TYPE;
|
} SHELL_PARAM_TYPE;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
CHAR16 *Name;
|
CHAR16 *Name;
|
||||||
SHELL_PARAM_TYPE Type;
|
SHELL_PARAM_TYPE Type;
|
||||||
} SHELL_PARAM_ITEM;
|
} SHELL_PARAM_ITEM;
|
||||||
|
|
||||||
|
|
||||||
/// Helper structure for no parameters (besides -? and -b)
|
/// Helper structure for no parameters (besides -? and -b)
|
||||||
extern SHELL_PARAM_ITEM EmptyParamList[];
|
extern SHELL_PARAM_ITEM EmptyParamList[];
|
||||||
|
|
||||||
/// Helper structure for -sfo only (besides -? and -b)
|
/// Helper structure for -sfo only (besides -? and -b)
|
||||||
extern SHELL_PARAM_ITEM SfoParamList[];
|
extern SHELL_PARAM_ITEM SfoParamList[];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Checks the command line arguments passed against the list of valid ones.
|
Checks the command line arguments passed against the list of valid ones.
|
||||||
@ -745,15 +744,15 @@ extern SHELL_PARAM_ITEM SfoParamList[];
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandLineParseEx (
|
ShellCommandLineParseEx (
|
||||||
IN CONST SHELL_PARAM_ITEM *CheckList,
|
IN CONST SHELL_PARAM_ITEM *CheckList,
|
||||||
OUT LIST_ENTRY **CheckPackage,
|
OUT LIST_ENTRY **CheckPackage,
|
||||||
OUT CHAR16 **ProblemParam OPTIONAL,
|
OUT CHAR16 **ProblemParam OPTIONAL,
|
||||||
IN BOOLEAN AutoPageBreak,
|
IN BOOLEAN AutoPageBreak,
|
||||||
IN BOOLEAN AlwaysAllowNumbers
|
IN BOOLEAN AlwaysAllowNumbers
|
||||||
);
|
);
|
||||||
|
|
||||||
/// Make it easy to upgrade from older versions of the shell library.
|
/// Make it easy to upgrade from older versions of the shell library.
|
||||||
#define ShellCommandLineParse(CheckList,CheckPackage,ProblemParam,AutoPageBreak) ShellCommandLineParseEx(CheckList,CheckPackage,ProblemParam,AutoPageBreak,FALSE)
|
#define ShellCommandLineParse(CheckList, CheckPackage, ProblemParam, AutoPageBreak) ShellCommandLineParseEx(CheckList,CheckPackage,ProblemParam,AutoPageBreak,FALSE)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Frees shell variable list that was returned from ShellCommandLineParse.
|
Frees shell variable list that was returned from ShellCommandLineParse.
|
||||||
@ -768,7 +767,7 @@ ShellCommandLineParseEx (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandLineFreeVarList (
|
ShellCommandLineFreeVarList (
|
||||||
IN LIST_ENTRY *CheckPackage
|
IN LIST_ENTRY *CheckPackage
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -788,8 +787,8 @@ ShellCommandLineFreeVarList (
|
|||||||
BOOLEAN
|
BOOLEAN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandLineGetFlag (
|
ShellCommandLineGetFlag (
|
||||||
IN CONST LIST_ENTRY * CONST CheckPackage,
|
IN CONST LIST_ENTRY *CONST CheckPackage,
|
||||||
IN CONST CHAR16 * CONST KeyString
|
IN CONST CHAR16 *CONST KeyString
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -805,11 +804,11 @@ ShellCommandLineGetFlag (
|
|||||||
@retval NULL The flag is not on the command line.
|
@retval NULL The flag is not on the command line.
|
||||||
@retval !=NULL The pointer to unicode string of the value.
|
@retval !=NULL The pointer to unicode string of the value.
|
||||||
**/
|
**/
|
||||||
CONST CHAR16*
|
CONST CHAR16 *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandLineGetValue (
|
ShellCommandLineGetValue (
|
||||||
IN CONST LIST_ENTRY *CheckPackage,
|
IN CONST LIST_ENTRY *CheckPackage,
|
||||||
IN CHAR16 *KeyString
|
IN CHAR16 *KeyString
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -825,11 +824,11 @@ ShellCommandLineGetValue (
|
|||||||
@retval NULL The flag is not on the command line.
|
@retval NULL The flag is not on the command line.
|
||||||
@retval !=NULL The pointer to unicode string of the value.
|
@retval !=NULL The pointer to unicode string of the value.
|
||||||
**/
|
**/
|
||||||
CONST CHAR16*
|
CONST CHAR16 *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandLineGetRawValue (
|
ShellCommandLineGetRawValue (
|
||||||
IN CONST LIST_ENTRY * CONST CheckPackage,
|
IN CONST LIST_ENTRY *CONST CheckPackage,
|
||||||
IN UINTN Position
|
IN UINTN Position
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -844,8 +843,8 @@ ShellCommandLineGetRawValue (
|
|||||||
**/
|
**/
|
||||||
UINTN
|
UINTN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandLineGetCount(
|
ShellCommandLineGetCount (
|
||||||
IN CONST LIST_ENTRY *CheckPackage
|
IN CONST LIST_ENTRY *CheckPackage
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -865,8 +864,8 @@ ShellCommandLineGetCount(
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandLineCheckDuplicate (
|
ShellCommandLineCheckDuplicate (
|
||||||
IN CONST LIST_ENTRY *CheckPackage,
|
IN CONST LIST_ENTRY *CheckPackage,
|
||||||
OUT CHAR16 **Param
|
OUT CHAR16 **Param
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -919,10 +918,10 @@ ShellInitialize (
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellPrintEx(
|
ShellPrintEx (
|
||||||
IN INT32 Col OPTIONAL,
|
IN INT32 Col OPTIONAL,
|
||||||
IN INT32 Row OPTIONAL,
|
IN INT32 Row OPTIONAL,
|
||||||
IN CONST CHAR16 *Format,
|
IN CONST CHAR16 *Format,
|
||||||
...
|
...
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -960,12 +959,12 @@ ShellPrintEx(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellPrintHiiEx(
|
ShellPrintHiiEx (
|
||||||
IN INT32 Col OPTIONAL,
|
IN INT32 Col OPTIONAL,
|
||||||
IN INT32 Row OPTIONAL,
|
IN INT32 Row OPTIONAL,
|
||||||
IN CONST CHAR8 *Language OPTIONAL,
|
IN CONST CHAR8 *Language OPTIONAL,
|
||||||
IN CONST EFI_STRING_ID HiiFormatStringId,
|
IN CONST EFI_STRING_ID HiiFormatStringId,
|
||||||
IN CONST EFI_HII_HANDLE HiiFormatHandle,
|
IN CONST EFI_HII_HANDLE HiiFormatHandle,
|
||||||
...
|
...
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -982,8 +981,8 @@ ShellPrintHiiEx(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellIsDirectory(
|
ShellIsDirectory (
|
||||||
IN CONST CHAR16 *DirName
|
IN CONST CHAR16 *DirName
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1001,8 +1000,8 @@ ShellIsDirectory(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellIsFile(
|
ShellIsFile (
|
||||||
IN CONST CHAR16 *Name
|
IN CONST CHAR16 *Name
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1020,8 +1019,8 @@ ShellIsFile(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellIsFileInPath(
|
ShellIsFileInPath (
|
||||||
IN CONST CHAR16 *Name
|
IN CONST CHAR16 *Name
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1038,8 +1037,8 @@ ShellIsFileInPath(
|
|||||||
**/
|
**/
|
||||||
UINTN
|
UINTN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellStrToUintn(
|
ShellStrToUintn (
|
||||||
IN CONST CHAR16 *String
|
IN CONST CHAR16 *String
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1055,8 +1054,8 @@ ShellStrToUintn(
|
|||||||
**/
|
**/
|
||||||
UINTN
|
UINTN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellHexStrToUintn(
|
ShellHexStrToUintn (
|
||||||
IN CONST CHAR16 *String
|
IN CONST CHAR16 *String
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1091,13 +1090,13 @@ ShellHexStrToUintn(
|
|||||||
|
|
||||||
@return The Destination after appending the Source.
|
@return The Destination after appending the Source.
|
||||||
**/
|
**/
|
||||||
CHAR16*
|
CHAR16 *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
StrnCatGrow (
|
StrnCatGrow (
|
||||||
IN OUT CHAR16 **Destination,
|
IN OUT CHAR16 **Destination,
|
||||||
IN OUT UINTN *CurrentSize,
|
IN OUT UINTN *CurrentSize,
|
||||||
IN CONST CHAR16 *Source,
|
IN CONST CHAR16 *Source,
|
||||||
IN UINTN Count
|
IN UINTN Count
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1129,14 +1128,14 @@ StrnCatGrow (
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCopySearchAndReplace(
|
ShellCopySearchAndReplace (
|
||||||
IN CHAR16 CONST *SourceString,
|
IN CHAR16 CONST *SourceString,
|
||||||
IN OUT CHAR16 *NewString,
|
IN OUT CHAR16 *NewString,
|
||||||
IN UINTN NewSize,
|
IN UINTN NewSize,
|
||||||
IN CONST CHAR16 *FindTarget,
|
IN CONST CHAR16 *FindTarget,
|
||||||
IN CONST CHAR16 *ReplaceWith,
|
IN CONST CHAR16 *ReplaceWith,
|
||||||
IN CONST BOOLEAN SkipPreCarrot,
|
IN CONST BOOLEAN SkipPreCarrot,
|
||||||
IN CONST BOOLEAN ParameterReplacing
|
IN CONST BOOLEAN ParameterReplacing
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1156,7 +1155,7 @@ ShellCopySearchAndReplace(
|
|||||||
BOOLEAN
|
BOOLEAN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellIsHexaDecimalDigitCharacter (
|
ShellIsHexaDecimalDigitCharacter (
|
||||||
IN CHAR16 Char
|
IN CHAR16 Char
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1176,7 +1175,7 @@ ShellIsHexaDecimalDigitCharacter (
|
|||||||
BOOLEAN
|
BOOLEAN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellIsDecimalDigitCharacter (
|
ShellIsDecimalDigitCharacter (
|
||||||
IN CHAR16 Char
|
IN CHAR16 Char
|
||||||
);
|
);
|
||||||
|
|
||||||
///
|
///
|
||||||
@ -1233,9 +1232,9 @@ typedef enum {
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellPromptForResponse (
|
ShellPromptForResponse (
|
||||||
IN SHELL_PROMPT_REQUEST_TYPE Type,
|
IN SHELL_PROMPT_REQUEST_TYPE Type,
|
||||||
IN CHAR16 *Prompt OPTIONAL,
|
IN CHAR16 *Prompt OPTIONAL,
|
||||||
IN OUT VOID **Response OPTIONAL
|
IN OUT VOID **Response OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1258,10 +1257,10 @@ ShellPromptForResponse (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellPromptForResponseHii (
|
ShellPromptForResponseHii (
|
||||||
IN SHELL_PROMPT_REQUEST_TYPE Type,
|
IN SHELL_PROMPT_REQUEST_TYPE Type,
|
||||||
IN CONST EFI_STRING_ID HiiFormatStringId,
|
IN CONST EFI_STRING_ID HiiFormatStringId,
|
||||||
IN CONST EFI_HII_HANDLE HiiFormatHandle,
|
IN CONST EFI_HII_HANDLE HiiFormatHandle,
|
||||||
IN OUT VOID **Response
|
IN OUT VOID **Response
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1301,9 +1300,9 @@ ShellIsHexOrDecimalNumber (
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellConvertStringToUint64(
|
ShellConvertStringToUint64 (
|
||||||
IN CONST CHAR16 *String,
|
IN CONST CHAR16 *String,
|
||||||
OUT UINT64 *Value,
|
OUT UINT64 *Value,
|
||||||
IN CONST BOOLEAN ForceHex,
|
IN CONST BOOLEAN ForceHex,
|
||||||
IN CONST BOOLEAN StopAtSpace
|
IN CONST BOOLEAN StopAtSpace
|
||||||
);
|
);
|
||||||
@ -1319,8 +1318,8 @@ ShellConvertStringToUint64(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellFileExists(
|
ShellFileExists (
|
||||||
IN CONST CHAR16 *Name
|
IN CONST CHAR16 *Name
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1338,11 +1337,11 @@ ShellFileExists(
|
|||||||
|
|
||||||
@sa ShellFileHandleReadLine
|
@sa ShellFileHandleReadLine
|
||||||
**/
|
**/
|
||||||
CHAR16*
|
CHAR16 *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellFileHandleReturnLine(
|
ShellFileHandleReturnLine (
|
||||||
IN SHELL_FILE_HANDLE Handle,
|
IN SHELL_FILE_HANDLE Handle,
|
||||||
IN OUT BOOLEAN *Ascii
|
IN OUT BOOLEAN *Ascii
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1373,12 +1372,12 @@ ShellFileHandleReturnLine(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellFileHandleReadLine(
|
ShellFileHandleReadLine (
|
||||||
IN SHELL_FILE_HANDLE Handle,
|
IN SHELL_FILE_HANDLE Handle,
|
||||||
IN OUT CHAR16 *Buffer,
|
IN OUT CHAR16 *Buffer,
|
||||||
IN OUT UINTN *Size,
|
IN OUT UINTN *Size,
|
||||||
IN BOOLEAN Truncate,
|
IN BOOLEAN Truncate,
|
||||||
IN OUT BOOLEAN *Ascii
|
IN OUT BOOLEAN *Ascii
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1406,8 +1405,8 @@ ShellFileHandleReadLine(
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellDeleteFileByName(
|
ShellDeleteFileByName (
|
||||||
IN CONST CHAR16 *FileName
|
IN CONST CHAR16 *FileName
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1424,9 +1423,9 @@ ShellDeleteFileByName(
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellPrintHelp (
|
ShellPrintHelp (
|
||||||
IN CONST CHAR16 *CommandToGetHelpOn,
|
IN CONST CHAR16 *CommandToGetHelpOn,
|
||||||
IN CONST CHAR16 *SectionToGetHelpOn,
|
IN CONST CHAR16 *SectionToGetHelpOn,
|
||||||
IN BOOLEAN PrintCommandText
|
IN BOOLEAN PrintCommandText
|
||||||
);
|
);
|
||||||
|
|
||||||
#endif // __SHELL_LIB__
|
#endif // __SHELL_LIB__
|
||||||
|
@ -6,12 +6,11 @@
|
|||||||
|
|
||||||
**/
|
**/
|
||||||
|
|
||||||
|
|
||||||
#ifndef _SHELL_ENVIRONMENT_2_PROTOCOL_H_
|
#ifndef _SHELL_ENVIRONMENT_2_PROTOCOL_H_
|
||||||
#define _SHELL_ENVIRONMENT_2_PROTOCOL_H_
|
#define _SHELL_ENVIRONMENT_2_PROTOCOL_H_
|
||||||
|
|
||||||
#define DEFAULT_INIT_ROW 1
|
#define DEFAULT_INIT_ROW 1
|
||||||
#define DEFAULT_AUTO_LF FALSE
|
#define DEFAULT_AUTO_LF FALSE
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function is a prototype for a function that dumps information on a protocol
|
This function is a prototype for a function that dumps information on a protocol
|
||||||
@ -24,7 +23,7 @@
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
VOID
|
VOID
|
||||||
(EFIAPI *SHELLENV_DUMP_PROTOCOL_INFO) (
|
(EFIAPI *SHELLENV_DUMP_PROTOCOL_INFO)(
|
||||||
IN EFI_HANDLE Handle,
|
IN EFI_HANDLE Handle,
|
||||||
IN VOID *Interface
|
IN VOID *Interface
|
||||||
);
|
);
|
||||||
@ -45,7 +44,7 @@ VOID
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
(EFIAPI *SHELLENV_INTERNAL_COMMAND) (
|
(EFIAPI *SHELLENV_INTERNAL_COMMAND)(
|
||||||
IN EFI_HANDLE ImageHandle,
|
IN EFI_HANDLE ImageHandle,
|
||||||
IN EFI_SYSTEM_TABLE *SystemTable
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
);
|
);
|
||||||
@ -62,7 +61,7 @@ EFI_STATUS
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
(EFIAPI *SHELLCMD_GET_LINE_HELP) (
|
(EFIAPI *SHELLCMD_GET_LINE_HELP)(
|
||||||
IN OUT CHAR16 **Str
|
IN OUT CHAR16 **Str
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -70,20 +69,20 @@ EFI_STATUS
|
|||||||
Structure returned from functions that open multiple files.
|
Structure returned from functions that open multiple files.
|
||||||
**/
|
**/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
UINT32 Signature; ///< SHELL_FILE_ARG_SIGNATURE.
|
UINT32 Signature; ///< SHELL_FILE_ARG_SIGNATURE.
|
||||||
LIST_ENTRY Link; ///< Linked list helper.
|
LIST_ENTRY Link; ///< Linked list helper.
|
||||||
EFI_STATUS Status; ///< File's status.
|
EFI_STATUS Status; ///< File's status.
|
||||||
|
|
||||||
EFI_FILE_HANDLE Parent; ///< What is the Parent file of this file.
|
EFI_FILE_HANDLE Parent; ///< What is the Parent file of this file.
|
||||||
UINT64 OpenMode; ///< How was the file opened.
|
UINT64 OpenMode; ///< How was the file opened.
|
||||||
CHAR16 *ParentName; ///< String representation of parent.
|
CHAR16 *ParentName; ///< String representation of parent.
|
||||||
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath; ///< DevicePath for Parent.
|
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath; ///< DevicePath for Parent.
|
||||||
|
|
||||||
CHAR16 *FullName; ///< Path and file name for this file.
|
CHAR16 *FullName; ///< Path and file name for this file.
|
||||||
CHAR16 *FileName; ///< File name for this file.
|
CHAR16 *FileName; ///< File name for this file.
|
||||||
|
|
||||||
EFI_FILE_HANDLE Handle; ///< Handle to this file.
|
EFI_FILE_HANDLE Handle; ///< Handle to this file.
|
||||||
EFI_FILE_INFO *Info; ///< Pointer to file info for this file.
|
EFI_FILE_INFO *Info; ///< Pointer to file info for this file.
|
||||||
} SHELL_FILE_ARG;
|
} SHELL_FILE_ARG;
|
||||||
|
|
||||||
/// Signature for SHELL_FILE_ARG.
|
/// Signature for SHELL_FILE_ARG.
|
||||||
@ -105,8 +104,8 @@ GUID for the shell environment2 extension (main GUID above).
|
|||||||
0xd2c18636, 0x40e5, 0x4eb5, {0xa3, 0x1b, 0x36, 0x69, 0x5f, 0xd4, 0x2c, 0x87} \
|
0xd2c18636, 0x40e5, 0x4eb5, {0xa3, 0x1b, 0x36, 0x69, 0x5f, 0xd4, 0x2c, 0x87} \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define EFI_SHELL_MAJOR_VER 0x00000001 ///< Major version of the EFI_SHELL_ENVIRONMENT2.
|
#define EFI_SHELL_MAJOR_VER 0x00000001 ///< Major version of the EFI_SHELL_ENVIRONMENT2.
|
||||||
#define EFI_SHELL_MINOR_VER 0x00000000 ///< Minor version of the EFI_SHELL_ENVIRONMENT2.
|
#define EFI_SHELL_MINOR_VER 0x00000000 ///< Minor version of the EFI_SHELL_ENVIRONMENT2.
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Execute a command line.
|
Execute a command line.
|
||||||
@ -129,7 +128,7 @@ GUID for the shell environment2 extension (main GUID above).
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
(EFIAPI *SHELLENV_EXECUTE) (
|
(EFIAPI *SHELLENV_EXECUTE)(
|
||||||
IN EFI_HANDLE *ParentImageHandle,
|
IN EFI_HANDLE *ParentImageHandle,
|
||||||
IN CHAR16 *CommandLine,
|
IN CHAR16 *CommandLine,
|
||||||
IN BOOLEAN DebugOutput
|
IN BOOLEAN DebugOutput
|
||||||
@ -147,7 +146,7 @@ EFI_STATUS
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
CHAR16 *
|
CHAR16 *
|
||||||
(EFIAPI *SHELLENV_GET_ENV) (
|
(EFIAPI *SHELLENV_GET_ENV)(
|
||||||
IN CHAR16 *Name
|
IN CHAR16 *Name
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -163,7 +162,7 @@ CHAR16 *
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
CHAR16 *
|
CHAR16 *
|
||||||
(EFIAPI *SHELLENV_GET_MAP) (
|
(EFIAPI *SHELLENV_GET_MAP)(
|
||||||
IN CHAR16 *Name
|
IN CHAR16 *Name
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -184,7 +183,7 @@ CHAR16 *
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
(EFIAPI *SHELLENV_ADD_CMD) (
|
(EFIAPI *SHELLENV_ADD_CMD)(
|
||||||
IN SHELLENV_INTERNAL_COMMAND Handler,
|
IN SHELLENV_INTERNAL_COMMAND Handler,
|
||||||
IN CHAR16 *Cmd,
|
IN CHAR16 *Cmd,
|
||||||
IN SHELLCMD_GET_LINE_HELP GetLineHelp
|
IN SHELLCMD_GET_LINE_HELP GetLineHelp
|
||||||
@ -206,7 +205,7 @@ EFI_STATUS
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
VOID
|
VOID
|
||||||
(EFIAPI *SHELLENV_ADD_PROT) (
|
(EFIAPI *SHELLENV_ADD_PROT)(
|
||||||
IN EFI_GUID *Protocol,
|
IN EFI_GUID *Protocol,
|
||||||
IN SHELLENV_DUMP_PROTOCOL_INFO DumpToken OPTIONAL,
|
IN SHELLENV_DUMP_PROTOCOL_INFO DumpToken OPTIONAL,
|
||||||
IN SHELLENV_DUMP_PROTOCOL_INFO DumpInfo OPTIONAL,
|
IN SHELLENV_DUMP_PROTOCOL_INFO DumpInfo OPTIONAL,
|
||||||
@ -227,8 +226,8 @@ VOID
|
|||||||
@retval NULL The Name was not found, and GenId was not TRUE.
|
@retval NULL The Name was not found, and GenId was not TRUE.
|
||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
CHAR16*
|
CHAR16 *
|
||||||
(EFIAPI *SHELLENV_GET_PROT) (
|
(EFIAPI *SHELLENV_GET_PROT)(
|
||||||
IN EFI_GUID *Protocol,
|
IN EFI_GUID *Protocol,
|
||||||
IN BOOLEAN GenId
|
IN BOOLEAN GenId
|
||||||
);
|
);
|
||||||
@ -249,8 +248,8 @@ CHAR16*
|
|||||||
|
|
||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
CHAR16*
|
CHAR16 *
|
||||||
(EFIAPI *SHELLENV_CUR_DIR) (
|
(EFIAPI *SHELLENV_CUR_DIR)(
|
||||||
IN CHAR16 *DeviceName OPTIONAL
|
IN CHAR16 *DeviceName OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -275,7 +274,7 @@ CHAR16*
|
|||||||
@sa SHELLENV_FREE_FILE_LIST
|
@sa SHELLENV_FREE_FILE_LIST
|
||||||
**/typedef
|
**/typedef
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
(EFIAPI *SHELLENV_FILE_META_ARG) (
|
(EFIAPI *SHELLENV_FILE_META_ARG)(
|
||||||
IN CHAR16 *Arg,
|
IN CHAR16 *Arg,
|
||||||
IN OUT LIST_ENTRY *ListHead
|
IN OUT LIST_ENTRY *ListHead
|
||||||
);
|
);
|
||||||
@ -289,7 +288,7 @@ EFI_STATUS
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
(EFIAPI *SHELLENV_FREE_FILE_LIST) (
|
(EFIAPI *SHELLENV_FREE_FILE_LIST)(
|
||||||
IN OUT LIST_ENTRY *ListHead
|
IN OUT LIST_ENTRY *ListHead
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -308,8 +307,8 @@ EFI_STATUS
|
|||||||
|
|
||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
EFI_SHELL_INTERFACE*
|
EFI_SHELL_INTERFACE *
|
||||||
(EFIAPI *SHELLENV_NEW_SHELL) (
|
(EFIAPI *SHELLENV_NEW_SHELL)(
|
||||||
IN EFI_HANDLE ImageHandle
|
IN EFI_HANDLE ImageHandle
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -325,7 +324,7 @@ EFI_SHELL_INTERFACE*
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
(EFIAPI *SHELLENV_BATCH_IS_ACTIVE) (
|
(EFIAPI *SHELLENV_BATCH_IS_ACTIVE)(
|
||||||
VOID
|
VOID
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -335,7 +334,7 @@ BOOLEAN
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
VOID
|
VOID
|
||||||
(EFIAPI *SHELLENV_FREE_RESOURCES) (
|
(EFIAPI *SHELLENV_FREE_RESOURCES)(
|
||||||
VOID
|
VOID
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -352,7 +351,7 @@ VOID
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
VOID
|
VOID
|
||||||
(EFIAPI *SHELLENV_ENABLE_PAGE_BREAK) (
|
(EFIAPI *SHELLENV_ENABLE_PAGE_BREAK)(
|
||||||
IN INT32 StartRow,
|
IN INT32 StartRow,
|
||||||
IN BOOLEAN AutoWrap
|
IN BOOLEAN AutoWrap
|
||||||
);
|
);
|
||||||
@ -365,7 +364,7 @@ VOID
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
VOID
|
VOID
|
||||||
(EFIAPI *SHELLENV_DISABLE_PAGE_BREAK) (
|
(EFIAPI *SHELLENV_DISABLE_PAGE_BREAK)(
|
||||||
VOID
|
VOID
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -377,7 +376,7 @@ VOID
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
(EFIAPI *SHELLENV_GET_PAGE_BREAK) (
|
(EFIAPI *SHELLENV_GET_PAGE_BREAK)(
|
||||||
VOID
|
VOID
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -393,7 +392,7 @@ BOOLEAN
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
VOID
|
VOID
|
||||||
(EFIAPI *SHELLENV_SET_KEY_FILTER) (
|
(EFIAPI *SHELLENV_SET_KEY_FILTER)(
|
||||||
IN UINT32 KeyFilter
|
IN UINT32 KeyFilter
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -409,7 +408,7 @@ VOID
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
UINT32
|
UINT32
|
||||||
(EFIAPI *SHELLENV_GET_KEY_FILTER) (
|
(EFIAPI *SHELLENV_GET_KEY_FILTER)(
|
||||||
VOID
|
VOID
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -425,7 +424,7 @@ UINT32
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
(EFIAPI *SHELLENV_GET_EXECUTION_BREAK) (
|
(EFIAPI *SHELLENV_GET_EXECUTION_BREAK)(
|
||||||
VOID
|
VOID
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -435,7 +434,7 @@ BOOLEAN
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
VOID
|
VOID
|
||||||
(EFIAPI *SHELLENV_INCREMENT_SHELL_NESTING_LEVEL) (
|
(EFIAPI *SHELLENV_INCREMENT_SHELL_NESTING_LEVEL)(
|
||||||
VOID
|
VOID
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -444,7 +443,7 @@ VOID
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
VOID
|
VOID
|
||||||
(EFIAPI *SHELLENV_DECREMENT_SHELL_NESTING_LEVEL) (
|
(EFIAPI *SHELLENV_DECREMENT_SHELL_NESTING_LEVEL)(
|
||||||
VOID
|
VOID
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -457,7 +456,7 @@ VOID
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
(EFIAPI *SHELLENV_IS_ROOT_SHELL) (
|
(EFIAPI *SHELLENV_IS_ROOT_SHELL)(
|
||||||
VOID
|
VOID
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -476,7 +475,7 @@ BOOLEAN
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
VOID
|
VOID
|
||||||
(EFIAPI *SHELLENV_CLOSE_CONSOLE_PROXY) (
|
(EFIAPI *SHELLENV_CLOSE_CONSOLE_PROXY)(
|
||||||
IN EFI_HANDLE ConInHandle,
|
IN EFI_HANDLE ConInHandle,
|
||||||
IN OUT EFI_SIMPLE_TEXT_INPUT_PROTOCOL **ConIn,
|
IN OUT EFI_SIMPLE_TEXT_INPUT_PROTOCOL **ConIn,
|
||||||
IN EFI_HANDLE ConOutHandle,
|
IN EFI_HANDLE ConOutHandle,
|
||||||
@ -486,6 +485,7 @@ VOID
|
|||||||
//
|
//
|
||||||
// declarations of handle enumerator
|
// declarations of handle enumerator
|
||||||
//
|
//
|
||||||
|
|
||||||
/**
|
/**
|
||||||
For ease of use the shell maps handle #'s to short numbers.
|
For ease of use the shell maps handle #'s to short numbers.
|
||||||
This is only done on request for various internal commands and the references
|
This is only done on request for various internal commands and the references
|
||||||
@ -493,7 +493,7 @@ VOID
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
VOID
|
VOID
|
||||||
(EFIAPI *INIT_HANDLE_ENUMERATOR) (
|
(EFIAPI *INIT_HANDLE_ENUMERATOR)(
|
||||||
VOID
|
VOID
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -514,7 +514,7 @@ VOID
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
(EFIAPI *NEXT_HANDLE) (
|
(EFIAPI *NEXT_HANDLE)(
|
||||||
IN OUT EFI_HANDLE **Handle
|
IN OUT EFI_HANDLE **Handle
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -534,7 +534,7 @@ EFI_STATUS
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
(EFIAPI *SKIP_HANDLE) (
|
(EFIAPI *SKIP_HANDLE)(
|
||||||
IN UINTN SkipNum
|
IN UINTN SkipNum
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -552,7 +552,7 @@ EFI_STATUS
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
UINTN
|
UINTN
|
||||||
(EFIAPI *RESET_HANDLE_ENUMERATOR) (
|
(EFIAPI *RESET_HANDLE_ENUMERATOR)(
|
||||||
IN UINTN EnumIndex
|
IN UINTN EnumIndex
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -567,7 +567,7 @@ UINTN
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
VOID
|
VOID
|
||||||
(EFIAPI *CLOSE_HANDLE_ENUMERATOR) (
|
(EFIAPI *CLOSE_HANDLE_ENUMERATOR)(
|
||||||
VOID
|
VOID
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -582,7 +582,7 @@ VOID
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
UINTN
|
UINTN
|
||||||
(EFIAPI *GET_NUM) (
|
(EFIAPI *GET_NUM)(
|
||||||
VOID
|
VOID
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -590,43 +590,43 @@ UINTN
|
|||||||
Handle Enumerator structure.
|
Handle Enumerator structure.
|
||||||
**/
|
**/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
INIT_HANDLE_ENUMERATOR Init; ///< The pointer to INIT_HANDLE_ENUMERATOR function.
|
INIT_HANDLE_ENUMERATOR Init; ///< The pointer to INIT_HANDLE_ENUMERATOR function.
|
||||||
NEXT_HANDLE Next; ///< The pointer to NEXT_HANDLE function.
|
NEXT_HANDLE Next; ///< The pointer to NEXT_HANDLE function.
|
||||||
SKIP_HANDLE Skip; ///< The pointer to SKIP_HANDLE function.
|
SKIP_HANDLE Skip; ///< The pointer to SKIP_HANDLE function.
|
||||||
RESET_HANDLE_ENUMERATOR Reset; ///< The pointer to RESET_HANDLE_ENUMERATOR function.
|
RESET_HANDLE_ENUMERATOR Reset; ///< The pointer to RESET_HANDLE_ENUMERATOR function.
|
||||||
CLOSE_HANDLE_ENUMERATOR Close; ///< The pointer to CLOSE_HANDLE_ENUMERATOR function.
|
CLOSE_HANDLE_ENUMERATOR Close; ///< The pointer to CLOSE_HANDLE_ENUMERATOR function.
|
||||||
GET_NUM GetNum; ///< The pointer to GET_NUM function.
|
GET_NUM GetNum; ///< The pointer to GET_NUM function.
|
||||||
} HANDLE_ENUMERATOR;
|
} HANDLE_ENUMERATOR;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Signature for the PROTOCOL_INFO structure.
|
Signature for the PROTOCOL_INFO structure.
|
||||||
**/
|
**/
|
||||||
#define PROTOCOL_INFO_SIGNATURE SIGNATURE_32 ('s', 'p', 'i', 'n')
|
#define PROTOCOL_INFO_SIGNATURE SIGNATURE_32 ('s', 'p', 'i', 'n')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
PROTOCOL_INFO structure for protocol enumerator functions.
|
PROTOCOL_INFO structure for protocol enumerator functions.
|
||||||
**/
|
**/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
UINTN Signature; ///< PROTOCOL_INFO_SIGNATURE.
|
UINTN Signature; ///< PROTOCOL_INFO_SIGNATURE.
|
||||||
LIST_ENTRY Link; ///< Standard linked list helper member.
|
LIST_ENTRY Link; ///< Standard linked list helper member.
|
||||||
//
|
//
|
||||||
// The parsing info for the protocol.
|
// The parsing info for the protocol.
|
||||||
//
|
//
|
||||||
EFI_GUID ProtocolId; ///< The GUID for the protocol.
|
EFI_GUID ProtocolId; ///< The GUID for the protocol.
|
||||||
CHAR16 *IdString; ///< The name of the protocol.
|
CHAR16 *IdString; ///< The name of the protocol.
|
||||||
SHELLENV_DUMP_PROTOCOL_INFO DumpToken; ///< The pointer to DumpToken function for the protocol.
|
SHELLENV_DUMP_PROTOCOL_INFO DumpToken; ///< The pointer to DumpToken function for the protocol.
|
||||||
SHELLENV_DUMP_PROTOCOL_INFO DumpInfo; ///< The pointer to DumpInfo function for the protocol.
|
SHELLENV_DUMP_PROTOCOL_INFO DumpInfo; ///< The pointer to DumpInfo function for the protocol.
|
||||||
//
|
//
|
||||||
// Patabase info on which handles are supporting this protocol.
|
// Patabase info on which handles are supporting this protocol.
|
||||||
//
|
//
|
||||||
UINTN NoHandles; ///< The number of handles producing this protocol.
|
UINTN NoHandles; ///< The number of handles producing this protocol.
|
||||||
EFI_HANDLE *Handles; ///< The array of handles.
|
EFI_HANDLE *Handles; ///< The array of handles.
|
||||||
|
|
||||||
} PROTOCOL_INFO;
|
} PROTOCOL_INFO;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Declarations of protocol info enumerator.
|
// Declarations of protocol info enumerator.
|
||||||
//
|
//
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This is an internal shell function to initialize the protocol enumerator.
|
This is an internal shell function to initialize the protocol enumerator.
|
||||||
|
|
||||||
@ -636,7 +636,7 @@ typedef struct {
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
VOID
|
VOID
|
||||||
(EFIAPI *INIT_PROTOCOL_INFO_ENUMERATOR) (
|
(EFIAPI *INIT_PROTOCOL_INFO_ENUMERATOR)(
|
||||||
VOID
|
VOID
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -657,7 +657,7 @@ VOID
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
(EFIAPI *NEXT_PROTOCOL_INFO) (
|
(EFIAPI *NEXT_PROTOCOL_INFO)(
|
||||||
IN OUT PROTOCOL_INFO **ProtocolInfo
|
IN OUT PROTOCOL_INFO **ProtocolInfo
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -673,7 +673,7 @@ EFI_STATUS
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
(EFIAPI *SKIP_PROTOCOL_INFO) (
|
(EFIAPI *SKIP_PROTOCOL_INFO)(
|
||||||
IN UINTN SkipNum
|
IN UINTN SkipNum
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -688,11 +688,10 @@ EFI_STATUS
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
VOID
|
VOID
|
||||||
(EFIAPI *RESET_PROTOCOL_INFO_ENUMERATOR) (
|
(EFIAPI *RESET_PROTOCOL_INFO_ENUMERATOR)(
|
||||||
VOID
|
VOID
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function is an internal shell function for enumeration of protocols.
|
This function is an internal shell function for enumeration of protocols.
|
||||||
|
|
||||||
@ -704,7 +703,7 @@ VOID
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
VOID
|
VOID
|
||||||
(EFIAPI *CLOSE_PROTOCOL_INFO_ENUMERATOR) (
|
(EFIAPI *CLOSE_PROTOCOL_INFO_ENUMERATOR)(
|
||||||
VOID
|
VOID
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -712,11 +711,11 @@ VOID
|
|||||||
Protocol enumerator structure of function pointers.
|
Protocol enumerator structure of function pointers.
|
||||||
**/
|
**/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
INIT_PROTOCOL_INFO_ENUMERATOR Init; ///< The pointer to INIT_PROTOCOL_INFO_ENUMERATOR function.
|
INIT_PROTOCOL_INFO_ENUMERATOR Init; ///< The pointer to INIT_PROTOCOL_INFO_ENUMERATOR function.
|
||||||
NEXT_PROTOCOL_INFO Next; ///< The pointer to NEXT_PROTOCOL_INFO function.
|
NEXT_PROTOCOL_INFO Next; ///< The pointer to NEXT_PROTOCOL_INFO function.
|
||||||
SKIP_PROTOCOL_INFO Skip; ///< The pointer to SKIP_PROTOCOL_INFO function.
|
SKIP_PROTOCOL_INFO Skip; ///< The pointer to SKIP_PROTOCOL_INFO function.
|
||||||
RESET_PROTOCOL_INFO_ENUMERATOR Reset; ///< The pointer to RESET_PROTOCOL_INFO_ENUMERATOR function.
|
RESET_PROTOCOL_INFO_ENUMERATOR Reset; ///< The pointer to RESET_PROTOCOL_INFO_ENUMERATOR function.
|
||||||
CLOSE_PROTOCOL_INFO_ENUMERATOR Close; ///< The pointer to CLOSE_PROTOCOL_INFO_ENUMERATOR function.
|
CLOSE_PROTOCOL_INFO_ENUMERATOR Close; ///< The pointer to CLOSE_PROTOCOL_INFO_ENUMERATOR function.
|
||||||
} PROTOCOL_INFO_ENUMERATOR;
|
} PROTOCOL_INFO_ENUMERATOR;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -752,7 +751,7 @@ typedef struct {
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
(EFIAPI *GET_DEVICE_NAME) (
|
(EFIAPI *GET_DEVICE_NAME)(
|
||||||
IN EFI_HANDLE DeviceHandle,
|
IN EFI_HANDLE DeviceHandle,
|
||||||
IN BOOLEAN UseComponentName,
|
IN BOOLEAN UseComponentName,
|
||||||
IN BOOLEAN UseDevicePath,
|
IN BOOLEAN UseDevicePath,
|
||||||
@ -764,8 +763,8 @@ EFI_STATUS
|
|||||||
IN UINTN Indent
|
IN UINTN Indent
|
||||||
);
|
);
|
||||||
|
|
||||||
#define EFI_SHELL_COMPATIBLE_MODE_VER L"1.1.1" ///< The string for lowest version this shell supports.
|
#define EFI_SHELL_COMPATIBLE_MODE_VER L"1.1.1" ///< The string for lowest version this shell supports.
|
||||||
#define EFI_SHELL_ENHANCED_MODE_VER L"1.1.2" ///< The string for highest version this shell supports.
|
#define EFI_SHELL_ENHANCED_MODE_VER L"1.1.2" ///< The string for highest version this shell supports.
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function gets the shell mode as stored in the shell environment
|
This function gets the shell mode as stored in the shell environment
|
||||||
@ -778,7 +777,7 @@ EFI_STATUS
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
(EFIAPI *GET_SHELL_MODE) (
|
(EFIAPI *GET_SHELL_MODE)(
|
||||||
OUT CHAR16 **Mode
|
OUT CHAR16 **Mode
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -798,8 +797,8 @@ EFI_STATUS
|
|||||||
@retval NULL The operation could not be completed.
|
@retval NULL The operation could not be completed.
|
||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
EFI_DEVICE_PATH_PROTOCOL*
|
EFI_DEVICE_PATH_PROTOCOL *
|
||||||
(EFIAPI *SHELLENV_NAME_TO_PATH) (
|
(EFIAPI *SHELLENV_NAME_TO_PATH)(
|
||||||
IN CHAR16 *Path
|
IN CHAR16 *Path
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -827,8 +826,8 @@ EFI_DEVICE_PATH_PROTOCOL*
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
(EFIAPI *SHELLENV_GET_FS_NAME) (
|
(EFIAPI *SHELLENV_GET_FS_NAME)(
|
||||||
IN EFI_DEVICE_PATH_PROTOCOL * DevPath,
|
IN EFI_DEVICE_PATH_PROTOCOL *DevPath,
|
||||||
IN BOOLEAN ConsistMapping,
|
IN BOOLEAN ConsistMapping,
|
||||||
OUT CHAR16 **Name
|
OUT CHAR16 **Name
|
||||||
);
|
);
|
||||||
@ -855,7 +854,7 @@ EFI_STATUS
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
(EFIAPI *SHELLENV_FILE_META_ARG_NO_WILDCARD) (
|
(EFIAPI *SHELLENV_FILE_META_ARG_NO_WILDCARD)(
|
||||||
IN CHAR16 *Arg,
|
IN CHAR16 *Arg,
|
||||||
IN OUT LIST_ENTRY *ListHead
|
IN OUT LIST_ENTRY *ListHead
|
||||||
);
|
);
|
||||||
@ -877,8 +876,8 @@ EFI_STATUS
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
(EFIAPI *SHELLENV_DEL_DUP_FILE) (
|
(EFIAPI *SHELLENV_DEL_DUP_FILE)(
|
||||||
IN LIST_ENTRY * ListHead
|
IN LIST_ENTRY *ListHead
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -905,65 +904,65 @@ EFI_STATUS
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
(EFIAPI *SHELLENV_GET_FS_DEVICE_PATH) (
|
(EFIAPI *SHELLENV_GET_FS_DEVICE_PATH)(
|
||||||
IN CHAR16 *Name,
|
IN CHAR16 *Name,
|
||||||
OUT EFI_DEVICE_PATH_PROTOCOL **DevPath
|
OUT EFI_DEVICE_PATH_PROTOCOL **DevPath
|
||||||
);
|
);
|
||||||
|
|
||||||
/// EFI_SHELL_ENVIRONMENT2 protocol structure.
|
/// EFI_SHELL_ENVIRONMENT2 protocol structure.
|
||||||
typedef struct {
|
typedef struct {
|
||||||
SHELLENV_EXECUTE Execute;
|
SHELLENV_EXECUTE Execute;
|
||||||
SHELLENV_GET_ENV GetEnv;
|
SHELLENV_GET_ENV GetEnv;
|
||||||
SHELLENV_GET_MAP GetMap;
|
SHELLENV_GET_MAP GetMap;
|
||||||
SHELLENV_ADD_CMD AddCmd;
|
SHELLENV_ADD_CMD AddCmd;
|
||||||
SHELLENV_ADD_PROT AddProt;
|
SHELLENV_ADD_PROT AddProt;
|
||||||
SHELLENV_GET_PROT GetProt;
|
SHELLENV_GET_PROT GetProt;
|
||||||
SHELLENV_CUR_DIR CurDir;
|
SHELLENV_CUR_DIR CurDir;
|
||||||
SHELLENV_FILE_META_ARG FileMetaArg;
|
SHELLENV_FILE_META_ARG FileMetaArg;
|
||||||
SHELLENV_FREE_FILE_LIST FreeFileList;
|
SHELLENV_FREE_FILE_LIST FreeFileList;
|
||||||
|
|
||||||
//
|
//
|
||||||
// The following services are only used by the shell itself.
|
// The following services are only used by the shell itself.
|
||||||
//
|
//
|
||||||
SHELLENV_NEW_SHELL NewShell;
|
SHELLENV_NEW_SHELL NewShell;
|
||||||
SHELLENV_BATCH_IS_ACTIVE BatchIsActive;
|
SHELLENV_BATCH_IS_ACTIVE BatchIsActive;
|
||||||
|
|
||||||
SHELLENV_FREE_RESOURCES FreeResources;
|
SHELLENV_FREE_RESOURCES FreeResources;
|
||||||
|
|
||||||
//
|
//
|
||||||
// GUID to differentiate ShellEnvironment2 from ShellEnvironment.
|
// GUID to differentiate ShellEnvironment2 from ShellEnvironment.
|
||||||
//
|
//
|
||||||
EFI_GUID SESGuid;
|
EFI_GUID SESGuid;
|
||||||
//
|
//
|
||||||
// Major Version grows if shell environment interface has been changes.
|
// Major Version grows if shell environment interface has been changes.
|
||||||
//
|
//
|
||||||
UINT32 MajorVersion;
|
UINT32 MajorVersion;
|
||||||
UINT32 MinorVersion;
|
UINT32 MinorVersion;
|
||||||
SHELLENV_ENABLE_PAGE_BREAK EnablePageBreak;
|
SHELLENV_ENABLE_PAGE_BREAK EnablePageBreak;
|
||||||
SHELLENV_DISABLE_PAGE_BREAK DisablePageBreak;
|
SHELLENV_DISABLE_PAGE_BREAK DisablePageBreak;
|
||||||
SHELLENV_GET_PAGE_BREAK GetPageBreak;
|
SHELLENV_GET_PAGE_BREAK GetPageBreak;
|
||||||
|
|
||||||
SHELLENV_SET_KEY_FILTER SetKeyFilter;
|
SHELLENV_SET_KEY_FILTER SetKeyFilter;
|
||||||
SHELLENV_GET_KEY_FILTER GetKeyFilter;
|
SHELLENV_GET_KEY_FILTER GetKeyFilter;
|
||||||
|
|
||||||
SHELLENV_GET_EXECUTION_BREAK GetExecutionBreak;
|
SHELLENV_GET_EXECUTION_BREAK GetExecutionBreak;
|
||||||
SHELLENV_INCREMENT_SHELL_NESTING_LEVEL IncrementShellNestingLevel;
|
SHELLENV_INCREMENT_SHELL_NESTING_LEVEL IncrementShellNestingLevel;
|
||||||
SHELLENV_DECREMENT_SHELL_NESTING_LEVEL DecrementShellNestingLevel;
|
SHELLENV_DECREMENT_SHELL_NESTING_LEVEL DecrementShellNestingLevel;
|
||||||
SHELLENV_IS_ROOT_SHELL IsRootShell;
|
SHELLENV_IS_ROOT_SHELL IsRootShell;
|
||||||
|
|
||||||
SHELLENV_CLOSE_CONSOLE_PROXY CloseConsoleProxy;
|
SHELLENV_CLOSE_CONSOLE_PROXY CloseConsoleProxy;
|
||||||
HANDLE_ENUMERATOR HandleEnumerator;
|
HANDLE_ENUMERATOR HandleEnumerator;
|
||||||
PROTOCOL_INFO_ENUMERATOR ProtocolInfoEnumerator;
|
PROTOCOL_INFO_ENUMERATOR ProtocolInfoEnumerator;
|
||||||
GET_DEVICE_NAME GetDeviceName;
|
GET_DEVICE_NAME GetDeviceName;
|
||||||
GET_SHELL_MODE GetShellMode;
|
GET_SHELL_MODE GetShellMode;
|
||||||
SHELLENV_NAME_TO_PATH NameToPath;
|
SHELLENV_NAME_TO_PATH NameToPath;
|
||||||
SHELLENV_GET_FS_NAME GetFsName;
|
SHELLENV_GET_FS_NAME GetFsName;
|
||||||
SHELLENV_FILE_META_ARG_NO_WILDCARD FileMetaArgNoWildCard;
|
SHELLENV_FILE_META_ARG_NO_WILDCARD FileMetaArgNoWildCard;
|
||||||
SHELLENV_DEL_DUP_FILE DelDupFileArg;
|
SHELLENV_DEL_DUP_FILE DelDupFileArg;
|
||||||
SHELLENV_GET_FS_DEVICE_PATH GetFsDevicePath;
|
SHELLENV_GET_FS_DEVICE_PATH GetFsDevicePath;
|
||||||
} EFI_SHELL_ENVIRONMENT2;
|
} EFI_SHELL_ENVIRONMENT2;
|
||||||
|
|
||||||
extern EFI_GUID gEfiShellEnvironment2Guid;
|
extern EFI_GUID gEfiShellEnvironment2Guid;
|
||||||
extern EFI_GUID gEfiShellEnvironment2ExtGuid;
|
extern EFI_GUID gEfiShellEnvironment2ExtGuid;
|
||||||
|
|
||||||
#endif // _SHELL_ENVIRONMENT_2_PROTOCOL_H_
|
#endif // _SHELL_ENVIRONMENT_2_PROTOCOL_H_
|
||||||
|
@ -40,7 +40,7 @@ typedef enum {
|
|||||||
/// Attributes for an argument.
|
/// Attributes for an argument.
|
||||||
///
|
///
|
||||||
typedef struct _EFI_SHELL_ARG_INFO {
|
typedef struct _EFI_SHELL_ARG_INFO {
|
||||||
UINT32 Attributes;
|
UINT32 Attributes;
|
||||||
} EFI_SHELL_ARG_INFO;
|
} EFI_SHELL_ARG_INFO;
|
||||||
|
|
||||||
///
|
///
|
||||||
@ -50,39 +50,39 @@ typedef struct {
|
|||||||
///
|
///
|
||||||
/// Handle back to original image handle & image information.
|
/// Handle back to original image handle & image information.
|
||||||
///
|
///
|
||||||
EFI_HANDLE ImageHandle;
|
EFI_HANDLE ImageHandle;
|
||||||
EFI_LOADED_IMAGE_PROTOCOL *Info;
|
EFI_LOADED_IMAGE_PROTOCOL *Info;
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Parsed arg list converted more C-like format.
|
/// Parsed arg list converted more C-like format.
|
||||||
///
|
///
|
||||||
CHAR16 **Argv;
|
CHAR16 **Argv;
|
||||||
UINTN Argc;
|
UINTN Argc;
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Storage for file redirection args after parsing.
|
/// Storage for file redirection args after parsing.
|
||||||
///
|
///
|
||||||
CHAR16 **RedirArgv;
|
CHAR16 **RedirArgv;
|
||||||
UINTN RedirArgc;
|
UINTN RedirArgc;
|
||||||
|
|
||||||
///
|
///
|
||||||
/// A file style handle for console io.
|
/// A file style handle for console io.
|
||||||
///
|
///
|
||||||
EFI_FILE_PROTOCOL *StdIn;
|
EFI_FILE_PROTOCOL *StdIn;
|
||||||
EFI_FILE_PROTOCOL *StdOut;
|
EFI_FILE_PROTOCOL *StdOut;
|
||||||
EFI_FILE_PROTOCOL *StdErr;
|
EFI_FILE_PROTOCOL *StdErr;
|
||||||
|
|
||||||
///
|
///
|
||||||
/// List of attributes for each argument.
|
/// List of attributes for each argument.
|
||||||
///
|
///
|
||||||
EFI_SHELL_ARG_INFO *ArgInfo;
|
EFI_SHELL_ARG_INFO *ArgInfo;
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Whether we are echoing.
|
/// Whether we are echoing.
|
||||||
///
|
///
|
||||||
BOOLEAN EchoOn;
|
BOOLEAN EchoOn;
|
||||||
} EFI_SHELL_INTERFACE;
|
} EFI_SHELL_INTERFACE;
|
||||||
|
|
||||||
extern EFI_GUID gEfiShellInterfaceGuid;
|
extern EFI_GUID gEfiShellInterfaceGuid;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -99,8 +99,8 @@
|
|||||||
#include <Protocol/DriverConfiguration.h>
|
#include <Protocol/DriverConfiguration.h>
|
||||||
#include <Protocol/DriverConfiguration2.h>
|
#include <Protocol/DriverConfiguration2.h>
|
||||||
#include <Protocol/DevicePathUtilities.h>
|
#include <Protocol/DevicePathUtilities.h>
|
||||||
//#include <Protocol/FirmwareVolume.h>
|
// #include <Protocol/FirmwareVolume.h>
|
||||||
//#include <Protocol/FirmwareVolume2.h>
|
// #include <Protocol/FirmwareVolume2.h>
|
||||||
#include <Protocol/DriverFamilyOverride.h>
|
#include <Protocol/DriverFamilyOverride.h>
|
||||||
#include <Protocol/Pcd.h>
|
#include <Protocol/Pcd.h>
|
||||||
#include <Protocol/TcgService.h>
|
#include <Protocol/TcgService.h>
|
||||||
@ -150,8 +150,8 @@
|
|||||||
#include <Library/ShellCommandLib.h>
|
#include <Library/ShellCommandLib.h>
|
||||||
#include <Library/PeCoffGetEntryPointLib.h>
|
#include <Library/PeCoffGetEntryPointLib.h>
|
||||||
|
|
||||||
#define EFI_FIRMWARE_IMAGE_DESCRIPTOR_VERSION_V1 1
|
#define EFI_FIRMWARE_IMAGE_DESCRIPTOR_VERSION_V1 1
|
||||||
#define EFI_FIRMWARE_IMAGE_DESCRIPTOR_VERSION_V2 2
|
#define EFI_FIRMWARE_IMAGE_DESCRIPTOR_VERSION_V2 2
|
||||||
|
|
||||||
///
|
///
|
||||||
/// EFI_FIRMWARE_IMAGE_DESCRIPTOR in UEFI spec < 2.4a
|
/// EFI_FIRMWARE_IMAGE_DESCRIPTOR in UEFI spec < 2.4a
|
||||||
@ -161,32 +161,32 @@ typedef struct {
|
|||||||
/// A unique number identifying the firmware image within the device. The number is
|
/// A unique number identifying the firmware image within the device. The number is
|
||||||
/// between 1 and DescriptorCount.
|
/// between 1 and DescriptorCount.
|
||||||
///
|
///
|
||||||
UINT8 ImageIndex;
|
UINT8 ImageIndex;
|
||||||
///
|
///
|
||||||
/// A unique number identifying the firmware image type.
|
/// A unique number identifying the firmware image type.
|
||||||
///
|
///
|
||||||
EFI_GUID ImageTypeId;
|
EFI_GUID ImageTypeId;
|
||||||
///
|
///
|
||||||
/// A unique number identifying the firmware image.
|
/// A unique number identifying the firmware image.
|
||||||
///
|
///
|
||||||
UINT64 ImageId;
|
UINT64 ImageId;
|
||||||
///
|
///
|
||||||
/// A pointer to a null-terminated string representing the firmware image name.
|
/// A pointer to a null-terminated string representing the firmware image name.
|
||||||
///
|
///
|
||||||
CHAR16 *ImageIdName;
|
CHAR16 *ImageIdName;
|
||||||
///
|
///
|
||||||
/// Identifies the version of the device firmware. The format is vendor specific and new
|
/// Identifies the version of the device firmware. The format is vendor specific and new
|
||||||
/// version must have a greater value than an old version.
|
/// version must have a greater value than an old version.
|
||||||
///
|
///
|
||||||
UINT32 Version;
|
UINT32 Version;
|
||||||
///
|
///
|
||||||
/// A pointer to a null-terminated string representing the firmware image version name.
|
/// A pointer to a null-terminated string representing the firmware image version name.
|
||||||
///
|
///
|
||||||
CHAR16 *VersionName;
|
CHAR16 *VersionName;
|
||||||
///
|
///
|
||||||
/// Size of the image in bytes. If size=0, then only ImageIndex and ImageTypeId are valid.
|
/// Size of the image in bytes. If size=0, then only ImageIndex and ImageTypeId are valid.
|
||||||
///
|
///
|
||||||
UINTN Size;
|
UINTN Size;
|
||||||
///
|
///
|
||||||
/// Image attributes that are supported by this device. See 'Image Attribute Definitions'
|
/// Image attributes that are supported by this device. See 'Image Attribute Definitions'
|
||||||
/// for possible returned values of this parameter. A value of 1 indicates the attribute is
|
/// for possible returned values of this parameter. A value of 1 indicates the attribute is
|
||||||
@ -194,20 +194,19 @@ typedef struct {
|
|||||||
/// value of 0 indicates the attribute is not supported and the current setting value in
|
/// value of 0 indicates the attribute is not supported and the current setting value in
|
||||||
/// AttributesSetting is meaningless.
|
/// AttributesSetting is meaningless.
|
||||||
///
|
///
|
||||||
UINT64 AttributesSupported;
|
UINT64 AttributesSupported;
|
||||||
///
|
///
|
||||||
/// Image attributes. See 'Image Attribute Definitions' for possible returned values of
|
/// Image attributes. See 'Image Attribute Definitions' for possible returned values of
|
||||||
/// this parameter.
|
/// this parameter.
|
||||||
///
|
///
|
||||||
UINT64 AttributesSetting;
|
UINT64 AttributesSetting;
|
||||||
///
|
///
|
||||||
/// Image compatibilities. See 'Image Compatibility Definitions' for possible returned
|
/// Image compatibilities. See 'Image Compatibility Definitions' for possible returned
|
||||||
/// values of this parameter.
|
/// values of this parameter.
|
||||||
///
|
///
|
||||||
UINT64 Compatibilities;
|
UINT64 Compatibilities;
|
||||||
} EFI_FIRMWARE_IMAGE_DESCRIPTOR_V1;
|
} EFI_FIRMWARE_IMAGE_DESCRIPTOR_V1;
|
||||||
|
|
||||||
|
|
||||||
///
|
///
|
||||||
/// EFI_FIRMWARE_IMAGE_DESCRIPTOR in UEFI spec > 2.4a and < 2.5
|
/// EFI_FIRMWARE_IMAGE_DESCRIPTOR in UEFI spec > 2.4a and < 2.5
|
||||||
///
|
///
|
||||||
@ -216,32 +215,32 @@ typedef struct {
|
|||||||
/// A unique number identifying the firmware image within the device. The number is
|
/// A unique number identifying the firmware image within the device. The number is
|
||||||
/// between 1 and DescriptorCount.
|
/// between 1 and DescriptorCount.
|
||||||
///
|
///
|
||||||
UINT8 ImageIndex;
|
UINT8 ImageIndex;
|
||||||
///
|
///
|
||||||
/// A unique number identifying the firmware image type.
|
/// A unique number identifying the firmware image type.
|
||||||
///
|
///
|
||||||
EFI_GUID ImageTypeId;
|
EFI_GUID ImageTypeId;
|
||||||
///
|
///
|
||||||
/// A unique number identifying the firmware image.
|
/// A unique number identifying the firmware image.
|
||||||
///
|
///
|
||||||
UINT64 ImageId;
|
UINT64 ImageId;
|
||||||
///
|
///
|
||||||
/// A pointer to a null-terminated string representing the firmware image name.
|
/// A pointer to a null-terminated string representing the firmware image name.
|
||||||
///
|
///
|
||||||
CHAR16 *ImageIdName;
|
CHAR16 *ImageIdName;
|
||||||
///
|
///
|
||||||
/// Identifies the version of the device firmware. The format is vendor specific and new
|
/// Identifies the version of the device firmware. The format is vendor specific and new
|
||||||
/// version must have a greater value than an old version.
|
/// version must have a greater value than an old version.
|
||||||
///
|
///
|
||||||
UINT32 Version;
|
UINT32 Version;
|
||||||
///
|
///
|
||||||
/// A pointer to a null-terminated string representing the firmware image version name.
|
/// A pointer to a null-terminated string representing the firmware image version name.
|
||||||
///
|
///
|
||||||
CHAR16 *VersionName;
|
CHAR16 *VersionName;
|
||||||
///
|
///
|
||||||
/// Size of the image in bytes. If size=0, then only ImageIndex and ImageTypeId are valid.
|
/// Size of the image in bytes. If size=0, then only ImageIndex and ImageTypeId are valid.
|
||||||
///
|
///
|
||||||
UINTN Size;
|
UINTN Size;
|
||||||
///
|
///
|
||||||
/// Image attributes that are supported by this device. See 'Image Attribute Definitions'
|
/// Image attributes that are supported by this device. See 'Image Attribute Definitions'
|
||||||
/// for possible returned values of this parameter. A value of 1 indicates the attribute is
|
/// for possible returned values of this parameter. A value of 1 indicates the attribute is
|
||||||
@ -249,32 +248,32 @@ typedef struct {
|
|||||||
/// value of 0 indicates the attribute is not supported and the current setting value in
|
/// value of 0 indicates the attribute is not supported and the current setting value in
|
||||||
/// AttributesSetting is meaningless.
|
/// AttributesSetting is meaningless.
|
||||||
///
|
///
|
||||||
UINT64 AttributesSupported;
|
UINT64 AttributesSupported;
|
||||||
///
|
///
|
||||||
/// Image attributes. See 'Image Attribute Definitions' for possible returned values of
|
/// Image attributes. See 'Image Attribute Definitions' for possible returned values of
|
||||||
/// this parameter.
|
/// this parameter.
|
||||||
///
|
///
|
||||||
UINT64 AttributesSetting;
|
UINT64 AttributesSetting;
|
||||||
///
|
///
|
||||||
/// Image compatibilities. See 'Image Compatibility Definitions' for possible returned
|
/// Image compatibilities. See 'Image Compatibility Definitions' for possible returned
|
||||||
/// values of this parameter.
|
/// values of this parameter.
|
||||||
///
|
///
|
||||||
UINT64 Compatibilities;
|
UINT64 Compatibilities;
|
||||||
///
|
///
|
||||||
/// Describes the lowest ImageDescriptor version that the device will accept. Only
|
/// Describes the lowest ImageDescriptor version that the device will accept. Only
|
||||||
/// present in version 2 or higher.
|
/// present in version 2 or higher.
|
||||||
UINT32 LowestSupportedImageVersion;
|
UINT32 LowestSupportedImageVersion;
|
||||||
} EFI_FIRMWARE_IMAGE_DESCRIPTOR_V2;
|
} EFI_FIRMWARE_IMAGE_DESCRIPTOR_V2;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
LIST_ENTRY Link;
|
LIST_ENTRY Link;
|
||||||
EFI_HANDLE TheHandle;
|
EFI_HANDLE TheHandle;
|
||||||
UINTN TheIndex;
|
UINTN TheIndex;
|
||||||
}HANDLE_LIST;
|
} HANDLE_LIST;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
HANDLE_LIST List;
|
HANDLE_LIST List;
|
||||||
UINTN NextIndex;
|
UINTN NextIndex;
|
||||||
} HANDLE_INDEX_LIST;
|
} HANDLE_INDEX_LIST;
|
||||||
|
|
||||||
typedef
|
typedef
|
||||||
@ -284,11 +283,10 @@ CHAR16 *
|
|||||||
IN CONST BOOLEAN Verbose
|
IN CONST BOOLEAN Verbose
|
||||||
);
|
);
|
||||||
|
|
||||||
typedef struct _GUID_INFO_BLOCK{
|
typedef struct _GUID_INFO_BLOCK {
|
||||||
EFI_STRING_ID StringId;
|
EFI_STRING_ID StringId;
|
||||||
EFI_GUID *GuidId;
|
EFI_GUID *GuidId;
|
||||||
DUMP_PROTOCOL_INFO DumpInfo;
|
DUMP_PROTOCOL_INFO DumpInfo;
|
||||||
} GUID_INFO_BLOCK;
|
} GUID_INFO_BLOCK;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -12,16 +12,16 @@
|
|||||||
#include "AcpiView.h"
|
#include "AcpiView.h"
|
||||||
#include "AcpiViewConfig.h"
|
#include "AcpiViewConfig.h"
|
||||||
|
|
||||||
STATIC UINT32 gIndent;
|
STATIC UINT32 gIndent;
|
||||||
STATIC UINT32 mTableErrorCount;
|
STATIC UINT32 mTableErrorCount;
|
||||||
STATIC UINT32 mTableWarningCount;
|
STATIC UINT32 mTableWarningCount;
|
||||||
|
|
||||||
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the ACPI header.
|
An ACPI_PARSER array describing the ACPI header.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER AcpiHeaderParser[] = {
|
STATIC CONST ACPI_PARSER AcpiHeaderParser[] = {
|
||||||
PARSE_ACPI_HEADER (&AcpiHdrInfo)
|
PARSE_ACPI_HEADER (&AcpiHdrInfo)
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -113,21 +113,21 @@ IncrementWarningCount (
|
|||||||
BOOLEAN
|
BOOLEAN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
VerifyChecksum (
|
VerifyChecksum (
|
||||||
IN BOOLEAN Log,
|
IN BOOLEAN Log,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 Length
|
IN UINT32 Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINTN ByteCount;
|
UINTN ByteCount;
|
||||||
UINT8 Checksum;
|
UINT8 Checksum;
|
||||||
UINTN OriginalAttribute;
|
UINTN OriginalAttribute;
|
||||||
|
|
||||||
//
|
//
|
||||||
// set local variables to suppress incorrect compiler/analyzer warnings
|
// set local variables to suppress incorrect compiler/analyzer warnings
|
||||||
//
|
//
|
||||||
OriginalAttribute = 0;
|
OriginalAttribute = 0;
|
||||||
ByteCount = 0;
|
ByteCount = 0;
|
||||||
Checksum = 0;
|
Checksum = 0;
|
||||||
|
|
||||||
while (ByteCount < Length) {
|
while (ByteCount < Length) {
|
||||||
Checksum += *(Ptr++);
|
Checksum += *(Ptr++);
|
||||||
@ -140,22 +140,29 @@ VerifyChecksum (
|
|||||||
if (GetColourHighlighting ()) {
|
if (GetColourHighlighting ()) {
|
||||||
gST->ConOut->SetAttribute (
|
gST->ConOut->SetAttribute (
|
||||||
gST->ConOut,
|
gST->ConOut,
|
||||||
EFI_TEXT_ATTR (EFI_GREEN,
|
EFI_TEXT_ATTR (
|
||||||
((OriginalAttribute&(BIT4|BIT5|BIT6))>>4))
|
EFI_GREEN,
|
||||||
|
((OriginalAttribute&(BIT4|BIT5|BIT6))>>4)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Print (L"Table Checksum : OK\n\n");
|
Print (L"Table Checksum : OK\n\n");
|
||||||
} else {
|
} else {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
if (GetColourHighlighting ()) {
|
if (GetColourHighlighting ()) {
|
||||||
gST->ConOut->SetAttribute (
|
gST->ConOut->SetAttribute (
|
||||||
gST->ConOut,
|
gST->ConOut,
|
||||||
EFI_TEXT_ATTR (EFI_RED,
|
EFI_TEXT_ATTR (
|
||||||
((OriginalAttribute&(BIT4|BIT5|BIT6))>>4))
|
EFI_RED,
|
||||||
|
((OriginalAttribute&(BIT4|BIT5|BIT6))>>4)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Print (L"Table Checksum : FAILED (0x%X)\n\n", Checksum);
|
Print (L"Table Checksum : FAILED (0x%X)\n\n", Checksum);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GetColourHighlighting ()) {
|
if (GetColourHighlighting ()) {
|
||||||
gST->ConOut->SetAttribute (gST->ConOut, OriginalAttribute);
|
gST->ConOut->SetAttribute (gST->ConOut, OriginalAttribute);
|
||||||
}
|
}
|
||||||
@ -173,16 +180,16 @@ VerifyChecksum (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DumpRaw (
|
DumpRaw (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 Length
|
IN UINT32 Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINTN ByteCount;
|
UINTN ByteCount;
|
||||||
UINTN PartLineChars;
|
UINTN PartLineChars;
|
||||||
UINTN AsciiBufferIndex;
|
UINTN AsciiBufferIndex;
|
||||||
CHAR8 AsciiBuffer[17];
|
CHAR8 AsciiBuffer[17];
|
||||||
|
|
||||||
ByteCount = 0;
|
ByteCount = 0;
|
||||||
AsciiBufferIndex = 0;
|
AsciiBufferIndex = 0;
|
||||||
|
|
||||||
Print (L"Address : 0x%p\n", Ptr);
|
Print (L"Address : 0x%p\n", Ptr);
|
||||||
@ -216,6 +223,7 @@ DumpRaw (
|
|||||||
if ((Length & 0x0F) <= 8) {
|
if ((Length & 0x0F) <= 8) {
|
||||||
PartLineChars += 2;
|
PartLineChars += 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (PartLineChars > 0) {
|
while (PartLineChars > 0) {
|
||||||
Print (L" ");
|
Print (L" ");
|
||||||
PartLineChars--;
|
PartLineChars--;
|
||||||
@ -236,8 +244,8 @@ DumpRaw (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DumpUint8 (
|
DumpUint8 (
|
||||||
IN CONST CHAR16* Format,
|
IN CONST CHAR16 *Format,
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Print (Format, *Ptr);
|
Print (Format, *Ptr);
|
||||||
@ -252,11 +260,11 @@ DumpUint8 (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DumpUint16 (
|
DumpUint16 (
|
||||||
IN CONST CHAR16* Format,
|
IN CONST CHAR16 *Format,
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Print (Format, *(UINT16*)Ptr);
|
Print (Format, *(UINT16 *)Ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -268,11 +276,11 @@ DumpUint16 (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DumpUint32 (
|
DumpUint32 (
|
||||||
IN CONST CHAR16* Format,
|
IN CONST CHAR16 *Format,
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Print (Format, *(UINT32*)Ptr);
|
Print (Format, *(UINT32 *)Ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -284,19 +292,19 @@ DumpUint32 (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DumpUint64 (
|
DumpUint64 (
|
||||||
IN CONST CHAR16* Format,
|
IN CONST CHAR16 *Format,
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
// Some fields are not aligned and this causes alignment faults
|
// Some fields are not aligned and this causes alignment faults
|
||||||
// on ARM platforms if the compiler generates LDRD instructions.
|
// on ARM platforms if the compiler generates LDRD instructions.
|
||||||
// Perform word access so that LDRD instructions are not generated.
|
// Perform word access so that LDRD instructions are not generated.
|
||||||
UINT64 Val;
|
UINT64 Val;
|
||||||
|
|
||||||
Val = *(UINT32*)(Ptr + sizeof (UINT32));
|
Val = *(UINT32 *)(Ptr + sizeof (UINT32));
|
||||||
|
|
||||||
Val = LShiftU64(Val,32);
|
Val = LShiftU64 (Val, 32);
|
||||||
Val |= (UINT64)*(UINT32*)Ptr;
|
Val |= (UINT64)*(UINT32 *)Ptr;
|
||||||
|
|
||||||
Print (Format, Val);
|
Print (Format, Val);
|
||||||
}
|
}
|
||||||
@ -313,8 +321,8 @@ DumpUint64 (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
Dump3Chars (
|
Dump3Chars (
|
||||||
IN CONST CHAR16* Format OPTIONAL,
|
IN CONST CHAR16 *Format OPTIONAL,
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Print (
|
Print (
|
||||||
@ -337,8 +345,8 @@ Dump3Chars (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
Dump4Chars (
|
Dump4Chars (
|
||||||
IN CONST CHAR16* Format OPTIONAL,
|
IN CONST CHAR16 *Format OPTIONAL,
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Print (
|
Print (
|
||||||
@ -362,8 +370,8 @@ Dump4Chars (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
Dump6Chars (
|
Dump6Chars (
|
||||||
IN CONST CHAR16* Format OPTIONAL,
|
IN CONST CHAR16 *Format OPTIONAL,
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Print (
|
Print (
|
||||||
@ -389,8 +397,8 @@ Dump6Chars (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
Dump8Chars (
|
Dump8Chars (
|
||||||
IN CONST CHAR16* Format OPTIONAL,
|
IN CONST CHAR16 *Format OPTIONAL,
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Print (
|
Print (
|
||||||
@ -418,8 +426,8 @@ Dump8Chars (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
Dump12Chars (
|
Dump12Chars (
|
||||||
IN CONST CHAR16* Format OPTIONAL,
|
IN CONST CHAR16 *Format OPTIONAL,
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Print (
|
Print (
|
||||||
@ -454,9 +462,9 @@ Dump12Chars (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
PrintFieldName (
|
PrintFieldName (
|
||||||
IN UINT32 Indent,
|
IN UINT32 Indent,
|
||||||
IN CONST CHAR16* FieldName
|
IN CONST CHAR16 *FieldName
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Print (
|
Print (
|
||||||
L"%*a%-*s : ",
|
L"%*a%-*s : ",
|
||||||
@ -498,38 +506,41 @@ EFIAPI
|
|||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT32 Indent,
|
IN UINT32 Indent,
|
||||||
IN CONST CHAR8* AsciiName OPTIONAL,
|
IN CONST CHAR8 *AsciiName OPTIONAL,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 Length,
|
IN UINT32 Length,
|
||||||
IN CONST ACPI_PARSER* Parser,
|
IN CONST ACPI_PARSER *Parser,
|
||||||
IN UINT32 ParserItems
|
IN UINT32 ParserItems
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Index;
|
UINT32 Index;
|
||||||
UINT32 Offset;
|
UINT32 Offset;
|
||||||
BOOLEAN HighLight;
|
BOOLEAN HighLight;
|
||||||
UINTN OriginalAttribute;
|
UINTN OriginalAttribute;
|
||||||
|
|
||||||
//
|
//
|
||||||
// set local variables to suppress incorrect compiler/analyzer warnings
|
// set local variables to suppress incorrect compiler/analyzer warnings
|
||||||
//
|
//
|
||||||
OriginalAttribute = 0;
|
OriginalAttribute = 0;
|
||||||
Offset = 0;
|
Offset = 0;
|
||||||
|
|
||||||
// Increment the Indent
|
// Increment the Indent
|
||||||
gIndent += Indent;
|
gIndent += Indent;
|
||||||
|
|
||||||
if (Trace && (AsciiName != NULL)){
|
if (Trace && (AsciiName != NULL)) {
|
||||||
HighLight = GetColourHighlighting ();
|
HighLight = GetColourHighlighting ();
|
||||||
|
|
||||||
if (HighLight) {
|
if (HighLight) {
|
||||||
OriginalAttribute = gST->ConOut->Mode->Attribute;
|
OriginalAttribute = gST->ConOut->Mode->Attribute;
|
||||||
gST->ConOut->SetAttribute (
|
gST->ConOut->SetAttribute (
|
||||||
gST->ConOut,
|
gST->ConOut,
|
||||||
EFI_TEXT_ATTR(EFI_YELLOW,
|
EFI_TEXT_ATTR (
|
||||||
((OriginalAttribute&(BIT4|BIT5|BIT6))>>4))
|
EFI_YELLOW,
|
||||||
|
((OriginalAttribute&(BIT4|BIT5|BIT6))>>4)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Print (
|
Print (
|
||||||
L"%*a%-*a :\n",
|
L"%*a%-*a :\n",
|
||||||
gIndent,
|
gIndent,
|
||||||
@ -544,7 +555,6 @@ ParseAcpi (
|
|||||||
|
|
||||||
for (Index = 0; Index < ParserItems; Index++) {
|
for (Index = 0; Index < ParserItems; Index++) {
|
||||||
if ((Offset + Parser[Index].Length) > Length) {
|
if ((Offset + Parser[Index].Length) > Length) {
|
||||||
|
|
||||||
// For fields outside the buffer length provided, reset any pointers
|
// For fields outside the buffer length provided, reset any pointers
|
||||||
// which were supposed to be updated by this function call
|
// which were supposed to be updated by this function call
|
||||||
if (Parser[Index].ItemPtr != NULL) {
|
if (Parser[Index].ItemPtr != NULL) {
|
||||||
@ -556,11 +566,12 @@ ParseAcpi (
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (GetConsistencyChecking () &&
|
if (GetConsistencyChecking () &&
|
||||||
(Offset != Parser[Index].Offset)) {
|
(Offset != Parser[Index].Offset))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"\nERROR: %a: Offset Mismatch for %s\n"
|
L"\nERROR: %a: Offset Mismatch for %s\n"
|
||||||
L"CurrentOffset = %d FieldOffset = %d\n",
|
L"CurrentOffset = %d FieldOffset = %d\n",
|
||||||
AsciiName,
|
AsciiName,
|
||||||
Parser[Index].NameStr,
|
Parser[Index].NameStr,
|
||||||
Offset,
|
Offset,
|
||||||
@ -597,20 +608,23 @@ ParseAcpi (
|
|||||||
);
|
);
|
||||||
} // switch
|
} // switch
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validating only makes sense if we are tracing
|
// Validating only makes sense if we are tracing
|
||||||
// the parsed table entries, to report by table name.
|
// the parsed table entries, to report by table name.
|
||||||
if (GetConsistencyChecking () &&
|
if (GetConsistencyChecking () &&
|
||||||
(Parser[Index].FieldValidator != NULL)) {
|
(Parser[Index].FieldValidator != NULL))
|
||||||
|
{
|
||||||
Parser[Index].FieldValidator (Ptr, Parser[Index].Context);
|
Parser[Index].FieldValidator (Ptr, Parser[Index].Context);
|
||||||
}
|
}
|
||||||
|
|
||||||
Print (L"\n");
|
Print (L"\n");
|
||||||
} // if (Trace)
|
} // if (Trace)
|
||||||
|
|
||||||
if (Parser[Index].ItemPtr != NULL) {
|
if (Parser[Index].ItemPtr != NULL) {
|
||||||
*Parser[Index].ItemPtr = (VOID*)Ptr;
|
*Parser[Index].ItemPtr = (VOID *)Ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ptr += Parser[Index].Length;
|
Ptr += Parser[Index].Length;
|
||||||
Offset += Parser[Index].Length;
|
Offset += Parser[Index].Length;
|
||||||
} // for
|
} // for
|
||||||
|
|
||||||
@ -624,12 +638,12 @@ ParseAcpi (
|
|||||||
The GasParser array is used by the ParseAcpi function to parse and/or trace
|
The GasParser array is used by the ParseAcpi function to parse and/or trace
|
||||||
the GAS structure.
|
the GAS structure.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER GasParser[] = {
|
STATIC CONST ACPI_PARSER GasParser[] = {
|
||||||
{L"Address Space ID", 1, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Address Space ID", 1, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Register Bit Width", 1, 1, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Register Bit Width", 1, 1, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Register Bit Offset", 1, 2, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Register Bit Offset", 1, 2, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Access Size", 1, 3, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Access Size", 1, 3, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Address", 8, 4, L"0x%lx", NULL, NULL, NULL, NULL}
|
{ L"Address", 8, 4, L"0x%lx", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -644,9 +658,9 @@ STATIC CONST ACPI_PARSER GasParser[] = {
|
|||||||
UINT32
|
UINT32
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DumpGasStruct (
|
DumpGasStruct (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 Indent,
|
IN UINT32 Indent,
|
||||||
IN UINT32 Length
|
IN UINT32 Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Print (L"\n");
|
Print (L"\n");
|
||||||
@ -669,8 +683,8 @@ DumpGasStruct (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DumpGas (
|
DumpGas (
|
||||||
IN CONST CHAR16* Format OPTIONAL,
|
IN CONST CHAR16 *Format OPTIONAL,
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
DumpGasStruct (Ptr, 2, sizeof (EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE));
|
DumpGasStruct (Ptr, 2, sizeof (EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE));
|
||||||
@ -686,7 +700,7 @@ DumpGas (
|
|||||||
UINT32
|
UINT32
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DumpAcpiHeader (
|
DumpAcpiHeader (
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return ParseAcpi (
|
return ParseAcpi (
|
||||||
@ -715,13 +729,13 @@ DumpAcpiHeader (
|
|||||||
UINT32
|
UINT32
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiHeader (
|
ParseAcpiHeader (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
OUT CONST UINT32** Signature,
|
OUT CONST UINT32 **Signature,
|
||||||
OUT CONST UINT32** Length,
|
OUT CONST UINT32 **Length,
|
||||||
OUT CONST UINT8** Revision
|
OUT CONST UINT8 **Revision
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 BytesParsed;
|
UINT32 BytesParsed;
|
||||||
|
|
||||||
BytesParsed = ParseAcpi (
|
BytesParsed = ParseAcpi (
|
||||||
FALSE,
|
FALSE,
|
||||||
@ -733,8 +747,8 @@ ParseAcpiHeader (
|
|||||||
);
|
);
|
||||||
|
|
||||||
*Signature = AcpiHdrInfo.Signature;
|
*Signature = AcpiHdrInfo.Signature;
|
||||||
*Length = AcpiHdrInfo.Length;
|
*Length = AcpiHdrInfo.Length;
|
||||||
*Revision = AcpiHdrInfo.Revision;
|
*Revision = AcpiHdrInfo.Revision;
|
||||||
|
|
||||||
return BytesParsed;
|
return BytesParsed;
|
||||||
}
|
}
|
||||||
|
@ -50,9 +50,9 @@ IncrementWarningCount (
|
|||||||
BOOLEAN
|
BOOLEAN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
VerifyChecksum (
|
VerifyChecksum (
|
||||||
IN BOOLEAN Log,
|
IN BOOLEAN Log,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 Length
|
IN UINT32 Length
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -64,8 +64,8 @@ VerifyChecksum (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DumpRaw (
|
DumpRaw (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 Length
|
IN UINT32 Length
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -77,8 +77,8 @@ DumpRaw (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DumpUint8 (
|
DumpUint8 (
|
||||||
IN CONST CHAR16* Format,
|
IN CONST CHAR16 *Format,
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -90,8 +90,8 @@ DumpUint8 (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DumpUint16 (
|
DumpUint16 (
|
||||||
IN CONST CHAR16* Format,
|
IN CONST CHAR16 *Format,
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -103,8 +103,8 @@ DumpUint16 (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DumpUint32 (
|
DumpUint32 (
|
||||||
IN CONST CHAR16* Format,
|
IN CONST CHAR16 *Format,
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -116,8 +116,8 @@ DumpUint32 (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DumpUint64 (
|
DumpUint64 (
|
||||||
IN CONST CHAR16* Format,
|
IN CONST CHAR16 *Format,
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -132,8 +132,8 @@ DumpUint64 (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
Dump3Chars (
|
Dump3Chars (
|
||||||
IN CONST CHAR16* Format OPTIONAL,
|
IN CONST CHAR16 *Format OPTIONAL,
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -148,8 +148,8 @@ Dump3Chars (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
Dump4Chars (
|
Dump4Chars (
|
||||||
IN CONST CHAR16* Format OPTIONAL,
|
IN CONST CHAR16 *Format OPTIONAL,
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -164,8 +164,8 @@ Dump4Chars (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
Dump6Chars (
|
Dump6Chars (
|
||||||
IN CONST CHAR16* Format OPTIONAL,
|
IN CONST CHAR16 *Format OPTIONAL,
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -180,8 +180,8 @@ Dump6Chars (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
Dump8Chars (
|
Dump8Chars (
|
||||||
IN CONST CHAR16* Format OPTIONAL,
|
IN CONST CHAR16 *Format OPTIONAL,
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -196,8 +196,8 @@ Dump8Chars (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
Dump12Chars (
|
Dump12Chars (
|
||||||
IN CONST CHAR16* Format OPTIONAL,
|
IN CONST CHAR16 *Format OPTIONAL,
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -215,8 +215,8 @@ Dump12Chars (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
PrintFieldName (
|
PrintFieldName (
|
||||||
IN UINT32 Indent,
|
IN UINT32 Indent,
|
||||||
IN CONST CHAR16* FieldName
|
IN CONST CHAR16 *FieldName
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -226,7 +226,7 @@ PrintFieldName (
|
|||||||
the 'Format' member of ACPI_PARSER.
|
the 'Format' member of ACPI_PARSER.
|
||||||
@param [in] Ptr Pointer to the start of the buffer.
|
@param [in] Ptr Pointer to the start of the buffer.
|
||||||
**/
|
**/
|
||||||
typedef VOID (EFIAPI *FNPTR_PRINT_FORMATTER)(CONST CHAR16* Format, UINT8* Ptr);
|
typedef VOID (EFIAPI *FNPTR_PRINT_FORMATTER)(CONST CHAR16 *Format, UINT8 *Ptr);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function pointer is the template for validating an ACPI table field.
|
This function pointer is the template for validating an ACPI table field.
|
||||||
@ -236,7 +236,7 @@ typedef VOID (EFIAPI *FNPTR_PRINT_FORMATTER)(CONST CHAR16* Format, UINT8* Ptr);
|
|||||||
the 'Context' member of the ACPI_PARSER.
|
the 'Context' member of the ACPI_PARSER.
|
||||||
e.g. this could be a pointer to the ACPI table header.
|
e.g. this could be a pointer to the ACPI table header.
|
||||||
**/
|
**/
|
||||||
typedef VOID (EFIAPI *FNPTR_FIELD_VALIDATOR)(UINT8* Ptr, VOID* Context);
|
typedef VOID (EFIAPI *FNPTR_FIELD_VALIDATOR)(UINT8 *Ptr, VOID *Context);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
The ACPI_PARSER structure describes the fields of an ACPI table and
|
The ACPI_PARSER structure describes the fields of an ACPI table and
|
||||||
@ -258,48 +258,47 @@ typedef VOID (EFIAPI *FNPTR_FIELD_VALIDATOR)(UINT8* Ptr, VOID* Context);
|
|||||||
representing the field data.
|
representing the field data.
|
||||||
**/
|
**/
|
||||||
typedef struct AcpiParser {
|
typedef struct AcpiParser {
|
||||||
|
|
||||||
/// String describing the ACPI table field
|
/// String describing the ACPI table field
|
||||||
/// (Field column from ACPI table spec)
|
/// (Field column from ACPI table spec)
|
||||||
CONST CHAR16* NameStr;
|
CONST CHAR16 *NameStr;
|
||||||
|
|
||||||
/// The length of the field.
|
/// The length of the field.
|
||||||
/// (Byte Length column from ACPI table spec)
|
/// (Byte Length column from ACPI table spec)
|
||||||
UINT32 Length;
|
UINT32 Length;
|
||||||
|
|
||||||
/// The offset of the field from the start of the table.
|
/// The offset of the field from the start of the table.
|
||||||
/// (Byte Offset column from ACPI table spec)
|
/// (Byte Offset column from ACPI table spec)
|
||||||
UINT32 Offset;
|
UINT32 Offset;
|
||||||
|
|
||||||
/// Optional Print() style format string for tracing the data. If not
|
/// Optional Print() style format string for tracing the data. If not
|
||||||
/// used this must be set to NULL.
|
/// used this must be set to NULL.
|
||||||
CONST CHAR16* Format;
|
CONST CHAR16 *Format;
|
||||||
|
|
||||||
/// Optional pointer to a print formatter function which
|
/// Optional pointer to a print formatter function which
|
||||||
/// is typically used to trace complex field information.
|
/// is typically used to trace complex field information.
|
||||||
/// If not used this must be set to NULL.
|
/// If not used this must be set to NULL.
|
||||||
/// The Format string is passed to the PrintFormatter function
|
/// The Format string is passed to the PrintFormatter function
|
||||||
/// but may be ignored by the implementation code.
|
/// but may be ignored by the implementation code.
|
||||||
FNPTR_PRINT_FORMATTER PrintFormatter;
|
FNPTR_PRINT_FORMATTER PrintFormatter;
|
||||||
|
|
||||||
/// Optional pointer which may be set to request the parser to update
|
/// Optional pointer which may be set to request the parser to update
|
||||||
/// a pointer to the field data. This value is set after the FieldValidator
|
/// a pointer to the field data. This value is set after the FieldValidator
|
||||||
/// has been called and therefore should not be used by the FieldValidator.
|
/// has been called and therefore should not be used by the FieldValidator.
|
||||||
/// If unused this must be set to NULL.
|
/// If unused this must be set to NULL.
|
||||||
VOID** ItemPtr;
|
VOID **ItemPtr;
|
||||||
|
|
||||||
/// Optional pointer to a field validator function.
|
/// Optional pointer to a field validator function.
|
||||||
/// The function should directly report any appropriate error or warning
|
/// The function should directly report any appropriate error or warning
|
||||||
/// and invoke the appropriate counter update function.
|
/// and invoke the appropriate counter update function.
|
||||||
/// If not used this parameter must be set to NULL.
|
/// If not used this parameter must be set to NULL.
|
||||||
FNPTR_FIELD_VALIDATOR FieldValidator;
|
FNPTR_FIELD_VALIDATOR FieldValidator;
|
||||||
|
|
||||||
/// Optional pointer to context specific information,
|
/// Optional pointer to context specific information,
|
||||||
/// which the Field Validator function can use to determine
|
/// which the Field Validator function can use to determine
|
||||||
/// additional information about the ACPI table and make
|
/// additional information about the ACPI table and make
|
||||||
/// decisions about the field being validated.
|
/// decisions about the field being validated.
|
||||||
/// e.g. this could be a pointer to the ACPI table header
|
/// e.g. this could be a pointer to the ACPI table header
|
||||||
VOID* Context;
|
VOID *Context;
|
||||||
} ACPI_PARSER;
|
} ACPI_PARSER;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -308,23 +307,23 @@ typedef struct AcpiParser {
|
|||||||
**/
|
**/
|
||||||
typedef struct AcpiDescriptionHeaderInfo {
|
typedef struct AcpiDescriptionHeaderInfo {
|
||||||
/// ACPI table signature
|
/// ACPI table signature
|
||||||
UINT32* Signature;
|
UINT32 *Signature;
|
||||||
/// Length of the ACPI table
|
/// Length of the ACPI table
|
||||||
UINT32* Length;
|
UINT32 *Length;
|
||||||
/// Revision
|
/// Revision
|
||||||
UINT8* Revision;
|
UINT8 *Revision;
|
||||||
/// Checksum
|
/// Checksum
|
||||||
UINT8* Checksum;
|
UINT8 *Checksum;
|
||||||
/// OEM Id - length is 6 bytes
|
/// OEM Id - length is 6 bytes
|
||||||
UINT8* OemId;
|
UINT8 *OemId;
|
||||||
/// OEM table Id
|
/// OEM table Id
|
||||||
UINT64* OemTableId;
|
UINT64 *OemTableId;
|
||||||
/// OEM revision Id
|
/// OEM revision Id
|
||||||
UINT32* OemRevision;
|
UINT32 *OemRevision;
|
||||||
/// Creator Id
|
/// Creator Id
|
||||||
UINT32* CreatorId;
|
UINT32 *CreatorId;
|
||||||
/// Creator revision
|
/// Creator revision
|
||||||
UINT32* CreatorRevision;
|
UINT32 *CreatorRevision;
|
||||||
} ACPI_DESCRIPTION_HEADER_INFO;
|
} ACPI_DESCRIPTION_HEADER_INFO;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -358,10 +357,10 @@ EFIAPI
|
|||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT32 Indent,
|
IN UINT32 Indent,
|
||||||
IN CONST CHAR8* AsciiName OPTIONAL,
|
IN CONST CHAR8 *AsciiName OPTIONAL,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 Length,
|
IN UINT32 Length,
|
||||||
IN CONST ACPI_PARSER* Parser,
|
IN CONST ACPI_PARSER *Parser,
|
||||||
IN UINT32 ParserItems
|
IN UINT32 ParserItems
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -371,7 +370,7 @@ ParseAcpi (
|
|||||||
@param [in] Parser The name of the ACPI_PARSER array describing the
|
@param [in] Parser The name of the ACPI_PARSER array describing the
|
||||||
ACPI table fields.
|
ACPI table fields.
|
||||||
**/
|
**/
|
||||||
#define PARSER_PARAMS(Parser) Parser, sizeof (Parser) / sizeof (Parser[0])
|
#define PARSER_PARAMS(Parser) Parser, sizeof (Parser) / sizeof (Parser[0])
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This is a helper macro for describing the ACPI header fields.
|
This is a helper macro for describing the ACPI header fields.
|
||||||
@ -410,9 +409,9 @@ ParseAcpi (
|
|||||||
UINT32
|
UINT32
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DumpGasStruct (
|
DumpGasStruct (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 Indent,
|
IN UINT32 Indent,
|
||||||
IN UINT32 Length
|
IN UINT32 Length
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -424,8 +423,8 @@ DumpGasStruct (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DumpGas (
|
DumpGas (
|
||||||
IN CONST CHAR16* Format OPTIONAL,
|
IN CONST CHAR16 *Format OPTIONAL,
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -438,7 +437,7 @@ DumpGas (
|
|||||||
UINT32
|
UINT32
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DumpAcpiHeader (
|
DumpAcpiHeader (
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -457,10 +456,10 @@ DumpAcpiHeader (
|
|||||||
UINT32
|
UINT32
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiHeader (
|
ParseAcpiHeader (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
OUT CONST UINT32** Signature,
|
OUT CONST UINT32 **Signature,
|
||||||
OUT CONST UINT32** Length,
|
OUT CONST UINT32 **Length,
|
||||||
OUT CONST UINT8** Revision
|
OUT CONST UINT8 **Revision
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -478,10 +477,10 @@ ParseAcpiHeader (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiAest (
|
ParseAcpiAest (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -499,10 +498,10 @@ ParseAcpiAest (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiBgrt (
|
ParseAcpiBgrt (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -520,10 +519,10 @@ ParseAcpiBgrt (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiDbg2 (
|
ParseAcpiDbg2 (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -541,10 +540,10 @@ ParseAcpiDbg2 (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiDsdt (
|
ParseAcpiDsdt (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -562,10 +561,10 @@ ParseAcpiDsdt (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiFacs (
|
ParseAcpiFacs (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -583,10 +582,10 @@ ParseAcpiFacs (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiFadt (
|
ParseAcpiFadt (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -608,10 +607,10 @@ ParseAcpiFadt (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiGtdt (
|
ParseAcpiGtdt (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -634,10 +633,10 @@ ParseAcpiGtdt (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiHmat (
|
ParseAcpiHmat (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -663,10 +662,10 @@ ParseAcpiHmat (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiIort (
|
ParseAcpiIort (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -692,10 +691,10 @@ ParseAcpiIort (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiMadt (
|
ParseAcpiMadt (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -713,10 +712,10 @@ ParseAcpiMadt (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiMcfg (
|
ParseAcpiMcfg (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -735,10 +734,10 @@ ParseAcpiMcfg (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiPcct (
|
ParseAcpiPcct (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -756,10 +755,10 @@ ParseAcpiPcct (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiPptt (
|
ParseAcpiPptt (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -779,10 +778,10 @@ ParseAcpiPptt (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiRsdp (
|
ParseAcpiRsdp (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -803,10 +802,10 @@ ParseAcpiRsdp (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiSlit (
|
ParseAcpiSlit (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -824,10 +823,10 @@ ParseAcpiSlit (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiSpcr (
|
ParseAcpiSpcr (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -851,10 +850,10 @@ ParseAcpiSpcr (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiSrat (
|
ParseAcpiSrat (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -872,10 +871,10 @@ ParseAcpiSrat (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiSsdt (
|
ParseAcpiSsdt (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -892,10 +891,10 @@ ParseAcpiSsdt (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiXsdt (
|
ParseAcpiXsdt (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
);
|
);
|
||||||
|
|
||||||
#endif // ACPIPARSER_H_
|
#endif // ACPIPARSER_H_
|
||||||
|
@ -19,14 +19,14 @@
|
|||||||
#include "AcpiView.h"
|
#include "AcpiView.h"
|
||||||
#include "AcpiViewConfig.h"
|
#include "AcpiViewConfig.h"
|
||||||
|
|
||||||
#if defined(MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
||||||
#include "Arm/SbbrValidator.h"
|
#include "Arm/SbbrValidator.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
A list of registered ACPI table parsers.
|
A list of registered ACPI table parsers.
|
||||||
**/
|
**/
|
||||||
STATIC ACPI_TABLE_PARSER mTableParserList[MAX_ACPI_TABLE_PARSERS];
|
STATIC ACPI_TABLE_PARSER mTableParserList[MAX_ACPI_TABLE_PARSERS];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Register the ACPI table Parser
|
Register the ACPI table Parser
|
||||||
@ -46,11 +46,11 @@ STATIC ACPI_TABLE_PARSER mTableParserList[MAX_ACPI_TABLE_PARSERS];
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
RegisterParser (
|
RegisterParser (
|
||||||
IN UINT32 Signature,
|
IN UINT32 Signature,
|
||||||
IN PARSE_ACPI_TABLE_PROC ParserProc
|
IN PARSE_ACPI_TABLE_PROC ParserProc
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Index;
|
UINT32 Index;
|
||||||
|
|
||||||
if ((ParserProc == NULL) || (Signature == ACPI_PARSER_SIGNATURE_NULL)) {
|
if ((ParserProc == NULL) || (Signature == ACPI_PARSER_SIGNATURE_NULL)) {
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
@ -70,12 +70,12 @@ RegisterParser (
|
|||||||
|
|
||||||
// Find the first free slot and register the parser
|
// Find the first free slot and register the parser
|
||||||
for (Index = 0;
|
for (Index = 0;
|
||||||
Index < (sizeof (mTableParserList) / sizeof (mTableParserList[0]));
|
Index < (sizeof (mTableParserList) / sizeof (mTableParserList[0]));
|
||||||
Index++)
|
Index++)
|
||||||
{
|
{
|
||||||
if (mTableParserList[Index].Signature == ACPI_PARSER_SIGNATURE_NULL) {
|
if (mTableParserList[Index].Signature == ACPI_PARSER_SIGNATURE_NULL) {
|
||||||
mTableParserList[Index].Signature = Signature;
|
mTableParserList[Index].Signature = Signature;
|
||||||
mTableParserList[Index].Parser = ParserProc;
|
mTableParserList[Index].Parser = ParserProc;
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -98,10 +98,10 @@ RegisterParser (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DeregisterParser (
|
DeregisterParser (
|
||||||
IN UINT32 Signature
|
IN UINT32 Signature
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Index;
|
UINT32 Index;
|
||||||
|
|
||||||
if (Signature == ACPI_PARSER_SIGNATURE_NULL) {
|
if (Signature == ACPI_PARSER_SIGNATURE_NULL) {
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
@ -113,7 +113,7 @@ DeregisterParser (
|
|||||||
{
|
{
|
||||||
if (Signature == mTableParserList[Index].Signature) {
|
if (Signature == mTableParserList[Index].Signature) {
|
||||||
mTableParserList[Index].Signature = ACPI_PARSER_SIGNATURE_NULL;
|
mTableParserList[Index].Signature = ACPI_PARSER_SIGNATURE_NULL;
|
||||||
mTableParserList[Index].Parser = NULL;
|
mTableParserList[Index].Parser = NULL;
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -138,11 +138,11 @@ DeregisterParser (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
GetParser (
|
GetParser (
|
||||||
IN UINT32 Signature,
|
IN UINT32 Signature,
|
||||||
OUT PARSE_ACPI_TABLE_PROC * ParserProc
|
OUT PARSE_ACPI_TABLE_PROC *ParserProc
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Index;
|
UINT32 Index;
|
||||||
|
|
||||||
if ((ParserProc == NULL) || (Signature == ACPI_PARSER_SIGNATURE_NULL)) {
|
if ((ParserProc == NULL) || (Signature == ACPI_PARSER_SIGNATURE_NULL)) {
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
@ -179,16 +179,16 @@ GetParser (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ProcessAcpiTable (
|
ProcessAcpiTable (
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
BOOLEAN Trace;
|
BOOLEAN Trace;
|
||||||
CONST UINT32* AcpiTableSignature;
|
CONST UINT32 *AcpiTableSignature;
|
||||||
CONST UINT32* AcpiTableLength;
|
CONST UINT32 *AcpiTableLength;
|
||||||
CONST UINT8* AcpiTableRevision;
|
CONST UINT8 *AcpiTableRevision;
|
||||||
CONST UINT8* SignaturePtr;
|
CONST UINT8 *SignaturePtr;
|
||||||
PARSE_ACPI_TABLE_PROC ParserProc;
|
PARSE_ACPI_TABLE_PROC ParserProc;
|
||||||
|
|
||||||
ParseAcpiHeader (
|
ParseAcpiHeader (
|
||||||
Ptr,
|
Ptr,
|
||||||
@ -209,7 +209,7 @@ ProcessAcpiTable (
|
|||||||
// Do not process the ACPI table any further if the table length read
|
// Do not process the ACPI table any further if the table length read
|
||||||
// is invalid. The ACPI table should at least contain the table header.
|
// is invalid. The ACPI table should at least contain the table header.
|
||||||
if (*AcpiTableLength < sizeof (EFI_ACPI_DESCRIPTION_HEADER)) {
|
if (*AcpiTableLength < sizeof (EFI_ACPI_DESCRIPTION_HEADER)) {
|
||||||
SignaturePtr = (CONST UINT8*)AcpiTableSignature;
|
SignaturePtr = (CONST UINT8 *)AcpiTableSignature;
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Invalid %c%c%c%c table length. Length = %d\n",
|
L"ERROR: Invalid %c%c%c%c table length. Length = %d\n",
|
||||||
@ -227,11 +227,12 @@ ProcessAcpiTable (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
||||||
if (GetMandatoryTableValidate ()) {
|
if (GetMandatoryTableValidate ()) {
|
||||||
ArmSbbrIncrementTableCount (*AcpiTableSignature);
|
ArmSbbrIncrementTableCount (*AcpiTableSignature);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
#endif
|
||||||
|
|
||||||
Status = GetParser (*AcpiTableSignature, &ParserProc);
|
Status = GetParser (*AcpiTableSignature, &ParserProc);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
@ -239,6 +240,7 @@ ProcessAcpiTable (
|
|||||||
if (Trace) {
|
if (Trace) {
|
||||||
DumpAcpiHeader (Ptr);
|
DumpAcpiHeader (Ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,11 +11,11 @@
|
|||||||
/**
|
/**
|
||||||
The maximum number of ACPI table parsers.
|
The maximum number of ACPI table parsers.
|
||||||
*/
|
*/
|
||||||
#define MAX_ACPI_TABLE_PARSERS 32
|
#define MAX_ACPI_TABLE_PARSERS 32
|
||||||
|
|
||||||
/** An invalid/NULL signature value.
|
/** An invalid/NULL signature value.
|
||||||
*/
|
*/
|
||||||
#define ACPI_PARSER_SIGNATURE_NULL 0
|
#define ACPI_PARSER_SIGNATURE_NULL 0
|
||||||
|
|
||||||
/**
|
/**
|
||||||
A function that parses the ACPI table.
|
A function that parses the ACPI table.
|
||||||
@ -27,9 +27,9 @@
|
|||||||
**/
|
**/
|
||||||
typedef
|
typedef
|
||||||
VOID
|
VOID
|
||||||
(EFIAPI * PARSE_ACPI_TABLE_PROC) (
|
(EFIAPI *PARSE_ACPI_TABLE_PROC)(
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
);
|
);
|
||||||
@ -39,10 +39,10 @@ VOID
|
|||||||
**/
|
**/
|
||||||
typedef struct AcpiTableParser {
|
typedef struct AcpiTableParser {
|
||||||
/// ACPI table signature
|
/// ACPI table signature
|
||||||
UINT32 Signature;
|
UINT32 Signature;
|
||||||
|
|
||||||
/// The ACPI table parser function.
|
/// The ACPI table parser function.
|
||||||
PARSE_ACPI_TABLE_PROC Parser;
|
PARSE_ACPI_TABLE_PROC Parser;
|
||||||
} ACPI_TABLE_PARSER;
|
} ACPI_TABLE_PARSER;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -63,8 +63,8 @@ typedef struct AcpiTableParser {
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
RegisterParser (
|
RegisterParser (
|
||||||
IN UINT32 Signature,
|
IN UINT32 Signature,
|
||||||
IN PARSE_ACPI_TABLE_PROC ParserProc
|
IN PARSE_ACPI_TABLE_PROC ParserProc
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -81,7 +81,7 @@ RegisterParser (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DeregisterParser (
|
DeregisterParser (
|
||||||
IN UINT32 Signature
|
IN UINT32 Signature
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -101,7 +101,7 @@ DeregisterParser (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ProcessAcpiTable (
|
ProcessAcpiTable (
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -120,8 +120,8 @@ ProcessAcpiTable (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
GetParser (
|
GetParser (
|
||||||
IN UINT32 Signature,
|
IN UINT32 Signature,
|
||||||
OUT PARSE_ACPI_TABLE_PROC * ParserProc
|
OUT PARSE_ACPI_TABLE_PROC *ParserProc
|
||||||
);
|
);
|
||||||
|
|
||||||
#endif // ACPITABLEPARSER_H_
|
#endif // ACPITABLEPARSER_H_
|
||||||
|
@ -23,12 +23,12 @@
|
|||||||
#include "AcpiView.h"
|
#include "AcpiView.h"
|
||||||
#include "AcpiViewConfig.h"
|
#include "AcpiViewConfig.h"
|
||||||
|
|
||||||
#if defined(MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
||||||
#include "Arm/SbbrValidator.h"
|
#include "Arm/SbbrValidator.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
STATIC UINT32 mTableCount;
|
STATIC UINT32 mTableCount;
|
||||||
STATIC UINT32 mBinTableCount;
|
STATIC UINT32 mBinTableCount;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function dumps the ACPI table to a file.
|
This function dumps the ACPI table to a file.
|
||||||
@ -42,13 +42,13 @@ STATIC UINT32 mBinTableCount;
|
|||||||
STATIC
|
STATIC
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
DumpAcpiTableToFile (
|
DumpAcpiTableToFile (
|
||||||
IN CONST UINT8* Ptr,
|
IN CONST UINT8 *Ptr,
|
||||||
IN CONST UINTN Length
|
IN CONST UINTN Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
CHAR16 FileNameBuffer[MAX_FILE_NAME_LEN];
|
CHAR16 FileNameBuffer[MAX_FILE_NAME_LEN];
|
||||||
UINTN TransferBytes;
|
UINTN TransferBytes;
|
||||||
SELECTED_ACPI_TABLE *SelectedTable;
|
SELECTED_ACPI_TABLE *SelectedTable;
|
||||||
|
|
||||||
GetSelectedAcpiTable (&SelectedTable);
|
GetSelectedAcpiTable (&SelectedTable);
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ DumpAcpiTableToFile (
|
|||||||
BOOLEAN
|
BOOLEAN
|
||||||
ProcessTableReportOptions (
|
ProcessTableReportOptions (
|
||||||
IN CONST UINT32 Signature,
|
IN CONST UINT32 Signature,
|
||||||
IN CONST UINT8* TablePtr,
|
IN CONST UINT8 *TablePtr,
|
||||||
IN CONST UINT32 Length
|
IN CONST UINT32 Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -92,9 +92,9 @@ ProcessTableReportOptions (
|
|||||||
// set local variables to suppress incorrect compiler/analyzer warnings
|
// set local variables to suppress incorrect compiler/analyzer warnings
|
||||||
//
|
//
|
||||||
OriginalAttribute = 0;
|
OriginalAttribute = 0;
|
||||||
SignaturePtr = (UINT8*)(UINTN)&Signature;
|
SignaturePtr = (UINT8 *)(UINTN)&Signature;
|
||||||
Log = FALSE;
|
Log = FALSE;
|
||||||
HighLight = GetColourHighlighting ();
|
HighLight = GetColourHighlighting ();
|
||||||
GetSelectedAcpiTable (&SelectedTable);
|
GetSelectedAcpiTable (&SelectedTable);
|
||||||
|
|
||||||
switch (GetReportOption ()) {
|
switch (GetReportOption ()) {
|
||||||
@ -103,9 +103,10 @@ ProcessTableReportOptions (
|
|||||||
break;
|
break;
|
||||||
case ReportSelected:
|
case ReportSelected:
|
||||||
if (Signature == SelectedTable->Type) {
|
if (Signature == SelectedTable->Type) {
|
||||||
Log = TRUE;
|
Log = TRUE;
|
||||||
SelectedTable->Found = TRUE;
|
SelectedTable->Found = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case ReportTableList:
|
case ReportTableList:
|
||||||
if (mTableCount == 0) {
|
if (mTableCount == 0) {
|
||||||
@ -113,15 +114,19 @@ ProcessTableReportOptions (
|
|||||||
OriginalAttribute = gST->ConOut->Mode->Attribute;
|
OriginalAttribute = gST->ConOut->Mode->Attribute;
|
||||||
gST->ConOut->SetAttribute (
|
gST->ConOut->SetAttribute (
|
||||||
gST->ConOut,
|
gST->ConOut,
|
||||||
EFI_TEXT_ATTR(EFI_CYAN,
|
EFI_TEXT_ATTR (
|
||||||
((OriginalAttribute&(BIT4|BIT5|BIT6))>>4))
|
EFI_CYAN,
|
||||||
|
((OriginalAttribute&(BIT4|BIT5|BIT6))>>4)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Print (L"\nInstalled Table(s):\n");
|
Print (L"\nInstalled Table(s):\n");
|
||||||
if (HighLight) {
|
if (HighLight) {
|
||||||
gST->ConOut->SetAttribute (gST->ConOut, OriginalAttribute);
|
gST->ConOut->SetAttribute (gST->ConOut, OriginalAttribute);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Print (
|
Print (
|
||||||
L"\t%4d. %c%c%c%c\n",
|
L"\t%4d. %c%c%c%c\n",
|
||||||
++mTableCount,
|
++mTableCount,
|
||||||
@ -136,6 +141,7 @@ ProcessTableReportOptions (
|
|||||||
SelectedTable->Found = TRUE;
|
SelectedTable->Found = TRUE;
|
||||||
DumpAcpiTableToFile (TablePtr, Length);
|
DumpAcpiTableToFile (TablePtr, Length);
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case ReportMax:
|
case ReportMax:
|
||||||
// We should never be here.
|
// We should never be here.
|
||||||
@ -148,10 +154,13 @@ ProcessTableReportOptions (
|
|||||||
OriginalAttribute = gST->ConOut->Mode->Attribute;
|
OriginalAttribute = gST->ConOut->Mode->Attribute;
|
||||||
gST->ConOut->SetAttribute (
|
gST->ConOut->SetAttribute (
|
||||||
gST->ConOut,
|
gST->ConOut,
|
||||||
EFI_TEXT_ATTR(EFI_LIGHTBLUE,
|
EFI_TEXT_ATTR (
|
||||||
((OriginalAttribute&(BIT4|BIT5|BIT6))>>4))
|
EFI_LIGHTBLUE,
|
||||||
|
((OriginalAttribute&(BIT4|BIT5|BIT6))>>4)
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Print (
|
Print (
|
||||||
L"\n\n --------------- %c%c%c%c Table --------------- \n\n",
|
L"\n\n --------------- %c%c%c%c Table --------------- \n\n",
|
||||||
SignaturePtr[0],
|
SignaturePtr[0],
|
||||||
@ -167,8 +176,6 @@ ProcessTableReportOptions (
|
|||||||
return Log;
|
return Log;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function iterates the configuration table entries in the
|
This function iterates the configuration table entries in the
|
||||||
system table, retrieves the RSDP pointer and starts parsing the ACPI tables.
|
system table, retrieves the RSDP pointer and starts parsing the ACPI tables.
|
||||||
@ -182,17 +189,17 @@ ProcessTableReportOptions (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
AcpiView (
|
AcpiView (
|
||||||
IN EFI_SYSTEM_TABLE* SystemTable
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
UINTN Index;
|
UINTN Index;
|
||||||
EFI_CONFIGURATION_TABLE* EfiConfigurationTable;
|
EFI_CONFIGURATION_TABLE *EfiConfigurationTable;
|
||||||
BOOLEAN FoundAcpiTable;
|
BOOLEAN FoundAcpiTable;
|
||||||
UINTN OriginalAttribute;
|
UINTN OriginalAttribute;
|
||||||
UINTN PrintAttribute;
|
UINTN PrintAttribute;
|
||||||
EREPORT_OPTION ReportOption;
|
EREPORT_OPTION ReportOption;
|
||||||
UINT8* RsdpPtr;
|
UINT8 *RsdpPtr;
|
||||||
UINT32 RsdpLength;
|
UINT32 RsdpLength;
|
||||||
UINT8 RsdpRevision;
|
UINT8 RsdpRevision;
|
||||||
PARSE_ACPI_TABLE_PROC RsdpParserProc;
|
PARSE_ACPI_TABLE_PROC RsdpParserProc;
|
||||||
@ -203,10 +210,10 @@ AcpiView (
|
|||||||
// set local variables to suppress incorrect compiler/analyzer warnings
|
// set local variables to suppress incorrect compiler/analyzer warnings
|
||||||
//
|
//
|
||||||
EfiConfigurationTable = NULL;
|
EfiConfigurationTable = NULL;
|
||||||
OriginalAttribute = 0;
|
OriginalAttribute = 0;
|
||||||
|
|
||||||
// Reset Table counts
|
// Reset Table counts
|
||||||
mTableCount = 0;
|
mTableCount = 0;
|
||||||
mBinTableCount = 0;
|
mBinTableCount = 0;
|
||||||
|
|
||||||
// Reset The error/warning counters
|
// Reset The error/warning counters
|
||||||
@ -219,16 +226,19 @@ AcpiView (
|
|||||||
// Search the table for an entry that matches the ACPI Table Guid
|
// Search the table for an entry that matches the ACPI Table Guid
|
||||||
FoundAcpiTable = FALSE;
|
FoundAcpiTable = FALSE;
|
||||||
for (Index = 0; Index < SystemTable->NumberOfTableEntries; Index++) {
|
for (Index = 0; Index < SystemTable->NumberOfTableEntries; Index++) {
|
||||||
if (CompareGuid (&gEfiAcpiTableGuid,
|
if (CompareGuid (
|
||||||
&(SystemTable->ConfigurationTable[Index].VendorGuid))) {
|
&gEfiAcpiTableGuid,
|
||||||
|
&(SystemTable->ConfigurationTable[Index].VendorGuid)
|
||||||
|
))
|
||||||
|
{
|
||||||
EfiConfigurationTable = &SystemTable->ConfigurationTable[Index];
|
EfiConfigurationTable = &SystemTable->ConfigurationTable[Index];
|
||||||
FoundAcpiTable = TRUE;
|
FoundAcpiTable = TRUE;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FoundAcpiTable) {
|
if (FoundAcpiTable) {
|
||||||
RsdpPtr = (UINT8*)EfiConfigurationTable->VendorTable;
|
RsdpPtr = (UINT8 *)EfiConfigurationTable->VendorTable;
|
||||||
|
|
||||||
// The RSDP revision is 1 byte starting at offset 15
|
// The RSDP revision is 1 byte starting at offset 15
|
||||||
RsdpRevision = *(RsdpPtr + RSDP_REVISION_OFFSET);
|
RsdpRevision = *(RsdpPtr + RSDP_REVISION_OFFSET);
|
||||||
@ -240,14 +250,15 @@ AcpiView (
|
|||||||
return EFI_UNSUPPORTED;
|
return EFI_UNSUPPORTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
||||||
if (GetMandatoryTableValidate ()) {
|
if (GetMandatoryTableValidate ()) {
|
||||||
ArmSbbrResetTableCounts ();
|
ArmSbbrResetTableCounts ();
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
#endif
|
||||||
|
|
||||||
// The RSDP length is 4 bytes starting at offset 20
|
// The RSDP length is 4 bytes starting at offset 20
|
||||||
RsdpLength = *(UINT32*)(RsdpPtr + RSDP_LENGTH_OFFSET);
|
RsdpLength = *(UINT32 *)(RsdpPtr + RSDP_LENGTH_OFFSET);
|
||||||
|
|
||||||
Trace = ProcessTableReportOptions (RSDP_TABLE_INFO, RsdpPtr, RsdpLength);
|
Trace = ProcessTableReportOptions (RSDP_TABLE_INFO, RsdpPtr, RsdpLength);
|
||||||
|
|
||||||
@ -265,7 +276,6 @@ AcpiView (
|
|||||||
RsdpLength,
|
RsdpLength,
|
||||||
RsdpRevision
|
RsdpRevision
|
||||||
);
|
);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
@ -274,45 +284,50 @@ AcpiView (
|
|||||||
return EFI_NOT_FOUND;
|
return EFI_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
||||||
if (GetMandatoryTableValidate ()) {
|
if (GetMandatoryTableValidate ()) {
|
||||||
ArmSbbrReqsValidate ((ARM_SBBR_VERSION)GetMandatoryTableSpec ());
|
ArmSbbrReqsValidate ((ARM_SBBR_VERSION)GetMandatoryTableSpec ());
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
#endif
|
||||||
|
|
||||||
ReportOption = GetReportOption ();
|
ReportOption = GetReportOption ();
|
||||||
if (ReportTableList != ReportOption) {
|
if (ReportTableList != ReportOption) {
|
||||||
if (((ReportSelected == ReportOption) ||
|
if (((ReportSelected == ReportOption) ||
|
||||||
(ReportDumpBinFile == ReportOption)) &&
|
(ReportDumpBinFile == ReportOption)) &&
|
||||||
(!SelectedTable->Found)) {
|
(!SelectedTable->Found))
|
||||||
|
{
|
||||||
Print (L"\nRequested ACPI Table not found.\n");
|
Print (L"\nRequested ACPI Table not found.\n");
|
||||||
} else if (GetConsistencyChecking () &&
|
} else if (GetConsistencyChecking () &&
|
||||||
(ReportDumpBinFile != ReportOption)) {
|
(ReportDumpBinFile != ReportOption))
|
||||||
|
{
|
||||||
OriginalAttribute = gST->ConOut->Mode->Attribute;
|
OriginalAttribute = gST->ConOut->Mode->Attribute;
|
||||||
|
|
||||||
Print (L"\nTable Statistics:\n");
|
Print (L"\nTable Statistics:\n");
|
||||||
|
|
||||||
if (GetColourHighlighting ()) {
|
if (GetColourHighlighting ()) {
|
||||||
PrintAttribute = (GetErrorCount () > 0) ?
|
PrintAttribute = (GetErrorCount () > 0) ?
|
||||||
EFI_TEXT_ATTR (
|
EFI_TEXT_ATTR (
|
||||||
EFI_RED,
|
EFI_RED,
|
||||||
((OriginalAttribute&(BIT4|BIT5|BIT6))>>4)
|
((OriginalAttribute&(BIT4|BIT5|BIT6))>>4)
|
||||||
) :
|
) :
|
||||||
OriginalAttribute;
|
OriginalAttribute;
|
||||||
gST->ConOut->SetAttribute (gST->ConOut, PrintAttribute);
|
gST->ConOut->SetAttribute (gST->ConOut, PrintAttribute);
|
||||||
}
|
}
|
||||||
|
|
||||||
Print (L"\t%d Error(s)\n", GetErrorCount ());
|
Print (L"\t%d Error(s)\n", GetErrorCount ());
|
||||||
|
|
||||||
if (GetColourHighlighting ()) {
|
if (GetColourHighlighting ()) {
|
||||||
PrintAttribute = (GetWarningCount () > 0) ?
|
PrintAttribute = (GetWarningCount () > 0) ?
|
||||||
EFI_TEXT_ATTR (
|
EFI_TEXT_ATTR (
|
||||||
EFI_RED,
|
EFI_RED,
|
||||||
((OriginalAttribute&(BIT4|BIT5|BIT6))>>4)
|
((OriginalAttribute&(BIT4|BIT5|BIT6))>>4)
|
||||||
) :
|
) :
|
||||||
OriginalAttribute;
|
OriginalAttribute;
|
||||||
|
|
||||||
gST->ConOut->SetAttribute (gST->ConOut, PrintAttribute);
|
gST->ConOut->SetAttribute (gST->ConOut, PrintAttribute);
|
||||||
}
|
}
|
||||||
|
|
||||||
Print (L"\t%d Warning(s)\n", GetWarningCount ());
|
Print (L"\t%d Warning(s)\n", GetWarningCount ());
|
||||||
|
|
||||||
if (GetColourHighlighting ()) {
|
if (GetColourHighlighting ()) {
|
||||||
@ -320,5 +335,6 @@ AcpiView (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -11,17 +11,17 @@
|
|||||||
/**
|
/**
|
||||||
A macro to define the max file name length
|
A macro to define the max file name length
|
||||||
**/
|
**/
|
||||||
#define MAX_FILE_NAME_LEN 128
|
#define MAX_FILE_NAME_LEN 128
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Offset to the RSDP revision from the start of the RSDP
|
Offset to the RSDP revision from the start of the RSDP
|
||||||
**/
|
**/
|
||||||
#define RSDP_REVISION_OFFSET 15
|
#define RSDP_REVISION_OFFSET 15
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Offset to the RSDP length from the start of the RSDP
|
Offset to the RSDP length from the start of the RSDP
|
||||||
**/
|
**/
|
||||||
#define RSDP_LENGTH_OFFSET 20
|
#define RSDP_LENGTH_OFFSET 20
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function resets the ACPI table error counter to Zero.
|
This function resets the ACPI table error counter to Zero.
|
||||||
@ -71,7 +71,7 @@ GetWarningCount (
|
|||||||
BOOLEAN
|
BOOLEAN
|
||||||
ProcessTableReportOptions (
|
ProcessTableReportOptions (
|
||||||
IN CONST UINT32 Signature,
|
IN CONST UINT32 Signature,
|
||||||
IN CONST UINT8* TablePtr,
|
IN CONST UINT8 *TablePtr,
|
||||||
IN CONST UINT32 Length
|
IN CONST UINT32 Length
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -88,7 +88,7 @@ ProcessTableReportOptions (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
AcpiView (
|
AcpiView (
|
||||||
IN EFI_SYSTEM_TABLE* SystemTable
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
);
|
);
|
||||||
|
|
||||||
#endif // ACPIVIEW_H_
|
#endif // ACPIVIEW_H_
|
||||||
|
@ -11,14 +11,14 @@
|
|||||||
#include "AcpiViewConfig.h"
|
#include "AcpiViewConfig.h"
|
||||||
|
|
||||||
// Report variables
|
// Report variables
|
||||||
STATIC BOOLEAN mConsistencyCheck;
|
STATIC BOOLEAN mConsistencyCheck;
|
||||||
STATIC BOOLEAN mColourHighlighting;
|
STATIC BOOLEAN mColourHighlighting;
|
||||||
STATIC EREPORT_OPTION mReportType;
|
STATIC EREPORT_OPTION mReportType;
|
||||||
STATIC BOOLEAN mMandatoryTableValidate;
|
STATIC BOOLEAN mMandatoryTableValidate;
|
||||||
STATIC UINTN mMandatoryTableSpec;
|
STATIC UINTN mMandatoryTableSpec;
|
||||||
|
|
||||||
// User selection of which ACPI table should be checked
|
// User selection of which ACPI table should be checked
|
||||||
SELECTED_ACPI_TABLE mSelectedAcpiTable;
|
SELECTED_ACPI_TABLE mSelectedAcpiTable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Reset the AcpiView user configuration to defaults
|
Reset the AcpiView user configuration to defaults
|
||||||
@ -29,13 +29,13 @@ AcpiConfigSetDefaults (
|
|||||||
VOID
|
VOID
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
mReportType = ReportAll;
|
mReportType = ReportAll;
|
||||||
mSelectedAcpiTable.Type = 0;
|
mSelectedAcpiTable.Type = 0;
|
||||||
mSelectedAcpiTable.Name = NULL;
|
mSelectedAcpiTable.Name = NULL;
|
||||||
mSelectedAcpiTable.Found = FALSE;
|
mSelectedAcpiTable.Found = FALSE;
|
||||||
mConsistencyCheck = TRUE;
|
mConsistencyCheck = TRUE;
|
||||||
mMandatoryTableValidate = FALSE;
|
mMandatoryTableValidate = FALSE;
|
||||||
mMandatoryTableSpec = 0;
|
mMandatoryTableSpec = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -49,25 +49,27 @@ AcpiConfigSetDefaults (
|
|||||||
STATIC
|
STATIC
|
||||||
UINT32
|
UINT32
|
||||||
ConvertStrToAcpiSignature (
|
ConvertStrToAcpiSignature (
|
||||||
IN CONST CHAR16 *Str
|
IN CONST CHAR16 *Str
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT8 Index;
|
UINT8 Index;
|
||||||
CHAR8 Ptr[4];
|
CHAR8 Ptr[4];
|
||||||
|
|
||||||
ZeroMem (Ptr, sizeof (Ptr));
|
ZeroMem (Ptr, sizeof (Ptr));
|
||||||
Index = 0;
|
Index = 0;
|
||||||
|
|
||||||
// Convert to Upper case and convert to ASCII
|
// Convert to Upper case and convert to ASCII
|
||||||
while ((Index < 4) && (Str[Index] != 0)) {
|
while ((Index < 4) && (Str[Index] != 0)) {
|
||||||
if (Str[Index] >= L'a' && Str[Index] <= L'z') {
|
if ((Str[Index] >= L'a') && (Str[Index] <= L'z')) {
|
||||||
Ptr[Index] = (CHAR8)(Str[Index] - (L'a' - L'A'));
|
Ptr[Index] = (CHAR8)(Str[Index] - (L'a' - L'A'));
|
||||||
} else {
|
} else {
|
||||||
Ptr[Index] = (CHAR8)Str[Index];
|
Ptr[Index] = (CHAR8)Str[Index];
|
||||||
}
|
}
|
||||||
|
|
||||||
Index++;
|
Index++;
|
||||||
}
|
}
|
||||||
return *(UINT32 *) Ptr;
|
|
||||||
|
return *(UINT32 *)Ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -80,7 +82,7 @@ ConvertStrToAcpiSignature (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
SelectAcpiTable (
|
SelectAcpiTable (
|
||||||
IN CONST CHAR16 *TableName
|
IN CONST CHAR16 *TableName
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
ASSERT (TableName != NULL);
|
ASSERT (TableName != NULL);
|
||||||
@ -97,7 +99,7 @@ SelectAcpiTable (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
GetSelectedAcpiTable (
|
GetSelectedAcpiTable (
|
||||||
OUT SELECTED_ACPI_TABLE **SelectedAcpiTable
|
OUT SELECTED_ACPI_TABLE **SelectedAcpiTable
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
*SelectedAcpiTable = &mSelectedAcpiTable;
|
*SelectedAcpiTable = &mSelectedAcpiTable;
|
||||||
@ -125,7 +127,7 @@ GetColourHighlighting (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
SetColourHighlighting (
|
SetColourHighlighting (
|
||||||
BOOLEAN Highlight
|
BOOLEAN Highlight
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
mColourHighlighting = Highlight;
|
mColourHighlighting = Highlight;
|
||||||
@ -153,7 +155,7 @@ GetConsistencyChecking (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
SetConsistencyChecking (
|
SetConsistencyChecking (
|
||||||
BOOLEAN ConsistencyChecking
|
BOOLEAN ConsistencyChecking
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
mConsistencyCheck = ConsistencyChecking;
|
mConsistencyCheck = ConsistencyChecking;
|
||||||
@ -181,7 +183,7 @@ GetReportOption (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
SetReportOption (
|
SetReportOption (
|
||||||
EREPORT_OPTION ReportType
|
EREPORT_OPTION ReportType
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
mReportType = ReportType;
|
mReportType = ReportType;
|
||||||
@ -209,7 +211,7 @@ GetMandatoryTableValidate (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
SetMandatoryTableValidate (
|
SetMandatoryTableValidate (
|
||||||
BOOLEAN Validate
|
BOOLEAN Validate
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
mMandatoryTableValidate = Validate;
|
mMandatoryTableValidate = Validate;
|
||||||
@ -239,7 +241,7 @@ GetMandatoryTableSpec (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
SetMandatoryTableSpec (
|
SetMandatoryTableSpec (
|
||||||
UINTN Spec
|
UINTN Spec
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
mMandatoryTableSpec = Spec;
|
mMandatoryTableSpec = Spec;
|
||||||
|
@ -27,7 +27,7 @@ GetColourHighlighting (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
SetColourHighlighting (
|
SetColourHighlighting (
|
||||||
BOOLEAN Highlight
|
BOOLEAN Highlight
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -49,7 +49,7 @@ GetConsistencyChecking (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
SetConsistencyChecking (
|
SetConsistencyChecking (
|
||||||
BOOLEAN ConsistencyChecking
|
BOOLEAN ConsistencyChecking
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -71,7 +71,7 @@ GetMandatoryTableValidate (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
SetMandatoryTableValidate (
|
SetMandatoryTableValidate (
|
||||||
BOOLEAN Validate
|
BOOLEAN Validate
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -95,7 +95,7 @@ GetMandatoryTableSpec (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
SetMandatoryTableSpec (
|
SetMandatoryTableSpec (
|
||||||
UINTN Spec
|
UINTN Spec
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -128,7 +128,7 @@ GetReportOption (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
SetReportOption (
|
SetReportOption (
|
||||||
EREPORT_OPTION ReportType
|
EREPORT_OPTION ReportType
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -136,9 +136,9 @@ SetReportOption (
|
|||||||
ACPI table is to be examined by the AcpiView code.
|
ACPI table is to be examined by the AcpiView code.
|
||||||
**/
|
**/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
UINT32 Type; ///< 32bit signature of the selected ACPI table.
|
UINT32 Type; ///< 32bit signature of the selected ACPI table.
|
||||||
CONST CHAR16* Name; ///< User friendly name of the selected ACPI table.
|
CONST CHAR16 *Name; ///< User friendly name of the selected ACPI table.
|
||||||
BOOLEAN Found; ///< The selected table has been found in the system.
|
BOOLEAN Found; ///< The selected table has been found in the system.
|
||||||
} SELECTED_ACPI_TABLE;
|
} SELECTED_ACPI_TABLE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -149,7 +149,7 @@ typedef struct {
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
GetSelectedAcpiTable (
|
GetSelectedAcpiTable (
|
||||||
OUT SELECTED_ACPI_TABLE** SelectedAcpiTable
|
OUT SELECTED_ACPI_TABLE **SelectedAcpiTable
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -162,7 +162,7 @@ GetSelectedAcpiTable (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
SelectAcpiTable (
|
SelectAcpiTable (
|
||||||
CONST CHAR16* TableName
|
CONST CHAR16 *TableName
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
/**
|
/**
|
||||||
SBBR specification version strings
|
SBBR specification version strings
|
||||||
**/
|
**/
|
||||||
STATIC CONST CHAR8* ArmSbbrVersions[ArmSbbrVersionMax] = {
|
STATIC CONST CHAR8 *ArmSbbrVersions[ArmSbbrVersionMax] = {
|
||||||
"1.0", // ArmSbbrVersion_1_0
|
"1.0", // ArmSbbrVersion_1_0
|
||||||
"1.1", // ArmSbbrVersion_1_1
|
"1.1", // ArmSbbrVersion_1_1
|
||||||
"1.2" // ArmSbbrVersion_1_2
|
"1.2" // ArmSbbrVersion_1_2
|
||||||
@ -32,7 +32,7 @@ STATIC CONST CHAR8* ArmSbbrVersions[ArmSbbrVersionMax] = {
|
|||||||
/**
|
/**
|
||||||
SBBR 1.0 mandatory ACPI tables
|
SBBR 1.0 mandatory ACPI tables
|
||||||
**/
|
**/
|
||||||
STATIC CONST UINT32 ArmSbbr10Mandatory[] = {
|
STATIC CONST UINT32 ArmSbbr10Mandatory[] = {
|
||||||
EFI_ACPI_6_3_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
|
EFI_ACPI_6_3_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
|
||||||
EFI_ACPI_6_3_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE,
|
EFI_ACPI_6_3_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE,
|
||||||
EFI_ACPI_6_3_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
|
EFI_ACPI_6_3_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
|
||||||
@ -45,7 +45,7 @@ STATIC CONST UINT32 ArmSbbr10Mandatory[] = {
|
|||||||
/**
|
/**
|
||||||
SBBR 1.1 mandatory ACPI tables
|
SBBR 1.1 mandatory ACPI tables
|
||||||
**/
|
**/
|
||||||
STATIC CONST UINT32 ArmSbbr11Mandatory[] = {
|
STATIC CONST UINT32 ArmSbbr11Mandatory[] = {
|
||||||
EFI_ACPI_6_3_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
|
EFI_ACPI_6_3_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
|
||||||
EFI_ACPI_6_3_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE,
|
EFI_ACPI_6_3_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE,
|
||||||
EFI_ACPI_6_3_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
|
EFI_ACPI_6_3_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
|
||||||
@ -59,7 +59,7 @@ STATIC CONST UINT32 ArmSbbr11Mandatory[] = {
|
|||||||
/**
|
/**
|
||||||
SBBR 1.2 mandatory ACPI tables
|
SBBR 1.2 mandatory ACPI tables
|
||||||
**/
|
**/
|
||||||
STATIC CONST UINT32 ArmSbbr12Mandatory[] = {
|
STATIC CONST UINT32 ArmSbbr12Mandatory[] = {
|
||||||
EFI_ACPI_6_3_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
|
EFI_ACPI_6_3_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
|
||||||
EFI_ACPI_6_3_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE,
|
EFI_ACPI_6_3_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE,
|
||||||
EFI_ACPI_6_3_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
|
EFI_ACPI_6_3_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
|
||||||
@ -74,7 +74,7 @@ STATIC CONST UINT32 ArmSbbr12Mandatory[] = {
|
|||||||
/**
|
/**
|
||||||
Mandatory ACPI tables for every SBBR specification version.
|
Mandatory ACPI tables for every SBBR specification version.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_SBBR_REQ ArmSbbrReqs[ArmSbbrVersionMax] = {
|
STATIC CONST ACPI_SBBR_REQ ArmSbbrReqs[ArmSbbrVersionMax] = {
|
||||||
{ ArmSbbr10Mandatory, ARRAY_SIZE (ArmSbbr10Mandatory) }, // SBBR v1.0
|
{ ArmSbbr10Mandatory, ARRAY_SIZE (ArmSbbr10Mandatory) }, // SBBR v1.0
|
||||||
{ ArmSbbr11Mandatory, ARRAY_SIZE (ArmSbbr11Mandatory) }, // SBBR v1.1
|
{ ArmSbbr11Mandatory, ARRAY_SIZE (ArmSbbr11Mandatory) }, // SBBR v1.1
|
||||||
{ ArmSbbr12Mandatory, ARRAY_SIZE (ArmSbbr12Mandatory) } // SBBR v1.2
|
{ ArmSbbr12Mandatory, ARRAY_SIZE (ArmSbbr12Mandatory) } // SBBR v1.2
|
||||||
@ -84,16 +84,16 @@ STATIC CONST ACPI_SBBR_REQ ArmSbbrReqs[ArmSbbrVersionMax] = {
|
|||||||
Data structure to track instance counts for all ACPI tables which are
|
Data structure to track instance counts for all ACPI tables which are
|
||||||
defined as 'mandatory' in any SBBR version.
|
defined as 'mandatory' in any SBBR version.
|
||||||
**/
|
**/
|
||||||
STATIC ACPI_TABLE_COUNTER ArmSbbrTableCounts[] = {
|
STATIC ACPI_TABLE_COUNTER ArmSbbrTableCounts[] = {
|
||||||
{EFI_ACPI_6_3_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE, 0},
|
{ EFI_ACPI_6_3_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE, 0 },
|
||||||
{EFI_ACPI_6_3_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE, 0},
|
{ EFI_ACPI_6_3_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE, 0 },
|
||||||
{EFI_ACPI_6_3_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE, 0},
|
{ EFI_ACPI_6_3_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE, 0 },
|
||||||
{EFI_ACPI_6_3_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE, 0},
|
{ EFI_ACPI_6_3_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE, 0 },
|
||||||
{EFI_ACPI_6_3_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE, 0},
|
{ EFI_ACPI_6_3_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE, 0 },
|
||||||
{EFI_ACPI_6_3_DEBUG_PORT_2_TABLE_SIGNATURE, 0},
|
{ EFI_ACPI_6_3_DEBUG_PORT_2_TABLE_SIGNATURE, 0 },
|
||||||
{EFI_ACPI_6_3_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE, 0},
|
{ EFI_ACPI_6_3_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE, 0 },
|
||||||
{EFI_ACPI_6_3_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE, 0},
|
{ EFI_ACPI_6_3_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE, 0 },
|
||||||
{EFI_ACPI_6_3_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_STRUCTURE_SIGNATURE, 0}
|
{ EFI_ACPI_6_3_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_STRUCTURE_SIGNATURE, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -105,7 +105,7 @@ ArmSbbrResetTableCounts (
|
|||||||
VOID
|
VOID
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Table;
|
UINT32 Table;
|
||||||
|
|
||||||
for (Table = 0; Table < ARRAY_SIZE (ArmSbbrTableCounts); Table++) {
|
for (Table = 0; Table < ARRAY_SIZE (ArmSbbrTableCounts); Table++) {
|
||||||
ArmSbbrTableCounts[Table].Count = 0;
|
ArmSbbrTableCounts[Table].Count = 0;
|
||||||
@ -124,10 +124,10 @@ ArmSbbrResetTableCounts (
|
|||||||
BOOLEAN
|
BOOLEAN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ArmSbbrIncrementTableCount (
|
ArmSbbrIncrementTableCount (
|
||||||
UINT32 Signature
|
UINT32 Signature
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Table;
|
UINT32 Table;
|
||||||
|
|
||||||
for (Table = 0; Table < ARRAY_SIZE (ArmSbbrTableCounts); Table++) {
|
for (Table = 0; Table < ARRAY_SIZE (ArmSbbrTableCounts); Table++) {
|
||||||
if (Signature == ArmSbbrTableCounts[Table].Signature) {
|
if (Signature == ArmSbbrTableCounts[Table].Signature) {
|
||||||
@ -154,14 +154,14 @@ ArmSbbrIncrementTableCount (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ArmSbbrReqsValidate (
|
ArmSbbrReqsValidate (
|
||||||
ARM_SBBR_VERSION Version
|
ARM_SBBR_VERSION Version
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Table;
|
UINT32 Table;
|
||||||
UINT32 Index;
|
UINT32 Index;
|
||||||
UINT32 MandatoryTable;
|
UINT32 MandatoryTable;
|
||||||
CONST UINT8* SignaturePtr;
|
CONST UINT8 *SignaturePtr;
|
||||||
BOOLEAN IsArmSbbrViolated;
|
BOOLEAN IsArmSbbrViolated;
|
||||||
|
|
||||||
if (Version >= ArmSbbrVersionMax) {
|
if (Version >= ArmSbbrVersionMax) {
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
@ -172,12 +172,13 @@ ArmSbbrReqsValidate (
|
|||||||
// Go through the list of mandatory tables for the input SBBR version
|
// Go through the list of mandatory tables for the input SBBR version
|
||||||
for (Table = 0; Table < ArmSbbrReqs[Version].TableCount; Table++) {
|
for (Table = 0; Table < ArmSbbrReqs[Version].TableCount; Table++) {
|
||||||
MandatoryTable = ArmSbbrReqs[Version].Tables[Table];
|
MandatoryTable = ArmSbbrReqs[Version].Tables[Table];
|
||||||
SignaturePtr = (CONST UINT8*)(UINTN)&MandatoryTable;
|
SignaturePtr = (CONST UINT8 *)(UINTN)&MandatoryTable;
|
||||||
|
|
||||||
// Locate the instance count for the table with the given signature
|
// Locate the instance count for the table with the given signature
|
||||||
Index = 0;
|
Index = 0;
|
||||||
while ((Index < ARRAY_SIZE (ArmSbbrTableCounts)) &&
|
while ((Index < ARRAY_SIZE (ArmSbbrTableCounts)) &&
|
||||||
(ArmSbbrTableCounts[Index].Signature != MandatoryTable)) {
|
(ArmSbbrTableCounts[Index].Signature != MandatoryTable))
|
||||||
|
{
|
||||||
Index++;
|
Index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -185,7 +186,7 @@ ArmSbbrReqsValidate (
|
|||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"\nERROR: SBBR v%a: Mandatory %c%c%c%c table's instance count not " \
|
L"\nERROR: SBBR v%a: Mandatory %c%c%c%c table's instance count not " \
|
||||||
L"found\n",
|
L"found\n",
|
||||||
ArmSbbrVersions[Version],
|
ArmSbbrVersions[Version],
|
||||||
SignaturePtr[0],
|
SignaturePtr[0],
|
||||||
SignaturePtr[1],
|
SignaturePtr[1],
|
||||||
|
@ -24,26 +24,26 @@
|
|||||||
Arm SBBR specification versions.
|
Arm SBBR specification versions.
|
||||||
**/
|
**/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
ArmSbbrVersion_1_0 = 0,
|
ArmSbbrVersion_1_0 = 0,
|
||||||
ArmSbbrVersion_1_1 = 1,
|
ArmSbbrVersion_1_1 = 1,
|
||||||
ArmSbbrVersion_1_2 = 2,
|
ArmSbbrVersion_1_2 = 2,
|
||||||
ArmSbbrVersionMax = 3
|
ArmSbbrVersionMax = 3
|
||||||
} ARM_SBBR_VERSION;
|
} ARM_SBBR_VERSION;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
The ACPI table instance counter.
|
The ACPI table instance counter.
|
||||||
**/
|
**/
|
||||||
typedef struct AcpiTableCounter {
|
typedef struct AcpiTableCounter {
|
||||||
CONST UINT32 Signature; /// ACPI table signature
|
CONST UINT32 Signature; /// ACPI table signature
|
||||||
UINT32 Count; /// Instance count
|
UINT32 Count; /// Instance count
|
||||||
} ACPI_TABLE_COUNTER;
|
} ACPI_TABLE_COUNTER;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
ACPI table SBBR requirements.
|
ACPI table SBBR requirements.
|
||||||
**/
|
**/
|
||||||
typedef struct AcpiSbbrReq {
|
typedef struct AcpiSbbrReq {
|
||||||
CONST UINT32* Tables; /// List of required tables
|
CONST UINT32 *Tables; /// List of required tables
|
||||||
CONST UINT32 TableCount; /// Number of elements in Tables
|
CONST UINT32 TableCount; /// Number of elements in Tables
|
||||||
} ACPI_SBBR_REQ;
|
} ACPI_SBBR_REQ;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -67,7 +67,7 @@ ArmSbbrResetTableCounts (
|
|||||||
BOOLEAN
|
BOOLEAN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ArmSbbrIncrementTableCount (
|
ArmSbbrIncrementTableCount (
|
||||||
UINT32 Signature
|
UINT32 Signature
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -85,7 +85,7 @@ ArmSbbrIncrementTableCount (
|
|||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ArmSbbrReqsValidate (
|
ArmSbbrReqsValidate (
|
||||||
ARM_SBBR_VERSION Version
|
ARM_SBBR_VERSION Version
|
||||||
);
|
);
|
||||||
|
|
||||||
#endif // SBBR_VALIDATOR_H_
|
#endif // SBBR_VALIDATOR_H_
|
||||||
|
@ -18,16 +18,16 @@
|
|||||||
#include "AcpiViewConfig.h"
|
#include "AcpiViewConfig.h"
|
||||||
|
|
||||||
// Local variables
|
// Local variables
|
||||||
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
||||||
STATIC UINT8* AestNodeType;
|
STATIC UINT8 *AestNodeType;
|
||||||
STATIC UINT16* AestNodeLength;
|
STATIC UINT16 *AestNodeLength;
|
||||||
STATIC UINT32* NodeDataOffset;
|
STATIC UINT32 *NodeDataOffset;
|
||||||
STATIC UINT32* NodeInterfaceOffset;
|
STATIC UINT32 *NodeInterfaceOffset;
|
||||||
STATIC UINT32* NodeInterruptArrayOffset;
|
STATIC UINT32 *NodeInterruptArrayOffset;
|
||||||
STATIC UINT32* NodeInterruptCount;
|
STATIC UINT32 *NodeInterruptCount;
|
||||||
STATIC UINT32* ProcessorId;
|
STATIC UINT32 *ProcessorId;
|
||||||
STATIC UINT8* ProcessorFlags;
|
STATIC UINT8 *ProcessorFlags;
|
||||||
STATIC UINT8* ProcessorResourceType;
|
STATIC UINT8 *ProcessorResourceType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Validate Processor Flags.
|
Validate Processor Flags.
|
||||||
@ -40,16 +40,18 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateProcessorFlags (
|
ValidateProcessorFlags (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
// If the global or shared node flag is set then the ACPI Processor ID
|
// If the global or shared node flag is set then the ACPI Processor ID
|
||||||
// field must be set to 0 and ignored.
|
// field must be set to 0 and ignored.
|
||||||
if (((*Ptr & 0x3) != 0) && (*ProcessorId != 0)) {
|
if (((*Ptr & 0x3) != 0) && (*ProcessorId != 0)) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (L"\nERROR: 'ACPI Processor ID' field must be set to 0 for global"
|
Print (
|
||||||
L" or shared nodes.");
|
L"\nERROR: 'ACPI Processor ID' field must be set to 0 for global"
|
||||||
|
L" or shared nodes."
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,13 +66,13 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateGicInterfaceType (
|
ValidateGicInterfaceType (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 GicInterfaceType;
|
UINT32 GicInterfaceType;
|
||||||
|
|
||||||
GicInterfaceType = *(UINT32*)Ptr;
|
GicInterfaceType = *(UINT32 *)Ptr;
|
||||||
if (GicInterfaceType > 3) {
|
if (GicInterfaceType > 3) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (L"\nError: Invalid GIC Interface type %d", GicInterfaceType);
|
Print (L"\nError: Invalid GIC Interface type %d", GicInterfaceType);
|
||||||
@ -88,8 +90,8 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateInterfaceType (
|
ValidateInterfaceType (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (*Ptr > 1) {
|
if (*Ptr > 1) {
|
||||||
@ -109,8 +111,8 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateInterruptType (
|
ValidateInterruptType (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (*Ptr > 1) {
|
if (*Ptr > 1) {
|
||||||
@ -130,8 +132,8 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateInterruptFlags (
|
ValidateInterruptFlags (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if ((*Ptr & 0xfe) != 0) {
|
if ((*Ptr & 0xfe) != 0) {
|
||||||
@ -149,8 +151,8 @@ ValidateInterruptFlags (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DumpVendorSpecificData (
|
DumpVendorSpecificData (
|
||||||
IN CONST CHAR16* Format OPTIONAL,
|
IN CONST CHAR16 *Format OPTIONAL,
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
Print (
|
Print (
|
||||||
@ -183,27 +185,27 @@ DumpVendorSpecificData (
|
|||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the ACPI AEST Table.
|
An ACPI_PARSER array describing the ACPI AEST Table.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER AestParser[] = {
|
STATIC CONST ACPI_PARSER AestParser[] = {
|
||||||
PARSE_ACPI_HEADER (&AcpiHdrInfo)
|
PARSE_ACPI_HEADER (&AcpiHdrInfo)
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the AEST Node Header.
|
An ACPI_PARSER array describing the AEST Node Header.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER AestNodeHeaderParser[] = {
|
STATIC CONST ACPI_PARSER AestNodeHeaderParser[] = {
|
||||||
{L"Type", 1, 0, L"%d", NULL, (VOID**)&AestNodeType, NULL, NULL},
|
{ L"Type", 1, 0, L"%d", NULL, (VOID **)&AestNodeType, NULL, NULL },
|
||||||
{L"Length", 2, 1, L"%d", NULL, (VOID**)&AestNodeLength, NULL, NULL},
|
{ L"Length", 2, 1, L"%d", NULL, (VOID **)&AestNodeLength, NULL, NULL },
|
||||||
{L"Reserved", 1, 3, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 1, 3, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Node Data Offset", 4, 4, L"%d", NULL, (VOID**)&NodeDataOffset, NULL, NULL},
|
{ L"Node Data Offset", 4, 4, L"%d", NULL, (VOID **)&NodeDataOffset, NULL, NULL },
|
||||||
{L"Node Interface Offset", 4, 8, L"%d", NULL,
|
{ L"Node Interface Offset", 4, 8, L"%d", NULL,
|
||||||
(VOID**)&NodeInterfaceOffset, NULL, NULL},
|
(VOID **)&NodeInterfaceOffset, NULL, NULL },
|
||||||
{L"Node Interrupt Array Offset", 4, 12, L"%d", NULL,
|
{ L"Node Interrupt Array Offset", 4, 12, L"%d", NULL,
|
||||||
(VOID**)&NodeInterruptArrayOffset, NULL, NULL},
|
(VOID **)&NodeInterruptArrayOffset, NULL, NULL },
|
||||||
{L"Node Interrupt Count", 4, 16, L"%d", NULL,
|
{ L"Node Interrupt Count", 4, 16, L"%d", NULL,
|
||||||
(VOID**)&NodeInterruptCount, NULL, NULL},
|
(VOID **)&NodeInterruptCount, NULL, NULL },
|
||||||
{L"Timestamp Rate", 8, 20, L"%ld", NULL, NULL, NULL, NULL},
|
{ L"Timestamp Rate", 8, 20, L"%ld", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved1", 8, 28, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Reserved1", 8, 28, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Error Injection Countdown Rate", 8, 36, L"%ld", NULL, NULL, NULL, NULL}
|
{ L"Error Injection Countdown Rate", 8, 36, L"%ld", NULL, NULL, NULL, NULL }
|
||||||
// Node specific data...
|
// Node specific data...
|
||||||
// Node interface...
|
// Node interface...
|
||||||
// Node interrupt array...
|
// Node interrupt array...
|
||||||
@ -212,100 +214,100 @@ STATIC CONST ACPI_PARSER AestNodeHeaderParser[] = {
|
|||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the Processor error node specific data.
|
An ACPI_PARSER array describing the Processor error node specific data.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER AestProcessorStructure[] = {
|
STATIC CONST ACPI_PARSER AestProcessorStructure[] = {
|
||||||
{L"ACPI Processor ID", 4, 0, L"0x%x", NULL, (VOID**)&ProcessorId, NULL, NULL},
|
{ L"ACPI Processor ID", 4, 0, L"0x%x", NULL, (VOID **)&ProcessorId, NULL, NULL },
|
||||||
{L"Resource Type", 1, 4, L"%d", NULL, (VOID**)&ProcessorResourceType, NULL,
|
{ L"Resource Type", 1, 4, L"%d", NULL, (VOID **)&ProcessorResourceType, NULL,
|
||||||
NULL},
|
NULL },
|
||||||
{L"Reserved", 1, 5, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 1, 5, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Flags", 1, 6, L"0x%x", NULL, (VOID**)&ProcessorFlags,
|
{ L"Flags", 1, 6, L"0x%x", NULL, (VOID **)&ProcessorFlags,
|
||||||
ValidateProcessorFlags, NULL},
|
ValidateProcessorFlags, NULL },
|
||||||
{L"Revision", 1, 7, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Revision", 1, 7, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Processor Affinity Level Indicator", 8, 8, L"0x%lx", NULL, NULL, NULL,
|
{ L"Processor Affinity Level Indicator", 8, 8, L"0x%lx", NULL, NULL, NULL,
|
||||||
NULL},
|
NULL },
|
||||||
// Resource specific data...
|
// Resource specific data...
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the processor cache resource substructure.
|
An ACPI_PARSER array describing the processor cache resource substructure.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER AestProcessorCacheResourceSubstructure[] = {
|
STATIC CONST ACPI_PARSER AestProcessorCacheResourceSubstructure[] = {
|
||||||
{L"Cache reference ID", 4, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Cache reference ID", 4, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 4, 4, L"%d", NULL, NULL, NULL, NULL}
|
{ L"Reserved", 4, 4, L"%d", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the processor TLB resource substructure.
|
An ACPI_PARSER array describing the processor TLB resource substructure.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER AestProcessorTlbResourceSubstructure[] = {
|
STATIC CONST ACPI_PARSER AestProcessorTlbResourceSubstructure[] = {
|
||||||
{L"TLB reference ID", 4, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"TLB reference ID", 4, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 4, 4, L"%d", NULL, NULL, NULL, NULL}
|
{ L"Reserved", 4, 4, L"%d", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the processor generic resource substructure.
|
An ACPI_PARSER array describing the processor generic resource substructure.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER AestProcessorGenericResourceSubstructure[] = {
|
STATIC CONST ACPI_PARSER AestProcessorGenericResourceSubstructure[] = {
|
||||||
{L"Vendor-defined data", 4, 0, L"%x", NULL, NULL, NULL, NULL}
|
{ L"Vendor-defined data", 4, 0, L"%x", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the memory controller structure.
|
An ACPI_PARSER array describing the memory controller structure.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER AestMemoryControllerStructure[] = {
|
STATIC CONST ACPI_PARSER AestMemoryControllerStructure[] = {
|
||||||
{L"Proximity Domain", 4, 0, L"0x%x", NULL, NULL, NULL, NULL}
|
{ L"Proximity Domain", 4, 0, L"0x%x", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the SMMU structure.
|
An ACPI_PARSER array describing the SMMU structure.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER AestSmmuStructure[] = {
|
STATIC CONST ACPI_PARSER AestSmmuStructure[] = {
|
||||||
{L"IORT Node reference ID", 4, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"IORT Node reference ID", 4, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"SubComponent reference ID", 4, 4, L"0x%x", NULL, NULL, NULL, NULL}
|
{ L"SubComponent reference ID", 4, 4, L"0x%x", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the vendor-defined structure.
|
An ACPI_PARSER array describing the vendor-defined structure.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER AestVendorDefinedStructure[] = {
|
STATIC CONST ACPI_PARSER AestVendorDefinedStructure[] = {
|
||||||
{L"Hardware ID", 4, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Hardware ID", 4, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Unique ID", 4, 4, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Unique ID", 4, 4, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Vendor-specific data", 16, 8, NULL, DumpVendorSpecificData, NULL, NULL}
|
{ L"Vendor-specific data", 16, 8, NULL, DumpVendorSpecificData, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the GIC structure.
|
An ACPI_PARSER array describing the GIC structure.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER AestGicStructure[] = {
|
STATIC CONST ACPI_PARSER AestGicStructure[] = {
|
||||||
{L"GIC Interface Type", 4, 0, L"0x%x", NULL, NULL, ValidateGicInterfaceType,
|
{ L"GIC Interface Type", 4, 0, L"0x%x", NULL, NULL, ValidateGicInterfaceType,
|
||||||
NULL},
|
NULL },
|
||||||
{L"GIC Interface reference ID", 4, 4, L"0x%x", NULL, NULL, NULL, NULL}
|
{ L"GIC Interface reference ID", 4, 4, L"0x%x", NULL, NULL, NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the node interface.
|
An ACPI_PARSER array describing the node interface.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER AestNodeInterface[] = {
|
STATIC CONST ACPI_PARSER AestNodeInterface[] = {
|
||||||
{L"Interface Type", 1, 0, L"%d", NULL, NULL, ValidateInterfaceType, NULL},
|
{ L"Interface Type", 1, 0, L"%d", NULL, NULL, ValidateInterfaceType, NULL },
|
||||||
{L"Reserved", 3, 1, L"%x %x %x", Dump3Chars, NULL, NULL, NULL},
|
{ L"Reserved", 3, 1, L"%x %x %x", Dump3Chars, NULL, NULL, NULL },
|
||||||
{L"Flags", 4, 4, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Flags", 4, 4, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Base Address", 8, 8, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Base Address", 8, 8, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Start Error Record Index", 4, 16, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Start Error Record Index", 4, 16, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Number of Error Records", 4, 20, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Number of Error Records", 4, 20, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Error Records Implemented", 8, 24, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Error Records Implemented", 8, 24, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Error Records Support", 8, 32, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Error Records Support", 8, 32, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Addressing mode", 8, 40, L"0x%lx", NULL, NULL, NULL, NULL}
|
{ L"Addressing mode", 8, 40, L"0x%lx", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the node interrupts.
|
An ACPI_PARSER array describing the node interrupts.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER AestNodeInterrupt[] = {
|
STATIC CONST ACPI_PARSER AestNodeInterrupt[] = {
|
||||||
{L"Interrupt Type", 1, 0, L"%d", NULL, NULL, ValidateInterruptType, NULL},
|
{ L"Interrupt Type", 1, 0, L"%d", NULL, NULL, ValidateInterruptType, NULL },
|
||||||
{L"Reserved", 2, 1, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 2, 1, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Interrupt Flags", 1, 3, L"0x%x", NULL, NULL, ValidateInterruptFlags, NULL},
|
{ L"Interrupt Flags", 1, 3, L"0x%x", NULL, NULL, ValidateInterruptFlags, NULL },
|
||||||
{L"Interrupt GSIV", 4, 4, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Interrupt GSIV", 4, 4, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"ID", 1, 8, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"ID", 1, 8, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved1", 3, 9, L"%x %x %x", Dump3Chars, NULL, NULL, NULL}
|
{ L"Reserved1", 3, 9, L"%x %x %x", Dump3Chars, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -318,11 +320,11 @@ STATIC CONST ACPI_PARSER AestNodeInterrupt[] = {
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpProcessorNode (
|
DumpProcessorNode (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 Length
|
IN UINT32 Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Offset;
|
UINT32 Offset;
|
||||||
|
|
||||||
Offset = ParseAcpi (
|
Offset = ParseAcpi (
|
||||||
TRUE,
|
TRUE,
|
||||||
@ -337,7 +339,8 @@ DumpProcessorNode (
|
|||||||
// successfully read.
|
// successfully read.
|
||||||
if ((ProcessorId == NULL) ||
|
if ((ProcessorId == NULL) ||
|
||||||
(ProcessorResourceType == NULL) ||
|
(ProcessorResourceType == NULL) ||
|
||||||
(ProcessorFlags == NULL)) {
|
(ProcessorFlags == NULL))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Insufficient Processor Error Node length. Length = %d.\n",
|
L"ERROR: Insufficient Processor Error Node length. Length = %d.\n",
|
||||||
@ -393,8 +396,8 @@ DumpProcessorNode (
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpMemoryControllerNode (
|
DumpMemoryControllerNode (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 Length
|
IN UINT32 Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
@ -416,8 +419,8 @@ DumpMemoryControllerNode (
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpSmmuNode (
|
DumpSmmuNode (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 Length
|
IN UINT32 Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
@ -439,8 +442,8 @@ DumpSmmuNode (
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpVendorDefinedNode (
|
DumpVendorDefinedNode (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 Length
|
IN UINT32 Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
@ -462,8 +465,8 @@ DumpVendorDefinedNode (
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpGicNode (
|
DumpGicNode (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 Length
|
IN UINT32 Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
@ -485,8 +488,8 @@ DumpGicNode (
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpNodeInterface (
|
DumpNodeInterface (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 Length
|
IN UINT32 Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
@ -509,19 +512,19 @@ DumpNodeInterface (
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpNodeInterrupts (
|
DumpNodeInterrupts (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 Length,
|
IN UINT32 Length,
|
||||||
IN UINT32 InterruptCount
|
IN UINT32 InterruptCount
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Offset;
|
UINT32 Offset;
|
||||||
UINT32 Index;
|
UINT32 Index;
|
||||||
CHAR8 Buffer[64];
|
CHAR8 Buffer[64];
|
||||||
|
|
||||||
if (Length < (InterruptCount * sizeof (EFI_ACPI_AEST_INTERRUPT_STRUCT))) {
|
if (Length < (InterruptCount * sizeof (EFI_ACPI_AEST_INTERRUPT_STRUCT))) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Node not long enough for Interrupt Array.\n"\
|
L"ERROR: Node not long enough for Interrupt Array.\n" \
|
||||||
L" Length left = %d, Required = %d, Interrupt Count = %d\n",
|
L" Length left = %d, Required = %d, Interrupt Count = %d\n",
|
||||||
Length,
|
Length,
|
||||||
(InterruptCount * sizeof (EFI_ACPI_AEST_INTERRUPT_STRUCT)),
|
(InterruptCount * sizeof (EFI_ACPI_AEST_INTERRUPT_STRUCT)),
|
||||||
@ -547,7 +550,7 @@ DumpNodeInterrupts (
|
|||||||
Length - Offset,
|
Length - Offset,
|
||||||
PARSER_PARAMS (AestNodeInterrupt)
|
PARSER_PARAMS (AestNodeInterrupt)
|
||||||
);
|
);
|
||||||
} //for
|
} // for
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -564,7 +567,7 @@ DumpNodeInterrupts (
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpAestNodeStructure (
|
DumpAestNodeStructure (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 Length,
|
IN UINT32 Length,
|
||||||
IN UINT8 NodeType,
|
IN UINT8 NodeType,
|
||||||
IN UINT32 DataOffset,
|
IN UINT32 DataOffset,
|
||||||
@ -573,9 +576,9 @@ DumpAestNodeStructure (
|
|||||||
IN UINT32 InterruptCount
|
IN UINT32 InterruptCount
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Offset;
|
UINT32 Offset;
|
||||||
UINT32 RemainingLength;
|
UINT32 RemainingLength;
|
||||||
UINT8* NodeDataPtr;
|
UINT8 *NodeDataPtr;
|
||||||
|
|
||||||
Offset = ParseAcpi (
|
Offset = ParseAcpi (
|
||||||
TRUE,
|
TRUE,
|
||||||
@ -589,7 +592,7 @@ DumpAestNodeStructure (
|
|||||||
if ((Offset > DataOffset) || (DataOffset > Length)) {
|
if ((Offset > DataOffset) || (DataOffset > Length)) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Invalid Node Data Offset: %d.\n"\
|
L"ERROR: Invalid Node Data Offset: %d.\n" \
|
||||||
L" It should be between %d and %d.\n",
|
L" It should be between %d and %d.\n",
|
||||||
DataOffset,
|
DataOffset,
|
||||||
Offset,
|
Offset,
|
||||||
@ -600,7 +603,7 @@ DumpAestNodeStructure (
|
|||||||
if ((Offset > InterfaceOffset) || (InterfaceOffset > Length)) {
|
if ((Offset > InterfaceOffset) || (InterfaceOffset > Length)) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Invalid Node Interface Offset: %d.\n"\
|
L"ERROR: Invalid Node Interface Offset: %d.\n" \
|
||||||
L" It should be between %d and %d.\n",
|
L" It should be between %d and %d.\n",
|
||||||
InterfaceOffset,
|
InterfaceOffset,
|
||||||
Offset,
|
Offset,
|
||||||
@ -611,7 +614,7 @@ DumpAestNodeStructure (
|
|||||||
if ((Offset > InterruptArrayOffset) || (InterruptArrayOffset > Length)) {
|
if ((Offset > InterruptArrayOffset) || (InterruptArrayOffset > Length)) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Invalid Node Interrupt Array Offset: %d.\n"\
|
L"ERROR: Invalid Node Interrupt Array Offset: %d.\n" \
|
||||||
L" It should be between %d and %d.\n",
|
L" It should be between %d and %d.\n",
|
||||||
InterruptArrayOffset,
|
InterruptArrayOffset,
|
||||||
Offset,
|
Offset,
|
||||||
@ -620,7 +623,7 @@ DumpAestNodeStructure (
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Parse Node Data Field.
|
// Parse Node Data Field.
|
||||||
NodeDataPtr = Ptr + DataOffset;
|
NodeDataPtr = Ptr + DataOffset;
|
||||||
RemainingLength = Length - DataOffset;
|
RemainingLength = Length - DataOffset;
|
||||||
switch (NodeType) {
|
switch (NodeType) {
|
||||||
case EFI_ACPI_AEST_NODE_TYPE_PROCESSOR:
|
case EFI_ACPI_AEST_NODE_TYPE_PROCESSOR:
|
||||||
@ -675,14 +678,14 @@ DumpAestNodeStructure (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiAest (
|
ParseAcpiAest (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Offset;
|
UINT32 Offset;
|
||||||
UINT8* NodePtr;
|
UINT8 *NodePtr;
|
||||||
|
|
||||||
if (!Trace) {
|
if (!Trace) {
|
||||||
return;
|
return;
|
||||||
@ -716,10 +719,11 @@ ParseAcpiAest (
|
|||||||
(NodeDataOffset == NULL) ||
|
(NodeDataOffset == NULL) ||
|
||||||
(NodeInterfaceOffset == NULL) ||
|
(NodeInterfaceOffset == NULL) ||
|
||||||
(NodeInterruptArrayOffset == NULL) ||
|
(NodeInterruptArrayOffset == NULL) ||
|
||||||
(NodeInterruptCount == NULL)) {
|
(NodeInterruptCount == NULL))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Insufficient length left for Node Structure.\n"\
|
L"ERROR: Insufficient length left for Node Structure.\n" \
|
||||||
L" Length left = %d.\n",
|
L" Length left = %d.\n",
|
||||||
AcpiTableLength - Offset
|
AcpiTableLength - Offset
|
||||||
);
|
);
|
||||||
@ -728,11 +732,12 @@ ParseAcpiAest (
|
|||||||
|
|
||||||
// Validate AEST Node length
|
// Validate AEST Node length
|
||||||
if ((*AestNodeLength == 0) ||
|
if ((*AestNodeLength == 0) ||
|
||||||
((Offset + (*AestNodeLength)) > AcpiTableLength)) {
|
((Offset + (*AestNodeLength)) > AcpiTableLength))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Invalid AEST Node length. " \
|
L"ERROR: Invalid AEST Node length. " \
|
||||||
L"Length = %d. Offset = %d. AcpiTableLength = %d.\n",
|
L"Length = %d. Offset = %d. AcpiTableLength = %d.\n",
|
||||||
*AestNodeLength,
|
*AestNodeLength,
|
||||||
Offset,
|
Offset,
|
||||||
AcpiTableLength
|
AcpiTableLength
|
||||||
|
@ -14,19 +14,19 @@
|
|||||||
#include "AcpiTableParser.h"
|
#include "AcpiTableParser.h"
|
||||||
|
|
||||||
// Local variables
|
// Local variables
|
||||||
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the ACPI BDRT Table.
|
An ACPI_PARSER array describing the ACPI BDRT Table.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER BgrtParser[] = {
|
STATIC CONST ACPI_PARSER BgrtParser[] = {
|
||||||
PARSE_ACPI_HEADER (&AcpiHdrInfo),
|
PARSE_ACPI_HEADER (&AcpiHdrInfo),
|
||||||
{L"Version", 2, 36, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Version", 2, 36, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Status", 1, 38, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Status", 1, 38, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Image Type", 1, 39, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Image Type", 1, 39, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Image Address", 8, 40, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Image Address", 8, 40, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Image Offset X", 4, 48, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Image Offset X", 4, 48, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Image Offset Y", 4, 52, L"%d", NULL, NULL, NULL, NULL}
|
{ L"Image Offset Y", 4, 52, L"%d", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -44,10 +44,10 @@ STATIC CONST ACPI_PARSER BgrtParser[] = {
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiBgrt (
|
ParseAcpiBgrt (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (!Trace) {
|
if (!Trace) {
|
||||||
|
@ -14,17 +14,17 @@
|
|||||||
#include "AcpiTableParser.h"
|
#include "AcpiTableParser.h"
|
||||||
|
|
||||||
// Local variables pointing to the table fields
|
// Local variables pointing to the table fields
|
||||||
STATIC CONST UINT32* OffsetDbgDeviceInfo;
|
STATIC CONST UINT32 *OffsetDbgDeviceInfo;
|
||||||
STATIC CONST UINT32* NumberDbgDeviceInfo;
|
STATIC CONST UINT32 *NumberDbgDeviceInfo;
|
||||||
STATIC CONST UINT16* DbgDevInfoLen;
|
STATIC CONST UINT16 *DbgDevInfoLen;
|
||||||
STATIC CONST UINT8* GasCount;
|
STATIC CONST UINT8 *GasCount;
|
||||||
STATIC CONST UINT16* NameSpaceStringLength;
|
STATIC CONST UINT16 *NameSpaceStringLength;
|
||||||
STATIC CONST UINT16* NameSpaceStringOffset;
|
STATIC CONST UINT16 *NameSpaceStringOffset;
|
||||||
STATIC CONST UINT16* OEMDataLength;
|
STATIC CONST UINT16 *OEMDataLength;
|
||||||
STATIC CONST UINT16* OEMDataOffset;
|
STATIC CONST UINT16 *OEMDataOffset;
|
||||||
STATIC CONST UINT16* BaseAddrRegOffset;
|
STATIC CONST UINT16 *BaseAddrRegOffset;
|
||||||
STATIC CONST UINT16* AddrSizeOffset;
|
STATIC CONST UINT16 *AddrSizeOffset;
|
||||||
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function validates the NameSpace string length.
|
This function validates the NameSpace string length.
|
||||||
@ -37,64 +37,64 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateNameSpaceStrLen (
|
ValidateNameSpaceStrLen (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT16 NameSpaceStrLen;
|
UINT16 NameSpaceStrLen;
|
||||||
|
|
||||||
NameSpaceStrLen = *(UINT16*)Ptr;
|
NameSpaceStrLen = *(UINT16 *)Ptr;
|
||||||
|
|
||||||
if (NameSpaceStrLen < 2) {
|
if (NameSpaceStrLen < 2) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"\nERROR: NamespaceString Length = %d. If no Namespace device exists, " \
|
L"\nERROR: NamespaceString Length = %d. If no Namespace device exists, " \
|
||||||
L"NamespaceString[] must contain a period '.'",
|
L"NamespaceString[] must contain a period '.'",
|
||||||
NameSpaceStrLen
|
NameSpaceStrLen
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// An ACPI_PARSER array describing the ACPI DBG2 table.
|
/// An ACPI_PARSER array describing the ACPI DBG2 table.
|
||||||
STATIC CONST ACPI_PARSER Dbg2Parser[] = {
|
STATIC CONST ACPI_PARSER Dbg2Parser[] = {
|
||||||
PARSE_ACPI_HEADER (&AcpiHdrInfo),
|
PARSE_ACPI_HEADER (&AcpiHdrInfo),
|
||||||
{L"OffsetDbgDeviceInfo", 4, 36, L"0x%x", NULL,
|
{ L"OffsetDbgDeviceInfo", 4, 36, L"0x%x", NULL,
|
||||||
(VOID**)&OffsetDbgDeviceInfo, NULL, NULL},
|
(VOID **)&OffsetDbgDeviceInfo, NULL, NULL },
|
||||||
{L"NumberDbgDeviceInfo", 4, 40, L"%d", NULL,
|
{ L"NumberDbgDeviceInfo", 4, 40, L"%d", NULL,
|
||||||
(VOID**)&NumberDbgDeviceInfo, NULL, NULL}
|
(VOID **)&NumberDbgDeviceInfo, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/// An ACPI_PARSER array describing the debug device information structure
|
/// An ACPI_PARSER array describing the debug device information structure
|
||||||
/// header.
|
/// header.
|
||||||
STATIC CONST ACPI_PARSER DbgDevInfoHeaderParser[] = {
|
STATIC CONST ACPI_PARSER DbgDevInfoHeaderParser[] = {
|
||||||
{L"Revision", 1, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Revision", 1, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Length", 2, 1, L"%d", NULL, (VOID**)&DbgDevInfoLen, NULL, NULL}
|
{ L"Length", 2, 1, L"%d", NULL, (VOID **)&DbgDevInfoLen, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/// An ACPI_PARSER array describing the debug device information.
|
/// An ACPI_PARSER array describing the debug device information.
|
||||||
STATIC CONST ACPI_PARSER DbgDevInfoParser[] = {
|
STATIC CONST ACPI_PARSER DbgDevInfoParser[] = {
|
||||||
{L"Revision", 1, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Revision", 1, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Length", 2, 1, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Length", 2, 1, L"%d", NULL, NULL, NULL, NULL },
|
||||||
|
|
||||||
{L"Generic Address Registers Count", 1, 3, L"0x%x", NULL,
|
{ L"Generic Address Registers Count", 1, 3, L"0x%x", NULL,
|
||||||
(VOID**)&GasCount, NULL, NULL},
|
(VOID **)&GasCount, NULL, NULL },
|
||||||
{L"NameSpace String Length", 2, 4, L"%d", NULL,
|
{ L"NameSpace String Length", 2, 4, L"%d", NULL,
|
||||||
(VOID**)&NameSpaceStringLength, ValidateNameSpaceStrLen, NULL},
|
(VOID **)&NameSpaceStringLength, ValidateNameSpaceStrLen, NULL },
|
||||||
{L"NameSpace String Offset", 2, 6, L"0x%x", NULL,
|
{ L"NameSpace String Offset", 2, 6, L"0x%x", NULL,
|
||||||
(VOID**)&NameSpaceStringOffset, NULL, NULL},
|
(VOID **)&NameSpaceStringOffset, NULL, NULL },
|
||||||
{L"OEM Data Length", 2, 8, L"%d", NULL, (VOID**)&OEMDataLength,
|
{ L"OEM Data Length", 2, 8, L"%d", NULL, (VOID **)&OEMDataLength,
|
||||||
NULL, NULL},
|
NULL, NULL },
|
||||||
{L"OEM Data Offset", 2, 10, L"0x%x", NULL, (VOID**)&OEMDataOffset,
|
{ L"OEM Data Offset", 2, 10, L"0x%x", NULL, (VOID **)&OEMDataOffset,
|
||||||
NULL, NULL},
|
NULL, NULL },
|
||||||
|
|
||||||
{L"Port Type", 2, 12, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Port Type", 2, 12, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Port SubType", 2, 14, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Port SubType", 2, 14, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 2, 16, L"%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 2, 16, L"%x", NULL, NULL, NULL, NULL },
|
||||||
|
|
||||||
{L"Base Address Register Offset", 2, 18, L"0x%x", NULL,
|
{ L"Base Address Register Offset", 2, 18, L"0x%x", NULL,
|
||||||
(VOID**)&BaseAddrRegOffset, NULL, NULL},
|
(VOID **)&BaseAddrRegOffset, NULL, NULL },
|
||||||
{L"Address Size Offset", 2, 20, L"0x%x", NULL,
|
{ L"Address Size Offset", 2, 20, L"0x%x", NULL,
|
||||||
(VOID**)&AddrSizeOffset, NULL, NULL}
|
(VOID **)&AddrSizeOffset, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -107,8 +107,8 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DumpDbgDeviceInfo (
|
DumpDbgDeviceInfo (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT16 Length
|
IN UINT16 Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT16 Index;
|
UINT16 Index;
|
||||||
@ -131,21 +131,23 @@ DumpDbgDeviceInfo (
|
|||||||
(OEMDataLength == NULL) ||
|
(OEMDataLength == NULL) ||
|
||||||
(OEMDataOffset == NULL) ||
|
(OEMDataOffset == NULL) ||
|
||||||
(BaseAddrRegOffset == NULL) ||
|
(BaseAddrRegOffset == NULL) ||
|
||||||
(AddrSizeOffset == NULL)) {
|
(AddrSizeOffset == NULL))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Insufficient Debug Device Information Structure length. " \
|
L"ERROR: Insufficient Debug Device Information Structure length. " \
|
||||||
L"Length = %d.\n",
|
L"Length = %d.\n",
|
||||||
Length
|
Length
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// GAS
|
// GAS
|
||||||
Index = 0;
|
Index = 0;
|
||||||
Offset = *BaseAddrRegOffset;
|
Offset = *BaseAddrRegOffset;
|
||||||
while ((Index++ < *GasCount) &&
|
while ((Index++ < *GasCount) &&
|
||||||
(Offset < Length)) {
|
(Offset < Length))
|
||||||
|
{
|
||||||
PrintFieldName (4, L"BaseAddressRegister");
|
PrintFieldName (4, L"BaseAddressRegister");
|
||||||
Offset += (UINT16)DumpGasStruct (
|
Offset += (UINT16)DumpGasStruct (
|
||||||
Ptr + Offset,
|
Ptr + Offset,
|
||||||
@ -160,7 +162,7 @@ DumpDbgDeviceInfo (
|
|||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Invalid GAS count. GasCount = %d. RemainingBufferLength = %d. " \
|
L"ERROR: Invalid GAS count. GasCount = %d. RemainingBufferLength = %d. " \
|
||||||
L"Parsing of the Debug Device Information structure aborted.\n",
|
L"Parsing of the Debug Device Information structure aborted.\n",
|
||||||
*GasCount,
|
*GasCount,
|
||||||
Length - *AddrSizeOffset
|
Length - *AddrSizeOffset
|
||||||
);
|
);
|
||||||
@ -168,39 +170,45 @@ DumpDbgDeviceInfo (
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Address Size
|
// Address Size
|
||||||
Index = 0;
|
Index = 0;
|
||||||
Offset = *AddrSizeOffset;
|
Offset = *AddrSizeOffset;
|
||||||
while ((Index++ < *GasCount) &&
|
while ((Index++ < *GasCount) &&
|
||||||
(Offset < Length)) {
|
(Offset < Length))
|
||||||
|
{
|
||||||
PrintFieldName (4, L"Address Size");
|
PrintFieldName (4, L"Address Size");
|
||||||
Print (L"0x%x\n", *((UINT32*)(Ptr + Offset)));
|
Print (L"0x%x\n", *((UINT32 *)(Ptr + Offset)));
|
||||||
Offset += sizeof (UINT32);
|
Offset += sizeof (UINT32);
|
||||||
}
|
}
|
||||||
|
|
||||||
// NameSpace String
|
// NameSpace String
|
||||||
Index = 0;
|
Index = 0;
|
||||||
Offset = *NameSpaceStringOffset;
|
Offset = *NameSpaceStringOffset;
|
||||||
PrintFieldName (4, L"NameSpace String");
|
PrintFieldName (4, L"NameSpace String");
|
||||||
while ((Index++ < *NameSpaceStringLength) &&
|
while ((Index++ < *NameSpaceStringLength) &&
|
||||||
(Offset < Length)) {
|
(Offset < Length))
|
||||||
|
{
|
||||||
Print (L"%c", *(Ptr + Offset));
|
Print (L"%c", *(Ptr + Offset));
|
||||||
Offset++;
|
Offset++;
|
||||||
}
|
}
|
||||||
|
|
||||||
Print (L"\n");
|
Print (L"\n");
|
||||||
|
|
||||||
// OEM Data
|
// OEM Data
|
||||||
if (*OEMDataOffset != 0) {
|
if (*OEMDataOffset != 0) {
|
||||||
Index = 0;
|
Index = 0;
|
||||||
Offset = *OEMDataOffset;
|
Offset = *OEMDataOffset;
|
||||||
PrintFieldName (4, L"OEM Data");
|
PrintFieldName (4, L"OEM Data");
|
||||||
while ((Index++ < *OEMDataLength) &&
|
while ((Index++ < *OEMDataLength) &&
|
||||||
(Offset < Length)) {
|
(Offset < Length))
|
||||||
|
{
|
||||||
Print (L"%x ", *(Ptr + Offset));
|
Print (L"%x ", *(Ptr + Offset));
|
||||||
if ((Index & 7) == 0) {
|
if ((Index & 7) == 0) {
|
||||||
Print (L"\n%-*s ", OUTPUT_FIELD_COLUMN_WIDTH, L"");
|
Print (L"\n%-*s ", OUTPUT_FIELD_COLUMN_WIDTH, L"");
|
||||||
}
|
}
|
||||||
|
|
||||||
Offset++;
|
Offset++;
|
||||||
}
|
}
|
||||||
|
|
||||||
Print (L"\n");
|
Print (L"\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -220,14 +228,14 @@ DumpDbgDeviceInfo (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiDbg2 (
|
ParseAcpiDbg2 (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Offset;
|
UINT32 Offset;
|
||||||
UINT32 Index;
|
UINT32 Index;
|
||||||
|
|
||||||
if (!Trace) {
|
if (!Trace) {
|
||||||
return;
|
return;
|
||||||
@ -245,7 +253,8 @@ ParseAcpiDbg2 (
|
|||||||
// Check if the values used to control the parsing logic have been
|
// Check if the values used to control the parsing logic have been
|
||||||
// successfully read.
|
// successfully read.
|
||||||
if ((OffsetDbgDeviceInfo == NULL) ||
|
if ((OffsetDbgDeviceInfo == NULL) ||
|
||||||
(NumberDbgDeviceInfo == NULL)) {
|
(NumberDbgDeviceInfo == NULL))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Insufficient table length. AcpiTableLength = %d\n",
|
L"ERROR: Insufficient table length. AcpiTableLength = %d\n",
|
||||||
@ -255,10 +264,9 @@ ParseAcpiDbg2 (
|
|||||||
}
|
}
|
||||||
|
|
||||||
Offset = *OffsetDbgDeviceInfo;
|
Offset = *OffsetDbgDeviceInfo;
|
||||||
Index = 0;
|
Index = 0;
|
||||||
|
|
||||||
while (Index++ < *NumberDbgDeviceInfo) {
|
while (Index++ < *NumberDbgDeviceInfo) {
|
||||||
|
|
||||||
// Parse the Debug Device Information Structure header to obtain Length
|
// Parse the Debug Device Information Structure header to obtain Length
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
FALSE,
|
FALSE,
|
||||||
@ -275,8 +283,8 @@ ParseAcpiDbg2 (
|
|||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Insufficient remaining table buffer length to read the " \
|
L"ERROR: Insufficient remaining table buffer length to read the " \
|
||||||
L"Debug Device Information structure's 'Length' field. " \
|
L"Debug Device Information structure's 'Length' field. " \
|
||||||
L"RemainingTableBufferLength = %d.\n",
|
L"RemainingTableBufferLength = %d.\n",
|
||||||
AcpiTableLength - Offset
|
AcpiTableLength - Offset
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
@ -284,11 +292,12 @@ ParseAcpiDbg2 (
|
|||||||
|
|
||||||
// Validate Debug Device Information Structure length
|
// Validate Debug Device Information Structure length
|
||||||
if ((*DbgDevInfoLen == 0) ||
|
if ((*DbgDevInfoLen == 0) ||
|
||||||
((Offset + (*DbgDevInfoLen)) > AcpiTableLength)) {
|
((Offset + (*DbgDevInfoLen)) > AcpiTableLength))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Invalid Debug Device Information Structure length. " \
|
L"ERROR: Invalid Debug Device Information Structure length. " \
|
||||||
L"Length = %d. Offset = %d. AcpiTableLength = %d.\n",
|
L"Length = %d. Offset = %d. AcpiTableLength = %d.\n",
|
||||||
*DbgDevInfoLen,
|
*DbgDevInfoLen,
|
||||||
Offset,
|
Offset,
|
||||||
AcpiTableLength
|
AcpiTableLength
|
||||||
|
@ -28,10 +28,10 @@
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiDsdt (
|
ParseAcpiDsdt (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (!Trace) {
|
if (!Trace) {
|
||||||
|
@ -16,23 +16,23 @@
|
|||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the ACPI FACS Table.
|
An ACPI_PARSER array describing the ACPI FACS Table.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER FacsParser[] = {
|
STATIC CONST ACPI_PARSER FacsParser[] = {
|
||||||
{L"Signature", 4, 0, L"%c%c%c%c", Dump4Chars, NULL, NULL, NULL},
|
{ L"Signature", 4, 0, L"%c%c%c%c", Dump4Chars, NULL, NULL, NULL },
|
||||||
{L"Length", 4, 4, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Length", 4, 4, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Hardware Signature", 4, 8, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Hardware Signature", 4, 8, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Firmware Waking Vector", 4, 12, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Firmware Waking Vector", 4, 12, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Global Lock", 4, 16, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Global Lock", 4, 16, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Flags", 4, 20, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Flags", 4, 20, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"X Firmware Walking Vector", 8, 24, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"X Firmware Walking Vector", 8, 24, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Version", 1, 32, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Version", 1, 32, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 3, 33, L"%x %x %x", Dump3Chars, NULL, NULL, NULL},
|
{ L"Reserved", 3, 33, L"%x %x %x", Dump3Chars, NULL, NULL, NULL },
|
||||||
{L"OSPM Flags", 4, 36, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"OSPM Flags", 4, 36, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 8, 40, L"%x %x %x %x %x %x %x %x", Dump8Chars, NULL, NULL,
|
{ L"Reserved", 8, 40, L"%x %x %x %x %x %x %x %x", Dump8Chars, NULL, NULL,
|
||||||
NULL},
|
NULL },
|
||||||
{L"Reserved", 8, 48, L"%x %x %x %x %x %x %x %x", Dump8Chars, NULL, NULL,
|
{ L"Reserved", 8, 48, L"%x %x %x %x %x %x %x %x", Dump8Chars, NULL, NULL,
|
||||||
NULL},
|
NULL },
|
||||||
{L"Reserved", 8, 56, L"%x %x %x %x %x %x %x %x", Dump8Chars, NULL, NULL,
|
{ L"Reserved", 8, 56, L"%x %x %x %x %x %x %x %x", Dump8Chars, NULL, NULL,
|
||||||
NULL}
|
NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -50,10 +50,10 @@ STATIC CONST ACPI_PARSER FacsParser[] = {
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiFacs (
|
ParseAcpiFacs (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (!Trace) {
|
if (!Trace) {
|
||||||
|
@ -15,33 +15,33 @@
|
|||||||
#include "AcpiView.h"
|
#include "AcpiView.h"
|
||||||
|
|
||||||
// Local variables
|
// Local variables
|
||||||
STATIC CONST UINT32* DsdtAddress;
|
STATIC CONST UINT32 *DsdtAddress;
|
||||||
STATIC CONST UINT64* X_DsdtAddress;
|
STATIC CONST UINT64 *X_DsdtAddress;
|
||||||
STATIC CONST UINT32* Flags;
|
STATIC CONST UINT32 *Flags;
|
||||||
STATIC CONST UINT32* FirmwareCtrl;
|
STATIC CONST UINT32 *FirmwareCtrl;
|
||||||
STATIC CONST UINT64* X_FirmwareCtrl;
|
STATIC CONST UINT64 *X_FirmwareCtrl;
|
||||||
STATIC CONST UINT8* FadtMinorRevision;
|
STATIC CONST UINT8 *FadtMinorRevision;
|
||||||
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
A macro defining the Hardware reduced ACPI flag
|
A macro defining the Hardware reduced ACPI flag
|
||||||
**/
|
**/
|
||||||
#define HW_REDUCED_ACPI BIT20
|
#define HW_REDUCED_ACPI BIT20
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Offset to the FACS signature from the start of the FACS.
|
Offset to the FACS signature from the start of the FACS.
|
||||||
**/
|
**/
|
||||||
#define FACS_SIGNATURE_OFFSET 0
|
#define FACS_SIGNATURE_OFFSET 0
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Offset to the FACS revision from the start of the FACS.
|
Offset to the FACS revision from the start of the FACS.
|
||||||
**/
|
**/
|
||||||
#define FACS_VERSION_OFFSET 32
|
#define FACS_VERSION_OFFSET 32
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Offset to the FACS length from the start of the FACS.
|
Offset to the FACS length from the start of the FACS.
|
||||||
**/
|
**/
|
||||||
#define FACS_LENGTH_OFFSET 4
|
#define FACS_LENGTH_OFFSET 4
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Get the ACPI XSDT header info.
|
Get the ACPI XSDT header info.
|
||||||
@ -63,18 +63,19 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateFirmwareCtrl (
|
ValidateFirmwareCtrl (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
||||||
if (*(UINT32*)Ptr != 0) {
|
if (*(UINT32 *)Ptr != 0) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"\nERROR: Firmware Control must be zero for ARM platforms."
|
L"\nERROR: Firmware Control must be zero for ARM platforms."
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -88,18 +89,19 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateXFirmwareCtrl (
|
ValidateXFirmwareCtrl (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
||||||
if (*(UINT64*)Ptr != 0) {
|
if (*(UINT64 *)Ptr != 0) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"\nERROR: X Firmware Control must be zero for ARM platforms."
|
L"\nERROR: X Firmware Control must be zero for ARM platforms."
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -113,83 +115,84 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateFlags (
|
ValidateFlags (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
||||||
if (((*(UINT32*)Ptr) & HW_REDUCED_ACPI) == 0) {
|
if (((*(UINT32 *)Ptr) & HW_REDUCED_ACPI) == 0) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"\nERROR: HW_REDUCED_ACPI flag must be set for ARM platforms."
|
L"\nERROR: HW_REDUCED_ACPI flag must be set for ARM platforms."
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the ACPI FADT Table.
|
An ACPI_PARSER array describing the ACPI FADT Table.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER FadtParser[] = {
|
STATIC CONST ACPI_PARSER FadtParser[] = {
|
||||||
PARSE_ACPI_HEADER (&AcpiHdrInfo),
|
PARSE_ACPI_HEADER (&AcpiHdrInfo),
|
||||||
{L"FIRMWARE_CTRL", 4, 36, L"0x%x", NULL, (VOID**)&FirmwareCtrl,
|
{ L"FIRMWARE_CTRL", 4, 36, L"0x%x", NULL, (VOID **)&FirmwareCtrl,
|
||||||
ValidateFirmwareCtrl, NULL},
|
ValidateFirmwareCtrl, NULL },
|
||||||
{L"DSDT", 4, 40, L"0x%x", NULL, (VOID**)&DsdtAddress, NULL, NULL},
|
{ L"DSDT", 4, 40, L"0x%x", NULL, (VOID **)&DsdtAddress, NULL, NULL },
|
||||||
{L"Reserved", 1, 44, L"%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 1, 44, L"%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Preferred_PM_Profile", 1, 45, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Preferred_PM_Profile", 1, 45, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"SCI_INT", 2, 46, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"SCI_INT", 2, 46, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"SMI_CMD", 4, 48, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"SMI_CMD", 4, 48, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"ACPI_ENABLE", 1, 52, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"ACPI_ENABLE", 1, 52, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"ACPI_DISABLE", 1, 53, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"ACPI_DISABLE", 1, 53, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"S4BIOS_REQ", 1, 54, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"S4BIOS_REQ", 1, 54, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"PSTATE_CNT", 1, 55, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"PSTATE_CNT", 1, 55, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"PM1a_EVT_BLK", 4, 56, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"PM1a_EVT_BLK", 4, 56, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"PM1b_EVT_BLK", 4, 60, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"PM1b_EVT_BLK", 4, 60, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"PM1a_CNT_BLK", 4, 64, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"PM1a_CNT_BLK", 4, 64, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"PM1b_CNT_BLK", 4, 68, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"PM1b_CNT_BLK", 4, 68, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"PM2_CNT_BLK", 4, 72, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"PM2_CNT_BLK", 4, 72, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"PM_TMR_BLK", 4, 76, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"PM_TMR_BLK", 4, 76, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"GPE0_BLK", 4, 80, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"GPE0_BLK", 4, 80, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"GPE1_BLK", 4, 84, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"GPE1_BLK", 4, 84, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"PM1_EVT_LEN", 1, 88, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"PM1_EVT_LEN", 1, 88, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"PM1_CNT_LEN", 1, 89, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"PM1_CNT_LEN", 1, 89, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"PM2_CNT_LEN", 1, 90, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"PM2_CNT_LEN", 1, 90, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"PM_TMR_LEN", 1, 91, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"PM_TMR_LEN", 1, 91, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"GPE0_BLK_LEN", 1, 92, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"GPE0_BLK_LEN", 1, 92, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"GPE1_BLK_LEN", 1, 93, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"GPE1_BLK_LEN", 1, 93, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"GPE1_BASE", 1, 94, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"GPE1_BASE", 1, 94, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"CST_CNT", 1, 95, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"CST_CNT", 1, 95, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"P_LVL2_LAT", 2, 96, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"P_LVL2_LAT", 2, 96, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"P_LVL3_LAT", 2, 98, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"P_LVL3_LAT", 2, 98, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"FLUSH_SIZE", 2, 100, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"FLUSH_SIZE", 2, 100, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"FLUSH_STRIDE", 2, 102, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"FLUSH_STRIDE", 2, 102, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"DUTY_OFFSET", 1, 104, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"DUTY_OFFSET", 1, 104, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"DUTY_WIDTH", 1, 105, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"DUTY_WIDTH", 1, 105, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"DAY_ALRM", 1, 106, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"DAY_ALRM", 1, 106, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"MON_ALRM", 1, 107, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"MON_ALRM", 1, 107, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"CENTURY", 1, 108, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"CENTURY", 1, 108, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"IAPC_BOOT_ARCH", 2, 109, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"IAPC_BOOT_ARCH", 2, 109, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 1, 111, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 1, 111, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Flags", 4, 112, L"0x%x", NULL, (VOID**)&Flags, ValidateFlags, NULL},
|
{ L"Flags", 4, 112, L"0x%x", NULL, (VOID **)&Flags, ValidateFlags, NULL },
|
||||||
{L"RESET_REG", 12, 116, NULL, DumpGas, NULL, NULL, NULL},
|
{ L"RESET_REG", 12, 116, NULL, DumpGas, NULL, NULL, NULL },
|
||||||
{L"RESET_VALUE", 1, 128, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"RESET_VALUE", 1, 128, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"ARM_BOOT_ARCH", 2, 129, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"ARM_BOOT_ARCH", 2, 129, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"FADT Minor Version", 1, 131, L"0x%x", NULL, (VOID**)&FadtMinorRevision,
|
{ L"FADT Minor Version", 1, 131, L"0x%x", NULL, (VOID **)&FadtMinorRevision,
|
||||||
NULL, NULL},
|
NULL, NULL },
|
||||||
{L"X_FIRMWARE_CTRL", 8, 132, L"0x%lx", NULL, (VOID**)&X_FirmwareCtrl,
|
{ L"X_FIRMWARE_CTRL", 8, 132, L"0x%lx", NULL, (VOID **)&X_FirmwareCtrl,
|
||||||
ValidateXFirmwareCtrl, NULL},
|
ValidateXFirmwareCtrl, NULL },
|
||||||
{L"X_DSDT", 8, 140, L"0x%lx", NULL, (VOID**)&X_DsdtAddress, NULL, NULL},
|
{ L"X_DSDT", 8, 140, L"0x%lx", NULL, (VOID **)&X_DsdtAddress, NULL, NULL },
|
||||||
{L"X_PM1a_EVT_BLK", 12, 148, NULL, DumpGas, NULL, NULL, NULL},
|
{ L"X_PM1a_EVT_BLK", 12, 148, NULL, DumpGas, NULL, NULL, NULL },
|
||||||
{L"X_PM1b_EVT_BLK", 12, 160, NULL, DumpGas, NULL, NULL, NULL},
|
{ L"X_PM1b_EVT_BLK", 12, 160, NULL, DumpGas, NULL, NULL, NULL },
|
||||||
{L"X_PM1a_CNT_BLK", 12, 172, NULL, DumpGas, NULL, NULL, NULL},
|
{ L"X_PM1a_CNT_BLK", 12, 172, NULL, DumpGas, NULL, NULL, NULL },
|
||||||
{L"X_PM1b_CNT_BLK", 12, 184, NULL, DumpGas, NULL, NULL, NULL},
|
{ L"X_PM1b_CNT_BLK", 12, 184, NULL, DumpGas, NULL, NULL, NULL },
|
||||||
{L"X_PM2_CNT_BLK", 12, 196, NULL, DumpGas, NULL, NULL, NULL},
|
{ L"X_PM2_CNT_BLK", 12, 196, NULL, DumpGas, NULL, NULL, NULL },
|
||||||
{L"X_PM_TMR_BLK", 12, 208, NULL, DumpGas, NULL, NULL, NULL},
|
{ L"X_PM_TMR_BLK", 12, 208, NULL, DumpGas, NULL, NULL, NULL },
|
||||||
{L"X_GPE0_BLK", 12, 220, NULL, DumpGas, NULL, NULL, NULL},
|
{ L"X_GPE0_BLK", 12, 220, NULL, DumpGas, NULL, NULL, NULL },
|
||||||
{L"X_GPE1_BLK", 12, 232, NULL, DumpGas, NULL, NULL, NULL},
|
{ L"X_GPE1_BLK", 12, 232, NULL, DumpGas, NULL, NULL, NULL },
|
||||||
{L"SLEEP_CONTROL_REG", 12, 244, NULL, DumpGas, NULL, NULL, NULL},
|
{ L"SLEEP_CONTROL_REG", 12, 244, NULL, DumpGas, NULL, NULL, NULL },
|
||||||
{L"SLEEP_STATUS_REG", 12, 256, NULL, DumpGas, NULL, NULL, NULL},
|
{ L"SLEEP_STATUS_REG", 12, 256, NULL, DumpGas, NULL, NULL, NULL },
|
||||||
{L"Hypervisor VendorIdentity", 8, 268, L"%lx", NULL, NULL, NULL, NULL}
|
{ L"Hypervisor VendorIdentity", 8, 268, L"%lx", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -206,19 +209,19 @@ STATIC CONST ACPI_PARSER FadtParser[] = {
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiFadt (
|
ParseAcpiFadt (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
UINT8* DsdtPtr;
|
UINT8 *DsdtPtr;
|
||||||
UINT8* FirmwareCtrlPtr;
|
UINT8 *FirmwareCtrlPtr;
|
||||||
UINT32 FacsSignature;
|
UINT32 FacsSignature;
|
||||||
UINT32 FacsLength;
|
UINT32 FacsLength;
|
||||||
UINT8 FacsRevision;
|
UINT8 FacsRevision;
|
||||||
PARSE_ACPI_TABLE_PROC FacsParserProc;
|
PARSE_ACPI_TABLE_PROC FacsParserProc;
|
||||||
|
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
Trace,
|
Trace,
|
||||||
@ -233,7 +236,7 @@ ParseAcpiFadt (
|
|||||||
if (FadtMinorRevision != NULL) {
|
if (FadtMinorRevision != NULL) {
|
||||||
Print (L"\nSummary:\n");
|
Print (L"\nSummary:\n");
|
||||||
PrintFieldName (2, L"FADT Version");
|
PrintFieldName (2, L"FADT Version");
|
||||||
Print (L"%d.%d\n", *AcpiHdrInfo.Revision, *FadtMinorRevision);
|
Print (L"%d.%d\n", *AcpiHdrInfo.Revision, *FadtMinorRevision);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (*GetAcpiXsdtHeaderInfo ()->OemTableId != *AcpiHdrInfo.OemTableId) {
|
if (*GetAcpiXsdtHeaderInfo ()->OemTableId != *AcpiHdrInfo.OemTableId) {
|
||||||
@ -245,9 +248,9 @@ ParseAcpiFadt (
|
|||||||
// If X_FIRMWARE_CTRL is not zero then use X_FIRMWARE_CTRL and ignore
|
// If X_FIRMWARE_CTRL is not zero then use X_FIRMWARE_CTRL and ignore
|
||||||
// FIRMWARE_CTRL, else use FIRMWARE_CTRL.
|
// FIRMWARE_CTRL, else use FIRMWARE_CTRL.
|
||||||
if ((X_FirmwareCtrl != NULL) && (*X_FirmwareCtrl != 0)) {
|
if ((X_FirmwareCtrl != NULL) && (*X_FirmwareCtrl != 0)) {
|
||||||
FirmwareCtrlPtr = (UINT8*)(UINTN)(*X_FirmwareCtrl);
|
FirmwareCtrlPtr = (UINT8 *)(UINTN)(*X_FirmwareCtrl);
|
||||||
} else if ((FirmwareCtrl != NULL) && (*FirmwareCtrl != 0)) {
|
} else if ((FirmwareCtrl != NULL) && (*FirmwareCtrl != 0)) {
|
||||||
FirmwareCtrlPtr = (UINT8*)(UINTN)(*FirmwareCtrl);
|
FirmwareCtrlPtr = (UINT8 *)(UINTN)(*FirmwareCtrl);
|
||||||
} else {
|
} else {
|
||||||
FirmwareCtrlPtr = NULL;
|
FirmwareCtrlPtr = NULL;
|
||||||
// if HW_REDUCED_ACPI flag is not set, both FIRMWARE_CTRL and
|
// if HW_REDUCED_ACPI flag is not set, both FIRMWARE_CTRL and
|
||||||
@ -255,10 +258,13 @@ ParseAcpiFadt (
|
|||||||
// present.
|
// present.
|
||||||
if ((Trace) &&
|
if ((Trace) &&
|
||||||
(Flags != NULL) &&
|
(Flags != NULL) &&
|
||||||
((*Flags & EFI_ACPI_6_3_HW_REDUCED_ACPI) != EFI_ACPI_6_3_HW_REDUCED_ACPI)) {
|
((*Flags & EFI_ACPI_6_3_HW_REDUCED_ACPI) != EFI_ACPI_6_3_HW_REDUCED_ACPI))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (L"ERROR: No FACS table found, "
|
Print (
|
||||||
L"both X_FIRMWARE_CTRL and FIRMWARE_CTRL are zero.\n");
|
L"ERROR: No FACS table found, "
|
||||||
|
L"both X_FIRMWARE_CTRL and FIRMWARE_CTRL are zero.\n"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -266,13 +272,13 @@ ParseAcpiFadt (
|
|||||||
// The FACS table does not have a standard ACPI table header. Therefore,
|
// The FACS table does not have a standard ACPI table header. Therefore,
|
||||||
// the signature, length and version needs to be initially parsed.
|
// the signature, length and version needs to be initially parsed.
|
||||||
// The FACS signature is 4 bytes starting at offset 0.
|
// The FACS signature is 4 bytes starting at offset 0.
|
||||||
FacsSignature = *(UINT32*)(FirmwareCtrlPtr + FACS_SIGNATURE_OFFSET);
|
FacsSignature = *(UINT32 *)(FirmwareCtrlPtr + FACS_SIGNATURE_OFFSET);
|
||||||
|
|
||||||
// The FACS length is 4 bytes starting at offset 4.
|
// The FACS length is 4 bytes starting at offset 4.
|
||||||
FacsLength = *(UINT32*)(FirmwareCtrlPtr + FACS_LENGTH_OFFSET);
|
FacsLength = *(UINT32 *)(FirmwareCtrlPtr + FACS_LENGTH_OFFSET);
|
||||||
|
|
||||||
// The FACS version is 1 byte starting at offset 32.
|
// The FACS version is 1 byte starting at offset 32.
|
||||||
FacsRevision = *(UINT8*)(FirmwareCtrlPtr + FACS_VERSION_OFFSET);
|
FacsRevision = *(UINT8 *)(FirmwareCtrlPtr + FACS_VERSION_OFFSET);
|
||||||
|
|
||||||
Trace = ProcessTableReportOptions (
|
Trace = ProcessTableReportOptions (
|
||||||
FacsSignature,
|
FacsSignature,
|
||||||
@ -298,12 +304,12 @@ ParseAcpiFadt (
|
|||||||
|
|
||||||
// If X_DSDT is valid then use X_DSDT and ignore DSDT, else use DSDT.
|
// If X_DSDT is valid then use X_DSDT and ignore DSDT, else use DSDT.
|
||||||
if ((X_DsdtAddress != NULL) && (*X_DsdtAddress != 0)) {
|
if ((X_DsdtAddress != NULL) && (*X_DsdtAddress != 0)) {
|
||||||
DsdtPtr = (UINT8*)(UINTN)(*X_DsdtAddress);
|
DsdtPtr = (UINT8 *)(UINTN)(*X_DsdtAddress);
|
||||||
} else if ((DsdtAddress != NULL) && (*DsdtAddress != 0)) {
|
} else if ((DsdtAddress != NULL) && (*DsdtAddress != 0)) {
|
||||||
DsdtPtr = (UINT8*)(UINTN)(*DsdtAddress);
|
DsdtPtr = (UINT8 *)(UINTN)(*DsdtAddress);
|
||||||
} else {
|
} else {
|
||||||
// Both DSDT and X_DSDT cannot be invalid.
|
// Both DSDT and X_DSDT cannot be invalid.
|
||||||
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
||||||
if (Trace) {
|
if (Trace) {
|
||||||
// The DSDT Table is mandatory for ARM systems
|
// The DSDT Table is mandatory for ARM systems
|
||||||
// as the CPU information MUST be presented in
|
// as the CPU information MUST be presented in
|
||||||
@ -311,7 +317,8 @@ ParseAcpiFadt (
|
|||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (L"ERROR: Both X_DSDT and DSDT are invalid.\n");
|
Print (L"ERROR: Both X_DSDT and DSDT are invalid.\n");
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
#endif
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,16 +15,16 @@
|
|||||||
#include "AcpiViewConfig.h"
|
#include "AcpiViewConfig.h"
|
||||||
|
|
||||||
// "The number of GT Block Timers must be less than or equal to 8"
|
// "The number of GT Block Timers must be less than or equal to 8"
|
||||||
#define GT_BLOCK_TIMER_COUNT_MAX 8
|
#define GT_BLOCK_TIMER_COUNT_MAX 8
|
||||||
|
|
||||||
// Local variables
|
// Local variables
|
||||||
STATIC CONST UINT32* GtdtPlatformTimerCount;
|
STATIC CONST UINT32 *GtdtPlatformTimerCount;
|
||||||
STATIC CONST UINT32* GtdtPlatformTimerOffset;
|
STATIC CONST UINT32 *GtdtPlatformTimerOffset;
|
||||||
STATIC CONST UINT8* PlatformTimerType;
|
STATIC CONST UINT8 *PlatformTimerType;
|
||||||
STATIC CONST UINT16* PlatformTimerLength;
|
STATIC CONST UINT16 *PlatformTimerLength;
|
||||||
STATIC CONST UINT32* GtBlockTimerCount;
|
STATIC CONST UINT32 *GtBlockTimerCount;
|
||||||
STATIC CONST UINT32* GtBlockTimerOffset;
|
STATIC CONST UINT32 *GtBlockTimerOffset;
|
||||||
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function validates the GT Block timer count.
|
This function validates the GT Block timer count.
|
||||||
@ -37,13 +37,13 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateGtBlockTimerCount (
|
ValidateGtBlockTimerCount (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 BlockTimerCount;
|
UINT32 BlockTimerCount;
|
||||||
|
|
||||||
BlockTimerCount = *(UINT32*)Ptr;
|
BlockTimerCount = *(UINT32 *)Ptr;
|
||||||
|
|
||||||
if (BlockTimerCount > GT_BLOCK_TIMER_COUNT_MAX) {
|
if (BlockTimerCount > GT_BLOCK_TIMER_COUNT_MAX) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
@ -66,13 +66,13 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateGtFrameNumber (
|
ValidateGtFrameNumber (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT8 FrameNumber;
|
UINT8 FrameNumber;
|
||||||
|
|
||||||
FrameNumber = *(UINT8*)Ptr;
|
FrameNumber = *(UINT8 *)Ptr;
|
||||||
|
|
||||||
if (FrameNumber >= GT_BLOCK_TIMER_COUNT_MAX) {
|
if (FrameNumber >= GT_BLOCK_TIMER_COUNT_MAX) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
@ -87,82 +87,82 @@ ValidateGtFrameNumber (
|
|||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the ACPI GTDT Table.
|
An ACPI_PARSER array describing the ACPI GTDT Table.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER GtdtParser[] = {
|
STATIC CONST ACPI_PARSER GtdtParser[] = {
|
||||||
PARSE_ACPI_HEADER (&AcpiHdrInfo),
|
PARSE_ACPI_HEADER (&AcpiHdrInfo),
|
||||||
{L"CntControlBase Physical Address", 8, 36, L"0x%lx", NULL, NULL,
|
{ L"CntControlBase Physical Address",8, 36, L"0x%lx", NULL, NULL,
|
||||||
NULL, NULL},
|
NULL, NULL },
|
||||||
{L"Reserved", 4, 44, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 4, 44, L"0x%x", NULL, NULL,NULL, NULL },
|
||||||
{L"Secure EL1 timer GSIV", 4, 48, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Secure EL1 timer GSIV", 4, 48, L"0x%x", NULL, NULL,NULL, NULL },
|
||||||
{L"Secure EL1 timer FLAGS", 4, 52, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Secure EL1 timer FLAGS", 4, 52, L"0x%x", NULL, NULL,NULL, NULL },
|
||||||
|
|
||||||
{L"Non-Secure EL1 timer GSIV", 4, 56, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Non-Secure EL1 timer GSIV", 4, 56, L"0x%x", NULL, NULL,NULL, NULL },
|
||||||
{L"Non-Secure EL1 timer FLAGS", 4, 60, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Non-Secure EL1 timer FLAGS", 4, 60, L"0x%x", NULL, NULL,NULL, NULL },
|
||||||
|
|
||||||
{L"Virtual timer GSIV", 4, 64, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Virtual timer GSIV", 4, 64, L"0x%x", NULL, NULL,NULL, NULL },
|
||||||
{L"Virtual timer FLAGS", 4, 68, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Virtual timer FLAGS", 4, 68, L"0x%x", NULL, NULL,NULL, NULL },
|
||||||
|
|
||||||
{L"Non-Secure EL2 timer GSIV", 4, 72, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Non-Secure EL2 timer GSIV", 4, 72, L"0x%x", NULL, NULL,NULL, NULL },
|
||||||
{L"Non-Secure EL2 timer FLAGS", 4, 76, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Non-Secure EL2 timer FLAGS", 4, 76, L"0x%x", NULL, NULL,NULL, NULL },
|
||||||
|
|
||||||
{L"CntReadBase Physical address", 8, 80, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"CntReadBase Physical address", 8, 80, L"0x%lx", NULL, NULL,NULL, NULL },
|
||||||
{L"Platform Timer Count", 4, 88, L"%d", NULL,
|
{ L"Platform Timer Count", 4, 88, L"%d", NULL,
|
||||||
(VOID**)&GtdtPlatformTimerCount, NULL, NULL},
|
(VOID **)&GtdtPlatformTimerCount, NULL, NULL },
|
||||||
{L"Platform Timer Offset", 4, 92, L"0x%x", NULL,
|
{ L"Platform Timer Offset", 4, 92, L"0x%x", NULL,
|
||||||
(VOID**)&GtdtPlatformTimerOffset, NULL, NULL},
|
(VOID **)&GtdtPlatformTimerOffset,NULL, NULL },
|
||||||
{L"Virtual EL2 Timer GSIV", 4, 96, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Virtual EL2 Timer GSIV", 4, 96, L"0x%x", NULL, NULL,NULL, NULL },
|
||||||
{L"Virtual EL2 Timer Flags", 4, 100, L"0x%x", NULL, NULL, NULL, NULL}
|
{ L"Virtual EL2 Timer Flags", 4, 100, L"0x%x", NULL, NULL,NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the Platform timer header.
|
An ACPI_PARSER array describing the Platform timer header.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER GtPlatformTimerHeaderParser[] = {
|
STATIC CONST ACPI_PARSER GtPlatformTimerHeaderParser[] = {
|
||||||
{L"Type", 1, 0, NULL, NULL, (VOID**)&PlatformTimerType, NULL, NULL},
|
{ L"Type", 1, 0, NULL, NULL, (VOID **)&PlatformTimerType, NULL, NULL },
|
||||||
{L"Length", 2, 1, NULL, NULL, (VOID**)&PlatformTimerLength, NULL, NULL},
|
{ L"Length", 2, 1, NULL, NULL, (VOID **)&PlatformTimerLength, NULL, NULL },
|
||||||
{L"Reserved", 1, 3, NULL, NULL, NULL, NULL, NULL}
|
{ L"Reserved", 1, 3, NULL, NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the Platform GT Block.
|
An ACPI_PARSER array describing the Platform GT Block.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER GtBlockParser[] = {
|
STATIC CONST ACPI_PARSER GtBlockParser[] = {
|
||||||
{L"Type", 1, 0, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Type", 1, 0, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Length", 2, 1, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Length", 2, 1, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 1, 3, L"%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 1, 3, L"%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Physical address (CntCtlBase)", 8, 4, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Physical address (CntCtlBase)", 8, 4, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Timer Count", 4, 12, L"%d", NULL, (VOID**)&GtBlockTimerCount,
|
{ L"Timer Count", 4, 12, L"%d", NULL, (VOID **)&GtBlockTimerCount,
|
||||||
ValidateGtBlockTimerCount, NULL},
|
ValidateGtBlockTimerCount, NULL },
|
||||||
{L"Timer Offset", 4, 16, L"%d", NULL, (VOID**)&GtBlockTimerOffset, NULL,
|
{ L"Timer Offset", 4, 16, L"%d", NULL, (VOID **)&GtBlockTimerOffset, NULL,
|
||||||
NULL}
|
NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the GT Block timer.
|
An ACPI_PARSER array describing the GT Block timer.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER GtBlockTimerParser[] = {
|
STATIC CONST ACPI_PARSER GtBlockTimerParser[] = {
|
||||||
{L"Frame Number", 1, 0, L"%d", NULL, NULL, ValidateGtFrameNumber, NULL},
|
{ L"Frame Number", 1, 0, L"%d", NULL, NULL, ValidateGtFrameNumber, NULL },
|
||||||
{L"Reserved", 3, 1, L"%x %x %x", Dump3Chars, NULL, NULL, NULL},
|
{ L"Reserved", 3, 1, L"%x %x %x", Dump3Chars, NULL, NULL, NULL },
|
||||||
{L"Physical address (CntBaseX)", 8, 4, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Physical address (CntBaseX)", 8, 4, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Physical address (CntEL0BaseX)", 8, 12, L"0x%lx", NULL, NULL, NULL,
|
{ L"Physical address (CntEL0BaseX)", 8, 12, L"0x%lx", NULL, NULL, NULL,
|
||||||
NULL},
|
NULL },
|
||||||
{L"Physical Timer GSIV", 4, 20, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Physical Timer GSIV", 4, 20, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Physical Timer Flags", 4, 24, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Physical Timer Flags", 4, 24, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Virtual Timer GSIV", 4, 28, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Virtual Timer GSIV", 4, 28, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Virtual Timer Flags", 4, 32, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Virtual Timer Flags", 4, 32, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Common Flags", 4, 36, L"0x%x", NULL, NULL, NULL, NULL}
|
{ L"Common Flags", 4, 36, L"0x%x", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the Platform Watchdog.
|
An ACPI_PARSER array describing the Platform Watchdog.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER ArmGenericWatchdogParser[] = {
|
STATIC CONST ACPI_PARSER ArmGenericWatchdogParser[] = {
|
||||||
{L"Type", 1, 0, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Type", 1, 0, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Length", 2, 1, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Length", 2, 1, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 1, 3, L"%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 1, 3, L"%x", NULL, NULL, NULL, NULL },
|
||||||
{L"RefreshFrame Physical address", 8, 4, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"RefreshFrame Physical address", 8, 4, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"ControlFrame Physical address", 8, 12, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"ControlFrame Physical address", 8, 12, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Watchdog Timer GSIV", 4, 20, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Watchdog Timer GSIV", 4, 20, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Watchdog Timer Flags", 4, 24, L"0x%x", NULL, NULL, NULL, NULL}
|
{ L"Watchdog Timer Flags", 4, 24, L"0x%x", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -174,12 +174,12 @@ STATIC CONST ACPI_PARSER ArmGenericWatchdogParser[] = {
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpGTBlock (
|
DumpGTBlock (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT16 Length
|
IN UINT16 Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Index;
|
UINT32 Index;
|
||||||
UINT32 Offset;
|
UINT32 Offset;
|
||||||
|
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
TRUE,
|
TRUE,
|
||||||
@ -193,7 +193,8 @@ DumpGTBlock (
|
|||||||
// Check if the values used to control the parsing logic have been
|
// Check if the values used to control the parsing logic have been
|
||||||
// successfully read.
|
// successfully read.
|
||||||
if ((GtBlockTimerCount == NULL) ||
|
if ((GtBlockTimerCount == NULL) ||
|
||||||
(GtBlockTimerOffset == NULL)) {
|
(GtBlockTimerOffset == NULL))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Insufficient GT Block Structure length. Length = %d.\n",
|
L"ERROR: Insufficient GT Block Structure length. Length = %d.\n",
|
||||||
@ -203,12 +204,13 @@ DumpGTBlock (
|
|||||||
}
|
}
|
||||||
|
|
||||||
Offset = *GtBlockTimerOffset;
|
Offset = *GtBlockTimerOffset;
|
||||||
Index = 0;
|
Index = 0;
|
||||||
|
|
||||||
// Parse the specified number of GT Block Timer Structures or the GT Block
|
// Parse the specified number of GT Block Timer Structures or the GT Block
|
||||||
// Structure buffer length. Whichever is minimum.
|
// Structure buffer length. Whichever is minimum.
|
||||||
while ((Index++ < *GtBlockTimerCount) &&
|
while ((Index++ < *GtBlockTimerCount) &&
|
||||||
(Offset < Length)) {
|
(Offset < Length))
|
||||||
|
{
|
||||||
Offset += ParseAcpi (
|
Offset += ParseAcpi (
|
||||||
TRUE,
|
TRUE,
|
||||||
2,
|
2,
|
||||||
@ -229,8 +231,8 @@ DumpGTBlock (
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpWatchdogTimer (
|
DumpWatchdogTimer (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT16 Length
|
IN UINT16 Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
@ -262,15 +264,15 @@ DumpWatchdogTimer (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiGtdt (
|
ParseAcpiGtdt (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Index;
|
UINT32 Index;
|
||||||
UINT32 Offset;
|
UINT32 Offset;
|
||||||
UINT8* TimerPtr;
|
UINT8 *TimerPtr;
|
||||||
|
|
||||||
if (!Trace) {
|
if (!Trace) {
|
||||||
return;
|
return;
|
||||||
@ -288,7 +290,8 @@ ParseAcpiGtdt (
|
|||||||
// Check if the values used to control the parsing logic have been
|
// Check if the values used to control the parsing logic have been
|
||||||
// successfully read.
|
// successfully read.
|
||||||
if ((GtdtPlatformTimerCount == NULL) ||
|
if ((GtdtPlatformTimerCount == NULL) ||
|
||||||
(GtdtPlatformTimerOffset == NULL)) {
|
(GtdtPlatformTimerOffset == NULL))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Insufficient table length. AcpiTableLength = %d.\n",
|
L"ERROR: Insufficient table length. AcpiTableLength = %d.\n",
|
||||||
@ -298,13 +301,14 @@ ParseAcpiGtdt (
|
|||||||
}
|
}
|
||||||
|
|
||||||
TimerPtr = Ptr + *GtdtPlatformTimerOffset;
|
TimerPtr = Ptr + *GtdtPlatformTimerOffset;
|
||||||
Offset = *GtdtPlatformTimerOffset;
|
Offset = *GtdtPlatformTimerOffset;
|
||||||
Index = 0;
|
Index = 0;
|
||||||
|
|
||||||
// Parse the specified number of Platform Timer Structures or the GTDT
|
// Parse the specified number of Platform Timer Structures or the GTDT
|
||||||
// buffer length. Whichever is minimum.
|
// buffer length. Whichever is minimum.
|
||||||
while ((Index++ < *GtdtPlatformTimerCount) &&
|
while ((Index++ < *GtdtPlatformTimerCount) &&
|
||||||
(Offset < AcpiTableLength)) {
|
(Offset < AcpiTableLength))
|
||||||
|
{
|
||||||
// Parse the Platform Timer Header to obtain Length and Type
|
// Parse the Platform Timer Header to obtain Length and Type
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
FALSE,
|
FALSE,
|
||||||
@ -318,11 +322,12 @@ ParseAcpiGtdt (
|
|||||||
// Check if the values used to control the parsing logic have been
|
// Check if the values used to control the parsing logic have been
|
||||||
// successfully read.
|
// successfully read.
|
||||||
if ((PlatformTimerType == NULL) ||
|
if ((PlatformTimerType == NULL) ||
|
||||||
(PlatformTimerLength == NULL)) {
|
(PlatformTimerLength == NULL))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Insufficient remaining table buffer length to read the " \
|
L"ERROR: Insufficient remaining table buffer length to read the " \
|
||||||
L"Platform Timer Structure header. Length = %d.\n",
|
L"Platform Timer Structure header. Length = %d.\n",
|
||||||
AcpiTableLength - Offset
|
AcpiTableLength - Offset
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
@ -330,11 +335,12 @@ ParseAcpiGtdt (
|
|||||||
|
|
||||||
// Validate Platform Timer Structure length
|
// Validate Platform Timer Structure length
|
||||||
if ((*PlatformTimerLength == 0) ||
|
if ((*PlatformTimerLength == 0) ||
|
||||||
((Offset + (*PlatformTimerLength)) > AcpiTableLength)) {
|
((Offset + (*PlatformTimerLength)) > AcpiTableLength))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Invalid Platform Timer Structure length. " \
|
L"ERROR: Invalid Platform Timer Structure length. " \
|
||||||
L"Length = %d. Offset = %d. AcpiTableLength = %d.\n",
|
L"Length = %d. Offset = %d. AcpiTableLength = %d.\n",
|
||||||
*PlatformTimerLength,
|
*PlatformTimerLength,
|
||||||
Offset,
|
Offset,
|
||||||
AcpiTableLength
|
AcpiTableLength
|
||||||
@ -359,6 +365,6 @@ ParseAcpiGtdt (
|
|||||||
} // switch
|
} // switch
|
||||||
|
|
||||||
TimerPtr += *PlatformTimerLength;
|
TimerPtr += *PlatformTimerLength;
|
||||||
Offset += *PlatformTimerLength;
|
Offset += *PlatformTimerLength;
|
||||||
} // while
|
} // while
|
||||||
}
|
}
|
||||||
|
@ -21,27 +21,27 @@
|
|||||||
#include "AcpiView.h"
|
#include "AcpiView.h"
|
||||||
|
|
||||||
// Maximum Memory Domain matrix print size.
|
// Maximum Memory Domain matrix print size.
|
||||||
#define MAX_MEMORY_DOMAIN_TARGET_PRINT_MATRIX 10
|
#define MAX_MEMORY_DOMAIN_TARGET_PRINT_MATRIX 10
|
||||||
|
|
||||||
// Local variables
|
// Local variables
|
||||||
STATIC CONST UINT16* HmatStructureType;
|
STATIC CONST UINT16 *HmatStructureType;
|
||||||
STATIC CONST UINT32* HmatStructureLength;
|
STATIC CONST UINT32 *HmatStructureLength;
|
||||||
|
|
||||||
STATIC CONST UINT32* NumberInitiatorProximityDomain;
|
STATIC CONST UINT32 *NumberInitiatorProximityDomain;
|
||||||
STATIC CONST UINT32* NumberTargetProximityDomain;
|
STATIC CONST UINT32 *NumberTargetProximityDomain;
|
||||||
STATIC CONST
|
STATIC CONST
|
||||||
EFI_ACPI_6_4_HMAT_STRUCTURE_SYSTEM_LOCALITY_LATENCY_AND_BANDWIDTH_INFO_FLAGS*
|
EFI_ACPI_6_4_HMAT_STRUCTURE_SYSTEM_LOCALITY_LATENCY_AND_BANDWIDTH_INFO_FLAGS *
|
||||||
SllbiFlags;
|
SllbiFlags;
|
||||||
|
|
||||||
STATIC CONST UINT8* SllbiDataType;
|
STATIC CONST UINT8 *SllbiDataType;
|
||||||
STATIC CONST UINT16* NumberSMBIOSHandles;
|
STATIC CONST UINT16 *NumberSMBIOSHandles;
|
||||||
|
|
||||||
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Names of System Locality Latency Bandwidth Information (SLLBI) data types
|
Names of System Locality Latency Bandwidth Information (SLLBI) data types
|
||||||
**/
|
**/
|
||||||
STATIC CONST CHAR16* SllbiNames[] = {
|
STATIC CONST CHAR16 *SllbiNames[] = {
|
||||||
L"Access %sLatency%s",
|
L"Access %sLatency%s",
|
||||||
L"Read %sLatency%s",
|
L"Read %sLatency%s",
|
||||||
L"Write %sLatency%s",
|
L"Write %sLatency%s",
|
||||||
@ -61,15 +61,15 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateCacheAttributes (
|
ValidateCacheAttributes (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO_CACHE_ATTRIBUTES*
|
EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO_CACHE_ATTRIBUTES *
|
||||||
Attributes;
|
Attributes;
|
||||||
|
|
||||||
Attributes =
|
Attributes =
|
||||||
(EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO_CACHE_ATTRIBUTES*)Ptr;
|
(EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO_CACHE_ATTRIBUTES *)Ptr;
|
||||||
|
|
||||||
if (Attributes->TotalCacheLevels > 0x3) {
|
if (Attributes->TotalCacheLevels > 0x3) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
@ -78,6 +78,7 @@ ValidateCacheAttributes (
|
|||||||
Attributes->TotalCacheLevels
|
Attributes->TotalCacheLevels
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Attributes->CacheLevel > 0x3) {
|
if (Attributes->CacheLevel > 0x3) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
@ -85,6 +86,7 @@ ValidateCacheAttributes (
|
|||||||
Attributes->CacheLevel
|
Attributes->CacheLevel
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Attributes->CacheAssociativity > 0x2) {
|
if (Attributes->CacheAssociativity > 0x2) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
@ -92,6 +94,7 @@ ValidateCacheAttributes (
|
|||||||
Attributes->CacheAssociativity
|
Attributes->CacheAssociativity
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Attributes->WritePolicy > 0x2) {
|
if (Attributes->WritePolicy > 0x2) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
@ -111,15 +114,15 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DumpCacheAttributes (
|
DumpCacheAttributes (
|
||||||
IN CONST CHAR16* Format OPTIONAL,
|
IN CONST CHAR16 *Format OPTIONAL,
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO_CACHE_ATTRIBUTES*
|
EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO_CACHE_ATTRIBUTES *
|
||||||
Attributes;
|
Attributes;
|
||||||
|
|
||||||
Attributes =
|
Attributes =
|
||||||
(EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO_CACHE_ATTRIBUTES*)Ptr;
|
(EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO_CACHE_ATTRIBUTES *)Ptr;
|
||||||
|
|
||||||
Print (L"\n");
|
Print (L"\n");
|
||||||
PrintFieldName (4, L"Total Cache Levels");
|
PrintFieldName (4, L"Total Cache Levels");
|
||||||
@ -137,55 +140,55 @@ DumpCacheAttributes (
|
|||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the ACPI HMAT Table.
|
An ACPI_PARSER array describing the ACPI HMAT Table.
|
||||||
*/
|
*/
|
||||||
STATIC CONST ACPI_PARSER HmatParser[] = {
|
STATIC CONST ACPI_PARSER HmatParser[] = {
|
||||||
PARSE_ACPI_HEADER (&AcpiHdrInfo),
|
PARSE_ACPI_HEADER (&AcpiHdrInfo),
|
||||||
{L"Reserved", 4, 36, NULL, NULL, NULL, NULL, NULL}
|
{ L"Reserved", 4,36, NULL, NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the HMAT structure header.
|
An ACPI_PARSER array describing the HMAT structure header.
|
||||||
*/
|
*/
|
||||||
STATIC CONST ACPI_PARSER HmatStructureHeaderParser[] = {
|
STATIC CONST ACPI_PARSER HmatStructureHeaderParser[] = {
|
||||||
{L"Type", 2, 0, NULL, NULL, (VOID**)&HmatStructureType, NULL, NULL},
|
{ L"Type", 2, 0, NULL, NULL, (VOID **)&HmatStructureType, NULL, NULL },
|
||||||
{L"Reserved", 2, 2, NULL, NULL, NULL, NULL, NULL},
|
{ L"Reserved", 2, 2, NULL, NULL, NULL, NULL, NULL },
|
||||||
{L"Length", 4, 4, NULL, NULL, (VOID**)&HmatStructureLength, NULL, NULL}
|
{ L"Length", 4, 4, NULL, NULL, (VOID **)&HmatStructureLength, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI PARSER array describing the Memory Proximity Domain Attributes
|
An ACPI PARSER array describing the Memory Proximity Domain Attributes
|
||||||
Structure - Type 0.
|
Structure - Type 0.
|
||||||
*/
|
*/
|
||||||
STATIC CONST ACPI_PARSER MemProximityDomainAttributeParser[] = {
|
STATIC CONST ACPI_PARSER MemProximityDomainAttributeParser[] = {
|
||||||
{L"Type", 2, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Type", 2, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Length", 4, 4, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Length", 4, 4, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Flags", 2, 8, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Flags", 2, 8, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 2, 10, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 2, 10, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Proximity Dom for initiator", 4, 12, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Proximity Dom for initiator", 4, 12, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Proximity Dom for memory", 4, 16, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Proximity Dom for memory", 4, 16, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 4, 20, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 4, 20, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 8, 24, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 8, 24, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 8, 32, L"0x%lx", NULL, NULL, NULL, NULL}
|
{ L"Reserved", 8, 32, L"0x%lx", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI PARSER array describing the System Locality Latency and Bandwidth
|
An ACPI PARSER array describing the System Locality Latency and Bandwidth
|
||||||
Information Structure - Type 1.
|
Information Structure - Type 1.
|
||||||
*/
|
*/
|
||||||
STATIC CONST ACPI_PARSER SllbiParser[] = {
|
STATIC CONST ACPI_PARSER SllbiParser[] = {
|
||||||
{L"Type", 2, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Type", 2, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Length", 4, 4, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Length", 4, 4, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Flags", 1, 8, L"0x%x", NULL, (VOID**)&SllbiFlags, NULL, NULL},
|
{ L"Flags", 1, 8, L"0x%x", NULL, (VOID **)&SllbiFlags, NULL, NULL },
|
||||||
{L"Data type", 1, 9, L"0x%x", NULL, (VOID**)&SllbiDataType, NULL, NULL},
|
{ L"Data type", 1, 9, L"0x%x", NULL, (VOID **)&SllbiDataType, NULL, NULL },
|
||||||
{L"Min Transfer Size", 1, 10, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Min Transfer Size", 1, 10, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 1, 11, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 1, 11, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Initiator Proximity Dom Count", 4, 12, L"%d", NULL,
|
{ L"Initiator Proximity Dom Count", 4, 12, L"%d", NULL,
|
||||||
(VOID**)&NumberInitiatorProximityDomain, NULL, NULL},
|
(VOID **)&NumberInitiatorProximityDomain, NULL, NULL },
|
||||||
{L"Target Proximity Dom Count", 4, 16, L"%d", NULL,
|
{ L"Target Proximity Dom Count", 4, 16, L"%d", NULL,
|
||||||
(VOID**)&NumberTargetProximityDomain, NULL, NULL},
|
(VOID **)&NumberTargetProximityDomain, NULL, NULL },
|
||||||
{L"Reserved", 4, 20, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 4, 20, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Entry Base Unit", 8, 24, L"0x%lx", NULL, NULL, NULL, NULL}
|
{ L"Entry Base Unit", 8, 24, L"0x%lx", NULL, NULL, NULL, NULL }
|
||||||
// initiator Proximity Domain list ...
|
// initiator Proximity Domain list ...
|
||||||
// target Proximity Domain list ...
|
// target Proximity Domain list ...
|
||||||
// Latency/Bandwidth matrix ...
|
// Latency/Bandwidth matrix ...
|
||||||
@ -195,18 +198,18 @@ STATIC CONST ACPI_PARSER SllbiParser[] = {
|
|||||||
An ACPI PARSER array describing the Memory Side Cache Information
|
An ACPI PARSER array describing the Memory Side Cache Information
|
||||||
Structure - Type 2.
|
Structure - Type 2.
|
||||||
*/
|
*/
|
||||||
STATIC CONST ACPI_PARSER MemSideCacheInfoParser[] = {
|
STATIC CONST ACPI_PARSER MemSideCacheInfoParser[] = {
|
||||||
{L"Type", 2, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Type", 2, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Length", 4, 4, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Length", 4, 4, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Proximity Dom for memory", 4, 8, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Proximity Dom for memory", 4, 8, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 4, 12, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 4, 12, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Memory Side Cache Size", 8, 16, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Memory Side Cache Size", 8, 16, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Cache Attributes", 4, 24, NULL, DumpCacheAttributes, NULL,
|
{ L"Cache Attributes", 4, 24, NULL, DumpCacheAttributes, NULL,
|
||||||
ValidateCacheAttributes, NULL},
|
ValidateCacheAttributes, NULL },
|
||||||
{L"Reserved", 2, 28, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 2, 28, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"SMBIOS Handle Count", 2, 30, L"%d", NULL,
|
{ L"SMBIOS Handle Count", 2, 30, L"%d", NULL,
|
||||||
(VOID**)&NumberSMBIOSHandles, NULL, NULL}
|
(VOID **)&NumberSMBIOSHandles, NULL, NULL }
|
||||||
// SMBIOS handles List ...
|
// SMBIOS handles List ...
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -222,8 +225,8 @@ STATIC CONST ACPI_PARSER MemSideCacheInfoParser[] = {
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpMpda (
|
DumpMpda (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 Length
|
IN UINT32 Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
@ -248,13 +251,13 @@ DumpMpda (
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpSllbi (
|
DumpSllbi (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 Length
|
IN UINT32 Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
CONST UINT32* InitiatorProximityDomainList;
|
CONST UINT32 *InitiatorProximityDomainList;
|
||||||
CONST UINT32* TargetProximityDomainList;
|
CONST UINT32 *TargetProximityDomainList;
|
||||||
CONST UINT16* LatencyBandwidthMatrix;
|
CONST UINT16 *LatencyBandwidthMatrix;
|
||||||
UINT32 Offset;
|
UINT32 Offset;
|
||||||
CHAR16 Buffer[OUTPUT_FIELD_COLUMN_WIDTH];
|
CHAR16 Buffer[OUTPUT_FIELD_COLUMN_WIDTH];
|
||||||
CHAR16 SecondBuffer[OUTPUT_FIELD_COLUMN_WIDTH];
|
CHAR16 SecondBuffer[OUTPUT_FIELD_COLUMN_WIDTH];
|
||||||
@ -278,11 +281,12 @@ DumpSllbi (
|
|||||||
if ((SllbiFlags == NULL) ||
|
if ((SllbiFlags == NULL) ||
|
||||||
(SllbiDataType == NULL) ||
|
(SllbiDataType == NULL) ||
|
||||||
(NumberInitiatorProximityDomain == NULL) ||
|
(NumberInitiatorProximityDomain == NULL) ||
|
||||||
(NumberTargetProximityDomain == NULL)) {
|
(NumberTargetProximityDomain == NULL))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Insufficient remaining table buffer length to read the " \
|
L"ERROR: Insufficient remaining table buffer length to read the " \
|
||||||
L"SLLBI structure header. Length = %d.\n",
|
L"SLLBI structure header. Length = %d.\n",
|
||||||
Length
|
Length
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
@ -306,10 +310,10 @@ DumpSllbi (
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
InitiatorProximityDomainList = (UINT32*) (Ptr + Offset);
|
InitiatorProximityDomainList = (UINT32 *)(Ptr + Offset);
|
||||||
TargetProximityDomainList = InitiatorProximityDomainList +
|
TargetProximityDomainList = InitiatorProximityDomainList +
|
||||||
*NumberInitiatorProximityDomain;
|
*NumberInitiatorProximityDomain;
|
||||||
LatencyBandwidthMatrix = (UINT16*) (TargetProximityDomainList +
|
LatencyBandwidthMatrix = (UINT16 *)(TargetProximityDomainList +
|
||||||
*NumberTargetProximityDomain);
|
*NumberTargetProximityDomain);
|
||||||
|
|
||||||
// Display each element of the Initiator Proximity Domain list
|
// Display each element of the Initiator Proximity Domain list
|
||||||
@ -350,6 +354,7 @@ DumpSllbi (
|
|||||||
Print (L"Error: Unkown Data Type. DataType = 0x%x.\n", *SllbiDataType);
|
Print (L"Error: Unkown Data Type. DataType = 0x%x.\n", *SllbiDataType);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
StrCpyS (Buffer, sizeof (Buffer), SllbiNames[*SllbiDataType]);
|
StrCpyS (Buffer, sizeof (Buffer), SllbiNames[*SllbiDataType]);
|
||||||
|
|
||||||
// Adjust base name depending on Memory Hierarchy in this Structure
|
// Adjust base name depending on Memory Hierarchy in this Structure
|
||||||
@ -381,7 +386,6 @@ DumpSllbi (
|
|||||||
SllbiFlags->MemoryHierarchy
|
SllbiFlags->MemoryHierarchy
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
} // switch
|
} // switch
|
||||||
|
|
||||||
if (*NumberTargetProximityDomain <= MAX_MEMORY_DOMAIN_TARGET_PRINT_MATRIX) {
|
if (*NumberTargetProximityDomain <= MAX_MEMORY_DOMAIN_TARGET_PRINT_MATRIX) {
|
||||||
@ -400,34 +404,41 @@ DumpSllbi (
|
|||||||
|
|
||||||
for (IndexTarget = 0;
|
for (IndexTarget = 0;
|
||||||
IndexTarget < *NumberTargetProximityDomain;
|
IndexTarget < *NumberTargetProximityDomain;
|
||||||
IndexTarget++) {
|
IndexTarget++)
|
||||||
|
{
|
||||||
Print (L" %2d", IndexTarget);
|
Print (L" %2d", IndexTarget);
|
||||||
}
|
}
|
||||||
|
|
||||||
Print (L"\n ---+");
|
Print (L"\n ---+");
|
||||||
for (IndexTarget = 0;
|
for (IndexTarget = 0;
|
||||||
IndexTarget < *NumberTargetProximityDomain;
|
IndexTarget < *NumberTargetProximityDomain;
|
||||||
IndexTarget++) {
|
IndexTarget++)
|
||||||
|
{
|
||||||
Print (L"------");
|
Print (L"------");
|
||||||
}
|
}
|
||||||
|
|
||||||
Print (L"\n");
|
Print (L"\n");
|
||||||
|
|
||||||
TargetStartOffset = 0;
|
TargetStartOffset = 0;
|
||||||
for (IndexInitiator = 0;
|
for (IndexInitiator = 0;
|
||||||
IndexInitiator < *NumberInitiatorProximityDomain;
|
IndexInitiator < *NumberInitiatorProximityDomain;
|
||||||
IndexInitiator++) {
|
IndexInitiator++)
|
||||||
|
{
|
||||||
Print (L" %2d |", IndexInitiator);
|
Print (L" %2d |", IndexInitiator);
|
||||||
for (IndexTarget = 0;
|
for (IndexTarget = 0;
|
||||||
IndexTarget < *NumberTargetProximityDomain;
|
IndexTarget < *NumberTargetProximityDomain;
|
||||||
IndexTarget++) {
|
IndexTarget++)
|
||||||
|
{
|
||||||
Print (
|
Print (
|
||||||
L" %5d",
|
L" %5d",
|
||||||
LatencyBandwidthMatrix[TargetStartOffset + IndexTarget]
|
LatencyBandwidthMatrix[TargetStartOffset + IndexTarget]
|
||||||
);
|
);
|
||||||
} // for Target
|
} // for Target
|
||||||
|
|
||||||
Print (L"\n");
|
Print (L"\n");
|
||||||
TargetStartOffset += (*NumberTargetProximityDomain);
|
TargetStartOffset += (*NumberTargetProximityDomain);
|
||||||
} // for Initiator
|
} // for Initiator
|
||||||
|
|
||||||
Print (L"\n");
|
Print (L"\n");
|
||||||
} else {
|
} else {
|
||||||
// Display the latency/bandwidth matrix as a list
|
// Display the latency/bandwidth matrix as a list
|
||||||
@ -441,10 +452,12 @@ DumpSllbi (
|
|||||||
TargetStartOffset = 0;
|
TargetStartOffset = 0;
|
||||||
for (IndexInitiator = 0;
|
for (IndexInitiator = 0;
|
||||||
IndexInitiator < *NumberInitiatorProximityDomain;
|
IndexInitiator < *NumberInitiatorProximityDomain;
|
||||||
IndexInitiator++) {
|
IndexInitiator++)
|
||||||
|
{
|
||||||
for (IndexTarget = 0;
|
for (IndexTarget = 0;
|
||||||
IndexTarget < *NumberTargetProximityDomain;
|
IndexTarget < *NumberTargetProximityDomain;
|
||||||
IndexTarget++) {
|
IndexTarget++)
|
||||||
|
{
|
||||||
UnicodeSPrint (
|
UnicodeSPrint (
|
||||||
SecondBuffer,
|
SecondBuffer,
|
||||||
sizeof (SecondBuffer),
|
sizeof (SecondBuffer),
|
||||||
@ -459,6 +472,7 @@ DumpSllbi (
|
|||||||
LatencyBandwidthMatrix[TargetStartOffset + IndexTarget]
|
LatencyBandwidthMatrix[TargetStartOffset + IndexTarget]
|
||||||
);
|
);
|
||||||
} // for Target
|
} // for Target
|
||||||
|
|
||||||
TargetStartOffset += (*NumberTargetProximityDomain);
|
TargetStartOffset += (*NumberTargetProximityDomain);
|
||||||
} // for Initiator
|
} // for Initiator
|
||||||
}
|
}
|
||||||
@ -474,11 +488,11 @@ DumpSllbi (
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpMsci (
|
DumpMsci (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 Length
|
IN UINT32 Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
CONST UINT16* SMBIOSHandlesList;
|
CONST UINT16 *SMBIOSHandlesList;
|
||||||
CHAR16 Buffer[OUTPUT_FIELD_COLUMN_WIDTH];
|
CHAR16 Buffer[OUTPUT_FIELD_COLUMN_WIDTH];
|
||||||
UINT32 Offset;
|
UINT32 Offset;
|
||||||
UINT16 Index;
|
UINT16 Index;
|
||||||
@ -498,7 +512,7 @@ DumpMsci (
|
|||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Insufficient remaining table buffer length to read the " \
|
L"ERROR: Insufficient remaining table buffer length to read the " \
|
||||||
L"MSCI structure header. Length = %d.\n",
|
L"MSCI structure header. Length = %d.\n",
|
||||||
Length
|
Length
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
@ -515,7 +529,7 @@ DumpMsci (
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SMBIOSHandlesList = (UINT16*) (Ptr + Offset);
|
SMBIOSHandlesList = (UINT16 *)(Ptr + Offset);
|
||||||
|
|
||||||
for (Index = 0; Index < *NumberSMBIOSHandles; Index++) {
|
for (Index = 0; Index < *NumberSMBIOSHandles; Index++) {
|
||||||
UnicodeSPrint (
|
UnicodeSPrint (
|
||||||
@ -553,14 +567,14 @@ DumpMsci (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiHmat (
|
ParseAcpiHmat (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Offset;
|
UINT32 Offset;
|
||||||
UINT8* HmatStructurePtr;
|
UINT8 *HmatStructurePtr;
|
||||||
|
|
||||||
if (!Trace) {
|
if (!Trace) {
|
||||||
return;
|
return;
|
||||||
@ -591,11 +605,12 @@ ParseAcpiHmat (
|
|||||||
// Check if the values used to control the parsing logic have been
|
// Check if the values used to control the parsing logic have been
|
||||||
// successfully read.
|
// successfully read.
|
||||||
if ((HmatStructureType == NULL) ||
|
if ((HmatStructureType == NULL) ||
|
||||||
(HmatStructureLength == NULL)) {
|
(HmatStructureLength == NULL))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Insufficient remaining table buffer length to read the " \
|
L"ERROR: Insufficient remaining table buffer length to read the " \
|
||||||
L"HMAT structure header. Length = %d.\n",
|
L"HMAT structure header. Length = %d.\n",
|
||||||
AcpiTableLength - Offset
|
AcpiTableLength - Offset
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
@ -603,11 +618,12 @@ ParseAcpiHmat (
|
|||||||
|
|
||||||
// Validate HMAT Structure length.
|
// Validate HMAT Structure length.
|
||||||
if ((*HmatStructureLength == 0) ||
|
if ((*HmatStructureLength == 0) ||
|
||||||
((Offset + (*HmatStructureLength)) > AcpiTableLength)) {
|
((Offset + (*HmatStructureLength)) > AcpiTableLength))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Invalid HMAT Structure length. " \
|
L"ERROR: Invalid HMAT Structure length. " \
|
||||||
L"Length = %d. Offset = %d. AcpiTableLength = %d.\n",
|
L"Length = %d. Offset = %d. AcpiTableLength = %d.\n",
|
||||||
*HmatStructureLength,
|
*HmatStructureLength,
|
||||||
Offset,
|
Offset,
|
||||||
AcpiTableLength
|
AcpiTableLength
|
||||||
@ -629,7 +645,7 @@ ParseAcpiHmat (
|
|||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
case EFI_ACPI_6_4_HMAT_TYPE_MEMORY_SIDE_CACHE_INFO:
|
case EFI_ACPI_6_4_HMAT_TYPE_MEMORY_SIDE_CACHE_INFO:
|
||||||
DumpMsci (
|
DumpMsci (
|
||||||
HmatStructurePtr,
|
HmatStructurePtr,
|
||||||
*HmatStructureLength
|
*HmatStructureLength
|
||||||
);
|
);
|
||||||
@ -638,7 +654,7 @@ ParseAcpiHmat (
|
|||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Unknown HMAT structure:"
|
L"ERROR: Unknown HMAT structure:"
|
||||||
L" Type = %d, Length = %d\n",
|
L" Type = %d, Length = %d\n",
|
||||||
*HmatStructureType,
|
*HmatStructureType,
|
||||||
*HmatStructureLength
|
*HmatStructureLength
|
||||||
);
|
);
|
||||||
@ -646,6 +662,6 @@ ParseAcpiHmat (
|
|||||||
} // switch
|
} // switch
|
||||||
|
|
||||||
HmatStructurePtr += *HmatStructureLength;
|
HmatStructurePtr += *HmatStructureLength;
|
||||||
Offset += *HmatStructureLength;
|
Offset += *HmatStructureLength;
|
||||||
} // while
|
} // while
|
||||||
}
|
}
|
||||||
|
@ -16,22 +16,22 @@
|
|||||||
#include "AcpiViewConfig.h"
|
#include "AcpiViewConfig.h"
|
||||||
|
|
||||||
// Local variables
|
// Local variables
|
||||||
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
||||||
|
|
||||||
STATIC CONST UINT32* IortNodeCount;
|
STATIC CONST UINT32 *IortNodeCount;
|
||||||
STATIC CONST UINT32* IortNodeOffset;
|
STATIC CONST UINT32 *IortNodeOffset;
|
||||||
|
|
||||||
STATIC CONST UINT8* IortNodeType;
|
STATIC CONST UINT8 *IortNodeType;
|
||||||
STATIC CONST UINT16* IortNodeLength;
|
STATIC CONST UINT16 *IortNodeLength;
|
||||||
STATIC CONST UINT32* IortIdMappingCount;
|
STATIC CONST UINT32 *IortIdMappingCount;
|
||||||
STATIC CONST UINT32* IortIdMappingOffset;
|
STATIC CONST UINT32 *IortIdMappingOffset;
|
||||||
|
|
||||||
STATIC CONST UINT32* InterruptContextCount;
|
STATIC CONST UINT32 *InterruptContextCount;
|
||||||
STATIC CONST UINT32* InterruptContextOffset;
|
STATIC CONST UINT32 *InterruptContextOffset;
|
||||||
STATIC CONST UINT32* PmuInterruptCount;
|
STATIC CONST UINT32 *PmuInterruptCount;
|
||||||
STATIC CONST UINT32* PmuInterruptOffset;
|
STATIC CONST UINT32 *PmuInterruptOffset;
|
||||||
|
|
||||||
STATIC CONST UINT32* ItsCount;
|
STATIC CONST UINT32 *ItsCount;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function validates the ID Mapping array count for the ITS node.
|
This function validates the ID Mapping array count for the ITS node.
|
||||||
@ -44,11 +44,11 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateItsIdMappingCount (
|
ValidateItsIdMappingCount (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (*(UINT32*)Ptr != 0) {
|
if (*(UINT32 *)Ptr != 0) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (L"\nERROR: IORT ID Mapping count must be zero.");
|
Print (L"\nERROR: IORT ID Mapping count must be zero.");
|
||||||
}
|
}
|
||||||
@ -66,11 +66,11 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidatePmcgIdMappingCount (
|
ValidatePmcgIdMappingCount (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (*(UINT32*)Ptr > 1) {
|
if (*(UINT32 *)Ptr > 1) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (L"\nERROR: IORT ID Mapping count must not be greater than 1.");
|
Print (L"\nERROR: IORT ID Mapping count must not be greater than 1.");
|
||||||
}
|
}
|
||||||
@ -87,11 +87,11 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateItsIdArrayReference (
|
ValidateItsIdArrayReference (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (*(UINT32*)Ptr != 0) {
|
if (*(UINT32 *)Ptr != 0) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (L"\nERROR: IORT ID Mapping offset must be zero.");
|
Print (L"\nERROR: IORT ID Mapping offset must be zero.");
|
||||||
}
|
}
|
||||||
@ -119,135 +119,135 @@ ValidateItsIdArrayReference (
|
|||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the ACPI IORT Table
|
An ACPI_PARSER array describing the ACPI IORT Table
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER IortParser[] = {
|
STATIC CONST ACPI_PARSER IortParser[] = {
|
||||||
PARSE_ACPI_HEADER (&AcpiHdrInfo),
|
PARSE_ACPI_HEADER (&AcpiHdrInfo),
|
||||||
{L"Number of IORT Nodes", 4, 36, L"%d", NULL,
|
{ L"Number of IORT Nodes", 4, 36, L"%d", NULL,
|
||||||
(VOID**)&IortNodeCount, NULL, NULL},
|
(VOID **)&IortNodeCount, NULL, NULL },
|
||||||
{L"Offset to Array of IORT Nodes", 4, 40, L"0x%x", NULL,
|
{ L"Offset to Array of IORT Nodes",4, 40, L"0x%x", NULL,
|
||||||
(VOID**)&IortNodeOffset, NULL, NULL},
|
(VOID **)&IortNodeOffset, NULL, NULL },
|
||||||
{L"Reserved", 4, 44, L"0x%x", NULL, NULL, NULL, NULL}
|
{ L"Reserved", 4, 44, L"0x%x", NULL,NULL,NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the IORT node header structure.
|
An ACPI_PARSER array describing the IORT node header structure.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER IortNodeHeaderParser[] = {
|
STATIC CONST ACPI_PARSER IortNodeHeaderParser[] = {
|
||||||
PARSE_IORT_NODE_HEADER (NULL, NULL)
|
PARSE_IORT_NODE_HEADER (NULL, NULL)
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the IORT SMMUv1/2 node.
|
An ACPI_PARSER array describing the IORT SMMUv1/2 node.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER IortNodeSmmuV1V2Parser[] = {
|
STATIC CONST ACPI_PARSER IortNodeSmmuV1V2Parser[] = {
|
||||||
PARSE_IORT_NODE_HEADER (NULL, NULL),
|
PARSE_IORT_NODE_HEADER (NULL, NULL),
|
||||||
{L"Base Address", 8, 16, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Base Address", 8, 16, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Span", 8, 24, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Span", 8, 24, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Model", 4, 32, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Model", 4, 32, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Flags", 4, 36, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Flags", 4, 36, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reference to Global Interrupt Array", 4, 40, L"0x%x", NULL, NULL, NULL,
|
{ L"Reference to Global Interrupt Array",4, 40, L"0x%x", NULL, NULL, NULL,
|
||||||
NULL},
|
NULL },
|
||||||
{L"Number of context interrupts", 4, 44, L"%d", NULL,
|
{ L"Number of context interrupts", 4, 44, L"%d", NULL,
|
||||||
(VOID**)&InterruptContextCount, NULL, NULL},
|
(VOID **)&InterruptContextCount, NULL, NULL },
|
||||||
{L"Reference to Context Interrupt Array", 4, 48, L"0x%x", NULL,
|
{ L"Reference to Context Interrupt Array",4, 48, L"0x%x", NULL,
|
||||||
(VOID**)&InterruptContextOffset, NULL, NULL},
|
(VOID **)&InterruptContextOffset, NULL, NULL },
|
||||||
{L"Number of PMU Interrupts", 4, 52, L"%d", NULL,
|
{ L"Number of PMU Interrupts", 4, 52, L"%d", NULL,
|
||||||
(VOID**)&PmuInterruptCount, NULL, NULL},
|
(VOID **)&PmuInterruptCount, NULL, NULL },
|
||||||
{L"Reference to PMU Interrupt Array", 4, 56, L"0x%x", NULL,
|
{ L"Reference to PMU Interrupt Array",4, 56, L"0x%x", NULL,
|
||||||
(VOID**)&PmuInterruptOffset, NULL, NULL},
|
(VOID **)&PmuInterruptOffset, NULL, NULL },
|
||||||
|
|
||||||
// Interrupt Array
|
// Interrupt Array
|
||||||
{L"SMMU_NSgIrpt", 4, 60, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"SMMU_NSgIrpt", 4, 60, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"SMMU_NSgIrpt interrupt flags", 4, 64, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"SMMU_NSgIrpt interrupt flags", 4, 64, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"SMMU_NSgCfgIrpt", 4, 68, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"SMMU_NSgCfgIrpt", 4, 68, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"SMMU_NSgCfgIrpt interrupt flags", 4, 72, L"0x%x", NULL, NULL, NULL, NULL}
|
{ L"SMMU_NSgCfgIrpt interrupt flags",4, 72, L"0x%x", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the SMMUv1/2 Node Interrupt Array.
|
An ACPI_PARSER array describing the SMMUv1/2 Node Interrupt Array.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER InterruptArrayParser[] = {
|
STATIC CONST ACPI_PARSER InterruptArrayParser[] = {
|
||||||
{L"Interrupt GSIV", 4, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Interrupt GSIV", 4, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Flags", 4, 4, L"0x%x", NULL, NULL, NULL, NULL}
|
{ L"Flags", 4, 4, L"0x%x", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the IORT ID Mapping.
|
An ACPI_PARSER array describing the IORT ID Mapping.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER IortNodeIdMappingParser[] = {
|
STATIC CONST ACPI_PARSER IortNodeIdMappingParser[] = {
|
||||||
{L"Input base", 4, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Input base", 4, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Number of IDs", 4, 4, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Number of IDs", 4, 4, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Output base", 4, 8, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Output base", 4, 8, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Output reference", 4, 12, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Output reference", 4, 12, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Flags", 4, 16, L"0x%x", NULL, NULL, NULL, NULL}
|
{ L"Flags", 4, 16, L"0x%x", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the IORT SMMUv3 node.
|
An ACPI_PARSER array describing the IORT SMMUv3 node.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER IortNodeSmmuV3Parser[] = {
|
STATIC CONST ACPI_PARSER IortNodeSmmuV3Parser[] = {
|
||||||
PARSE_IORT_NODE_HEADER (NULL, NULL),
|
PARSE_IORT_NODE_HEADER (NULL, NULL),
|
||||||
{L"Base Address", 8, 16, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Base Address", 8, 16, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Flags", 4, 24, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Flags", 4, 24, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 4, 28, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 4, 28, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"VATOS Address", 8, 32, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"VATOS Address", 8, 32, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Model", 4, 40, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Model", 4, 40, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Event", 4, 44, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Event", 4, 44, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"PRI", 4, 48, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"PRI", 4, 48, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"GERR", 4, 52, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"GERR", 4, 52, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Sync", 4, 56, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Sync", 4, 56, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Proximity domain", 4, 60, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Proximity domain", 4, 60, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Device ID mapping index", 4, 64, L"%d", NULL, NULL, NULL, NULL}
|
{ L"Device ID mapping index", 4, 64, L"%d", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the IORT ITS node.
|
An ACPI_PARSER array describing the IORT ITS node.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER IortNodeItsParser[] = {
|
STATIC CONST ACPI_PARSER IortNodeItsParser[] = {
|
||||||
PARSE_IORT_NODE_HEADER (
|
PARSE_IORT_NODE_HEADER (
|
||||||
ValidateItsIdMappingCount,
|
ValidateItsIdMappingCount,
|
||||||
ValidateItsIdArrayReference
|
ValidateItsIdArrayReference
|
||||||
),
|
),
|
||||||
{L"Number of ITSs", 4, 16, L"%d", NULL, (VOID**)&ItsCount, NULL}
|
{ L"Number of ITSs", 4,16, L"%d", NULL, (VOID **)&ItsCount, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the ITS ID.
|
An ACPI_PARSER array describing the ITS ID.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER ItsIdParser[] = {
|
STATIC CONST ACPI_PARSER ItsIdParser[] = {
|
||||||
{ L"GIC ITS Identifier", 4, 0, L"%d", NULL, NULL, NULL }
|
{ L"GIC ITS Identifier", 4, 0, L"%d", NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the IORT Names Component node.
|
An ACPI_PARSER array describing the IORT Names Component node.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER IortNodeNamedComponentParser[] = {
|
STATIC CONST ACPI_PARSER IortNodeNamedComponentParser[] = {
|
||||||
PARSE_IORT_NODE_HEADER (NULL, NULL),
|
PARSE_IORT_NODE_HEADER (NULL, NULL),
|
||||||
{L"Node Flags", 4, 16, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Node Flags", 4, 16, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Memory access properties", 8, 20, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Memory access properties",8, 20, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Device memory address size limit", 1, 28, L"%d", NULL, NULL, NULL, NULL}
|
{ L"Device memory address size limit",1, 28, L"%d", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the IORT Root Complex node.
|
An ACPI_PARSER array describing the IORT Root Complex node.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER IortNodeRootComplexParser[] = {
|
STATIC CONST ACPI_PARSER IortNodeRootComplexParser[] = {
|
||||||
PARSE_IORT_NODE_HEADER (NULL, NULL),
|
PARSE_IORT_NODE_HEADER (NULL, NULL),
|
||||||
{L"Memory access properties", 8, 16, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Memory access properties",8, 16, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"ATS Attribute", 4, 24, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"ATS Attribute", 4, 24, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"PCI Segment number", 4, 28, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"PCI Segment number", 4, 28, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Memory access size limit", 1, 32, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Memory access size limit",1, 32, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 3, 33, L"%x %x %x", Dump3Chars, NULL, NULL, NULL}
|
{ L"Reserved", 3, 33, L"%x %x %x", Dump3Chars, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the IORT PMCG node.
|
An ACPI_PARSER array describing the IORT PMCG node.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER IortNodePmcgParser[] = {
|
STATIC CONST ACPI_PARSER IortNodePmcgParser[] = {
|
||||||
PARSE_IORT_NODE_HEADER (ValidatePmcgIdMappingCount, NULL),
|
PARSE_IORT_NODE_HEADER (ValidatePmcgIdMappingCount, NULL),
|
||||||
{L"Page 0 Base Address", 8, 16, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Page 0 Base Address", 8, 16, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Overflow interrupt GSIV", 4, 24, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Overflow interrupt GSIV", 4, 24, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Node reference", 4, 28, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Node reference", 4, 28, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Page 1 Base Address", 8, 32, L"0x%lx", NULL, NULL, NULL, NULL}
|
{ L"Page 1 Base Address", 8, 32, L"0x%lx", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -260,20 +260,21 @@ STATIC CONST ACPI_PARSER IortNodePmcgParser[] = {
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpIortNodeIdMappings (
|
DumpIortNodeIdMappings (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 Length,
|
IN UINT32 Length,
|
||||||
IN UINT32 MappingCount
|
IN UINT32 MappingCount
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Index;
|
UINT32 Index;
|
||||||
UINT32 Offset;
|
UINT32 Offset;
|
||||||
CHAR8 Buffer[40]; // Used for AsciiName param of ParseAcpi
|
CHAR8 Buffer[40]; // Used for AsciiName param of ParseAcpi
|
||||||
|
|
||||||
Index = 0;
|
Index = 0;
|
||||||
Offset = 0;
|
Offset = 0;
|
||||||
|
|
||||||
while ((Index < MappingCount) &&
|
while ((Index < MappingCount) &&
|
||||||
(Offset < Length)) {
|
(Offset < Length))
|
||||||
|
{
|
||||||
AsciiSPrint (
|
AsciiSPrint (
|
||||||
Buffer,
|
Buffer,
|
||||||
sizeof (Buffer),
|
sizeof (Buffer),
|
||||||
@ -304,15 +305,15 @@ DumpIortNodeIdMappings (
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpIortNodeSmmuV1V2 (
|
DumpIortNodeSmmuV1V2 (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT16 Length,
|
IN UINT16 Length,
|
||||||
IN UINT32 MappingCount,
|
IN UINT32 MappingCount,
|
||||||
IN UINT32 MappingOffset
|
IN UINT32 MappingOffset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Index;
|
UINT32 Index;
|
||||||
UINT32 Offset;
|
UINT32 Offset;
|
||||||
CHAR8 Buffer[50]; // Used for AsciiName param of ParseAcpi
|
CHAR8 Buffer[50]; // Used for AsciiName param of ParseAcpi
|
||||||
|
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
TRUE,
|
TRUE,
|
||||||
@ -328,7 +329,8 @@ DumpIortNodeSmmuV1V2 (
|
|||||||
if ((InterruptContextCount == NULL) ||
|
if ((InterruptContextCount == NULL) ||
|
||||||
(InterruptContextOffset == NULL) ||
|
(InterruptContextOffset == NULL) ||
|
||||||
(PmuInterruptCount == NULL) ||
|
(PmuInterruptCount == NULL) ||
|
||||||
(PmuInterruptOffset == NULL)) {
|
(PmuInterruptOffset == NULL))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Insufficient SMMUv1/2 node length. Length = %d\n",
|
L"ERROR: Insufficient SMMUv1/2 node length. Length = %d\n",
|
||||||
@ -338,10 +340,11 @@ DumpIortNodeSmmuV1V2 (
|
|||||||
}
|
}
|
||||||
|
|
||||||
Offset = *InterruptContextOffset;
|
Offset = *InterruptContextOffset;
|
||||||
Index = 0;
|
Index = 0;
|
||||||
|
|
||||||
while ((Index < *InterruptContextCount) &&
|
while ((Index < *InterruptContextCount) &&
|
||||||
(Offset < Length)) {
|
(Offset < Length))
|
||||||
|
{
|
||||||
AsciiSPrint (
|
AsciiSPrint (
|
||||||
Buffer,
|
Buffer,
|
||||||
sizeof (Buffer),
|
sizeof (Buffer),
|
||||||
@ -360,10 +363,11 @@ DumpIortNodeSmmuV1V2 (
|
|||||||
}
|
}
|
||||||
|
|
||||||
Offset = *PmuInterruptOffset;
|
Offset = *PmuInterruptOffset;
|
||||||
Index = 0;
|
Index = 0;
|
||||||
|
|
||||||
while ((Index < *PmuInterruptCount) &&
|
while ((Index < *PmuInterruptCount) &&
|
||||||
(Offset < Length)) {
|
(Offset < Length))
|
||||||
|
{
|
||||||
AsciiSPrint (
|
AsciiSPrint (
|
||||||
Buffer,
|
Buffer,
|
||||||
sizeof (Buffer),
|
sizeof (Buffer),
|
||||||
@ -400,10 +404,10 @@ DumpIortNodeSmmuV1V2 (
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpIortNodeSmmuV3 (
|
DumpIortNodeSmmuV3 (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT16 Length,
|
IN UINT16 Length,
|
||||||
IN UINT32 MappingCount,
|
IN UINT32 MappingCount,
|
||||||
IN UINT32 MappingOffset
|
IN UINT32 MappingOffset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
@ -431,22 +435,22 @@ DumpIortNodeSmmuV3 (
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpIortNodeIts (
|
DumpIortNodeIts (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT16 Length
|
IN UINT16 Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Offset;
|
UINT32 Offset;
|
||||||
UINT32 Index;
|
UINT32 Index;
|
||||||
CHAR8 Buffer[80]; // Used for AsciiName param of ParseAcpi
|
CHAR8 Buffer[80]; // Used for AsciiName param of ParseAcpi
|
||||||
|
|
||||||
Offset = ParseAcpi (
|
Offset = ParseAcpi (
|
||||||
TRUE,
|
TRUE,
|
||||||
2,
|
2,
|
||||||
"ITS Node",
|
"ITS Node",
|
||||||
Ptr,
|
Ptr,
|
||||||
Length,
|
Length,
|
||||||
PARSER_PARAMS (IortNodeItsParser)
|
PARSER_PARAMS (IortNodeItsParser)
|
||||||
);
|
);
|
||||||
|
|
||||||
// Check if the values used to control the parsing logic have been
|
// Check if the values used to control the parsing logic have been
|
||||||
// successfully read.
|
// successfully read.
|
||||||
@ -462,7 +466,8 @@ DumpIortNodeIts (
|
|||||||
Index = 0;
|
Index = 0;
|
||||||
|
|
||||||
while ((Index < *ItsCount) &&
|
while ((Index < *ItsCount) &&
|
||||||
(Offset < Length)) {
|
(Offset < Length))
|
||||||
|
{
|
||||||
AsciiSPrint (
|
AsciiSPrint (
|
||||||
Buffer,
|
Buffer,
|
||||||
sizeof (Buffer),
|
sizeof (Buffer),
|
||||||
@ -481,7 +486,6 @@ DumpIortNodeIts (
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Note: ITS does not have the ID Mappings Array
|
// Note: ITS does not have the ID Mappings Array
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -496,13 +500,13 @@ DumpIortNodeIts (
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpIortNodeNamedComponent (
|
DumpIortNodeNamedComponent (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT16 Length,
|
IN UINT16 Length,
|
||||||
IN UINT32 MappingCount,
|
IN UINT32 MappingCount,
|
||||||
IN UINT32 MappingOffset
|
IN UINT32 MappingOffset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Offset;
|
UINT32 Offset;
|
||||||
|
|
||||||
Offset = ParseAcpi (
|
Offset = ParseAcpi (
|
||||||
TRUE,
|
TRUE,
|
||||||
@ -517,10 +521,12 @@ DumpIortNodeNamedComponent (
|
|||||||
PrintFieldName (2, L"Device Object Name");
|
PrintFieldName (2, L"Device Object Name");
|
||||||
|
|
||||||
while ((*(Ptr + Offset) != 0) &&
|
while ((*(Ptr + Offset) != 0) &&
|
||||||
(Offset < Length)) {
|
(Offset < Length))
|
||||||
|
{
|
||||||
Print (L"%c", *(Ptr + Offset));
|
Print (L"%c", *(Ptr + Offset));
|
||||||
Offset++;
|
Offset++;
|
||||||
}
|
}
|
||||||
|
|
||||||
Print (L"\n");
|
Print (L"\n");
|
||||||
|
|
||||||
DumpIortNodeIdMappings (
|
DumpIortNodeIdMappings (
|
||||||
@ -542,10 +548,10 @@ DumpIortNodeNamedComponent (
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpIortNodeRootComplex (
|
DumpIortNodeRootComplex (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT16 Length,
|
IN UINT16 Length,
|
||||||
IN UINT32 MappingCount,
|
IN UINT32 MappingCount,
|
||||||
IN UINT32 MappingOffset
|
IN UINT32 MappingOffset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
@ -576,11 +582,11 @@ DumpIortNodeRootComplex (
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpIortNodePmcg (
|
DumpIortNodePmcg (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT16 Length,
|
IN UINT16 Length,
|
||||||
IN UINT32 MappingCount,
|
IN UINT32 MappingCount,
|
||||||
IN UINT32 MappingOffset
|
IN UINT32 MappingOffset
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
TRUE,
|
TRUE,
|
||||||
@ -620,15 +626,15 @@ DumpIortNodePmcg (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiIort (
|
ParseAcpiIort (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Offset;
|
UINT32 Offset;
|
||||||
UINT32 Index;
|
UINT32 Index;
|
||||||
UINT8* NodePtr;
|
UINT8 *NodePtr;
|
||||||
|
|
||||||
if (!Trace) {
|
if (!Trace) {
|
||||||
return;
|
return;
|
||||||
@ -646,7 +652,8 @@ ParseAcpiIort (
|
|||||||
// Check if the values used to control the parsing logic have been
|
// Check if the values used to control the parsing logic have been
|
||||||
// successfully read.
|
// successfully read.
|
||||||
if ((IortNodeCount == NULL) ||
|
if ((IortNodeCount == NULL) ||
|
||||||
(IortNodeOffset == NULL)) {
|
(IortNodeOffset == NULL))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Insufficient table length. AcpiTableLength = %d.\n",
|
L"ERROR: Insufficient table length. AcpiTableLength = %d.\n",
|
||||||
@ -655,14 +662,15 @@ ParseAcpiIort (
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Offset = *IortNodeOffset;
|
Offset = *IortNodeOffset;
|
||||||
NodePtr = Ptr + Offset;
|
NodePtr = Ptr + Offset;
|
||||||
Index = 0;
|
Index = 0;
|
||||||
|
|
||||||
// Parse the specified number of IORT nodes or the IORT table buffer length.
|
// Parse the specified number of IORT nodes or the IORT table buffer length.
|
||||||
// Whichever is minimum.
|
// Whichever is minimum.
|
||||||
while ((Index++ < *IortNodeCount) &&
|
while ((Index++ < *IortNodeCount) &&
|
||||||
(Offset < AcpiTableLength)) {
|
(Offset < AcpiTableLength))
|
||||||
|
{
|
||||||
// Parse the IORT Node Header
|
// Parse the IORT Node Header
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
FALSE,
|
FALSE,
|
||||||
@ -678,11 +686,12 @@ ParseAcpiIort (
|
|||||||
if ((IortNodeType == NULL) ||
|
if ((IortNodeType == NULL) ||
|
||||||
(IortNodeLength == NULL) ||
|
(IortNodeLength == NULL) ||
|
||||||
(IortIdMappingCount == NULL) ||
|
(IortIdMappingCount == NULL) ||
|
||||||
(IortIdMappingOffset == NULL)) {
|
(IortIdMappingOffset == NULL))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Insufficient remaining table buffer length to read the " \
|
L"ERROR: Insufficient remaining table buffer length to read the " \
|
||||||
L"IORT node header. Length = %d.\n",
|
L"IORT node header. Length = %d.\n",
|
||||||
AcpiTableLength - Offset
|
AcpiTableLength - Offset
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
@ -690,11 +699,12 @@ ParseAcpiIort (
|
|||||||
|
|
||||||
// Validate IORT Node length
|
// Validate IORT Node length
|
||||||
if ((*IortNodeLength == 0) ||
|
if ((*IortNodeLength == 0) ||
|
||||||
((Offset + (*IortNodeLength)) > AcpiTableLength)) {
|
((Offset + (*IortNodeLength)) > AcpiTableLength))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Invalid IORT Node length. " \
|
L"ERROR: Invalid IORT Node length. " \
|
||||||
L"Length = %d. Offset = %d. AcpiTableLength = %d.\n",
|
L"Length = %d. Offset = %d. AcpiTableLength = %d.\n",
|
||||||
*IortNodeLength,
|
*IortNodeLength,
|
||||||
Offset,
|
Offset,
|
||||||
AcpiTableLength
|
AcpiTableLength
|
||||||
@ -750,7 +760,7 @@ ParseAcpiIort (
|
|||||||
*IortNodeLength,
|
*IortNodeLength,
|
||||||
*IortIdMappingCount,
|
*IortIdMappingCount,
|
||||||
*IortIdMappingOffset
|
*IortIdMappingOffset
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -759,6 +769,6 @@ ParseAcpiIort (
|
|||||||
} // switch
|
} // switch
|
||||||
|
|
||||||
NodePtr += (*IortNodeLength);
|
NodePtr += (*IortNodeLength);
|
||||||
Offset += (*IortNodeLength);
|
Offset += (*IortNodeLength);
|
||||||
} // while
|
} // while
|
||||||
}
|
}
|
||||||
|
@ -19,9 +19,9 @@
|
|||||||
#include "MadtParser.h"
|
#include "MadtParser.h"
|
||||||
|
|
||||||
// Local Variables
|
// Local Variables
|
||||||
STATIC CONST UINT8* MadtInterruptControllerType;
|
STATIC CONST UINT8 *MadtInterruptControllerType;
|
||||||
STATIC CONST UINT8* MadtInterruptControllerLength;
|
STATIC CONST UINT8 *MadtInterruptControllerLength;
|
||||||
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function validates the System Vector Base in the GICD.
|
This function validates the System Vector Base in the GICD.
|
||||||
@ -34,15 +34,15 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateGICDSystemVectorBase (
|
ValidateGICDSystemVectorBase (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (*(UINT32*)Ptr != 0) {
|
if (*(UINT32 *)Ptr != 0) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"\nERROR: System Vector Base must be zero."
|
L"\nERROR: System Vector Base must be zero."
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -57,13 +57,13 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateSpeOverflowInterrupt (
|
ValidateSpeOverflowInterrupt (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT16 SpeOverflowInterrupt;
|
UINT16 SpeOverflowInterrupt;
|
||||||
|
|
||||||
SpeOverflowInterrupt = *(UINT16*)Ptr;
|
SpeOverflowInterrupt = *(UINT16 *)Ptr;
|
||||||
|
|
||||||
// SPE not supported by this processor
|
// SPE not supported by this processor
|
||||||
if (SpeOverflowInterrupt == 0) {
|
if (SpeOverflowInterrupt == 0) {
|
||||||
@ -73,183 +73,183 @@ ValidateSpeOverflowInterrupt (
|
|||||||
if ((SpeOverflowInterrupt < ARM_PPI_ID_MIN) ||
|
if ((SpeOverflowInterrupt < ARM_PPI_ID_MIN) ||
|
||||||
((SpeOverflowInterrupt > ARM_PPI_ID_MAX) &&
|
((SpeOverflowInterrupt > ARM_PPI_ID_MAX) &&
|
||||||
(SpeOverflowInterrupt < ARM_PPI_ID_EXTENDED_MIN)) ||
|
(SpeOverflowInterrupt < ARM_PPI_ID_EXTENDED_MIN)) ||
|
||||||
(SpeOverflowInterrupt > ARM_PPI_ID_EXTENDED_MAX)) {
|
(SpeOverflowInterrupt > ARM_PPI_ID_EXTENDED_MAX))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"\nERROR: SPE Overflow Interrupt ID of %d is not in the allowed PPI ID "
|
L"\nERROR: SPE Overflow Interrupt ID of %d is not in the allowed PPI ID "
|
||||||
L"ranges of %d-%d or %d-%d (for GICv3.1 or later).",
|
L"ranges of %d-%d or %d-%d (for GICv3.1 or later).",
|
||||||
SpeOverflowInterrupt,
|
SpeOverflowInterrupt,
|
||||||
ARM_PPI_ID_MIN,
|
ARM_PPI_ID_MIN,
|
||||||
ARM_PPI_ID_MAX,
|
ARM_PPI_ID_MAX,
|
||||||
ARM_PPI_ID_EXTENDED_MIN,
|
ARM_PPI_ID_EXTENDED_MIN,
|
||||||
ARM_PPI_ID_EXTENDED_MAX
|
ARM_PPI_ID_EXTENDED_MAX
|
||||||
);
|
);
|
||||||
} else if (SpeOverflowInterrupt != ARM_PPI_ID_PMBIRQ) {
|
} else if (SpeOverflowInterrupt != ARM_PPI_ID_PMBIRQ) {
|
||||||
IncrementWarningCount();
|
IncrementWarningCount ();
|
||||||
Print (
|
Print (
|
||||||
L"\nWARNING: SPE Overflow Interrupt ID of %d is not compliant with SBSA "
|
L"\nWARNING: SPE Overflow Interrupt ID of %d is not compliant with SBSA "
|
||||||
L"Level 3 PPI ID assignment: %d.",
|
L"Level 3 PPI ID assignment: %d.",
|
||||||
SpeOverflowInterrupt,
|
SpeOverflowInterrupt,
|
||||||
ARM_PPI_ID_PMBIRQ
|
ARM_PPI_ID_PMBIRQ
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the GICC Interrupt Controller Structure.
|
An ACPI_PARSER array describing the GICC Interrupt Controller Structure.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER GicCParser[] = {
|
STATIC CONST ACPI_PARSER GicCParser[] = {
|
||||||
{L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Length", 1, 1, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Length", 1, 1, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
|
|
||||||
{L"CPU Interface Number", 4, 4, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"CPU Interface Number", 4, 4, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"ACPI Processor UID", 4, 8, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"ACPI Processor UID", 4, 8, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Flags", 4, 12, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Flags", 4, 12, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Parking Protocol Version", 4, 16, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Parking Protocol Version", 4, 16, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
|
|
||||||
{L"Performance Interrupt GSIV", 4, 20, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Performance Interrupt GSIV", 4, 20, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Parked Address", 8, 24, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Parked Address", 8, 24, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Physical Base Address", 8, 32, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Physical Base Address", 8, 32, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"GICV", 8, 40, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"GICV", 8, 40, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"GICH", 8, 48, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"GICH", 8, 48, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"VGIC Maintenance interrupt", 4, 56, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"VGIC Maintenance interrupt", 4, 56, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"GICR Base Address", 8, 60, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"GICR Base Address", 8, 60, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"MPIDR", 8, 68, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"MPIDR", 8, 68, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Processor Power Efficiency Class", 1, 76, L"0x%x", NULL, NULL, NULL,
|
{ L"Processor Power Efficiency Class", 1, 76, L"0x%x", NULL, NULL, NULL,
|
||||||
NULL},
|
NULL },
|
||||||
{L"Reserved", 1, 77, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 1, 77, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"SPE overflow Interrupt", 2, 78, L"0x%x", NULL, NULL,
|
{ L"SPE overflow Interrupt", 2, 78, L"0x%x", NULL, NULL,
|
||||||
ValidateSpeOverflowInterrupt, NULL}
|
ValidateSpeOverflowInterrupt, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the GICD Interrupt Controller Structure.
|
An ACPI_PARSER array describing the GICD Interrupt Controller Structure.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER GicDParser[] = {
|
STATIC CONST ACPI_PARSER GicDParser[] = {
|
||||||
{L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Length", 1, 1, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Length", 1, 1, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
|
|
||||||
{L"GIC ID", 4, 4, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"GIC ID", 4, 4, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Physical Base Address", 8, 8, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Physical Base Address", 8, 8, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"System Vector Base", 4, 16, L"0x%x", NULL, NULL,
|
{ L"System Vector Base", 4, 16, L"0x%x", NULL, NULL,
|
||||||
ValidateGICDSystemVectorBase, NULL},
|
ValidateGICDSystemVectorBase, NULL },
|
||||||
{L"GIC Version", 1, 20, L"%d", NULL, NULL, NULL, NULL},
|
{ L"GIC Version", 1, 20, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 3, 21, L"%x %x %x", Dump3Chars, NULL, NULL, NULL}
|
{ L"Reserved", 3, 21, L"%x %x %x", Dump3Chars, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the MSI Frame Interrupt Controller Structure.
|
An ACPI_PARSER array describing the MSI Frame Interrupt Controller Structure.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER GicMSIFrameParser[] = {
|
STATIC CONST ACPI_PARSER GicMSIFrameParser[] = {
|
||||||
{L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Length", 1, 1, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Length", 1, 1, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
|
|
||||||
{L"MSI Frame ID", 4, 4, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"MSI Frame ID", 4, 4, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Physical Base Address", 8, 8, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Physical Base Address", 8, 8, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Flags", 4, 16, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Flags", 4, 16, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
|
|
||||||
{L"SPI Count", 2, 20, L"%d", NULL, NULL, NULL, NULL},
|
{ L"SPI Count", 2, 20, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"SPI Base", 2, 22, L"0x%x", NULL, NULL, NULL, NULL}
|
{ L"SPI Base", 2, 22, L"0x%x", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the GICR Interrupt Controller Structure.
|
An ACPI_PARSER array describing the GICR Interrupt Controller Structure.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER GicRParser[] = {
|
STATIC CONST ACPI_PARSER GicRParser[] = {
|
||||||
{L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Length", 1, 1, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Length", 1, 1, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
|
|
||||||
{L"Discovery Range Base Address", 8, 4, L"0x%lx", NULL, NULL, NULL,
|
{ L"Discovery Range Base Address", 8, 4, L"0x%lx", NULL, NULL, NULL,
|
||||||
NULL},
|
NULL },
|
||||||
{L"Discovery Range Length", 4, 12, L"0x%x", NULL, NULL, NULL, NULL}
|
{ L"Discovery Range Length", 4, 12, L"0x%x", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the GIC ITS Interrupt Controller Structure.
|
An ACPI_PARSER array describing the GIC ITS Interrupt Controller Structure.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER GicITSParser[] = {
|
STATIC CONST ACPI_PARSER GicITSParser[] = {
|
||||||
{L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Length", 1, 1, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Length", 1, 1, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
|
|
||||||
{L"GIC ITS ID", 4, 4, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"GIC ITS ID", 4, 4, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Physical Base Address", 8, 8, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Physical Base Address", 8, 8, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 4, 16, L"0x%x", NULL, NULL, NULL, NULL}
|
{ L"Reserved", 4, 16, L"0x%x", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the IO APIC Structure.
|
An ACPI_PARSER array describing the IO APIC Structure.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER IoApic[] = {
|
STATIC CONST ACPI_PARSER IoApic[] = {
|
||||||
{L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Length", 1, 1, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Length", 1, 1, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"I/O APIC ID", 1, 2, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"I/O APIC ID", 1, 2, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 1, 3, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 1, 3, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"I/O APIC Address", 4, 4, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"I/O APIC Address", 4, 4, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Global System Interrupt Base", 4, 8, L"0x%x", NULL, NULL, NULL, NULL}
|
{ L"Global System Interrupt Base", 4, 8, L"0x%x", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the Interrupt Source Override Structure.
|
An ACPI_PARSER array describing the Interrupt Source Override Structure.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER InterruptSourceOverride[] = {
|
STATIC CONST ACPI_PARSER InterruptSourceOverride[] = {
|
||||||
{L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Length", 1, 1, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Length", 1, 1, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Bus", 1, 2, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Bus", 1, 2, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Source", 1, 3, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Source", 1, 3, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Global System Interrupt", 4, 4, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Global System Interrupt", 4, 4, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Flags", 2, 8, L"0x%x", NULL, NULL, NULL, NULL}
|
{ L"Flags", 2, 8, L"0x%x", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the Processor Local x2APIC Structure.
|
An ACPI_PARSER array describing the Processor Local x2APIC Structure.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER ProcessorLocalX2Apic[] = {
|
STATIC CONST ACPI_PARSER ProcessorLocalX2Apic[] = {
|
||||||
{L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Length", 1, 1, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Length", 1, 1, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
|
|
||||||
{L"X2APIC ID", 4, 4, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"X2APIC ID", 4, 4, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Flags", 4, 8, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Flags", 4, 8, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"ACPI Processor UID", 4, 12, L"0x%x", NULL, NULL, NULL, NULL}
|
{ L"ACPI Processor UID", 4, 12, L"0x%x", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the Local x2APIC NMI Structure.
|
An ACPI_PARSER array describing the Local x2APIC NMI Structure.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER LocalX2ApicNmi[] = {
|
STATIC CONST ACPI_PARSER LocalX2ApicNmi[] = {
|
||||||
{L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Length", 1, 1, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Length", 1, 1, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Flags", 2, 2, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Flags", 2, 2, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
|
|
||||||
{L"ACPI Processor UID", 4, 4, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"ACPI Processor UID", 4, 4, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Local x2APIC LINT#", 1, 8, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Local x2APIC LINT#", 1, 8, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 3, 9, L"0x%x%x%x", Dump3Chars, NULL, NULL, NULL}
|
{ L"Reserved", 3, 9, L"0x%x%x%x", Dump3Chars, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the ACPI MADT Table.
|
An ACPI_PARSER array describing the ACPI MADT Table.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER MadtParser[] = {
|
STATIC CONST ACPI_PARSER MadtParser[] = {
|
||||||
PARSE_ACPI_HEADER (&AcpiHdrInfo),
|
PARSE_ACPI_HEADER (&AcpiHdrInfo),
|
||||||
{L"Local Interrupt Controller Address", 4, 36, L"0x%x", NULL, NULL, NULL,
|
{ L"Local Interrupt Controller Address",4, 36, L"0x%x", NULL, NULL, NULL,
|
||||||
NULL},
|
NULL },
|
||||||
{L"Flags", 4, 40, L"0x%x", NULL, NULL, NULL, NULL}
|
{ L"Flags", 4, 40, L"0x%x", NULL, NULL, NULL,NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the MADT Interrupt Controller Structure Header Structure.
|
An ACPI_PARSER array describing the MADT Interrupt Controller Structure Header Structure.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER MadtInterruptControllerHeaderParser[] = {
|
STATIC CONST ACPI_PARSER MadtInterruptControllerHeaderParser[] = {
|
||||||
{NULL, 1, 0, NULL, NULL, (VOID**)&MadtInterruptControllerType, NULL, NULL},
|
{ NULL, 1, 0, NULL, NULL, (VOID **)&MadtInterruptControllerType, NULL, NULL },
|
||||||
{L"Length", 1, 1, NULL, NULL, (VOID**)&MadtInterruptControllerLength, NULL,
|
{ L"Length", 1, 1, NULL, NULL, (VOID **)&MadtInterruptControllerLength, NULL,
|
||||||
NULL},
|
NULL },
|
||||||
{L"Reserved", 2, 2, NULL, NULL, NULL, NULL, NULL}
|
{ L"Reserved", 2, 2, NULL, NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -275,15 +275,15 @@ STATIC CONST ACPI_PARSER MadtInterruptControllerHeaderParser[] = {
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiMadt (
|
ParseAcpiMadt (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Offset;
|
UINT32 Offset;
|
||||||
UINT8* InterruptContollerPtr;
|
UINT8 *InterruptContollerPtr;
|
||||||
UINT32 GICDCount;
|
UINT32 GICDCount;
|
||||||
|
|
||||||
GICDCount = 0;
|
GICDCount = 0;
|
||||||
|
|
||||||
@ -315,11 +315,12 @@ ParseAcpiMadt (
|
|||||||
// Check if the values used to control the parsing logic have been
|
// Check if the values used to control the parsing logic have been
|
||||||
// successfully read.
|
// successfully read.
|
||||||
if ((MadtInterruptControllerType == NULL) ||
|
if ((MadtInterruptControllerType == NULL) ||
|
||||||
(MadtInterruptControllerLength == NULL)) {
|
(MadtInterruptControllerLength == NULL))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Insufficient remaining table buffer length to read the " \
|
L"ERROR: Insufficient remaining table buffer length to read the " \
|
||||||
L"Interrupt Controller Structure header. Length = %d.\n",
|
L"Interrupt Controller Structure header. Length = %d.\n",
|
||||||
AcpiTableLength - Offset
|
AcpiTableLength - Offset
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
@ -327,11 +328,12 @@ ParseAcpiMadt (
|
|||||||
|
|
||||||
// Validate Interrupt Controller Structure length
|
// Validate Interrupt Controller Structure length
|
||||||
if ((*MadtInterruptControllerLength == 0) ||
|
if ((*MadtInterruptControllerLength == 0) ||
|
||||||
((Offset + (*MadtInterruptControllerLength)) > AcpiTableLength)) {
|
((Offset + (*MadtInterruptControllerLength)) > AcpiTableLength))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Invalid Interrupt Controller Structure length. " \
|
L"ERROR: Invalid Interrupt Controller Structure length. " \
|
||||||
L"Length = %d. Offset = %d. AcpiTableLength = %d.\n",
|
L"Length = %d. Offset = %d. AcpiTableLength = %d.\n",
|
||||||
*MadtInterruptControllerLength,
|
*MadtInterruptControllerLength,
|
||||||
Offset,
|
Offset,
|
||||||
AcpiTableLength
|
AcpiTableLength
|
||||||
@ -340,7 +342,8 @@ ParseAcpiMadt (
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch (*MadtInterruptControllerType) {
|
switch (*MadtInterruptControllerType) {
|
||||||
case EFI_ACPI_6_3_GIC: {
|
case EFI_ACPI_6_3_GIC:
|
||||||
|
{
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
TRUE,
|
TRUE,
|
||||||
2,
|
2,
|
||||||
@ -352,15 +355,17 @@ ParseAcpiMadt (
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case EFI_ACPI_6_3_GICD: {
|
case EFI_ACPI_6_3_GICD:
|
||||||
|
{
|
||||||
if (++GICDCount > 1) {
|
if (++GICDCount > 1) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Only one GICD must be present,"
|
L"ERROR: Only one GICD must be present,"
|
||||||
L" GICDCount = %d\n",
|
L" GICDCount = %d\n",
|
||||||
GICDCount
|
GICDCount
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
TRUE,
|
TRUE,
|
||||||
2,
|
2,
|
||||||
@ -372,7 +377,8 @@ ParseAcpiMadt (
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case EFI_ACPI_6_3_GIC_MSI_FRAME: {
|
case EFI_ACPI_6_3_GIC_MSI_FRAME:
|
||||||
|
{
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
TRUE,
|
TRUE,
|
||||||
2,
|
2,
|
||||||
@ -384,7 +390,8 @@ ParseAcpiMadt (
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case EFI_ACPI_6_3_GICR: {
|
case EFI_ACPI_6_3_GICR:
|
||||||
|
{
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
TRUE,
|
TRUE,
|
||||||
2,
|
2,
|
||||||
@ -396,7 +403,8 @@ ParseAcpiMadt (
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case EFI_ACPI_6_3_GIC_ITS: {
|
case EFI_ACPI_6_3_GIC_ITS:
|
||||||
|
{
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
TRUE,
|
TRUE,
|
||||||
2,
|
2,
|
||||||
@ -408,7 +416,8 @@ ParseAcpiMadt (
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case EFI_ACPI_6_3_IO_APIC: {
|
case EFI_ACPI_6_3_IO_APIC:
|
||||||
|
{
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
TRUE,
|
TRUE,
|
||||||
2,
|
2,
|
||||||
@ -420,7 +429,8 @@ ParseAcpiMadt (
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case EFI_ACPI_6_3_INTERRUPT_SOURCE_OVERRIDE: {
|
case EFI_ACPI_6_3_INTERRUPT_SOURCE_OVERRIDE:
|
||||||
|
{
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
TRUE,
|
TRUE,
|
||||||
2,
|
2,
|
||||||
@ -432,7 +442,8 @@ ParseAcpiMadt (
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case EFI_ACPI_6_3_PROCESSOR_LOCAL_X2APIC: {
|
case EFI_ACPI_6_3_PROCESSOR_LOCAL_X2APIC:
|
||||||
|
{
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
TRUE,
|
TRUE,
|
||||||
2,
|
2,
|
||||||
@ -444,7 +455,8 @@ ParseAcpiMadt (
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case EFI_ACPI_6_3_LOCAL_X2APIC_NMI: {
|
case EFI_ACPI_6_3_LOCAL_X2APIC_NMI:
|
||||||
|
{
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
TRUE,
|
TRUE,
|
||||||
2,
|
2,
|
||||||
@ -456,11 +468,12 @@ ParseAcpiMadt (
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
default: {
|
default:
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Unknown Interrupt Controller Structure,"
|
L"ERROR: Unknown Interrupt Controller Structure,"
|
||||||
L" Type = %d, Length = %d\n",
|
L" Type = %d, Length = %d\n",
|
||||||
*MadtInterruptControllerType,
|
*MadtInterruptControllerType,
|
||||||
*MadtInterruptControllerLength
|
*MadtInterruptControllerLength
|
||||||
);
|
);
|
||||||
@ -468,6 +481,6 @@ ParseAcpiMadt (
|
|||||||
} // switch
|
} // switch
|
||||||
|
|
||||||
InterruptContollerPtr += *MadtInterruptControllerLength;
|
InterruptContollerPtr += *MadtInterruptControllerLength;
|
||||||
Offset += *MadtInterruptControllerLength;
|
Offset += *MadtInterruptControllerLength;
|
||||||
} // while
|
} // while
|
||||||
}
|
}
|
||||||
|
@ -16,25 +16,25 @@
|
|||||||
///
|
///
|
||||||
/// Level 3 base server system Private Peripheral Inerrupt (PPI) ID assignments
|
/// Level 3 base server system Private Peripheral Inerrupt (PPI) ID assignments
|
||||||
///
|
///
|
||||||
#define ARM_PPI_ID_OVERFLOW_INTERRUPT_FROM_CNTP 30
|
#define ARM_PPI_ID_OVERFLOW_INTERRUPT_FROM_CNTP 30
|
||||||
#define ARM_PPI_ID_OVERFLOW_INTERRUPT_FROM_CNTPS 29
|
#define ARM_PPI_ID_OVERFLOW_INTERRUPT_FROM_CNTPS 29
|
||||||
#define ARM_PPI_ID_OVERFLOW_INTERRUPT_FROM_CNTHV 28
|
#define ARM_PPI_ID_OVERFLOW_INTERRUPT_FROM_CNTHV 28
|
||||||
#define ARM_PPI_ID_OVERFLOW_INTERRUPT_FROM_CNTV 27
|
#define ARM_PPI_ID_OVERFLOW_INTERRUPT_FROM_CNTV 27
|
||||||
#define ARM_PPI_ID_OVERFLOW_INTERRUPT_FROM_CNTHP 26
|
#define ARM_PPI_ID_OVERFLOW_INTERRUPT_FROM_CNTHP 26
|
||||||
#define ARM_PPI_ID_GIC_MAINTENANCE_INTERRUPT 25
|
#define ARM_PPI_ID_GIC_MAINTENANCE_INTERRUPT 25
|
||||||
#define ARM_PPI_ID_CTIIRQ 24
|
#define ARM_PPI_ID_CTIIRQ 24
|
||||||
#define ARM_PPI_ID_PERFORMANCE_MONITORS_INTERRUPT 23
|
#define ARM_PPI_ID_PERFORMANCE_MONITORS_INTERRUPT 23
|
||||||
#define ARM_PPI_ID_COMMIRQ 22
|
#define ARM_PPI_ID_COMMIRQ 22
|
||||||
#define ARM_PPI_ID_PMBIRQ 21
|
#define ARM_PPI_ID_PMBIRQ 21
|
||||||
#define ARM_PPI_ID_CNTHPS 20
|
#define ARM_PPI_ID_CNTHPS 20
|
||||||
#define ARM_PPI_ID_CNTHVS 19
|
#define ARM_PPI_ID_CNTHVS 19
|
||||||
|
|
||||||
///
|
///
|
||||||
/// PPI ID allowed ranges
|
/// PPI ID allowed ranges
|
||||||
///
|
///
|
||||||
#define ARM_PPI_ID_MAX 31
|
#define ARM_PPI_ID_MAX 31
|
||||||
#define ARM_PPI_ID_MIN 16
|
#define ARM_PPI_ID_MIN 16
|
||||||
#define ARM_PPI_ID_EXTENDED_MAX 1119
|
#define ARM_PPI_ID_EXTENDED_MAX 1119
|
||||||
#define ARM_PPI_ID_EXTENDED_MIN 1056
|
#define ARM_PPI_ID_EXTENDED_MIN 1056
|
||||||
|
|
||||||
#endif // MADT_PARSER_H_
|
#endif // MADT_PARSER_H_
|
||||||
|
@ -14,25 +14,25 @@
|
|||||||
#include "AcpiTableParser.h"
|
#include "AcpiTableParser.h"
|
||||||
|
|
||||||
// Local variables
|
// Local variables
|
||||||
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the ACPI MCFG Table.
|
An ACPI_PARSER array describing the ACPI MCFG Table.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER McfgParser[] = {
|
STATIC CONST ACPI_PARSER McfgParser[] = {
|
||||||
PARSE_ACPI_HEADER (&AcpiHdrInfo),
|
PARSE_ACPI_HEADER (&AcpiHdrInfo),
|
||||||
{L"Reserved", 8, 36, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 8,36, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the PCI configuration Space Base Address structure.
|
An ACPI_PARSER array describing the PCI configuration Space Base Address structure.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER PciCfgSpaceBaseAddrParser[] = {
|
STATIC CONST ACPI_PARSER PciCfgSpaceBaseAddrParser[] = {
|
||||||
{L"Base Address", 8, 0, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Base Address", 8, 0, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"PCI Segment Group No.", 2, 8, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"PCI Segment Group No.", 2, 8, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Start Bus No.", 1, 10, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Start Bus No.", 1, 10, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"End Bus No.", 1, 11, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"End Bus No.", 1, 11, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 4, 12, L"0x%x", NULL, NULL, NULL, NULL}
|
{ L"Reserved", 4, 12, L"0x%x", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -50,15 +50,15 @@ STATIC CONST ACPI_PARSER PciCfgSpaceBaseAddrParser[] = {
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiMcfg (
|
ParseAcpiMcfg (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Offset;
|
UINT32 Offset;
|
||||||
UINT32 PciCfgOffset;
|
UINT32 PciCfgOffset;
|
||||||
UINT8* PciCfgSpacePtr;
|
UINT8 *PciCfgSpacePtr;
|
||||||
|
|
||||||
if (!Trace) {
|
if (!Trace) {
|
||||||
return;
|
return;
|
||||||
@ -85,6 +85,6 @@ ParseAcpiMcfg (
|
|||||||
PARSER_PARAMS (PciCfgSpaceBaseAddrParser)
|
PARSER_PARAMS (PciCfgSpaceBaseAddrParser)
|
||||||
);
|
);
|
||||||
PciCfgSpacePtr += PciCfgOffset;
|
PciCfgSpacePtr += PciCfgOffset;
|
||||||
Offset += PciCfgOffset;
|
Offset += PciCfgOffset;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,12 +17,12 @@
|
|||||||
#include "PcctParser.h"
|
#include "PcctParser.h"
|
||||||
|
|
||||||
// Local variables
|
// Local variables
|
||||||
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
||||||
|
|
||||||
STATIC UINT32* PccGlobalFlags;
|
STATIC UINT32 *PccGlobalFlags;
|
||||||
STATIC UINT8* PccSubspaceLength;
|
STATIC UINT8 *PccSubspaceLength;
|
||||||
STATIC UINT8* PccSubspaceType;
|
STATIC UINT8 *PccSubspaceType;
|
||||||
STATIC UINT8* ExtendedPccSubspaceInterruptFlags;
|
STATIC UINT8 *ExtendedPccSubspaceInterruptFlags;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function validates the length coded on 4 bytes of a shared memory range
|
This function validates the length coded on 4 bytes of a shared memory range
|
||||||
@ -35,16 +35,16 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateRangeLength4 (
|
ValidateRangeLength4 (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (*(UINT32*)Ptr < MIN_EXT_PCC_SUBSPACE_MEM_RANGE_LEN) {
|
if (*(UINT32 *)Ptr < MIN_EXT_PCC_SUBSPACE_MEM_RANGE_LEN) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"\nError: Shared memory range length is too short.\n"
|
L"\nError: Shared memory range length is too short.\n"
|
||||||
L"Length is %u when it should be greater than or equal to %u",
|
L"Length is %u when it should be greater than or equal to %u",
|
||||||
*(UINT32*)Ptr,
|
*(UINT32 *)Ptr,
|
||||||
MIN_EXT_PCC_SUBSPACE_MEM_RANGE_LEN
|
MIN_EXT_PCC_SUBSPACE_MEM_RANGE_LEN
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -61,16 +61,16 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateRangeLength8 (
|
ValidateRangeLength8 (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (*(UINT64*)Ptr <= MIN_MEMORY_RANGE_LENGTH) {
|
if (*(UINT64 *)Ptr <= MIN_MEMORY_RANGE_LENGTH) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"\nError: Shared memory range length is too short.\n"
|
L"\nError: Shared memory range length is too short.\n"
|
||||||
L"Length is %u when it should be greater than %u",
|
L"Length is %u when it should be greater than %u",
|
||||||
*(UINT64*)Ptr,
|
*(UINT64 *)Ptr,
|
||||||
MIN_MEMORY_RANGE_LENGTH
|
MIN_MEMORY_RANGE_LENGTH
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -87,14 +87,14 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidatePccMemoryIoGas (
|
ValidatePccMemoryIoGas (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
switch (*(UINT8*)Ptr) {
|
switch (*(UINT8 *)Ptr) {
|
||||||
#if !(defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64))
|
#if !(defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64))
|
||||||
case EFI_ACPI_6_4_SYSTEM_IO:
|
case EFI_ACPI_6_4_SYSTEM_IO:
|
||||||
#endif //if not (defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64))
|
#endif //if not (defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64))
|
||||||
case EFI_ACPI_6_4_SYSTEM_MEMORY:
|
case EFI_ACPI_6_4_SYSTEM_MEMORY:
|
||||||
return;
|
return;
|
||||||
default:
|
default:
|
||||||
@ -114,14 +114,14 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidatePccGas (
|
ValidatePccGas (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
switch (*(UINT8*)Ptr) {
|
switch (*(UINT8 *)Ptr) {
|
||||||
#if !(defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64))
|
#if !(defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64))
|
||||||
case EFI_ACPI_6_4_SYSTEM_IO:
|
case EFI_ACPI_6_4_SYSTEM_IO:
|
||||||
#endif //if not (defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64))
|
#endif //if not (defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64))
|
||||||
case EFI_ACPI_6_4_FUNCTIONAL_FIXED_HARDWARE:
|
case EFI_ACPI_6_4_FUNCTIONAL_FIXED_HARDWARE:
|
||||||
case EFI_ACPI_6_4_SYSTEM_MEMORY:
|
case EFI_ACPI_6_4_SYSTEM_MEMORY:
|
||||||
return;
|
return;
|
||||||
@ -142,8 +142,8 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidatePccDoorbellGas (
|
ValidatePccDoorbellGas (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
// For slave subspaces this field is optional, if not present the field
|
// For slave subspaces this field is optional, if not present the field
|
||||||
@ -152,7 +152,8 @@ ValidatePccDoorbellGas (
|
|||||||
if (IsZeroBuffer (
|
if (IsZeroBuffer (
|
||||||
Ptr,
|
Ptr,
|
||||||
sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE)
|
sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE)
|
||||||
)) {
|
))
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -172,8 +173,8 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidatePccIntAckGas (
|
ValidatePccIntAckGas (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
// If the subspace does not support interrupts or the interrupt is
|
// If the subspace does not support interrupts or the interrupt is
|
||||||
@ -183,12 +184,14 @@ ValidatePccIntAckGas (
|
|||||||
if (((*PccGlobalFlags & EFI_ACPI_6_4_PCCT_FLAGS_PLATFORM_INTERRUPT) !=
|
if (((*PccGlobalFlags & EFI_ACPI_6_4_PCCT_FLAGS_PLATFORM_INTERRUPT) !=
|
||||||
EFI_ACPI_6_4_PCCT_FLAGS_PLATFORM_INTERRUPT) ||
|
EFI_ACPI_6_4_PCCT_FLAGS_PLATFORM_INTERRUPT) ||
|
||||||
((*ExtendedPccSubspaceInterruptFlags &
|
((*ExtendedPccSubspaceInterruptFlags &
|
||||||
EFI_ACPI_6_4_PCCT_SUBSPACE_PLATFORM_INTERRUPT_FLAGS_MODE) ==
|
EFI_ACPI_6_4_PCCT_SUBSPACE_PLATFORM_INTERRUPT_FLAGS_MODE) ==
|
||||||
EFI_ACPI_6_4_PCCT_SUBSPACE_PLATFORM_INTERRUPT_FLAGS_MODE)) {
|
EFI_ACPI_6_4_PCCT_SUBSPACE_PLATFORM_INTERRUPT_FLAGS_MODE))
|
||||||
|
{
|
||||||
if (IsZeroBuffer (
|
if (IsZeroBuffer (
|
||||||
Ptr,
|
Ptr,
|
||||||
sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE)
|
sizeof (EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE)
|
||||||
)) {
|
))
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -207,8 +210,8 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidatePccErrStatusGas (
|
ValidatePccErrStatusGas (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
// This field is ignored by the OSPM on slave channels.
|
// This field is ignored by the OSPM on slave channels.
|
||||||
@ -230,19 +233,20 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidatePlatInterrupt (
|
ValidatePlatInterrupt (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
// If a slave subspace is present in the PCCT, then the global Platform
|
// If a slave subspace is present in the PCCT, then the global Platform
|
||||||
// Interrupt flag must be set to 1.
|
// Interrupt flag must be set to 1.
|
||||||
if ((*PccSubspaceType == EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_4_EXTENDED_PCC) &&
|
if ((*PccSubspaceType == EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_4_EXTENDED_PCC) &&
|
||||||
((*PccGlobalFlags & EFI_ACPI_6_4_PCCT_FLAGS_PLATFORM_INTERRUPT) !=
|
((*PccGlobalFlags & EFI_ACPI_6_4_PCCT_FLAGS_PLATFORM_INTERRUPT) !=
|
||||||
EFI_ACPI_6_4_PCCT_FLAGS_PLATFORM_INTERRUPT)) {
|
EFI_ACPI_6_4_PCCT_FLAGS_PLATFORM_INTERRUPT))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"\nError: Global Platform interrupt flag must be set to 1" \
|
L"\nError: Global Platform interrupt flag must be set to 1" \
|
||||||
L" if a PCC type 4 structure is present in PCCT."
|
L" if a PCC type 4 structure is present in PCCT."
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -250,17 +254,17 @@ ValidatePlatInterrupt (
|
|||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the ACPI PCCT Table.
|
An ACPI_PARSER array describing the ACPI PCCT Table.
|
||||||
*/
|
*/
|
||||||
STATIC CONST ACPI_PARSER PcctParser[] = {
|
STATIC CONST ACPI_PARSER PcctParser[] = {
|
||||||
PARSE_ACPI_HEADER (&AcpiHdrInfo),
|
PARSE_ACPI_HEADER (&AcpiHdrInfo),
|
||||||
{L"Flags", 4, 36, NULL, NULL, (VOID**)&PccGlobalFlags, NULL, NULL},
|
{ L"Flags", 4, 36, NULL, NULL, (VOID **)&PccGlobalFlags, NULL, NULL },
|
||||||
{L"Reserved", 8, 40, NULL, NULL, NULL, NULL, NULL}
|
{ L"Reserved", 8, 40, NULL, NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the platform communications channel subspace
|
An ACPI_PARSER array describing the platform communications channel subspace
|
||||||
structure header.
|
structure header.
|
||||||
*/
|
*/
|
||||||
STATIC CONST ACPI_PARSER PccSubspaceHeaderParser[] = {
|
STATIC CONST ACPI_PARSER PccSubspaceHeaderParser[] = {
|
||||||
PCC_SUBSPACE_HEADER ()
|
PCC_SUBSPACE_HEADER ()
|
||||||
// ... Type Specific Fields ...
|
// ... Type Specific Fields ...
|
||||||
};
|
};
|
||||||
@ -268,126 +272,126 @@ STATIC CONST ACPI_PARSER PccSubspaceHeaderParser[] = {
|
|||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the Generic Communications Subspace - Type 0
|
An ACPI_PARSER array describing the Generic Communications Subspace - Type 0
|
||||||
*/
|
*/
|
||||||
STATIC CONST ACPI_PARSER PccSubspaceType0Parser[] = {
|
STATIC CONST ACPI_PARSER PccSubspaceType0Parser[] = {
|
||||||
PCC_SUBSPACE_HEADER (),
|
PCC_SUBSPACE_HEADER (),
|
||||||
{L"Reserved", 6, 2, L"%x %x %x %x %x %x", Dump6Chars, NULL, NULL, NULL},
|
{ L"Reserved", 6, 2, L"%x %x %x %x %x %x", Dump6Chars, NULL, NULL, NULL },
|
||||||
{L"Base Address", 8, 8, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Base Address", 8, 8, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Memory Range Length", 8, 16, L"0x%lx", NULL, NULL, ValidateRangeLength8,
|
{ L"Memory Range Length",8, 16, L"0x%lx", NULL, NULL, ValidateRangeLength8,
|
||||||
NULL},
|
NULL },
|
||||||
{L"Doorbell Register", 12, 24, NULL, DumpGas, NULL, ValidatePccMemoryIoGas,
|
{ L"Doorbell Register",12, 24, NULL, DumpGas, NULL, ValidatePccMemoryIoGas,
|
||||||
NULL},
|
NULL },
|
||||||
{L"Doorbell Preserve", 8, 36, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Doorbell Preserve",8, 36, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Doorbell Write", 8, 44, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Doorbell Write", 8, 44, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Nominal Latency", 4, 52, L"%u", NULL, NULL, NULL, NULL},
|
{ L"Nominal Latency", 4, 52, L"%u", NULL, NULL, NULL, NULL },
|
||||||
{L"Maximum Periodic Access Rate", 4, 56, L"%u", NULL, NULL, NULL, NULL},
|
{ L"Maximum Periodic Access Rate",4, 56, L"%u", NULL, NULL, NULL, NULL },
|
||||||
{L"Minimum Request Turnaround Time", 2, 60, L"%u", NULL, NULL, NULL, NULL}
|
{ L"Minimum Request Turnaround Time",2, 60, L"%u", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the HW-Reduced Communications Subspace
|
An ACPI_PARSER array describing the HW-Reduced Communications Subspace
|
||||||
- Type 1
|
- Type 1
|
||||||
*/
|
*/
|
||||||
STATIC CONST ACPI_PARSER PccSubspaceType1Parser[] = {
|
STATIC CONST ACPI_PARSER PccSubspaceType1Parser[] = {
|
||||||
PCC_SUBSPACE_HEADER (),
|
PCC_SUBSPACE_HEADER (),
|
||||||
{L"Platform Interrupt", 4, 2, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Platform Interrupt",4, 2, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Platform Interrupt Flags", 1, 6, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Platform Interrupt Flags",1, 6, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 1, 7, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 1, 7, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Base Address", 8, 8, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Base Address", 8, 8, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Memory Range Length", 8, 16, L"0x%lx", NULL, NULL, ValidateRangeLength8,
|
{ L"Memory Range Length",8, 16, L"0x%lx", NULL, NULL, ValidateRangeLength8,
|
||||||
NULL},
|
NULL },
|
||||||
{L"Doorbell Register", 12, 24, NULL, DumpGas, NULL,
|
{ L"Doorbell Register",12, 24, NULL, DumpGas, NULL,
|
||||||
ValidatePccGas, NULL},
|
ValidatePccGas, NULL },
|
||||||
{L"Doorbell Preserve", 8, 36, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Doorbell Preserve",8, 36, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Doorbell Write", 8, 44, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Doorbell Write", 8, 44, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Nominal Latency", 4, 52, L"%u", NULL, NULL, NULL, NULL},
|
{ L"Nominal Latency", 4, 52, L"%u", NULL, NULL, NULL, NULL },
|
||||||
{L"Maximum Periodic Access Rate", 4, 56, L"%u", NULL, NULL, NULL, NULL},
|
{ L"Maximum Periodic Access Rate",4, 56, L"%u", NULL, NULL, NULL, NULL },
|
||||||
{L"Minimum Request Turnaround Time", 2, 60, L"%u", NULL, NULL, NULL, NULL}
|
{ L"Minimum Request Turnaround Time",2, 60, L"%u", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the HW-Reduced Communications Subspace
|
An ACPI_PARSER array describing the HW-Reduced Communications Subspace
|
||||||
- Type 2
|
- Type 2
|
||||||
*/
|
*/
|
||||||
STATIC CONST ACPI_PARSER PccSubspaceType2Parser[] = {
|
STATIC CONST ACPI_PARSER PccSubspaceType2Parser[] = {
|
||||||
PCC_SUBSPACE_HEADER (),
|
PCC_SUBSPACE_HEADER (),
|
||||||
{L"Platform Interrupt", 4, 2, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Platform Interrupt",4, 2, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Platform Interrupt Flags", 1, 6, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Platform Interrupt Flags",1, 6, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 1, 7, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 1, 7, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Base Address", 8, 8, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Base Address", 8, 8, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Memory Range Length", 8, 16, L"0x%lx", NULL, NULL, ValidateRangeLength8,
|
{ L"Memory Range Length",8, 16, L"0x%lx", NULL, NULL, ValidateRangeLength8,
|
||||||
NULL},
|
NULL },
|
||||||
{L"Doorbell Register", 12, 24, NULL, DumpGas, NULL,
|
{ L"Doorbell Register",12, 24, NULL, DumpGas, NULL,
|
||||||
ValidatePccGas, NULL},
|
ValidatePccGas, NULL },
|
||||||
{L"Doorbell Preserve", 8, 36, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Doorbell Preserve",8, 36, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Doorbell Write", 8, 44, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Doorbell Write", 8, 44, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Nominal Latency", 4, 52, L"%u", NULL, NULL, NULL, NULL},
|
{ L"Nominal Latency", 4, 52, L"%u", NULL, NULL, NULL, NULL },
|
||||||
{L"Maximum Periodic Access Rate", 4, 56, L"%u", NULL, NULL, NULL, NULL},
|
{ L"Maximum Periodic Access Rate",4, 56, L"%u", NULL, NULL, NULL, NULL },
|
||||||
{L"Minimum Request Turnaround Time", 2, 60, L"%u", NULL, NULL, NULL, NULL},
|
{ L"Minimum Request Turnaround Time",2, 60, L"%u", NULL, NULL, NULL, NULL },
|
||||||
{L"Platform Interrupt Ack Register", 12, 62, NULL, DumpGas, NULL,
|
{ L"Platform Interrupt Ack Register",12, 62, NULL, DumpGas, NULL,
|
||||||
ValidatePccGas, NULL},
|
ValidatePccGas, NULL },
|
||||||
{L"Platform Interrupt Ack Preserve", 8, 74, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Platform Interrupt Ack Preserve",8, 74, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Platform Interrupt Ack Write", 8, 82, L"0x%lx", NULL, NULL,
|
{ L"Platform Interrupt Ack Write",8, 82, L"0x%lx", NULL, NULL,
|
||||||
NULL, NULL},
|
NULL, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the Extended PCC Subspaces - Type 3/4
|
An ACPI_PARSER array describing the Extended PCC Subspaces - Type 3/4
|
||||||
*/
|
*/
|
||||||
STATIC CONST ACPI_PARSER PccSubspaceType3Parser[] = {
|
STATIC CONST ACPI_PARSER PccSubspaceType3Parser[] = {
|
||||||
PCC_SUBSPACE_HEADER (),
|
PCC_SUBSPACE_HEADER (),
|
||||||
{L"Platform Interrupt", 4, 2, L"0x%x", NULL, NULL,
|
{ L"Platform Interrupt", 4, 2, L"0x%x", NULL, NULL,
|
||||||
ValidatePlatInterrupt, NULL},
|
ValidatePlatInterrupt, NULL },
|
||||||
{L"Platform Interrupt Flags", 1, 6, L"0x%x", NULL,
|
{ L"Platform Interrupt Flags", 1, 6, L"0x%x", NULL,
|
||||||
(VOID**)&ExtendedPccSubspaceInterruptFlags, NULL, NULL},
|
(VOID **)&ExtendedPccSubspaceInterruptFlags,NULL, NULL },
|
||||||
{L"Reserved", 1, 7, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 1, 7, L"0x%x", NULL, NULL,NULL, NULL },
|
||||||
{L"Base Address", 8, 8, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Base Address", 8, 8, L"0x%lx", NULL, NULL,NULL, NULL },
|
||||||
{L"Memory Range Length", 4, 16, L"0x%x", NULL, NULL, ValidateRangeLength4,
|
{ L"Memory Range Length", 4, 16, L"0x%x", NULL, NULL,ValidateRangeLength4,
|
||||||
NULL},
|
NULL },
|
||||||
{L"Doorbell Register", 12, 20, NULL, DumpGas, NULL,
|
{ L"Doorbell Register", 12, 20, NULL, DumpGas, NULL,
|
||||||
ValidatePccDoorbellGas, NULL},
|
ValidatePccDoorbellGas, NULL },
|
||||||
{L"Doorbell Preserve", 8, 32, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Doorbell Preserve", 8, 32, L"0x%lx", NULL, NULL,NULL, NULL },
|
||||||
{L"Doorbell Write", 8, 40, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Doorbell Write", 8, 40, L"0x%lx", NULL, NULL,NULL, NULL },
|
||||||
{L"Nominal Latency", 4, 48, L"%u", NULL, NULL, NULL, NULL},
|
{ L"Nominal Latency", 4, 48, L"%u", NULL, NULL,NULL, NULL },
|
||||||
{L"Maximum Periodic Access Rate", 4, 52, L"%u", NULL, NULL, NULL, NULL},
|
{ L"Maximum Periodic Access Rate", 4, 52, L"%u", NULL, NULL,NULL, NULL },
|
||||||
{L"Minimum Request Turnaround Time", 4, 56, L"%u", NULL, NULL, NULL, NULL},
|
{ L"Minimum Request Turnaround Time", 4, 56, L"%u", NULL, NULL,NULL, NULL },
|
||||||
{L"Platform Interrupt Ack Register", 12, 60, NULL, DumpGas, NULL,
|
{ L"Platform Interrupt Ack Register", 12, 60, NULL, DumpGas, NULL,
|
||||||
ValidatePccIntAckGas, NULL},
|
ValidatePccIntAckGas, NULL },
|
||||||
{L"Platform Interrupt Ack Preserve", 8, 72, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Platform Interrupt Ack Preserve", 8, 72, L"0x%lx", NULL, NULL,NULL, NULL },
|
||||||
{L"Platform Interrupt Ack Set", 8, 80, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Platform Interrupt Ack Set", 8, 80, L"0x%lx", NULL, NULL,NULL, NULL },
|
||||||
{L"Reserved", 8, 88, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 8, 88, L"0x%lx", NULL, NULL,NULL, NULL },
|
||||||
{L"Cmd Complete Check Reg Addr", 12, 96, NULL, DumpGas, NULL,
|
{ L"Cmd Complete Check Reg Addr", 12, 96, NULL, DumpGas, NULL,
|
||||||
ValidatePccGas, NULL},
|
ValidatePccGas, NULL },
|
||||||
{L"Cmd Complete Check Mask", 8, 108, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Cmd Complete Check Mask", 8, 108, L"0x%lx", NULL, NULL,NULL, NULL },
|
||||||
{L"Cmd Update Reg Addr", 12, 116, NULL, DumpGas, NULL,
|
{ L"Cmd Update Reg Addr", 12, 116, NULL, DumpGas, NULL,
|
||||||
ValidatePccGas, NULL},
|
ValidatePccGas, NULL },
|
||||||
{L"Cmd Update Preserve mask", 8, 128, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Cmd Update Preserve mask", 8, 128, L"0x%lx", NULL, NULL,NULL, NULL },
|
||||||
{L"Cmd Update Set mask", 8, 136, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Cmd Update Set mask", 8, 136, L"0x%lx", NULL, NULL,NULL, NULL },
|
||||||
{L"Error Status Register", 12, 144, NULL, DumpGas, NULL,
|
{ L"Error Status Register", 12, 144, NULL, DumpGas, NULL,
|
||||||
ValidatePccErrStatusGas, NULL},
|
ValidatePccErrStatusGas, NULL },
|
||||||
{L"Error Status Mask", 8, 156, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Error Status Mask", 8, 156, L"0x%lx", NULL, NULL,NULL, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the HW Registers based Communications
|
An ACPI_PARSER array describing the HW Registers based Communications
|
||||||
Subspace Structure - Type 5
|
Subspace Structure - Type 5
|
||||||
*/
|
*/
|
||||||
STATIC CONST ACPI_PARSER PccSubspaceType5Parser[] = {
|
STATIC CONST ACPI_PARSER PccSubspaceType5Parser[] = {
|
||||||
PCC_SUBSPACE_HEADER (),
|
PCC_SUBSPACE_HEADER (),
|
||||||
{L"Version", 2, 2, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Version", 2, 2, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Base Address", 8, 4, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Base Address", 8, 4, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Shared Memory Range Length", 8, 12, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Shared Memory Range Length",8, 12, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Doorbell Register", 12, 20, NULL, DumpGas, NULL,
|
{ L"Doorbell Register", 12, 20, NULL, DumpGas, NULL,
|
||||||
ValidatePccMemoryIoGas, NULL},
|
ValidatePccMemoryIoGas,NULL },
|
||||||
{L"Doorbell Preserve", 8, 32, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Doorbell Preserve", 8, 32, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Doorbell Write", 8, 40, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Doorbell Write", 8, 40, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Command Complete Check Register", 12, 48, NULL, DumpGas, NULL,
|
{ L"Command Complete Check Register",12, 48, NULL, DumpGas, NULL,
|
||||||
ValidatePccMemoryIoGas, NULL},
|
ValidatePccMemoryIoGas,NULL },
|
||||||
{L"Command Complete Check Mask", 8, 60, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Command Complete Check Mask",8, 60, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Error Status Register", 12, 68, NULL, DumpGas, NULL,
|
{ L"Error Status Register",12, 68, NULL, DumpGas, NULL,
|
||||||
ValidatePccMemoryIoGas, NULL},
|
ValidatePccMemoryIoGas,NULL },
|
||||||
{L"Error Status Mask", 8, 80, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"Error Status Mask", 8, 80, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"Nominal Latency", 4, 88, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Nominal Latency", 4, 88, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Minimum Request Turnaround Time", 4, 92, L"0x%x", NULL, NULL, NULL, NULL}
|
{ L"Minimum Request Turnaround Time",4, 92, L"0x%x", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -399,7 +403,7 @@ STATIC CONST ACPI_PARSER PccSubspaceType5Parser[] = {
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpPccSubspaceType0 (
|
DumpPccSubspaceType0 (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT8 Length
|
IN UINT8 Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -422,7 +426,7 @@ DumpPccSubspaceType0 (
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpPccSubspaceType1 (
|
DumpPccSubspaceType1 (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT8 Length
|
IN UINT8 Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -445,7 +449,7 @@ DumpPccSubspaceType1 (
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpPccSubspaceType2 (
|
DumpPccSubspaceType2 (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT8 Length
|
IN UINT8 Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -468,7 +472,7 @@ DumpPccSubspaceType2 (
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpPccSubspaceType3 (
|
DumpPccSubspaceType3 (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT8 Length
|
IN UINT8 Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -491,7 +495,7 @@ DumpPccSubspaceType3 (
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpPccSubspaceType4 (
|
DumpPccSubspaceType4 (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT8 Length
|
IN UINT8 Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -514,7 +518,7 @@ DumpPccSubspaceType4 (
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpPccSubspaceType5 (
|
DumpPccSubspaceType5 (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT8 Length
|
IN UINT8 Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -544,15 +548,15 @@ DumpPccSubspaceType5 (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiPcct (
|
ParseAcpiPcct (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Offset;
|
UINT32 Offset;
|
||||||
UINT8* PccSubspacePtr;
|
UINT8 *PccSubspacePtr;
|
||||||
UINTN SubspaceCount;
|
UINTN SubspaceCount;
|
||||||
|
|
||||||
if (!Trace) {
|
if (!Trace) {
|
||||||
return;
|
return;
|
||||||
@ -584,11 +588,12 @@ ParseAcpiPcct (
|
|||||||
// Check if the values used to control the parsing logic have been
|
// Check if the values used to control the parsing logic have been
|
||||||
// successfully read.
|
// successfully read.
|
||||||
if ((PccSubspaceType == NULL) ||
|
if ((PccSubspaceType == NULL) ||
|
||||||
(PccSubspaceLength == NULL)) {
|
(PccSubspaceLength == NULL))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Insufficient remaining table buffer length to read the " \
|
L"ERROR: Insufficient remaining table buffer length to read the " \
|
||||||
L"structure header. Length = %u.\n",
|
L"structure header. Length = %u.\n",
|
||||||
AcpiTableLength - Offset
|
AcpiTableLength - Offset
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
@ -596,11 +601,12 @@ ParseAcpiPcct (
|
|||||||
|
|
||||||
// Validate Structure length
|
// Validate Structure length
|
||||||
if ((*PccSubspaceLength == 0) ||
|
if ((*PccSubspaceLength == 0) ||
|
||||||
((Offset + (*PccSubspaceLength)) > AcpiTableLength)) {
|
((Offset + (*PccSubspaceLength)) > AcpiTableLength))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Invalid Structure length. " \
|
L"ERROR: Invalid Structure length. " \
|
||||||
L"Length = %u. Offset = %u. AcpiTableLength = %u.\n",
|
L"Length = %u. Offset = %u. AcpiTableLength = %u.\n",
|
||||||
*PccSubspaceLength,
|
*PccSubspaceLength,
|
||||||
Offset,
|
Offset,
|
||||||
AcpiTableLength
|
AcpiTableLength
|
||||||
@ -649,14 +655,14 @@ ParseAcpiPcct (
|
|||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Unknown PCC subspace structure:"
|
L"ERROR: Unknown PCC subspace structure:"
|
||||||
L" Type = %u, Length = %u\n",
|
L" Type = %u, Length = %u\n",
|
||||||
PccSubspaceType,
|
PccSubspaceType,
|
||||||
*PccSubspaceLength
|
*PccSubspaceLength
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
PccSubspacePtr += *PccSubspaceLength;
|
PccSubspacePtr += *PccSubspaceLength;
|
||||||
Offset += *PccSubspaceLength;
|
Offset += *PccSubspaceLength;
|
||||||
SubspaceCount++;
|
SubspaceCount++;
|
||||||
} // while
|
} // while
|
||||||
|
|
||||||
|
@ -11,17 +11,17 @@
|
|||||||
/**
|
/**
|
||||||
Minimum value for the 'length' field in subspaces of types 0, 1 and 2.
|
Minimum value for the 'length' field in subspaces of types 0, 1 and 2.
|
||||||
*/
|
*/
|
||||||
#define MIN_MEMORY_RANGE_LENGTH 8
|
#define MIN_MEMORY_RANGE_LENGTH 8
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Minimum value for the 'length' field in subspaces of types 3 and 4.
|
Minimum value for the 'length' field in subspaces of types 3 and 4.
|
||||||
*/
|
*/
|
||||||
#define MIN_EXT_PCC_SUBSPACE_MEM_RANGE_LEN 16
|
#define MIN_EXT_PCC_SUBSPACE_MEM_RANGE_LEN 16
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Maximum number of PCC subspaces.
|
Maximum number of PCC subspaces.
|
||||||
*/
|
*/
|
||||||
#define MAX_PCC_SUBSPACES 256
|
#define MAX_PCC_SUBSPACES 256
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Parser for the header of any type of PCC subspace.
|
Parser for the header of any type of PCC subspace.
|
||||||
|
@ -17,10 +17,10 @@
|
|||||||
#include "PpttParser.h"
|
#include "PpttParser.h"
|
||||||
|
|
||||||
// Local variables
|
// Local variables
|
||||||
STATIC CONST UINT8* ProcessorTopologyStructureType;
|
STATIC CONST UINT8 *ProcessorTopologyStructureType;
|
||||||
STATIC CONST UINT8* ProcessorTopologyStructureLength;
|
STATIC CONST UINT8 *ProcessorTopologyStructureLength;
|
||||||
STATIC CONST UINT32* NumberOfPrivateResources;
|
STATIC CONST UINT32 *NumberOfPrivateResources;
|
||||||
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function validates the Cache Type Structure (Type 1) 'Number of sets'
|
This function validates the Cache Type Structure (Type 1) 'Number of sets'
|
||||||
@ -34,12 +34,13 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateCacheNumberOfSets (
|
ValidateCacheNumberOfSets (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 NumberOfSets;
|
UINT32 NumberOfSets;
|
||||||
NumberOfSets = *(UINT32*)Ptr;
|
|
||||||
|
NumberOfSets = *(UINT32 *)Ptr;
|
||||||
|
|
||||||
if (NumberOfSets == 0) {
|
if (NumberOfSets == 0) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
@ -47,12 +48,12 @@ ValidateCacheNumberOfSets (
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
||||||
if (NumberOfSets > PPTT_ARM_CCIDX_CACHE_NUMBER_OF_SETS_MAX) {
|
if (NumberOfSets > PPTT_ARM_CCIDX_CACHE_NUMBER_OF_SETS_MAX) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"\nERROR: When ARMv8.3-CCIDX is implemented the maximum cache number of "
|
L"\nERROR: When ARMv8.3-CCIDX is implemented the maximum cache number of "
|
||||||
L"sets must be less than or equal to %d",
|
L"sets must be less than or equal to %d",
|
||||||
PPTT_ARM_CCIDX_CACHE_NUMBER_OF_SETS_MAX
|
PPTT_ARM_CCIDX_CACHE_NUMBER_OF_SETS_MAX
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
@ -62,14 +63,14 @@ ValidateCacheNumberOfSets (
|
|||||||
IncrementWarningCount ();
|
IncrementWarningCount ();
|
||||||
Print (
|
Print (
|
||||||
L"\nWARNING: Without ARMv8.3-CCIDX, the maximum cache number of sets "
|
L"\nWARNING: Without ARMv8.3-CCIDX, the maximum cache number of sets "
|
||||||
L"must be less than or equal to %d. Ignore this message if "
|
L"must be less than or equal to %d. Ignore this message if "
|
||||||
L"ARMv8.3-CCIDX is implemented",
|
L"ARMv8.3-CCIDX is implemented",
|
||||||
PPTT_ARM_CACHE_NUMBER_OF_SETS_MAX
|
PPTT_ARM_CACHE_NUMBER_OF_SETS_MAX
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -84,12 +85,13 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateCacheAssociativity (
|
ValidateCacheAssociativity (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT8 Associativity;
|
UINT8 Associativity;
|
||||||
Associativity = *(UINT8*)Ptr;
|
|
||||||
|
Associativity = *(UINT8 *)Ptr;
|
||||||
|
|
||||||
if (Associativity == 0) {
|
if (Associativity == 0) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
@ -109,25 +111,26 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateCacheLineSize (
|
ValidateCacheLineSize (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
#if defined(MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
||||||
// Reference: ARM Architecture Reference Manual ARMv8 (D.a)
|
// Reference: ARM Architecture Reference Manual ARMv8 (D.a)
|
||||||
// Section D12.2.25: CCSIDR_EL1, Current Cache Size ID Register
|
// Section D12.2.25: CCSIDR_EL1, Current Cache Size ID Register
|
||||||
// LineSize, bits [2:0]
|
// LineSize, bits [2:0]
|
||||||
// (Log2(Number of bytes in cache line)) - 4.
|
// (Log2(Number of bytes in cache line)) - 4.
|
||||||
|
|
||||||
UINT16 LineSize;
|
UINT16 LineSize;
|
||||||
LineSize = *(UINT16*)Ptr;
|
LineSize = *(UINT16 *)Ptr;
|
||||||
|
|
||||||
if ((LineSize < PPTT_ARM_CACHE_LINE_SIZE_MIN) ||
|
if ((LineSize < PPTT_ARM_CACHE_LINE_SIZE_MIN) ||
|
||||||
(LineSize > PPTT_ARM_CACHE_LINE_SIZE_MAX)) {
|
(LineSize > PPTT_ARM_CACHE_LINE_SIZE_MAX))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"\nERROR: The cache line size must be between %d and %d bytes"
|
L"\nERROR: The cache line size must be between %d and %d bytes"
|
||||||
L" on ARM Platforms.",
|
L" on ARM Platforms.",
|
||||||
PPTT_ARM_CACHE_LINE_SIZE_MIN,
|
PPTT_ARM_CACHE_LINE_SIZE_MIN,
|
||||||
PPTT_ARM_CACHE_LINE_SIZE_MAX
|
PPTT_ARM_CACHE_LINE_SIZE_MAX
|
||||||
);
|
);
|
||||||
@ -138,7 +141,8 @@ ValidateCacheLineSize (
|
|||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (L"\nERROR: The cache line size is not a power of 2.");
|
Print (L"\nERROR: The cache line size is not a power of 2.");
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -152,15 +156,16 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateCacheAttributes (
|
ValidateCacheAttributes (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
// Reference: Advanced Configuration and Power Interface (ACPI) Specification
|
// Reference: Advanced Configuration and Power Interface (ACPI) Specification
|
||||||
// Version 6.2 Errata A, September 2017
|
// Version 6.2 Errata A, September 2017
|
||||||
// Table 5-153: Cache Type Structure
|
// Table 5-153: Cache Type Structure
|
||||||
UINT8 Attributes;
|
UINT8 Attributes;
|
||||||
Attributes = *(UINT8*)Ptr;
|
|
||||||
|
Attributes = *(UINT8 *)Ptr;
|
||||||
|
|
||||||
if ((Attributes & 0xE0) != 0) {
|
if ((Attributes & 0xE0) != 0) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
@ -175,67 +180,67 @@ ValidateCacheAttributes (
|
|||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the ACPI PPTT Table.
|
An ACPI_PARSER array describing the ACPI PPTT Table.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER PpttParser[] = {
|
STATIC CONST ACPI_PARSER PpttParser[] = {
|
||||||
PARSE_ACPI_HEADER (&AcpiHdrInfo)
|
PARSE_ACPI_HEADER (&AcpiHdrInfo)
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the processor topology structure header.
|
An ACPI_PARSER array describing the processor topology structure header.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER ProcessorTopologyStructureHeaderParser[] = {
|
STATIC CONST ACPI_PARSER ProcessorTopologyStructureHeaderParser[] = {
|
||||||
{L"Type", 1, 0, NULL, NULL, (VOID**)&ProcessorTopologyStructureType,
|
{ L"Type", 1, 0, NULL, NULL, (VOID **)&ProcessorTopologyStructureType,
|
||||||
NULL, NULL},
|
NULL, NULL },
|
||||||
{L"Length", 1, 1, NULL, NULL, (VOID**)&ProcessorTopologyStructureLength,
|
{ L"Length", 1, 1, NULL, NULL, (VOID **)&ProcessorTopologyStructureLength,
|
||||||
NULL, NULL},
|
NULL, NULL },
|
||||||
{L"Reserved", 2, 2, NULL, NULL, NULL, NULL, NULL}
|
{ L"Reserved", 2, 2, NULL, NULL, NULL, NULL,NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the Processor Hierarchy Node Structure - Type 0.
|
An ACPI_PARSER array describing the Processor Hierarchy Node Structure - Type 0.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER ProcessorHierarchyNodeStructureParser[] = {
|
STATIC CONST ACPI_PARSER ProcessorHierarchyNodeStructureParser[] = {
|
||||||
{L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Length", 1, 1, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Length", 1, 1, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
|
|
||||||
{L"Flags", 4, 4, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Flags", 4, 4, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Parent", 4, 8, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Parent", 4, 8, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"ACPI Processor ID", 4, 12, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"ACPI Processor ID", 4, 12, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Number of private resources", 4, 16, L"%d", NULL,
|
{ L"Number of private resources", 4, 16, L"%d", NULL,
|
||||||
(VOID**)&NumberOfPrivateResources, NULL, NULL}
|
(VOID **)&NumberOfPrivateResources, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the Cache Type Structure - Type 1.
|
An ACPI_PARSER array describing the Cache Type Structure - Type 1.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER CacheTypeStructureParser[] = {
|
STATIC CONST ACPI_PARSER CacheTypeStructureParser[] = {
|
||||||
{L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Length", 1, 1, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Length", 1, 1, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
|
|
||||||
{L"Flags", 4, 4, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Flags", 4, 4, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Next Level of Cache", 4, 8, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Next Level of Cache", 4, 8, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Size", 4, 12, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Size", 4, 12, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Number of sets", 4, 16, L"%d", NULL, NULL, ValidateCacheNumberOfSets, NULL},
|
{ L"Number of sets", 4, 16, L"%d", NULL, NULL, ValidateCacheNumberOfSets, NULL },
|
||||||
{L"Associativity", 1, 20, L"%d", NULL, NULL, ValidateCacheAssociativity, NULL},
|
{ L"Associativity", 1, 20, L"%d", NULL, NULL, ValidateCacheAssociativity, NULL },
|
||||||
{L"Attributes", 1, 21, L"0x%x", NULL, NULL, ValidateCacheAttributes, NULL},
|
{ L"Attributes", 1, 21, L"0x%x", NULL, NULL, ValidateCacheAttributes, NULL },
|
||||||
{L"Line size", 2, 22, L"%d", NULL, NULL, ValidateCacheLineSize, NULL}
|
{ L"Line size", 2, 22, L"%d", NULL, NULL, ValidateCacheLineSize, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the ID Type Structure - Type 2.
|
An ACPI_PARSER array describing the ID Type Structure - Type 2.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER IdStructureParser[] = {
|
STATIC CONST ACPI_PARSER IdStructureParser[] = {
|
||||||
{L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Length", 1, 1, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Length", 1, 1, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
|
|
||||||
{L"VENDOR_ID", 4, 4, NULL, Dump4Chars, NULL, NULL, NULL},
|
{ L"VENDOR_ID", 4, 4, NULL, Dump4Chars, NULL, NULL, NULL },
|
||||||
{L"LEVEL_1_ID", 8, 8, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"LEVEL_1_ID", 8, 8, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"LEVEL_2_ID", 8, 16, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"LEVEL_2_ID", 8, 16, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"MAJOR_REV", 2, 24, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"MAJOR_REV", 2, 24, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"MINOR_REV", 2, 26, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"MINOR_REV", 2, 26, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"SPIN_REV", 2, 28, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"SPIN_REV", 2, 28, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -248,13 +253,13 @@ STATIC CONST ACPI_PARSER IdStructureParser[] = {
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpProcessorHierarchyNodeStructure (
|
DumpProcessorHierarchyNodeStructure (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT8 Length
|
IN UINT8 Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Offset;
|
UINT32 Offset;
|
||||||
UINT32 Index;
|
UINT32 Index;
|
||||||
CHAR16 Buffer[OUTPUT_FIELD_COLUMN_WIDTH];
|
CHAR16 Buffer[OUTPUT_FIELD_COLUMN_WIDTH];
|
||||||
|
|
||||||
Offset = ParseAcpi (
|
Offset = ParseAcpi (
|
||||||
TRUE,
|
TRUE,
|
||||||
@ -281,8 +286,8 @@ DumpProcessorHierarchyNodeStructure (
|
|||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Invalid Number of Private Resources. " \
|
L"ERROR: Invalid Number of Private Resources. " \
|
||||||
L"PrivateResourceCount = %d. RemainingBufferLength = %d. " \
|
L"PrivateResourceCount = %d. RemainingBufferLength = %d. " \
|
||||||
L"Parsing of this structure aborted.\n",
|
L"Parsing of this structure aborted.\n",
|
||||||
*NumberOfPrivateResources,
|
*NumberOfPrivateResources,
|
||||||
Length - Offset
|
Length - Offset
|
||||||
);
|
);
|
||||||
@ -304,7 +309,7 @@ DumpProcessorHierarchyNodeStructure (
|
|||||||
PrintFieldName (4, Buffer);
|
PrintFieldName (4, Buffer);
|
||||||
Print (
|
Print (
|
||||||
L"0x%x\n",
|
L"0x%x\n",
|
||||||
*((UINT32*)(Ptr + Offset))
|
*((UINT32 *)(Ptr + Offset))
|
||||||
);
|
);
|
||||||
|
|
||||||
Offset += sizeof (UINT32);
|
Offset += sizeof (UINT32);
|
||||||
@ -321,7 +326,7 @@ DumpProcessorHierarchyNodeStructure (
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpCacheTypeStructure (
|
DumpCacheTypeStructure (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT8 Length
|
IN UINT8 Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -344,8 +349,8 @@ DumpCacheTypeStructure (
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
DumpIDStructure (
|
DumpIDStructure (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT8 Length
|
IN UINT8 Length
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
@ -378,14 +383,14 @@ DumpIDStructure (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiPptt (
|
ParseAcpiPptt (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Offset;
|
UINT32 Offset;
|
||||||
UINT8* ProcessorTopologyStructurePtr;
|
UINT8 *ProcessorTopologyStructurePtr;
|
||||||
|
|
||||||
if (!Trace) {
|
if (!Trace) {
|
||||||
return;
|
return;
|
||||||
@ -416,11 +421,12 @@ ParseAcpiPptt (
|
|||||||
// Check if the values used to control the parsing logic have been
|
// Check if the values used to control the parsing logic have been
|
||||||
// successfully read.
|
// successfully read.
|
||||||
if ((ProcessorTopologyStructureType == NULL) ||
|
if ((ProcessorTopologyStructureType == NULL) ||
|
||||||
(ProcessorTopologyStructureLength == NULL)) {
|
(ProcessorTopologyStructureLength == NULL))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Insufficient remaining table buffer length to read the " \
|
L"ERROR: Insufficient remaining table buffer length to read the " \
|
||||||
L"processor topology structure header. Length = %d.\n",
|
L"processor topology structure header. Length = %d.\n",
|
||||||
AcpiTableLength - Offset
|
AcpiTableLength - Offset
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
@ -428,11 +434,12 @@ ParseAcpiPptt (
|
|||||||
|
|
||||||
// Validate Processor Topology Structure length
|
// Validate Processor Topology Structure length
|
||||||
if ((*ProcessorTopologyStructureLength == 0) ||
|
if ((*ProcessorTopologyStructureLength == 0) ||
|
||||||
((Offset + (*ProcessorTopologyStructureLength)) > AcpiTableLength)) {
|
((Offset + (*ProcessorTopologyStructureLength)) > AcpiTableLength))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Invalid Processor Topology Structure length. " \
|
L"ERROR: Invalid Processor Topology Structure length. " \
|
||||||
L"Length = %d. Offset = %d. AcpiTableLength = %d.\n",
|
L"Length = %d. Offset = %d. AcpiTableLength = %d.\n",
|
||||||
*ProcessorTopologyStructureLength,
|
*ProcessorTopologyStructureLength,
|
||||||
Offset,
|
Offset,
|
||||||
AcpiTableLength
|
AcpiTableLength
|
||||||
@ -466,13 +473,13 @@ ParseAcpiPptt (
|
|||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Unknown processor topology structure:"
|
L"ERROR: Unknown processor topology structure:"
|
||||||
L" Type = %d, Length = %d\n",
|
L" Type = %d, Length = %d\n",
|
||||||
*ProcessorTopologyStructureType,
|
*ProcessorTopologyStructureType,
|
||||||
*ProcessorTopologyStructureLength
|
*ProcessorTopologyStructureLength
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
ProcessorTopologyStructurePtr += *ProcessorTopologyStructureLength;
|
ProcessorTopologyStructurePtr += *ProcessorTopologyStructureLength;
|
||||||
Offset += *ProcessorTopologyStructureLength;
|
Offset += *ProcessorTopologyStructureLength;
|
||||||
} // while
|
} // while
|
||||||
}
|
}
|
||||||
|
@ -16,22 +16,22 @@
|
|||||||
/// Cache parameters allowed by the architecture with
|
/// Cache parameters allowed by the architecture with
|
||||||
/// ARMv8.3-CCIDX (Cache extended number of sets)
|
/// ARMv8.3-CCIDX (Cache extended number of sets)
|
||||||
/// Derived from CCSIDR_EL1 when ID_AA64MMFR2_EL1.CCIDX==0001
|
/// Derived from CCSIDR_EL1 when ID_AA64MMFR2_EL1.CCIDX==0001
|
||||||
#define PPTT_ARM_CCIDX_CACHE_NUMBER_OF_SETS_MAX (1 << 24)
|
#define PPTT_ARM_CCIDX_CACHE_NUMBER_OF_SETS_MAX (1 << 24)
|
||||||
#define PPTT_ARM_CCIDX_CACHE_ASSOCIATIVITY_MAX (1 << 21)
|
#define PPTT_ARM_CCIDX_CACHE_ASSOCIATIVITY_MAX (1 << 21)
|
||||||
|
|
||||||
/// Cache parameters allowed by the architecture without
|
/// Cache parameters allowed by the architecture without
|
||||||
/// ARMv8.3-CCIDX (Cache extended number of sets)
|
/// ARMv8.3-CCIDX (Cache extended number of sets)
|
||||||
/// Derived from CCSIDR_EL1 when ID_AA64MMFR2_EL1.CCIDX==0000
|
/// Derived from CCSIDR_EL1 when ID_AA64MMFR2_EL1.CCIDX==0000
|
||||||
#define PPTT_ARM_CACHE_NUMBER_OF_SETS_MAX (1 << 15)
|
#define PPTT_ARM_CACHE_NUMBER_OF_SETS_MAX (1 << 15)
|
||||||
#define PPTT_ARM_CACHE_ASSOCIATIVITY_MAX (1 << 10)
|
#define PPTT_ARM_CACHE_ASSOCIATIVITY_MAX (1 << 10)
|
||||||
|
|
||||||
/// Common cache parameters
|
/// Common cache parameters
|
||||||
/// Derived from CCSIDR_EL1
|
/// Derived from CCSIDR_EL1
|
||||||
/// The LineSize is represented by bits 2:0
|
/// The LineSize is represented by bits 2:0
|
||||||
/// (Log2(Number of bytes in cache line)) - 4 is used to represent
|
/// (Log2(Number of bytes in cache line)) - 4 is used to represent
|
||||||
/// the LineSize bits.
|
/// the LineSize bits.
|
||||||
#define PPTT_ARM_CACHE_LINE_SIZE_MAX (1 << 11)
|
#define PPTT_ARM_CACHE_LINE_SIZE_MAX (1 << 11)
|
||||||
#define PPTT_ARM_CACHE_LINE_SIZE_MIN (1 << 4)
|
#define PPTT_ARM_CACHE_LINE_SIZE_MIN (1 << 4)
|
||||||
|
|
||||||
#endif // if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
#endif // if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
#include "AcpiTableParser.h"
|
#include "AcpiTableParser.h"
|
||||||
|
|
||||||
// Local Variables
|
// Local Variables
|
||||||
STATIC CONST UINT64* XsdtAddress;
|
STATIC CONST UINT64 *XsdtAddress;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function validates the RSDT Address.
|
This function validates the RSDT Address.
|
||||||
@ -26,19 +26,19 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateRsdtAddress (
|
ValidateRsdtAddress (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
#if defined(MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
||||||
// Reference: Server Base Boot Requirements System Software on ARM Platforms
|
// Reference: Server Base Boot Requirements System Software on ARM Platforms
|
||||||
// Section: 4.2.1.1 RSDP
|
// Section: 4.2.1.1 RSDP
|
||||||
// Root System Description Pointer (RSDP), ACPI ? 5.2.5.
|
// Root System Description Pointer (RSDP), ACPI ? 5.2.5.
|
||||||
// - Within the RSDP, the RsdtAddress field must be null (zero) and the
|
// - Within the RSDP, the RsdtAddress field must be null (zero) and the
|
||||||
// XsdtAddresss MUST be a valid, non-null, 64-bit value.
|
// XsdtAddresss MUST be a valid, non-null, 64-bit value.
|
||||||
UINT32 RsdtAddr;
|
UINT32 RsdtAddr;
|
||||||
|
|
||||||
RsdtAddr = *(UINT32*)Ptr;
|
RsdtAddr = *(UINT32 *)Ptr;
|
||||||
|
|
||||||
if (RsdtAddr != 0) {
|
if (RsdtAddr != 0) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
@ -47,7 +47,8 @@ ValidateRsdtAddress (
|
|||||||
RsdtAddr
|
RsdtAddr
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -61,19 +62,19 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateXsdtAddress (
|
ValidateXsdtAddress (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
#if defined(MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
||||||
// Reference: Server Base Boot Requirements System Software on ARM Platforms
|
// Reference: Server Base Boot Requirements System Software on ARM Platforms
|
||||||
// Section: 4.2.1.1 RSDP
|
// Section: 4.2.1.1 RSDP
|
||||||
// Root System Description Pointer (RSDP), ACPI ? 5.2.5.
|
// Root System Description Pointer (RSDP), ACPI ? 5.2.5.
|
||||||
// - Within the RSDP, the RsdtAddress field must be null (zero) and the
|
// - Within the RSDP, the RsdtAddress field must be null (zero) and the
|
||||||
// XsdtAddresss MUST be a valid, non-null, 64-bit value.
|
// XsdtAddresss MUST be a valid, non-null, 64-bit value.
|
||||||
UINT64 XsdtAddr;
|
UINT64 XsdtAddr;
|
||||||
|
|
||||||
XsdtAddr = *(UINT64*)Ptr;
|
XsdtAddr = *(UINT64 *)Ptr;
|
||||||
|
|
||||||
if (XsdtAddr == 0) {
|
if (XsdtAddr == 0) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
@ -82,23 +83,24 @@ ValidateXsdtAddress (
|
|||||||
XsdtAddr
|
XsdtAddr
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An array describing the ACPI RSDP Table.
|
An array describing the ACPI RSDP Table.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER RsdpParser[] = {
|
STATIC CONST ACPI_PARSER RsdpParser[] = {
|
||||||
{L"Signature", 8, 0, NULL, Dump8Chars, NULL, NULL, NULL},
|
{ L"Signature", 8, 0, NULL, Dump8Chars, NULL, NULL, NULL },
|
||||||
{L"Checksum", 1, 8, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Checksum", 1, 8, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Oem ID", 6, 9, NULL, Dump6Chars, NULL, NULL, NULL},
|
{ L"Oem ID", 6, 9, NULL, Dump6Chars, NULL, NULL, NULL },
|
||||||
{L"Revision", 1, 15, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Revision", 1, 15, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"RSDT Address", 4, 16, L"0x%x", NULL, NULL, ValidateRsdtAddress, NULL},
|
{ L"RSDT Address", 4, 16, L"0x%x", NULL, NULL, ValidateRsdtAddress, NULL },
|
||||||
{L"Length", 4, 20, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Length", 4, 20, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"XSDT Address", 8, 24, L"0x%lx", NULL, (VOID**)&XsdtAddress,
|
{ L"XSDT Address", 8, 24, L"0x%lx", NULL, (VOID **)&XsdtAddress,
|
||||||
ValidateXsdtAddress, NULL},
|
ValidateXsdtAddress, NULL },
|
||||||
{L"Extended Checksum", 1, 32, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Extended Checksum", 1, 32, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 3, 33, L"%x %x %x", Dump3Chars, NULL, NULL, NULL}
|
{ L"Reserved", 3, 33, L"%x %x %x", Dump3Chars, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -118,10 +120,10 @@ STATIC CONST ACPI_PARSER RsdpParser[] = {
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiRsdp (
|
ParseAcpiRsdp (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (Trace) {
|
if (Trace) {
|
||||||
@ -144,7 +146,7 @@ ParseAcpiRsdp (
|
|||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Insufficient table length. AcpiTableLength = %d." \
|
L"ERROR: Insufficient table length. AcpiTableLength = %d." \
|
||||||
L"RSDP parsing aborted.\n",
|
L"RSDP parsing aborted.\n",
|
||||||
AcpiTableLength
|
AcpiTableLength
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
@ -160,5 +162,5 @@ ParseAcpiRsdp (
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ProcessAcpiTable ((UINT8*)(UINTN)(*XsdtAddress));
|
ProcessAcpiTable ((UINT8 *)(UINTN)(*XsdtAddress));
|
||||||
}
|
}
|
||||||
|
@ -15,22 +15,22 @@
|
|||||||
#include "AcpiTableParser.h"
|
#include "AcpiTableParser.h"
|
||||||
|
|
||||||
// Local Variables
|
// Local Variables
|
||||||
STATIC CONST UINT64* SlitSystemLocalityCount;
|
STATIC CONST UINT64 *SlitSystemLocalityCount;
|
||||||
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the ACPI SLIT table.
|
An ACPI_PARSER array describing the ACPI SLIT table.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER SlitParser[] = {
|
STATIC CONST ACPI_PARSER SlitParser[] = {
|
||||||
PARSE_ACPI_HEADER (&AcpiHdrInfo),
|
PARSE_ACPI_HEADER (&AcpiHdrInfo),
|
||||||
{L"Number of System Localities", 8, 36, L"0x%lx", NULL,
|
{ L"Number of System Localities", 8, 36, L"0x%lx", NULL,
|
||||||
(VOID**)&SlitSystemLocalityCount, NULL, NULL}
|
(VOID **)&SlitSystemLocalityCount,NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Macro to get the value of a System Locality
|
Macro to get the value of a System Locality
|
||||||
**/
|
**/
|
||||||
#define SLIT_ELEMENT(Ptr, i, j) *(Ptr + (i * LocalityCount) + j)
|
#define SLIT_ELEMENT(Ptr, i, j) *(Ptr + (i * LocalityCount) + j)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function parses the ACPI SLIT table.
|
This function parses the ACPI SLIT table.
|
||||||
@ -50,18 +50,18 @@ STATIC CONST ACPI_PARSER SlitParser[] = {
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiSlit (
|
ParseAcpiSlit (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Offset;
|
UINT32 Offset;
|
||||||
UINT32 Count;
|
UINT32 Count;
|
||||||
UINT32 Index;
|
UINT32 Index;
|
||||||
UINT32 LocalityCount;
|
UINT32 LocalityCount;
|
||||||
UINT8* LocalityPtr;
|
UINT8 *LocalityPtr;
|
||||||
CHAR16 Buffer[80]; // Used for AsciiName param of ParseAcpi
|
CHAR16 Buffer[80]; // Used for AsciiName param of ParseAcpi
|
||||||
|
|
||||||
if (!Trace) {
|
if (!Trace) {
|
||||||
return;
|
return;
|
||||||
@ -103,8 +103,8 @@ ParseAcpiSlit (
|
|||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: The Number of System Localities provided can't be represented " \
|
L"ERROR: The Number of System Localities provided can't be represented " \
|
||||||
L"in the SLIT table. SlitSystemLocalityCount = %ld. " \
|
L"in the SLIT table. SlitSystemLocalityCount = %ld. " \
|
||||||
L"MaxLocalityCountAllowed = %d.\n",
|
L"MaxLocalityCountAllowed = %d.\n",
|
||||||
*SlitSystemLocalityCount,
|
*SlitSystemLocalityCount,
|
||||||
MAX_UINT16
|
MAX_UINT16
|
||||||
);
|
);
|
||||||
@ -118,7 +118,7 @@ ParseAcpiSlit (
|
|||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Invalid Number of System Localities. " \
|
L"ERROR: Invalid Number of System Localities. " \
|
||||||
L"SlitSystemLocalityCount = %ld. AcpiTableLength = %d.\n",
|
L"SlitSystemLocalityCount = %ld. AcpiTableLength = %d.\n",
|
||||||
*SlitSystemLocalityCount,
|
*SlitSystemLocalityCount,
|
||||||
AcpiTableLength
|
AcpiTableLength
|
||||||
);
|
);
|
||||||
@ -144,12 +144,14 @@ ParseAcpiSlit (
|
|||||||
for (Index = 0; Index < LocalityCount; Index++) {
|
for (Index = 0; Index < LocalityCount; Index++) {
|
||||||
Print (L" (%3d) ", Index);
|
Print (L" (%3d) ", Index);
|
||||||
}
|
}
|
||||||
|
|
||||||
Print (L"\n");
|
Print (L"\n");
|
||||||
for (Count = 0; Count< LocalityCount; Count++) {
|
for (Count = 0; Count < LocalityCount; Count++) {
|
||||||
Print (L" (%3d) ", Count);
|
Print (L" (%3d) ", Count);
|
||||||
for (Index = 0; Index < LocalityCount; Index++) {
|
for (Index = 0; Index < LocalityCount; Index++) {
|
||||||
Print (L" %3d ", SLIT_ELEMENT (LocalityPtr, Count, Index));
|
Print (L" %3d ", SLIT_ELEMENT (LocalityPtr, Count, Index));
|
||||||
}
|
}
|
||||||
|
|
||||||
Print (L"\n");
|
Print (L"\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -158,23 +160,25 @@ ParseAcpiSlit (
|
|||||||
for (Count = 0; Count < LocalityCount; Count++) {
|
for (Count = 0; Count < LocalityCount; Count++) {
|
||||||
for (Index = 0; Index < LocalityCount; Index++) {
|
for (Index = 0; Index < LocalityCount; Index++) {
|
||||||
// Element[x][x] must be equal to 10
|
// Element[x][x] must be equal to 10
|
||||||
if ((Count == Index) && (SLIT_ELEMENT (LocalityPtr, Count,Index) != 10)) {
|
if ((Count == Index) && (SLIT_ELEMENT (LocalityPtr, Count, Index) != 10)) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Diagonal Element[0x%lx][0x%lx] (%3d)."
|
L"ERROR: Diagonal Element[0x%lx][0x%lx] (%3d)."
|
||||||
L" Normalized Value is not 10\n",
|
L" Normalized Value is not 10\n",
|
||||||
Count,
|
Count,
|
||||||
Index,
|
Index,
|
||||||
SLIT_ELEMENT (LocalityPtr, Count, Index)
|
SLIT_ELEMENT (LocalityPtr, Count, Index)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Element[i][j] must be equal to Element[j][i]
|
// Element[i][j] must be equal to Element[j][i]
|
||||||
if (SLIT_ELEMENT (LocalityPtr, Count, Index) !=
|
if (SLIT_ELEMENT (LocalityPtr, Count, Index) !=
|
||||||
SLIT_ELEMENT (LocalityPtr, Index, Count)) {
|
SLIT_ELEMENT (LocalityPtr, Index, Count))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Relative distances for Element[0x%lx][0x%lx] (%3d) and \n"
|
L"ERROR: Relative distances for Element[0x%lx][0x%lx] (%3d) and \n"
|
||||||
L"Element[0x%lx][0x%lx] (%3d) do not match.\n",
|
L"Element[0x%lx][0x%lx] (%3d) do not match.\n",
|
||||||
Count,
|
Count,
|
||||||
Index,
|
Index,
|
||||||
SLIT_ELEMENT (LocalityPtr, Count, Index),
|
SLIT_ELEMENT (LocalityPtr, Count, Index),
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
#include "AcpiTableParser.h"
|
#include "AcpiTableParser.h"
|
||||||
|
|
||||||
// Local variables
|
// Local variables
|
||||||
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function validates the Interrupt Type.
|
This function validates the Interrupt Type.
|
||||||
@ -29,24 +29,26 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateInterruptType (
|
ValidateInterruptType (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
||||||
UINT8 InterruptType;
|
UINT8 InterruptType;
|
||||||
|
|
||||||
InterruptType = *Ptr;
|
InterruptType = *Ptr;
|
||||||
|
|
||||||
if (InterruptType !=
|
if (InterruptType !=
|
||||||
EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_INTERRUPT_TYPE_GIC) {
|
EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_INTERRUPT_TYPE_GIC)
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"\nERROR: InterruptType = %d. This must be 8 on ARM Platforms",
|
L"\nERROR: InterruptType = %d. This must be 8 on ARM Platforms",
|
||||||
InterruptType
|
InterruptType
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -60,12 +62,12 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateIrq (
|
ValidateIrq (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
#if defined (MDE_CPU_ARM) || defined (MDE_CPU_AARCH64)
|
||||||
UINT8 Irq;
|
UINT8 Irq;
|
||||||
|
|
||||||
Irq = *Ptr;
|
Irq = *Ptr;
|
||||||
|
|
||||||
@ -76,35 +78,36 @@ ValidateIrq (
|
|||||||
Irq
|
Irq
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the ACPI SPCR Table.
|
An ACPI_PARSER array describing the ACPI SPCR Table.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER SpcrParser[] = {
|
STATIC CONST ACPI_PARSER SpcrParser[] = {
|
||||||
PARSE_ACPI_HEADER (&AcpiHdrInfo),
|
PARSE_ACPI_HEADER (&AcpiHdrInfo),
|
||||||
{L"Interface Type", 1, 36, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Interface Type", 1, 36, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 3, 37, L"%x %x %x", Dump3Chars, NULL, NULL, NULL},
|
{ L"Reserved", 3, 37, L"%x %x %x", Dump3Chars, NULL, NULL, NULL },
|
||||||
{L"Base Address", 12, 40, NULL, DumpGas, NULL, NULL, NULL},
|
{ L"Base Address", 12, 40, NULL, DumpGas, NULL, NULL, NULL },
|
||||||
{L"Interrupt Type", 1, 52, L"%d", NULL, NULL, ValidateInterruptType, NULL},
|
{ L"Interrupt Type", 1, 52, L"%d", NULL, NULL, ValidateInterruptType, NULL },
|
||||||
{L"IRQ", 1, 53, L"%d", NULL, NULL, ValidateIrq, NULL},
|
{ L"IRQ", 1, 53, L"%d", NULL, NULL, ValidateIrq, NULL },
|
||||||
{L"Global System Interrupt", 4, 54, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Global System Interrupt", 4, 54, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Baud Rate", 1, 58, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Baud Rate", 1, 58, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Parity", 1, 59, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Parity", 1, 59, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Stop Bits", 1, 60, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Stop Bits", 1, 60, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Flow Control", 1, 61, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Flow Control", 1, 61, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Terminal Type", 1, 62, L"%d", NULL, NULL, NULL, NULL},
|
{ L"Terminal Type", 1, 62, L"%d", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 1, 63, L"%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 1, 63, L"%x", NULL, NULL, NULL, NULL },
|
||||||
|
|
||||||
{L"PCI Device ID", 2, 64, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"PCI Device ID", 2, 64, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"PCI Vendor ID", 2, 66, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"PCI Vendor ID", 2, 66, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"PCI Bus Number", 1, 68, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"PCI Bus Number", 1, 68, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"PCI Device Number", 1, 69, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"PCI Device Number", 1, 69, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"PCI Function Number", 1, 70, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"PCI Function Number", 1, 70, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"PCI Flags", 4, 71, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"PCI Flags", 4, 71, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"PCI Segment", 1, 75, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"PCI Segment", 1, 75, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 4, 76, L"%x", NULL, NULL, NULL, NULL}
|
{ L"Reserved", 4, 76, L"%x", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -122,10 +125,10 @@ STATIC CONST ACPI_PARSER SpcrParser[] = {
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiSpcr (
|
ParseAcpiSpcr (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (!Trace) {
|
if (!Trace) {
|
||||||
|
@ -16,10 +16,10 @@
|
|||||||
#include "AcpiViewConfig.h"
|
#include "AcpiViewConfig.h"
|
||||||
|
|
||||||
// Local Variables
|
// Local Variables
|
||||||
STATIC CONST UINT8* SratRAType;
|
STATIC CONST UINT8 *SratRAType;
|
||||||
STATIC CONST UINT8* SratRALength;
|
STATIC CONST UINT8 *SratRALength;
|
||||||
STATIC CONST UINT8* SratDeviceHandleType;
|
STATIC CONST UINT8 *SratDeviceHandleType;
|
||||||
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This function validates the Reserved field in the SRAT table header.
|
This function validates the Reserved field in the SRAT table header.
|
||||||
@ -32,11 +32,11 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateSratReserved (
|
ValidateSratReserved (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (*(UINT32*)Ptr != 1) {
|
if (*(UINT32 *)Ptr != 1) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (L"\nERROR: Reserved should be 1 for backward compatibility.\n");
|
Print (L"\nERROR: Reserved should be 1 for backward compatibility.\n");
|
||||||
}
|
}
|
||||||
@ -54,11 +54,11 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ValidateSratDeviceHandleType (
|
ValidateSratDeviceHandleType (
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN VOID* Context
|
IN VOID *Context
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT8 DeviceHandleType;
|
UINT8 DeviceHandleType;
|
||||||
|
|
||||||
DeviceHandleType = *Ptr;
|
DeviceHandleType = *Ptr;
|
||||||
|
|
||||||
@ -82,11 +82,11 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DumpSratPciBdfNumber (
|
DumpSratPciBdfNumber (
|
||||||
IN CONST CHAR16* Format,
|
IN CONST CHAR16 *Format,
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
CHAR16 Buffer[OUTPUT_FIELD_COLUMN_WIDTH];
|
CHAR16 Buffer[OUTPUT_FIELD_COLUMN_WIDTH];
|
||||||
|
|
||||||
Print (L"\n");
|
Print (L"\n");
|
||||||
|
|
||||||
@ -143,20 +143,20 @@ DumpSratPciBdfNumber (
|
|||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the Device Handle - ACPI
|
An ACPI_PARSER array describing the Device Handle - ACPI
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER SratDeviceHandleAcpiParser[] = {
|
STATIC CONST ACPI_PARSER SratDeviceHandleAcpiParser[] = {
|
||||||
{L"ACPI_HID", 8, 0, L"0x%lx", NULL, NULL, NULL, NULL},
|
{ L"ACPI_HID", 8, 0, L"0x%lx", NULL, NULL, NULL, NULL },
|
||||||
{L"ACPI_UID", 4, 8, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"ACPI_UID", 4, 8, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 4, 12, L"0x%x", NULL, NULL, NULL, NULL}
|
{ L"Reserved", 4, 12, L"0x%x", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the Device Handle - PCI
|
An ACPI_PARSER array describing the Device Handle - PCI
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER SratDeviceHandlePciParser[] = {
|
STATIC CONST ACPI_PARSER SratDeviceHandlePciParser[] = {
|
||||||
{L"PCI Segment", 2, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"PCI Segment", 2, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"PCI BDF Number", 2, 2, NULL, DumpSratPciBdfNumber, NULL, NULL, NULL},
|
{ L"PCI BDF Number", 2, 2, NULL, DumpSratPciBdfNumber, NULL, NULL, NULL },
|
||||||
{L"Reserved", 12, 4, L"%x %x %x %x - %x %x %x %x - %x %x %x %x", Dump12Chars,
|
{ L"Reserved", 12, 4, L"%x %x %x %x - %x %x %x %x - %x %x %x %x", Dump12Chars,
|
||||||
NULL, NULL, NULL}
|
NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -170,9 +170,9 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DumpSratDeviceHandle (
|
DumpSratDeviceHandle (
|
||||||
IN CONST CHAR16* Format,
|
IN CONST CHAR16 *Format,
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (SratDeviceHandleType == NULL) {
|
if (SratDeviceHandleType == NULL) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
@ -213,11 +213,11 @@ STATIC
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
DumpSratApicProximity (
|
DumpSratApicProximity (
|
||||||
IN CONST CHAR16* Format,
|
IN CONST CHAR16 *Format,
|
||||||
IN UINT8* Ptr
|
IN UINT8 *Ptr
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 ProximityDomain;
|
UINT32 ProximityDomain;
|
||||||
|
|
||||||
ProximityDomain = Ptr[0] | (Ptr[1] << 8) | (Ptr[2] << 16);
|
ProximityDomain = Ptr[0] | (Ptr[1] << 8) | (Ptr[2] << 16);
|
||||||
|
|
||||||
@ -227,108 +227,108 @@ DumpSratApicProximity (
|
|||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the SRAT Table.
|
An ACPI_PARSER array describing the SRAT Table.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER SratParser[] = {
|
STATIC CONST ACPI_PARSER SratParser[] = {
|
||||||
PARSE_ACPI_HEADER (&AcpiHdrInfo),
|
PARSE_ACPI_HEADER (&AcpiHdrInfo),
|
||||||
{L"Reserved", 4, 36, L"0x%x", NULL, NULL, ValidateSratReserved, NULL},
|
{ L"Reserved", 4, 36, L"0x%x", NULL, NULL, ValidateSratReserved, NULL },
|
||||||
{L"Reserved", 8, 40, L"0x%lx", NULL, NULL, NULL, NULL}
|
{ L"Reserved", 8, 40, L"0x%lx", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the Resource Allocation structure header.
|
An ACPI_PARSER array describing the Resource Allocation structure header.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER SratResourceAllocationParser[] = {
|
STATIC CONST ACPI_PARSER SratResourceAllocationParser[] = {
|
||||||
{L"Type", 1, 0, NULL, NULL, (VOID**)&SratRAType, NULL, NULL},
|
{ L"Type", 1, 0, NULL, NULL, (VOID **)&SratRAType, NULL, NULL },
|
||||||
{L"Length", 1, 1, NULL, NULL, (VOID**)&SratRALength, NULL, NULL}
|
{ L"Length", 1, 1, NULL, NULL, (VOID **)&SratRALength, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the GICC Affinity structure.
|
An ACPI_PARSER array describing the GICC Affinity structure.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER SratGicCAffinityParser[] = {
|
STATIC CONST ACPI_PARSER SratGicCAffinityParser[] = {
|
||||||
{L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Length", 1, 1, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Length", 1, 1, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
|
|
||||||
{L"Proximity Domain", 4, 2, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Proximity Domain", 4, 2, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"ACPI Processor UID", 4, 6, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"ACPI Processor UID", 4, 6, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Flags", 4, 10, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Flags", 4, 10, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Clock Domain", 4, 14, L"0x%x", NULL, NULL, NULL, NULL}
|
{ L"Clock Domain", 4, 14, L"0x%x", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the GIC ITS Affinity structure.
|
An ACPI_PARSER array describing the GIC ITS Affinity structure.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER SratGicITSAffinityParser[] = {
|
STATIC CONST ACPI_PARSER SratGicITSAffinityParser[] = {
|
||||||
{L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Length", 1, 1, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Length", 1, 1, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
|
|
||||||
{L"Proximity Domain", 4, 2, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Proximity Domain", 4, 2, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 2, 6, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 2, 6, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"ITS Id", 4, 8, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"ITS Id", 4, 8, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the Generic Initiator Affinity Structure
|
An ACPI_PARSER array describing the Generic Initiator Affinity Structure
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER SratGenericInitiatorAffinityParser[] = {
|
STATIC CONST ACPI_PARSER SratGenericInitiatorAffinityParser[] = {
|
||||||
{L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Length", 1, 1, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Length", 1, 1, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
|
|
||||||
{L"Reserved", 1, 2, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 1, 2, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Device Handle Type", 1, 3, L"%d", NULL, (VOID**)&SratDeviceHandleType,
|
{ L"Device Handle Type", 1, 3, L"%d", NULL, (VOID **)&SratDeviceHandleType,
|
||||||
ValidateSratDeviceHandleType, NULL},
|
ValidateSratDeviceHandleType, NULL },
|
||||||
{L"Proximity Domain", 4, 4, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Proximity Domain", 4, 4, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Device Handle", 16, 8, L"%s", DumpSratDeviceHandle, NULL, NULL, NULL},
|
{ L"Device Handle", 16, 8, L"%s", DumpSratDeviceHandle, NULL, NULL, NULL },
|
||||||
{L"Flags", 4, 24, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Flags", 4, 24, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 4, 28, L"0x%x", NULL, NULL, NULL, NULL}
|
{ L"Reserved", 4, 28, L"0x%x", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the Memory Affinity structure.
|
An ACPI_PARSER array describing the Memory Affinity structure.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER SratMemAffinityParser[] = {
|
STATIC CONST ACPI_PARSER SratMemAffinityParser[] = {
|
||||||
{L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Length", 1, 1, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Length", 1, 1, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
|
|
||||||
{L"Proximity Domain", 4, 2, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Proximity Domain", 4, 2, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 2, 6, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 2, 6, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Base Address Low", 4, 8, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Base Address Low", 4, 8, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Base Address High", 4, 12, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Base Address High", 4, 12, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Length Low", 4, 16, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Length Low", 4, 16, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Length High", 4, 20, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Length High", 4, 20, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 4, 24, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 4, 24, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Flags", 4, 28, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Flags", 4, 28, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 8, 32, L"0x%lx", NULL, NULL, NULL, NULL}
|
{ L"Reserved", 8, 32, L"0x%lx", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the APIC/SAPIC Affinity structure.
|
An ACPI_PARSER array describing the APIC/SAPIC Affinity structure.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER SratApciSapicAffinityParser[] = {
|
STATIC CONST ACPI_PARSER SratApciSapicAffinityParser[] = {
|
||||||
{L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Length", 1, 1, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Length", 1, 1, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
|
|
||||||
{L"Proximity Domain [7:0]", 1, 2, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Proximity Domain [7:0]", 1, 2, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"APIC ID", 1, 3, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"APIC ID", 1, 3, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Flags", 4, 4, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Flags", 4, 4, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Local SAPIC EID", 1, 8, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Local SAPIC EID", 1, 8, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Proximity Domain [31:8]", 3, 9, L"0x%x", DumpSratApicProximity,
|
{ L"Proximity Domain [31:8]", 3, 9, L"0x%x", DumpSratApicProximity,
|
||||||
NULL, NULL, NULL},
|
NULL, NULL, NULL },
|
||||||
{L"Clock Domain", 4, 12, L"0x%x", NULL, NULL, NULL, NULL}
|
{ L"Clock Domain", 4, 12, L"0x%x", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An ACPI_PARSER array describing the Processor Local x2APIC Affinity structure.
|
An ACPI_PARSER array describing the Processor Local x2APIC Affinity structure.
|
||||||
**/
|
**/
|
||||||
STATIC CONST ACPI_PARSER SratX2ApciAffinityParser[] = {
|
STATIC CONST ACPI_PARSER SratX2ApciAffinityParser[] = {
|
||||||
{L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Type", 1, 0, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Length", 1, 1, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Length", 1, 1, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
|
|
||||||
{L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Reserved", 2, 2, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Proximity Domain", 4, 4, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Proximity Domain", 4, 4, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"X2APIC ID", 4, 8, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"X2APIC ID", 4, 8, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Flags", 4, 12, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Flags", 4, 12, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Clock Domain", 4, 16, L"0x%x", NULL, NULL, NULL, NULL},
|
{ L"Clock Domain", 4, 16, L"0x%x", NULL, NULL, NULL, NULL },
|
||||||
{L"Reserved", 4, 20, L"0x%x", NULL, NULL, NULL, NULL}
|
{ L"Reserved", 4, 20, L"0x%x", NULL, NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -352,28 +352,28 @@ STATIC CONST ACPI_PARSER SratX2ApciAffinityParser[] = {
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiSrat (
|
ParseAcpiSrat (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Offset;
|
UINT32 Offset;
|
||||||
UINT8* ResourcePtr;
|
UINT8 *ResourcePtr;
|
||||||
UINT32 GicCAffinityIndex;
|
UINT32 GicCAffinityIndex;
|
||||||
UINT32 GicITSAffinityIndex;
|
UINT32 GicITSAffinityIndex;
|
||||||
UINT32 GenericInitiatorAffinityIndex;
|
UINT32 GenericInitiatorAffinityIndex;
|
||||||
UINT32 MemoryAffinityIndex;
|
UINT32 MemoryAffinityIndex;
|
||||||
UINT32 ApicSapicAffinityIndex;
|
UINT32 ApicSapicAffinityIndex;
|
||||||
UINT32 X2ApicAffinityIndex;
|
UINT32 X2ApicAffinityIndex;
|
||||||
CHAR8 Buffer[80]; // Used for AsciiName param of ParseAcpi
|
CHAR8 Buffer[80]; // Used for AsciiName param of ParseAcpi
|
||||||
|
|
||||||
GicCAffinityIndex = 0;
|
GicCAffinityIndex = 0;
|
||||||
GicITSAffinityIndex = 0;
|
GicITSAffinityIndex = 0;
|
||||||
GenericInitiatorAffinityIndex = 0;
|
GenericInitiatorAffinityIndex = 0;
|
||||||
MemoryAffinityIndex = 0;
|
MemoryAffinityIndex = 0;
|
||||||
ApicSapicAffinityIndex = 0;
|
ApicSapicAffinityIndex = 0;
|
||||||
X2ApicAffinityIndex = 0;
|
X2ApicAffinityIndex = 0;
|
||||||
|
|
||||||
if (!Trace) {
|
if (!Trace) {
|
||||||
return;
|
return;
|
||||||
@ -403,11 +403,12 @@ ParseAcpiSrat (
|
|||||||
// Check if the values used to control the parsing logic have been
|
// Check if the values used to control the parsing logic have been
|
||||||
// successfully read.
|
// successfully read.
|
||||||
if ((SratRAType == NULL) ||
|
if ((SratRAType == NULL) ||
|
||||||
(SratRALength == NULL)) {
|
(SratRALength == NULL))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Insufficient remaining table buffer length to read the " \
|
L"ERROR: Insufficient remaining table buffer length to read the " \
|
||||||
L"Static Resource Allocation structure header. Length = %d.\n",
|
L"Static Resource Allocation structure header. Length = %d.\n",
|
||||||
AcpiTableLength - Offset
|
AcpiTableLength - Offset
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
@ -415,11 +416,12 @@ ParseAcpiSrat (
|
|||||||
|
|
||||||
// Validate Static Resource Allocation Structure length
|
// Validate Static Resource Allocation Structure length
|
||||||
if ((*SratRALength == 0) ||
|
if ((*SratRALength == 0) ||
|
||||||
((Offset + (*SratRALength)) > AcpiTableLength)) {
|
((Offset + (*SratRALength)) > AcpiTableLength))
|
||||||
|
{
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Invalid Static Resource Allocation Structure length. " \
|
L"ERROR: Invalid Static Resource Allocation Structure length. " \
|
||||||
L"Length = %d. Offset = %d. AcpiTableLength = %d.\n",
|
L"Length = %d. Offset = %d. AcpiTableLength = %d.\n",
|
||||||
*SratRALength,
|
*SratRALength,
|
||||||
Offset,
|
Offset,
|
||||||
AcpiTableLength
|
AcpiTableLength
|
||||||
@ -451,7 +453,7 @@ ParseAcpiSrat (
|
|||||||
sizeof (Buffer),
|
sizeof (Buffer),
|
||||||
"GIC ITS Affinity Structure [%d]",
|
"GIC ITS Affinity Structure [%d]",
|
||||||
GicITSAffinityIndex++
|
GicITSAffinityIndex++
|
||||||
);
|
);
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
TRUE,
|
TRUE,
|
||||||
2,
|
2,
|
||||||
@ -468,7 +470,7 @@ ParseAcpiSrat (
|
|||||||
sizeof (Buffer),
|
sizeof (Buffer),
|
||||||
"Generic Initiator Affinity Structure [%d]",
|
"Generic Initiator Affinity Structure [%d]",
|
||||||
GenericInitiatorAffinityIndex++
|
GenericInitiatorAffinityIndex++
|
||||||
);
|
);
|
||||||
ParseAcpi (
|
ParseAcpi (
|
||||||
TRUE,
|
TRUE,
|
||||||
2,
|
2,
|
||||||
@ -476,7 +478,7 @@ ParseAcpiSrat (
|
|||||||
ResourcePtr,
|
ResourcePtr,
|
||||||
*SratRALength,
|
*SratRALength,
|
||||||
PARSER_PARAMS (SratGenericInitiatorAffinityParser)
|
PARSER_PARAMS (SratGenericInitiatorAffinityParser)
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EFI_ACPI_6_3_MEMORY_AFFINITY:
|
case EFI_ACPI_6_3_MEMORY_AFFINITY:
|
||||||
@ -537,6 +539,6 @@ ParseAcpiSrat (
|
|||||||
}
|
}
|
||||||
|
|
||||||
ResourcePtr += (*SratRALength);
|
ResourcePtr += (*SratRALength);
|
||||||
Offset += (*SratRALength);
|
Offset += (*SratRALength);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,10 +28,10 @@
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiSsdt (
|
ParseAcpiSsdt (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (!Trace) {
|
if (!Trace) {
|
||||||
|
@ -15,11 +15,11 @@
|
|||||||
#include "AcpiTableParser.h"
|
#include "AcpiTableParser.h"
|
||||||
|
|
||||||
// Local variables
|
// Local variables
|
||||||
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
STATIC ACPI_DESCRIPTION_HEADER_INFO AcpiHdrInfo;
|
||||||
|
|
||||||
/** An ACPI_PARSER array describing the ACPI XSDT table.
|
/** An ACPI_PARSER array describing the ACPI XSDT table.
|
||||||
*/
|
*/
|
||||||
STATIC CONST ACPI_PARSER XsdtParser[] = {
|
STATIC CONST ACPI_PARSER XsdtParser[] = {
|
||||||
PARSE_ACPI_HEADER (&AcpiHdrInfo)
|
PARSE_ACPI_HEADER (&AcpiHdrInfo)
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ CONST ACPI_DESCRIPTION_HEADER_INFO *
|
|||||||
EFIAPI
|
EFIAPI
|
||||||
GetAcpiXsdtHeaderInfo (
|
GetAcpiXsdtHeaderInfo (
|
||||||
VOID
|
VOID
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return &AcpiHdrInfo;
|
return &AcpiHdrInfo;
|
||||||
}
|
}
|
||||||
@ -48,17 +48,17 @@ GetAcpiXsdtHeaderInfo (
|
|||||||
VOID
|
VOID
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ParseAcpiXsdt (
|
ParseAcpiXsdt (
|
||||||
IN BOOLEAN Trace,
|
IN BOOLEAN Trace,
|
||||||
IN UINT8* Ptr,
|
IN UINT8 *Ptr,
|
||||||
IN UINT32 AcpiTableLength,
|
IN UINT32 AcpiTableLength,
|
||||||
IN UINT8 AcpiTableRevision
|
IN UINT8 AcpiTableRevision
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 Offset;
|
UINT32 Offset;
|
||||||
UINT32 TableOffset;
|
UINT32 TableOffset;
|
||||||
UINT64* TablePointer;
|
UINT64 *TablePointer;
|
||||||
UINTN EntryIndex;
|
UINTN EntryIndex;
|
||||||
CHAR16 Buffer[32];
|
CHAR16 Buffer[32];
|
||||||
|
|
||||||
Offset = ParseAcpi (
|
Offset = ParseAcpi (
|
||||||
Trace,
|
Trace,
|
||||||
@ -72,24 +72,24 @@ ParseAcpiXsdt (
|
|||||||
TableOffset = Offset;
|
TableOffset = Offset;
|
||||||
|
|
||||||
if (Trace) {
|
if (Trace) {
|
||||||
EntryIndex = 0;
|
EntryIndex = 0;
|
||||||
TablePointer = (UINT64*)(Ptr + TableOffset);
|
TablePointer = (UINT64 *)(Ptr + TableOffset);
|
||||||
while (Offset < AcpiTableLength) {
|
while (Offset < AcpiTableLength) {
|
||||||
CONST UINT32* Signature;
|
CONST UINT32 *Signature;
|
||||||
CONST UINT32* Length;
|
CONST UINT32 *Length;
|
||||||
CONST UINT8* Revision;
|
CONST UINT8 *Revision;
|
||||||
|
|
||||||
if ((UINT64*)(UINTN)(*TablePointer) != NULL) {
|
if ((UINT64 *)(UINTN)(*TablePointer) != NULL) {
|
||||||
UINT8* SignaturePtr;
|
UINT8 *SignaturePtr;
|
||||||
|
|
||||||
ParseAcpiHeader (
|
ParseAcpiHeader (
|
||||||
(UINT8*)(UINTN)(*TablePointer),
|
(UINT8 *)(UINTN)(*TablePointer),
|
||||||
&Signature,
|
&Signature,
|
||||||
&Length,
|
&Length,
|
||||||
&Revision
|
&Revision
|
||||||
);
|
);
|
||||||
|
|
||||||
SignaturePtr = (UINT8*)Signature;
|
SignaturePtr = (UINT8 *)Signature;
|
||||||
|
|
||||||
UnicodeSPrint (
|
UnicodeSPrint (
|
||||||
Buffer,
|
Buffer,
|
||||||
@ -114,7 +114,7 @@ ParseAcpiXsdt (
|
|||||||
Print (L"0x%lx\n", *TablePointer);
|
Print (L"0x%lx\n", *TablePointer);
|
||||||
|
|
||||||
// Validate the table pointers are not NULL
|
// Validate the table pointers are not NULL
|
||||||
if ((UINT64*)(UINTN)(*TablePointer) == NULL) {
|
if ((UINT64 *)(UINTN)(*TablePointer) == NULL) {
|
||||||
IncrementErrorCount ();
|
IncrementErrorCount ();
|
||||||
Print (
|
Print (
|
||||||
L"ERROR: Invalid table entry at 0x%lx, table address is 0x%lx\n",
|
L"ERROR: Invalid table entry at 0x%lx, table address is 0x%lx\n",
|
||||||
@ -122,18 +122,20 @@ ParseAcpiXsdt (
|
|||||||
*TablePointer
|
*TablePointer
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Offset += sizeof (UINT64);
|
Offset += sizeof (UINT64);
|
||||||
TablePointer++;
|
TablePointer++;
|
||||||
} // while
|
} // while
|
||||||
}
|
}
|
||||||
|
|
||||||
// Process the tables
|
// Process the tables
|
||||||
Offset = TableOffset;
|
Offset = TableOffset;
|
||||||
TablePointer = (UINT64*)(Ptr + TableOffset);
|
TablePointer = (UINT64 *)(Ptr + TableOffset);
|
||||||
while (Offset < AcpiTableLength) {
|
while (Offset < AcpiTableLength) {
|
||||||
if ((UINT64*)(UINTN)(*TablePointer) != NULL) {
|
if ((UINT64 *)(UINTN)(*TablePointer) != NULL) {
|
||||||
ProcessAcpiTable ((UINT8*)(UINTN)(*TablePointer));
|
ProcessAcpiTable ((UINT8 *)(UINTN)(*TablePointer));
|
||||||
}
|
}
|
||||||
|
|
||||||
Offset += sizeof (UINT64);
|
Offset += sizeof (UINT64);
|
||||||
TablePointer++;
|
TablePointer++;
|
||||||
} // while
|
} // while
|
||||||
|
@ -25,20 +25,20 @@
|
|||||||
#include "AcpiView.h"
|
#include "AcpiView.h"
|
||||||
#include "AcpiViewConfig.h"
|
#include "AcpiViewConfig.h"
|
||||||
|
|
||||||
CONST CHAR16 gShellAcpiViewFileName[] = L"ShellCommand";
|
CONST CHAR16 gShellAcpiViewFileName[] = L"ShellCommand";
|
||||||
EFI_HII_HANDLE gShellAcpiViewHiiHandle = NULL;
|
EFI_HII_HANDLE gShellAcpiViewHiiHandle = NULL;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
An array of acpiview command line parameters.
|
An array of acpiview command line parameters.
|
||||||
**/
|
**/
|
||||||
STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
|
STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
|
||||||
{L"-q", TypeFlag},
|
{ L"-q", TypeFlag },
|
||||||
{L"-d", TypeFlag},
|
{ L"-d", TypeFlag },
|
||||||
{L"-h", TypeFlag},
|
{ L"-h", TypeFlag },
|
||||||
{L"-l", TypeFlag},
|
{ L"-l", TypeFlag },
|
||||||
{L"-s", TypeValue},
|
{ L"-s", TypeValue },
|
||||||
{L"-r", TypeValue},
|
{ L"-r", TypeValue },
|
||||||
{NULL, TypeMax}
|
{ NULL, TypeMax }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -46,30 +46,30 @@ STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
|
|||||||
*/
|
*/
|
||||||
STATIC
|
STATIC
|
||||||
CONST
|
CONST
|
||||||
ACPI_TABLE_PARSER ParserList[] = {
|
ACPI_TABLE_PARSER ParserList[] = {
|
||||||
{EFI_ACPI_6_3_ARM_ERROR_SOURCE_TABLE_SIGNATURE, ParseAcpiAest},
|
{ EFI_ACPI_6_3_ARM_ERROR_SOURCE_TABLE_SIGNATURE, ParseAcpiAest },
|
||||||
{EFI_ACPI_6_2_BOOT_GRAPHICS_RESOURCE_TABLE_SIGNATURE, ParseAcpiBgrt},
|
{ EFI_ACPI_6_2_BOOT_GRAPHICS_RESOURCE_TABLE_SIGNATURE, ParseAcpiBgrt },
|
||||||
{EFI_ACPI_6_2_DEBUG_PORT_2_TABLE_SIGNATURE, ParseAcpiDbg2},
|
{ EFI_ACPI_6_2_DEBUG_PORT_2_TABLE_SIGNATURE, ParseAcpiDbg2 },
|
||||||
{EFI_ACPI_6_2_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
|
{ EFI_ACPI_6_2_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE,
|
||||||
ParseAcpiDsdt},
|
ParseAcpiDsdt },
|
||||||
{EFI_ACPI_6_3_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE, ParseAcpiFacs},
|
{ EFI_ACPI_6_3_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE, ParseAcpiFacs },
|
||||||
{EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE, ParseAcpiFadt},
|
{ EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE, ParseAcpiFadt },
|
||||||
{EFI_ACPI_6_4_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE, ParseAcpiGtdt},
|
{ EFI_ACPI_6_4_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE, ParseAcpiGtdt },
|
||||||
{EFI_ACPI_6_4_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_SIGNATURE, ParseAcpiHmat},
|
{ EFI_ACPI_6_4_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_SIGNATURE, ParseAcpiHmat },
|
||||||
{EFI_ACPI_6_2_IO_REMAPPING_TABLE_SIGNATURE, ParseAcpiIort},
|
{ EFI_ACPI_6_2_IO_REMAPPING_TABLE_SIGNATURE, ParseAcpiIort },
|
||||||
{EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE, ParseAcpiMadt},
|
{ EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE, ParseAcpiMadt },
|
||||||
{EFI_ACPI_6_2_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE,
|
{ EFI_ACPI_6_2_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE,
|
||||||
ParseAcpiMcfg},
|
ParseAcpiMcfg },
|
||||||
{EFI_ACPI_6_4_PLATFORM_COMMUNICATIONS_CHANNEL_TABLE_SIGNATURE,
|
{ EFI_ACPI_6_4_PLATFORM_COMMUNICATIONS_CHANNEL_TABLE_SIGNATURE,
|
||||||
ParseAcpiPcct},
|
ParseAcpiPcct },
|
||||||
{EFI_ACPI_6_2_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_STRUCTURE_SIGNATURE,
|
{ EFI_ACPI_6_2_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_STRUCTURE_SIGNATURE,
|
||||||
ParseAcpiPptt},
|
ParseAcpiPptt },
|
||||||
{RSDP_TABLE_INFO, ParseAcpiRsdp},
|
{ RSDP_TABLE_INFO, ParseAcpiRsdp },
|
||||||
{EFI_ACPI_6_2_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE, ParseAcpiSlit},
|
{ EFI_ACPI_6_2_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE, ParseAcpiSlit },
|
||||||
{EFI_ACPI_6_2_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE, ParseAcpiSpcr},
|
{ EFI_ACPI_6_2_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE, ParseAcpiSpcr },
|
||||||
{EFI_ACPI_6_2_SYSTEM_RESOURCE_AFFINITY_TABLE_SIGNATURE, ParseAcpiSrat},
|
{ EFI_ACPI_6_2_SYSTEM_RESOURCE_AFFINITY_TABLE_SIGNATURE, ParseAcpiSrat },
|
||||||
{EFI_ACPI_6_2_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE, ParseAcpiSsdt},
|
{ EFI_ACPI_6_2_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE, ParseAcpiSsdt },
|
||||||
{EFI_ACPI_6_2_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE, ParseAcpiXsdt}
|
{ EFI_ACPI_6_2_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE, ParseAcpiXsdt }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -86,11 +86,11 @@ EFI_STATUS
|
|||||||
RegisterAllParsers (
|
RegisterAllParsers (
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
UINTN Count;
|
UINTN Count;
|
||||||
|
|
||||||
Status = EFI_SUCCESS;
|
Status = EFI_SUCCESS;
|
||||||
Count = sizeof (ParserList) / sizeof (ParserList[0]);
|
Count = sizeof (ParserList) / sizeof (ParserList[0]);
|
||||||
|
|
||||||
while (Count-- != 0) {
|
while (Count-- != 0) {
|
||||||
Status = RegisterParser (
|
Status = RegisterParser (
|
||||||
@ -101,6 +101,7 @@ RegisterAllParsers (
|
|||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,14 +117,14 @@ RegisterAllParsers (
|
|||||||
UINTN
|
UINTN
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellDumpBufferToFile (
|
ShellDumpBufferToFile (
|
||||||
IN CONST CHAR16* FileNameBuffer,
|
IN CONST CHAR16 *FileNameBuffer,
|
||||||
IN CONST VOID* Buffer,
|
IN CONST VOID *Buffer,
|
||||||
IN CONST UINTN BufferSize
|
IN CONST UINTN BufferSize
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
SHELL_FILE_HANDLE DumpFileHandle;
|
SHELL_FILE_HANDLE DumpFileHandle;
|
||||||
UINTN TransferBytes;
|
UINTN TransferBytes;
|
||||||
|
|
||||||
Status = ShellOpenFileByName (
|
Status = ShellOpenFileByName (
|
||||||
FileNameBuffer,
|
FileNameBuffer,
|
||||||
@ -145,11 +146,11 @@ ShellDumpBufferToFile (
|
|||||||
}
|
}
|
||||||
|
|
||||||
TransferBytes = BufferSize;
|
TransferBytes = BufferSize;
|
||||||
Status = ShellWriteFile (
|
Status = ShellWriteFile (
|
||||||
DumpFileHandle,
|
DumpFileHandle,
|
||||||
&TransferBytes,
|
&TransferBytes,
|
||||||
(VOID *) Buffer
|
(VOID *)Buffer
|
||||||
);
|
);
|
||||||
|
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
Print (L"ERROR: Failed to write binary file.\n");
|
Print (L"ERROR: Failed to write binary file.\n");
|
||||||
@ -167,7 +168,7 @@ ShellDumpBufferToFile (
|
|||||||
|
|
||||||
@return The string pointer to the file name.
|
@return The string pointer to the file name.
|
||||||
**/
|
**/
|
||||||
CONST CHAR16*
|
CONST CHAR16 *
|
||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandGetManFileNameAcpiView (
|
ShellCommandGetManFileNameAcpiView (
|
||||||
VOID
|
VOID
|
||||||
@ -190,27 +191,27 @@ SHELL_STATUS
|
|||||||
EFIAPI
|
EFIAPI
|
||||||
ShellCommandRunAcpiView (
|
ShellCommandRunAcpiView (
|
||||||
IN EFI_HANDLE ImageHandle,
|
IN EFI_HANDLE ImageHandle,
|
||||||
IN EFI_SYSTEM_TABLE* SystemTable
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
SHELL_STATUS ShellStatus;
|
SHELL_STATUS ShellStatus;
|
||||||
LIST_ENTRY* Package;
|
LIST_ENTRY *Package;
|
||||||
CHAR16* ProblemParam;
|
CHAR16 *ProblemParam;
|
||||||
SHELL_FILE_HANDLE TmpDumpFileHandle;
|
SHELL_FILE_HANDLE TmpDumpFileHandle;
|
||||||
CONST CHAR16* MandatoryTableSpecStr;
|
CONST CHAR16 *MandatoryTableSpecStr;
|
||||||
CONST CHAR16* SelectedTableName;
|
CONST CHAR16 *SelectedTableName;
|
||||||
|
|
||||||
// Set configuration defaults
|
// Set configuration defaults
|
||||||
AcpiConfigSetDefaults ();
|
AcpiConfigSetDefaults ();
|
||||||
|
|
||||||
ShellStatus = SHELL_SUCCESS;
|
ShellStatus = SHELL_SUCCESS;
|
||||||
Package = NULL;
|
Package = NULL;
|
||||||
TmpDumpFileHandle = NULL;
|
TmpDumpFileHandle = NULL;
|
||||||
|
|
||||||
Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);
|
Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {
|
if ((Status == EFI_VOLUME_CORRUPTED) && (ProblemParam != NULL)) {
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1,
|
-1,
|
||||||
-1,
|
-1,
|
||||||
@ -224,6 +225,7 @@ ShellCommandRunAcpiView (
|
|||||||
} else {
|
} else {
|
||||||
Print (L"acpiview: Error processing input parameter(s)\n");
|
Print (L"acpiview: Error processing input parameter(s)\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
if (ShellCommandLineGetCount (Package) > 1) {
|
if (ShellCommandLineGetCount (Package) > 1) {
|
||||||
@ -246,7 +248,8 @@ ShellCommandRunAcpiView (
|
|||||||
L"acpiview"
|
L"acpiview"
|
||||||
);
|
);
|
||||||
} else if (ShellCommandLineGetFlag (Package, L"-s") &&
|
} else if (ShellCommandLineGetFlag (Package, L"-s") &&
|
||||||
ShellCommandLineGetValue (Package, L"-s") == NULL) {
|
(ShellCommandLineGetValue (Package, L"-s") == NULL))
|
||||||
|
{
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1,
|
-1,
|
||||||
-1,
|
-1,
|
||||||
@ -258,7 +261,8 @@ ShellCommandRunAcpiView (
|
|||||||
);
|
);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else if (ShellCommandLineGetFlag (Package, L"-r") &&
|
} else if (ShellCommandLineGetFlag (Package, L"-r") &&
|
||||||
ShellCommandLineGetValue (Package, L"-r") == NULL) {
|
(ShellCommandLineGetValue (Package, L"-r") == NULL))
|
||||||
|
{
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1,
|
-1,
|
||||||
-1,
|
-1,
|
||||||
@ -270,7 +274,8 @@ ShellCommandRunAcpiView (
|
|||||||
);
|
);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else if ((ShellCommandLineGetFlag (Package, L"-s") &&
|
} else if ((ShellCommandLineGetFlag (Package, L"-s") &&
|
||||||
ShellCommandLineGetFlag (Package, L"-l"))) {
|
ShellCommandLineGetFlag (Package, L"-l")))
|
||||||
|
{
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1,
|
-1,
|
||||||
-1,
|
-1,
|
||||||
@ -281,18 +286,19 @@ ShellCommandRunAcpiView (
|
|||||||
);
|
);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else if (ShellCommandLineGetFlag (Package, L"-d") &&
|
} else if (ShellCommandLineGetFlag (Package, L"-d") &&
|
||||||
!ShellCommandLineGetFlag (Package, L"-s")) {
|
!ShellCommandLineGetFlag (Package, L"-s"))
|
||||||
ShellPrintHiiEx (
|
{
|
||||||
-1,
|
ShellPrintHiiEx (
|
||||||
-1,
|
-1,
|
||||||
NULL,
|
-1,
|
||||||
STRING_TOKEN (STR_GEN_MISSING_OPTION),
|
NULL,
|
||||||
gShellAcpiViewHiiHandle,
|
STRING_TOKEN (STR_GEN_MISSING_OPTION),
|
||||||
L"acpiview",
|
gShellAcpiViewHiiHandle,
|
||||||
L"-s",
|
L"acpiview",
|
||||||
L"-d"
|
L"-s",
|
||||||
);
|
L"-d"
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
);
|
||||||
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
// Turn on colour highlighting if requested
|
// Turn on colour highlighting if requested
|
||||||
SetColourHighlighting (ShellCommandLineGetFlag (Package, L"-h"));
|
SetColourHighlighting (ShellCommandLineGetFlag (Package, L"-h"));
|
||||||
@ -316,9 +322,9 @@ ShellCommandRunAcpiView (
|
|||||||
SelectAcpiTable (SelectedTableName);
|
SelectAcpiTable (SelectedTableName);
|
||||||
SetReportOption (ReportSelected);
|
SetReportOption (ReportSelected);
|
||||||
|
|
||||||
if (ShellCommandLineGetFlag (Package, L"-d")) {
|
if (ShellCommandLineGetFlag (Package, L"-d")) {
|
||||||
// Create a temporary file to check if the media is writable.
|
// Create a temporary file to check if the media is writable.
|
||||||
CHAR16 FileNameBuffer[MAX_FILE_NAME_LEN];
|
CHAR16 FileNameBuffer[MAX_FILE_NAME_LEN];
|
||||||
SetReportOption (ReportDumpBinFile);
|
SetReportOption (ReportDumpBinFile);
|
||||||
|
|
||||||
UnicodeSPrint (
|
UnicodeSPrint (
|
||||||
@ -337,7 +343,7 @@ ShellCommandRunAcpiView (
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
TmpDumpFileHandle = NULL;
|
TmpDumpFileHandle = NULL;
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1,
|
-1,
|
||||||
@ -349,6 +355,7 @@ ShellCommandRunAcpiView (
|
|||||||
);
|
);
|
||||||
goto Done;
|
goto Done;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete Temporary file.
|
// Delete Temporary file.
|
||||||
ShellDeleteFile (&TmpDumpFileHandle);
|
ShellDeleteFile (&TmpDumpFileHandle);
|
||||||
} // -d
|
} // -d
|
||||||
@ -367,6 +374,7 @@ Done:
|
|||||||
if (Package != NULL) {
|
if (Package != NULL) {
|
||||||
ShellCommandLineFreeVarList (Package);
|
ShellCommandLineFreeVarList (Package);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ShellStatus;
|
return ShellStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -389,7 +397,8 @@ UefiShellAcpiViewCommandLibConstructor (
|
|||||||
IN EFI_SYSTEM_TABLE *SystemTable
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
gShellAcpiViewHiiHandle = NULL;
|
gShellAcpiViewHiiHandle = NULL;
|
||||||
|
|
||||||
// Check Shell Profile Debug1 bit of the profiles mask
|
// Check Shell Profile Debug1 bit of the profiles mask
|
||||||
@ -412,6 +421,7 @@ UefiShellAcpiViewCommandLibConstructor (
|
|||||||
if (gShellAcpiViewHiiHandle == NULL) {
|
if (gShellAcpiViewHiiHandle == NULL) {
|
||||||
return EFI_DEVICE_ERROR;
|
return EFI_DEVICE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Install our Shell command handler
|
// Install our Shell command handler
|
||||||
ShellCommandRegisterCommandName (
|
ShellCommandRegisterCommandName (
|
||||||
L"acpiview",
|
L"acpiview",
|
||||||
@ -443,5 +453,6 @@ UefiShellAcpiViewCommandLibDestructor (
|
|||||||
if (gShellAcpiViewHiiHandle != NULL) {
|
if (gShellAcpiViewHiiHandle != NULL) {
|
||||||
HiiRemovePackages (gShellAcpiViewHiiHandle);
|
HiiRemovePackages (gShellAcpiViewHiiHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -43,51 +43,54 @@ ShellCEntryLib (
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
INTN ReturnFromMain;
|
INTN ReturnFromMain;
|
||||||
EFI_SHELL_PARAMETERS_PROTOCOL *EfiShellParametersProtocol;
|
EFI_SHELL_PARAMETERS_PROTOCOL *EfiShellParametersProtocol;
|
||||||
EFI_SHELL_INTERFACE *EfiShellInterface;
|
EFI_SHELL_INTERFACE *EfiShellInterface;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
ReturnFromMain = -1;
|
ReturnFromMain = -1;
|
||||||
EfiShellParametersProtocol = NULL;
|
EfiShellParametersProtocol = NULL;
|
||||||
EfiShellInterface = NULL;
|
EfiShellInterface = NULL;
|
||||||
|
|
||||||
Status = SystemTable->BootServices->OpenProtocol(ImageHandle,
|
Status = SystemTable->BootServices->OpenProtocol (
|
||||||
&gEfiShellParametersProtocolGuid,
|
ImageHandle,
|
||||||
(VOID **)&EfiShellParametersProtocol,
|
&gEfiShellParametersProtocolGuid,
|
||||||
ImageHandle,
|
(VOID **)&EfiShellParametersProtocol,
|
||||||
NULL,
|
ImageHandle,
|
||||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
NULL,
|
||||||
);
|
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||||
if (!EFI_ERROR(Status)) {
|
);
|
||||||
|
if (!EFI_ERROR (Status)) {
|
||||||
//
|
//
|
||||||
// use shell 2.0 interface
|
// use shell 2.0 interface
|
||||||
//
|
//
|
||||||
ReturnFromMain = ShellAppMain (
|
ReturnFromMain = ShellAppMain (
|
||||||
EfiShellParametersProtocol->Argc,
|
EfiShellParametersProtocol->Argc,
|
||||||
EfiShellParametersProtocol->Argv
|
EfiShellParametersProtocol->Argv
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
//
|
//
|
||||||
// try to get shell 1.0 interface instead.
|
// try to get shell 1.0 interface instead.
|
||||||
//
|
//
|
||||||
Status = SystemTable->BootServices->OpenProtocol(ImageHandle,
|
Status = SystemTable->BootServices->OpenProtocol (
|
||||||
&gEfiShellInterfaceGuid,
|
ImageHandle,
|
||||||
(VOID **)&EfiShellInterface,
|
&gEfiShellInterfaceGuid,
|
||||||
ImageHandle,
|
(VOID **)&EfiShellInterface,
|
||||||
NULL,
|
ImageHandle,
|
||||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
NULL,
|
||||||
);
|
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||||
if (!EFI_ERROR(Status)) {
|
);
|
||||||
|
if (!EFI_ERROR (Status)) {
|
||||||
//
|
//
|
||||||
// use shell 1.0 interface
|
// use shell 1.0 interface
|
||||||
//
|
//
|
||||||
ReturnFromMain = ShellAppMain (
|
ReturnFromMain = ShellAppMain (
|
||||||
EfiShellInterface->Argc,
|
EfiShellInterface->Argc,
|
||||||
EfiShellInterface->Argv
|
EfiShellInterface->Argv
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
ASSERT(FALSE);
|
ASSERT (FALSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ReturnFromMain;
|
return ReturnFromMain;
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -41,24 +41,24 @@
|
|||||||
#include <Library/UefiLib.h>
|
#include <Library/UefiLib.h>
|
||||||
#include <Library/OrderedCollectionLib.h>
|
#include <Library/OrderedCollectionLib.h>
|
||||||
|
|
||||||
typedef struct{
|
typedef struct {
|
||||||
LIST_ENTRY Link;
|
LIST_ENTRY Link;
|
||||||
CHAR16 *CommandString;
|
CHAR16 *CommandString;
|
||||||
SHELL_GET_MAN_FILENAME GetManFileName;
|
SHELL_GET_MAN_FILENAME GetManFileName;
|
||||||
SHELL_RUN_COMMAND CommandHandler;
|
SHELL_RUN_COMMAND CommandHandler;
|
||||||
BOOLEAN LastError;
|
BOOLEAN LastError;
|
||||||
EFI_HII_HANDLE HiiHandle;
|
EFI_HII_HANDLE HiiHandle;
|
||||||
EFI_STRING_ID ManFormatHelp;
|
EFI_STRING_ID ManFormatHelp;
|
||||||
} SHELL_COMMAND_INTERNAL_LIST_ENTRY;
|
} SHELL_COMMAND_INTERNAL_LIST_ENTRY;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
LIST_ENTRY Link;
|
LIST_ENTRY Link;
|
||||||
SCRIPT_FILE *Data;
|
SCRIPT_FILE *Data;
|
||||||
} SCRIPT_FILE_LIST;
|
} SCRIPT_FILE_LIST;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
EFI_FILE_PROTOCOL *FileHandle;
|
EFI_FILE_PROTOCOL *FileHandle;
|
||||||
CHAR16 *Path;
|
CHAR16 *Path;
|
||||||
} SHELL_COMMAND_FILE_HANDLE;
|
} SHELL_COMMAND_FILE_HANDLE;
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -72,13 +72,12 @@ typedef struct {
|
|||||||
// instead, it *aliases* the FileName or FullName field of the
|
// instead, it *aliases* the FileName or FullName field of the
|
||||||
// EFI_SHELL_FILE_INFO object that was first encountered with this name.
|
// EFI_SHELL_FILE_INFO object that was first encountered with this name.
|
||||||
//
|
//
|
||||||
CONST CHAR16 *Alias;
|
CONST CHAR16 *Alias;
|
||||||
//
|
//
|
||||||
// A list of EFI_SHELL_FILE_INFO objects whose FileName or FullName fields
|
// A list of EFI_SHELL_FILE_INFO objects whose FileName or FullName fields
|
||||||
// compare equal to Alias, according to gUnicodeCollation->StriColl().
|
// compare equal to Alias, according to gUnicodeCollation->StriColl().
|
||||||
//
|
//
|
||||||
LIST_ENTRY SameNameList;
|
LIST_ENTRY SameNameList;
|
||||||
} SHELL_SORT_UNIQUE_NAME;
|
} SHELL_SORT_UNIQUE_NAME;
|
||||||
|
|
||||||
#endif //_UEFI_COMMAND_LIB_INTERNAL_HEADER_
|
#endif //_UEFI_COMMAND_LIB_INTERNAL_HEADER_
|
||||||
|
|
||||||
|
@ -9,11 +9,11 @@
|
|||||||
|
|
||||||
#include "UefiShellDebug1CommandsLib.h"
|
#include "UefiShellDebug1CommandsLib.h"
|
||||||
|
|
||||||
STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
|
STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
|
||||||
{L"-n", TypeValue},
|
{ L"-n", TypeValue },
|
||||||
{L"-s", TypeValue},
|
{ L"-s", TypeValue },
|
||||||
{NULL, TypeMax}
|
{ NULL, TypeMax }
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
OutOfDiffPoint,
|
OutOfDiffPoint,
|
||||||
@ -25,10 +25,10 @@ typedef enum {
|
|||||||
// Buffer type, for reading both file operands in chunks.
|
// Buffer type, for reading both file operands in chunks.
|
||||||
//
|
//
|
||||||
typedef struct {
|
typedef struct {
|
||||||
UINT8 *Data; // dynamically allocated buffer
|
UINT8 *Data; // dynamically allocated buffer
|
||||||
UINTN Allocated; // the allocated size of Data
|
UINTN Allocated; // the allocated size of Data
|
||||||
UINTN Next; // next position in Data to fetch a byte at
|
UINTN Next; // next position in Data to fetch a byte at
|
||||||
UINTN Left; // number of bytes left in Data for fetching at Next
|
UINTN Left; // number of bytes left in Data for fetching at Next
|
||||||
} FILE_BUFFER;
|
} FILE_BUFFER;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -43,7 +43,7 @@ typedef struct {
|
|||||||
|
|
||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
PrintDifferentPoint(
|
PrintDifferentPoint (
|
||||||
CONST CHAR16 *FileName,
|
CONST CHAR16 *FileName,
|
||||||
CHAR16 *FileTag,
|
CHAR16 *FileTag,
|
||||||
UINT8 *Buffer,
|
UINT8 *Buffer,
|
||||||
@ -52,7 +52,7 @@ PrintDifferentPoint(
|
|||||||
UINT64 DifferentBytes
|
UINT64 DifferentBytes
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINTN Index;
|
UINTN Index;
|
||||||
|
|
||||||
ShellPrintEx (-1, -1, L"%s: %s\r\n %08x:", FileTag, FileName, Address);
|
ShellPrintEx (-1, -1, L"%s: %s\r\n %08x:", FileTag, FileName, Address);
|
||||||
|
|
||||||
@ -73,7 +73,7 @@ PrintDifferentPoint(
|
|||||||
// Print data in char-format.
|
// Print data in char-format.
|
||||||
//
|
//
|
||||||
for (Index = 0; Index < BufferSize; Index++) {
|
for (Index = 0; Index < BufferSize; Index++) {
|
||||||
if (Buffer[Index] >= 0x20 && Buffer[Index] <= 0x7E) {
|
if ((Buffer[Index] >= 0x20) && (Buffer[Index] <= 0x7E)) {
|
||||||
ShellPrintEx (-1, -1, L"%c", Buffer[Index]);
|
ShellPrintEx (-1, -1, L"%c", Buffer[Index]);
|
||||||
} else {
|
} else {
|
||||||
//
|
//
|
||||||
@ -97,7 +97,7 @@ PrintDifferentPoint(
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
FileBufferInit (
|
FileBufferInit (
|
||||||
OUT FILE_BUFFER *FileBuffer
|
OUT FILE_BUFFER *FileBuffer
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
FileBuffer->Allocated = PcdGet32 (PcdShellFileOperationSize);
|
FileBuffer->Allocated = PcdGet32 (PcdShellFileOperationSize);
|
||||||
@ -116,7 +116,7 @@ FileBufferInit (
|
|||||||
STATIC
|
STATIC
|
||||||
VOID
|
VOID
|
||||||
FileBufferUninit (
|
FileBufferUninit (
|
||||||
IN OUT FILE_BUFFER *FileBuffer
|
IN OUT FILE_BUFFER *FileBuffer
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
SHELL_FREE_NON_NULL (FileBuffer->Data);
|
SHELL_FREE_NON_NULL (FileBuffer->Data);
|
||||||
@ -154,26 +154,31 @@ FileBufferUninit (
|
|||||||
STATIC
|
STATIC
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
FileBufferReadByte (
|
FileBufferReadByte (
|
||||||
IN SHELL_FILE_HANDLE FileHandle,
|
IN SHELL_FILE_HANDLE FileHandle,
|
||||||
IN OUT FILE_BUFFER *FileBuffer,
|
IN OUT FILE_BUFFER *FileBuffer,
|
||||||
OUT UINTN *BytesRead,
|
OUT UINTN *BytesRead,
|
||||||
OUT UINT8 *Byte
|
OUT UINT8 *Byte
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINTN ReadSize;
|
UINTN ReadSize;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
if (FileBuffer->Left == 0) {
|
if (FileBuffer->Left == 0) {
|
||||||
ReadSize = FileBuffer->Allocated;
|
ReadSize = FileBuffer->Allocated;
|
||||||
Status = gEfiShellProtocol->ReadFile (FileHandle, &ReadSize,
|
Status = gEfiShellProtocol->ReadFile (
|
||||||
FileBuffer->Data);
|
FileHandle,
|
||||||
|
&ReadSize,
|
||||||
|
FileBuffer->Data
|
||||||
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ReadSize == 0) {
|
if (ReadSize == 0) {
|
||||||
*BytesRead = 0;
|
*BytesRead = 0;
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
FileBuffer->Next = 0;
|
FileBuffer->Next = 0;
|
||||||
FileBuffer->Left = ReadSize;
|
FileBuffer->Left = ReadSize;
|
||||||
}
|
}
|
||||||
@ -199,112 +204,114 @@ ShellCommandRunComp (
|
|||||||
IN EFI_SYSTEM_TABLE *SystemTable
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
LIST_ENTRY *Package;
|
LIST_ENTRY *Package;
|
||||||
CHAR16 *ProblemParam;
|
CHAR16 *ProblemParam;
|
||||||
CHAR16 *FileName1;
|
CHAR16 *FileName1;
|
||||||
CHAR16 *FileName2;
|
CHAR16 *FileName2;
|
||||||
CONST CHAR16 *TempParam;
|
CONST CHAR16 *TempParam;
|
||||||
SHELL_STATUS ShellStatus;
|
SHELL_STATUS ShellStatus;
|
||||||
SHELL_FILE_HANDLE FileHandle1;
|
SHELL_FILE_HANDLE FileHandle1;
|
||||||
SHELL_FILE_HANDLE FileHandle2;
|
SHELL_FILE_HANDLE FileHandle2;
|
||||||
UINT64 Size1;
|
UINT64 Size1;
|
||||||
UINT64 Size2;
|
UINT64 Size2;
|
||||||
UINT64 DifferentBytes;
|
UINT64 DifferentBytes;
|
||||||
UINT64 DifferentCount;
|
UINT64 DifferentCount;
|
||||||
UINT8 DiffPointNumber;
|
UINT8 DiffPointNumber;
|
||||||
UINT8 OneByteFromFile1;
|
UINT8 OneByteFromFile1;
|
||||||
UINT8 OneByteFromFile2;
|
UINT8 OneByteFromFile2;
|
||||||
UINT8 *DataFromFile1;
|
UINT8 *DataFromFile1;
|
||||||
UINT8 *DataFromFile2;
|
UINT8 *DataFromFile2;
|
||||||
FILE_BUFFER FileBuffer1;
|
FILE_BUFFER FileBuffer1;
|
||||||
FILE_BUFFER FileBuffer2;
|
FILE_BUFFER FileBuffer2;
|
||||||
UINTN InsertPosition1;
|
UINTN InsertPosition1;
|
||||||
UINTN InsertPosition2;
|
UINTN InsertPosition2;
|
||||||
UINTN DataSizeFromFile1;
|
UINTN DataSizeFromFile1;
|
||||||
UINTN DataSizeFromFile2;
|
UINTN DataSizeFromFile2;
|
||||||
UINTN TempAddress;
|
UINTN TempAddress;
|
||||||
UINTN Index;
|
UINTN Index;
|
||||||
UINTN DiffPointAddress;
|
UINTN DiffPointAddress;
|
||||||
READ_STATUS ReadStatus;
|
READ_STATUS ReadStatus;
|
||||||
|
|
||||||
ShellStatus = SHELL_SUCCESS;
|
ShellStatus = SHELL_SUCCESS;
|
||||||
Status = EFI_SUCCESS;
|
Status = EFI_SUCCESS;
|
||||||
FileName1 = NULL;
|
FileName1 = NULL;
|
||||||
FileName2 = NULL;
|
FileName2 = NULL;
|
||||||
FileHandle1 = NULL;
|
FileHandle1 = NULL;
|
||||||
FileHandle2 = NULL;
|
FileHandle2 = NULL;
|
||||||
DataFromFile1 = NULL;
|
DataFromFile1 = NULL;
|
||||||
DataFromFile2 = NULL;
|
DataFromFile2 = NULL;
|
||||||
ReadStatus = OutOfDiffPoint;
|
ReadStatus = OutOfDiffPoint;
|
||||||
DifferentCount = 10;
|
DifferentCount = 10;
|
||||||
DifferentBytes = 4;
|
DifferentBytes = 4;
|
||||||
DiffPointNumber = 0;
|
DiffPointNumber = 0;
|
||||||
InsertPosition1 = 0;
|
InsertPosition1 = 0;
|
||||||
InsertPosition2 = 0;
|
InsertPosition2 = 0;
|
||||||
TempAddress = 0;
|
TempAddress = 0;
|
||||||
DiffPointAddress = 0;
|
DiffPointAddress = 0;
|
||||||
|
|
||||||
//
|
//
|
||||||
// initialize the shell lib (we must be in non-auto-init...)
|
// initialize the shell lib (we must be in non-auto-init...)
|
||||||
//
|
//
|
||||||
Status = ShellInitialize();
|
Status = ShellInitialize ();
|
||||||
ASSERT_EFI_ERROR(Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
Status = CommandInit();
|
Status = CommandInit ();
|
||||||
ASSERT_EFI_ERROR(Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
//
|
//
|
||||||
// parse the command line
|
// parse the command line
|
||||||
//
|
//
|
||||||
Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);
|
Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);
|
||||||
if (EFI_ERROR(Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {
|
if ((Status == EFI_VOLUME_CORRUPTED) && (ProblemParam != NULL)) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, L"comp", ProblemParam);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, L"comp", ProblemParam);
|
||||||
FreePool(ProblemParam);
|
FreePool (ProblemParam);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
ASSERT(FALSE);
|
ASSERT (FALSE);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (ShellCommandLineGetCount(Package) > 3) {
|
if (ShellCommandLineGetCount (Package) > 3) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"comp");
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"comp");
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else if (ShellCommandLineGetCount(Package) < 3) {
|
} else if (ShellCommandLineGetCount (Package) < 3) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle, L"comp");
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle, L"comp");
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
TempParam = ShellCommandLineGetRawValue(Package, 1);
|
TempParam = ShellCommandLineGetRawValue (Package, 1);
|
||||||
ASSERT(TempParam != NULL);
|
ASSERT (TempParam != NULL);
|
||||||
FileName1 = ShellFindFilePath(TempParam);
|
FileName1 = ShellFindFilePath (TempParam);
|
||||||
if (FileName1 == NULL) {
|
if (FileName1 == NULL) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, L"comp", TempParam);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, L"comp", TempParam);
|
||||||
ShellStatus = SHELL_NOT_FOUND;
|
ShellStatus = SHELL_NOT_FOUND;
|
||||||
} else {
|
} else {
|
||||||
Status = ShellOpenFileByName(FileName1, &FileHandle1, EFI_FILE_MODE_READ, 0);
|
Status = ShellOpenFileByName (FileName1, &FileHandle1, EFI_FILE_MODE_READ, 0);
|
||||||
if (EFI_ERROR(Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"comp", TempParam);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"comp", TempParam);
|
||||||
ShellStatus = SHELL_NOT_FOUND;
|
ShellStatus = SHELL_NOT_FOUND;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TempParam = ShellCommandLineGetRawValue(Package, 2);
|
|
||||||
ASSERT(TempParam != NULL);
|
TempParam = ShellCommandLineGetRawValue (Package, 2);
|
||||||
FileName2 = ShellFindFilePath(TempParam);
|
ASSERT (TempParam != NULL);
|
||||||
|
FileName2 = ShellFindFilePath (TempParam);
|
||||||
if (FileName2 == NULL) {
|
if (FileName2 == NULL) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, L"comp", TempParam);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_FILE_FIND_FAIL), gShellDebug1HiiHandle, L"comp", TempParam);
|
||||||
ShellStatus = SHELL_NOT_FOUND;
|
ShellStatus = SHELL_NOT_FOUND;
|
||||||
} else {
|
} else {
|
||||||
Status = ShellOpenFileByName(FileName2, &FileHandle2, EFI_FILE_MODE_READ, 0);
|
Status = ShellOpenFileByName (FileName2, &FileHandle2, EFI_FILE_MODE_READ, 0);
|
||||||
if (EFI_ERROR(Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"comp", TempParam);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"comp", TempParam);
|
||||||
ShellStatus = SHELL_NOT_FOUND;
|
ShellStatus = SHELL_NOT_FOUND;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ShellStatus == SHELL_SUCCESS) {
|
if (ShellStatus == SHELL_SUCCESS) {
|
||||||
Status = gEfiShellProtocol->GetFileSize(FileHandle1, &Size1);
|
Status = gEfiShellProtocol->GetFileSize (FileHandle1, &Size1);
|
||||||
ASSERT_EFI_ERROR(Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
Status = gEfiShellProtocol->GetFileSize(FileHandle2, &Size2);
|
Status = gEfiShellProtocol->GetFileSize (FileHandle2, &Size2);
|
||||||
ASSERT_EFI_ERROR(Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
if (ShellCommandLineGetFlag (Package, L"-n")) {
|
if (ShellCommandLineGetFlag (Package, L"-n")) {
|
||||||
TempParam = ShellCommandLineGetValue (Package, L"-n");
|
TempParam = ShellCommandLineGetValue (Package, L"-n");
|
||||||
@ -316,7 +323,7 @@ ShellCommandRunComp (
|
|||||||
DifferentCount = MAX_UINTN;
|
DifferentCount = MAX_UINTN;
|
||||||
} else {
|
} else {
|
||||||
Status = ShellConvertStringToUint64 (TempParam, &DifferentCount, FALSE, TRUE);
|
Status = ShellConvertStringToUint64 (TempParam, &DifferentCount, FALSE, TRUE);
|
||||||
if (EFI_ERROR(Status) || DifferentCount == 0) {
|
if (EFI_ERROR (Status) || (DifferentCount == 0)) {
|
||||||
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM_VAL), gShellDebug1HiiHandle, L"comp", TempParam, L"-n");
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM_VAL), gShellDebug1HiiHandle, L"comp", TempParam, L"-n");
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
@ -331,7 +338,7 @@ ShellCommandRunComp (
|
|||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
Status = ShellConvertStringToUint64 (TempParam, &DifferentBytes, FALSE, TRUE);
|
Status = ShellConvertStringToUint64 (TempParam, &DifferentBytes, FALSE, TRUE);
|
||||||
if (EFI_ERROR(Status) || DifferentBytes == 0) {
|
if (EFI_ERROR (Status) || (DifferentBytes == 0)) {
|
||||||
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM_VAL), gShellDebug1HiiHandle, L"comp", TempParam, L"-s");
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM_VAL), gShellDebug1HiiHandle, L"comp", TempParam, L"-s");
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
@ -348,8 +355,9 @@ ShellCommandRunComp (
|
|||||||
DataFromFile2 = AllocateZeroPool ((UINTN)DifferentBytes);
|
DataFromFile2 = AllocateZeroPool ((UINTN)DifferentBytes);
|
||||||
FileBufferInit (&FileBuffer1);
|
FileBufferInit (&FileBuffer1);
|
||||||
FileBufferInit (&FileBuffer2);
|
FileBufferInit (&FileBuffer2);
|
||||||
if (DataFromFile1 == NULL || DataFromFile2 == NULL ||
|
if ((DataFromFile1 == NULL) || (DataFromFile2 == NULL) ||
|
||||||
FileBuffer1.Data == NULL || FileBuffer2.Data == NULL) {
|
(FileBuffer1.Data == NULL) || (FileBuffer2.Data == NULL))
|
||||||
|
{
|
||||||
ShellStatus = SHELL_OUT_OF_RESOURCES;
|
ShellStatus = SHELL_OUT_OF_RESOURCES;
|
||||||
SHELL_FREE_NON_NULL (DataFromFile1);
|
SHELL_FREE_NON_NULL (DataFromFile1);
|
||||||
SHELL_FREE_NON_NULL (DataFromFile2);
|
SHELL_FREE_NON_NULL (DataFromFile2);
|
||||||
@ -362,13 +370,21 @@ ShellCommandRunComp (
|
|||||||
while (DiffPointNumber < DifferentCount) {
|
while (DiffPointNumber < DifferentCount) {
|
||||||
DataSizeFromFile1 = 1;
|
DataSizeFromFile1 = 1;
|
||||||
DataSizeFromFile2 = 1;
|
DataSizeFromFile2 = 1;
|
||||||
OneByteFromFile1 = 0;
|
OneByteFromFile1 = 0;
|
||||||
OneByteFromFile2 = 0;
|
OneByteFromFile2 = 0;
|
||||||
Status = FileBufferReadByte (FileHandle1, &FileBuffer1,
|
Status = FileBufferReadByte (
|
||||||
&DataSizeFromFile1, &OneByteFromFile1);
|
FileHandle1,
|
||||||
|
&FileBuffer1,
|
||||||
|
&DataSizeFromFile1,
|
||||||
|
&OneByteFromFile1
|
||||||
|
);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
Status = FileBufferReadByte (FileHandle2, &FileBuffer2,
|
Status = FileBufferReadByte (
|
||||||
&DataSizeFromFile2, &OneByteFromFile2);
|
FileHandle2,
|
||||||
|
&FileBuffer2,
|
||||||
|
&DataSizeFromFile2,
|
||||||
|
&OneByteFromFile2
|
||||||
|
);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
TempAddress++;
|
TempAddress++;
|
||||||
@ -378,19 +394,21 @@ ShellCommandRunComp (
|
|||||||
// 2.If no more char in File1 or File2, The ReadStatus is InPrevDiffPoint forever.
|
// 2.If no more char in File1 or File2, The ReadStatus is InPrevDiffPoint forever.
|
||||||
// So the previous different point is the last one, then break the while block.
|
// So the previous different point is the last one, then break the while block.
|
||||||
//
|
//
|
||||||
if ( (DataSizeFromFile1 == 0 && InsertPosition1 == 0 && DataSizeFromFile2 == 0 && InsertPosition2 == 0) ||
|
if (((DataSizeFromFile1 == 0) && (InsertPosition1 == 0) && (DataSizeFromFile2 == 0) && (InsertPosition2 == 0)) ||
|
||||||
(ReadStatus == InPrevDiffPoint && (DataSizeFromFile1 == 0 || DataSizeFromFile2 == 0))
|
((ReadStatus == InPrevDiffPoint) && ((DataSizeFromFile1 == 0) || (DataSizeFromFile2 == 0)))
|
||||||
) {
|
)
|
||||||
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ReadStatus == OutOfDiffPoint) {
|
if (ReadStatus == OutOfDiffPoint) {
|
||||||
if (OneByteFromFile1 != OneByteFromFile2) {
|
if (OneByteFromFile1 != OneByteFromFile2) {
|
||||||
ReadStatus = InDiffPoint;
|
ReadStatus = InDiffPoint;
|
||||||
DiffPointAddress = TempAddress;
|
DiffPointAddress = TempAddress;
|
||||||
if (DataSizeFromFile1 == 1) {
|
if (DataSizeFromFile1 == 1) {
|
||||||
DataFromFile1[InsertPosition1++] = OneByteFromFile1;
|
DataFromFile1[InsertPosition1++] = OneByteFromFile1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DataSizeFromFile2 == 1) {
|
if (DataSizeFromFile2 == 1) {
|
||||||
DataFromFile2[InsertPosition2++] = OneByteFromFile2;
|
DataFromFile2[InsertPosition2++] = OneByteFromFile2;
|
||||||
}
|
}
|
||||||
@ -399,6 +417,7 @@ ShellCommandRunComp (
|
|||||||
if (DataSizeFromFile1 == 1) {
|
if (DataSizeFromFile1 == 1) {
|
||||||
DataFromFile1[InsertPosition1++] = OneByteFromFile1;
|
DataFromFile1[InsertPosition1++] = OneByteFromFile1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (DataSizeFromFile2 == 1) {
|
if (DataSizeFromFile2 == 1) {
|
||||||
DataFromFile2[InsertPosition2++] = OneByteFromFile2;
|
DataFromFile2[InsertPosition2++] = OneByteFromFile2;
|
||||||
}
|
}
|
||||||
@ -411,11 +430,11 @@ ShellCommandRunComp (
|
|||||||
//
|
//
|
||||||
// ReadStatus should be always equal InDiffPoint.
|
// ReadStatus should be always equal InDiffPoint.
|
||||||
//
|
//
|
||||||
if ( InsertPosition1 == DifferentBytes ||
|
if ((InsertPosition1 == DifferentBytes) ||
|
||||||
InsertPosition2 == DifferentBytes ||
|
(InsertPosition2 == DifferentBytes) ||
|
||||||
(DataSizeFromFile1 == 0 && DataSizeFromFile2 == 0)
|
((DataSizeFromFile1 == 0) && (DataSizeFromFile2 == 0))
|
||||||
) {
|
)
|
||||||
|
{
|
||||||
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_COMP_DIFFERENCE_POINT), gShellDebug1HiiHandle, ++DiffPointNumber);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_COMP_DIFFERENCE_POINT), gShellDebug1HiiHandle, ++DiffPointNumber);
|
||||||
PrintDifferentPoint (FileName1, L"File1", DataFromFile1, InsertPosition1, DiffPointAddress, DifferentBytes);
|
PrintDifferentPoint (FileName1, L"File1", DataFromFile1, InsertPosition1, DiffPointAddress, DifferentBytes);
|
||||||
PrintDifferentPoint (FileName2, L"File2", DataFromFile2, InsertPosition2, DiffPointAddress, DifferentBytes);
|
PrintDifferentPoint (FileName2, L"File2", DataFromFile2, InsertPosition2, DiffPointAddress, DifferentBytes);
|
||||||
@ -423,7 +442,7 @@ ShellCommandRunComp (
|
|||||||
//
|
//
|
||||||
// One of two buffuers is empty, it means this is the last different point.
|
// One of two buffuers is empty, it means this is the last different point.
|
||||||
//
|
//
|
||||||
if (InsertPosition1 == 0 || InsertPosition2 == 0) {
|
if ((InsertPosition1 == 0) || (InsertPosition2 == 0)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -438,9 +457,9 @@ ShellCommandRunComp (
|
|||||||
//
|
//
|
||||||
// Try to find a new different point in the rest of DataFromFile.
|
// Try to find a new different point in the rest of DataFromFile.
|
||||||
//
|
//
|
||||||
for (; Index < MAX (InsertPosition1,InsertPosition2); Index++) {
|
for ( ; Index < MAX (InsertPosition1, InsertPosition2); Index++) {
|
||||||
if (DataFromFile1[Index] != DataFromFile2[Index]) {
|
if (DataFromFile1[Index] != DataFromFile2[Index]) {
|
||||||
ReadStatus = InDiffPoint;
|
ReadStatus = InDiffPoint;
|
||||||
DiffPointAddress += Index;
|
DiffPointAddress += Index;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -469,24 +488,26 @@ ShellCommandRunComp (
|
|||||||
FileBufferUninit (&FileBuffer2);
|
FileBufferUninit (&FileBuffer2);
|
||||||
|
|
||||||
if (DiffPointNumber == 0) {
|
if (DiffPointNumber == 0) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_COMP_FOOTER_PASS), gShellDebug1HiiHandle);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_COMP_FOOTER_PASS), gShellDebug1HiiHandle);
|
||||||
} else {
|
} else {
|
||||||
ShellStatus = SHELL_NOT_EQUAL;
|
ShellStatus = SHELL_NOT_EQUAL;
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_COMP_FOOTER_FAIL), gShellDebug1HiiHandle);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_COMP_FOOTER_FAIL), gShellDebug1HiiHandle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ShellCommandLineFreeVarList (Package);
|
ShellCommandLineFreeVarList (Package);
|
||||||
}
|
}
|
||||||
SHELL_FREE_NON_NULL(FileName1);
|
|
||||||
SHELL_FREE_NON_NULL(FileName2);
|
SHELL_FREE_NON_NULL (FileName1);
|
||||||
|
SHELL_FREE_NON_NULL (FileName2);
|
||||||
|
|
||||||
if (FileHandle1 != NULL) {
|
if (FileHandle1 != NULL) {
|
||||||
gEfiShellProtocol->CloseFile(FileHandle1);
|
gEfiShellProtocol->CloseFile (FileHandle1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FileHandle2 != NULL) {
|
if (FileHandle2 != NULL) {
|
||||||
gEfiShellProtocol->CloseFile(FileHandle2);
|
gEfiShellProtocol->CloseFile (FileHandle2);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (ShellStatus);
|
return (ShellStatus);
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -30,4 +30,3 @@ Compress (
|
|||||||
);
|
);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -20,49 +20,49 @@
|
|||||||
@retval SHELL_SUCCESS The display was successful.
|
@retval SHELL_SUCCESS The display was successful.
|
||||||
**/
|
**/
|
||||||
SHELL_STATUS
|
SHELL_STATUS
|
||||||
DisplayTheBlocks(
|
DisplayTheBlocks (
|
||||||
IN CONST EFI_DEVICE_PATH_PROTOCOL *DevPath,
|
IN CONST EFI_DEVICE_PATH_PROTOCOL *DevPath,
|
||||||
IN CONST UINT64 Lba,
|
IN CONST UINT64 Lba,
|
||||||
IN CONST UINT8 BlockCount
|
IN CONST UINT8 BlockCount
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_BLOCK_IO_PROTOCOL *BlockIo;
|
EFI_BLOCK_IO_PROTOCOL *BlockIo;
|
||||||
EFI_HANDLE BlockIoHandle;
|
EFI_HANDLE BlockIoHandle;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
SHELL_STATUS ShellStatus;
|
SHELL_STATUS ShellStatus;
|
||||||
UINT8 *Buffer;
|
UINT8 *Buffer;
|
||||||
UINT8 *OriginalBuffer;
|
UINT8 *OriginalBuffer;
|
||||||
UINTN BufferSize;
|
UINTN BufferSize;
|
||||||
|
|
||||||
ShellStatus = SHELL_SUCCESS;
|
ShellStatus = SHELL_SUCCESS;
|
||||||
|
|
||||||
Status = gBS->LocateDevicePath(&gEfiBlockIoProtocolGuid, (EFI_DEVICE_PATH_PROTOCOL **)&DevPath, &BlockIoHandle);
|
Status = gBS->LocateDevicePath (&gEfiBlockIoProtocolGuid, (EFI_DEVICE_PATH_PROTOCOL **)&DevPath, &BlockIoHandle);
|
||||||
if (EFI_ERROR(Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return (SHELL_NOT_FOUND);
|
return (SHELL_NOT_FOUND);
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = gBS->OpenProtocol(BlockIoHandle, &gEfiBlockIoProtocolGuid, (VOID**)&BlockIo, gImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL);
|
Status = gBS->OpenProtocol (BlockIoHandle, &gEfiBlockIoProtocolGuid, (VOID **)&BlockIo, gImageHandle, NULL, EFI_OPEN_PROTOCOL_GET_PROTOCOL);
|
||||||
if (EFI_ERROR(Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return (SHELL_NOT_FOUND);
|
return (SHELL_NOT_FOUND);
|
||||||
}
|
}
|
||||||
|
|
||||||
BufferSize = BlockIo->Media->BlockSize * BlockCount;
|
BufferSize = BlockIo->Media->BlockSize * BlockCount;
|
||||||
if(BlockIo->Media->IoAlign == 0) {
|
if (BlockIo->Media->IoAlign == 0) {
|
||||||
BlockIo->Media->IoAlign = 1;
|
BlockIo->Media->IoAlign = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (BufferSize > 0) {
|
if (BufferSize > 0) {
|
||||||
OriginalBuffer = AllocateZeroPool(BufferSize + BlockIo->Media->IoAlign);
|
OriginalBuffer = AllocateZeroPool (BufferSize + BlockIo->Media->IoAlign);
|
||||||
Buffer = ALIGN_POINTER (OriginalBuffer,BlockIo->Media->IoAlign);
|
Buffer = ALIGN_POINTER (OriginalBuffer, BlockIo->Media->IoAlign);
|
||||||
} else {
|
} else {
|
||||||
ShellPrintEx(-1,-1,L" BlockSize: 0x%08x, BlockCount: 0x%08x\r\n", BlockIo->Media->BlockSize, BlockCount);
|
ShellPrintEx (-1, -1, L" BlockSize: 0x%08x, BlockCount: 0x%08x\r\n", BlockIo->Media->BlockSize, BlockCount);
|
||||||
OriginalBuffer = NULL;
|
OriginalBuffer = NULL;
|
||||||
Buffer = NULL;
|
Buffer = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = BlockIo->ReadBlocks(BlockIo, BlockIo->Media->MediaId, Lba, BufferSize, Buffer);
|
Status = BlockIo->ReadBlocks (BlockIo, BlockIo->Media->MediaId, Lba, BufferSize, Buffer);
|
||||||
if (!EFI_ERROR(Status) && Buffer != NULL) {
|
if (!EFI_ERROR (Status) && (Buffer != NULL)) {
|
||||||
ShellPrintHiiEx(
|
ShellPrintHiiEx (
|
||||||
-1,
|
-1,
|
||||||
-1,
|
-1,
|
||||||
NULL,
|
NULL,
|
||||||
@ -73,9 +73,9 @@ DisplayTheBlocks(
|
|||||||
BlockIo
|
BlockIo
|
||||||
);
|
);
|
||||||
|
|
||||||
DumpHex(2,0,BufferSize,Buffer);
|
DumpHex (2, 0, BufferSize, Buffer);
|
||||||
} else {
|
} else {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_FILE_READ_FAIL), gShellDebug1HiiHandle, L"dblk", L"BlockIo");
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_FILE_READ_FAIL), gShellDebug1HiiHandle, L"dblk", L"BlockIo");
|
||||||
ShellStatus = SHELL_DEVICE_ERROR;
|
ShellStatus = SHELL_DEVICE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ DisplayTheBlocks(
|
|||||||
FreePool (OriginalBuffer);
|
FreePool (OriginalBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
gBS->CloseProtocol(BlockIoHandle, &gEfiBlockIoProtocolGuid, gImageHandle, NULL);
|
gBS->CloseProtocol (BlockIoHandle, &gEfiBlockIoProtocolGuid, gImageHandle, NULL);
|
||||||
return (ShellStatus);
|
return (ShellStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,67 +111,69 @@ ShellCommandRunDblk (
|
|||||||
UINT64 BlockCount;
|
UINT64 BlockCount;
|
||||||
EFI_DEVICE_PATH_PROTOCOL *DevPath;
|
EFI_DEVICE_PATH_PROTOCOL *DevPath;
|
||||||
|
|
||||||
ShellStatus = SHELL_SUCCESS;
|
ShellStatus = SHELL_SUCCESS;
|
||||||
Status = EFI_SUCCESS;
|
Status = EFI_SUCCESS;
|
||||||
|
|
||||||
//
|
//
|
||||||
// initialize the shell lib (we must be in non-auto-init...)
|
// initialize the shell lib (we must be in non-auto-init...)
|
||||||
//
|
//
|
||||||
Status = ShellInitialize();
|
Status = ShellInitialize ();
|
||||||
ASSERT_EFI_ERROR(Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
Status = CommandInit();
|
Status = CommandInit ();
|
||||||
ASSERT_EFI_ERROR(Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
//
|
//
|
||||||
// parse the command line
|
// parse the command line
|
||||||
//
|
//
|
||||||
Status = ShellCommandLineParse (EmptyParamList, &Package, &ProblemParam, TRUE);
|
Status = ShellCommandLineParse (EmptyParamList, &Package, &ProblemParam, TRUE);
|
||||||
if (EFI_ERROR(Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {
|
if ((Status == EFI_VOLUME_CORRUPTED) && (ProblemParam != NULL)) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, L"dblk", ProblemParam);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, L"dblk", ProblemParam);
|
||||||
FreePool(ProblemParam);
|
FreePool (ProblemParam);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
ASSERT(FALSE);
|
ASSERT (FALSE);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (ShellCommandLineGetCount(Package) > 4) {
|
if (ShellCommandLineGetCount (Package) > 4) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"dblk");
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"dblk");
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else if (ShellCommandLineGetCount(Package) < 2) {
|
} else if (ShellCommandLineGetCount (Package) < 2) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle, L"dblk");
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_FEW), gShellDebug1HiiHandle, L"dblk");
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
//
|
//
|
||||||
// Parse the params
|
// Parse the params
|
||||||
//
|
//
|
||||||
BlockName = ShellCommandLineGetRawValue(Package, 1);
|
BlockName = ShellCommandLineGetRawValue (Package, 1);
|
||||||
LbaString = ShellCommandLineGetRawValue(Package, 2);
|
LbaString = ShellCommandLineGetRawValue (Package, 2);
|
||||||
BlockCountString = ShellCommandLineGetRawValue(Package, 3);
|
BlockCountString = ShellCommandLineGetRawValue (Package, 3);
|
||||||
|
|
||||||
if (LbaString == NULL) {
|
if (LbaString == NULL) {
|
||||||
Lba = 0;
|
Lba = 0;
|
||||||
} else {
|
} else {
|
||||||
if (!ShellIsHexOrDecimalNumber(LbaString, TRUE, FALSE)) {
|
if (!ShellIsHexOrDecimalNumber (LbaString, TRUE, FALSE)) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"dblk", LbaString);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"dblk", LbaString);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
ShellConvertStringToUint64(LbaString, &Lba, TRUE, FALSE);
|
|
||||||
|
ShellConvertStringToUint64 (LbaString, &Lba, TRUE, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (BlockCountString == NULL) {
|
if (BlockCountString == NULL) {
|
||||||
BlockCount = 1;
|
BlockCount = 1;
|
||||||
} else {
|
} else {
|
||||||
if (!ShellIsHexOrDecimalNumber(BlockCountString, TRUE, FALSE)) {
|
if (!ShellIsHexOrDecimalNumber (BlockCountString, TRUE, FALSE)) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"dblk", BlockCountString);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"dblk", BlockCountString);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
ShellConvertStringToUint64(BlockCountString, &BlockCount, TRUE, FALSE);
|
|
||||||
|
ShellConvertStringToUint64 (BlockCountString, &BlockCount, TRUE, FALSE);
|
||||||
if (BlockCount > 0x10) {
|
if (BlockCount > 0x10) {
|
||||||
BlockCount = 0x10;
|
BlockCount = 0x10;
|
||||||
} else if (BlockCount == 0) {
|
} else if (BlockCount == 0) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"dblk", BlockCountString);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"dblk", BlockCountString);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -180,16 +182,16 @@ ShellCommandRunDblk (
|
|||||||
//
|
//
|
||||||
// do the work if we have a valid block identifier
|
// do the work if we have a valid block identifier
|
||||||
//
|
//
|
||||||
if (gEfiShellProtocol->GetDevicePathFromMap(BlockName) == NULL) {
|
if (gEfiShellProtocol->GetDevicePathFromMap (BlockName) == NULL) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"dblk", BlockName);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"dblk", BlockName);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
DevPath = (EFI_DEVICE_PATH_PROTOCOL*)gEfiShellProtocol->GetDevicePathFromMap(BlockName);
|
DevPath = (EFI_DEVICE_PATH_PROTOCOL *)gEfiShellProtocol->GetDevicePathFromMap (BlockName);
|
||||||
if (gBS->LocateDevicePath(&gEfiBlockIoProtocolGuid, &DevPath, NULL) == EFI_NOT_FOUND) {
|
if (gBS->LocateDevicePath (&gEfiBlockIoProtocolGuid, &DevPath, NULL) == EFI_NOT_FOUND) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_MAP_PROTOCOL), gShellDebug1HiiHandle, L"dblk", BlockName, L"BlockIo");
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_MAP_PROTOCOL), gShellDebug1HiiHandle, L"dblk", BlockName, L"BlockIo");
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
ShellStatus = DisplayTheBlocks(gEfiShellProtocol->GetDevicePathFromMap(BlockName), Lba, (UINT8)BlockCount);
|
ShellStatus = DisplayTheBlocks (gEfiShellProtocol->GetDevicePathFromMap (BlockName), Lba, (UINT8)BlockCount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -197,5 +199,6 @@ ShellCommandRunDblk (
|
|||||||
|
|
||||||
ShellCommandLineFreeVarList (Package);
|
ShellCommandLineFreeVarList (Package);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (ShellStatus);
|
return (ShellStatus);
|
||||||
}
|
}
|
||||||
|
@ -24,13 +24,14 @@
|
|||||||
@return A printable character representing Char.
|
@return A printable character representing Char.
|
||||||
**/
|
**/
|
||||||
CHAR16
|
CHAR16
|
||||||
MakePrintable(
|
MakePrintable (
|
||||||
IN CONST CHAR16 Char
|
IN CONST CHAR16 Char
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if ((Char < 0x20 && Char > 0)||(Char > 126)) {
|
if (((Char < 0x20) && (Char > 0)) || (Char > 126)) {
|
||||||
return (L'?');
|
return (L'?');
|
||||||
}
|
}
|
||||||
|
|
||||||
return (Char);
|
return (Char);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,45 +42,46 @@ MakePrintable(
|
|||||||
@param[in] Size The length of memory to display.
|
@param[in] Size The length of memory to display.
|
||||||
**/
|
**/
|
||||||
SHELL_STATUS
|
SHELL_STATUS
|
||||||
DisplayMmioMemory(
|
DisplayMmioMemory (
|
||||||
IN CONST VOID *Address,
|
IN CONST VOID *Address,
|
||||||
IN CONST UINTN Size
|
IN CONST UINTN Size
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRbIo;
|
EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRbIo;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
VOID *Buffer;
|
VOID *Buffer;
|
||||||
SHELL_STATUS ShellStatus;
|
SHELL_STATUS ShellStatus;
|
||||||
|
|
||||||
ShellStatus = SHELL_SUCCESS;
|
ShellStatus = SHELL_SUCCESS;
|
||||||
|
|
||||||
Status = gBS->LocateProtocol(&gEfiPciRootBridgeIoProtocolGuid, NULL, (VOID**)&PciRbIo);
|
Status = gBS->LocateProtocol (&gEfiPciRootBridgeIoProtocolGuid, NULL, (VOID **)&PciRbIo);
|
||||||
if (EFI_ERROR(Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PCIRBIO_NF), gShellDebug1HiiHandle, L"dmem");
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PCIRBIO_NF), gShellDebug1HiiHandle, L"dmem");
|
||||||
return (SHELL_NOT_FOUND);
|
return (SHELL_NOT_FOUND);
|
||||||
}
|
}
|
||||||
Buffer = AllocateZeroPool(Size);
|
|
||||||
|
Buffer = AllocateZeroPool (Size);
|
||||||
if (Buffer == NULL) {
|
if (Buffer == NULL) {
|
||||||
return SHELL_OUT_OF_RESOURCES;
|
return SHELL_OUT_OF_RESOURCES;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = PciRbIo->Mem.Read(PciRbIo, EfiPciWidthUint8, (UINT64)(UINTN)Address, Size, Buffer);
|
Status = PciRbIo->Mem.Read (PciRbIo, EfiPciWidthUint8, (UINT64)(UINTN)Address, Size, Buffer);
|
||||||
if (EFI_ERROR(Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PCIRBIO_ER), gShellDebug1HiiHandle, L"dmem");
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PCIRBIO_ER), gShellDebug1HiiHandle, L"dmem");
|
||||||
ShellStatus = SHELL_NOT_FOUND;
|
ShellStatus = SHELL_NOT_FOUND;
|
||||||
} else {
|
} else {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DMEM_MMIO_HEADER_ROW), gShellDebug1HiiHandle, (UINT64)(UINTN)Address, Size);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMEM_MMIO_HEADER_ROW), gShellDebug1HiiHandle, (UINT64)(UINTN)Address, Size);
|
||||||
DumpHex(2, (UINTN)Address, Size, Buffer);
|
DumpHex (2, (UINTN)Address, Size, Buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
FreePool(Buffer);
|
FreePool (Buffer);
|
||||||
return (ShellStatus);
|
return (ShellStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
|
STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
|
||||||
{L"-mmio", TypeFlag},
|
{ L"-mmio", TypeFlag },
|
||||||
{NULL, TypeMax}
|
{ NULL, TypeMax }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Function for 'dmem' command.
|
Function for 'dmem' command.
|
||||||
@ -94,66 +96,67 @@ ShellCommandRunDmem (
|
|||||||
IN EFI_SYSTEM_TABLE *SystemTable
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
LIST_ENTRY *Package;
|
LIST_ENTRY *Package;
|
||||||
CHAR16 *ProblemParam;
|
CHAR16 *ProblemParam;
|
||||||
SHELL_STATUS ShellStatus;
|
SHELL_STATUS ShellStatus;
|
||||||
VOID *Address;
|
VOID *Address;
|
||||||
UINT64 Size;
|
UINT64 Size;
|
||||||
CONST CHAR16 *Temp1;
|
CONST CHAR16 *Temp1;
|
||||||
UINT64 AcpiTableAddress;
|
UINT64 AcpiTableAddress;
|
||||||
UINT64 Acpi20TableAddress;
|
UINT64 Acpi20TableAddress;
|
||||||
UINT64 SalTableAddress;
|
UINT64 SalTableAddress;
|
||||||
UINT64 SmbiosTableAddress;
|
UINT64 SmbiosTableAddress;
|
||||||
UINT64 MpsTableAddress;
|
UINT64 MpsTableAddress;
|
||||||
UINTN TableWalker;
|
UINTN TableWalker;
|
||||||
|
|
||||||
ShellStatus = SHELL_SUCCESS;
|
ShellStatus = SHELL_SUCCESS;
|
||||||
Status = EFI_SUCCESS;
|
Status = EFI_SUCCESS;
|
||||||
Address = NULL;
|
Address = NULL;
|
||||||
Size = 0;
|
Size = 0;
|
||||||
|
|
||||||
//
|
//
|
||||||
// initialize the shell lib (we must be in non-auto-init...)
|
// initialize the shell lib (we must be in non-auto-init...)
|
||||||
//
|
//
|
||||||
Status = ShellInitialize();
|
Status = ShellInitialize ();
|
||||||
ASSERT_EFI_ERROR(Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
Status = CommandInit();
|
Status = CommandInit ();
|
||||||
ASSERT_EFI_ERROR(Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
//
|
//
|
||||||
// parse the command line
|
// parse the command line
|
||||||
//
|
//
|
||||||
Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);
|
Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);
|
||||||
if (EFI_ERROR(Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {
|
if ((Status == EFI_VOLUME_CORRUPTED) && (ProblemParam != NULL)) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, L"dmem", ProblemParam);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, L"dmem", ProblemParam);
|
||||||
FreePool(ProblemParam);
|
FreePool (ProblemParam);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
ASSERT(FALSE);
|
ASSERT (FALSE);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (ShellCommandLineGetCount(Package) > 3) {
|
if (ShellCommandLineGetCount (Package) > 3) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"dmem");
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"dmem");
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
Temp1 = ShellCommandLineGetRawValue(Package, 1);
|
Temp1 = ShellCommandLineGetRawValue (Package, 1);
|
||||||
if (Temp1 == NULL) {
|
if (Temp1 == NULL) {
|
||||||
Address = gST;
|
Address = gST;
|
||||||
Size = sizeof (*gST);
|
Size = sizeof (*gST);
|
||||||
} else {
|
} else {
|
||||||
if (!ShellIsHexOrDecimalNumber(Temp1, TRUE, FALSE) || EFI_ERROR(ShellConvertStringToUint64(Temp1, (UINT64*)&Address, TRUE, FALSE))) {
|
if (!ShellIsHexOrDecimalNumber (Temp1, TRUE, FALSE) || EFI_ERROR (ShellConvertStringToUint64 (Temp1, (UINT64 *)&Address, TRUE, FALSE))) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"dmem", Temp1);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"dmem", Temp1);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
Temp1 = ShellCommandLineGetRawValue(Package, 2);
|
|
||||||
|
Temp1 = ShellCommandLineGetRawValue (Package, 2);
|
||||||
if (Temp1 == NULL) {
|
if (Temp1 == NULL) {
|
||||||
Size = 512;
|
Size = 512;
|
||||||
} else {
|
} else {
|
||||||
if (!ShellIsHexOrDecimalNumber(Temp1, FALSE, FALSE) || EFI_ERROR(ShellConvertStringToUint64(Temp1, &Size, TRUE, FALSE))) {
|
if (!ShellIsHexOrDecimalNumber (Temp1, FALSE, FALSE) || EFI_ERROR (ShellConvertStringToUint64 (Temp1, &Size, TRUE, FALSE))) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"dmem", Temp1);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"dmem", Temp1);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -161,39 +164,48 @@ ShellCommandRunDmem (
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ShellStatus == SHELL_SUCCESS) {
|
if (ShellStatus == SHELL_SUCCESS) {
|
||||||
if (!ShellCommandLineGetFlag(Package, L"-mmio")) {
|
if (!ShellCommandLineGetFlag (Package, L"-mmio")) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DMEM_HEADER_ROW), gShellDebug1HiiHandle, (UINT64)(UINTN)Address, Size);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMEM_HEADER_ROW), gShellDebug1HiiHandle, (UINT64)(UINTN)Address, Size);
|
||||||
DumpHex(2, (UINTN)Address, (UINTN)Size, Address);
|
DumpHex (2, (UINTN)Address, (UINTN)Size, Address);
|
||||||
if (Address == (VOID*)gST) {
|
if (Address == (VOID *)gST) {
|
||||||
Acpi20TableAddress = 0;
|
Acpi20TableAddress = 0;
|
||||||
AcpiTableAddress = 0;
|
AcpiTableAddress = 0;
|
||||||
SalTableAddress = 0;
|
SalTableAddress = 0;
|
||||||
SmbiosTableAddress = 0;
|
SmbiosTableAddress = 0;
|
||||||
MpsTableAddress = 0;
|
MpsTableAddress = 0;
|
||||||
for (TableWalker = 0 ; TableWalker < gST->NumberOfTableEntries ; TableWalker++) {
|
for (TableWalker = 0; TableWalker < gST->NumberOfTableEntries; TableWalker++) {
|
||||||
if (CompareGuid(&gST->ConfigurationTable[TableWalker].VendorGuid, &gEfiAcpi20TableGuid)) {
|
if (CompareGuid (&gST->ConfigurationTable[TableWalker].VendorGuid, &gEfiAcpi20TableGuid)) {
|
||||||
Acpi20TableAddress = (UINT64)(UINTN)gST->ConfigurationTable[TableWalker].VendorTable;
|
Acpi20TableAddress = (UINT64)(UINTN)gST->ConfigurationTable[TableWalker].VendorTable;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (CompareGuid(&gST->ConfigurationTable[TableWalker].VendorGuid, &gEfiAcpi10TableGuid)) {
|
|
||||||
|
if (CompareGuid (&gST->ConfigurationTable[TableWalker].VendorGuid, &gEfiAcpi10TableGuid)) {
|
||||||
AcpiTableAddress = (UINT64)(UINTN)gST->ConfigurationTable[TableWalker].VendorTable;
|
AcpiTableAddress = (UINT64)(UINTN)gST->ConfigurationTable[TableWalker].VendorTable;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (CompareGuid(&gST->ConfigurationTable[TableWalker].VendorGuid, &gEfiSmbiosTableGuid)) {
|
|
||||||
|
if (CompareGuid (&gST->ConfigurationTable[TableWalker].VendorGuid, &gEfiSmbiosTableGuid)) {
|
||||||
SmbiosTableAddress = (UINT64)(UINTN)gST->ConfigurationTable[TableWalker].VendorTable;
|
SmbiosTableAddress = (UINT64)(UINTN)gST->ConfigurationTable[TableWalker].VendorTable;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CompareGuid (&gST->ConfigurationTable[TableWalker].VendorGuid, &gEfiSmbios3TableGuid)) {
|
if (CompareGuid (&gST->ConfigurationTable[TableWalker].VendorGuid, &gEfiSmbios3TableGuid)) {
|
||||||
SmbiosTableAddress = (UINT64) (UINTN) gST->ConfigurationTable[TableWalker].VendorTable;
|
SmbiosTableAddress = (UINT64)(UINTN)gST->ConfigurationTable[TableWalker].VendorTable;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (CompareGuid(&gST->ConfigurationTable[TableWalker].VendorGuid, &gEfiMpsTableGuid)) {
|
|
||||||
|
if (CompareGuid (&gST->ConfigurationTable[TableWalker].VendorGuid, &gEfiMpsTableGuid)) {
|
||||||
MpsTableAddress = (UINT64)(UINTN)gST->ConfigurationTable[TableWalker].VendorTable;
|
MpsTableAddress = (UINT64)(UINTN)gST->ConfigurationTable[TableWalker].VendorTable;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DMEM_SYSTEM_TABLE), gShellDebug1HiiHandle,
|
ShellPrintHiiEx (
|
||||||
|
-1,
|
||||||
|
-1,
|
||||||
|
NULL,
|
||||||
|
STRING_TOKEN (STR_DMEM_SYSTEM_TABLE),
|
||||||
|
gShellDebug1HiiHandle,
|
||||||
(UINT64)(UINTN)Address,
|
(UINT64)(UINTN)Address,
|
||||||
gST->Hdr.HeaderSize,
|
gST->Hdr.HeaderSize,
|
||||||
gST->Hdr.Revision,
|
gST->Hdr.Revision,
|
||||||
@ -210,11 +222,10 @@ ShellCommandRunDmem (
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ShellStatus = DisplayMmioMemory(Address, (UINTN)Size);
|
ShellStatus = DisplayMmioMemory (Address, (UINTN)Size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ShellCommandLineFreeVarList (Package);
|
ShellCommandLineFreeVarList (Package);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,13 +17,13 @@ typedef enum {
|
|||||||
} DMP_STORE_TYPE;
|
} DMP_STORE_TYPE;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
UINT32 Signature;
|
UINT32 Signature;
|
||||||
CHAR16 *Name;
|
CHAR16 *Name;
|
||||||
EFI_GUID Guid;
|
EFI_GUID Guid;
|
||||||
UINT32 Attributes;
|
UINT32 Attributes;
|
||||||
UINT32 DataSize;
|
UINT32 DataSize;
|
||||||
UINT8 *Data;
|
UINT8 *Data;
|
||||||
LIST_ENTRY Link;
|
LIST_ENTRY Link;
|
||||||
} DMP_STORE_VARIABLE;
|
} DMP_STORE_VARIABLE;
|
||||||
|
|
||||||
#define DMP_STORE_VARIABLE_SIGNATURE SIGNATURE_32 ('_', 'd', 's', 's')
|
#define DMP_STORE_VARIABLE_SIGNATURE SIGNATURE_32 ('_', 'd', 's', 's')
|
||||||
@ -37,39 +37,43 @@ typedef struct {
|
|||||||
**/
|
**/
|
||||||
CHAR16 *
|
CHAR16 *
|
||||||
GetAttrType (
|
GetAttrType (
|
||||||
IN CONST UINT32 Atts
|
IN CONST UINT32 Atts
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINTN BufLen;
|
UINTN BufLen;
|
||||||
CHAR16 *RetString;
|
CHAR16 *RetString;
|
||||||
|
|
||||||
BufLen = 0;
|
BufLen = 0;
|
||||||
RetString = NULL;
|
RetString = NULL;
|
||||||
|
|
||||||
if ((Atts & EFI_VARIABLE_NON_VOLATILE) != 0) {
|
if ((Atts & EFI_VARIABLE_NON_VOLATILE) != 0) {
|
||||||
StrnCatGrow (&RetString, &BufLen, L"+NV", 0);
|
StrnCatGrow (&RetString, &BufLen, L"+NV", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((Atts & EFI_VARIABLE_RUNTIME_ACCESS) != 0) {
|
if ((Atts & EFI_VARIABLE_RUNTIME_ACCESS) != 0) {
|
||||||
StrnCatGrow (&RetString, &BufLen, L"+RT+BS", 0);
|
StrnCatGrow (&RetString, &BufLen, L"+RT+BS", 0);
|
||||||
} else if ((Atts & EFI_VARIABLE_BOOTSERVICE_ACCESS) != 0) {
|
} else if ((Atts & EFI_VARIABLE_BOOTSERVICE_ACCESS) != 0) {
|
||||||
StrnCatGrow (&RetString, &BufLen, L"+BS", 0);
|
StrnCatGrow (&RetString, &BufLen, L"+BS", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((Atts & EFI_VARIABLE_HARDWARE_ERROR_RECORD) != 0) {
|
if ((Atts & EFI_VARIABLE_HARDWARE_ERROR_RECORD) != 0) {
|
||||||
StrnCatGrow (&RetString, &BufLen, L"+HR", 0);
|
StrnCatGrow (&RetString, &BufLen, L"+HR", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((Atts & EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS) != 0) {
|
if ((Atts & EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS) != 0) {
|
||||||
StrnCatGrow (&RetString, &BufLen, L"+AW", 0);
|
StrnCatGrow (&RetString, &BufLen, L"+AW", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((Atts & EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS) != 0) {
|
if ((Atts & EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS) != 0) {
|
||||||
StrnCatGrow (&RetString, &BufLen, L"+AT", 0);
|
StrnCatGrow (&RetString, &BufLen, L"+AT", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (RetString == NULL) {
|
if (RetString == NULL) {
|
||||||
RetString = StrnCatGrow(&RetString, &BufLen, L"Invalid", 0);
|
RetString = StrnCatGrow (&RetString, &BufLen, L"Invalid", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((RetString != NULL) && (RetString[0] == L'+')) {
|
if ((RetString != NULL) && (RetString[0] == L'+')) {
|
||||||
CopyMem(RetString, RetString + 1, StrSize(RetString + 1));
|
CopyMem (RetString, RetString + 1, StrSize (RetString + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
return RetString;
|
return RetString;
|
||||||
@ -85,7 +89,7 @@ GetAttrType (
|
|||||||
|
|
||||||
@return The hex format string.
|
@return The hex format string.
|
||||||
**/
|
**/
|
||||||
CHAR16*
|
CHAR16 *
|
||||||
BinaryToHexString (
|
BinaryToHexString (
|
||||||
IN VOID *Buffer,
|
IN VOID *Buffer,
|
||||||
IN UINTN BufferSize,
|
IN UINTN BufferSize,
|
||||||
@ -93,8 +97,8 @@ BinaryToHexString (
|
|||||||
IN UINTN HexStringSize
|
IN UINTN HexStringSize
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINTN Index;
|
UINTN Index;
|
||||||
UINTN StringIndex;
|
UINTN StringIndex;
|
||||||
|
|
||||||
ASSERT (Buffer != NULL);
|
ASSERT (Buffer != NULL);
|
||||||
ASSERT ((BufferSize * 2 + 1) * sizeof (CHAR16) <= HexStringSize);
|
ASSERT ((BufferSize * 2 + 1) * sizeof (CHAR16) <= HexStringSize);
|
||||||
@ -105,9 +109,10 @@ BinaryToHexString (
|
|||||||
&HexString[StringIndex],
|
&HexString[StringIndex],
|
||||||
HexStringSize - StringIndex * sizeof (CHAR16),
|
HexStringSize - StringIndex * sizeof (CHAR16),
|
||||||
L"%02x",
|
L"%02x",
|
||||||
((UINT8 *) Buffer)[Index]
|
((UINT8 *)Buffer)[Index]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return HexString;
|
return HexString;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,26 +131,26 @@ BinaryToHexString (
|
|||||||
**/
|
**/
|
||||||
SHELL_STATUS
|
SHELL_STATUS
|
||||||
LoadVariablesFromFile (
|
LoadVariablesFromFile (
|
||||||
IN SHELL_FILE_HANDLE FileHandle,
|
IN SHELL_FILE_HANDLE FileHandle,
|
||||||
IN CONST CHAR16 *Name,
|
IN CONST CHAR16 *Name,
|
||||||
IN CONST EFI_GUID *Guid,
|
IN CONST EFI_GUID *Guid,
|
||||||
OUT BOOLEAN *Found
|
OUT BOOLEAN *Found
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
SHELL_STATUS ShellStatus;
|
SHELL_STATUS ShellStatus;
|
||||||
UINT32 NameSize;
|
UINT32 NameSize;
|
||||||
UINT32 DataSize;
|
UINT32 DataSize;
|
||||||
UINTN BufferSize;
|
UINTN BufferSize;
|
||||||
UINTN RemainingSize;
|
UINTN RemainingSize;
|
||||||
UINT64 Position;
|
UINT64 Position;
|
||||||
UINT64 FileSize;
|
UINT64 FileSize;
|
||||||
LIST_ENTRY List;
|
LIST_ENTRY List;
|
||||||
DMP_STORE_VARIABLE *Variable;
|
DMP_STORE_VARIABLE *Variable;
|
||||||
LIST_ENTRY *Link;
|
LIST_ENTRY *Link;
|
||||||
CHAR16 *Attributes;
|
CHAR16 *Attributes;
|
||||||
UINT8 *Buffer;
|
UINT8 *Buffer;
|
||||||
UINT32 Crc32;
|
UINT32 Crc32;
|
||||||
|
|
||||||
Status = ShellGetFileSize (FileHandle, &FileSize);
|
Status = ShellGetFileSize (FileHandle, &FileSize);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
@ -162,7 +167,7 @@ LoadVariablesFromFile (
|
|||||||
// NameSize
|
// NameSize
|
||||||
//
|
//
|
||||||
BufferSize = sizeof (NameSize);
|
BufferSize = sizeof (NameSize);
|
||||||
Status = ShellReadFile (FileHandle, &BufferSize, &NameSize);
|
Status = ShellReadFile (FileHandle, &BufferSize, &NameSize);
|
||||||
if (EFI_ERROR (Status) || (BufferSize != sizeof (NameSize))) {
|
if (EFI_ERROR (Status) || (BufferSize != sizeof (NameSize))) {
|
||||||
ShellStatus = SHELL_VOLUME_CORRUPTED;
|
ShellStatus = SHELL_VOLUME_CORRUPTED;
|
||||||
break;
|
break;
|
||||||
@ -172,7 +177,7 @@ LoadVariablesFromFile (
|
|||||||
// DataSize
|
// DataSize
|
||||||
//
|
//
|
||||||
BufferSize = sizeof (DataSize);
|
BufferSize = sizeof (DataSize);
|
||||||
Status = ShellReadFile (FileHandle, &BufferSize, &DataSize);
|
Status = ShellReadFile (FileHandle, &BufferSize, &DataSize);
|
||||||
if (EFI_ERROR (Status) || (BufferSize != sizeof (DataSize))) {
|
if (EFI_ERROR (Status) || (BufferSize != sizeof (DataSize))) {
|
||||||
ShellStatus = SHELL_VOLUME_CORRUPTED;
|
ShellStatus = SHELL_VOLUME_CORRUPTED;
|
||||||
break;
|
break;
|
||||||
@ -188,8 +193,9 @@ LoadVariablesFromFile (
|
|||||||
ShellStatus = SHELL_OUT_OF_RESOURCES;
|
ShellStatus = SHELL_OUT_OF_RESOURCES;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
BufferSize = RemainingSize;
|
|
||||||
Status = ShellReadFile (FileHandle, &BufferSize, (UINT32 *) Buffer + 2);
|
BufferSize = RemainingSize;
|
||||||
|
Status = ShellReadFile (FileHandle, &BufferSize, (UINT32 *)Buffer + 2);
|
||||||
if (EFI_ERROR (Status) || (BufferSize != RemainingSize)) {
|
if (EFI_ERROR (Status) || (BufferSize != RemainingSize)) {
|
||||||
ShellStatus = SHELL_VOLUME_CORRUPTED;
|
ShellStatus = SHELL_VOLUME_CORRUPTED;
|
||||||
FreePool (Buffer);
|
FreePool (Buffer);
|
||||||
@ -199,15 +205,15 @@ LoadVariablesFromFile (
|
|||||||
//
|
//
|
||||||
// Check Crc32
|
// Check Crc32
|
||||||
//
|
//
|
||||||
* (UINT32 *) Buffer = NameSize;
|
*(UINT32 *)Buffer = NameSize;
|
||||||
* ((UINT32 *) Buffer + 1) = DataSize;
|
*((UINT32 *)Buffer + 1) = DataSize;
|
||||||
BufferSize = RemainingSize + sizeof (NameSize) + sizeof (DataSize) - sizeof (Crc32);
|
BufferSize = RemainingSize + sizeof (NameSize) + sizeof (DataSize) - sizeof (Crc32);
|
||||||
gBS->CalculateCrc32 (
|
gBS->CalculateCrc32 (
|
||||||
Buffer,
|
Buffer,
|
||||||
BufferSize,
|
BufferSize,
|
||||||
&Crc32
|
&Crc32
|
||||||
);
|
);
|
||||||
if (Crc32 != * (UINT32 *) (Buffer + BufferSize)) {
|
if (Crc32 != *(UINT32 *)(Buffer + BufferSize)) {
|
||||||
FreePool (Buffer);
|
FreePool (Buffer);
|
||||||
ShellStatus = SHELL_VOLUME_CORRUPTED;
|
ShellStatus = SHELL_VOLUME_CORRUPTED;
|
||||||
break;
|
break;
|
||||||
@ -221,41 +227,51 @@ LoadVariablesFromFile (
|
|||||||
ShellStatus = SHELL_OUT_OF_RESOURCES;
|
ShellStatus = SHELL_OUT_OF_RESOURCES;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
Variable->Signature = DMP_STORE_VARIABLE_SIGNATURE;
|
Variable->Signature = DMP_STORE_VARIABLE_SIGNATURE;
|
||||||
Variable->Name = (CHAR16 *) (Variable + 1);
|
Variable->Name = (CHAR16 *)(Variable + 1);
|
||||||
Variable->DataSize = DataSize;
|
Variable->DataSize = DataSize;
|
||||||
Variable->Data = (UINT8 *) Variable->Name + NameSize;
|
Variable->Data = (UINT8 *)Variable->Name + NameSize;
|
||||||
CopyMem (Variable->Name, Buffer + sizeof (NameSize) + sizeof (DataSize), NameSize);
|
CopyMem (Variable->Name, Buffer + sizeof (NameSize) + sizeof (DataSize), NameSize);
|
||||||
CopyMem (&Variable->Guid, Buffer + sizeof (NameSize) + sizeof (DataSize) + NameSize, sizeof (EFI_GUID));
|
CopyMem (&Variable->Guid, Buffer + sizeof (NameSize) + sizeof (DataSize) + NameSize, sizeof (EFI_GUID));
|
||||||
CopyMem (&Variable->Attributes, Buffer + sizeof (NameSize) + sizeof (DataSize) + NameSize + sizeof (EFI_GUID), sizeof (UINT32));
|
CopyMem (&Variable->Attributes, Buffer + sizeof (NameSize) + sizeof (DataSize) + NameSize + sizeof (EFI_GUID), sizeof (UINT32));
|
||||||
CopyMem (Variable->Data, Buffer + sizeof (NameSize) + sizeof (DataSize) + NameSize + sizeof (EFI_GUID) + sizeof (UINT32), DataSize);
|
CopyMem (Variable->Data, Buffer + sizeof (NameSize) + sizeof (DataSize) + NameSize + sizeof (EFI_GUID) + sizeof (UINT32), DataSize);
|
||||||
|
|
||||||
InsertTailList (&List, &Variable->Link);
|
InsertTailList (&List, &Variable->Link);
|
||||||
FreePool (Buffer);
|
FreePool (Buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((Position != FileSize) || (ShellStatus != SHELL_SUCCESS)) {
|
if ((Position != FileSize) || (ShellStatus != SHELL_SUCCESS)) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_LOAD_BAD_FILE), gShellDebug1HiiHandle, L"dmpstore");
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_LOAD_BAD_FILE), gShellDebug1HiiHandle, L"dmpstore");
|
||||||
if (Position != FileSize) {
|
if (Position != FileSize) {
|
||||||
ShellStatus = SHELL_VOLUME_CORRUPTED;
|
ShellStatus = SHELL_VOLUME_CORRUPTED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( Link = GetFirstNode (&List)
|
for ( Link = GetFirstNode (&List)
|
||||||
; !IsNull (&List, Link) && (ShellStatus == SHELL_SUCCESS)
|
; !IsNull (&List, Link) && (ShellStatus == SHELL_SUCCESS)
|
||||||
; Link = GetNextNode (&List, Link)
|
; Link = GetNextNode (&List, Link)
|
||||||
) {
|
)
|
||||||
|
{
|
||||||
Variable = CR (Link, DMP_STORE_VARIABLE, Link, DMP_STORE_VARIABLE_SIGNATURE);
|
Variable = CR (Link, DMP_STORE_VARIABLE, Link, DMP_STORE_VARIABLE_SIGNATURE);
|
||||||
|
|
||||||
if (((Name == NULL) || gUnicodeCollation->MetaiMatch (gUnicodeCollation, Variable->Name, (CHAR16 *) Name)) &&
|
if (((Name == NULL) || gUnicodeCollation->MetaiMatch (gUnicodeCollation, Variable->Name, (CHAR16 *)Name)) &&
|
||||||
((Guid == NULL) || CompareGuid (&Variable->Guid, Guid))
|
((Guid == NULL) || CompareGuid (&Variable->Guid, Guid))
|
||||||
) {
|
)
|
||||||
|
{
|
||||||
Attributes = GetAttrType (Variable->Attributes);
|
Attributes = GetAttrType (Variable->Attributes);
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1, -1, NULL, STRING_TOKEN(STR_DMPSTORE_HEADER_LINE), gShellDebug1HiiHandle,
|
-1,
|
||||||
Attributes, &Variable->Guid, Variable->Name, Variable->DataSize
|
-1,
|
||||||
|
NULL,
|
||||||
|
STRING_TOKEN (STR_DMPSTORE_HEADER_LINE),
|
||||||
|
gShellDebug1HiiHandle,
|
||||||
|
Attributes,
|
||||||
|
&Variable->Guid,
|
||||||
|
Variable->Name,
|
||||||
|
Variable->DataSize
|
||||||
);
|
);
|
||||||
SHELL_FREE_NON_NULL(Attributes);
|
SHELL_FREE_NON_NULL (Attributes);
|
||||||
|
|
||||||
*Found = TRUE;
|
*Found = TRUE;
|
||||||
Status = gRT->SetVariable (
|
Status = gRT->SetVariable (
|
||||||
@ -266,14 +282,14 @@ LoadVariablesFromFile (
|
|||||||
Variable->Data
|
Variable->Data
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_LOAD_GEN_FAIL), gShellDebug1HiiHandle, L"dmpstore", Variable->Name, Status);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_LOAD_GEN_FAIL), gShellDebug1HiiHandle, L"dmpstore", Variable->Name, Status);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Link = GetFirstNode (&List); !IsNull (&List, Link); ) {
|
for (Link = GetFirstNode (&List); !IsNull (&List, Link); ) {
|
||||||
Variable = CR (Link, DMP_STORE_VARIABLE, Link, DMP_STORE_VARIABLE_SIGNATURE);
|
Variable = CR (Link, DMP_STORE_VARIABLE, Link, DMP_STORE_VARIABLE_SIGNATURE);
|
||||||
Link = RemoveEntryList (&Variable->Link);
|
Link = RemoveEntryList (&Variable->Link);
|
||||||
FreePool (Variable);
|
FreePool (Variable);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -296,26 +312,26 @@ LoadVariablesFromFile (
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
AppendSingleVariableToFile (
|
AppendSingleVariableToFile (
|
||||||
IN SHELL_FILE_HANDLE FileHandle,
|
IN SHELL_FILE_HANDLE FileHandle,
|
||||||
IN CONST CHAR16 *Name,
|
IN CONST CHAR16 *Name,
|
||||||
IN CONST EFI_GUID *Guid,
|
IN CONST EFI_GUID *Guid,
|
||||||
IN UINT32 Attributes,
|
IN UINT32 Attributes,
|
||||||
IN UINT32 DataSize,
|
IN UINT32 DataSize,
|
||||||
IN CONST UINT8 *Data
|
IN CONST UINT8 *Data
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINT32 NameSize;
|
UINT32 NameSize;
|
||||||
UINT8 *Buffer;
|
UINT8 *Buffer;
|
||||||
UINT8 *Ptr;
|
UINT8 *Ptr;
|
||||||
UINTN BufferSize;
|
UINTN BufferSize;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
|
|
||||||
NameSize = (UINT32) StrSize (Name);
|
NameSize = (UINT32)StrSize (Name);
|
||||||
BufferSize = sizeof (NameSize) + sizeof (DataSize)
|
BufferSize = sizeof (NameSize) + sizeof (DataSize)
|
||||||
+ sizeof (*Guid)
|
+ sizeof (*Guid)
|
||||||
+ sizeof (Attributes)
|
+ sizeof (Attributes)
|
||||||
+ NameSize + DataSize
|
+ NameSize + DataSize
|
||||||
+ sizeof (UINT32);
|
+ sizeof (UINT32);
|
||||||
|
|
||||||
Buffer = AllocatePool (BufferSize);
|
Buffer = AllocatePool (BufferSize);
|
||||||
if (Buffer == NULL) {
|
if (Buffer == NULL) {
|
||||||
@ -326,10 +342,10 @@ AppendSingleVariableToFile (
|
|||||||
//
|
//
|
||||||
// NameSize and DataSize
|
// NameSize and DataSize
|
||||||
//
|
//
|
||||||
* (UINT32 *) Ptr = NameSize;
|
*(UINT32 *)Ptr = NameSize;
|
||||||
Ptr += sizeof (NameSize);
|
Ptr += sizeof (NameSize);
|
||||||
*(UINT32 *) Ptr = DataSize;
|
*(UINT32 *)Ptr = DataSize;
|
||||||
Ptr += sizeof (DataSize);
|
Ptr += sizeof (DataSize);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Name
|
// Name
|
||||||
@ -346,8 +362,8 @@ AppendSingleVariableToFile (
|
|||||||
//
|
//
|
||||||
// Attributes
|
// Attributes
|
||||||
//
|
//
|
||||||
* (UINT32 *) Ptr = Attributes;
|
*(UINT32 *)Ptr = Attributes;
|
||||||
Ptr += sizeof (Attributes);
|
Ptr += sizeof (Attributes);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Data
|
// Data
|
||||||
@ -358,14 +374,15 @@ AppendSingleVariableToFile (
|
|||||||
//
|
//
|
||||||
// Crc32
|
// Crc32
|
||||||
//
|
//
|
||||||
gBS->CalculateCrc32 (Buffer, (UINTN) Ptr - (UINTN) Buffer, (UINT32 *) Ptr);
|
gBS->CalculateCrc32 (Buffer, (UINTN)Ptr - (UINTN)Buffer, (UINT32 *)Ptr);
|
||||||
|
|
||||||
Status = ShellWriteFile (FileHandle, &BufferSize, Buffer);
|
Status = ShellWriteFile (FileHandle, &BufferSize, Buffer);
|
||||||
FreePool (Buffer);
|
FreePool (Buffer);
|
||||||
|
|
||||||
if (!EFI_ERROR (Status) &&
|
if (!EFI_ERROR (Status) &&
|
||||||
(BufferSize != sizeof (NameSize) + sizeof (DataSize) + sizeof (*Guid) + sizeof (Attributes) + NameSize + DataSize + sizeof (UINT32))
|
(BufferSize != sizeof (NameSize) + sizeof (DataSize) + sizeof (*Guid) + sizeof (Attributes) + NameSize + DataSize + sizeof (UINT32))
|
||||||
) {
|
)
|
||||||
|
{
|
||||||
Status = EFI_DEVICE_ERROR;
|
Status = EFI_DEVICE_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -398,49 +415,49 @@ AppendSingleVariableToFile (
|
|||||||
**/
|
**/
|
||||||
SHELL_STATUS
|
SHELL_STATUS
|
||||||
CascadeProcessVariables (
|
CascadeProcessVariables (
|
||||||
IN CONST CHAR16 *Name OPTIONAL,
|
IN CONST CHAR16 *Name OPTIONAL,
|
||||||
IN CONST EFI_GUID *Guid OPTIONAL,
|
IN CONST EFI_GUID *Guid OPTIONAL,
|
||||||
IN DMP_STORE_TYPE Type,
|
IN DMP_STORE_TYPE Type,
|
||||||
IN EFI_FILE_PROTOCOL *FileHandle OPTIONAL,
|
IN EFI_FILE_PROTOCOL *FileHandle OPTIONAL,
|
||||||
IN CONST CHAR16 * CONST PrevName,
|
IN CONST CHAR16 *CONST PrevName,
|
||||||
IN EFI_GUID FoundVarGuid,
|
IN EFI_GUID FoundVarGuid,
|
||||||
IN BOOLEAN *FoundOne,
|
IN BOOLEAN *FoundOne,
|
||||||
IN BOOLEAN StandardFormatOutput
|
IN BOOLEAN StandardFormatOutput
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
CHAR16 *FoundVarName;
|
CHAR16 *FoundVarName;
|
||||||
UINT8 *DataBuffer;
|
UINT8 *DataBuffer;
|
||||||
UINTN DataSize;
|
UINTN DataSize;
|
||||||
UINT32 Atts;
|
UINT32 Atts;
|
||||||
SHELL_STATUS ShellStatus;
|
SHELL_STATUS ShellStatus;
|
||||||
UINTN NameSize;
|
UINTN NameSize;
|
||||||
CHAR16 *AttrString;
|
CHAR16 *AttrString;
|
||||||
CHAR16 *HexString;
|
CHAR16 *HexString;
|
||||||
EFI_STATUS SetStatus;
|
EFI_STATUS SetStatus;
|
||||||
CONST CHAR16 *GuidName;
|
CONST CHAR16 *GuidName;
|
||||||
|
|
||||||
if (ShellGetExecutionBreakFlag()) {
|
if (ShellGetExecutionBreakFlag ()) {
|
||||||
return (SHELL_ABORTED);
|
return (SHELL_ABORTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
NameSize = 0;
|
NameSize = 0;
|
||||||
FoundVarName = NULL;
|
FoundVarName = NULL;
|
||||||
|
|
||||||
if (PrevName!=NULL) {
|
if (PrevName != NULL) {
|
||||||
StrnCatGrow(&FoundVarName, &NameSize, PrevName, 0);
|
StrnCatGrow (&FoundVarName, &NameSize, PrevName, 0);
|
||||||
} else {
|
} else {
|
||||||
FoundVarName = AllocateZeroPool(sizeof(CHAR16));
|
FoundVarName = AllocateZeroPool (sizeof (CHAR16));
|
||||||
NameSize = sizeof(CHAR16);
|
NameSize = sizeof (CHAR16);
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = gRT->GetNextVariableName (&NameSize, FoundVarName, &FoundVarGuid);
|
Status = gRT->GetNextVariableName (&NameSize, FoundVarName, &FoundVarGuid);
|
||||||
if (Status == EFI_BUFFER_TOO_SMALL) {
|
if (Status == EFI_BUFFER_TOO_SMALL) {
|
||||||
SHELL_FREE_NON_NULL(FoundVarName);
|
SHELL_FREE_NON_NULL (FoundVarName);
|
||||||
FoundVarName = AllocateZeroPool (NameSize);
|
FoundVarName = AllocateZeroPool (NameSize);
|
||||||
if (FoundVarName != NULL) {
|
if (FoundVarName != NULL) {
|
||||||
if (PrevName != NULL) {
|
if (PrevName != NULL) {
|
||||||
StrnCpyS(FoundVarName, NameSize/sizeof(CHAR16), PrevName, NameSize/sizeof(CHAR16) - 1);
|
StrnCpyS (FoundVarName, NameSize/sizeof (CHAR16), PrevName, NameSize/sizeof (CHAR16) - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = gRT->GetNextVariableName (&NameSize, FoundVarName, &FoundVarGuid);
|
Status = gRT->GetNextVariableName (&NameSize, FoundVarName, &FoundVarGuid);
|
||||||
@ -453,10 +470,10 @@ CascadeProcessVariables (
|
|||||||
// No more is fine.
|
// No more is fine.
|
||||||
//
|
//
|
||||||
if (Status == EFI_NOT_FOUND) {
|
if (Status == EFI_NOT_FOUND) {
|
||||||
SHELL_FREE_NON_NULL(FoundVarName);
|
SHELL_FREE_NON_NULL (FoundVarName);
|
||||||
return (SHELL_SUCCESS);
|
return (SHELL_SUCCESS);
|
||||||
} else if (EFI_ERROR(Status)) {
|
} else if (EFI_ERROR (Status)) {
|
||||||
SHELL_FREE_NON_NULL(FoundVarName);
|
SHELL_FREE_NON_NULL (FoundVarName);
|
||||||
return (SHELL_DEVICE_ERROR);
|
return (SHELL_DEVICE_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -465,8 +482,8 @@ CascadeProcessVariables (
|
|||||||
//
|
//
|
||||||
ShellStatus = CascadeProcessVariables (Name, Guid, Type, FileHandle, FoundVarName, FoundVarGuid, FoundOne, StandardFormatOutput);
|
ShellStatus = CascadeProcessVariables (Name, Guid, Type, FileHandle, FoundVarName, FoundVarGuid, FoundOne, StandardFormatOutput);
|
||||||
|
|
||||||
if (ShellGetExecutionBreakFlag() || (ShellStatus == SHELL_ABORTED)) {
|
if (ShellGetExecutionBreakFlag () || (ShellStatus == SHELL_ABORTED)) {
|
||||||
SHELL_FREE_NON_NULL(FoundVarName);
|
SHELL_FREE_NON_NULL (FoundVarName);
|
||||||
return (SHELL_ABORTED);
|
return (SHELL_ABORTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -474,18 +491,19 @@ CascadeProcessVariables (
|
|||||||
// No matter what happened we process our own variable
|
// No matter what happened we process our own variable
|
||||||
// Only continue if Guid and VariableName are each either NULL or a match
|
// Only continue if Guid and VariableName are each either NULL or a match
|
||||||
//
|
//
|
||||||
if ( ( Name == NULL
|
if ( ( (Name == NULL)
|
||||||
|| gUnicodeCollation->MetaiMatch(gUnicodeCollation, FoundVarName, (CHAR16*) Name) )
|
|| gUnicodeCollation->MetaiMatch (gUnicodeCollation, FoundVarName, (CHAR16 *)Name))
|
||||||
&& ( Guid == NULL
|
&& ( (Guid == NULL)
|
||||||
|| CompareGuid(&FoundVarGuid, Guid) )
|
|| CompareGuid (&FoundVarGuid, Guid))
|
||||||
) {
|
)
|
||||||
DataSize = 0;
|
{
|
||||||
DataBuffer = NULL;
|
DataSize = 0;
|
||||||
|
DataBuffer = NULL;
|
||||||
//
|
//
|
||||||
// do the print or delete
|
// do the print or delete
|
||||||
//
|
//
|
||||||
*FoundOne = TRUE;
|
*FoundOne = TRUE;
|
||||||
Status = gRT->GetVariable (FoundVarName, &FoundVarGuid, &Atts, &DataSize, DataBuffer);
|
Status = gRT->GetVariable (FoundVarName, &FoundVarGuid, &Atts, &DataSize, DataBuffer);
|
||||||
if (Status == EFI_BUFFER_TOO_SMALL) {
|
if (Status == EFI_BUFFER_TOO_SMALL) {
|
||||||
SHELL_FREE_NON_NULL (DataBuffer);
|
SHELL_FREE_NON_NULL (DataBuffer);
|
||||||
DataBuffer = AllocatePool (DataSize);
|
DataBuffer = AllocatePool (DataSize);
|
||||||
@ -495,20 +513,31 @@ CascadeProcessVariables (
|
|||||||
Status = gRT->GetVariable (FoundVarName, &FoundVarGuid, &Atts, &DataSize, DataBuffer);
|
Status = gRT->GetVariable (FoundVarName, &FoundVarGuid, &Atts, &DataSize, DataBuffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//
|
|
||||||
// Last error check then print this variable out.
|
//
|
||||||
//
|
// Last error check then print this variable out.
|
||||||
|
//
|
||||||
if (Type == DmpStoreDisplay) {
|
if (Type == DmpStoreDisplay) {
|
||||||
if (!EFI_ERROR(Status) && (DataBuffer != NULL) && (FoundVarName != NULL)) {
|
if (!EFI_ERROR (Status) && (DataBuffer != NULL) && (FoundVarName != NULL)) {
|
||||||
AttrString = GetAttrType(Atts);
|
AttrString = GetAttrType (Atts);
|
||||||
if (StandardFormatOutput) {
|
if (StandardFormatOutput) {
|
||||||
HexString = AllocatePool ((DataSize * 2 + 1) * sizeof (CHAR16));
|
HexString = AllocatePool ((DataSize * 2 + 1) * sizeof (CHAR16));
|
||||||
if (HexString != NULL) {
|
if (HexString != NULL) {
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_VAR_SFO), gShellDebug1HiiHandle,
|
-1,
|
||||||
FoundVarName, &FoundVarGuid, Atts, DataSize,
|
-1,
|
||||||
|
NULL,
|
||||||
|
STRING_TOKEN (STR_DMPSTORE_VAR_SFO),
|
||||||
|
gShellDebug1HiiHandle,
|
||||||
|
FoundVarName,
|
||||||
|
&FoundVarGuid,
|
||||||
|
Atts,
|
||||||
|
DataSize,
|
||||||
BinaryToHexString (
|
BinaryToHexString (
|
||||||
DataBuffer, DataSize, HexString, (DataSize * 2 + 1) * sizeof (CHAR16)
|
DataBuffer,
|
||||||
|
DataSize,
|
||||||
|
HexString,
|
||||||
|
(DataSize * 2 + 1) * sizeof (CHAR16)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
FreePool (HexString);
|
FreePool (HexString);
|
||||||
@ -516,35 +545,58 @@ CascadeProcessVariables (
|
|||||||
Status = EFI_OUT_OF_RESOURCES;
|
Status = EFI_OUT_OF_RESOURCES;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Status = gEfiShellProtocol->GetGuidName(&FoundVarGuid, &GuidName);
|
Status = gEfiShellProtocol->GetGuidName (&FoundVarGuid, &GuidName);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_HEADER_LINE), gShellDebug1HiiHandle,
|
-1,
|
||||||
AttrString, &FoundVarGuid, FoundVarName, DataSize
|
-1,
|
||||||
|
NULL,
|
||||||
|
STRING_TOKEN (STR_DMPSTORE_HEADER_LINE),
|
||||||
|
gShellDebug1HiiHandle,
|
||||||
|
AttrString,
|
||||||
|
&FoundVarGuid,
|
||||||
|
FoundVarName,
|
||||||
|
DataSize
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_HEADER_LINE2), gShellDebug1HiiHandle,
|
-1,
|
||||||
AttrString, GuidName, FoundVarName, DataSize
|
-1,
|
||||||
|
NULL,
|
||||||
|
STRING_TOKEN (STR_DMPSTORE_HEADER_LINE2),
|
||||||
|
gShellDebug1HiiHandle,
|
||||||
|
AttrString,
|
||||||
|
GuidName,
|
||||||
|
FoundVarName,
|
||||||
|
DataSize
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
DumpHex (2, 0, DataSize, DataBuffer);
|
DumpHex (2, 0, DataSize, DataBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
SHELL_FREE_NON_NULL (AttrString);
|
SHELL_FREE_NON_NULL (AttrString);
|
||||||
}
|
}
|
||||||
} else if (Type == DmpStoreSave) {
|
} else if (Type == DmpStoreSave) {
|
||||||
if (!EFI_ERROR(Status) && (DataBuffer != NULL) && (FoundVarName != NULL)) {
|
if (!EFI_ERROR (Status) && (DataBuffer != NULL) && (FoundVarName != NULL)) {
|
||||||
AttrString = GetAttrType (Atts);
|
AttrString = GetAttrType (Atts);
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_HEADER_LINE), gShellDebug1HiiHandle,
|
-1,
|
||||||
AttrString, &FoundVarGuid, FoundVarName, DataSize
|
-1,
|
||||||
|
NULL,
|
||||||
|
STRING_TOKEN (STR_DMPSTORE_HEADER_LINE),
|
||||||
|
gShellDebug1HiiHandle,
|
||||||
|
AttrString,
|
||||||
|
&FoundVarGuid,
|
||||||
|
FoundVarName,
|
||||||
|
DataSize
|
||||||
);
|
);
|
||||||
Status = AppendSingleVariableToFile (
|
Status = AppendSingleVariableToFile (
|
||||||
FileHandle,
|
FileHandle,
|
||||||
FoundVarName,
|
FoundVarName,
|
||||||
&FoundVarGuid,
|
&FoundVarGuid,
|
||||||
Atts,
|
Atts,
|
||||||
(UINT32) DataSize,
|
(UINT32)DataSize,
|
||||||
DataBuffer
|
DataBuffer
|
||||||
);
|
);
|
||||||
SHELL_FREE_NON_NULL (AttrString);
|
SHELL_FREE_NON_NULL (AttrString);
|
||||||
@ -557,27 +609,39 @@ CascadeProcessVariables (
|
|||||||
if (StandardFormatOutput) {
|
if (StandardFormatOutput) {
|
||||||
if (SetStatus == EFI_SUCCESS) {
|
if (SetStatus == EFI_SUCCESS) {
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND_NG_SFO), gShellDebug1HiiHandle,
|
-1,
|
||||||
FoundVarName, &FoundVarGuid
|
-1,
|
||||||
|
NULL,
|
||||||
|
STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND_NG_SFO),
|
||||||
|
gShellDebug1HiiHandle,
|
||||||
|
FoundVarName,
|
||||||
|
&FoundVarGuid
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ShellPrintHiiEx (
|
ShellPrintHiiEx (
|
||||||
-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_DELETE_LINE), gShellDebug1HiiHandle,
|
-1,
|
||||||
&FoundVarGuid, FoundVarName, SetStatus
|
-1,
|
||||||
|
NULL,
|
||||||
|
STRING_TOKEN (STR_DMPSTORE_DELETE_LINE),
|
||||||
|
gShellDebug1HiiHandle,
|
||||||
|
&FoundVarGuid,
|
||||||
|
FoundVarName,
|
||||||
|
SetStatus
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SHELL_FREE_NON_NULL(DataBuffer);
|
|
||||||
|
SHELL_FREE_NON_NULL (DataBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
SHELL_FREE_NON_NULL(FoundVarName);
|
SHELL_FREE_NON_NULL (FoundVarName);
|
||||||
|
|
||||||
if (Status == EFI_DEVICE_ERROR) {
|
if (Status == EFI_DEVICE_ERROR) {
|
||||||
ShellStatus = SHELL_DEVICE_ERROR;
|
ShellStatus = SHELL_DEVICE_ERROR;
|
||||||
} else if (Status == EFI_SECURITY_VIOLATION) {
|
} else if (Status == EFI_SECURITY_VIOLATION) {
|
||||||
ShellStatus = SHELL_SECURITY_VIOLATION;
|
ShellStatus = SHELL_SECURITY_VIOLATION;
|
||||||
} else if (EFI_ERROR(Status)) {
|
} else if (EFI_ERROR (Status)) {
|
||||||
ShellStatus = SHELL_NOT_READY;
|
ShellStatus = SHELL_NOT_READY;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -601,23 +665,23 @@ CascadeProcessVariables (
|
|||||||
**/
|
**/
|
||||||
SHELL_STATUS
|
SHELL_STATUS
|
||||||
ProcessVariables (
|
ProcessVariables (
|
||||||
IN CONST CHAR16 *Name OPTIONAL,
|
IN CONST CHAR16 *Name OPTIONAL,
|
||||||
IN CONST EFI_GUID *Guid OPTIONAL,
|
IN CONST EFI_GUID *Guid OPTIONAL,
|
||||||
IN DMP_STORE_TYPE Type,
|
IN DMP_STORE_TYPE Type,
|
||||||
IN SHELL_FILE_HANDLE FileHandle OPTIONAL,
|
IN SHELL_FILE_HANDLE FileHandle OPTIONAL,
|
||||||
IN BOOLEAN StandardFormatOutput
|
IN BOOLEAN StandardFormatOutput
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
SHELL_STATUS ShellStatus;
|
SHELL_STATUS ShellStatus;
|
||||||
BOOLEAN Found;
|
BOOLEAN Found;
|
||||||
EFI_GUID FoundVarGuid;
|
EFI_GUID FoundVarGuid;
|
||||||
|
|
||||||
Found = FALSE;
|
Found = FALSE;
|
||||||
ShellStatus = SHELL_SUCCESS;
|
ShellStatus = SHELL_SUCCESS;
|
||||||
ZeroMem (&FoundVarGuid, sizeof(EFI_GUID));
|
ZeroMem (&FoundVarGuid, sizeof (EFI_GUID));
|
||||||
|
|
||||||
if (StandardFormatOutput) {
|
if (StandardFormatOutput) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN(STR_GEN_SFO_HEADER), gShellDebug1HiiHandle, L"dmpstore");
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_SFO_HEADER), gShellDebug1HiiHandle, L"dmpstore");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Type == DmpStoreLoad) {
|
if (Type == DmpStoreLoad) {
|
||||||
@ -628,43 +692,45 @@ ProcessVariables (
|
|||||||
|
|
||||||
if (!Found) {
|
if (!Found) {
|
||||||
if (ShellStatus == SHELL_OUT_OF_RESOURCES) {
|
if (ShellStatus == SHELL_OUT_OF_RESOURCES) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellDebug1HiiHandle, L"dmpstore");
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellDebug1HiiHandle, L"dmpstore");
|
||||||
return (ShellStatus);
|
return (ShellStatus);
|
||||||
} else if (Name != NULL && Guid == NULL) {
|
} else if ((Name != NULL) && (Guid == NULL)) {
|
||||||
if (StandardFormatOutput) {
|
if (StandardFormatOutput) {
|
||||||
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND_N_SFO), gShellDebug1HiiHandle, Name);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND_N_SFO), gShellDebug1HiiHandle, Name);
|
||||||
} else {
|
} else {
|
||||||
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND_N), gShellDebug1HiiHandle, L"dmpstore", Name);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND_N), gShellDebug1HiiHandle, L"dmpstore", Name);
|
||||||
}
|
}
|
||||||
} else if (Name != NULL && Guid != NULL) {
|
} else if ((Name != NULL) && (Guid != NULL)) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND_GN), gShellDebug1HiiHandle, L"dmpstore", Guid, Name);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND_GN), gShellDebug1HiiHandle, L"dmpstore", Guid, Name);
|
||||||
} else if (Name == NULL && Guid == NULL) {
|
} else if ((Name == NULL) && (Guid == NULL)) {
|
||||||
if (StandardFormatOutput) {
|
if (StandardFormatOutput) {
|
||||||
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND_SFO), gShellDebug1HiiHandle);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND_SFO), gShellDebug1HiiHandle);
|
||||||
} else {
|
} else {
|
||||||
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND), gShellDebug1HiiHandle, L"dmpstore");
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND), gShellDebug1HiiHandle, L"dmpstore");
|
||||||
}
|
}
|
||||||
} else if (Name == NULL && Guid != NULL) {
|
} else if ((Name == NULL) && (Guid != NULL)) {
|
||||||
if (StandardFormatOutput) {
|
if (StandardFormatOutput) {
|
||||||
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND_G_SFO), gShellDebug1HiiHandle, Guid);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND_G_SFO), gShellDebug1HiiHandle, Guid);
|
||||||
} else {
|
} else {
|
||||||
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND_G), gShellDebug1HiiHandle, L"dmpstore", Guid);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_NO_VAR_FOUND_G), gShellDebug1HiiHandle, L"dmpstore", Guid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (SHELL_NOT_FOUND);
|
return (SHELL_NOT_FOUND);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (ShellStatus);
|
return (ShellStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
|
STATIC CONST SHELL_PARAM_ITEM ParamList[] = {
|
||||||
{L"-d", TypeFlag},
|
{ L"-d", TypeFlag },
|
||||||
{L"-l", TypeValue},
|
{ L"-l", TypeValue },
|
||||||
{L"-s", TypeValue},
|
{ L"-s", TypeValue },
|
||||||
{L"-all", TypeFlag},
|
{ L"-all", TypeFlag },
|
||||||
{L"-guid", TypeValue},
|
{ L"-guid", TypeValue },
|
||||||
{L"-sfo", TypeFlag},
|
{ L"-sfo", TypeFlag },
|
||||||
{NULL, TypeMax}
|
{ NULL, TypeMax }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Function for 'dmpstore' command.
|
Function for 'dmpstore' command.
|
||||||
@ -679,20 +745,20 @@ ShellCommandRunDmpStore (
|
|||||||
IN EFI_SYSTEM_TABLE *SystemTable
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
RETURN_STATUS RStatus;
|
RETURN_STATUS RStatus;
|
||||||
LIST_ENTRY *Package;
|
LIST_ENTRY *Package;
|
||||||
CHAR16 *ProblemParam;
|
CHAR16 *ProblemParam;
|
||||||
SHELL_STATUS ShellStatus;
|
SHELL_STATUS ShellStatus;
|
||||||
CONST CHAR16 *GuidStr;
|
CONST CHAR16 *GuidStr;
|
||||||
CONST CHAR16 *File;
|
CONST CHAR16 *File;
|
||||||
EFI_GUID *Guid;
|
EFI_GUID *Guid;
|
||||||
EFI_GUID GuidData;
|
EFI_GUID GuidData;
|
||||||
CONST CHAR16 *Name;
|
CONST CHAR16 *Name;
|
||||||
DMP_STORE_TYPE Type;
|
DMP_STORE_TYPE Type;
|
||||||
SHELL_FILE_HANDLE FileHandle;
|
SHELL_FILE_HANDLE FileHandle;
|
||||||
EFI_FILE_INFO *FileInfo;
|
EFI_FILE_INFO *FileInfo;
|
||||||
BOOLEAN StandardFormatOutput;
|
BOOLEAN StandardFormatOutput;
|
||||||
|
|
||||||
ShellStatus = SHELL_SUCCESS;
|
ShellStatus = SHELL_SUCCESS;
|
||||||
Package = NULL;
|
Package = NULL;
|
||||||
@ -702,61 +768,62 @@ ShellCommandRunDmpStore (
|
|||||||
StandardFormatOutput = FALSE;
|
StandardFormatOutput = FALSE;
|
||||||
|
|
||||||
Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);
|
Status = ShellCommandLineParse (ParamList, &Package, &ProblemParam, TRUE);
|
||||||
if (EFI_ERROR(Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {
|
if ((Status == EFI_VOLUME_CORRUPTED) && (ProblemParam != NULL)) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, L"dmpstore", ProblemParam);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, L"dmpstore", ProblemParam);
|
||||||
FreePool(ProblemParam);
|
FreePool (ProblemParam);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
ASSERT(FALSE);
|
ASSERT (FALSE);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (ShellCommandLineGetCount(Package) > 2) {
|
if (ShellCommandLineGetCount (Package) > 2) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"dmpstore");
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"dmpstore");
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else if (ShellCommandLineGetFlag(Package, L"-all") && ShellCommandLineGetFlag(Package, L"-guid")) {
|
} else if (ShellCommandLineGetFlag (Package, L"-all") && ShellCommandLineGetFlag (Package, L"-guid")) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONFLICT), gShellDebug1HiiHandle, L"dmpstore", L"-all", L"-guid");
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONFLICT), gShellDebug1HiiHandle, L"dmpstore", L"-all", L"-guid");
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else if (ShellCommandLineGetFlag(Package, L"-s") && ShellCommandLineGetFlag(Package, L"-l")) {
|
} else if (ShellCommandLineGetFlag (Package, L"-s") && ShellCommandLineGetFlag (Package, L"-l")) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONFLICT), gShellDebug1HiiHandle, L"dmpstore", L"-l", L"-s");
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONFLICT), gShellDebug1HiiHandle, L"dmpstore", L"-l", L"-s");
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else if ((ShellCommandLineGetFlag(Package, L"-s") || ShellCommandLineGetFlag(Package, L"-l")) && ShellCommandLineGetFlag(Package, L"-d")) {
|
} else if ((ShellCommandLineGetFlag (Package, L"-s") || ShellCommandLineGetFlag (Package, L"-l")) && ShellCommandLineGetFlag (Package, L"-d")) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONFLICT), gShellDebug1HiiHandle, L"dmpstore", L"-l or -s", L"-d");
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONFLICT), gShellDebug1HiiHandle, L"dmpstore", L"-l or -s", L"-d");
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else if ((ShellCommandLineGetFlag(Package, L"-s") || ShellCommandLineGetFlag(Package, L"-l")) && ShellCommandLineGetFlag(Package, L"-sfo")) {
|
} else if ((ShellCommandLineGetFlag (Package, L"-s") || ShellCommandLineGetFlag (Package, L"-l")) && ShellCommandLineGetFlag (Package, L"-sfo")) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONFLICT), gShellDebug1HiiHandle, L"dmpstore", L"-l or -s", L"-sfo");
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_CONFLICT), gShellDebug1HiiHandle, L"dmpstore", L"-l or -s", L"-sfo");
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
//
|
//
|
||||||
// Determine the GUID to search for based on -all and -guid parameters
|
// Determine the GUID to search for based on -all and -guid parameters
|
||||||
//
|
//
|
||||||
if (!ShellCommandLineGetFlag(Package, L"-all")) {
|
if (!ShellCommandLineGetFlag (Package, L"-all")) {
|
||||||
GuidStr = ShellCommandLineGetValue(Package, L"-guid");
|
GuidStr = ShellCommandLineGetValue (Package, L"-guid");
|
||||||
if (GuidStr != NULL) {
|
if (GuidStr != NULL) {
|
||||||
RStatus = StrToGuid (GuidStr, &GuidData);
|
RStatus = StrToGuid (GuidStr, &GuidData);
|
||||||
if (RETURN_ERROR (RStatus) || (GuidStr[GUID_STRING_LENGTH] != L'\0')) {
|
if (RETURN_ERROR (RStatus) || (GuidStr[GUID_STRING_LENGTH] != L'\0')) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"dmpstore", GuidStr);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PARAM_INV), gShellDebug1HiiHandle, L"dmpstore", GuidStr);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
Guid = &GuidData;
|
Guid = &GuidData;
|
||||||
} else {
|
} else {
|
||||||
Guid = &gEfiGlobalVariableGuid;
|
Guid = &gEfiGlobalVariableGuid;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Guid = NULL;
|
Guid = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Get the Name of the variable to find
|
// Get the Name of the variable to find
|
||||||
//
|
//
|
||||||
Name = ShellCommandLineGetRawValue(Package, 1);
|
Name = ShellCommandLineGetRawValue (Package, 1);
|
||||||
|
|
||||||
if (ShellStatus == SHELL_SUCCESS) {
|
if (ShellStatus == SHELL_SUCCESS) {
|
||||||
if (ShellCommandLineGetFlag(Package, L"-s")) {
|
if (ShellCommandLineGetFlag (Package, L"-s")) {
|
||||||
Type = DmpStoreSave;
|
Type = DmpStoreSave;
|
||||||
File = ShellCommandLineGetValue(Package, L"-s");
|
File = ShellCommandLineGetValue (Package, L"-s");
|
||||||
if (File == NULL) {
|
if (File == NULL) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDebug1HiiHandle, L"dmpstore", L"-s");
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDebug1HiiHandle, L"dmpstore", L"-s");
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
Status = ShellOpenFileByName (File, &FileHandle, EFI_FILE_MODE_WRITE | EFI_FILE_MODE_READ, 0);
|
Status = ShellOpenFileByName (File, &FileHandle, EFI_FILE_MODE_WRITE | EFI_FILE_MODE_READ, 0);
|
||||||
@ -778,6 +845,7 @@ ShellCommandRunDmpStore (
|
|||||||
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_DELETE_FAIL), gShellDebug1HiiHandle, L"dmpstore", File);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_DELETE_FAIL), gShellDebug1HiiHandle, L"dmpstore", File);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FreePool (FileInfo);
|
FreePool (FileInfo);
|
||||||
}
|
}
|
||||||
} else if (Status == EFI_NOT_FOUND) {
|
} else if (Status == EFI_NOT_FOUND) {
|
||||||
@ -803,16 +871,16 @@ ShellCommandRunDmpStore (
|
|||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (ShellCommandLineGetFlag(Package, L"-l")) {
|
} else if (ShellCommandLineGetFlag (Package, L"-l")) {
|
||||||
Type = DmpStoreLoad;
|
Type = DmpStoreLoad;
|
||||||
File = ShellCommandLineGetValue(Package, L"-l");
|
File = ShellCommandLineGetValue (Package, L"-l");
|
||||||
if (File == NULL) {
|
if (File == NULL) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDebug1HiiHandle, L"dmpstore", L"-l");
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_NO_VALUE), gShellDebug1HiiHandle, L"dmpstore", L"-l");
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
Status = ShellOpenFileByName (File, &FileHandle, EFI_FILE_MODE_READ, 0);
|
Status = ShellOpenFileByName (File, &FileHandle, EFI_FILE_MODE_READ, 0);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"dmpstore", File);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_OPEN_FAIL), gShellDebug1HiiHandle, L"dmpstore", File);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
FileInfo = ShellGetFileInfo (FileHandle);
|
FileInfo = ShellGetFileInfo (FileHandle);
|
||||||
@ -824,15 +892,16 @@ ShellCommandRunDmpStore (
|
|||||||
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_IS_DIRECTORY), gShellDebug1HiiHandle, L"dmpstore", File);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_FILE_IS_DIRECTORY), gShellDebug1HiiHandle, L"dmpstore", File);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
|
|
||||||
FreePool (FileInfo);
|
FreePool (FileInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (ShellCommandLineGetFlag(Package, L"-d")) {
|
} else if (ShellCommandLineGetFlag (Package, L"-d")) {
|
||||||
Type = DmpStoreDelete;
|
Type = DmpStoreDelete;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ShellCommandLineGetFlag (Package,L"-sfo")) {
|
if (ShellCommandLineGetFlag (Package, L"-sfo")) {
|
||||||
StandardFormatOutput = TRUE;
|
StandardFormatOutput = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -843,6 +912,7 @@ ShellCommandRunDmpStore (
|
|||||||
} else if (Type == DmpStoreLoad) {
|
} else if (Type == DmpStoreLoad) {
|
||||||
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_LOAD), gShellDebug1HiiHandle, File);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_DMPSTORE_LOAD), gShellDebug1HiiHandle, File);
|
||||||
}
|
}
|
||||||
|
|
||||||
ShellStatus = ProcessVariables (Name, Guid, Type, FileHandle, StandardFormatOutput);
|
ShellStatus = ProcessVariables (Name, Guid, Type, FileHandle, StandardFormatOutput);
|
||||||
if ((Type == DmpStoreLoad) || (Type == DmpStoreSave)) {
|
if ((Type == DmpStoreLoad) || (Type == DmpStoreSave)) {
|
||||||
ShellCloseFile (&FileHandle);
|
ShellCloseFile (&FileHandle);
|
||||||
@ -854,6 +924,6 @@ ShellCommandRunDmpStore (
|
|||||||
if (Package != NULL) {
|
if (Package != NULL) {
|
||||||
ShellCommandLineFreeVarList (Package);
|
ShellCommandLineFreeVarList (Package);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ShellStatus;
|
return ShellStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,16 +23,17 @@ ShellCommandRunEdit (
|
|||||||
IN EFI_SYSTEM_TABLE *SystemTable
|
IN EFI_SYSTEM_TABLE *SystemTable
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
CHAR16 *Buffer;
|
CHAR16 *Buffer;
|
||||||
CHAR16 *ProblemParam;
|
CHAR16 *ProblemParam;
|
||||||
SHELL_STATUS ShellStatus;
|
SHELL_STATUS ShellStatus;
|
||||||
LIST_ENTRY *Package;
|
LIST_ENTRY *Package;
|
||||||
CONST CHAR16 *Cwd;
|
CONST CHAR16 *Cwd;
|
||||||
CHAR16 *Nfs;
|
CHAR16 *Nfs;
|
||||||
CHAR16 *Spot;
|
CHAR16 *Spot;
|
||||||
CONST CHAR16 *TempParam;
|
CONST CHAR16 *TempParam;
|
||||||
// SHELL_FILE_HANDLE TempHandle;
|
|
||||||
|
// SHELL_FILE_HANDLE TempHandle;
|
||||||
|
|
||||||
Buffer = NULL;
|
Buffer = NULL;
|
||||||
ShellStatus = SHELL_SUCCESS;
|
ShellStatus = SHELL_SUCCESS;
|
||||||
@ -41,45 +42,47 @@ ShellCommandRunEdit (
|
|||||||
//
|
//
|
||||||
// initialize the shell lib (we must be in non-auto-init...)
|
// initialize the shell lib (we must be in non-auto-init...)
|
||||||
//
|
//
|
||||||
Status = ShellInitialize();
|
Status = ShellInitialize ();
|
||||||
ASSERT_EFI_ERROR(Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
Status = CommandInit();
|
Status = CommandInit ();
|
||||||
ASSERT_EFI_ERROR(Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
//
|
//
|
||||||
// parse the command line
|
// parse the command line
|
||||||
//
|
//
|
||||||
Status = ShellCommandLineParse (EmptyParamList, &Package, &ProblemParam, TRUE);
|
Status = ShellCommandLineParse (EmptyParamList, &Package, &ProblemParam, TRUE);
|
||||||
if (EFI_ERROR(Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
if (Status == EFI_VOLUME_CORRUPTED && ProblemParam != NULL) {
|
if ((Status == EFI_VOLUME_CORRUPTED) && (ProblemParam != NULL)) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, L"edit", ProblemParam);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_PROBLEM), gShellDebug1HiiHandle, L"edit", ProblemParam);
|
||||||
FreePool(ProblemParam);
|
FreePool (ProblemParam);
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
ASSERT(FALSE);
|
ASSERT (FALSE);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (ShellCommandLineGetCount(Package) > 2) {
|
if (ShellCommandLineGetCount (Package) > 2) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"edit");
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_TOO_MANY), gShellDebug1HiiHandle, L"edit");
|
||||||
ShellStatus = SHELL_INVALID_PARAMETER;
|
ShellStatus = SHELL_INVALID_PARAMETER;
|
||||||
} else {
|
} else {
|
||||||
Cwd = gEfiShellProtocol->GetCurDir(NULL);
|
Cwd = gEfiShellProtocol->GetCurDir (NULL);
|
||||||
if (Cwd == NULL) {
|
if (Cwd == NULL) {
|
||||||
Cwd = ShellGetEnvironmentVariable(L"path");
|
Cwd = ShellGetEnvironmentVariable (L"path");
|
||||||
if (Cwd != NULL) {
|
if (Cwd != NULL) {
|
||||||
Nfs = StrnCatGrow(&Nfs, NULL, Cwd+3, 0);
|
Nfs = StrnCatGrow (&Nfs, NULL, Cwd+3, 0);
|
||||||
if (Nfs != NULL) {
|
if (Nfs != NULL) {
|
||||||
Spot = StrStr(Nfs, L";");
|
Spot = StrStr (Nfs, L";");
|
||||||
if (Spot != NULL) {
|
if (Spot != NULL) {
|
||||||
*Spot = CHAR_NULL;
|
*Spot = CHAR_NULL;
|
||||||
}
|
}
|
||||||
Spot = StrStr(Nfs, L"\\");
|
|
||||||
|
Spot = StrStr (Nfs, L"\\");
|
||||||
if (Spot != NULL) {
|
if (Spot != NULL) {
|
||||||
Spot[1] = CHAR_NULL;
|
Spot[1] = CHAR_NULL;
|
||||||
}
|
}
|
||||||
gEfiShellProtocol->SetCurDir(NULL, Nfs);
|
|
||||||
FreePool(Nfs);
|
gEfiShellProtocol->SetCurDir (NULL, Nfs);
|
||||||
|
FreePool (Nfs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -89,23 +92,23 @@ ShellCommandRunEdit (
|
|||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
gST->ConOut->ClearScreen (gST->ConOut);
|
gST->ConOut->ClearScreen (gST->ConOut);
|
||||||
gST->ConOut->EnableCursor (gST->ConOut, TRUE);
|
gST->ConOut->EnableCursor (gST->ConOut, TRUE);
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN(STR_EDIT_MAIN_INIT_FAILED), gShellDebug1HiiHandle);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_EDIT_MAIN_INIT_FAILED), gShellDebug1HiiHandle);
|
||||||
} else {
|
} else {
|
||||||
MainEditorBackup ();
|
MainEditorBackup ();
|
||||||
|
|
||||||
//
|
//
|
||||||
// if editor launched with file named
|
// if editor launched with file named
|
||||||
//
|
//
|
||||||
if (ShellCommandLineGetCount(Package) == 2) {
|
if (ShellCommandLineGetCount (Package) == 2) {
|
||||||
TempParam = ShellCommandLineGetRawValue(Package, 1);
|
TempParam = ShellCommandLineGetRawValue (Package, 1);
|
||||||
ASSERT(TempParam != NULL);
|
ASSERT (TempParam != NULL);
|
||||||
FileBufferSetFileName (TempParam);
|
FileBufferSetFileName (TempParam);
|
||||||
// if (EFI_ERROR(ShellFileExists(MainEditor.FileBuffer->FileName))) {
|
// if (EFI_ERROR(ShellFileExists(MainEditor.FileBuffer->FileName))) {
|
||||||
// Status = ShellOpenFileByName(MainEditor.FileBuffer->FileName, &TempHandle, EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE, 0);
|
// Status = ShellOpenFileByName(MainEditor.FileBuffer->FileName, &TempHandle, EFI_FILE_MODE_CREATE|EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE, 0);
|
||||||
// if (!EFI_ERROR(Status)) {
|
// if (!EFI_ERROR(Status)) {
|
||||||
// ShellCloseFile(&TempHandle);
|
// ShellCloseFile(&TempHandle);
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = FileBufferRead (MainEditor.FileBuffer->FileName, FALSE);
|
Status = FileBufferRead (MainEditor.FileBuffer->FileName, FALSE);
|
||||||
@ -119,7 +122,7 @@ ShellCommandRunEdit (
|
|||||||
//
|
//
|
||||||
// back up the status string
|
// back up the status string
|
||||||
//
|
//
|
||||||
Buffer = CatSPrint (NULL, L"%s", StatusBarGetString());
|
Buffer = CatSPrint (NULL, L"%s", StatusBarGetString ());
|
||||||
}
|
}
|
||||||
|
|
||||||
MainEditorCleanup ();
|
MainEditorCleanup ();
|
||||||
@ -129,19 +132,19 @@ ShellCommandRunEdit (
|
|||||||
//
|
//
|
||||||
if (Status == EFI_SUCCESS) {
|
if (Status == EFI_SUCCESS) {
|
||||||
} else if (Status == EFI_OUT_OF_RESOURCES) {
|
} else if (Status == EFI_OUT_OF_RESOURCES) {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN(STR_GEN_OUT_MEM), gShellDebug1HiiHandle, L"edit");
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_OUT_MEM), gShellDebug1HiiHandle, L"edit");
|
||||||
} else {
|
} else {
|
||||||
if (Buffer != NULL) {
|
if (Buffer != NULL) {
|
||||||
if (StrCmp (Buffer, L"") != 0) {
|
if (StrCmp (Buffer, L"") != 0) {
|
||||||
//
|
//
|
||||||
// print out the status string
|
// print out the status string
|
||||||
//
|
//
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN(STR_EDIT_MAIN_BUFFER), gShellDebug1HiiHandle, Buffer);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_EDIT_MAIN_BUFFER), gShellDebug1HiiHandle, Buffer);
|
||||||
} else {
|
} else {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN(STR_EDIT_MAIN_UNKNOWN_EDITOR_ERR), gShellDebug1HiiHandle);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_EDIT_MAIN_UNKNOWN_EDITOR_ERR), gShellDebug1HiiHandle);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ShellPrintHiiEx(-1, -1, NULL, STRING_TOKEN(STR_EDIT_MAIN_UNKNOWN_EDITOR_ERR), gShellDebug1HiiHandle);
|
ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_EDIT_MAIN_UNKNOWN_EDITOR_ERR), gShellDebug1HiiHandle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -150,7 +153,9 @@ ShellCommandRunEdit (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ShellCommandLineFreeVarList (Package);
|
ShellCommandLineFreeVarList (Package);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ShellStatus;
|
return ShellStatus;
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user