]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/VirtioNetDxe/VirtioNet.h
OvmfPkg: Apply uncrustify changes
[mirror_edk2.git] / OvmfPkg / VirtioNetDxe / VirtioNet.h
index 6762fc9d1d6e831ef770374a7a6c27537b2efc42..719c5751320a2912216690211fcd51a0336dbde0 100644 (file)
@@ -4,14 +4,9 @@
   Protocol instances for virtio-net devices.\r
 \r
   Copyright (C) 2013, Red Hat, Inc.\r
+  Copyright (c) 2017, AMD Inc, All rights reserved.<BR>\r
 \r
-  This program and the accompanying materials are licensed and made available\r
-  under the terms and conditions of the BSD License which accompanies this\r
-  distribution. The full text of the license may be found at\r
-  http://opensource.org/licenses/bsd-license.php\r
-\r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT\r
-  WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 **/\r
 \r
 #ifndef _VIRTIO_NET_DXE_H_\r
 #include <Protocol/DevicePath.h>\r
 #include <Protocol/DriverBinding.h>\r
 #include <Protocol/SimpleNetwork.h>\r
+#include <Library/OrderedCollectionLib.h>\r
 \r
-#define VNET_SIG SIGNATURE_32 ('V', 'N', 'E', 'T')\r
+#define VNET_SIG  SIGNATURE_32 ('V', 'N', 'E', 'T')\r
 \r
 //\r
 // maximum number of pending packets, separately for each direction\r
 //\r
-#define VNET_MAX_PENDING 64\r
+#define VNET_MAX_PENDING  64\r
 \r
 //\r
 // State diagram:\r
@@ -73,31 +69,35 @@ typedef struct {
   //\r
   //                          field              init function\r
   //                          ------------------ ------------------------------\r
-  UINT32                      Signature;         // VirtioNetDriverBindingStart\r
-  VIRTIO_DEVICE_PROTOCOL      *VirtIo;           // VirtioNetDriverBindingStart\r
-  EFI_SIMPLE_NETWORK_PROTOCOL Snp;               // VirtioNetSnpPopulate\r
-  EFI_SIMPLE_NETWORK_MODE     Snm;               // VirtioNetSnpPopulate\r
-  EFI_EVENT                   ExitBoot;          // VirtioNetSnpPopulate\r
-  EFI_DEVICE_PATH_PROTOCOL    *MacDevicePath;    // VirtioNetDriverBindingStart\r
-  EFI_HANDLE                  MacHandle;         // VirtioNetDriverBindingStart\r
-\r
-  VRING                       RxRing;            // VirtioNetInitRing\r
-  VOID                        *RxRingMap;        // VirtioRingMap and\r
-                                                 // VirtioNetInitRing\r
-  UINT8                       *RxBuf;            // VirtioNetInitRx\r
-  UINT16                      RxLastUsed;        // VirtioNetInitRx\r
-\r
-  VRING                       TxRing;            // VirtioNetInitRing\r
-  VOID                        *TxRingMap;        // VirtioRingMap and\r
-                                                 // VirtioNetInitRing\r
-  UINT16                      TxMaxPending;      // VirtioNetInitTx\r
-  UINT16                      TxCurPending;      // VirtioNetInitTx\r
-  UINT16                      *TxFreeStack;      // VirtioNetInitTx\r
-  VIRTIO_1_0_NET_REQ          TxSharedReq;       // VirtioNetInitTx\r
-  UINT16                      TxLastUsed;        // VirtioNetInitTx\r
+  UINT32                         Signature;      // VirtioNetDriverBindingStart\r
+  VIRTIO_DEVICE_PROTOCOL         *VirtIo;        // VirtioNetDriverBindingStart\r
+  EFI_SIMPLE_NETWORK_PROTOCOL    Snp;            // VirtioNetSnpPopulate\r
+  EFI_SIMPLE_NETWORK_MODE        Snm;            // VirtioNetSnpPopulate\r
+  EFI_EVENT                      ExitBoot;       // VirtioNetSnpPopulate\r
+  EFI_DEVICE_PATH_PROTOCOL       *MacDevicePath; // VirtioNetDriverBindingStart\r
+  EFI_HANDLE                     MacHandle;      // VirtioNetDriverBindingStart\r
+\r
+  VRING                          RxRing;          // VirtioNetInitRing\r
+  VOID                           *RxRingMap;      // VirtioRingMap and\r
+                                                  // VirtioNetInitRing\r
+  UINT8                          *RxBuf;          // VirtioNetInitRx\r
+  UINT16                         RxLastUsed;      // VirtioNetInitRx\r
+  UINTN                          RxBufNrPages;    // VirtioNetInitRx\r
+  EFI_PHYSICAL_ADDRESS           RxBufDeviceBase; // VirtioNetInitRx\r
+  VOID                           *RxBufMap;       // VirtioNetInitRx\r
+\r
+  VRING                          TxRing;           // VirtioNetInitRing\r
+  VOID                           *TxRingMap;       // VirtioRingMap and\r
+                                                   // VirtioNetInitRing\r
+  UINT16                         TxMaxPending;     // VirtioNetInitTx\r
+  UINT16                         TxCurPending;     // VirtioNetInitTx\r
+  UINT16                         *TxFreeStack;     // VirtioNetInitTx\r
+  VIRTIO_1_0_NET_REQ             *TxSharedReq;     // VirtioNetInitTx\r
+  VOID                           *TxSharedReqMap;  // VirtioNetInitTx\r
+  UINT16                         TxLastUsed;       // VirtioNetInitTx\r
+  ORDERED_COLLECTION             *TxBufCollection; // VirtioNetInitTx\r
 } VNET_DEV;\r
 \r
-\r
 //\r
 // In order to avoid duplication of interface documentation, please find all\r
 // leading comments near the respective function / variable definitions (not\r
@@ -118,7 +118,7 @@ typedef struct {
                                                 (Value)                     \\r
                                                 ))\r
 \r
-#define VIRTIO_CFG_READ(Dev, Field, Pointer) ((Dev)->VirtIo->ReadDevice (   \\r
+#define VIRTIO_CFG_READ(Dev, Field, Pointer)  ((Dev)->VirtIo->ReadDevice (  \\r
                                                 (Dev)->VirtIo,              \\r
                                                 OFFSET_OF_VNET (Field),     \\r
                                                 SIZE_OF_VNET (Field),       \\r
@@ -129,13 +129,13 @@ typedef struct {
 //\r
 // component naming\r
 //\r
-extern EFI_COMPONENT_NAME_PROTOCOL gVirtioNetComponentName;\r
-extern EFI_COMPONENT_NAME2_PROTOCOL gVirtioNetComponentName2;\r
+extern EFI_COMPONENT_NAME_PROTOCOL   gVirtioNetComponentName;\r
+extern EFI_COMPONENT_NAME2_PROTOCOL  gVirtioNetComponentName2;\r
 \r
 //\r
 // driver binding\r
 //\r
-extern EFI_DRIVER_BINDING_PROTOCOL gVirtioNetDriverBinding;\r
+extern EFI_DRIVER_BINDING_PROTOCOL  gVirtioNetDriverBinding;\r
 \r
 //\r
 // member functions implementing the Simple Network Protocol\r
@@ -143,113 +143,113 @@ extern EFI_DRIVER_BINDING_PROTOCOL gVirtioNetDriverBinding;
 EFI_STATUS\r
 EFIAPI\r
 VirtioNetStart (\r
-  IN EFI_SIMPLE_NETWORK_PROTOCOL *This\r
+  IN EFI_SIMPLE_NETWORK_PROTOCOL  *This\r
   );\r
 \r
 EFI_STATUS\r
 EFIAPI\r
 VirtioNetStop (\r
-  IN EFI_SIMPLE_NETWORK_PROTOCOL *This\r
+  IN EFI_SIMPLE_NETWORK_PROTOCOL  *This\r
   );\r
 \r
 EFI_STATUS\r
 EFIAPI\r
 VirtioNetInitialize (\r
-  IN EFI_SIMPLE_NETWORK_PROTOCOL *This,\r
-  IN UINTN                       ExtraRxBufferSize  OPTIONAL,\r
-  IN UINTN                       ExtraTxBufferSize  OPTIONAL\r
+  IN EFI_SIMPLE_NETWORK_PROTOCOL  *This,\r
+  IN UINTN                        ExtraRxBufferSize  OPTIONAL,\r
+  IN UINTN                        ExtraTxBufferSize  OPTIONAL\r
   );\r
 \r
 EFI_STATUS\r
 EFIAPI\r
 VirtioNetReset (\r
-  IN EFI_SIMPLE_NETWORK_PROTOCOL *This,\r
-  IN BOOLEAN                     ExtendedVerification\r
+  IN EFI_SIMPLE_NETWORK_PROTOCOL  *This,\r
+  IN BOOLEAN                      ExtendedVerification\r
   );\r
 \r
 EFI_STATUS\r
 EFIAPI\r
 VirtioNetShutdown (\r
-  IN EFI_SIMPLE_NETWORK_PROTOCOL *This\r
+  IN EFI_SIMPLE_NETWORK_PROTOCOL  *This\r
   );\r
 \r
 EFI_STATUS\r
 EFIAPI\r
 VirtioNetReceiveFilters (\r
-  IN EFI_SIMPLE_NETWORK_PROTOCOL *This,\r
-  IN UINT32                      Enable,\r
-  IN UINT32                      Disable,\r
-  IN BOOLEAN                     ResetMCastFilter,\r
-  IN UINTN                       MCastFilterCnt    OPTIONAL,\r
-  IN EFI_MAC_ADDRESS             *MCastFilter      OPTIONAL\r
+  IN EFI_SIMPLE_NETWORK_PROTOCOL  *This,\r
+  IN UINT32                       Enable,\r
+  IN UINT32                       Disable,\r
+  IN BOOLEAN                      ResetMCastFilter,\r
+  IN UINTN                        MCastFilterCnt    OPTIONAL,\r
+  IN EFI_MAC_ADDRESS              *MCastFilter      OPTIONAL\r
   );\r
 \r
 EFI_STATUS\r
 EFIAPI\r
 VirtioNetStationAddress (\r
-  IN EFI_SIMPLE_NETWORK_PROTOCOL *This,\r
-  IN BOOLEAN                     Reset,\r
-  IN EFI_MAC_ADDRESS             *New OPTIONAL\r
+  IN EFI_SIMPLE_NETWORK_PROTOCOL  *This,\r
+  IN BOOLEAN                      Reset,\r
+  IN EFI_MAC_ADDRESS              *New OPTIONAL\r
   );\r
 \r
 EFI_STATUS\r
 EFIAPI\r
 VirtioNetStatistics (\r
-  IN EFI_SIMPLE_NETWORK_PROTOCOL *This,\r
-  IN BOOLEAN                     Reset,\r
-  IN OUT UINTN                   *StatisticsSize   OPTIONAL,\r
-  OUT EFI_NETWORK_STATISTICS     *StatisticsTable  OPTIONAL\r
+  IN EFI_SIMPLE_NETWORK_PROTOCOL  *This,\r
+  IN BOOLEAN                      Reset,\r
+  IN OUT UINTN                    *StatisticsSize   OPTIONAL,\r
+  OUT EFI_NETWORK_STATISTICS      *StatisticsTable  OPTIONAL\r
   );\r
 \r
 EFI_STATUS\r
 EFIAPI\r
 VirtioNetMcastIpToMac (\r
-  IN EFI_SIMPLE_NETWORK_PROTOCOL *This,\r
-  IN BOOLEAN                     IPv6,\r
-  IN EFI_IP_ADDRESS              *Ip,\r
-  OUT EFI_MAC_ADDRESS            *Mac\r
+  IN EFI_SIMPLE_NETWORK_PROTOCOL  *This,\r
+  IN BOOLEAN                      IPv6,\r
+  IN EFI_IP_ADDRESS               *Ip,\r
+  OUT EFI_MAC_ADDRESS             *Mac\r
   );\r
 \r
 EFI_STATUS\r
 EFIAPI\r
 VirtioNetNvData (\r
-  IN EFI_SIMPLE_NETWORK_PROTOCOL *This,\r
-  IN BOOLEAN                     ReadWrite,\r
-  IN UINTN                       Offset,\r
-  IN UINTN                       BufferSize,\r
-  IN OUT VOID                    *Buffer\r
+  IN EFI_SIMPLE_NETWORK_PROTOCOL  *This,\r
+  IN BOOLEAN                      ReadWrite,\r
+  IN UINTN                        Offset,\r
+  IN UINTN                        BufferSize,\r
+  IN OUT VOID                     *Buffer\r
   );\r
 \r
 EFI_STATUS\r
 EFIAPI\r
 VirtioNetGetStatus (\r
-  IN EFI_SIMPLE_NETWORK_PROTOCOL *This,\r
-  OUT UINT32                     *InterruptStatus OPTIONAL,\r
-  OUT VOID                       **TxBuf OPTIONAL\r
+  IN EFI_SIMPLE_NETWORK_PROTOCOL  *This,\r
+  OUT UINT32                      *InterruptStatus OPTIONAL,\r
+  OUT VOID                        **TxBuf OPTIONAL\r
   );\r
 \r
 EFI_STATUS\r
 EFIAPI\r
 VirtioNetTransmit (\r
-  IN EFI_SIMPLE_NETWORK_PROTOCOL *This,\r
-  IN UINTN                       HeaderSize,\r
-  IN UINTN                       BufferSize,\r
-  IN /* +OUT! */ VOID            *Buffer,\r
-  IN EFI_MAC_ADDRESS             *SrcAddr  OPTIONAL,\r
-  IN EFI_MAC_ADDRESS             *DestAddr OPTIONAL,\r
-  IN UINT16                      *Protocol OPTIONAL\r
+  IN EFI_SIMPLE_NETWORK_PROTOCOL  *This,\r
+  IN UINTN                        HeaderSize,\r
+  IN UINTN                        BufferSize,\r
+  IN /* +OUT! */ VOID             *Buffer,\r
+  IN EFI_MAC_ADDRESS              *SrcAddr  OPTIONAL,\r
+  IN EFI_MAC_ADDRESS              *DestAddr OPTIONAL,\r
+  IN UINT16                       *Protocol OPTIONAL\r
   );\r
 \r
 EFI_STATUS\r
 EFIAPI\r
 VirtioNetReceive (\r
-  IN EFI_SIMPLE_NETWORK_PROTOCOL *This,\r
-  OUT UINTN                      *HeaderSize OPTIONAL,\r
-  IN OUT UINTN                   *BufferSize,\r
-  OUT VOID                       *Buffer,\r
-  OUT EFI_MAC_ADDRESS            *SrcAddr    OPTIONAL,\r
-  OUT EFI_MAC_ADDRESS            *DestAddr   OPTIONAL,\r
-  OUT UINT16                     *Protocol   OPTIONAL\r
+  IN EFI_SIMPLE_NETWORK_PROTOCOL  *This,\r
+  OUT UINTN                       *HeaderSize OPTIONAL,\r
+  IN OUT UINTN                    *BufferSize,\r
+  OUT VOID                        *Buffer,\r
+  OUT EFI_MAC_ADDRESS             *SrcAddr    OPTIONAL,\r
+  OUT EFI_MAC_ADDRESS             *DestAddr   OPTIONAL,\r
+  OUT UINT16                      *Protocol   OPTIONAL\r
   );\r
 \r
 //\r
@@ -258,21 +258,56 @@ VirtioNetReceive (
 VOID\r
 EFIAPI\r
 VirtioNetShutdownRx (\r
-  IN OUT VNET_DEV *Dev\r
+  IN OUT VNET_DEV  *Dev\r
   );\r
 \r
 VOID\r
 EFIAPI\r
 VirtioNetShutdownTx (\r
-  IN OUT VNET_DEV *Dev\r
+  IN OUT VNET_DEV  *Dev\r
   );\r
 \r
 VOID\r
 EFIAPI\r
 VirtioNetUninitRing (\r
-  IN OUT VNET_DEV *Dev,\r
-  IN OUT VRING    *Ring,\r
-  IN     VOID     *RingMap\r
+  IN OUT VNET_DEV  *Dev,\r
+  IN OUT VRING     *Ring,\r
+  IN     VOID      *RingMap\r
+  );\r
+\r
+//\r
+// utility functions to map caller-supplied Tx buffer system physical address\r
+// to a device address and vice versa\r
+//\r
+EFI_STATUS\r
+EFIAPI\r
+VirtioNetMapTxBuf (\r
+  IN  VNET_DEV              *Dev,\r
+  IN  VOID                  *Buffer,\r
+  IN  UINTN                 NumberOfBytes,\r
+  OUT EFI_PHYSICAL_ADDRESS  *DeviceAddress\r
+  );\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+VirtioNetUnmapTxBuf (\r
+  IN  VNET_DEV              *Dev,\r
+  OUT VOID                  **Buffer,\r
+  IN  EFI_PHYSICAL_ADDRESS  DeviceAddress\r
+  );\r
+\r
+INTN\r
+EFIAPI\r
+VirtioNetTxBufMapInfoCompare (\r
+  IN CONST VOID  *UserStruct1,\r
+  IN CONST VOID  *UserStruct2\r
+  );\r
+\r
+INTN\r
+EFIAPI\r
+VirtioNetTxBufDeviceAddressCompare (\r
+  IN CONST VOID  *StandaloneKey,\r
+  IN CONST VOID  *UserStruct\r
   );\r
 \r
 //\r
@@ -281,15 +316,15 @@ VirtioNetUninitRing (
 VOID\r
 EFIAPI\r
 VirtioNetIsPacketAvailable (\r
-  IN  EFI_EVENT Event,\r
-  IN  VOID      *Context\r
+  IN  EFI_EVENT  Event,\r
+  IN  VOID       *Context\r
   );\r
 \r
 VOID\r
 EFIAPI\r
 VirtioNetExitBoot (\r
-  IN  EFI_EVENT Event,\r
-  IN  VOID      *Context\r
+  IN  EFI_EVENT  Event,\r
+  IN  VOID       *Context\r
   );\r
 \r
 #endif // _VIRTIO_NET_DXE_H_\r