]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/MnpDxe/MnpImpl.h
Update the copyright notice format
[mirror_edk2.git] / MdeModulePkg / Universal / Network / MnpDxe / MnpImpl.h
index 436dbeb67488ee26010b7948eb2d431119333c29..f94e2083065aa5b4ce3d131906d8dd4d604fab50 100644 (file)
@@ -1,21 +1,16 @@
 /** @file\r
+  Declaration of structures and functions of MnpDxe driver.\r
 \r
-Copyright (c) 2005 - 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
+Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials\r
+are licensed and made available under the terms and conditions\r
+of the BSD License which accompanies this distribution.  The full\r
+text of the license may be found at<BR>\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
-\r
-  MnpImpl.h\r
-\r
-Abstract:\r
-\r
-\r
 **/\r
 \r
 #ifndef _MNP_IMPL_H_\r
@@ -25,8 +20,9 @@ Abstract:
 \r
 #define NET_ETHER_FCS_SIZE            4\r
 \r
-#define MNP_SYS_POLL_INTERVAL         (50 * TICKS_PER_MS)   // 50 milliseconds\r
+#define MNP_SYS_POLL_INTERVAL         (10 * TICKS_PER_MS)   // 10 milliseconds\r
 #define MNP_TIMEOUT_CHECK_INTERVAL    (50 * TICKS_PER_MS)   // 50 milliseconds\r
+#define MNP_MEDIA_DETECT_INTERVAL     (500 * TICKS_PER_MS)  // 500 milliseconds\r
 #define MNP_TX_TIMEOUT_TIME           (500 * TICKS_PER_MS)  // 500 milliseconds\r
 #define MNP_INIT_NET_BUFFER_NUM       512\r
 #define MNP_NET_BUFFER_INCREASEMENT   64\r
@@ -40,7 +36,7 @@ Abstract:
 #define UNICAST_PACKET                MNP_RECEIVE_UNICAST\r
 #define BROADCAST_PACKET              MNP_RECEIVE_BROADCAST\r
 \r
-#define MNP_INSTANCE_DATA_SIGNATURE   EFI_SIGNATURE_32 ('M', 'n', 'p', 'I')\r
+#define MNP_INSTANCE_DATA_SIGNATURE   SIGNATURE_32 ('M', 'n', 'p', 'I')\r
 \r
 #define MNP_INSTANCE_DATA_FROM_THIS(a) \\r
   CR ( \\r
@@ -50,7 +46,7 @@ Abstract:
   MNP_INSTANCE_DATA_SIGNATURE \\r
   )\r
 \r
-typedef struct _MNP_INSTANCE_DATA {\r
+typedef struct {\r
   UINT32                          Signature;\r
 \r
   MNP_SERVICE_DATA                *MnpServiceData;\r
@@ -77,18 +73,18 @@ typedef struct _MNP_INSTANCE_DATA {
   UINT8                           ReceiveFilter;\r
 } MNP_INSTANCE_DATA;\r
 \r
-typedef struct _MNP_GROUP_ADDRESS {\r
+typedef struct {\r
   LIST_ENTRY      AddrEntry;\r
   EFI_MAC_ADDRESS Address;\r
   INTN            RefCnt;\r
 } MNP_GROUP_ADDRESS;\r
 \r
-typedef struct _MNP_GROUP_CONTROL_BLOCK {\r
+typedef struct {\r
   LIST_ENTRY        CtrlBlkEntry;\r
   MNP_GROUP_ADDRESS *GroupAddress;\r
 } MNP_GROUP_CONTROL_BLOCK;\r
 \r
-typedef struct _MNP_RXDATA_WRAP {\r
+typedef struct {\r
   LIST_ENTRY                        WrapEntry;\r
   MNP_INSTANCE_DATA                 *Instance;\r
   EFI_MANAGED_NETWORK_RECEIVE_DATA  RxData;\r
@@ -96,178 +92,766 @@ typedef struct _MNP_RXDATA_WRAP {
   UINT64                            TimeoutTick;\r
 } MNP_RXDATA_WRAP;\r
 \r
+\r
+/**\r
+  Initialize the mnp device context data.\r
+\r
+  @param[in, out]  MnpDeviceData      Pointer to the mnp device context data.\r
+  @param[in]       ImageHandle        The driver image handle.\r
+  @param[in]       ControllerHandle   Handle of device to bind driver to.\r
+\r
+  @retval EFI_SUCCESS           The mnp service context is initialized.\r
+  @retval EFI_UNSUPPORTED       ControllerHandle does not support Simple Network Protocol.\r
+  @retval Others                Other errors as indicated.\r
+\r
+**/\r
 EFI_STATUS\r
-MnpInitializeServiceData (\r
-  IN MNP_SERVICE_DATA  *MnpServiceData,\r
-  IN EFI_HANDLE        ImageHandle,\r
-  IN EFI_HANDLE        ControllerHandle\r
+MnpInitializeDeviceData (\r
+  IN OUT MNP_DEVICE_DATA   *MnpDeviceData,\r
+  IN     EFI_HANDLE        ImageHandle,\r
+  IN     EFI_HANDLE        ControllerHandle\r
   );\r
 \r
+/**\r
+  Destroy the MNP device context data.\r
+\r
+  @param[in, out]  MnpDeviceData      Pointer to the mnp device context data.\r
+  @param[in]       ImageHandle        The driver image handle.\r
+\r
+**/\r
 VOID\r
-MnpFlushServiceData (\r
-  MNP_SERVICE_DATA  *MnpServiceData\r
+MnpDestroyDeviceData (\r
+  IN OUT MNP_DEVICE_DATA   *MnpDeviceData,\r
+  IN     EFI_HANDLE        ImageHandle\r
+  );\r
+\r
+/**\r
+  Create mnp service context data.\r
+\r
+  @param[in]       MnpDeviceData      Pointer to the mnp device context data.\r
+  @param[in]       VlanId             The VLAN ID.\r
+  @param[in]       Priority           The VLAN priority. If VlanId is 0,\r
+                                      Priority is ignored.\r
+\r
+  @return A pointer to MNP_SERVICE_DATA or NULL if failed to create MNP service context.\r
+\r
+**/\r
+MNP_SERVICE_DATA *\r
+MnpCreateServiceData (\r
+  IN MNP_DEVICE_DATA     *MnpDeviceData,\r
+  IN UINT16              VlanId,\r
+  IN UINT8                Priority OPTIONAL\r
+  );\r
+\r
+/**\r
+  Initialize the mnp service context data.\r
+\r
+  @param[in, out]  MnpServiceData     Pointer to the mnp service context data.\r
+  @param[in]       ImageHandle        The driver image handle.\r
+  @param[in]       ControllerHandle   Handle of device to bind driver to.\r
+\r
+  @retval EFI_SUCCESS           The mnp service context is initialized.\r
+  @retval EFI_UNSUPPORTED       ControllerHandle does not support Simple Network Protocol.\r
+  @retval Others                Other errors as indicated.\r
+\r
+**/\r
+EFI_STATUS\r
+MnpInitializeServiceData (\r
+  IN OUT MNP_SERVICE_DATA    *MnpServiceData,\r
+  IN     EFI_HANDLE          ImageHandle,\r
+  IN     EFI_HANDLE          ControllerHandle\r
+  );\r
+\r
+/**\r
+  Destroy the MNP service context data.\r
+\r
+  @param[in, out]  MnpServiceData    Pointer to the mnp service context data.\r
+\r
+  @retval EFI_SUCCESS           The mnp service context is destroyed.\r
+  @retval Others                Errors as indicated.\r
+\r
+**/\r
+EFI_STATUS\r
+MnpDestroyServiceData (\r
+  IN OUT MNP_SERVICE_DATA    *MnpServiceData\r
   );\r
 \r
+/**\r
+  Destroy all child of the MNP service data.\r
+\r
+  @param[in, out]  MnpServiceData    Pointer to the mnp service context data.\r
+\r
+  @retval EFI_SUCCESS           All child are destroyed.\r
+  @retval Others                Failed to destroy all child.\r
+\r
+**/\r
+EFI_STATUS\r
+MnpDestroyServiceChild (\r
+  IN OUT MNP_SERVICE_DATA    *MnpServiceData\r
+  );\r
+\r
+/**\r
+  Find the MNP Service Data for given VLAN ID.\r
+\r
+  @param[in]  MnpDeviceData      Pointer to the mnp device context data.\r
+  @param[in]  VlanId             The VLAN ID.\r
+\r
+  @return A pointer to MNP_SERVICE_DATA or NULL if not found.\r
+\r
+**/\r
+MNP_SERVICE_DATA *\r
+MnpFindServiceData (\r
+  IN MNP_DEVICE_DATA     *MnpDeviceData,\r
+  IN UINT16              VlanId\r
+  );\r
+\r
+/**\r
+  Initialize the mnp instance context data.\r
+\r
+  @param[in]       MnpServiceData   Pointer to the mnp service context data.\r
+  @param[in, out]  Instance         Pointer to the mnp instance context data\r
+                                    to initialize.\r
+\r
+**/\r
 VOID\r
 MnpInitializeInstanceData (\r
-  IN MNP_SERVICE_DATA   *MnpServiceData,\r
-  IN MNP_INSTANCE_DATA  *Instance\r
+  IN     MNP_SERVICE_DATA    *MnpServiceData,\r
+  IN OUT MNP_INSTANCE_DATA   *Instance\r
   );\r
 \r
+/**\r
+  Check whether the token specified by Arg matches the token in Item.\r
+\r
+  @param[in]  Map               Pointer to the NET_MAP.\r
+  @param[in]  Item              Pointer to the NET_MAP_ITEM.\r
+  @param[in]  Arg               Pointer to the Arg, it's a pointer to the token to\r
+                                check.\r
+\r
+  @retval EFI_SUCCESS           The token specified by Arg is different from the\r
+                                token in Item.\r
+  @retval EFI_ACCESS_DENIED     The token specified by Arg is the same as that in\r
+                                Item.\r
+\r
+**/\r
 EFI_STATUS\r
+EFIAPI\r
 MnpTokenExist (\r
-  IN NET_MAP       *Map,\r
-  IN NET_MAP_ITEM  *Item,\r
-  IN VOID          *Arg\r
+  IN NET_MAP         *Map,\r
+  IN NET_MAP_ITEM    *Item,\r
+  IN VOID            *Arg\r
   );\r
 \r
+/**\r
+  Cancel the token specified by Arg if it matches the token in Item.\r
+\r
+  @param[in, out]  Map               Pointer to the NET_MAP.\r
+  @param[in, out]  Item              Pointer to the NET_MAP_ITEM.\r
+  @param[in]       Arg               Pointer to the Arg, it's a pointer to the\r
+                                     token to cancel.\r
+\r
+  @retval EFI_SUCCESS       The Arg is NULL, and the token in Item is cancelled,\r
+                            or the Arg isn't NULL, and the token in Item is\r
+                            different from the Arg.\r
+  @retval EFI_ABORTED       The Arg isn't NULL, the token in Item mathces the\r
+                            Arg, and the token is cancelled.\r
+\r
+**/\r
 EFI_STATUS\r
+EFIAPI\r
 MnpCancelTokens (\r
-  IN NET_MAP       *Map,\r
-  IN NET_MAP_ITEM  *Item,\r
-  IN VOID          *Arg\r
+  IN OUT NET_MAP         *Map,\r
+  IN OUT NET_MAP_ITEM    *Item,\r
+  IN     VOID            *Arg\r
   );\r
 \r
+/**\r
+  Flush the instance's received data.\r
+\r
+  @param[in, out]  Instance              Pointer to the mnp instance context data.\r
+\r
+**/\r
 VOID\r
 MnpFlushRcvdDataQueue (\r
-  IN MNP_INSTANCE_DATA  *Instance\r
+  IN OUT MNP_INSTANCE_DATA   *Instance\r
   );\r
 \r
+/**\r
+  Configure the Instance using ConfigData.\r
+\r
+  @param[in, out]  Instance     Pointer to the mnp instance context data.\r
+  @param[in]       ConfigData   Pointer to the configuration data used to configure\r
+                                the isntance.\r
+\r
+  @retval EFI_SUCCESS           The Instance is configured.\r
+  @retval EFI_UNSUPPORTED       EnableReceiveTimestamps is on and the\r
+                                implementation doesn't support it.\r
+  @retval Others                Other errors as indicated.\r
+\r
+**/\r
 EFI_STATUS\r
 MnpConfigureInstance (\r
-  IN MNP_INSTANCE_DATA                *Instance,\r
-  IN EFI_MANAGED_NETWORK_CONFIG_DATA  *ConfigData OPTIONAL\r
+  IN OUT MNP_INSTANCE_DATA                 *Instance,\r
+  IN     EFI_MANAGED_NETWORK_CONFIG_DATA   *ConfigData OPTIONAL\r
   );\r
 \r
+/**\r
+  Do the group operations for this instance.\r
+\r
+  @param[in, out]  Instance        Pointer to the instance context data.\r
+  @param[in]       JoinFlag        Set to TRUE to join a group. Set to TRUE to\r
+                                   leave a group/groups.\r
+  @param[in]       MacAddress      Pointer to the group address to join or leave.\r
+  @param[in]       CtrlBlk         Pointer to the group control block if JoinFlag\r
+                                   is FALSE.\r
+\r
+  @retval EFI_SUCCESS              The group operation finished.\r
+  @retval EFI_OUT_OF_RESOURCES     Failed due to lack of memory resources.\r
+  @retval Others                   Other errors as indicated.\r
+\r
+**/\r
 EFI_STATUS\r
 MnpGroupOp (\r
-  IN MNP_INSTANCE_DATA        *Instance,\r
-  IN BOOLEAN                  JoinFlag,\r
-  IN EFI_MAC_ADDRESS          *MacAddr OPTIONAL,\r
-  IN MNP_GROUP_CONTROL_BLOCK  *CtrlBlk OPTIONAL\r
+  IN OUT MNP_INSTANCE_DATA         *Instance,\r
+  IN     BOOLEAN                   JoinFlag,\r
+  IN     EFI_MAC_ADDRESS           *MacAddress OPTIONAL,\r
+  IN     MNP_GROUP_CONTROL_BLOCK   *CtrlBlk OPTIONAL\r
   );\r
 \r
+/**\r
+  Validates the Mnp transmit token.\r
+\r
+  @param[in]  Instance            Pointer to the Mnp instance context data.\r
+  @param[in]  Token               Pointer to the transmit token to check.\r
+\r
+  @return The Token is valid or not.\r
+\r
+**/\r
 BOOLEAN\r
 MnpIsValidTxToken (\r
-  IN MNP_INSTANCE_DATA                     *Instance,\r
-  IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN  *Token\r
+  IN MNP_INSTANCE_DATA                       *Instance,\r
+  IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN    *Token\r
   );\r
 \r
+/**\r
+  Build the packet to transmit from the TxData passed in.\r
+\r
+  @param[in]   MnpServiceData      Pointer to the mnp service context data.\r
+  @param[in]   TxData              Pointer to the transmit data containing the information\r
+                                   to build the packet.\r
+  @param[out]  PktBuf              Pointer to record the address of the packet.\r
+  @param[out]  PktLen              Pointer to a UINT32 variable used to record the packet's\r
+                                   length.\r
+\r
+**/\r
 VOID\r
 MnpBuildTxPacket (\r
-  IN  MNP_SERVICE_DATA                   *MnpServiceData,\r
-  IN  EFI_MANAGED_NETWORK_TRANSMIT_DATA  *TxData,\r
-  OUT UINT8                              **PktBuf,\r
-  OUT UINT32                             *PktLen\r
+  IN     MNP_SERVICE_DATA                    *MnpServiceData,\r
+  IN     EFI_MANAGED_NETWORK_TRANSMIT_DATA   *TxData,\r
+     OUT UINT8                               **PktBuf,\r
+     OUT UINT32                              *PktLen\r
   );\r
 \r
+/**\r
+  Synchronously send out the packet.\r
+\r
+  @param[in]       MnpServiceData      Pointer to the mnp service context data.\r
+  @param[in]       Packet              Pointer to the pakcet buffer.\r
+  @param[in]       Length              The length of the packet.\r
+  @param[in, out]  Token               Pointer to the token the packet generated from.\r
+\r
+  @retval EFI_SUCCESS                  The packet is sent out.\r
+  @retval EFI_TIMEOUT                  Time out occurs, the packet isn't sent.\r
+  @retval EFI_DEVICE_ERROR             An unexpected network error occurs.\r
+\r
+**/\r
 EFI_STATUS\r
 MnpSyncSendPacket (\r
-  IN MNP_SERVICE_DATA                      *MnpServiceData,\r
-  IN UINT8                                 *Packet,\r
-  IN UINT32                                Length,\r
-  IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN  *Token\r
+  IN     MNP_SERVICE_DATA                        *MnpServiceData,\r
+  IN     UINT8                                   *Packet,\r
+  IN     UINT32                                  Length,\r
+  IN OUT EFI_MANAGED_NETWORK_COMPLETION_TOKEN    *Token\r
   );\r
 \r
+/**\r
+  Try to deliver the received packet to the instance.\r
+\r
+  @param[in, out]  Instance     Pointer to the mnp instance context data.\r
+\r
+  @retval EFI_SUCCESS           The received packet is delivered, or there is no\r
+                                packet to deliver, or there is no available receive\r
+                                token.\r
+  @retval EFI_OUT_OF_RESOURCES  The deliver fails due to lack of memory resource.\r
+\r
+**/\r
 EFI_STATUS\r
 MnpInstanceDeliverPacket (\r
-  IN MNP_INSTANCE_DATA  *Instance\r
+  IN OUT MNP_INSTANCE_DATA   *Instance\r
   );\r
 \r
+/**\r
+  Recycle the RxData and other resources used to hold and deliver the received\r
+  packet.\r
+\r
+  @param[in]  Event               The event this notify function registered to.\r
+  @param[in]  Context             Pointer to the context data registerd to the Event.\r
+\r
+**/\r
 VOID\r
 EFIAPI\r
 MnpRecycleRxData (\r
-  IN EFI_EVENT  Event,\r
-  IN VOID       *Context\r
+  IN EFI_EVENT     Event,\r
+  IN VOID          *Context\r
   );\r
 \r
+/**\r
+  Try to receive a packet and deliver it.\r
+\r
+  @param[in, out]  MnpDeviceData        Pointer to the mnp device context data.\r
+\r
+  @retval EFI_SUCCESS           add return value to function comment\r
+  @retval EFI_NOT_STARTED       The simple network protocol is not started.\r
+  @retval EFI_NOT_READY         No packet received.\r
+  @retval EFI_DEVICE_ERROR      An unexpected error occurs.\r
+\r
+**/\r
 EFI_STATUS\r
 MnpReceivePacket (\r
-  IN MNP_SERVICE_DATA  *MnpServiceData\r
+  IN OUT MNP_DEVICE_DATA   *MnpDeviceData\r
   );\r
 \r
+/**\r
+  Allocate a free NET_BUF from MnpDeviceData->FreeNbufQue. If there is none\r
+  in the queue, first try to allocate some and add them into the queue, then\r
+  fetch the NET_BUF from the updated FreeNbufQue.\r
+\r
+  @param[in, out]  MnpDeviceData        Pointer to the MNP_DEVICE_DATA.\r
+\r
+  @return     Pointer to the allocated free NET_BUF structure, if NULL the\r
+              operation is failed.\r
+\r
+**/\r
 NET_BUF *\r
 MnpAllocNbuf (\r
-  IN MNP_SERVICE_DATA  *MnpServiceData\r
+  IN OUT MNP_DEVICE_DATA   *MnpDeviceData\r
   );\r
 \r
+/**\r
+  Try to reclaim the Nbuf into the buffer pool.\r
+\r
+  @param[in, out]  MnpDeviceData         Pointer to the mnp device context data.\r
+  @param[in, out]  Nbuf                  Pointer to the NET_BUF to free.\r
+\r
+**/\r
 VOID\r
 MnpFreeNbuf (\r
-  IN MNP_SERVICE_DATA  *MnpServiceData,\r
-  IN NET_BUF           *Nbuf\r
+  IN OUT MNP_DEVICE_DATA   *MnpDeviceData,\r
+  IN OUT NET_BUF           *Nbuf\r
   );\r
 \r
+/**\r
+  Remove the received packets if timeout occurs.\r
+\r
+  @param[in]  Event        The event this notify function registered to.\r
+  @param[in]  Context      Pointer to the context data registered to the event.\r
+\r
+**/\r
 VOID\r
 EFIAPI\r
 MnpCheckPacketTimeout (\r
-  IN EFI_EVENT  Event,\r
-  IN VOID       *Context\r
+  IN EFI_EVENT     Event,\r
+  IN VOID          *Context\r
   );\r
 \r
+/**\r
+  Poll to update MediaPresent field in SNP ModeData by Snp.GetStatus().\r
+\r
+  @param[in]  Event        The event this notify function registered to.\r
+  @param[in]  Context      Pointer to the context data registered to the event.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+MnpCheckMediaStatus (\r
+  IN EFI_EVENT     Event,\r
+  IN VOID          *Context\r
+  );\r
+\r
+/**\r
+  Poll to receive the packets from Snp. This function is either called by upperlayer\r
+  protocols/applications or the system poll timer notify mechanism.\r
+\r
+  @param[in]  Event        The event this notify function registered to.\r
+  @param[in]  Context      Pointer to the context data registered to the event.\r
+\r
+**/\r
 VOID\r
 EFIAPI\r
 MnpSystemPoll (\r
-  IN EFI_EVENT  Event,\r
-  IN VOID       *Context\r
+  IN EFI_EVENT     Event,\r
+  IN VOID          *Context\r
   );\r
 \r
+/**\r
+  Returns the operational parameters for the current MNP child driver. May also\r
+  support returning the underlying SNP driver mode data.\r
+\r
+  The GetModeData() function is used to read the current mode data (operational\r
+  parameters) from the MNP or the underlying SNP.\r
+\r
+  @param[in]  This          Pointer to the EFI_MANAGED_NETWORK_PROTOCOL instance.\r
+  @param[out] MnpConfigData Pointer to storage for MNP operational parameters. Type\r
+                            EFI_MANAGED_NETWORK_CONFIG_DATA is defined in "Related\r
+                            Definitions" below.\r
+  @param[out] SnpModeData   Pointer to storage for SNP operational parameters. This\r
+                            feature may be unsupported. Type EFI_SIMPLE_NETWORK_MODE\r
+                            is defined in the EFI_SIMPLE_NETWORK_PROTOCOL.\r
+\r
+  @retval EFI_SUCCESS           The operation completed successfully.\r
+  @retval EFI_INVALID_PARAMETER This is NULL.\r
+  @retval EFI_UNSUPPORTED       The requested feature is unsupported in this\r
+                                MNP implementation.\r
+  @retval EFI_NOT_STARTED       This MNP child driver instance has not been\r
+                                configured. The default values are returned in\r
+                                MnpConfigData if it is not NULL.\r
+  @retval Others                The mode data could not be read.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 MnpGetModeData (\r
-  IN  EFI_MANAGED_NETWORK_PROTOCOL     *This,\r
-  OUT EFI_MANAGED_NETWORK_CONFIG_DATA  *MnpConfigData OPTIONAL,\r
-  OUT EFI_SIMPLE_NETWORK_MODE          *SnpModeData OPTIONAL\r
+  IN     EFI_MANAGED_NETWORK_PROTOCOL      *This,\r
+     OUT EFI_MANAGED_NETWORK_CONFIG_DATA   *MnpConfigData OPTIONAL,\r
+     OUT EFI_SIMPLE_NETWORK_MODE           *SnpModeData OPTIONAL\r
   );\r
 \r
+/**\r
+  Sets or clears the operational parameters for the MNP child driver.\r
+\r
+  The Configure() function is used to set, change, or reset the operational\r
+  parameters for the MNP child driver instance. Until the operational parameters\r
+  have been set, no network traffic can be sent or received by this MNP child\r
+  driver instance. Once the operational parameters have been reset, no more\r
+  traffic can be sent or received until the operational parameters have been set\r
+  again.\r
+  Each MNP child driver instance can be started and stopped independently of\r
+  each other by setting or resetting their receive filter settings with the\r
+  Configure() function.\r
+  After any successful call to Configure(), the MNP child driver instance is\r
+  started. The internal periodic timer (if supported) is enabled. Data can be\r
+  transmitted and may be received if the receive filters have also been enabled.\r
+  Note: If multiple MNP child driver instances will receive the same packet\r
+  because of overlapping receive filter settings, then the first MNP child\r
+  driver instance will receive the original packet and additional instances will\r
+  receive copies of the original packet.\r
+  Note: Warning: Receive filter settings that overlap will consume extra\r
+  processor and/or DMA resources and degrade system and network performance.\r
+\r
+  @param[in]  This           Pointer to the EFI_MANAGED_NETWORK_PROTOCOL instance.\r
+  @param[in]  MnpConfigData  Pointer to configuration data that will be assigned\r
+                             to the MNP child driver instance. If NULL, the MNP\r
+                             child driver instance is reset to startup defaults\r
+                             and all pending transmit and receive requests are\r
+                             flushed. Type EFI_MANAGED_NETWORK_CONFIG_DATA is\r
+                             defined in EFI_MANAGED_NETWORK_PROTOCOL.GetModeData().\r
+\r
+  @retval EFI_SUCCESS            The operation completed successfully.\r
+  @retval EFI_INVALID_PARAMETER  One or more of the following conditions is\r
+                                 TRUE:\r
+                                 * This is NULL.\r
+                                 * MnpConfigData.ProtocolTypeFilter is not\r
+                                   valid.\r
+                                 The operational data for the MNP child driver\r
+                                 instance is unchanged.\r
+  @retval EFI_OUT_OF_RESOURCES   Required system resources (usually memory)\r
+                                 could not be allocated.\r
+                                 The MNP child driver instance has been reset to\r
+                                 startup defaults.\r
+  @retval EFI_UNSUPPORTED        The requested feature is unsupported in\r
+                                 this [MNP] implementation. The operational data\r
+                                 for the MNP child driver instance is unchanged.\r
+  @retval EFI_DEVICE_ERROR       An unexpected network or system error\r
+                                 occurred. The MNP child driver instance has\r
+                                 been reset to startup defaults.\r
+  @retval Others                 The MNP child driver instance has been reset to\r
+                                 startup defaults.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 MnpConfigure (\r
-  IN EFI_MANAGED_NETWORK_PROTOCOL     *This,\r
-  IN EFI_MANAGED_NETWORK_CONFIG_DATA  *MnpConfigData OPTIONAL\r
+  IN EFI_MANAGED_NETWORK_PROTOCOL        *This,\r
+  IN EFI_MANAGED_NETWORK_CONFIG_DATA     *MnpConfigData OPTIONAL\r
   );\r
 \r
+/**\r
+  Translates an IP multicast address to a hardware (MAC) multicast address. This\r
+  function may be unsupported in some MNP implementations.\r
+\r
+  The McastIpToMac() function translates an IP multicast address to a hardware\r
+  (MAC) multicast address. This function may be implemented by calling the\r
+  underlying EFI_SIMPLE_NETWORK. MCastIpToMac() function, which may also be\r
+  unsupported in some MNP implementations.\r
+\r
+  @param[in]  This        Pointer to the EFI_MANAGED_NETWORK_PROTOCOL instance.\r
+  @param[in]  Ipv6Flag    Set to TRUE to if IpAddress is an IPv6 multicast address.\r
+                          Set to FALSE if IpAddress is an IPv4 multicast address.\r
+  @param[in]  IpAddress   Pointer to the multicast IP address (in network byte\r
+                          order) to convert.\r
+  @param[out] MacAddress  Pointer to the resulting multicast MAC address.\r
+\r
+  @retval EFI_SUCCESS           The operation completed successfully.\r
+  @retval EFI_INVALID_PARAMETER One of the following conditions is TRUE:\r
+                                 * This is NULL.\r
+                                 * IpAddress is NULL.\r
+                                 * IpAddress is not a valid multicast IP\r
+                                   address.\r
+                                 * MacAddress is NULL.\r
+  @retval EFI_NOT_STARTED       This MNP child driver instance has not been\r
+                                configured.\r
+  @retval EFI_UNSUPPORTED       The requested feature is unsupported in this\r
+                                MNP implementation.\r
+  @retval EFI_DEVICE_ERROR      An unexpected network or system error occurred.\r
+  @retval Others                The address could not be converted.\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 MnpMcastIpToMac (\r
-  IN  EFI_MANAGED_NETWORK_PROTOCOL  *This,\r
-  IN  BOOLEAN                       Ipv6Flag,\r
-  IN  EFI_IP_ADDRESS                *IpAddress,\r
-  OUT EFI_MAC_ADDRESS               *MacAddress\r
+  IN     EFI_MANAGED_NETWORK_PROTOCOL    *This,\r
+  IN     BOOLEAN                         Ipv6Flag,\r
+  IN     EFI_IP_ADDRESS                  *IpAddress,\r
+     OUT EFI_MAC_ADDRESS                 *MacAddress\r
   );\r
 \r
+/**\r
+  Enables and disables receive filters for multicast address. This function may\r
+  be unsupported in some MNP implementations.\r
+\r
+  The Groups() function only adds and removes multicast MAC addresses from the\r
+  filter list. The MNP driver does not transmit or process Internet Group\r
+  Management Protocol (IGMP) packets. If JoinFlag is FALSE and MacAddress is\r
+  NULL, then all joined groups are left.\r
+\r
+  @param[in]  This        Pointer to the EFI_MANAGED_NETWORK_PROTOCOL instance.\r
+  @param[in]  JoinFlag    Set to TRUE to join this multicast group.\r
+                          Set to FALSE to leave this multicast group.\r
+  @param[in]  MacAddress  Pointer to the multicast MAC group (address) to join or\r
+                          leave.\r
+\r
+  @retval EFI_SUCCESS           The requested operation completed successfully.\r
+  @retval EFI_INVALID_PARAMETER One or more of the following conditions is TRUE:\r
+                                * This is NULL.\r
+                                * JoinFlag is TRUE and MacAddress is NULL.\r
+                                * MacAddress is not a valid multicast MAC\r
+                                  address.\r
+                                * The MNP multicast group settings are\r
+                                  unchanged.\r
+  @retval EFI_NOT_STARTED       This MNP child driver instance has not been\r
+                                configured.\r
+  @retval EFI_ALREADY_STARTED   The supplied multicast group is already joined.\r
+  @retval EFI_NOT_FOUND         The supplied multicast group is not joined.\r
+  @retval EFI_DEVICE_ERROR      An unexpected network or system error occurred.\r
+                                The MNP child driver instance has been reset to\r
+                                startup defaults.\r
+  @retval EFI_UNSUPPORTED       The requested feature is unsupported in this MNP\r
+                                implementation.\r
+  @retval Others                The requested operation could not be completed.\r
+                                The MNP multicast group settings are unchanged.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 MnpGroups (\r
-  IN EFI_MANAGED_NETWORK_PROTOCOL  *This,\r
-  IN BOOLEAN                       JoinFlag,\r
-  IN EFI_MAC_ADDRESS               *MacAddress OPTIONAL\r
+  IN EFI_MANAGED_NETWORK_PROTOCOL    *This,\r
+  IN BOOLEAN                         JoinFlag,\r
+  IN EFI_MAC_ADDRESS                 *MacAddress OPTIONAL\r
   );\r
 \r
+/**\r
+  Places asynchronous outgoing data packets into the transmit queue.\r
+\r
+  The Transmit() function places a completion token into the transmit packet\r
+  queue. This function is always asynchronous.\r
+  The caller must fill in the Token.Event and Token.TxData fields in the\r
+  completion token, and these fields cannot be NULL. When the transmit operation\r
+  completes, the MNP updates the Token.Status field and the Token.Event is\r
+  signaled.\r
+  Note: There may be a performance penalty if the packet needs to be\r
+  defragmented before it can be transmitted by the network device. Systems in\r
+  which performance is critical should review the requirements and features of\r
+  the underlying communications device and drivers.\r
+\r
+\r
+  @param[in]  This    Pointer to the EFI_MANAGED_NETWORK_PROTOCOL instance.\r
+  @param[in]  Token   Pointer to a token associated with the transmit data\r
+                      descriptor. Type EFI_MANAGED_NETWORK_COMPLETION_TOKEN\r
+                      is defined in "Related Definitions" below.\r
+\r
+  @retval EFI_SUCCESS            The transmit completion token was cached.\r
+  @retval EFI_NOT_STARTED        This MNP child driver instance has not been\r
+                                 configured.\r
+  @retval EFI_INVALID_PARAMETER  One or more of the following conditions is\r
+                                 TRUE:\r
+                                 * This is NULL.\r
+                                 * Token is NULL.\r
+                                 * Token.Event is NULL.\r
+                                 * Token.TxData is NULL.\r
+                                 * Token.TxData.DestinationAddress is not\r
+                                   NULL and Token.TxData.HeaderLength is zero.\r
+                                 * Token.TxData.FragmentCount is zero.\r
+                                 * (Token.TxData.HeaderLength +\r
+                                   Token.TxData.DataLength) is not equal to the\r
+                                   sum of the\r
+                                   Token.TxData.FragmentTable[].FragmentLength\r
+                                   fields.\r
+                                 * One or more of the\r
+                                   Token.TxData.FragmentTable[].FragmentLength\r
+                                   fields is zero.\r
+                                 * One or more of the\r
+                                   Token.TxData.FragmentTable[].FragmentBufferfields\r
+                                   is NULL.\r
+                                 * Token.TxData.DataLength is greater than MTU.\r
+  @retval EFI_ACCESS_DENIED      The transmit completion token is already in the\r
+                                 transmit queue.\r
+  @retval EFI_OUT_OF_RESOURCES   The transmit data could not be queued due to a\r
+                                 lack of system resources (usually memory).\r
+  @retval EFI_DEVICE_ERROR       An unexpected system or network error occurred.\r
+                                 The MNP child driver instance has been reset to\r
+                                 startup defaults.\r
+  @retval EFI_NOT_READY          The transmit request could not be queued because\r
+                                 the transmit queue is full.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 MnpTransmit (\r
-  IN EFI_MANAGED_NETWORK_PROTOCOL          *This,\r
-  IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN  *Token\r
+  IN EFI_MANAGED_NETWORK_PROTOCOL            *This,\r
+  IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN    *Token\r
   );\r
 \r
+/**\r
+  Aborts an asynchronous transmit or receive request.\r
+\r
+  The Cancel() function is used to abort a pending transmit or receive request.\r
+  If the token is in the transmit or receive request queues, after calling this\r
+  function, Token.Status will be set to EFI_ABORTED and then Token.Event will be\r
+  signaled. If the token is not in one of the queues, which usually means that\r
+  the asynchronous operation has completed, this function will not signal the\r
+  token and EFI_NOT_FOUND is returned.\r
+\r
+  @param[in]  This     Pointer to the EFI_MANAGED_NETWORK_PROTOCOL instance.\r
+  @param[in]  Token    Pointer to a token that has been issued by\r
+                       EFI_MANAGED_NETWORK_PROTOCOL.Transmit() or\r
+                       EFI_MANAGED_NETWORK_PROTOCOL.Receive(). If NULL, all\r
+                       pending tokens are aborted.\r
+\r
+  @retval EFI_SUCCESS            The asynchronous I/O request was aborted and\r
+                                 Token.Event was signaled. When Token is NULL,\r
+                                 all pending requests were aborted and their\r
+                                 events were signaled.\r
+  @retval EFI_NOT_STARTED        This MNP child driver instance has not been\r
+                                 configured.\r
+  @retval EFI_INVALID_PARAMETER  This is NULL.\r
+  @retval EFI_NOT_FOUND          When Token is not NULL, the asynchronous I/O\r
+                                 request was not found in the transmit or\r
+                                 receive queue. It has either completed or was\r
+                                 not issued by Transmit() and Receive().\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 MnpCancel (\r
-  IN EFI_MANAGED_NETWORK_PROTOCOL          *This,\r
-  IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN  *Token OPTIONAL\r
+  IN EFI_MANAGED_NETWORK_PROTOCOL            *This,\r
+  IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN    *Token OPTIONAL\r
   );\r
 \r
+/**\r
+  Places an asynchronous receiving request into the receiving queue.\r
+\r
+  The Receive() function places a completion token into the receive packet\r
+  queue. This function is always asynchronous.\r
+  The caller must fill in the Token.Event field in the completion token, and\r
+  this field cannot be NULL. When the receive operation completes, the MNP\r
+  updates the Token.Status and Token.RxData fields and the Token.Event is\r
+  signaled.\r
+\r
+  @param[in]  This      Pointer to the EFI_MANAGED_NETWORK_PROTOCOL instance.\r
+  @param[in]  Token     Pointer to a token associated with the receive\r
+                        data descriptor. Type\r
+                        EFI_MANAGED_NETWORK_COMPLETION_TOKEN is defined in\r
+                        EFI_MANAGED_NETWORK_PROTOCOL.Transmit().\r
+\r
+  @retval EFI_SUCCESS            The receive completion token was cached.\r
+  @retval EFI_NOT_STARTED        This MNP child driver instance has not been\r
+                                 configured.\r
+  @retval EFI_INVALID_PARAMETER  One or more of the following conditions is\r
+                                 TRUE:\r
+                                 * This is NULL.\r
+                                 * Token is NULL.\r
+                                 * Token.Event is NULL\r
+  @retval EFI_OUT_OF_RESOURCES   The transmit data could not be queued due to a\r
+                                 lack of system resources (usually memory).\r
+  @retval EFI_DEVICE_ERROR       An unexpected system or network error occurred.\r
+                                 The MNP child driver instance has been reset to\r
+                                 startup defaults.\r
+  @retval EFI_ACCESS_DENIED      The receive completion token was already in the\r
+                                 receive queue.\r
+  @retval EFI_NOT_READY          The receive request could not be queued because\r
+                                 the receive queue is full.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 MnpReceive (\r
-  IN EFI_MANAGED_NETWORK_PROTOCOL          *This,\r
-  IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN  *Token\r
+  IN EFI_MANAGED_NETWORK_PROTOCOL            *This,\r
+  IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN    *Token\r
   );\r
 \r
+/**\r
+  Polls for incoming data packets and processes outgoing data packets.\r
+\r
+  The Poll() function can be used by network drivers and applications to\r
+  increase the rate that data packets are moved between the communications\r
+  device and the transmit and receive queues.\r
+  Normally, a periodic timer event internally calls the Poll() function. But, in\r
+  some systems, the periodic timer event may not call Poll() fast enough to\r
+  transmit and/or receive all data packets without missing packets. Drivers and\r
+  applications that are experiencing packet loss should try calling the Poll()\r
+  function more often.\r
+\r
+  @param[in]  This         Pointer to the EFI_MANAGED_NETWORK_PROTOCOL instance.\r
+\r
+  @retval EFI_SUCCESS      Incoming or outgoing data was processed.\r
+  @retval EFI_NOT_STARTED  This MNP child driver instance has not been\r
+                           configured.\r
+  @retval EFI_DEVICE_ERROR An unexpected system or network error occurred. The\r
+                           MNP child driver instance has been reset to startup\r
+                           defaults.\r
+  @retval EFI_NOT_READY    No incoming or outgoing data was processed. Consider\r
+                           increasing the polling rate.\r
+  @retval EFI_TIMEOUT      Data was dropped out of the transmit and/or receive\r
+                           queue. Consider increasing the polling rate.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 MnpPoll (\r
-  IN EFI_MANAGED_NETWORK_PROTOCOL  *This\r
+  IN EFI_MANAGED_NETWORK_PROTOCOL    *This\r
+  );\r
+\r
+/**\r
+  Configure the Snp receive filters according to the instances' receive filter\r
+  settings.\r
+\r
+  @param[in]  MnpDeviceData         Pointer to the mnp device context data.\r
+\r
+  @retval     EFI_SUCCESS           The receive filters is configured.\r
+  @retval     EFI_OUT_OF_RESOURCES  The receive filters can't be configured due\r
+                                    to lack of memory resource.\r
+\r
+**/\r
+EFI_STATUS\r
+MnpConfigReceiveFilters (\r
+  IN MNP_DEVICE_DATA     *MnpDeviceData\r
   );\r
 \r
 #endif\r