]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/VirtioNetDxe/SnpReceive.c
OvmfPkg: Apply uncrustify changes
[mirror_edk2.git] / OvmfPkg / VirtioNetDxe / SnpReceive.c
index eb3a2ba9b5ed4177da18d3af06116033e51a0df7..cc0e1da14f71d0d48efcd4a9465b41e2c89d7bef 100644 (file)
@@ -3,15 +3,9 @@
   Implementation of the SNP.Receive() function and its private helpers if any.\r
 \r
   Copyright (C) 2013, Red Hat, Inc.\r
-  Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2006 - 2013, Intel Corporation. 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
 \r
                                  interface.\r
 \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
-  VNET_DEV   *Dev;\r
-  EFI_TPL    OldTpl;\r
-  EFI_STATUS Status;\r
-  UINT16     RxCurUsed;\r
-  UINT16     UsedElemIdx;\r
-  UINT32     DescIdx;\r
-  UINT32     RxLen;\r
-  UINTN      OrigBufferSize;\r
-  UINT8      *RxPtr;\r
-  UINT16     AvailIdx;\r
-  EFI_STATUS NotifyStatus;\r
-\r
-  if (This == NULL || BufferSize == NULL || Buffer == NULL) {\r
+  VNET_DEV    *Dev;\r
+  EFI_TPL     OldTpl;\r
+  EFI_STATUS  Status;\r
+  UINT16      RxCurUsed;\r
+  UINT16      UsedElemIdx;\r
+  UINT32      DescIdx;\r
+  UINT32      RxLen;\r
+  UINTN       OrigBufferSize;\r
+  UINT8       *RxPtr;\r
+  UINT16      AvailIdx;\r
+  EFI_STATUS  NotifyStatus;\r
+  UINTN       RxBufOffset;\r
+\r
+  if ((This == NULL) || (BufferSize == NULL) || (Buffer == NULL)) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  Dev = VIRTIO_NET_FROM_SNP (This);\r
+  Dev    = VIRTIO_NET_FROM_SNP (This);\r
   OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
   switch (Dev->Snm.State) {\r
-  case EfiSimpleNetworkStopped:\r
-    Status = EFI_NOT_STARTED;\r
-    goto Exit;\r
-  case EfiSimpleNetworkStarted:\r
-    Status = EFI_DEVICE_ERROR;\r
-    goto Exit;\r
-  default:\r
-    break;\r
+    case EfiSimpleNetworkStopped:\r
+      Status = EFI_NOT_STARTED;\r
+      goto Exit;\r
+    case EfiSimpleNetworkStarted:\r
+      Status = EFI_DEVICE_ERROR;\r
+      goto Exit;\r
+    default:\r
+      break;\r
   }\r
 \r
   //\r
@@ -105,6 +99,7 @@ VirtioNetReceive (
   //\r
   MemoryFence ();\r
   RxCurUsed = *Dev->RxRing.Used.Idx;\r
+  MemoryFence ();\r
 \r
   if (Dev->RxLastUsed == RxCurUsed) {\r
     Status = EFI_NOT_READY;\r
@@ -112,8 +107,8 @@ VirtioNetReceive (
   }\r
 \r
   UsedElemIdx = Dev->RxLastUsed % Dev->RxRing.QueueSize;\r
-  DescIdx = Dev->RxRing.Used.UsedElem[UsedElemIdx].Id;\r
-  RxLen   = Dev->RxRing.Used.UsedElem[UsedElemIdx].Len;\r
+  DescIdx     = Dev->RxRing.Used.UsedElem[UsedElemIdx].Id;\r
+  RxLen       = Dev->RxRing.Used.UsedElem[UsedElemIdx].Len;\r
 \r
   //\r
   // the virtio-net request header must be complete; we skip it\r
@@ -126,7 +121,7 @@ VirtioNetReceive (
   ASSERT (RxLen <= Dev->RxRing.Desc[DescIdx + 1].Len);\r
 \r
   OrigBufferSize = *BufferSize;\r
-  *BufferSize = RxLen;\r
+  *BufferSize    = RxLen;\r
 \r
   if (OrigBufferSize < RxLen) {\r
     Status = EFI_BUFFER_TOO_SMALL;\r
@@ -142,22 +137,27 @@ VirtioNetReceive (
     *HeaderSize = Dev->Snm.MediaHeaderSize;\r
   }\r
 \r
-  RxPtr = (UINT8 *)Dev->RxRing.Desc[DescIdx + 1].Addr;\r
+  RxBufOffset = (UINTN)(Dev->RxRing.Desc[DescIdx + 1].Addr -\r
+                        Dev->RxBufDeviceBase);\r
+  RxPtr = Dev->RxBuf + RxBufOffset;\r
   CopyMem (Buffer, RxPtr, RxLen);\r
 \r
   if (DestAddr != NULL) {\r
-    CopyMem (DestAddr, RxPtr, SIZE_OF_VNET (VhdrMac));\r
+    CopyMem (DestAddr, RxPtr, SIZE_OF_VNET (Mac));\r
   }\r
-  RxPtr += SIZE_OF_VNET (VhdrMac);\r
+\r
+  RxPtr += SIZE_OF_VNET (Mac);\r
 \r
   if (SrcAddr != NULL) {\r
-    CopyMem (SrcAddr, RxPtr, SIZE_OF_VNET (VhdrMac));\r
+    CopyMem (SrcAddr, RxPtr, SIZE_OF_VNET (Mac));\r
   }\r
-  RxPtr += SIZE_OF_VNET (VhdrMac);\r
+\r
+  RxPtr += SIZE_OF_VNET (Mac);\r
 \r
   if (Protocol != NULL) {\r
-    *Protocol = ((UINT16) RxPtr[0] << 8) | RxPtr[1];\r
+    *Protocol = (UINT16)((RxPtr[0] << 8) | RxPtr[1]);\r
   }\r
+\r
   RxPtr += sizeof (UINT16);\r
 \r
   Status = EFI_SUCCESS;\r
@@ -168,17 +168,17 @@ RecycleDesc:
   //\r
   // virtio-0.9.5, 2.4.1 Supplying Buffers to The Device\r
   //\r
-  AvailIdx = *Dev->RxRing.Avail.Idx;\r
-  Dev->RxRing.Avail.Ring[AvailIdx++ % Dev->RxRing.QueueSize] = DescIdx;\r
+  AvailIdx                                                   = *Dev->RxRing.Avail.Idx;\r
+  Dev->RxRing.Avail.Ring[AvailIdx++ % Dev->RxRing.QueueSize] =\r
+    (UINT16)DescIdx;\r
 \r
   MemoryFence ();\r
   *Dev->RxRing.Avail.Idx = AvailIdx;\r
 \r
   MemoryFence ();\r
-  NotifyStatus = VIRTIO_CFG_WRITE (Dev, Generic.VhdrQueueNotify,\r
-                   VIRTIO_NET_Q_RX);\r
-\r
-  if (!EFI_ERROR (Status)) { // earlier error takes precedence\r
+  NotifyStatus = Dev->VirtIo->SetQueueNotify (Dev->VirtIo, VIRTIO_NET_Q_RX);\r
+  if (!EFI_ERROR (Status)) {\r
+    // earlier error takes precedence\r
     Status = NotifyStatus;\r
   }\r
 \r