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