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
33 VIRTIO_DEVICE_PROTOCOL VirtioDevice
;
34 PHYSICAL_ADDRESS BaseAddress
;
37 #define VIRTIO_MMIO_DEVICE_FROM_VIRTIO_DEVICE(Device) \
38 CR (Device, VIRTIO_MMIO_DEVICE, VirtioDevice, VIRTIO_MMIO_DEVICE_SIGNATURE)
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)))
47 VirtioMmioDeviceRead (
48 IN VIRTIO_DEVICE_PROTOCOL
*This
,
57 VirtioMmioDeviceWrite (
58 IN VIRTIO_DEVICE_PROTOCOL
*This
,
66 VirtioMmioGetDeviceFeatures (
67 IN VIRTIO_DEVICE_PROTOCOL
*This
,
68 OUT UINT64
*DeviceFeatures
73 VirtioMmioGetQueueSize (
74 IN VIRTIO_DEVICE_PROTOCOL
*This
,
75 OUT UINT16
*QueueNumMax
80 VirtioMmioGetDeviceStatus (
81 IN VIRTIO_DEVICE_PROTOCOL
*This
,
82 OUT UINT8
*DeviceStatus
87 VirtioMmioSetQueueSize (
88 IN VIRTIO_DEVICE_PROTOCOL
*This
,
94 VirtioMmioSetDeviceStatus (
95 IN VIRTIO_DEVICE_PROTOCOL
*This
,
101 VirtioMmioSetQueueNotify (
102 IN VIRTIO_DEVICE_PROTOCOL
*This
,
103 IN UINT16 QueueNotify
108 VirtioMmioSetQueueSel (
109 IN VIRTIO_DEVICE_PROTOCOL
*This
,
115 VirtioMmioSetQueueAddress (
116 IN VIRTIO_DEVICE_PROTOCOL
*This
,
118 IN UINT64 RingBaseShift
123 VirtioMmioSetQueueAlignment (
124 IN VIRTIO_DEVICE_PROTOCOL
*This
,
130 VirtioMmioSetPageSize (
131 IN VIRTIO_DEVICE_PROTOCOL
*This
,
137 VirtioMmioSetGuestFeatures (
138 IN VIRTIO_DEVICE_PROTOCOL
*This
,
144 VirtioMmioAllocateSharedPages (
145 IN VIRTIO_DEVICE_PROTOCOL
*This
,
147 OUT VOID
**HostAddress
152 VirtioMmioFreeSharedPages (
153 IN VIRTIO_DEVICE_PROTOCOL
*This
,
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
,
171 VirtioMmioUnmapSharedBuffer (
172 IN VIRTIO_DEVICE_PROTOCOL
*This
,
176 #endif // _VIRTIO_MMIO_DEVICE_INTERNAL_H_