| /** @file |
| EFI_MANAGED_NETWORK_SERVICE_BINDING_PROTOCOL as defined in UEFI 2.0. |
| EFI_MANAGED_NETWORK_PROTOCOL as defined in UEFI 2.0. |
| |
| Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> |
| SPDX-License-Identifier: BSD-2-Clause-Patent |
| |
| @par Revision Reference: |
| This Protocol is introduced in UEFI Specification 2.0 |
| |
| **/ |
| |
| #ifndef __EFI_MANAGED_NETWORK_PROTOCOL_H__ |
| #define __EFI_MANAGED_NETWORK_PROTOCOL_H__ |
| |
| #include <Protocol/SimpleNetwork.h> |
| |
| #define EFI_MANAGED_NETWORK_SERVICE_BINDING_PROTOCOL_GUID \ |
| { \ |
| 0xf36ff770, 0xa7e1, 0x42cf, {0x9e, 0xd2, 0x56, 0xf0, 0xf2, 0x71, 0xf4, 0x4c } \ |
| } |
| |
| #define EFI_MANAGED_NETWORK_PROTOCOL_GUID \ |
| { \ |
| 0x7ab33a91, 0xace5, 0x4326, { 0xb5, 0x72, 0xe7, 0xee, 0x33, 0xd3, 0x9f, 0x16 } \ |
| } |
| |
| typedef struct _EFI_MANAGED_NETWORK_PROTOCOL EFI_MANAGED_NETWORK_PROTOCOL; |
| |
| typedef struct { |
| /// |
| /// Timeout value for a UEFI one-shot timer event. A packet that has not been removed |
| /// from the MNP receive queue will be dropped if its receive timeout expires. |
| /// |
| UINT32 ReceivedQueueTimeoutValue; |
| /// |
| /// Timeout value for a UEFI one-shot timer event. A packet that has not been removed |
| /// from the MNP transmit queue will be dropped if its receive timeout expires. |
| /// |
| UINT32 TransmitQueueTimeoutValue; |
| /// |
| /// Ethernet type II 16-bit protocol type in host byte order. Valid |
| /// values are zero and 1,500 to 65,535. |
| /// |
| UINT16 ProtocolTypeFilter; |
| /// |
| /// Set to TRUE to receive packets that are sent to the network |
| /// device MAC address. The startup default value is FALSE. |
| /// |
| BOOLEAN EnableUnicastReceive; |
| /// |
| /// Set to TRUE to receive packets that are sent to any of the |
| /// active multicast groups. The startup default value is FALSE. |
| /// |
| BOOLEAN EnableMulticastReceive; |
| /// |
| /// Set to TRUE to receive packets that are sent to the network |
| /// device broadcast address. The startup default value is FALSE. |
| /// |
| BOOLEAN EnableBroadcastReceive; |
| /// |
| /// Set to TRUE to receive packets that are sent to any MAC address. |
| /// The startup default value is FALSE. |
| /// |
| BOOLEAN EnablePromiscuousReceive; |
| /// |
| /// Set to TRUE to drop queued packets when the configuration |
| /// is changed. The startup default value is FALSE. |
| /// |
| BOOLEAN FlushQueuesOnReset; |
| /// |
| /// Set to TRUE to timestamp all packets when they are received |
| /// by the MNP. Note that timestamps may be unsupported in some |
| /// MNP implementations. The startup default value is FALSE. |
| /// |
| BOOLEAN EnableReceiveTimestamps; |
| /// |
| /// Set to TRUE to disable background polling in this MNP |
| /// instance. Note that background polling may not be supported in |
| /// all MNP implementations. The startup default value is FALSE, |
| /// unless background polling is not supported. |
| /// |
| BOOLEAN DisableBackgroundPolling; |
| } EFI_MANAGED_NETWORK_CONFIG_DATA; |
| |
| typedef struct { |
| EFI_TIME Timestamp; |
| EFI_EVENT RecycleEvent; |
| UINT32 PacketLength; |
| UINT32 HeaderLength; |
| UINT32 AddressLength; |
| UINT32 DataLength; |
| BOOLEAN BroadcastFlag; |
| BOOLEAN MulticastFlag; |
| BOOLEAN PromiscuousFlag; |
| UINT16 ProtocolType; |
| VOID *DestinationAddress; |
| VOID *SourceAddress; |
| VOID *MediaHeader; |
| VOID *PacketData; |
| } EFI_MANAGED_NETWORK_RECEIVE_DATA; |
| |
| typedef struct { |
| UINT32 FragmentLength; |
| VOID *FragmentBuffer; |
| } EFI_MANAGED_NETWORK_FRAGMENT_DATA; |
| |
| typedef struct { |
| EFI_MAC_ADDRESS *DestinationAddress; //OPTIONAL |
| EFI_MAC_ADDRESS *SourceAddress; //OPTIONAL |
| UINT16 ProtocolType; //OPTIONAL |
| UINT32 DataLength; |
| UINT16 HeaderLength; //OPTIONAL |
| UINT16 FragmentCount; |
| EFI_MANAGED_NETWORK_FRAGMENT_DATA FragmentTable[1]; |
| } EFI_MANAGED_NETWORK_TRANSMIT_DATA; |
| |
| |
| typedef struct { |
| /// |
| /// This Event will be signaled after the Status field is updated |
| /// by the MNP. The type of Event must be |
| /// EFI_NOTIFY_SIGNAL. The Task Priority Level (TPL) of |
| /// Event must be lower than or equal to TPL_CALLBACK. |
| /// |
| EFI_EVENT Event; |
| /// |
| /// The status that is returned to the caller at the end of the operation |
| /// to indicate whether this operation completed successfully. |
| /// |
| EFI_STATUS Status; |
| union { |
| /// |
| /// When this token is used for receiving, RxData is a pointer to the EFI_MANAGED_NETWORK_RECEIVE_DATA. |
| /// |
| EFI_MANAGED_NETWORK_RECEIVE_DATA *RxData; |
| /// |
| /// When this token is used for transmitting, TxData is a pointer to the EFI_MANAGED_NETWORK_TRANSMIT_DATA. |
| /// |
| EFI_MANAGED_NETWORK_TRANSMIT_DATA *TxData; |
| } Packet; |
| } EFI_MANAGED_NETWORK_COMPLETION_TOKEN; |
| |
| /** |
| Returns the operational parameters for the current MNP child driver. |
| |
| @param This The pointer to the EFI_MANAGED_NETWORK_PROTOCOL instance. |
| @param MnpConfigData The pointer to storage for MNP operational parameters. |
| @param SnpModeData The pointer to storage for SNP operational parameters. |
| |
| @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 Other The mode data could not be read. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_MANAGED_NETWORK_GET_MODE_DATA)( |
| 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. |
| |
| @param This The pointer to the EFI_MANAGED_NETWORK_PROTOCOL instance. |
| @param MnpConfigData The 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. |
| |
| @retval EFI_SUCCESS The operation completed successfully. |
| @retval EFI_INVALID_PARAMETER One or more parameters are invalid. |
| @retval EFI_OUT_OF_RESOURCES Required system resources (usually memory) could not be |
| allocated. |
| @retval EFI_UNSUPPORTED The requested feature is unsupported in this [MNP] |
| implementation. |
| @retval EFI_DEVICE_ERROR An unexpected network or system error occurred. |
| @retval Other The MNP child driver instance has been reset to startup defaults. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_MANAGED_NETWORK_CONFIGURE)( |
| 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. |
| |
| @param This The pointer to the EFI_MANAGED_NETWORK_PROTOCOL instance. |
| @param Ipv6Flag Set to TRUE to if IpAddress is an IPv6 multicast address. |
| Set to FALSE if IpAddress is an IPv4 multicast address. |
| @param IpAddress The pointer to the multicast IP address (in network byte order) to convert. |
| @param MacAddress The 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 Other The address could not be converted. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_MANAGED_NETWORK_MCAST_IP_TO_MAC)( |
| 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. |
| |
| @param This The pointer to the EFI_MANAGED_NETWORK_PROTOCOL instance. |
| @param JoinFlag Set to TRUE to join this multicast group. |
| Set to FALSE to leave this multicast group. |
| @param MacAddress The 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. |
| @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. |
| @retval EFI_UNSUPPORTED The requested feature is unsupported in this MNP implementation. |
| @retval Other The requested operation could not be completed. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_MANAGED_NETWORK_GROUPS)( |
| IN EFI_MANAGED_NETWORK_PROTOCOL *This, |
| IN BOOLEAN JoinFlag, |
| IN EFI_MAC_ADDRESS *MacAddress OPTIONAL |
| ); |
| |
| /** |
| Places asynchronous outgoing data packets into the transmit queue. |
| |
| @param This The pointer to the EFI_MANAGED_NETWORK_PROTOCOL instance. |
| @param Token The pointer to a token associated with the transmit data descriptor. |
| |
| @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 parameters are invalid. |
| @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. |
| @retval EFI_NOT_READY The transmit request could not be queued because the transmit queue is full. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_MANAGED_NETWORK_TRANSMIT)( |
| IN EFI_MANAGED_NETWORK_PROTOCOL *This, |
| IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN *Token |
| ); |
| |
| /** |
| Places an asynchronous receiving request into the receiving queue. |
| |
| @param This The pointer to the EFI_MANAGED_NETWORK_PROTOCOL instance. |
| @param Token The pointer to a token associated with the receive data descriptor. |
| |
| @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. |
| @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. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_MANAGED_NETWORK_RECEIVE)( |
| IN EFI_MANAGED_NETWORK_PROTOCOL *This, |
| IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN *Token |
| ); |
| |
| |
| /** |
| Aborts an asynchronous transmit or receive request. |
| |
| @param This The pointer to the EFI_MANAGED_NETWORK_PROTOCOL instance. |
| @param Token The 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(). |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_MANAGED_NETWORK_CANCEL)( |
| IN EFI_MANAGED_NETWORK_PROTOCOL *This, |
| IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN *Token OPTIONAL |
| ); |
| |
| /** |
| Polls for incoming data packets and processes outgoing data packets. |
| |
| @param This The 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. |
| @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. |
| |
| **/ |
| typedef |
| EFI_STATUS |
| (EFIAPI *EFI_MANAGED_NETWORK_POLL)( |
| IN EFI_MANAGED_NETWORK_PROTOCOL *This |
| ); |
| |
| /// |
| /// The MNP is used by network applications (and drivers) to |
| /// perform raw (unformatted) asynchronous network packet I/O. |
| /// |
| struct _EFI_MANAGED_NETWORK_PROTOCOL { |
| EFI_MANAGED_NETWORK_GET_MODE_DATA GetModeData; |
| EFI_MANAGED_NETWORK_CONFIGURE Configure; |
| EFI_MANAGED_NETWORK_MCAST_IP_TO_MAC McastIpToMac; |
| EFI_MANAGED_NETWORK_GROUPS Groups; |
| EFI_MANAGED_NETWORK_TRANSMIT Transmit; |
| EFI_MANAGED_NETWORK_RECEIVE Receive; |
| EFI_MANAGED_NETWORK_CANCEL Cancel; |
| EFI_MANAGED_NETWORK_POLL Poll; |
| }; |
| |
| extern EFI_GUID gEfiManagedNetworkServiceBindingProtocolGuid; |
| extern EFI_GUID gEfiManagedNetworkProtocolGuid; |
| |
| #endif |