/** @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_UTIL_H__ #define __LAN9118_DXE_UTIL_H__ // Most common CRC32 Polynomial for little endian machines #define CRC_POLYNOMIAL 0xEDB88320 /** This internal function reverses bits for 32bit data. @param Value The data to be reversed. @return Data reversed. **/ UINT32 ReverseBits ( UINT32 Value ); // Create an Ethernet CRC UINT32 GenEtherCrc32 ( IN EFI_MAC_ADDRESS *Mac, IN UINT32 AddrLen ); UINT32 Lan9118RawMmioRead32( UINTN Address, UINTN Delay ); #define Lan9118MmioRead32(a) \ Lan9118RawMmioRead32(a, a ## _RD_DELAY) UINT32 Lan9118RawMmioWrite32( UINTN Address, UINT32 Value, UINTN Delay ); #define Lan9118MmioWrite32(a, v) \ Lan9118RawMmioWrite32(a, v, a ## _WR_DELAY) /* ------------------ MAC CSR Access ------------------- */ // Read from MAC indirect registers UINT32 IndirectMACRead32 ( UINT32 Index ); // Write to indirect registers UINT32 IndirectMACWrite32 ( UINT32 Index, UINT32 Value ); /* --------------- PHY Registers Access ---------------- */ // Read from MII register (PHY Access) UINT32 IndirectPHYRead32( UINT32 Index ); // Write to the MII register (PHY Access) UINT32 IndirectPHYWrite32( UINT32 Index, UINT32 Value ); /* ---------------- EEPROM Operations ------------------ */ // Read from EEPROM memory UINT32 IndirectEEPROMRead32 ( UINT32 Index ); // Write to EEPROM memory UINT32 IndirectEEPROMWrite32 ( UINT32 Index, UINT32 Value ); /* ---------------- General Operations ----------------- */ VOID Lan9118SetMacAddress ( EFI_MAC_ADDRESS *Mac, EFI_SIMPLE_NETWORK_PROTOCOL *Snp ); // Initialise the LAN9118 EFI_STATUS Lan9118Initialize ( IN EFI_SIMPLE_NETWORK_PROTOCOL *Snp ); // Flags for software reset #define SOFT_RESET_CHECK_MAC_ADDR_LOAD BIT0 #define SOFT_RESET_CLEAR_INT BIT1 #define SOFT_RESET_SELF_TEST BIT2 // Perform software reset on the LAN9118 EFI_STATUS SoftReset ( UINT32 Flags, EFI_SIMPLE_NETWORK_PROTOCOL *Snp ); // Flags for PHY reset #define PHY_RESET_PMT BIT0 #define PHY_RESET_BCR BIT1 #define PHY_SOFT_RESET_CLEAR_INT BIT2 // Perform PHY software reset EFI_STATUS PhySoftReset ( UINT32 Flags, EFI_SIMPLE_NETWORK_PROTOCOL *Snp ); // Flags for Hardware configuration #define HW_CONF_USE_LEDS BIT0 // Configure hardware for LAN9118 EFI_STATUS ConfigureHardware ( UINT32 Flags, EFI_SIMPLE_NETWORK_PROTOCOL *Snp ); // Configure flow control EFI_STATUS ConfigureFlow ( UINT32 Flags, UINT32 HighTrig, UINT32 LowTrig, UINT32 BPDuration, EFI_SIMPLE_NETWORK_PROTOCOL *Snp ); // Flags for auto negotiation #define AUTO_NEGOTIATE_COLLISION_TEST BIT0 #define AUTO_NEGOTIATE_ADVERTISE_ALL BIT1 // Do auto-negotiation EFI_STATUS AutoNegotiate ( UINT32 Flags, EFI_SIMPLE_NETWORK_PROTOCOL *Snp ); // Check the Link Status and take appropriate action EFI_STATUS CheckLinkStatus ( UINT32 Flags, EFI_SIMPLE_NETWORK_PROTOCOL *Snp ); // Stop transmitter flags #define STOP_TX_MAC BIT0 #define STOP_TX_CFG BIT1 #define STOP_TX_CLEAR BIT2 // Stop the transmitter EFI_STATUS StopTx ( UINT32 Flags, EFI_SIMPLE_NETWORK_PROTOCOL *Snp ); // Stop receiver flags #define STOP_RX_CLEAR BIT0 // Stop the receiver EFI_STATUS StopRx ( UINT32 Flags, EFI_SIMPLE_NETWORK_PROTOCOL *Snp ); // Start transmitter flags #define START_TX_MAC BIT0 #define START_TX_CFG BIT1 #define START_TX_CLEAR BIT2 // Start the transmitter EFI_STATUS StartTx ( UINT32 Flags, EFI_SIMPLE_NETWORK_PROTOCOL *Snp ); // Stop receiver flags #define START_RX_CLEAR BIT0 // Start the receiver EFI_STATUS StartRx ( UINT32 Flags, EFI_SIMPLE_NETWORK_PROTOCOL *Snp ); // Check Tx Data available space UINT32 TxDataFreeSpace ( UINT32 Flags, EFI_SIMPLE_NETWORK_PROTOCOL *Snp ); // Check Tx Status used space UINT32 TxStatusUsedSpace ( UINT32 Flags, EFI_SIMPLE_NETWORK_PROTOCOL *Snp ); // Check Rx Data used space UINT32 RxDataUsedSpace ( UINT32 Flags, EFI_SIMPLE_NETWORK_PROTOCOL *Snp ); // Check Rx Status used space UINT32 RxStatusUsedSpace ( UINT32 Flags, EFI_SIMPLE_NETWORK_PROTOCOL *Snp ); // Flags for FIFO allocation #define ALLOC_USE_DEFAULT BIT0 #define ALLOC_USE_FIFOS BIT1 #define ALLOC_USE_DMA BIT2 // FIFO min and max sizes #define TX_FIFO_MIN_SIZE 0x00000600 #define TX_FIFO_MAX_SIZE 0x00003600 //#define RX_FIFO_MIN_SIZE //#define RX_FIFO_MAX_SIZE // Change the allocation of FIFOs EFI_STATUS ChangeFifoAllocation ( IN UINT32 Flags, IN OUT UINTN *TxDataSize OPTIONAL, IN OUT UINTN *RxDataSize OPTIONAL, IN OUT UINT32 *TxStatusSize OPTIONAL, IN OUT UINT32 *RxStatusSize OPTIONAL, IN OUT EFI_SIMPLE_NETWORK_PROTOCOL *Snp ); VOID Lan9118ReadMacAddress ( OUT EFI_MAC_ADDRESS *Mac ); #endif // __LAN9118_DXE_UTIL_H__