Home | History | Annotate | Line # | Download | only in lib
      1  1.3  jmcneill /*	$NetBSD: hw.c,v 1.3 2018/08/16 18:22:05 jmcneill Exp $	*/
      2  1.1  jakllsch 
      3  1.1  jakllsch /*++
      4  1.1  jakllsch 
      5  1.1  jakllsch Copyright (c) 1998  Intel Corporation
      6  1.1  jakllsch 
      7  1.1  jakllsch Module Name:
      8  1.1  jakllsch 
      9  1.1  jakllsch     hw.c
     10  1.1  jakllsch 
     11  1.1  jakllsch Abstract:
     12  1.1  jakllsch 
     13  1.1  jakllsch     Debug library functions for Hardware IO access
     14  1.1  jakllsch 
     15  1.1  jakllsch 
     16  1.1  jakllsch 
     17  1.1  jakllsch Revision History
     18  1.1  jakllsch 
     19  1.1  jakllsch --*/
     20  1.1  jakllsch 
     21  1.1  jakllsch #include "lib.h"
     22  1.1  jakllsch 
     23  1.1  jakllsch 
     24  1.1  jakllsch EFI_STATUS
     25  1.1  jakllsch InitializeGlobalIoDevice (
     26  1.1  jakllsch         IN  EFI_DEVICE_PATH             *DevicePath,
     27  1.1  jakllsch         IN  EFI_GUID                    *Protocol,
     28  1.3  jmcneill         IN  CHAR8                       *ErrorStr EFI_UNUSED,
     29  1.3  jmcneill         OUT EFI_DEVICE_IO_INTERFACE     **GlobalIoFncs
     30  1.1  jakllsch         )
     31  1.1  jakllsch /*++
     32  1.1  jakllsch 
     33  1.1  jakllsch Routine Description:
     34  1.1  jakllsch 
     35  1.3  jmcneill     Check to see if DevicePath exists for a given Protocol. Return Error if it
     36  1.1  jakllsch     exists. Return GlobalIoFuncs set match the DevicePath
     37  1.1  jakllsch 
     38  1.1  jakllsch   Arguments:
     39  1.1  jakllsch 
     40  1.1  jakllsch     DevicePath      - to operate on
     41  1.1  jakllsch     Protocol        - to check the DevicePath against
     42  1.1  jakllsch     ErrorStr        - ASCII string to display on error
     43  1.1  jakllsch     GlobalIoFncs    - Returned with DeviceIoProtocol for the DevicePath
     44  1.1  jakllsch 
     45  1.1  jakllsch Returns:
     46  1.1  jakllsch 
     47  1.1  jakllsch     Pass or Fail based on  wether GlobalIoFncs where found
     48  1.1  jakllsch 
     49  1.1  jakllsch --*/
     50  1.1  jakllsch {
     51  1.1  jakllsch     EFI_STATUS      Status;
     52  1.1  jakllsch     EFI_HANDLE      Handle;
     53  1.1  jakllsch 
     54  1.1  jakllsch     //
     55  1.1  jakllsch     // Check to see if this device path already has Protocol on it.
     56  1.1  jakllsch     //  if so we are loading recursivly and should exit with an error
     57  1.1  jakllsch     //
     58  1.1  jakllsch     Status = uefi_call_wrapper(BS->LocateDevicePath, 3, Protocol, &DevicePath, &Handle);
     59  1.1  jakllsch     if (!EFI_ERROR(Status)) {
     60  1.1  jakllsch         DEBUG ((D_INIT, "Device Already Loaded for %a device\n", ErrorStr));
     61  1.1  jakllsch         return EFI_LOAD_ERROR;
     62  1.1  jakllsch     }
     63  1.1  jakllsch 
     64  1.1  jakllsch     Status = uefi_call_wrapper(BS->LocateDevicePath, 3, &DeviceIoProtocol, &DevicePath, &Handle);
     65  1.1  jakllsch     if (!EFI_ERROR(Status)) {
     66  1.1  jakllsch         Status = uefi_call_wrapper(BS->HandleProtocol, 3, Handle, &DeviceIoProtocol, (VOID*)GlobalIoFncs);
     67  1.1  jakllsch     }
     68  1.1  jakllsch 
     69  1.1  jakllsch     ASSERT (!EFI_ERROR(Status));
     70  1.1  jakllsch     return Status;
     71  1.1  jakllsch }
     72  1.1  jakllsch 
     73  1.3  jmcneill UINT32
     74  1.1  jakllsch ReadPort (
     75  1.3  jmcneill         IN  EFI_DEVICE_IO_INTERFACE     *GlobalIoFncs,
     76  1.1  jakllsch         IN  EFI_IO_WIDTH                Width,
     77  1.1  jakllsch         IN  UINTN                       Port
     78  1.1  jakllsch         )
     79  1.1  jakllsch {
     80  1.1  jakllsch     UINT32       Data;
     81  1.3  jmcneill     EFI_STATUS  Status EFI_UNUSED;
     82  1.1  jakllsch 
     83  1.1  jakllsch     Status = uefi_call_wrapper(GlobalIoFncs->Io.Read, 5, GlobalIoFncs, Width, (UINT64)Port, 1, &Data);
     84  1.1  jakllsch     ASSERT(!EFI_ERROR(Status));
     85  1.1  jakllsch     return Data;
     86  1.1  jakllsch }
     87  1.1  jakllsch 
     88  1.3  jmcneill UINT32
     89  1.1  jakllsch WritePort (
     90  1.3  jmcneill         IN  EFI_DEVICE_IO_INTERFACE     *GlobalIoFncs,
     91  1.1  jakllsch         IN  EFI_IO_WIDTH                Width,
     92  1.1  jakllsch         IN  UINTN                       Port,
     93  1.1  jakllsch         IN  UINTN                       Data
     94  1.1  jakllsch         )
     95  1.1  jakllsch {
     96  1.3  jmcneill     EFI_STATUS  Status EFI_UNUSED;
     97  1.1  jakllsch 
     98  1.1  jakllsch     Status = uefi_call_wrapper(GlobalIoFncs->Io.Write, 5, GlobalIoFncs, Width, (UINT64)Port, 1, &Data);
     99  1.1  jakllsch     ASSERT(!EFI_ERROR(Status));
    100  1.1  jakllsch     return (UINT32)Data;
    101  1.1  jakllsch }
    102  1.1  jakllsch 
    103  1.3  jmcneill UINT32
    104  1.1  jakllsch ReadPciConfig (
    105  1.3  jmcneill         IN  EFI_DEVICE_IO_INTERFACE     *GlobalIoFncs,
    106  1.1  jakllsch         IN  EFI_IO_WIDTH                Width,
    107  1.1  jakllsch         IN  UINTN                       Address
    108  1.1  jakllsch         )
    109  1.1  jakllsch {
    110  1.1  jakllsch     UINT32       Data;
    111  1.3  jmcneill     EFI_STATUS  Status EFI_UNUSED;
    112  1.1  jakllsch 
    113  1.1  jakllsch     Status = uefi_call_wrapper(GlobalIoFncs->Pci.Read, 5, GlobalIoFncs, Width, (UINT64)Address, 1, &Data);
    114  1.1  jakllsch     ASSERT(!EFI_ERROR(Status));
    115  1.1  jakllsch     return Data;
    116  1.1  jakllsch }
    117  1.1  jakllsch 
    118  1.3  jmcneill UINT32
    119  1.1  jakllsch WritePciConfig (
    120  1.3  jmcneill         IN  EFI_DEVICE_IO_INTERFACE     *GlobalIoFncs,
    121  1.1  jakllsch         IN  EFI_IO_WIDTH                Width,
    122  1.1  jakllsch         IN  UINTN                       Address,
    123  1.1  jakllsch         IN  UINTN                       Data
    124  1.1  jakllsch         )
    125  1.1  jakllsch {
    126  1.3  jmcneill     EFI_STATUS  Status EFI_UNUSED;
    127  1.1  jakllsch 
    128  1.1  jakllsch     Status = uefi_call_wrapper(GlobalIoFncs->Pci.Write, 5, GlobalIoFncs, Width, (UINT64)Address, 1, &Data);
    129  1.1  jakllsch     ASSERT(!EFI_ERROR(Status));
    130  1.1  jakllsch     return (UINT32)Data;
    131  1.1  jakllsch }
    132  1.1  jakllsch 
    133  1.1  jakllsch 
    134  1.1  jakllsch 
    135