Subversion Repositories HelenOS

Rev

Rev 2726 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2726 vana 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
23
InitializeGlobalIoDevice (
24
        IN  EFI_DEVICE_PATH             *DevicePath,
25
        IN  EFI_GUID                    *Protocol,
26
        IN  CHAR8                       *ErrorStr,
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 = BS->LocateDevicePath (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 = BS->LocateDevicePath (&DeviceIoProtocol, &DevicePath, &Handle);
63
    if (!EFI_ERROR(Status)) {
64
        Status = BS->HandleProtocol (Handle, &DeviceIoProtocol, (VOID*)GlobalIoFncs);
65
    }
66
 
67
    ASSERT (!EFI_ERROR(Status));
68
    return Status;
69
}
70
 
71
UINT32
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;
80
 
81
    Status = GlobalIoFncs->Io.Read (GlobalIoFncs, Width, (UINT64)Port, 1, &Data);
82
    ASSERT(!EFI_ERROR(Status));
83
    return Data;
84
}
85
 
86
UINT32
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;
95
 
96
    Status = GlobalIoFncs->Io.Write (GlobalIoFncs, Width, (UINT64)Port, 1, &Data);
97
    ASSERT(!EFI_ERROR(Status));
98
    return (UINT32)Data;
99
}
100
 
101
UINT32
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;
110
 
111
    Status = GlobalIoFncs->Pci.Read (GlobalIoFncs, Width, (UINT64)Address, 1, &Data);
112
    ASSERT(!EFI_ERROR(Status));
113
    return Data;
114
}
115
 
116
UINT32
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;
125
 
126
    Status = GlobalIoFncs->Pci.Write (GlobalIoFncs, Width, (UINT64)Address, 1, &Data);
127
    ASSERT(!EFI_ERROR(Status));
128
    return (UINT32)Data;
129
}
130
 
131
 
132