/** @file
Internal definitions for the VirtIo PCI Device driver
Copyright (C) 2013, ARM Ltd
Copyright (c) 2017, AMD Inc, All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _VIRTIO_PCI_DEVICE_DXE_H_
#define _VIRTIO_PCI_DEVICE_DXE_H_
#include
#include
#include
#include
#include
#define VIRTIO_PCI_DEVICE_SIGNATURE SIGNATURE_32 ('V', 'P', 'C', 'I')
typedef struct {
UINT32 Signature;
VIRTIO_DEVICE_PROTOCOL VirtioDevice;
EFI_PCI_IO_PROTOCOL *PciIo;
UINT64 OriginalPciAttributes;
UINT32 DeviceSpecificConfigurationOffset;
} VIRTIO_PCI_DEVICE;
#define VIRTIO_PCI_DEVICE_FROM_VIRTIO_DEVICE(Device) \
CR (Device, VIRTIO_PCI_DEVICE, VirtioDevice, VIRTIO_PCI_DEVICE_SIGNATURE)
EFI_STATUS
EFIAPI
VirtioPciIoRead (
IN VIRTIO_PCI_DEVICE *Dev,
IN UINTN FieldOffset,
IN UINTN FieldSize,
IN UINTN BufferSize,
OUT VOID *Buffer
);
EFI_STATUS
EFIAPI
VirtioPciIoWrite (
IN VIRTIO_PCI_DEVICE *Dev,
IN UINTN FieldOffset,
IN UINTN FieldSize,
IN UINT64 Value
);
/********************************************
* PCI Functions for VIRTIO_DEVICE_PROTOCOL
*******************************************/
EFI_STATUS
EFIAPI
VirtioPciDeviceRead (
IN VIRTIO_DEVICE_PROTOCOL *This,
IN UINTN FieldOffset,
IN UINTN FieldSize,
IN UINTN BufferSize,
OUT VOID *Buffer
);
EFI_STATUS
EFIAPI
VirtioPciDeviceWrite (
IN VIRTIO_DEVICE_PROTOCOL *This,
IN UINTN FieldOffset,
IN UINTN FieldSize,
IN UINT64 Value
);
EFI_STATUS
EFIAPI
VirtioPciGetDeviceFeatures (
IN VIRTIO_DEVICE_PROTOCOL *This,
OUT UINT64 *DeviceFeatures
);
EFI_STATUS
EFIAPI
VirtioPciGetQueueSize (
IN VIRTIO_DEVICE_PROTOCOL *This,
OUT UINT16 *QueueNumMax
);
EFI_STATUS
EFIAPI
VirtioPciSetQueueAlignment (
IN VIRTIO_DEVICE_PROTOCOL *This,
IN UINT32 Alignment
);
EFI_STATUS
EFIAPI
VirtioPciSetPageSize (
IN VIRTIO_DEVICE_PROTOCOL *This,
IN UINT32 PageSize
);
EFI_STATUS
EFIAPI
VirtioPciGetDeviceStatus (
IN VIRTIO_DEVICE_PROTOCOL *This,
OUT UINT8 *DeviceStatus
);
EFI_STATUS
EFIAPI
VirtioPciSetGuestFeatures (
IN VIRTIO_DEVICE_PROTOCOL *This,
IN UINT64 Features
);
EFI_STATUS
EFIAPI
VirtioPciSetQueueAddress (
IN VIRTIO_DEVICE_PROTOCOL *This,
IN VRING *Ring,
IN UINT64 RingBaseShift
);
EFI_STATUS
EFIAPI
VirtioPciSetQueueSel (
IN VIRTIO_DEVICE_PROTOCOL *This,
IN UINT16 Sel
);
EFI_STATUS
EFIAPI
VirtioPciSetQueueNotify (
IN VIRTIO_DEVICE_PROTOCOL *This,
IN UINT16 Index
);
EFI_STATUS
EFIAPI
VirtioPciSetQueueSize (
IN VIRTIO_DEVICE_PROTOCOL *This,
IN UINT16 Size
);
EFI_STATUS
EFIAPI
VirtioPciSetDeviceStatus (
IN VIRTIO_DEVICE_PROTOCOL *This,
IN UINT8 DeviceStatus
);
EFI_STATUS
EFIAPI
VirtioPciAllocateSharedPages (
IN VIRTIO_DEVICE_PROTOCOL *This,
IN UINTN NumPages,
OUT VOID **HostAddress
);
VOID
EFIAPI
VirtioPciFreeSharedPages (
IN VIRTIO_DEVICE_PROTOCOL *This,
IN UINTN NumPages,
IN VOID *HostAddress
);
EFI_STATUS
EFIAPI
VirtioPciMapSharedBuffer (
IN VIRTIO_DEVICE_PROTOCOL *This,
IN VIRTIO_MAP_OPERATION Operation,
IN VOID *HostAddress,
IN OUT UINTN *NumberOfBytes,
OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
OUT VOID **Mapping
);
EFI_STATUS
EFIAPI
VirtioPciUnmapSharedBuffer (
IN VIRTIO_DEVICE_PROTOCOL *This,
IN VOID *Mapping
);
#endif // _VIRTIO_PCI_DEVICE_DXE_H_