+++ /dev/null
-/** @file\r
- Declaration of structures and functions of MnpDxe driver.\r
-\r
-Copyright (c) 2005 - 2018, Intel Corporation. All rights reserved.<BR>\r
-SPDX-License-Identifier: BSD-2-Clause-Patent\r
-\r
-**/\r
-\r
-#ifndef _MNP_IMPL_H_\r
-#define _MNP_IMPL_H_\r
-\r
-#include "MnpDriver.h"\r
-\r
-#define NET_ETHER_FCS_SIZE 4\r
-\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
-#define MNP_MAX_NET_BUFFER_NUM 65536\r
-#define MNP_TX_BUFFER_INCREASEMENT 32 // Same as the recycling Q length for xmit_done in UNDI command.\r
-#define MNP_MAX_TX_BUFFER_NUM 65536\r
-\r
-#define MNP_MAX_RCVD_PACKET_QUE_SIZE 256\r
-\r
-#define MNP_RECEIVE_UNICAST 0x01\r
-#define MNP_RECEIVE_BROADCAST 0x02\r
-\r
-#define UNICAST_PACKET MNP_RECEIVE_UNICAST\r
-#define BROADCAST_PACKET MNP_RECEIVE_BROADCAST\r
-\r
-#define MNP_INSTANCE_DATA_SIGNATURE SIGNATURE_32 ('M', 'n', 'p', 'I')\r
-\r
-#define MNP_INSTANCE_DATA_FROM_THIS(a) \\r
- CR ( \\r
- (a), \\r
- MNP_INSTANCE_DATA, \\r
- ManagedNetwork, \\r
- MNP_INSTANCE_DATA_SIGNATURE \\r
- )\r
-\r
-typedef struct {\r
- UINT32 Signature;\r
-\r
- MNP_SERVICE_DATA *MnpServiceData;\r
-\r
- EFI_HANDLE Handle;\r
-\r
- LIST_ENTRY InstEntry;\r
-\r
- EFI_MANAGED_NETWORK_PROTOCOL ManagedNetwork;\r
-\r
- BOOLEAN Configured;\r
- BOOLEAN Destroyed;\r
-\r
- LIST_ENTRY GroupCtrlBlkList;\r
-\r
- NET_MAP RxTokenMap;\r
-\r
- LIST_ENTRY RxDeliveredPacketQueue;\r
- LIST_ENTRY RcvdPacketQueue;\r
- UINTN RcvdPacketQueueSize;\r
-\r
- EFI_MANAGED_NETWORK_CONFIG_DATA ConfigData;\r
-\r
- UINT8 ReceiveFilter;\r
-} MNP_INSTANCE_DATA;\r
-\r
-typedef struct {\r
- LIST_ENTRY AddrEntry;\r
- EFI_MAC_ADDRESS Address;\r
- INTN RefCnt;\r
-} MNP_GROUP_ADDRESS;\r
-\r
-typedef struct {\r
- LIST_ENTRY CtrlBlkEntry;\r
- MNP_GROUP_ADDRESS *GroupAddress;\r
-} MNP_GROUP_CONTROL_BLOCK;\r
-\r
-typedef struct {\r
- LIST_ENTRY WrapEntry;\r
- MNP_INSTANCE_DATA *Instance;\r
- EFI_MANAGED_NETWORK_RECEIVE_DATA RxData;\r
- NET_BUF *Nbuf;\r
- UINT64 TimeoutTick;\r
-} MNP_RXDATA_WRAP;\r
-\r
-#define MNP_TX_BUF_WRAP_SIGNATURE SIGNATURE_32 ('M', 'T', 'B', 'W')\r
-\r
-typedef struct {\r
- UINT32 Signature;\r
- LIST_ENTRY WrapEntry; // Link to FreeTxBufList\r
- LIST_ENTRY AllEntry; // Link to AllTxBufList\r
- BOOLEAN InUse;\r
- UINT8 TxBuf[1];\r
-} MNP_TX_BUF_WRAP;\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
-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
-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 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
- );\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 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 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 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 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
- );\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
- @retval EFI_SUCCESS TxPackage is built.\r
- @retval EFI_OUT_OF_RESOURCES The deliver fails due to lack of memory resource.\r
-\r
-**/\r
-EFI_STATUS\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
- );\r
-\r
-/**\r
- Synchronously send out the packet.\r
-\r
- This functon places the packet buffer to SNP driver's tansmit queue. The packet\r
- can be considered successfully sent out once SNP acccetp the packet, while the\r
- packet buffer recycle is deferred for better performance.\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 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 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
- );\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 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 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 OUT MNP_DEVICE_DATA *MnpDeviceData,\r
- IN OUT NET_BUF *Nbuf\r
- );\r
-\r
-/**\r
- Allocate a free TX buffer from MnpDeviceData->FreeTxBufList. If there is none\r
- in the queue, first try to recycle some from SNP, then try to allocate some and add\r
- them into the queue, then fetch the NET_BUF from the updated FreeTxBufList.\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
-UINT8 *\r
-MnpAllocTxBuf (\r
- IN OUT MNP_DEVICE_DATA *MnpDeviceData\r
- );\r
-\r
-/**\r
- Try to recycle all the transmitted buffer address from SNP.\r
-\r
- @param[in, out] MnpDeviceData Pointer to the mnp device context data.\r
-\r
- @retval EFI_SUCCESS Successed to recyclethe transmitted buffer address.\r
- @retval Others Failed to recyclethe transmitted buffer address.\r
-\r
-**/\r
-EFI_STATUS\r
-MnpRecycleTxBuf (\r
- IN OUT MNP_DEVICE_DATA *MnpDeviceData\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
- );\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
- );\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
- );\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
- );\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
- );\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
- );\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
- );\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
- );\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
- );\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
- );\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