3 Internal definitions for the VirtIo MMIO Device driver
5 Copyright (C) 2013, ARM Ltd
6 Copyright (C) 2017, AMD Inc. All rights reserved.<BR>
8 SPDX-License-Identifier: BSD-2-Clause-Patent
12 #ifndef _VIRTIO_MMIO_DEVICE_INTERNAL_H_
13 #define _VIRTIO_MMIO_DEVICE_INTERNAL_H_
15 #include <Protocol/VirtioDevice.h>
17 #include <IndustryStandard/Virtio.h>
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>
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
34 VIRTIO_DEVICE_PROTOCOL VirtioDevice
;
35 PHYSICAL_ADDRESS BaseAddress
;
38 #define VIRTIO_MMIO_DEVICE_FROM_VIRTIO_DEVICE(Device) \
39 CR (Device, VIRTIO_MMIO_DEVICE, VirtioDevice, VIRTIO_MMIO_DEVICE_SIGNATURE)
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)))
48 VirtioMmioDeviceRead (
49 IN VIRTIO_DEVICE_PROTOCOL
*This
,
58 VirtioMmioDeviceWrite (
59 IN VIRTIO_DEVICE_PROTOCOL
*This
,
67 VirtioMmioGetDeviceFeatures (
68 IN VIRTIO_DEVICE_PROTOCOL
*This
,
69 OUT UINT64
*DeviceFeatures
74 VirtioMmioGetQueueSize (
75 IN VIRTIO_DEVICE_PROTOCOL
*This
,
76 OUT UINT16
*QueueNumMax
81 VirtioMmioGetDeviceStatus (
82 IN VIRTIO_DEVICE_PROTOCOL
*This
,
83 OUT UINT8
*DeviceStatus
88 VirtioMmioSetQueueSize (
89 IN VIRTIO_DEVICE_PROTOCOL
*This
,
95 VirtioMmioSetDeviceStatus (
96 IN VIRTIO_DEVICE_PROTOCOL
*This
,
102 VirtioMmioSetQueueNotify (
103 IN VIRTIO_DEVICE_PROTOCOL
*This
,
104 IN UINT16 QueueNotify
109 VirtioMmioSetQueueSel (
110 IN VIRTIO_DEVICE_PROTOCOL
*This
,
116 VirtioMmioSetQueueAddress (
117 IN VIRTIO_DEVICE_PROTOCOL
*This
,
119 IN UINT64 RingBaseShift
124 VirtioMmioSetQueueAlignment (
125 IN VIRTIO_DEVICE_PROTOCOL
*This
,
131 VirtioMmioSetPageSize (
132 IN VIRTIO_DEVICE_PROTOCOL
*This
,
138 VirtioMmioSetGuestFeatures (
139 IN VIRTIO_DEVICE_PROTOCOL
*This
,
145 VirtioMmioAllocateSharedPages (
146 IN VIRTIO_DEVICE_PROTOCOL
*This
,
148 OUT VOID
**HostAddress
153 VirtioMmioFreeSharedPages (
154 IN VIRTIO_DEVICE_PROTOCOL
*This
,
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
,
172 VirtioMmioUnmapSharedBuffer (
173 IN VIRTIO_DEVICE_PROTOCOL
*This
,
177 #endif // _VIRTIO_MMIO_DEVICE_INTERNAL_H_