]> git.proxmox.com Git - mirror_edk2.git/blob - OvmfPkg/Library/VirtioMmioDeviceLib/VirtioMmioDevice.h
OvmfPkg/VirtioMmioDeviceLib: Add EFIAPI to VirtioMmioSetQueueAddress
[mirror_edk2.git] / OvmfPkg / Library / VirtioMmioDeviceLib / VirtioMmioDevice.h
1 /** @file
2
3 Internal definitions for the VirtIo MMIO 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_MMIO_DEVICE_INTERNAL_H_
13 #define _VIRTIO_MMIO_DEVICE_INTERNAL_H_
14
15 #include <Protocol/VirtioDevice.h>
16
17 #include <IndustryStandard/Virtio.h>
18
19 #include <Library/DebugLib.h>
20 #include <Library/IoLib.h>
21 #include <Library/UefiLib.h>
22 #include <Library/VirtioMmioDeviceLib.h>
23 #include <Library/MemoryAllocationLib.h>
24
25 #define VIRTIO_MMIO_DEVICE_SIGNATURE SIGNATURE_32 ('V', 'M', 'I', 'O')
26
27 typedef struct {
28 UINT32 Signature;
29 VIRTIO_DEVICE_PROTOCOL VirtioDevice;
30 PHYSICAL_ADDRESS BaseAddress;
31 } VIRTIO_MMIO_DEVICE;
32
33 #define VIRTIO_MMIO_DEVICE_FROM_VIRTIO_DEVICE(Device) \
34 CR (Device, VIRTIO_MMIO_DEVICE, VirtioDevice, VIRTIO_MMIO_DEVICE_SIGNATURE)
35
36 #define VIRTIO_CFG_WRITE(Device, Offset, Val) \
37 (MmioWrite32 (Device->BaseAddress + (Offset), Val))
38 #define VIRTIO_CFG_READ(Device, Offset) \
39 (MmioRead32 (Device->BaseAddress + (Offset)))
40
41 EFI_STATUS
42 EFIAPI
43 VirtioMmioDeviceRead (
44 IN VIRTIO_DEVICE_PROTOCOL *This,
45 IN UINTN FieldOFfset,
46 IN UINTN FieldSize,
47 IN UINTN BufferSize,
48 OUT VOID* Buffer
49 );
50
51 EFI_STATUS
52 EFIAPI
53 VirtioMmioDeviceWrite (
54 IN VIRTIO_DEVICE_PROTOCOL *This,
55 IN UINTN FieldOffset,
56 IN UINTN FieldSize,
57 IN UINT64 Value
58 );
59
60 EFI_STATUS
61 EFIAPI
62 VirtioMmioGetDeviceFeatures (
63 IN VIRTIO_DEVICE_PROTOCOL *This,
64 OUT UINT64 *DeviceFeatures
65 );
66
67 EFI_STATUS
68 EFIAPI
69 VirtioMmioGetQueueSize (
70 IN VIRTIO_DEVICE_PROTOCOL *This,
71 OUT UINT16 *QueueNumMax
72 );
73
74 EFI_STATUS
75 EFIAPI
76 VirtioMmioGetDeviceStatus (
77 IN VIRTIO_DEVICE_PROTOCOL *This,
78 OUT UINT8 *DeviceStatus
79 );
80
81 EFI_STATUS
82 EFIAPI
83 VirtioMmioSetQueueSize (
84 IN VIRTIO_DEVICE_PROTOCOL *This,
85 IN UINT16 QueueSize
86 );
87
88 EFI_STATUS
89 EFIAPI
90 VirtioMmioSetDeviceStatus (
91 IN VIRTIO_DEVICE_PROTOCOL *This,
92 IN UINT8 DeviceStatus
93 );
94
95 EFI_STATUS
96 EFIAPI
97 VirtioMmioSetQueueNotify (
98 IN VIRTIO_DEVICE_PROTOCOL *This,
99 IN UINT16 QueueNotify
100 );
101
102 EFI_STATUS
103 EFIAPI
104 VirtioMmioSetQueueSel (
105 IN VIRTIO_DEVICE_PROTOCOL *This,
106 IN UINT16 Sel
107 );
108
109 EFI_STATUS
110 EFIAPI
111 VirtioMmioSetQueueAddress (
112 IN VIRTIO_DEVICE_PROTOCOL *This,
113 IN VRING *Ring,
114 IN UINT64 RingBaseShift
115 );
116
117 EFI_STATUS
118 EFIAPI
119 VirtioMmioSetQueueAlignment (
120 IN VIRTIO_DEVICE_PROTOCOL *This,
121 IN UINT32 Alignment
122 );
123
124 EFI_STATUS
125 EFIAPI
126 VirtioMmioSetPageSize (
127 IN VIRTIO_DEVICE_PROTOCOL *This,
128 IN UINT32 PageSize
129 );
130
131 EFI_STATUS
132 EFIAPI
133 VirtioMmioSetGuestFeatures (
134 IN VIRTIO_DEVICE_PROTOCOL *This,
135 IN UINT64 Features
136 );
137
138 EFI_STATUS
139 EFIAPI
140 VirtioMmioAllocateSharedPages (
141 IN VIRTIO_DEVICE_PROTOCOL *This,
142 IN UINTN NumPages,
143 OUT VOID **HostAddress
144 );
145
146 VOID
147 EFIAPI
148 VirtioMmioFreeSharedPages (
149 IN VIRTIO_DEVICE_PROTOCOL *This,
150 IN UINTN NumPages,
151 IN VOID *HostAddress
152 );
153
154 EFI_STATUS
155 EFIAPI
156 VirtioMmioMapSharedBuffer (
157 IN VIRTIO_DEVICE_PROTOCOL *This,
158 IN VIRTIO_MAP_OPERATION Operation,
159 IN VOID *HostAddress,
160 IN OUT UINTN *NumberOfBytes,
161 OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
162 OUT VOID **Mapping
163 );
164
165 EFI_STATUS
166 EFIAPI
167 VirtioMmioUnmapSharedBuffer (
168 IN VIRTIO_DEVICE_PROTOCOL *This,
169 IN VOID *Mapping
170 );
171
172 #endif // _VIRTIO_MMIO_DEVICE_INTERNAL_H_