blob: b4e3489317136b86f54fa60d990694ce02928921 [file] [log] [blame]
// 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>
#define EFI_SIMPLE_NETWORK_PROTOCOL_GUID \
{0xa19832b9, 0xac25, 0x11d3, {0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d}}
extern efi_guid SimpleNetworkProtocol;
#define EFI_SIMPLE_NETWORK_PROTOCOL_REVISION 0x00010000
#define MAX_MCAST_FILTER_CNT 16
typedef struct {
uint32_t State;
uint32_t HwAddressSize;
uint32_t MediaHeaderSize;
uint32_t MaxPacketSize;
uint32_t NvRamSize;
uint32_t NvRamAccessSize;
uint32_t ReceiveFilterMask;
uint32_t ReceiveFilterSetting;
uint32_t MaxMCastFilterCount;
uint32_t MCastFilterCount;
efi_mac_addr MCastFilter[MAX_MCAST_FILTER_CNT];
efi_mac_addr CurrentAddress;
efi_mac_addr BroadcastAddress;
efi_mac_addr PermanentAddress;
uint8_t IfType;
bool MacAddressChangeable;
bool MultipleTxSupported;
bool MediaPresentSupported;
bool MediaPresent;
} efi_simple_network_mode;
typedef enum {
EfiSimpleNetworkStopped,
EfiSimpleNetworkStarted,
EfiSimpleNetworkInitialized,
EfiSimpleNetworkMaxState
} efi_simple_network_state;
#define EFI_SIMPLE_NETWORK_RECEIVE_UNICAST 0x01
#define EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST 0x02
#define EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST 0x04
#define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS 0x08
#define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST 0x10
typedef struct {
uint64_t RxTotalFrames;
uint64_t RxGoodFrames;
uint64_t RxUndersizeFrames;
uint64_t RxOversizeFrames;
uint64_t RxDroppedFrames;
uint64_t RxUnicastFrames;
uint64_t RxBroadcastFrames;
uint64_t RxMulticastFrames;
uint64_t RxCrcErrorFrames;
uint64_t RxTotalBytes;
uint64_t TxTotalFrames;
uint64_t TxGoodFrames;
uint64_t TxUndersizeFrames;
uint64_t TxOversizeFrames;
uint64_t TxDroppedFrames;
uint64_t TxUnicastFrames;
uint64_t TxBroadcastFrames;
uint64_t TxMulticastFrames;
uint64_t TxCrcErrorFrames;
uint64_t TxTotalBytes;
uint64_t Collisions;
uint64_t UnsupportedProtocol;
uint64_t RxDuplicatedFrames;
uint64_t RxDecryptErrorFrames;
uint64_t TxErrorFrames;
uint64_t TxRetryFrames;
} efi_network_statistics;
#define EFI_SIMPLE_NETWORK_RECEIVE_INTERRUPT 0x01
#define EFI_SIMPLE_NETWORK_TRANSMIT_INTERRUPT 0x02
#define EFI_SIMPLE_NETWORK_COMMAND_INTERRUPT 0x04
#define EFI_SIMPLE_NETWORK_SOFTWARE_INTERRUPT 0x08
typedef struct efi_simple_network_protocol {
uint64_t Revision;
efi_status (*Start) (struct efi_simple_network_protocol* self) EFIAPI;
efi_status (*Stop) (struct efi_simple_network_protocol* self) EFIAPI;
efi_status (*Initialize) (struct efi_simple_network_protocol* self,
size_t extra_rx_buf_size, size_t extra_tx_buf_size) EFIAPI;
efi_status (*Reset) (struct efi_simple_network_protocol* self,
bool extended_verification) EFIAPI;
efi_status (*Shutdown) (struct efi_simple_network_protocol* self) EFIAPI;
efi_status (*ReceiveFilters) (struct efi_simple_network_protocol* self,
uint32_t enable, uint32_t disable,
bool reset_mcast_filter, size_t mcast_filter_count,
efi_mac_addr* mcast_filter) EFIAPI;
efi_status (*StationAddress) (struct efi_simple_network_protocol* self,
bool reset, efi_mac_addr* new_addr) EFIAPI;
efi_status (*Statistics) (struct efi_simple_network_protocol* self,
bool reset, size_t* stats_size,
efi_network_statistics* stats_table) EFIAPI;
efi_status (*MCastIpToMac) (struct efi_simple_network_protocol* self,
bool ipv6, efi_ip_addr* ip, efi_mac_addr* mac) EFIAPI;
efi_status (*NvData) (struct efi_simple_network_protocol* self,
bool read_write, size_t offset, size_t buf_size, void* buf) EFIAPI;
efi_status (*GetStatus) (struct efi_simple_network_protocol* self,
uint32_t* interrupt_status, void** tx_buf) EFIAPI;
efi_status (*Transmit) (struct efi_simple_network_protocol* self,
size_t header_size, size_t buf_size, void* buf,
efi_mac_addr* src, efi_mac_addr* dest, uint16_t* protocol) EFIAPI;
efi_status (*Receive) (struct efi_simple_network_protocol* self,
size_t* header_size, size_t* buf_size, void* buf,
efi_mac_addr* src, efi_mac_addr* dest, uint16_t* protocol) EFIAPI;
efi_event WaitForPacket;
efi_simple_network_mode* Mode;
} efi_simple_network_protocol;