EmbeddedPkg: Added Lan9118 Dxe driver
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
This commit is contained in:
committed by
oliviermartin
parent
4d6e1e5a06
commit
46f2c53b54
266
EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118DxeUtil.h
Normal file
266
EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118DxeUtil.h
Normal file
@@ -0,0 +1,266 @@
|
||||
/** @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__
|
Reference in New Issue
Block a user