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 This program and the accompanying materials are licensed and made available
9 under the terms and conditions of the BSD License which accompanies this
10 distribution. The full text of the license may be found at
11 http://opensource.org/licenses/bsd-license.php
13 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT
14 WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
18 #ifndef _VIRTIO_MMIO_DEVICE_INTERNAL_H_
19 #define _VIRTIO_MMIO_DEVICE_INTERNAL_H_
21 #include <Protocol/VirtioDevice.h>
23 #include <IndustryStandard/Virtio.h>
25 #include <Library/DebugLib.h>
26 #include <Library/IoLib.h>
27 #include <Library/UefiLib.h>
28 #include <Library/VirtioMmioDeviceLib.h>
29 #include <Library/MemoryAllocationLib.h>
31 #define VIRTIO_MMIO_DEVICE_SIGNATURE SIGNATURE_32 ('V', 'M', 'I', 'O')
35 VIRTIO_DEVICE_PROTOCOL VirtioDevice
;
36 PHYSICAL_ADDRESS BaseAddress
;
39 #define VIRTIO_MMIO_DEVICE_FROM_VIRTIO_DEVICE(Device) \
40 CR (Device, VIRTIO_MMIO_DEVICE, VirtioDevice, VIRTIO_MMIO_DEVICE_SIGNATURE)
42 #define VIRTIO_CFG_WRITE(Device, Offset, Val) \
43 (MmioWrite32 (Device->BaseAddress + (Offset), Val))
44 #define VIRTIO_CFG_READ(Device, Offset) \
45 (MmioRead32 (Device->BaseAddress + (Offset)))
49 VirtioMmioDeviceRead (
50 IN VIRTIO_DEVICE_PROTOCOL
*This
,
59 VirtioMmioDeviceWrite (
60 IN VIRTIO_DEVICE_PROTOCOL
*This
,
68 VirtioMmioGetDeviceFeatures (
69 IN VIRTIO_DEVICE_PROTOCOL
*This
,
70 OUT UINT64
*DeviceFeatures
75 VirtioMmioGetQueueSize (
76 IN VIRTIO_DEVICE_PROTOCOL
*This
,
77 OUT UINT16
*QueueNumMax
82 VirtioMmioGetDeviceStatus (
83 IN VIRTIO_DEVICE_PROTOCOL
*This
,
84 OUT UINT8
*DeviceStatus
89 VirtioMmioSetQueueSize (
90 IN VIRTIO_DEVICE_PROTOCOL
*This
,
96 VirtioMmioSetDeviceStatus (
97 IN VIRTIO_DEVICE_PROTOCOL
*This
,
103 VirtioMmioSetQueueNotify (
104 IN VIRTIO_DEVICE_PROTOCOL
*This
,
105 IN UINT16 QueueNotify
110 VirtioMmioSetQueueSel (
111 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_