1 /** @file 2 3 Internal definitions for the VirtIo PCI Device driver 4 5 Copyright (C) 2013, ARM Ltd 6 7 This program and the accompanying materials are licensed and made available 8 under the terms and conditions of the BSD License which accompanies this 9 distribution. The full text of the license may be found at 10 http://opensource.org/licenses/bsd-license.php 11 12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT 13 WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 14 15 **/ 16 17 #ifndef _VIRTIO_PCI_DEVICE_DXE_H_ 18 #define _VIRTIO_PCI_DEVICE_DXE_H_ 19 20 #include <Protocol/ComponentName.h> 21 #include <Protocol/DriverBinding.h> 22 #include <Protocol/PciIo.h> 23 #include <Protocol/VirtioDevice.h> 24 25 #include <IndustryStandard/Virtio.h> 26 27 #define VIRTIO_PCI_DEVICE_SIGNATURE SIGNATURE_32 ('V', 'P', 'C', 'I') 28 29 typedef struct { 30 UINT32 Signature; 31 VIRTIO_DEVICE_PROTOCOL VirtioDevice; 32 EFI_PCI_IO_PROTOCOL *PciIo; 33 UINT64 OriginalPciAttributes; 34 UINT32 DeviceSpecificConfigurationOffset; 35 } VIRTIO_PCI_DEVICE; 36 37 #define VIRTIO_PCI_DEVICE_FROM_VIRTIO_DEVICE(Device) \ 38 CR (Device, VIRTIO_PCI_DEVICE, VirtioDevice, VIRTIO_PCI_DEVICE_SIGNATURE) 39 40 41 EFI_STATUS 42 EFIAPI 43 VirtioPciIoRead ( 44 IN VIRTIO_PCI_DEVICE *Dev, 45 IN UINTN FieldOffset, 46 IN UINTN FieldSize, 47 IN UINTN BufferSize, 48 OUT VOID *Buffer 49 ); 50 51 EFI_STATUS 52 EFIAPI 53 VirtioPciIoWrite ( 54 IN VIRTIO_PCI_DEVICE *Dev, 55 IN UINTN FieldOffset, 56 IN UINTN FieldSize, 57 IN UINT64 Value 58 ); 59 60 /******************************************** 61 * PCI Functions for VIRTIO_DEVICE_PROTOCOL 62 *******************************************/ 63 EFI_STATUS 64 EFIAPI 65 VirtioPciDeviceRead ( 66 IN VIRTIO_DEVICE_PROTOCOL *This, 67 IN UINTN FieldOffset, 68 IN UINTN FieldSize, 69 IN UINTN BufferSize, 70 OUT VOID *Buffer 71 ); 72 73 EFI_STATUS 74 EFIAPI 75 VirtioPciDeviceWrite ( 76 IN VIRTIO_DEVICE_PROTOCOL *This, 77 IN UINTN FieldOffset, 78 IN UINTN FieldSize, 79 IN UINT64 Value 80 ); 81 82 EFI_STATUS 83 EFIAPI 84 VirtioPciGetDeviceFeatures ( 85 IN VIRTIO_DEVICE_PROTOCOL *This, 86 OUT UINT64 *DeviceFeatures 87 ); 88 89 EFI_STATUS 90 EFIAPI 91 VirtioPciGetQueueSize ( 92 IN VIRTIO_DEVICE_PROTOCOL *This, 93 OUT UINT16 *QueueNumMax 94 ); 95 96 EFI_STATUS 97 EFIAPI 98 VirtioPciSetQueueAlignment ( 99 VIRTIO_DEVICE_PROTOCOL *This, 100 UINT32 Alignment 101 ); 102 103 EFI_STATUS 104 EFIAPI 105 VirtioPciSetPageSize ( 106 VIRTIO_DEVICE_PROTOCOL *This, 107 UINT32 PageSize 108 ); 109 110 EFI_STATUS 111 EFIAPI 112 VirtioPciGetDeviceStatus ( 113 IN VIRTIO_DEVICE_PROTOCOL *This, 114 OUT UINT8 *DeviceStatus 115 ); 116 117 EFI_STATUS 118 EFIAPI 119 VirtioPciSetGuestFeatures ( 120 IN VIRTIO_DEVICE_PROTOCOL *This, 121 IN UINT64 Features 122 ); 123 124 EFI_STATUS 125 EFIAPI 126 VirtioPciSetQueueAddress ( 127 IN VIRTIO_DEVICE_PROTOCOL *This, 128 IN VRING *Ring 129 ); 130 131 EFI_STATUS 132 EFIAPI 133 VirtioPciSetQueueSel ( 134 VIRTIO_DEVICE_PROTOCOL *This, 135 UINT16 Sel 136 ); 137 138 EFI_STATUS 139 EFIAPI 140 VirtioPciSetQueueNotify ( 141 VIRTIO_DEVICE_PROTOCOL *This, 142 UINT16 Index 143 ); 144 145 EFI_STATUS 146 EFIAPI 147 VirtioPciSetQueueSize ( 148 VIRTIO_DEVICE_PROTOCOL *This, 149 UINT16 Size 150 ); 151 152 EFI_STATUS 153 EFIAPI 154 VirtioPciSetDeviceStatus ( 155 VIRTIO_DEVICE_PROTOCOL *This, 156 UINT8 DeviceStatus 157 ); 158 159 #endif // _VIRTIO_PCI_DEVICE_DXE_H_ 160