aboutsummaryrefslogtreecommitdiff
path: root/gnu-efi/gnu-efi-3.0/lib/hw.c
diff options
context:
space:
mode:
Diffstat (limited to 'gnu-efi/gnu-efi-3.0/lib/hw.c')
-rw-r--r--gnu-efi/gnu-efi-3.0/lib/hw.c132
1 files changed, 132 insertions, 0 deletions
diff --git a/gnu-efi/gnu-efi-3.0/lib/hw.c b/gnu-efi/gnu-efi-3.0/lib/hw.c
new file mode 100644
index 0000000..3d651ad
--- /dev/null
+++ b/gnu-efi/gnu-efi-3.0/lib/hw.c
@@ -0,0 +1,132 @@
+/*++
+
+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 = uefi_call_wrapper(BS->LocateDevicePath, 3, Protocol, &DevicePath, &Handle);
+ if (!EFI_ERROR(Status)) {
+ DEBUG ((D_INIT, "Device Already Loaded for %a device\n", ErrorStr));
+ return EFI_LOAD_ERROR;
+ }
+
+ Status = uefi_call_wrapper(BS->LocateDevicePath, 3, &DeviceIoProtocol, &DevicePath, &Handle);
+ if (!EFI_ERROR(Status)) {
+ Status = uefi_call_wrapper(BS->HandleProtocol, 3, 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 = uefi_call_wrapper(GlobalIoFncs->Io.Read, 5, 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 = uefi_call_wrapper(GlobalIoFncs->Io.Write, 5, 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 = uefi_call_wrapper(GlobalIoFncs->Pci.Read, 5, 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 = uefi_call_wrapper(GlobalIoFncs->Pci.Write, 5, GlobalIoFncs, Width, (UINT64)Address, 1, &Data);
+ ASSERT(!EFI_ERROR(Status));
+ return (UINT32)Data;
+}
+
+
+