]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/SnpDxe/Receive_filters.c
MdeModulePkg: SNP should check Cdb.StatCode with PXE_STATCODE_SUCCESS.
[mirror_edk2.git] / MdeModulePkg / Universal / Network / SnpDxe / Receive_filters.c
index 343b516d9e09d2b9ae8d7b71b8f9bb8b03a24a7a..c37018c8263fb55094e445e1a5765e41f8171c63 100644 (file)
@@ -1,21 +1,16 @@
 /** @file\r
-Copyright (c) 2004 - 2007, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution.  The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
+    Implementation of managing the multicast receive filters of a network\r
+    interface.\r
+\r
+Copyright (c) 2004 - 2016, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials are licensed and made available under the \r
+terms and conditions of the BSD License which accompanies this distribution. The \r
+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
 \r
-Module name:\r
-  receive_filters.c\r
-\r
-Abstract:\r
-\r
-Revision history:\r
-  2000-Feb-17 M(f)J   Genesis.\r
-\r
 **/\r
 \r
 \r
@@ -23,79 +18,83 @@ Revision history:
 #include "Snp.h"\r
 \r
 /**\r
-  this routine calls undi to enable the receive filters.\r
-\r
-  @param  snp                pointer to snp driver structure\r
-  @param  EnableFlags        bit mask for enabling the receive filters\r
-  @param  MCastAddressCount  multicast address count for a new multicast address\r
-                             list\r
-  @param  MCastAddressList   list of new multicast addresses\r
-\r
+  Call undi to enable the receive filters.\r
+\r
+  @param  Snp                Pointer to snp driver structure.\r
+  @param  EnableFlags        Bit mask for enabling the receive filters.\r
+  @param  MCastAddressCount  Multicast address count for a new multicast address\r
+                             list.\r
+  @param  MCastAddressList   List of new multicast addresses. \r
+   \r
+  @retval EFI_SUCCESS           The multicast receive filter list was updated.\r
+  @retval EFI_INVALID_PARAMETER Invalid UNDI command.\r
+  @retval EFI_UNSUPPORTED       Command is not supported by UNDI.\r
+  @retval EFI_DEVICE_ERROR      Fail to execute UNDI command.\r
 \r
 **/\r
 EFI_STATUS\r
-pxe_rcvfilter_enable (\r
-  SNP_DRIVER      *snp,\r
+PxeRecvFilterEnable (\r
+  SNP_DRIVER      *Snp,\r
   UINT32          EnableFlags,\r
   UINTN           MCastAddressCount,\r
   EFI_MAC_ADDRESS *MCastAddressList\r
   )\r
 {\r
-  snp->cdb.OpCode     = PXE_OPCODE_RECEIVE_FILTERS;\r
-  snp->cdb.OpFlags    = PXE_OPFLAGS_RECEIVE_FILTER_ENABLE;\r
-  snp->cdb.CPBsize    = PXE_CPBSIZE_NOT_USED;\r
-  snp->cdb.DBsize     = PXE_DBSIZE_NOT_USED;\r
-  snp->cdb.CPBaddr    = PXE_CPBADDR_NOT_USED;\r
-  snp->cdb.DBaddr     = PXE_DBADDR_NOT_USED;\r
-  snp->cdb.StatCode   = PXE_STATCODE_INITIALIZE;\r
-  snp->cdb.StatFlags  = PXE_STATFLAGS_INITIALIZE;\r
-  snp->cdb.IFnum      = snp->if_num;\r
-  snp->cdb.Control    = PXE_CONTROL_LAST_CDB_IN_LIST;\r
+  Snp->Cdb.OpCode     = PXE_OPCODE_RECEIVE_FILTERS;\r
+  Snp->Cdb.OpFlags    = PXE_OPFLAGS_RECEIVE_FILTER_ENABLE;\r
+  Snp->Cdb.CPBsize    = PXE_CPBSIZE_NOT_USED;\r
+  Snp->Cdb.DBsize     = PXE_DBSIZE_NOT_USED;\r
+  Snp->Cdb.CPBaddr    = PXE_CPBADDR_NOT_USED;\r
+  Snp->Cdb.DBaddr     = PXE_DBADDR_NOT_USED;\r
+  Snp->Cdb.StatCode   = PXE_STATCODE_INITIALIZE;\r
+  Snp->Cdb.StatFlags  = PXE_STATFLAGS_INITIALIZE;\r
+  Snp->Cdb.IFnum      = Snp->IfNum;\r
+  Snp->Cdb.Control    = PXE_CONTROL_LAST_CDB_IN_LIST;\r
 \r
   if ((EnableFlags & EFI_SIMPLE_NETWORK_RECEIVE_UNICAST) != 0) {\r
-    snp->cdb.OpFlags |= PXE_OPFLAGS_RECEIVE_FILTER_UNICAST;\r
+    Snp->Cdb.OpFlags |= PXE_OPFLAGS_RECEIVE_FILTER_UNICAST;\r
   }\r
 \r
   if ((EnableFlags & EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST) != 0) {\r
-    snp->cdb.OpFlags |= PXE_OPFLAGS_RECEIVE_FILTER_BROADCAST;\r
+    Snp->Cdb.OpFlags |= PXE_OPFLAGS_RECEIVE_FILTER_BROADCAST;\r
   }\r
 \r
   if ((EnableFlags & EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS) != 0) {\r
-    snp->cdb.OpFlags |= PXE_OPFLAGS_RECEIVE_FILTER_PROMISCUOUS;\r
+    Snp->Cdb.OpFlags |= PXE_OPFLAGS_RECEIVE_FILTER_PROMISCUOUS;\r
   }\r
 \r
   if ((EnableFlags & EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST) != 0) {\r
-    snp->cdb.OpFlags |= PXE_OPFLAGS_RECEIVE_FILTER_ALL_MULTICAST;\r
+    Snp->Cdb.OpFlags |= PXE_OPFLAGS_RECEIVE_FILTER_ALL_MULTICAST;\r
   }\r
 \r
   if ((EnableFlags & EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST) != 0) {\r
-    snp->cdb.OpFlags |= PXE_OPFLAGS_RECEIVE_FILTER_FILTERED_MULTICAST;\r
+    Snp->Cdb.OpFlags |= PXE_OPFLAGS_RECEIVE_FILTER_FILTERED_MULTICAST;\r
   }\r
 \r
   if (MCastAddressCount != 0) {\r
-    snp->cdb.CPBsize  = (UINT16) (MCastAddressCount * sizeof (EFI_MAC_ADDRESS));\r
-    snp->cdb.CPBaddr  = (UINT64)(UINTN) snp->cpb;\r
-    CopyMem (snp->cpb, MCastAddressList, snp->cdb.CPBsize);\r
+    Snp->Cdb.CPBsize  = (UINT16) (MCastAddressCount * sizeof (EFI_MAC_ADDRESS));\r
+    Snp->Cdb.CPBaddr  = (UINT64)(UINTN)Snp->Cpb;\r
+    CopyMem (Snp->Cpb, MCastAddressList, Snp->Cdb.CPBsize);\r
   }\r
   //\r
   // Issue UNDI command and check result.\r
   //\r
   DEBUG ((EFI_D_NET, "\nsnp->undi.receive_filters()  "));\r
 \r
-  (*snp->issue_undi32_command) ((UINT64)(UINTN) &snp->cdb);\r
+  (*Snp->IssueUndi32Command) ((UINT64)(UINTN) &Snp->Cdb);\r
 \r
-  if (snp->cdb.StatCode != EFI_SUCCESS) {\r
+  if (Snp->Cdb.StatCode != PXE_STATCODE_SUCCESS) {\r
     //\r
     // UNDI command failed.  Return UNDI status to caller.\r
     //\r
     DEBUG (\r
       (EFI_D_ERROR,\r
       "\nsnp->undi.receive_filters()  %xh:%xh\n",\r
-      snp->cdb.StatFlags,\r
-      snp->cdb.StatCode)\r
+      Snp->Cdb.StatFlags,\r
+      Snp->Cdb.StatCode)\r
       );\r
 \r
-    switch (snp->cdb.StatCode) {\r
+    switch (Snp->Cdb.StatCode) {\r
     case PXE_STATCODE_INVALID_CDB:\r
     case PXE_STATCODE_INVALID_CPB:\r
     case PXE_STATCODE_INVALID_PARAMETER:\r
@@ -112,72 +111,75 @@ pxe_rcvfilter_enable (
 }\r
 \r
 /**\r
-  this routine calls undi to disable the receive filters.\r
+  Call undi to disable the receive filters.\r
 \r
-  @param  snp                pointer to snp driver structure\r
-  @param  DisableFlags       bit mask for disabling the receive filters\r
-  @param  ResetMCastList     boolean flag to reset/delete the multicast filter list\r
+  @param  Snp             Pointer to snp driver structure\r
+  @param  DisableFlags    Bit mask for disabling the receive filters\r
+  @param  ResetMCastList  Boolean flag to reset/delete the multicast filter \r
+                          list.\r
 \r
-\r
-**/\r
+  @retval EFI_SUCCESS           The multicast receive filter list was updated.\r
+  @retval EFI_DEVICE_ERROR      Fail to execute UNDI command.\r
+   \r
+**/ \r
 EFI_STATUS\r
-pxe_rcvfilter_disable (\r
-  SNP_DRIVER *snp,\r
+PxeRecvFilterDisable (\r
+  SNP_DRIVER *Snp,\r
   UINT32     DisableFlags,\r
   BOOLEAN    ResetMCastList\r
   )\r
 {\r
-  snp->cdb.OpCode     = PXE_OPCODE_RECEIVE_FILTERS;\r
-  snp->cdb.CPBsize    = PXE_CPBSIZE_NOT_USED;\r
-  snp->cdb.DBsize     = PXE_DBSIZE_NOT_USED;\r
-  snp->cdb.CPBaddr    = PXE_CPBADDR_NOT_USED;\r
-  snp->cdb.DBaddr     = PXE_DBADDR_NOT_USED;\r
-  snp->cdb.StatCode   = PXE_STATCODE_INITIALIZE;\r
-  snp->cdb.StatFlags  = PXE_STATFLAGS_INITIALIZE;\r
-  snp->cdb.IFnum      = snp->if_num;\r
-  snp->cdb.Control    = PXE_CONTROL_LAST_CDB_IN_LIST;\r
-\r
-  snp->cdb.OpFlags    = (UINT16) (DisableFlags ? PXE_OPFLAGS_RECEIVE_FILTER_DISABLE : PXE_OPFLAGS_NOT_USED);\r
+  Snp->Cdb.OpCode     = PXE_OPCODE_RECEIVE_FILTERS;\r
+  Snp->Cdb.CPBsize    = PXE_CPBSIZE_NOT_USED;\r
+  Snp->Cdb.DBsize     = PXE_DBSIZE_NOT_USED;\r
+  Snp->Cdb.CPBaddr    = PXE_CPBADDR_NOT_USED;\r
+  Snp->Cdb.DBaddr     = PXE_DBADDR_NOT_USED;\r
+  Snp->Cdb.StatCode   = PXE_STATCODE_INITIALIZE;\r
+  Snp->Cdb.StatFlags  = PXE_STATFLAGS_INITIALIZE;\r
+  Snp->Cdb.IFnum      = Snp->IfNum;\r
+  Snp->Cdb.Control    = PXE_CONTROL_LAST_CDB_IN_LIST;\r
+\r
+  Snp->Cdb.OpFlags    = (UINT16) ((DisableFlags != 0) ? PXE_OPFLAGS_RECEIVE_FILTER_DISABLE : PXE_OPFLAGS_NOT_USED);\r
 \r
   if (ResetMCastList) {\r
-    snp->cdb.OpFlags |= PXE_OPFLAGS_RECEIVE_FILTER_RESET_MCAST_LIST;\r
+    Snp->Cdb.OpFlags |= PXE_OPFLAGS_RECEIVE_FILTER_RESET_MCAST_LIST;\r
   }\r
 \r
   if ((DisableFlags & EFI_SIMPLE_NETWORK_RECEIVE_UNICAST) != 0) {\r
-    snp->cdb.OpFlags |= PXE_OPFLAGS_RECEIVE_FILTER_UNICAST;\r
+    Snp->Cdb.OpFlags |= PXE_OPFLAGS_RECEIVE_FILTER_UNICAST;\r
   }\r
 \r
   if ((DisableFlags & EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST) != 0) {\r
-    snp->cdb.OpFlags |= PXE_OPFLAGS_RECEIVE_FILTER_BROADCAST;\r
+    Snp->Cdb.OpFlags |= PXE_OPFLAGS_RECEIVE_FILTER_BROADCAST;\r
   }\r
 \r
   if ((DisableFlags & EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS) != 0) {\r
-    snp->cdb.OpFlags |= PXE_OPFLAGS_RECEIVE_FILTER_PROMISCUOUS;\r
+    Snp->Cdb.OpFlags |= PXE_OPFLAGS_RECEIVE_FILTER_PROMISCUOUS;\r
   }\r
 \r
   if ((DisableFlags & EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST) != 0) {\r
-    snp->cdb.OpFlags |= PXE_OPFLAGS_RECEIVE_FILTER_ALL_MULTICAST;\r
+    Snp->Cdb.OpFlags |= PXE_OPFLAGS_RECEIVE_FILTER_ALL_MULTICAST;\r
   }\r
 \r
   if ((DisableFlags & EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST) != 0) {\r
-    snp->cdb.OpFlags |= PXE_OPFLAGS_RECEIVE_FILTER_FILTERED_MULTICAST;\r
+    Snp->Cdb.OpFlags |= PXE_OPFLAGS_RECEIVE_FILTER_FILTERED_MULTICAST;\r
   }\r
   //\r
   // Issue UNDI command and check result.\r
   //\r
   DEBUG ((EFI_D_NET, "\nsnp->undi.receive_filters()  "));\r
 \r
-  (*snp->issue_undi32_command) ((UINT64)(UINTN) &snp->cdb);\r
+  (*Snp->IssueUndi32Command) ((UINT64)(UINTN) &Snp->Cdb);\r
 \r
-  if (snp->cdb.StatCode != EFI_SUCCESS) {\r
+  if (Snp->Cdb.StatCode != PXE_STATCODE_SUCCESS) {\r
     //\r
     // UNDI command failed.  Return UNDI status to caller.\r
     //\r
     DEBUG (\r
       (EFI_D_ERROR,\r
       "\nsnp->undi.receive_filters()  %xh:%xh\n",\r
-      snp->cdb.StatFlags,\r
-      snp->cdb.StatCode)\r
+      Snp->Cdb.StatFlags,\r
+      Snp->Cdb.StatCode)\r
       );\r
 \r
     return EFI_DEVICE_ERROR;\r
@@ -187,47 +189,49 @@ pxe_rcvfilter_disable (
 }\r
 \r
 /**\r
-  this routine calls undi to read the receive filters.\r
-\r
-  @param  snp                pointer to snp driver structure\r
+  Call undi to read the receive filters.\r
 \r
+  @param  Snp                Pointer to snp driver structure.\r
 \r
+  @retval EFI_SUCCESS           The receive filter was read.\r
+  @retval EFI_DEVICE_ERROR      Fail to execute UNDI command. \r
+   \r
 **/\r
 EFI_STATUS\r
-pxe_rcvfilter_read (\r
-  SNP_DRIVER *snp\r
+PxeRecvFilterRead (\r
+  SNP_DRIVER *Snp\r
   )\r
 {\r
-  snp->cdb.OpCode   = PXE_OPCODE_RECEIVE_FILTERS;\r
-  snp->cdb.OpFlags  = PXE_OPFLAGS_RECEIVE_FILTER_READ;\r
-  snp->cdb.CPBsize  = PXE_CPBSIZE_NOT_USED;\r
-  snp->cdb.DBsize   = (UINT16) (snp->mode.MaxMCastFilterCount * sizeof (EFI_MAC_ADDRESS));\r
-  snp->cdb.CPBaddr  = PXE_CPBADDR_NOT_USED;\r
-  if (snp->cdb.DBsize == 0) {\r
-    snp->cdb.DBaddr = (UINT64)(UINTN) NULL;\r
+  Snp->Cdb.OpCode   = PXE_OPCODE_RECEIVE_FILTERS;\r
+  Snp->Cdb.OpFlags  = PXE_OPFLAGS_RECEIVE_FILTER_READ;\r
+  Snp->Cdb.CPBsize  = PXE_CPBSIZE_NOT_USED;\r
+  Snp->Cdb.DBsize   = (UINT16) (Snp->Mode.MaxMCastFilterCount * sizeof (EFI_MAC_ADDRESS));\r
+  Snp->Cdb.CPBaddr  = PXE_CPBADDR_NOT_USED;\r
+  if (Snp->Cdb.DBsize == 0) {\r
+    Snp->Cdb.DBaddr = (UINT64)(UINTN) NULL;\r
   } else {\r
-    snp->cdb.DBaddr = (UINT64)(UINTN) snp->db;\r
-    ZeroMem (snp->db, snp->cdb.DBsize);\r
+    Snp->Cdb.DBaddr = (UINT64)(UINTN) Snp->Db;\r
+    ZeroMem (Snp->Db, Snp->Cdb.DBsize);\r
   }\r
 \r
-  snp->cdb.StatCode   = PXE_STATCODE_INITIALIZE;\r
-  snp->cdb.StatFlags  = PXE_STATFLAGS_INITIALIZE;\r
-  snp->cdb.IFnum      = snp->if_num;\r
-  snp->cdb.Control    = PXE_CONTROL_LAST_CDB_IN_LIST;\r
+  Snp->Cdb.StatCode   = PXE_STATCODE_INITIALIZE;\r
+  Snp->Cdb.StatFlags  = PXE_STATFLAGS_INITIALIZE;\r
+  Snp->Cdb.IFnum      = Snp->IfNum;\r
+  Snp->Cdb.Control    = PXE_CONTROL_LAST_CDB_IN_LIST;\r
 \r
   DEBUG ((EFI_D_NET, "\nsnp->undi.receive_filters()  "));\r
 \r
-  (*snp->issue_undi32_command) ((UINT64)(UINTN) &snp->cdb);\r
+  (*Snp->IssueUndi32Command) ((UINT64)(UINTN) &Snp->Cdb);\r
 \r
-  if (snp->cdb.StatCode != EFI_SUCCESS) {\r
+  if (Snp->Cdb.StatCode != PXE_STATCODE_SUCCESS) {\r
     //\r
     // UNDI command failed.  Return UNDI status to caller.\r
     //\r
     DEBUG (\r
       (EFI_D_ERROR,\r
       "\nsnp->undi.receive_filters()  %xh:%xh\n",\r
-      snp->cdb.StatFlags,\r
-      snp->cdb.StatCode)\r
+      Snp->Cdb.StatFlags,\r
+      Snp->Cdb.StatCode)\r
       );\r
 \r
     return EFI_DEVICE_ERROR;\r
@@ -235,29 +239,29 @@ pxe_rcvfilter_read (
   //\r
   // Convert UNDI32 StatFlags to EFI SNP filter flags.\r
   //\r
-  snp->mode.ReceiveFilterSetting = 0;\r
+  Snp->Mode.ReceiveFilterSetting = 0;\r
 \r
-  if ((snp->cdb.StatFlags & PXE_STATFLAGS_RECEIVE_FILTER_UNICAST) != 0) {\r
-    snp->mode.ReceiveFilterSetting |= EFI_SIMPLE_NETWORK_RECEIVE_UNICAST;\r
+  if ((Snp->Cdb.StatFlags & PXE_STATFLAGS_RECEIVE_FILTER_UNICAST) != 0) {\r
+    Snp->Mode.ReceiveFilterSetting |= EFI_SIMPLE_NETWORK_RECEIVE_UNICAST;\r
   }\r
 \r
-  if ((snp->cdb.StatFlags & PXE_STATFLAGS_RECEIVE_FILTER_BROADCAST) != 0) {\r
-    snp->mode.ReceiveFilterSetting |= EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST;\r
+  if ((Snp->Cdb.StatFlags & PXE_STATFLAGS_RECEIVE_FILTER_BROADCAST) != 0) {\r
+    Snp->Mode.ReceiveFilterSetting |= EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST;\r
   }\r
 \r
-  if ((snp->cdb.StatFlags & PXE_STATFLAGS_RECEIVE_FILTER_PROMISCUOUS) != 0) {\r
-    snp->mode.ReceiveFilterSetting |= EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS;\r
+  if ((Snp->Cdb.StatFlags & PXE_STATFLAGS_RECEIVE_FILTER_PROMISCUOUS) != 0) {\r
+    Snp->Mode.ReceiveFilterSetting |= EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS;\r
   }\r
 \r
-  if ((snp->cdb.StatFlags & PXE_STATFLAGS_RECEIVE_FILTER_ALL_MULTICAST) != 0) {\r
-    snp->mode.ReceiveFilterSetting |= EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST;\r
+  if ((Snp->Cdb.StatFlags & PXE_STATFLAGS_RECEIVE_FILTER_ALL_MULTICAST) != 0) {\r
+    Snp->Mode.ReceiveFilterSetting |= EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST;\r
   }\r
 \r
-  if ((snp->cdb.StatFlags & PXE_STATFLAGS_RECEIVE_FILTER_FILTERED_MULTICAST) != 0) {\r
-    snp->mode.ReceiveFilterSetting |= EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST;\r
+  if ((Snp->Cdb.StatFlags & PXE_STATFLAGS_RECEIVE_FILTER_FILTERED_MULTICAST) != 0) {\r
+    Snp->Mode.ReceiveFilterSetting |= EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST;\r
   }\r
 \r
-  CopyMem (snp->mode.MCastFilter, snp->db, snp->cdb.DBsize);\r
+  CopyMem (Snp->Mode.MCastFilter, Snp->Db, Snp->Cdb.DBsize);\r
 \r
   //\r
   // Count number of active entries in multicast filter list.\r
@@ -267,12 +271,12 @@ pxe_rcvfilter_read (
 \r
     SetMem (&ZeroMacAddr, sizeof ZeroMacAddr, 0);\r
 \r
-    for (snp->mode.MCastFilterCount = 0;\r
-         snp->mode.MCastFilterCount < snp->mode.MaxMCastFilterCount;\r
-         snp->mode.MCastFilterCount++\r
+    for (Snp->Mode.MCastFilterCount = 0;\r
+         Snp->Mode.MCastFilterCount < Snp->Mode.MaxMCastFilterCount;\r
+         Snp->Mode.MCastFilterCount++\r
         ) {\r
       if (CompareMem (\r
-            &snp->mode.MCastFilter[snp->mode.MCastFilterCount],\r
+            &Snp->Mode.MCastFilter[Snp->Mode.MCastFilterCount],\r
             &ZeroMacAddr,\r
             sizeof ZeroMacAddr\r
             ) == 0) {\r
@@ -286,46 +290,123 @@ pxe_rcvfilter_read (
 \r
 \r
 /**\r
-  This is the SNP interface routine for reading/enabling/disabling the\r
-  receive filters.\r
-  This routine basically retrieves snp structure, checks the SNP state and\r
-  checks the parameter validity, calls one of the above routines to actually\r
-  do the work\r
-\r
-  @param  this               context pointer\r
-  @param  EnableFlags        bit mask for enabling the receive filters\r
-  @param  DisableFlags       bit mask for disabling the receive filters\r
-  @param  ResetMCastList     boolean flag to reset/delete the multicast filter list\r
-  @param  MCastAddressCount  multicast address count for a new multicast address\r
-                             list\r
-  @param  MCastAddressList   list of new multicast addresses\r
-\r
+  Manages the multicast receive filters of a network interface.\r
+  \r
+  This function is used enable and disable the hardware and software receive \r
+  filters for the underlying network device.\r
+  The receive filter change is broken down into three steps: \r
+  * The filter mask bits that are set (ON) in the Enable parameter are added to \r
+    the current receive filter settings. \r
+  * The filter mask bits that are set (ON) in the Disable parameter are subtracted\r
+    from the updated receive filter settings.\r
+  * If the resulting receive filter setting is not supported by the hardware a\r
+    more liberal setting is selected.\r
+  If the same bits are set in the Enable and Disable parameters, then the bits \r
+  in the Disable parameter takes precedence.\r
+  If the ResetMCastFilter parameter is TRUE, then the multicast address list \r
+  filter is disabled (irregardless of what other multicast bits are set in the \r
+  Enable and Disable parameters). The SNP->Mode->MCastFilterCount field is set \r
+  to zero. The Snp->Mode->MCastFilter contents are undefined.\r
+  After enabling or disabling receive filter settings, software should verify \r
+  the new settings by checking the Snp->Mode->ReceiveFilterSettings, \r
+  Snp->Mode->MCastFilterCount and Snp->Mode->MCastFilter fields.\r
+  Note: Some network drivers and/or devices will automatically promote receive \r
+    filter settings if the requested setting can not be honored. For example, if\r
+    a request for four multicast addresses is made and the underlying hardware \r
+    only supports two multicast addresses the driver might set the promiscuous \r
+    or promiscuous multicast receive filters instead. The receiving software is\r
+    responsible for discarding any extra packets that get through the hardware \r
+    receive filters.\r
+    Note: Note: To disable all receive filter hardware, the network driver must \r
+      be Shutdown() and Stopped(). Calling ReceiveFilters() with Disable set to\r
+      Snp->Mode->ReceiveFilterSettings will make it so no more packets are \r
+      returned by the Receive() function, but the receive hardware may still be \r
+      moving packets into system memory before inspecting and discarding them.\r
+      Unexpected system errors, reboots and hangs can occur if an OS is loaded \r
+      and the network devices are not Shutdown() and Stopped().\r
+  If ResetMCastFilter is TRUE, then the multicast receive filter list on the \r
+  network interface will be reset to the default multicast receive filter list.\r
+  If ResetMCastFilter is FALSE, and this network interface allows the multicast \r
+  receive filter list to be modified, then the MCastFilterCnt and MCastFilter \r
+  are used to update the current multicast receive filter list. The modified \r
+  receive filter list settings can be found in the MCastFilter field of \r
+  EFI_SIMPLE_NETWORK_MODE. If the network interface does not allow the multicast\r
+  receive filter list to be modified, then EFI_INVALID_PARAMETER will be returned.\r
+  If the driver has not been initialized, EFI_DEVICE_ERROR will be returned.\r
+  If the receive filter mask and multicast receive filter list have been \r
+  successfully updated on the network interface, EFI_SUCCESS will be returned.\r
+\r
+  @param This             A pointer to the EFI_SIMPLE_NETWORK_PROTOCOL instance.\r
+  @param Enable           A bit mask of receive filters to enable on the network\r
+                          interface.\r
+  @param Disable          A bit mask of receive filters to disable on the network\r
+                          interface. For backward compatibility with EFI 1.1 \r
+                          platforms, the EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST bit\r
+                          must be set when the ResetMCastFilter parameter is TRUE.\r
+  @param ResetMCastFilter Set to TRUE to reset the contents of the multicast \r
+                          receive filters on the network interface to their \r
+                          default values. \r
+  @param MCastFilterCnt   Number of multicast HW MAC addresses in the new MCastFilter\r
+                          list. This value must be less than or equal to the \r
+                          MCastFilterCnt field of EFI_SIMPLE_NETWORK_MODE. \r
+                          This field is optional if ResetMCastFilter is TRUE.\r
+  @param MCastFilter      A pointer to a list of new multicast receive filter HW\r
+                          MAC addresses. This list will replace any existing \r
+                          multicast HW MAC address list. This field is optional \r
+                          if ResetMCastFilter is TRUE.\r
+   \r
+  @retval EFI_SUCCESS            The multicast receive filter list was updated.\r
+  @retval EFI_NOT_STARTED        The network interface has not been started.\r
+  @retval EFI_INVALID_PARAMETER  One or more of the following conditions is TRUE:\r
+                                 * This is NULL\r
+                                 * There are bits set in Enable that are not set\r
+                                   in Snp->Mode->ReceiveFilterMask\r
+                                 * There are bits set in Disable that are not set\r
+                                   in Snp->Mode->ReceiveFilterMask\r
+                                 * Multicast is being enabled (the \r
+                                   EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST bit is \r
+                                   set in Enable, it is not set in Disable, and \r
+                                   ResetMCastFilter is FALSE) and MCastFilterCount\r
+                                   is zero\r
+                                 * Multicast is being enabled and MCastFilterCount\r
+                                   is greater than Snp->Mode->MaxMCastFilterCount\r
+                                 * Multicast is being enabled and MCastFilter is NULL\r
+                                 * Multicast is being enabled and one or more of\r
+                                   the addresses in the MCastFilter list are not\r
+                                   valid multicast MAC addresses\r
+  @retval EFI_DEVICE_ERROR       One or more of the following conditions is TRUE:\r
+                                 * The network interface has been started but has\r
+                                   not been initialized\r
+                                 * An unexpected error was returned by the \r
+                                   underlying network driver or device\r
+  @retval EFI_UNSUPPORTED        This function is not supported by the network\r
+                                 interface.\r
 \r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
-snp_undi32_receive_filters (\r
-  IN EFI_SIMPLE_NETWORK_PROTOCOL * this,\r
-  IN UINT32                      EnableFlags,\r
-  IN UINT32                      DisableFlags,\r
-  IN BOOLEAN                     ResetMCastList,\r
-  IN UINTN                       MCastAddressCount OPTIONAL,\r
-  IN EFI_MAC_ADDRESS             * MCastAddressList OPTIONAL\r
+SnpUndi32ReceiveFilters (\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
-  SNP_DRIVER  *snp;\r
+  SNP_DRIVER  *Snp;\r
   EFI_STATUS  Status;\r
   EFI_TPL     OldTpl;\r
 \r
-  if (this == NULL) {\r
+  if (This == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  snp = EFI_SIMPLE_NETWORK_DEV_FROM_THIS (this);\r
+  Snp = EFI_SIMPLE_NETWORK_DEV_FROM_THIS (This);\r
 \r
   OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
 \r
-  switch (snp->mode.State) {\r
+  switch (Snp->Mode.State) {\r
   case EfiSimpleNetworkInitialized:\r
     break;\r
 \r
@@ -341,21 +422,21 @@ snp_undi32_receive_filters (
   // check if we are asked to enable or disable something that the UNDI\r
   // does not even support!\r
   //\r
-  if (((EnableFlags &~snp->mode.ReceiveFilterMask) != 0) ||\r
-    ((DisableFlags &~snp->mode.ReceiveFilterMask) != 0)) {\r
+  if (((Enable &~Snp->Mode.ReceiveFilterMask) != 0) ||\r
+    ((Disable &~Snp->Mode.ReceiveFilterMask) != 0)) {\r
     Status = EFI_INVALID_PARAMETER;\r
     goto ON_EXIT;\r
   }\r
 \r
-  if (ResetMCastList) {\r
+  if (ResetMCastFilter) {\r
 \r
-    DisableFlags |= EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST & snp->mode.ReceiveFilterMask;\r
-    MCastAddressCount = 0;\r
-    MCastAddressList  = NULL;\r
+    Disable |= EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST & Snp->Mode.ReceiveFilterMask;\r
+    MCastFilterCnt = 0;\r
+    MCastFilter    = NULL;\r
   } else {\r
-    if (MCastAddressCount != 0) {\r
-      if ((MCastAddressCount > snp->mode.MaxMCastFilterCount) ||\r
-        (MCastAddressList == NULL)) {\r
+    if (MCastFilterCnt != 0) {\r
+      if ((MCastFilterCnt > Snp->Mode.MaxMCastFilterCount) ||\r
+          (MCastFilter == NULL)) {\r
 \r
         Status = EFI_INVALID_PARAMETER;\r
         goto ON_EXIT;\r
@@ -363,38 +444,38 @@ snp_undi32_receive_filters (
     }\r
   }\r
 \r
-  if (EnableFlags == 0 && DisableFlags == 0 && !ResetMCastList && MCastAddressCount == 0) {\r
+  if (Enable == 0 && Disable == 0 && !ResetMCastFilter && MCastFilterCnt == 0) {\r
     Status = EFI_SUCCESS;\r
     goto ON_EXIT;\r
   }\r
 \r
-  if ((EnableFlags & EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST) != 0 && MCastAddressCount == 0) {\r
+  if ((Enable & EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST) != 0 && MCastFilterCnt == 0) {\r
     Status = EFI_INVALID_PARAMETER;\r
     goto ON_EXIT;\r
   }\r
 \r
-  if ((EnableFlags != 0) || (MCastAddressCount != 0)) {\r
-    Status = pxe_rcvfilter_enable (\r
-              snp,\r
-              EnableFlags,\r
-              MCastAddressCount,\r
-              MCastAddressList\r
-              );\r
+  if ((Enable != 0) || (MCastFilterCnt != 0)) {\r
+    Status = PxeRecvFilterEnable (\r
+               Snp,\r
+               Enable,\r
+               MCastFilterCnt,\r
+               MCastFilter\r
+               );\r
 \r
     if (EFI_ERROR (Status)) {\r
       goto ON_EXIT;\r
     }\r
   }\r
 \r
-  if ((DisableFlags != 0) || ResetMCastList) {\r
-    Status = pxe_rcvfilter_disable (snp, DisableFlags, ResetMCastList);\r
+  if ((Disable != 0) || ResetMCastFilter) {\r
+    Status = PxeRecvFilterDisable (Snp, Disable, ResetMCastFilter);\r
 \r
     if (EFI_ERROR (Status)) {\r
       goto ON_EXIT;\r
     }\r
   }\r
 \r
-  Status = pxe_rcvfilter_read (snp);\r
+  Status = PxeRecvFilterRead (Snp);\r
 \r
 ON_EXIT:\r
   gBS->RestoreTPL (OldTpl);\r