/** @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
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
*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
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