155 lines
3.5 KiB
C
155 lines
3.5 KiB
C
/** @file
|
|
Hardware IO based debug commands
|
|
|
|
Copyright (c) 2007, Intel Corporation. All rights reserved.<BR>
|
|
Portions copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
|
|
(C) Copyright 2015 Hewlett Packard Enterprise Development LP<BR>
|
|
|
|
This program and the accompanying materials
|
|
are licensed and made available under the terms and conditions of the BSD License
|
|
which accompanies this distribution. The full text of the license may be found at
|
|
http://opensource.org/licenses/bsd-license.php
|
|
|
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|
|
|
Commands useful for debugging hardware. IO commands separated out as not all
|
|
processor architectures support the IO command.
|
|
|
|
**/
|
|
|
|
#include "Ebl.h"
|
|
|
|
|
|
|
|
/**
|
|
Read from IO space
|
|
|
|
Argv[0] - "ioread"[.#] # is optional width 1, 2, or 4. Default 1
|
|
Argv[1] - Hex IO address
|
|
|
|
ior.4 0x3f8 ;Do a 32-bit IO Read from 0x3f8
|
|
ior 0x3f8 ;Do a 8-bit IO Read from 0x3f8
|
|
|
|
@param Argc Number of command arguments in Argv
|
|
@param Argv Array of strings that represent the parsed command line.
|
|
Argv[0] is the command name
|
|
|
|
@return EFI_SUCCESS
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
EblIoReadCmd (
|
|
IN UINTN Argc,
|
|
IN CHAR8 **Argv
|
|
)
|
|
{
|
|
UINTN Width;
|
|
UINTN Port;
|
|
UINTN Data;
|
|
|
|
if (Argc < 2) {
|
|
return EFI_INVALID_PARAMETER;
|
|
}
|
|
|
|
Port = AsciiStrHexToUintn (Argv[1]);
|
|
Width = WidthFromCommandName (Argv[0], 1);
|
|
|
|
if (Width == 1) {
|
|
Data = IoRead8 (Port);
|
|
} else if (Width == 2) {
|
|
Data = IoRead16 (Port);
|
|
} else if (Width == 4) {
|
|
Data = IoRead32 (Port);
|
|
} else {
|
|
return EFI_INVALID_PARAMETER;
|
|
}
|
|
|
|
AsciiPrint ("0x%04x = 0x%x", Port, Data);
|
|
|
|
return EFI_SUCCESS;
|
|
}
|
|
|
|
|
|
/**
|
|
Write to IO space
|
|
|
|
Argv[0] - "iowrite"[.#] # is optional width 1, 2, or 4. Default 1
|
|
Argv[1] - Hex IO address
|
|
Argv[2] - Hex data to write
|
|
|
|
iow.4 0x3f8 af ;Do a 32-bit IO write of af to 0x3f8
|
|
iow 0x3f8 af ;Do an 8-bit IO write of af to 0x3f8
|
|
|
|
@param Argc Number of command arguments in Argv
|
|
@param Argv Array of strings that represent the parsed command line.
|
|
Argv[0] is the command name
|
|
|
|
@return EFI_SUCCESS
|
|
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
EblIoWriteCmd (
|
|
IN UINTN Argc,
|
|
IN CHAR8 **Argv
|
|
)
|
|
{
|
|
UINTN Width;
|
|
UINTN Port;
|
|
UINTN Data;
|
|
|
|
if (Argc < 3) {
|
|
return EFI_INVALID_PARAMETER;
|
|
}
|
|
|
|
Port = AsciiStrHexToUintn (Argv[1]);
|
|
Data = AsciiStrHexToUintn (Argv[2]);
|
|
Width = WidthFromCommandName (Argv[0], 1);
|
|
|
|
if (Width == 1) {
|
|
IoWrite8 (Port, (UINT8)Data);
|
|
} else if (Width == 2) {
|
|
IoWrite16 (Port, (UINT16)Data);
|
|
} else if (Width == 4) {
|
|
IoWrite32 (Port, (UINT32)Data);
|
|
} else {
|
|
return EFI_INVALID_PARAMETER;
|
|
}
|
|
return EFI_SUCCESS;
|
|
}
|
|
|
|
|
|
GLOBAL_REMOVE_IF_UNREFERENCED const EBL_COMMAND_TABLE mCmdHwIoDebugTemplate[] =
|
|
{
|
|
{
|
|
"ioread",
|
|
"[.{1|2|4}] Port ; IO read of width byte(s) from Port",
|
|
NULL,
|
|
EblIoReadCmd
|
|
},
|
|
{
|
|
"iowrite",
|
|
"[.{1|2|4}] Port Data ; IO write Data of width byte(s) to Port",
|
|
NULL,
|
|
EblIoWriteCmd
|
|
}
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
Initialize the commands in this in this file
|
|
**/
|
|
VOID
|
|
EblInitializemdHwIoDebugCmds (
|
|
VOID
|
|
)
|
|
{
|
|
if (FeaturePcdGet (PcdEmbeddedIoEnable)) {
|
|
EblAddCommands (mCmdHwIoDebugTemplate, sizeof (mCmdHwIoDebugTemplate)/sizeof (EBL_COMMAND_TABLE));
|
|
}
|
|
}
|
|
|