/** @file | |
Private definitions of the VirtIo 1.0 driver. | |
Copyright (C) 2016, Red Hat, Inc. | |
This program and the accompanying materials are licensed and made available | |
under the terms and conditions of the BSD License which accompanies this | |
distribution. The full text of the license may be found at | |
http://opensource.org/licenses/bsd-license.php | |
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT | |
WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
**/ | |
#ifndef _VIRTIO_1_0_DXE_H_ | |
#define _VIRTIO_1_0_DXE_H_ | |
#include <Protocol/PciIo.h> | |
#include <Protocol/VirtioDevice.h> | |
#define VIRTIO_1_0_SIGNATURE SIGNATURE_32 ('V', 'I', 'O', '1') | |
// | |
// Type of the PCI BAR that contains a VirtIo 1.0 config structure. | |
// | |
typedef enum { | |
Virtio10BarTypeMem, | |
Virtio10BarTypeIo | |
} VIRTIO_1_0_BAR_TYPE; | |
// | |
// The type below defines the access to a VirtIo 1.0 config structure. | |
// | |
typedef struct { | |
BOOLEAN Exists; // The device exposes this structure | |
VIRTIO_1_0_BAR_TYPE BarType; | |
UINT8 Bar; | |
UINT32 Offset; // Offset into BAR where structure starts | |
UINT32 Length; // Length of structure in BAR. | |
} VIRTIO_1_0_CONFIG; | |
typedef struct { | |
UINT32 Signature; | |
VIRTIO_DEVICE_PROTOCOL VirtIo; | |
EFI_PCI_IO_PROTOCOL *PciIo; | |
UINT64 OriginalPciAttributes; | |
VIRTIO_1_0_CONFIG CommonConfig; // Common settings | |
VIRTIO_1_0_CONFIG NotifyConfig; // Notifications | |
UINT32 NotifyOffsetMultiplier; | |
VIRTIO_1_0_CONFIG SpecificConfig; // Device specific settings | |
} VIRTIO_1_0_DEV; | |
#define VIRTIO_1_0_FROM_VIRTIO_DEVICE(Device) \ | |
CR (Device, VIRTIO_1_0_DEV, VirtIo, VIRTIO_1_0_SIGNATURE) | |
#endif // _VIRTIO_1_0_DXE_H_ |