You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
3.2 KiB
132 lines
3.2 KiB
/*++
|
|
|
|
Copyright (c) 1998 Intel Corporation
|
|
|
|
Module Name:
|
|
|
|
hw.c
|
|
|
|
Abstract:
|
|
|
|
Debug library functions for Hardware IO access
|
|
|
|
|
|
|
|
Revision History
|
|
|
|
--*/
|
|
|
|
#include "lib.h"
|
|
|
|
|
|
EFI_STATUS
|
|
InitializeGlobalIoDevice (
|
|
IN EFI_DEVICE_PATH *DevicePath,
|
|
IN EFI_GUID *Protocol,
|
|
IN CHAR8 *ErrorStr,
|
|
OUT EFI_DEVICE_IO_INTERFACE **GlobalIoFncs
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Check to see if DevicePath exists for a given Protocol. Return Error if it
|
|
exists. Return GlobalIoFuncs set match the DevicePath
|
|
|
|
Arguments:
|
|
|
|
DevicePath - to operate on
|
|
Protocol - to check the DevicePath against
|
|
ErrorStr - ASCII string to display on error
|
|
GlobalIoFncs - Returned with DeviceIoProtocol for the DevicePath
|
|
|
|
Returns:
|
|
|
|
Pass or Fail based on wether GlobalIoFncs where found
|
|
|
|
--*/
|
|
{
|
|
EFI_STATUS Status;
|
|
EFI_HANDLE Handle;
|
|
|
|
/*
|
|
* Check to see if this device path already has Protocol on it.
|
|
* if so we are loading recursivly and should exit with an error
|
|
*/
|
|
Status = BS->LocateDevicePath (Protocol, &DevicePath, &Handle);
|
|
if (!EFI_ERROR(Status)) {
|
|
DEBUG ((D_INIT, "Device Already Loaded for %a device\n", ErrorStr));
|
|
return EFI_LOAD_ERROR;
|
|
}
|
|
|
|
Status = BS->LocateDevicePath (&DeviceIoProtocol, &DevicePath, &Handle);
|
|
if (!EFI_ERROR(Status)) {
|
|
Status = BS->HandleProtocol (Handle, &DeviceIoProtocol, (VOID*)GlobalIoFncs);
|
|
}
|
|
|
|
ASSERT (!EFI_ERROR(Status));
|
|
return Status;
|
|
}
|
|
|
|
UINT32
|
|
ReadPort (
|
|
IN EFI_DEVICE_IO_INTERFACE *GlobalIoFncs,
|
|
IN EFI_IO_WIDTH Width,
|
|
IN UINTN Port
|
|
)
|
|
{
|
|
UINT32 Data;
|
|
EFI_STATUS Status;
|
|
|
|
Status = GlobalIoFncs->Io.Read (GlobalIoFncs, Width, (UINT64)Port, 1, &Data);
|
|
ASSERT(!EFI_ERROR(Status));
|
|
return Data;
|
|
}
|
|
|
|
UINT32
|
|
WritePort (
|
|
IN EFI_DEVICE_IO_INTERFACE *GlobalIoFncs,
|
|
IN EFI_IO_WIDTH Width,
|
|
IN UINTN Port,
|
|
IN UINTN Data
|
|
)
|
|
{
|
|
EFI_STATUS Status;
|
|
|
|
Status = GlobalIoFncs->Io.Write (GlobalIoFncs, Width, (UINT64)Port, 1, &Data);
|
|
ASSERT(!EFI_ERROR(Status));
|
|
return (UINT32)Data;
|
|
}
|
|
|
|
UINT32
|
|
ReadPciConfig (
|
|
IN EFI_DEVICE_IO_INTERFACE *GlobalIoFncs,
|
|
IN EFI_IO_WIDTH Width,
|
|
IN UINTN Address
|
|
)
|
|
{
|
|
UINT32 Data;
|
|
EFI_STATUS Status;
|
|
|
|
Status = GlobalIoFncs->Pci.Read (GlobalIoFncs, Width, (UINT64)Address, 1, &Data);
|
|
ASSERT(!EFI_ERROR(Status));
|
|
return Data;
|
|
}
|
|
|
|
UINT32
|
|
WritePciConfig (
|
|
IN EFI_DEVICE_IO_INTERFACE *GlobalIoFncs,
|
|
IN EFI_IO_WIDTH Width,
|
|
IN UINTN Address,
|
|
IN UINTN Data
|
|
)
|
|
{
|
|
EFI_STATUS Status;
|
|
|
|
Status = GlobalIoFncs->Pci.Write (GlobalIoFncs, Width, (UINT64)Address, 1, &Data);
|
|
ASSERT(!EFI_ERROR(Status));
|
|
return (UINT32)Data;
|
|
}
|
|
|
|
|
|
|