• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 UINT32                *DeviceFeatures
87   );
88 
89 EFI_STATUS
90 EFIAPI
91 VirtioPciGetQueueAddress (
92   IN  VIRTIO_DEVICE_PROTOCOL *This,
93   OUT UINT32                 *QueueAddress
94   );
95 
96 EFI_STATUS
97 EFIAPI
98 VirtioPciGetQueueSize (
99   IN  VIRTIO_DEVICE_PROTOCOL  *This,
100   OUT UINT16                  *QueueNumMax
101   );
102 
103 EFI_STATUS
104 EFIAPI
105 VirtioPciSetQueueAlignment (
106   VIRTIO_DEVICE_PROTOCOL         *This,
107   UINT32                         Alignment
108   );
109 
110 EFI_STATUS
111 EFIAPI
112 VirtioPciSetPageSize (
113   VIRTIO_DEVICE_PROTOCOL         *This,
114   UINT32                         PageSize
115   );
116 
117 EFI_STATUS
118 EFIAPI
119 VirtioPciGetDeviceStatus (
120   IN  VIRTIO_DEVICE_PROTOCOL  *This,
121   OUT UINT8                   *DeviceStatus
122   );
123 
124 EFI_STATUS
125 EFIAPI
126 VirtioPciSetGuestFeatures (
127   IN VIRTIO_DEVICE_PROTOCOL  *This,
128   IN UINT32                   Features
129   );
130 
131 EFI_STATUS
132 EFIAPI
133 VirtioPciSetQueueAddress (
134   VIRTIO_DEVICE_PROTOCOL         *This,
135   UINT32                         Address
136   );
137 
138 EFI_STATUS
139 EFIAPI
140 VirtioPciSetQueueSel (
141   VIRTIO_DEVICE_PROTOCOL         *This,
142   UINT16                         Sel
143   );
144 
145 EFI_STATUS
146 EFIAPI
147 VirtioPciSetQueueNotify (
148   VIRTIO_DEVICE_PROTOCOL         *This,
149   UINT16                         Index
150   );
151 
152 EFI_STATUS
153 EFIAPI
154 VirtioPciSetQueueSize (
155   VIRTIO_DEVICE_PROTOCOL         *This,
156   UINT16                         Size
157   );
158 
159 EFI_STATUS
160 EFIAPI
161 VirtioPciSetDeviceStatus (
162   VIRTIO_DEVICE_PROTOCOL         *This,
163   UINT8                          DeviceStatus
164   );
165 
166 #endif // _VIRTIO_PCI_DEVICE_DXE_H_
167