blob: 1a9a940082491ecedf2a0f6242b2ac45ecbb98a8 [file] [log] [blame]
/** @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__