REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the OvmfPkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Andrew Fish <afish@apple.com>
		
			
				
	
	
		
			331 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			331 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
| 
 | |
|   Internal definitions for the virtio-net driver, which produces Simple Network
 | |
|   Protocol instances for virtio-net devices.
 | |
| 
 | |
|   Copyright (C) 2013, Red Hat, Inc.
 | |
|   Copyright (c) 2017, AMD Inc, All rights reserved.<BR>
 | |
| 
 | |
|   SPDX-License-Identifier: BSD-2-Clause-Patent
 | |
| **/
 | |
| 
 | |
| #ifndef _VIRTIO_NET_DXE_H_
 | |
| #define _VIRTIO_NET_DXE_H_
 | |
| 
 | |
| #include <IndustryStandard/VirtioNet.h>
 | |
| #include <Library/DebugLib.h>
 | |
| #include <Library/VirtioLib.h>
 | |
| #include <Protocol/ComponentName.h>
 | |
| #include <Protocol/ComponentName2.h>
 | |
| #include <Protocol/DevicePath.h>
 | |
| #include <Protocol/DriverBinding.h>
 | |
| #include <Protocol/SimpleNetwork.h>
 | |
| #include <Library/OrderedCollectionLib.h>
 | |
| 
 | |
| #define VNET_SIG  SIGNATURE_32 ('V', 'N', 'E', 'T')
 | |
| 
 | |
| //
 | |
| // maximum number of pending packets, separately for each direction
 | |
| //
 | |
| #define VNET_MAX_PENDING  64
 | |
| 
 | |
| //
 | |
| // State diagram:
 | |
| //
 | |
| //                  |     ^
 | |
| //                  |     |
 | |
| //        BindingStart  BindingStop
 | |
| //        +SnpPopulate    |
 | |
| //        ++GetFeatures   |
 | |
| //                  |     |
 | |
| //                  v     |
 | |
| //                +---------+    virtio-net device is reset, no resources are
 | |
| //                | stopped |    allocated for traffic, but MAC address has
 | |
| //                +---------+    been retrieved
 | |
| //                  |     ^
 | |
| //                  |     |
 | |
| //            SNP.Start SNP.Stop
 | |
| //                  |     |
 | |
| //                  v     |
 | |
| //                +---------+
 | |
| //                | started |    functionally identical to stopped
 | |
| //                +---------+
 | |
| //                  |     ^
 | |
| //                  |     |
 | |
| //       SNP.Initialize SNP.Shutdown
 | |
| //                  |     |
 | |
| //                  v     |
 | |
| //              +-------------+  Virtio-net setup complete, including DRIVER_OK
 | |
| //              | initialized |  bit. The receive queue is populated with
 | |
| //              +-------------+  requests; McastIpToMac, GetStatus, Transmit,
 | |
| //                               Receive are callable.
 | |
| //
 | |
| 
 | |
| typedef struct {
 | |
|   //
 | |
|   // Parts of this structure are initialized / torn down in various functions
 | |
|   // at various call depths. The table to the right should make it easier to
 | |
|   // track them.
 | |
|   //
 | |
|   //                          field              init function
 | |
|   //                          ------------------ ------------------------------
 | |
|   UINT32                         Signature;      // VirtioNetDriverBindingStart
 | |
|   VIRTIO_DEVICE_PROTOCOL         *VirtIo;        // VirtioNetDriverBindingStart
 | |
|   EFI_SIMPLE_NETWORK_PROTOCOL    Snp;            // VirtioNetSnpPopulate
 | |
|   EFI_SIMPLE_NETWORK_MODE        Snm;            // VirtioNetSnpPopulate
 | |
|   EFI_EVENT                      ExitBoot;       // VirtioNetSnpPopulate
 | |
|   EFI_DEVICE_PATH_PROTOCOL       *MacDevicePath; // VirtioNetDriverBindingStart
 | |
|   EFI_HANDLE                     MacHandle;      // VirtioNetDriverBindingStart
 | |
| 
 | |
|   VRING                          RxRing;          // VirtioNetInitRing
 | |
|   VOID                           *RxRingMap;      // VirtioRingMap and
 | |
|                                                   // VirtioNetInitRing
 | |
|   UINT8                          *RxBuf;          // VirtioNetInitRx
 | |
|   UINT16                         RxLastUsed;      // VirtioNetInitRx
 | |
|   UINTN                          RxBufNrPages;    // VirtioNetInitRx
 | |
|   EFI_PHYSICAL_ADDRESS           RxBufDeviceBase; // VirtioNetInitRx
 | |
|   VOID                           *RxBufMap;       // VirtioNetInitRx
 | |
| 
 | |
|   VRING                          TxRing;           // VirtioNetInitRing
 | |
|   VOID                           *TxRingMap;       // VirtioRingMap and
 | |
|                                                    // VirtioNetInitRing
 | |
|   UINT16                         TxMaxPending;     // VirtioNetInitTx
 | |
|   UINT16                         TxCurPending;     // VirtioNetInitTx
 | |
|   UINT16                         *TxFreeStack;     // VirtioNetInitTx
 | |
|   VIRTIO_1_0_NET_REQ             *TxSharedReq;     // VirtioNetInitTx
 | |
|   VOID                           *TxSharedReqMap;  // VirtioNetInitTx
 | |
|   UINT16                         TxLastUsed;       // VirtioNetInitTx
 | |
|   ORDERED_COLLECTION             *TxBufCollection; // VirtioNetInitTx
 | |
| } VNET_DEV;
 | |
| 
 | |
| //
 | |
| // In order to avoid duplication of interface documentation, please find all
 | |
| // leading comments near the respective function / variable definitions (not
 | |
| // the declarations here), which is where your code editor of choice takes you
 | |
| // anyway when jumping to a function.
 | |
| //
 | |
| 
 | |
| //
 | |
| // utility macros
 | |
| //
 | |
| #define VIRTIO_NET_FROM_SNP(SnpPointer) \
 | |
|         CR (SnpPointer, VNET_DEV, Snp, VNET_SIG)
 | |
| 
 | |
| #define VIRTIO_CFG_WRITE(Dev, Field, Value)  ((Dev)->VirtIo->WriteDevice (  \
 | |
|                                                 (Dev)->VirtIo,              \
 | |
|                                                 OFFSET_OF_VNET (Field),     \
 | |
|                                                 SIZE_OF_VNET (Field),       \
 | |
|                                                 (Value)                     \
 | |
|                                                 ))
 | |
| 
 | |
| #define VIRTIO_CFG_READ(Dev, Field, Pointer)  ((Dev)->VirtIo->ReadDevice (  \
 | |
|                                                 (Dev)->VirtIo,              \
 | |
|                                                 OFFSET_OF_VNET (Field),     \
 | |
|                                                 SIZE_OF_VNET (Field),       \
 | |
|                                                 sizeof *(Pointer),          \
 | |
|                                                 (Pointer)                   \
 | |
|                                                 ))
 | |
| 
 | |
| //
 | |
| // component naming
 | |
| //
 | |
| extern EFI_COMPONENT_NAME_PROTOCOL   gVirtioNetComponentName;
 | |
| extern EFI_COMPONENT_NAME2_PROTOCOL  gVirtioNetComponentName2;
 | |
| 
 | |
| //
 | |
| // driver binding
 | |
| //
 | |
| extern EFI_DRIVER_BINDING_PROTOCOL  gVirtioNetDriverBinding;
 | |
| 
 | |
| //
 | |
| // member functions implementing the Simple Network Protocol
 | |
| //
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| VirtioNetStart (
 | |
|   IN EFI_SIMPLE_NETWORK_PROTOCOL  *This
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| VirtioNetStop (
 | |
|   IN EFI_SIMPLE_NETWORK_PROTOCOL  *This
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| VirtioNetInitialize (
 | |
|   IN EFI_SIMPLE_NETWORK_PROTOCOL  *This,
 | |
|   IN UINTN                        ExtraRxBufferSize  OPTIONAL,
 | |
|   IN UINTN                        ExtraTxBufferSize  OPTIONAL
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| VirtioNetReset (
 | |
|   IN EFI_SIMPLE_NETWORK_PROTOCOL  *This,
 | |
|   IN BOOLEAN                      ExtendedVerification
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| VirtioNetShutdown (
 | |
|   IN EFI_SIMPLE_NETWORK_PROTOCOL  *This
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| VirtioNetReceiveFilters (
 | |
|   IN EFI_SIMPLE_NETWORK_PROTOCOL  *This,
 | |
|   IN UINT32                       Enable,
 | |
|   IN UINT32                       Disable,
 | |
|   IN BOOLEAN                      ResetMCastFilter,
 | |
|   IN UINTN                        MCastFilterCnt    OPTIONAL,
 | |
|   IN EFI_MAC_ADDRESS              *MCastFilter      OPTIONAL
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| VirtioNetStationAddress (
 | |
|   IN EFI_SIMPLE_NETWORK_PROTOCOL  *This,
 | |
|   IN BOOLEAN                      Reset,
 | |
|   IN EFI_MAC_ADDRESS              *New OPTIONAL
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| VirtioNetStatistics (
 | |
|   IN EFI_SIMPLE_NETWORK_PROTOCOL  *This,
 | |
|   IN BOOLEAN                      Reset,
 | |
|   IN OUT UINTN                    *StatisticsSize   OPTIONAL,
 | |
|   OUT EFI_NETWORK_STATISTICS      *StatisticsTable  OPTIONAL
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| VirtioNetMcastIpToMac (
 | |
|   IN EFI_SIMPLE_NETWORK_PROTOCOL  *This,
 | |
|   IN BOOLEAN                      IPv6,
 | |
|   IN EFI_IP_ADDRESS               *Ip,
 | |
|   OUT EFI_MAC_ADDRESS             *Mac
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| VirtioNetNvData (
 | |
|   IN EFI_SIMPLE_NETWORK_PROTOCOL  *This,
 | |
|   IN BOOLEAN                      ReadWrite,
 | |
|   IN UINTN                        Offset,
 | |
|   IN UINTN                        BufferSize,
 | |
|   IN OUT VOID                     *Buffer
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| VirtioNetGetStatus (
 | |
|   IN EFI_SIMPLE_NETWORK_PROTOCOL  *This,
 | |
|   OUT UINT32                      *InterruptStatus OPTIONAL,
 | |
|   OUT VOID                        **TxBuf OPTIONAL
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| VirtioNetTransmit (
 | |
|   IN EFI_SIMPLE_NETWORK_PROTOCOL  *This,
 | |
|   IN UINTN                        HeaderSize,
 | |
|   IN UINTN                        BufferSize,
 | |
|   IN /* +OUT! */ VOID             *Buffer,
 | |
|   IN EFI_MAC_ADDRESS              *SrcAddr  OPTIONAL,
 | |
|   IN EFI_MAC_ADDRESS              *DestAddr OPTIONAL,
 | |
|   IN UINT16                       *Protocol OPTIONAL
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| VirtioNetReceive (
 | |
|   IN EFI_SIMPLE_NETWORK_PROTOCOL  *This,
 | |
|   OUT UINTN                       *HeaderSize OPTIONAL,
 | |
|   IN OUT UINTN                    *BufferSize,
 | |
|   OUT VOID                        *Buffer,
 | |
|   OUT EFI_MAC_ADDRESS             *SrcAddr    OPTIONAL,
 | |
|   OUT EFI_MAC_ADDRESS             *DestAddr   OPTIONAL,
 | |
|   OUT UINT16                      *Protocol   OPTIONAL
 | |
|   );
 | |
| 
 | |
| //
 | |
| // utility functions shared by various SNP member functions
 | |
| //
 | |
| VOID
 | |
| EFIAPI
 | |
| VirtioNetShutdownRx (
 | |
|   IN OUT VNET_DEV  *Dev
 | |
|   );
 | |
| 
 | |
| VOID
 | |
| EFIAPI
 | |
| VirtioNetShutdownTx (
 | |
|   IN OUT VNET_DEV  *Dev
 | |
|   );
 | |
| 
 | |
| VOID
 | |
| EFIAPI
 | |
| VirtioNetUninitRing (
 | |
|   IN OUT VNET_DEV  *Dev,
 | |
|   IN OUT VRING     *Ring,
 | |
|   IN     VOID      *RingMap
 | |
|   );
 | |
| 
 | |
| //
 | |
| // utility functions to map caller-supplied Tx buffer system physical address
 | |
| // to a device address and vice versa
 | |
| //
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| VirtioNetMapTxBuf (
 | |
|   IN  VNET_DEV              *Dev,
 | |
|   IN  VOID                  *Buffer,
 | |
|   IN  UINTN                 NumberOfBytes,
 | |
|   OUT EFI_PHYSICAL_ADDRESS  *DeviceAddress
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| VirtioNetUnmapTxBuf (
 | |
|   IN  VNET_DEV              *Dev,
 | |
|   OUT VOID                  **Buffer,
 | |
|   IN  EFI_PHYSICAL_ADDRESS  DeviceAddress
 | |
|   );
 | |
| 
 | |
| INTN
 | |
| EFIAPI
 | |
| VirtioNetTxBufMapInfoCompare (
 | |
|   IN CONST VOID  *UserStruct1,
 | |
|   IN CONST VOID  *UserStruct2
 | |
|   );
 | |
| 
 | |
| INTN
 | |
| EFIAPI
 | |
| VirtioNetTxBufDeviceAddressCompare (
 | |
|   IN CONST VOID  *StandaloneKey,
 | |
|   IN CONST VOID  *UserStruct
 | |
|   );
 | |
| 
 | |
| //
 | |
| // event callbacks
 | |
| //
 | |
| VOID
 | |
| EFIAPI
 | |
| VirtioNetIsPacketAvailable (
 | |
|   IN  EFI_EVENT  Event,
 | |
|   IN  VOID       *Context
 | |
|   );
 | |
| 
 | |
| VOID
 | |
| EFIAPI
 | |
| VirtioNetExitBoot (
 | |
|   IN  EFI_EVENT  Event,
 | |
|   IN  VOID       *Context
 | |
|   );
 | |
| 
 | |
| #endif // _VIRTIO_NET_DXE_H_
 |