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