The EFIAPI function declaration is missing for several functions in the EmbeddedPkg/Ebl directory. A few function pointer struct members expect EFIAPI though and GCC46/X64 will fail to compile the directory without them. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Thomas Palmer <thomas.palmer@hpe.com> Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18697 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			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));
 | |
|   }
 | |
| }
 | |
| 
 |