| // Copyright 2016 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #pragma once |
| |
| #include <efi/types.h> |
| #include <efi/protocol/simple-network.h> |
| |
| #define EFI_MANAGED_NETWORK_PROTOCOL_GUID \ |
| {0x7ab33a91, 0xace5, 0x4326,{0xb5, 0x72, 0xe7, 0xee, 0x33, 0xd3, 0x9f, 0x16}} |
| extern efi_guid ManagedNetworkProtocol; |
| |
| typedef struct { |
| efi_time Timestamp; |
| efi_event RecycleEvent; |
| uint32_t PacketLength; |
| uint32_t HeaderLength; |
| uint32_t AddressLength; |
| uint32_t DataLength; |
| bool BroadcastFlag; |
| bool MulticastFlag; |
| bool PromiscuousFlag; |
| uint16_t ProtocolType; |
| void* DestinationAddress; |
| void* SourceAddress; |
| void* MediaHeader; |
| void* PacketData; |
| } efi_managed_network_receive_data; |
| |
| typedef struct { |
| uint32_t FragmentLength; |
| void* FragmentBuffer; |
| } efi_managed_network_fragment_data; |
| |
| typedef struct { |
| efi_mac_addr* DestinationAddress; |
| efi_mac_addr* SourceAddress; |
| uint16_t ProtocolType; |
| uint32_t DataLength; |
| uint16_t HeaderLength; |
| uint16_t FragmentCount; |
| efi_managed_network_fragment_data FragmentTable[1]; |
| } efi_managed_network_transmit_data; |
| |
| typedef struct { |
| uint32_t ReceivedQueueTimeoutValue; |
| uint32_t TransmitQueueTimeoutValue; |
| uint16_t ProtocolTypeFilter; |
| bool EnableUnicastReceive; |
| bool EnableMulticastReceive; |
| bool EnableBroadcastReceive; |
| bool EnablePromiscuousReceive; |
| bool FlushQueuesOnReset; |
| bool EnableReceiveTimestamps; |
| bool DisableBackgroundPolling; |
| } efi_managed_network_config_data; |
| |
| typedef struct { |
| efi_event Event; |
| efi_status Status; |
| union { |
| efi_managed_network_receive_data* RxData; |
| efi_managed_network_transmit_data* TxData; |
| } Packet; |
| } efi_managed_network_completion_token; |
| |
| typedef struct efi_managed_network_protocol { |
| efi_status (*GetModeData) (struct efi_managed_network_protocol* self, |
| efi_managed_network_config_data* mnp_config_data, |
| efi_simple_network_mode* snp_mode_data) EFIAPI; |
| |
| efi_status (*Configure) (struct efi_managed_network_protocol* self, |
| efi_managed_network_config_data* mnp_config_data) EFIAPI; |
| |
| efi_status (*McastIpToMac) (struct efi_managed_network_protocol* self, |
| bool ipv6_flag, efi_ip_addr* ip_addr, efi_mac_addr* mac_addr) EFIAPI; |
| |
| efi_status (*Groups) (struct efi_managed_network_protocol* self, bool join_flag, |
| efi_mac_addr* mac_addr) EFIAPI; |
| |
| efi_status (*Transmit) (struct efi_managed_network_protocol* self, |
| efi_managed_network_completion_token* token) EFIAPI; |
| |
| efi_status (*Receive) (struct efi_managed_network_protocol* self, |
| efi_managed_network_completion_token* token) EFIAPI; |
| |
| efi_status (*Cancel) (struct efi_managed_network_protocol* self, |
| efi_managed_network_completion_token* token) EFIAPI; |
| |
| efi_status (*Poll) (struct efi_managed_network_protocol* self) EFIAPI; |
| } efi_managed_network_protocol; |