mirror of
				https://git.proxmox.com/git/mirror_edk2
				synced 2025-11-04 09:12:31 +00:00 
			
		
		
		
	Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Olivier Martin <olivier.martin@arm.com> Signed-off-by: Brendan Jackman <brendan.jackman@arm.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15485 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			267 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			267 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @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_RESET_CHECK_LINK                            BIT2
 | 
						|
#define PHY_SOFT_RESET_CLEAR_INT                        BIT3
 | 
						|
 | 
						|
// Perform PHY software reset
 | 
						|
INT32
 | 
						|
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__
 |