]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/SnpDxe/Receive.c
BaseTools:Change the path of the file that Binary Cache
[mirror_edk2.git] / MdeModulePkg / Universal / Network / SnpDxe / Receive.c
index 92123b6c1fe76835bc5869a88fd88e008d4c82be..28cea0d2e9722fbfa5482e7398a2a8388d7a1f9a 100644 (file)
@@ -1,14 +1,8 @@
 /** @file\r
-               Implementation of receiving a packet from a network interface.\r
+  Implementation of receiving a packet from a network interface.\r
 \r
-Copyright (c) 2004 - 2007, Intel Corporation. <BR>\r
-All rights reserved. This program and the accompanying materials are licensed\r
-and made available under the terms and conditions of the BSD License which\r
-accompanies this 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,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+Copyright (c) 2004 - 2010, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
@@ -68,10 +62,10 @@ PxeReceive (
   Snp->Cdb.OpCode     = PXE_OPCODE_RECEIVE;\r
   Snp->Cdb.OpFlags    = PXE_OPFLAGS_NOT_USED;\r
 \r
-  Snp->Cdb.CPBsize    = sizeof (PXE_CPB_RECEIVE);\r
+  Snp->Cdb.CPBsize    = (UINT16) sizeof (PXE_CPB_RECEIVE);\r
   Snp->Cdb.CPBaddr    = (UINT64)(UINTN) Cpb;\r
 \r
-  Snp->Cdb.DBsize     = sizeof (PXE_DB_RECEIVE);\r
+  Snp->Cdb.DBsize     = (UINT16) sizeof (PXE_DB_RECEIVE);\r
   Snp->Cdb.DBaddr     = (UINT64)(UINTN) Db;\r
 \r
   Snp->Cdb.StatCode   = PXE_STATCODE_INITIALIZE;\r
@@ -132,6 +126,16 @@ PxeReceive (
     *Protocol = (UINT16) PXE_SWAP_UINT16 (Db->Protocol);\r
   }\r
 \r
+  //\r
+  // We have received a packet from network interface, which implies that the\r
+  // network cable should be present. While, some UNDI driver may not report\r
+  // correct media status during Snp->Initialize(). So, we need ensure\r
+  // MediaPresent in SNP mode data is set to correct value.\r
+  //\r
+  if (Snp->Mode.MediaPresentSupported && !Snp->Mode.MediaPresent) {\r
+    Snp->Mode.MediaPresent = TRUE;\r
+  }\r
+\r
   return (*BufferSize <= BuffSize) ? EFI_SUCCESS : EFI_BUFFER_TOO_SMALL;\r
 }\r
 \r
@@ -225,7 +229,7 @@ SnpUndi32Receive (
     goto ON_EXIT;\r
   }\r
 \r
-  if (!Snp->Mode.ReceiveFilterSetting) {\r
+  if (Snp->Mode.ReceiveFilterSetting == 0) {\r
     Status = EFI_DEVICE_ERROR;\r
     goto ON_EXIT;\r
   }\r