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