/** @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 | |
); | |
/* ------------------ 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__ |