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