/** @file * * Copyright (c) 2012-2014, ARM Limited. All rights reserved. * * This program and the accompanying materials * are licensed and made available under the terms and conditions of the BSD License * which accompanies this distribution. The full text of the license may be found at * http://opensource.org/licenses/bsd-license.php * * THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. * **/ #ifndef __LAN9118_DXE_H__ #define __LAN9118_DXE_H__ #include #include #include // Protocols used by this driver #include #include #include #include // Libraries used by this driver #include #include #include #include #include #include #include #include #include "Lan9118DxeUtil.h" #include "Lan9118DxeHw.h" #define LAN9118_STALL 2 #define LAN9118_DEFAULT_MAC_ADDRL 0x00F70200 #define LAN9118_DEFAULT_MAC_ADDRH 0x00009040 #define LAN9118_TX_DATA_SIZE 4608 #define LAN9118_TX_STATUS_SIZE 512 #define LAN9118_RX_DATA_SIZE 10560 #define LAN9118_RX_STATUS_SIZE 704 #define LAN9118_TX_RING_NUM_ENTRIES 32 /*------------------------------------------------------------------------------ LAN9118 Information Structure ------------------------------------------------------------------------------*/ 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; // Saved transmitted buffers so we can notify consumers when packets have been sent. UINT16 NextPacketTag; VOID *TxRing[LAN9118_TX_RING_NUM_ENTRIES]; } LAN9118_DRIVER; #define LAN9118_SIGNATURE SIGNATURE_32('l', 'a', 'n', '9') #define INSTANCE_FROM_SNP_THIS(a) CR(a, LAN9118_DRIVER, Snp, LAN9118_SIGNATURE) /*--------------------------------------------------------------------------------------------------------------------- UEFI-Compliant functions for EFI_SIMPLE_NETWORK_PROTOCOL Refer to the Simple Network Protocol section (21.1) in the UEFI 2.3.1 Specification for related definitions ---------------------------------------------------------------------------------------------------------------------*/ /* * UEFI Start() function * * Parameters: * * @param pobj: A pointer to the EFI_SIMPLE_NETWORK_PROTOCOL instance. * * Description: * * This function starts a network interface. If the network interface successfully starts, then * EFI_SUCCESS will be returned. */ EFI_STATUS EFIAPI SnpStart ( IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp ); /* * UEFI Stop() function * */ EFI_STATUS EFIAPI SnpStop ( IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp ); /* * UEFI Initialize() function * */ EFI_STATUS EFIAPI SnpInitialize ( IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp, IN UINTN rx_buff_size, IN UINTN tx_buff_size ); /* * UEFI Reset() function * */ EFI_STATUS EFIAPI SnpReset ( IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp, IN BOOLEAN ext_ver ); /* * UEFI Shutdown() function * */ EFI_STATUS EFIAPI SnpShutdown ( IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp ); /* * UEFI ReceiveFilters() function * */ EFI_STATUS EFIAPI SnpReceiveFilters ( IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp, IN UINT32 enable, IN UINT32 disable, IN BOOLEAN reset_mfilter, IN UINTN num_mfilter, IN EFI_MAC_ADDRESS *mfilter ); /* * UEFI StationAddress() function * */ EFI_STATUS EFIAPI SnpStationAddress ( IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp, IN BOOLEAN reset, IN EFI_MAC_ADDRESS *new_maddr ); /* * UEFI Statistics() function * */ EFI_STATUS EFIAPI SnpStatistics ( IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp, IN BOOLEAN reset, IN OUT UINTN *stat_size, OUT EFI_NETWORK_STATISTICS *stat_table ); /* * UEFI MCastIPtoMAC() function * */ EFI_STATUS EFIAPI SnpMcastIptoMac ( IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp, IN BOOLEAN use_ipv6, IN EFI_IP_ADDRESS *ip_addr, OUT EFI_MAC_ADDRESS *mac_addr ); /* * UEFI NvData() function * */ EFI_STATUS EFIAPI SnpNvData ( IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp, IN BOOLEAN read_write, IN UINTN offset, IN UINTN buff_size, IN OUT VOID *data ); /* * UEFI GetStatus() function * */ EFI_STATUS EFIAPI SnpGetStatus ( IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp, OUT UINT32 *irq_stat OPTIONAL, OUT VOID **tx_buff OPTIONAL ); /* * UEFI Transmit() function * */ EFI_STATUS EFIAPI SnpTransmit ( IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp, IN UINTN hdr_size, IN UINTN buff_size, IN VOID *data, IN EFI_MAC_ADDRESS *src_addr OPTIONAL, IN EFI_MAC_ADDRESS *dest_addr OPTIONAL, IN UINT16 *protocol OPTIONAL ); /* * UEFI Receive() function * */ EFI_STATUS EFIAPI SnpReceive ( IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp, OUT UINTN *hdr_size OPTIONAL, IN OUT UINTN *buff_size, OUT VOID *data, OUT EFI_MAC_ADDRESS *src_addr OPTIONAL, OUT EFI_MAC_ADDRESS *dest_addr OPTIONAL, OUT UINT16 *protocol OPTIONAL ); /*--------------------------------------------------------------------------------------------------------------------- UEFI-Compliant functions for EFI_COMPONENT_NAME2_PROTOCOL Refer to the Component Name Protocol section (10.5) in the UEFI 2.3.1 Specification for related definitions ---------------------------------------------------------------------------------------------------------------------*/ /* * UEFI GetDriverName() function * */ EFI_STATUS EFIAPI SnpGetDriverName ( IN EFI_COMPONENT_NAME2_PROTOCOL *Snp, IN CHAR8 *Lang, OUT CHAR16 **DriverName ); /* * UEFI GetControllerName() function * */ EFI_STATUS EFIAPI SnpGetControllerName ( IN EFI_COMPONENT_NAME2_PROTOCOL *Cnp, IN EFI_HANDLE ControllerHandle, IN EFI_HANDLE ChildHandle OPTIONAL, IN CHAR8 *Lang, OUT CHAR16 **ControllerName ); /*------------------------------------------------------------------------------ Utility functions ------------------------------------------------------------------------------*/ EFI_MAC_ADDRESS GetCurrentMacAddress ( VOID ); #endif // __LAN9118_DXE_H__