]> git.proxmox.com Git - mirror_edk2.git/blob - OvmfPkg/VirtioPciDeviceDxe/VirtioPciDevice.h
772a03c44697e494816ce09e0608d095f7237f69
[mirror_edk2.git] / OvmfPkg / VirtioPciDeviceDxe / VirtioPciDevice.h
1 /** @file
2
3 Internal definitions for the VirtIo PCI Device driver
4
5 Copyright (C) 2013, ARM Ltd
6 Copyright (c) 2017, AMD Inc, All rights reserved.<BR>
7
8 SPDX-License-Identifier: BSD-2-Clause-Patent
9
10 **/
11
12 #ifndef _VIRTIO_PCI_DEVICE_DXE_H_
13 #define _VIRTIO_PCI_DEVICE_DXE_H_
14
15 #include <Protocol/ComponentName.h>
16 #include <Protocol/DriverBinding.h>
17 #include <Protocol/PciIo.h>
18 #include <Protocol/VirtioDevice.h>
19
20 #include <IndustryStandard/Virtio.h>
21
22 #define VIRTIO_PCI_DEVICE_SIGNATURE SIGNATURE_32 ('V', 'P', 'C', 'I')
23
24 typedef struct {
25 UINT32 Signature;
26 VIRTIO_DEVICE_PROTOCOL VirtioDevice;
27 EFI_PCI_IO_PROTOCOL *PciIo;
28 UINT64 OriginalPciAttributes;
29 UINT32 DeviceSpecificConfigurationOffset;
30 } VIRTIO_PCI_DEVICE;
31
32 #define VIRTIO_PCI_DEVICE_FROM_VIRTIO_DEVICE(Device) \
33 CR (Device, VIRTIO_PCI_DEVICE, VirtioDevice, VIRTIO_PCI_DEVICE_SIGNATURE)
34
35 EFI_STATUS
36 EFIAPI
37 VirtioPciIoRead (
38 IN VIRTIO_PCI_DEVICE *Dev,
39 IN UINTN FieldOffset,
40 IN UINTN FieldSize,
41 IN UINTN BufferSize,
42 OUT VOID *Buffer
43 );
44
45 EFI_STATUS
46 EFIAPI
47 VirtioPciIoWrite (
48 IN VIRTIO_PCI_DEVICE *Dev,
49 IN UINTN FieldOffset,
50 IN UINTN FieldSize,
51 IN UINT64 Value
52 );
53
54 /********************************************
55 * PCI Functions for VIRTIO_DEVICE_PROTOCOL
56 *******************************************/
57 EFI_STATUS
58 EFIAPI
59 VirtioPciDeviceRead (
60 IN VIRTIO_DEVICE_PROTOCOL *This,
61 IN UINTN FieldOffset,
62 IN UINTN FieldSize,
63 IN UINTN BufferSize,
64 OUT VOID *Buffer
65 );
66
67 EFI_STATUS
68 EFIAPI
69 VirtioPciDeviceWrite (
70 IN VIRTIO_DEVICE_PROTOCOL *This,
71 IN UINTN FieldOffset,
72 IN UINTN FieldSize,
73 IN UINT64 Value
74 );
75
76 EFI_STATUS
77 EFIAPI
78 VirtioPciGetDeviceFeatures (
79 IN VIRTIO_DEVICE_PROTOCOL *This,
80 OUT UINT64 *DeviceFeatures
81 );
82
83 EFI_STATUS
84 EFIAPI
85 VirtioPciGetQueueSize (
86 IN VIRTIO_DEVICE_PROTOCOL *This,
87 OUT UINT16 *QueueNumMax
88 );
89
90 EFI_STATUS
91 EFIAPI
92 VirtioPciSetQueueAlignment (
93 IN VIRTIO_DEVICE_PROTOCOL *This,
94 IN UINT32 Alignment
95 );
96
97 EFI_STATUS
98 EFIAPI
99 VirtioPciSetPageSize (
100 IN VIRTIO_DEVICE_PROTOCOL *This,
101 IN UINT32 PageSize
102 );
103
104 EFI_STATUS
105 EFIAPI
106 VirtioPciGetDeviceStatus (
107 IN VIRTIO_DEVICE_PROTOCOL *This,
108 OUT UINT8 *DeviceStatus
109 );
110
111 EFI_STATUS
112 EFIAPI
113 VirtioPciSetGuestFeatures (
114 IN VIRTIO_DEVICE_PROTOCOL *This,
115 IN UINT64 Features
116 );
117
118 EFI_STATUS
119 EFIAPI
120 VirtioPciSetQueueAddress (
121 IN VIRTIO_DEVICE_PROTOCOL *This,
122 IN VRING *Ring,
123 IN UINT64 RingBaseShift
124 );
125
126 EFI_STATUS
127 EFIAPI
128 VirtioPciSetQueueSel (
129 IN VIRTIO_DEVICE_PROTOCOL *This,
130 IN UINT16 Sel
131 );
132
133 EFI_STATUS
134 EFIAPI
135 VirtioPciSetQueueNotify (
136 IN VIRTIO_DEVICE_PROTOCOL *This,
137 IN UINT16 Index
138 );
139
140 EFI_STATUS
141 EFIAPI
142 VirtioPciSetQueueSize (
143 IN VIRTIO_DEVICE_PROTOCOL *This,
144 IN UINT16 Size
145 );
146
147 EFI_STATUS
148 EFIAPI
149 VirtioPciSetDeviceStatus (
150 IN VIRTIO_DEVICE_PROTOCOL *This,
151 IN UINT8 DeviceStatus
152 );
153
154 EFI_STATUS
155 EFIAPI
156 VirtioPciAllocateSharedPages (
157 IN VIRTIO_DEVICE_PROTOCOL *This,
158 IN UINTN NumPages,
159 OUT VOID **HostAddress
160 );
161
162 VOID
163 EFIAPI
164 VirtioPciFreeSharedPages (
165 IN VIRTIO_DEVICE_PROTOCOL *This,
166 IN UINTN NumPages,
167 IN VOID *HostAddress
168 );
169
170 EFI_STATUS
171 EFIAPI
172 VirtioPciMapSharedBuffer (
173 IN VIRTIO_DEVICE_PROTOCOL *This,
174 IN VIRTIO_MAP_OPERATION Operation,
175 IN VOID *HostAddress,
176 IN OUT UINTN *NumberOfBytes,
177 OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
178 OUT VOID **Mapping
179 );
180
181 EFI_STATUS
182 EFIAPI
183 VirtioPciUnmapSharedBuffer (
184 IN VIRTIO_DEVICE_PROTOCOL *This,
185 IN VOID *Mapping
186 );
187
188 #endif // _VIRTIO_PCI_DEVICE_DXE_H_