| /** @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 <Uefi.h> | |
| #include <Uefi/UefiSpec.h> | |
| #include <Base.h> | |
| // Protocols used by this driver | |
| #include <Protocol/SimpleNetwork.h> | |
| #include <Protocol/ComponentName2.h> | |
| #include <Protocol/PxeBaseCode.h> | |
| #include <Protocol/DevicePath.h> | |
| // Libraries used by this driver | |
| #include <Library/UefiLib.h> | |
| #include <Library/DebugLib.h> | |
| #include <Library/UefiBootServicesTableLib.h> | |
| #include <Library/MemoryAllocationLib.h> | |
| #include <Library/IoLib.h> | |
| #include <Library/PcdLib.h> | |
| #include <Library/NetLib.h> | |
| #include <Library/DevicePathLib.h> | |
| #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__ |