blob: ce3492977c89114b801d0c64616067b66e5faa9b [file] [log] [blame]
// Copyright 2016 The Fuchsia Authors
//
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT
#ifndef ZIRCON_KERNEL_LIB_EFI_INCLUDE_EFI_PROTOCOL_MANAGED_NETWORK_H_
#define ZIRCON_KERNEL_LIB_EFI_INCLUDE_EFI_PROTOCOL_MANAGED_NETWORK_H_
#include <efi/protocol/simple-network.h>
#include <efi/types.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_sync_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_sync_completion_token* token) EFIAPI;
efi_status (*Receive)(struct efi_managed_network_protocol* self,
efi_managed_network_sync_completion_token* token) EFIAPI;
efi_status (*Cancel)(struct efi_managed_network_protocol* self,
efi_managed_network_sync_completion_token* token) EFIAPI;
efi_status (*Poll)(struct efi_managed_network_protocol* self) EFIAPI;
} efi_managed_network_protocol;
#endif // ZIRCON_KERNEL_LIB_EFI_INCLUDE_EFI_PROTOCOL_MANAGED_NETWORK_H_