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