hw.c revision 1.1 1 1.1 jakllsch /* $NetBSD: hw.c,v 1.1 2014/04/01 16:16:06 jakllsch 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.1 jakllsch IN CHAR8 *ErrorStr,
29 1.1 jakllsch 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.1 jakllsch 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.1 jakllsch UINT32
74 1.1 jakllsch ReadPort (
75 1.1 jakllsch 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.1 jakllsch EFI_STATUS Status;
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.1 jakllsch UINT32
89 1.1 jakllsch WritePort (
90 1.1 jakllsch 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.1 jakllsch EFI_STATUS Status;
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.1 jakllsch UINT32
104 1.1 jakllsch ReadPciConfig (
105 1.1 jakllsch 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.1 jakllsch EFI_STATUS Status;
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.1 jakllsch UINT32
119 1.1 jakllsch WritePciConfig (
120 1.1 jakllsch 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.1 jakllsch EFI_STATUS Status;
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