blob: 132f0fb61c3807bfa9ebdb035fddc52b8be8a85e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
|
/** @file
Super I/O specific header.
Copyright (c) 2010 - 2019 Intel Corporation. All rights reserved. <BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _SIO_H_
#define _SIO_H_
#include "Register.h"
typedef
UINT8
(EFIAPI *LOCAL_IO_WRITE8) (
IN UINTN Port,
IN UINT8 Value
);
#define RESOURCE_IO BIT0
#define RESOURCE_IRQ BIT1
#define RESOURCE_DMA BIT2
#define RESOURCE_MEM BIT3
#define DEVICE_ENABLED 0x01
#define DEVICE_INFO_END { { 0xFFFFFFFF, 0xFFFFFFFF } }
#pragma pack(1)
typedef struct {
EFI_ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR Io;
EFI_ACPI_IRQ_NOFLAG_DESCRIPTOR Irq;
EFI_ACPI_END_TAG_DESCRIPTOR End;
} ACPI_SIO_RESOURCES_IO_IRQ;
#pragma pack()
typedef struct {
UINT32 HID;
UINT32 UID;
} EFI_SIO_ACPI_DEVICE_ID;
typedef struct {
EFI_SIO_ACPI_DEVICE_ID Device;
UINT8 DeviceId;
UINT8 ResourceMask;
ACPI_RESOURCE_HEADER_PTR Resources;
ACPI_RESOURCE_HEADER_PTR PossibleResources;
} DEVICE_INFO;
typedef struct {
UINT8 Segment;
UINT8 Bus;
UINT8 Device;
UINT8 Funtion;
} SIO_PCI_ISA_BRIDGE_DEVICE_INFO;
/**
Return the supported devices.
@param[out] Devices Pointer to pointer of EFI_SIO_ACPI_DEVICE_ID.
Caller is responsible to free the buffer.
@param[out] Count Pointer to UINTN holding the device count.
**/
VOID
DeviceGetList (
OUT EFI_SIO_ACPI_DEVICE_ID **Devices,
OUT UINTN *Count
);
/**
Program the SIO chip to enable the specified device using the default resource.
@param[in] Device Pointer to EFI_SIO_ACPI_DEVICE_ID.
**/
VOID
DeviceEnable (
IN EFI_SIO_ACPI_DEVICE_ID *Device
);
/**
Get the possible ACPI resources for specified device.
@param[in] Device Pointer to EFI_SIO_ACPI_DEVICE_ID.
@param[out] Resources Pointer to ACPI_RESOURCE_HEADER_PTR.
@retval EFI_SUCCESS The resources are returned successfully.
**/
EFI_STATUS
DevicePossibleResources (
IN EFI_SIO_ACPI_DEVICE_ID *Device,
OUT ACPI_RESOURCE_HEADER_PTR *Resources
);
/**
Set the ACPI resources for specified device.
The SIO chip is programmed to use the new resources and the
resources setting are saved. The function assumes the resources
are valid.
@param[in] Device Pointer to EFI_SIO_ACPI_DEVICE_ID.
@param[in] Resources ACPI_RESOURCE_HEADER_PTR.
@retval EFI_SUCCESS The resources are set successfully.
**/
EFI_STATUS
DeviceSetResources (
IN EFI_SIO_ACPI_DEVICE_ID *Device,
IN ACPI_RESOURCE_HEADER_PTR Resources
);
/**
Get the ACPI resources for specified device.
@param[in] Device Pointer to EFI_SIO_ACPI_DEVICE_ID.
@param[out] Resources Pointer to ACPI_RESOURCE_HEADER_PTR.
@retval EFI_SUCCESS The resources are returned successfully.
**/
EFI_STATUS
DeviceGetResources (
IN EFI_SIO_ACPI_DEVICE_ID *Device,
OUT ACPI_RESOURCE_HEADER_PTR *Resources
);
/**
Program the SIO chip to enter the configure mode.
**/
VOID
EnterConfigMode (
VOID
);
/**
Program the SIO chip to exit the configure mode.
**/
VOID
ExitConfigMode (
VOID
);
/**
Perform a 8-bit I/O write to SIO register.
@param[in] Index The register index.
@param[in] Data The value to write to register.
**/
VOID
WriteRegister (
IN UINT8 Index,
IN UINT8 Data
);
/**
Perform a 8-bit I/O read from SIO register.
@param[in] Index The register index.
@retval Value The value written to the register.
**/
UINT8
ReadRegister (
IN UINT8 Index
);
//
// Prototypes for the sio internal function
//
//
// Internal function
//
/**
Find Super I/O controller.
@retval EFI_SUCCESS Super I/O controller exists.
@retval EFI_UNSUPPORTED Super I/O controller does not exist.
**/
EFI_STATUS
SioInit (
VOID
);
#endif
|