VirtualBox

source: vbox/trunk/src/VBox/Devices/EFI/Firmware/OvmfPkg/VirtioNetDxe/VirtioNet.h

Last change on this file was 99404, checked in by vboxsync, 21 months ago

Devices/EFI/FirmwareNew: Update to edk2-stable202302 and make it build, bugref:4643

  • Property svn:eol-style set to native
File size: 9.6 KB
Line 
1/** @file
2
3 Internal definitions for the virtio-net driver, which produces Simple Network
4 Protocol instances for virtio-net devices.
5
6 Copyright (C) 2013, Red Hat, Inc.
7 Copyright (c) 2017, AMD Inc, All rights reserved.<BR>
8
9 SPDX-License-Identifier: BSD-2-Clause-Patent
10**/
11
12#ifndef _VIRTIO_NET_DXE_H_
13#define _VIRTIO_NET_DXE_H_
14
15#include <IndustryStandard/VirtioNet.h>
16#include <Library/DebugLib.h>
17#include <Library/VirtioLib.h>
18#include <Protocol/ComponentName.h>
19#include <Protocol/ComponentName2.h>
20#include <Protocol/DevicePath.h>
21#include <Protocol/DriverBinding.h>
22#include <Protocol/SimpleNetwork.h>
23#include <Library/OrderedCollectionLib.h>
24
25#define VNET_SIG SIGNATURE_32 ('V', 'N', 'E', 'T')
26
27//
28// maximum number of pending packets, separately for each direction
29//
30#define VNET_MAX_PENDING 64
31
32//
33// State diagram:
34//
35// | ^
36// | |
37// BindingStart BindingStop
38// +SnpPopulate |
39// ++GetFeatures |
40// | |
41// v |
42// +---------+ virtio-net device is reset, no resources are
43// | stopped | allocated for traffic, but MAC address has
44// +---------+ been retrieved
45// | ^
46// | |
47// SNP.Start SNP.Stop
48// | |
49// v |
50// +---------+
51// | started | functionally identical to stopped
52// +---------+
53// | ^
54// | |
55// SNP.Initialize SNP.Shutdown
56// | |
57// v |
58// +-------------+ Virtio-net setup complete, including DRIVER_OK
59// | initialized | bit. The receive queue is populated with
60// +-------------+ requests; McastIpToMac, GetStatus, Transmit,
61// Receive are callable.
62//
63
64typedef struct {
65 //
66 // Parts of this structure are initialized / torn down in various functions
67 // at various call depths. The table to the right should make it easier to
68 // track them.
69 //
70 // field init function
71 // ------------------ ------------------------------
72 UINT32 Signature; // VirtioNetDriverBindingStart
73 VIRTIO_DEVICE_PROTOCOL *VirtIo; // VirtioNetDriverBindingStart
74 EFI_SIMPLE_NETWORK_PROTOCOL Snp; // VirtioNetSnpPopulate
75 EFI_SIMPLE_NETWORK_MODE Snm; // VirtioNetSnpPopulate
76 EFI_EVENT ExitBoot; // VirtioNetSnpPopulate
77 EFI_DEVICE_PATH_PROTOCOL *MacDevicePath; // VirtioNetDriverBindingStart
78 EFI_HANDLE MacHandle; // VirtioNetDriverBindingStart
79
80 VRING RxRing; // VirtioNetInitRing
81 VOID *RxRingMap; // VirtioRingMap and
82 // VirtioNetInitRing
83 UINT8 *RxBuf; // VirtioNetInitRx
84 UINT16 RxLastUsed; // VirtioNetInitRx
85 UINTN RxBufNrPages; // VirtioNetInitRx
86 EFI_PHYSICAL_ADDRESS RxBufDeviceBase; // VirtioNetInitRx
87 VOID *RxBufMap; // VirtioNetInitRx
88
89 VRING TxRing; // VirtioNetInitRing
90 VOID *TxRingMap; // VirtioRingMap and
91 // VirtioNetInitRing
92 UINT16 TxMaxPending; // VirtioNetInitTx
93 UINT16 TxCurPending; // VirtioNetInitTx
94 UINT16 *TxFreeStack; // VirtioNetInitTx
95 VIRTIO_1_0_NET_REQ *TxSharedReq; // VirtioNetInitTx
96 VOID *TxSharedReqMap; // VirtioNetInitTx
97 UINT16 TxLastUsed; // VirtioNetInitTx
98 ORDERED_COLLECTION *TxBufCollection; // VirtioNetInitTx
99} VNET_DEV;
100
101//
102// In order to avoid duplication of interface documentation, please find all
103// leading comments near the respective function / variable definitions (not
104// the declarations here), which is where your code editor of choice takes you
105// anyway when jumping to a function.
106//
107
108//
109// utility macros
110//
111#define VIRTIO_NET_FROM_SNP(SnpPointer) \
112 CR (SnpPointer, VNET_DEV, Snp, VNET_SIG)
113
114#define VIRTIO_CFG_WRITE(Dev, Field, Value) ((Dev)->VirtIo->WriteDevice ( \
115 (Dev)->VirtIo, \
116 OFFSET_OF_VNET (Field), \
117 SIZE_OF_VNET (Field), \
118 (Value) \
119 ))
120
121#define VIRTIO_CFG_READ(Dev, Field, Pointer) ((Dev)->VirtIo->ReadDevice ( \
122 (Dev)->VirtIo, \
123 OFFSET_OF_VNET (Field), \
124 SIZE_OF_VNET (Field), \
125 sizeof *(Pointer), \
126 (Pointer) \
127 ))
128
129//
130// component naming
131//
132extern EFI_COMPONENT_NAME_PROTOCOL gVirtioNetComponentName;
133extern EFI_COMPONENT_NAME2_PROTOCOL gVirtioNetComponentName2;
134
135//
136// driver binding
137//
138extern EFI_DRIVER_BINDING_PROTOCOL gVirtioNetDriverBinding;
139
140//
141// member functions implementing the Simple Network Protocol
142//
143EFI_STATUS
144EFIAPI
145VirtioNetStart (
146 IN EFI_SIMPLE_NETWORK_PROTOCOL *This
147 );
148
149EFI_STATUS
150EFIAPI
151VirtioNetStop (
152 IN EFI_SIMPLE_NETWORK_PROTOCOL *This
153 );
154
155EFI_STATUS
156EFIAPI
157VirtioNetInitialize (
158 IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
159 IN UINTN ExtraRxBufferSize OPTIONAL,
160 IN UINTN ExtraTxBufferSize OPTIONAL
161 );
162
163EFI_STATUS
164EFIAPI
165VirtioNetReset (
166 IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
167 IN BOOLEAN ExtendedVerification
168 );
169
170EFI_STATUS
171EFIAPI
172VirtioNetShutdown (
173 IN EFI_SIMPLE_NETWORK_PROTOCOL *This
174 );
175
176EFI_STATUS
177EFIAPI
178VirtioNetReceiveFilters (
179 IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
180 IN UINT32 Enable,
181 IN UINT32 Disable,
182 IN BOOLEAN ResetMCastFilter,
183 IN UINTN MCastFilterCnt OPTIONAL,
184 IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL
185 );
186
187EFI_STATUS
188EFIAPI
189VirtioNetStationAddress (
190 IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
191 IN BOOLEAN Reset,
192 IN EFI_MAC_ADDRESS *New OPTIONAL
193 );
194
195EFI_STATUS
196EFIAPI
197VirtioNetStatistics (
198 IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
199 IN BOOLEAN Reset,
200 IN OUT UINTN *StatisticsSize OPTIONAL,
201 OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL
202 );
203
204EFI_STATUS
205EFIAPI
206VirtioNetMcastIpToMac (
207 IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
208 IN BOOLEAN IPv6,
209 IN EFI_IP_ADDRESS *Ip,
210 OUT EFI_MAC_ADDRESS *Mac
211 );
212
213EFI_STATUS
214EFIAPI
215VirtioNetNvData (
216 IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
217 IN BOOLEAN ReadWrite,
218 IN UINTN Offset,
219 IN UINTN BufferSize,
220 IN OUT VOID *Buffer
221 );
222
223EFI_STATUS
224EFIAPI
225VirtioNetGetStatus (
226 IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
227 OUT UINT32 *InterruptStatus OPTIONAL,
228 OUT VOID **TxBuf OPTIONAL
229 );
230
231EFI_STATUS
232EFIAPI
233VirtioNetTransmit (
234 IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
235 IN UINTN HeaderSize,
236 IN UINTN BufferSize,
237 IN /* +OUT! */ VOID *Buffer,
238 IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
239 IN EFI_MAC_ADDRESS *DestAddr OPTIONAL,
240 IN UINT16 *Protocol OPTIONAL
241 );
242
243EFI_STATUS
244EFIAPI
245VirtioNetReceive (
246 IN EFI_SIMPLE_NETWORK_PROTOCOL *This,
247 OUT UINTN *HeaderSize OPTIONAL,
248 IN OUT UINTN *BufferSize,
249 OUT VOID *Buffer,
250 OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL,
251 OUT EFI_MAC_ADDRESS *DestAddr OPTIONAL,
252 OUT UINT16 *Protocol OPTIONAL
253 );
254
255//
256// utility functions shared by various SNP member functions
257//
258VOID
259EFIAPI
260VirtioNetShutdownRx (
261 IN OUT VNET_DEV *Dev
262 );
263
264VOID
265EFIAPI
266VirtioNetShutdownTx (
267 IN OUT VNET_DEV *Dev
268 );
269
270VOID
271EFIAPI
272VirtioNetUninitRing (
273 IN OUT VNET_DEV *Dev,
274 IN OUT VRING *Ring,
275 IN VOID *RingMap
276 );
277
278//
279// utility functions to map caller-supplied Tx buffer system physical address
280// to a device address and vice versa
281//
282EFI_STATUS
283EFIAPI
284VirtioNetMapTxBuf (
285 IN VNET_DEV *Dev,
286 IN VOID *Buffer,
287 IN UINTN NumberOfBytes,
288 OUT EFI_PHYSICAL_ADDRESS *DeviceAddress
289 );
290
291EFI_STATUS
292EFIAPI
293VirtioNetUnmapTxBuf (
294 IN VNET_DEV *Dev,
295 OUT VOID **Buffer,
296 IN EFI_PHYSICAL_ADDRESS DeviceAddress
297 );
298
299INTN
300EFIAPI
301VirtioNetTxBufMapInfoCompare (
302 IN CONST VOID *UserStruct1,
303 IN CONST VOID *UserStruct2
304 );
305
306INTN
307EFIAPI
308VirtioNetTxBufDeviceAddressCompare (
309 IN CONST VOID *StandaloneKey,
310 IN CONST VOID *UserStruct
311 );
312
313//
314// event callbacks
315//
316VOID
317EFIAPI
318VirtioNetIsPacketAvailable (
319 IN EFI_EVENT Event,
320 IN VOID *Context
321 );
322
323VOID
324EFIAPI
325VirtioNetExitBoot (
326 IN EFI_EVENT Event,
327 IN VOID *Context
328 );
329
330#endif // _VIRTIO_NET_DXE_H_
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette