/** @file Copyright (c) 2011 - 2019, Intel Corporaton. All rights reserved. SPDX-License-Identifier: BSD-2-Clause-Patent The original software modules are licensed as follows: Copyright (c) 2012-2014, ARM Limited. All rights reserved. SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef DWEMAC_SNP_DXE_H__ #define DWEMAC_SNP_DXE_H__ // Protocols used by this driver #include #include #include #include #include #include "PhyDxeUtil.h" #include "EmacDxeUtil.h" /*------------------------------------------------------------------------------ Information Structure ------------------------------------------------------------------------------*/ typedef struct { MAC_ADDR_DEVICE_PATH MacAddrDP; EFI_DEVICE_PATH_PROTOCOL End; } SIMPLE_NETWORK_DEVICE_PATH; typedef struct { // Driver signature UINT32 Signature; EFI_HANDLE ControllerHandle; // EFI SNP protocol instances EFI_SIMPLE_NETWORK_PROTOCOL Snp; EFI_SIMPLE_NETWORK_MODE SnpMode; // EFI Snp statistics instance EFI_NETWORK_STATISTICS Stats; EMAC_DRIVER MacDriver; PHY_DRIVER PhyDriver; NON_DISCOVERABLE_DEVICE *Dev; EFI_LOCK Lock; UINTN MacBase; // Array of the recycled transmit buffer address UINT64 *RecycledTxBuf; // The maximum number of recycled buffer pointers in RecycledTxBuf UINT32 MaxRecycledTxBuf; // Current number of recycled buffer pointers in RecycledTxBuf UINT32 RecycledTxBufCount; // For TX buffer DmaUnmap VOID *MappingTxbuf; } SIMPLE_NETWORK_DRIVER; extern EFI_COMPONENT_NAME_PROTOCOL gSnpComponentName; extern EFI_COMPONENT_NAME2_PROTOCOL gSnpComponentName2; #define SNP_DRIVER_SIGNATURE SIGNATURE_32('A', 'S', 'N', 'P') #define INSTANCE_FROM_SNP_THIS(a) CR(a, SIMPLE_NETWORK_DRIVER, Snp, SNP_DRIVER_SIGNATURE) #define SNP_TX_BUFFER_INCREASE 32 #define SNP_MAX_TX_BUFFER_NUM 65536 #define DESC_NUM 10 #define ETH_BUFSIZE 0x800 /*--------------------------------------------------------------------------------------------------------------------- UEFI-Compliant functions for EFI_SIMPLE_NETWORK_PROTOCOL Refer to the Simple Network Protocol section (24.1) in the UEFI 2.8 Specification for related definitions ---------------------------------------------------------------------------------------------------------------------*/ EFI_STATUS EFIAPI SnpStart ( IN EFI_SIMPLE_NETWORK_PROTOCOL *Snp ); EFI_STATUS EFIAPI SnpStop ( IN EFI_SIMPLE_NETWORK_PROTOCOL *Snp ); EFI_STATUS EFIAPI SnpInitialize ( IN EFI_SIMPLE_NETWORK_PROTOCOL *Snp, IN UINTN ExtraRxBufferSize OPTIONAL, IN UINTN ExtraTxBufferSize OPTIONAL ); EFI_STATUS EFIAPI SnpReset ( IN EFI_SIMPLE_NETWORK_PROTOCOL *Snp, IN BOOLEAN ExtendedVerification ); EFI_STATUS EFIAPI SnpShutdown ( IN EFI_SIMPLE_NETWORK_PROTOCOL *Snp ); EFI_STATUS EFIAPI SnpReceiveFilters ( IN EFI_SIMPLE_NETWORK_PROTOCOL *Snp, IN UINT32 Enable, IN UINT32 Disable, IN BOOLEAN ResetMCastFilter, IN UINTN MCastFilterCnt OPTIONAL, IN EFI_MAC_ADDRESS *MCastFilter OPTIONAL ); EFI_STATUS EFIAPI SnpStationAddress ( IN EFI_SIMPLE_NETWORK_PROTOCOL *Snp, IN BOOLEAN Reset, IN EFI_MAC_ADDRESS *NewMac ); EFI_STATUS EFIAPI SnpStatistics ( IN EFI_SIMPLE_NETWORK_PROTOCOL *Snp, IN BOOLEAN Reset, IN OUT UINTN *StatSize, OUT EFI_NETWORK_STATISTICS *Statistics ); EFI_STATUS EFIAPI SnpMcastIptoMac ( IN EFI_SIMPLE_NETWORK_PROTOCOL *Snp, IN BOOLEAN IsIpv6, IN EFI_IP_ADDRESS *Ip, OUT EFI_MAC_ADDRESS *McastMac ); EFI_STATUS EFIAPI SnpNvData ( IN EFI_SIMPLE_NETWORK_PROTOCOL *Snp, IN BOOLEAN ReadWrite, IN UINTN Offset, IN UINTN BufferSize, IN OUT VOID *Buffer ); EFI_STATUS EFIAPI SnpGetStatus ( IN EFI_SIMPLE_NETWORK_PROTOCOL *Snp, OUT UINT32 *IrqStat OPTIONAL, OUT VOID **TxBuff OPTIONAL ); EFI_STATUS EFIAPI SnpTransmit ( IN EFI_SIMPLE_NETWORK_PROTOCOL *Snp, IN UINTN HdrSize, IN UINTN BuffSize, IN VOID *Data, IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL, IN EFI_MAC_ADDRESS *DstAddr OPTIONAL, IN UINT16 *Protocol OPTIONAL ); EFI_STATUS EFIAPI SnpReceive ( IN EFI_SIMPLE_NETWORK_PROTOCOL *Snp, OUT UINTN *HdrSize OPTIONAL, IN OUT UINTN *BuffSize, OUT VOID *Data, OUT EFI_MAC_ADDRESS *SrcAddr OPTIONAL, OUT EFI_MAC_ADDRESS *DstAddr OPTIONAL, OUT UINT16 *Protocol OPTIONAL ); #endif // DWEMAC_SNP_DXE_H__