EmbeddedPkg: remove Lan9118 network controller driver
The Lan9118 network controller driver does not implement the UEFI driver model, and is not a suitable example for new drivers to be based on. Also, it is currently only used on a limited set of ARM development platforms. Due to this, it has been moved into the edk2-platforms repository, alongside its remaining users, which have been updated to refer to it in its new location. So drop this version from EmbeddedPkg. Signed-off-by: Ard Biesheuvel <ard.biesheuvel@arm.com> Reviewed-by: Philippe Mathieu-Daude <philmd@redhat.com> Reviewed-by: Leif Lindholm <leif@nuviainc.com>
This commit is contained in:
parent
43bad5b5ba
commit
f2bd980059
File diff suppressed because it is too large
Load Diff
|
@ -1,297 +0,0 @@
|
||||||
/** @file
|
|
||||||
*
|
|
||||||
* Copyright (c) 2012-2014, ARM Limited. All rights reserved.
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
||||||
*
|
|
||||||
**/
|
|
||||||
|
|
||||||
#ifndef __LAN9118_DXE_H__
|
|
||||||
#define __LAN9118_DXE_H__
|
|
||||||
|
|
||||||
#include <Uefi.h>
|
|
||||||
#include <Uefi/UefiSpec.h>
|
|
||||||
#include <Base.h>
|
|
||||||
|
|
||||||
// Protocols used by this driver
|
|
||||||
#include <Protocol/SimpleNetwork.h>
|
|
||||||
#include <Protocol/ComponentName2.h>
|
|
||||||
#include <Protocol/PxeBaseCode.h>
|
|
||||||
#include <Protocol/DevicePath.h>
|
|
||||||
|
|
||||||
// Libraries used by this driver
|
|
||||||
#include <Library/UefiLib.h>
|
|
||||||
#include <Library/DebugLib.h>
|
|
||||||
#include <Library/UefiBootServicesTableLib.h>
|
|
||||||
#include <Library/MemoryAllocationLib.h>
|
|
||||||
#include <Library/IoLib.h>
|
|
||||||
#include <Library/PcdLib.h>
|
|
||||||
#include <Library/NetLib.h>
|
|
||||||
#include <Library/DevicePathLib.h>
|
|
||||||
|
|
||||||
#include "Lan9118DxeUtil.h"
|
|
||||||
#include "Lan9118DxeHw.h"
|
|
||||||
|
|
||||||
#define LAN9118_STALL 2
|
|
||||||
|
|
||||||
#define LAN9118_DEFAULT_MAC_ADDRL 0x00F70200
|
|
||||||
#define LAN9118_DEFAULT_MAC_ADDRH 0x00009040
|
|
||||||
|
|
||||||
#define LAN9118_TX_DATA_SIZE 4608
|
|
||||||
#define LAN9118_TX_STATUS_SIZE 512
|
|
||||||
#define LAN9118_RX_DATA_SIZE 10560
|
|
||||||
#define LAN9118_RX_STATUS_SIZE 704
|
|
||||||
|
|
||||||
#define LAN9118_TX_RING_NUM_ENTRIES 32
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------
|
|
||||||
LAN9118 Information Structure
|
|
||||||
------------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
// Driver signature
|
|
||||||
UINT32 Signature;
|
|
||||||
EFI_HANDLE ControllerHandle;
|
|
||||||
|
|
||||||
// EFI SNP protocol instances
|
|
||||||
EFI_SIMPLE_NETWORK_PROTOCOL Snp;
|
|
||||||
EFI_SIMPLE_NETWORK_MODE SnpMode;
|
|
||||||
|
|
||||||
// EFI Snp statistics instance
|
|
||||||
EFI_NETWORK_STATISTICS Stats;
|
|
||||||
|
|
||||||
// Saved transmitted buffers so we can notify consumers when packets have been sent.
|
|
||||||
UINT16 NextPacketTag;
|
|
||||||
VOID *TxRing[LAN9118_TX_RING_NUM_ENTRIES];
|
|
||||||
} LAN9118_DRIVER;
|
|
||||||
|
|
||||||
#define LAN9118_SIGNATURE SIGNATURE_32('l', 'a', 'n', '9')
|
|
||||||
#define INSTANCE_FROM_SNP_THIS(a) CR(a, LAN9118_DRIVER, Snp, LAN9118_SIGNATURE)
|
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
UEFI-Compliant functions for EFI_SIMPLE_NETWORK_PROTOCOL
|
|
||||||
|
|
||||||
Refer to the Simple Network Protocol section (21.1) in the UEFI 2.3.1 Specification for related definitions
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* UEFI Start() function
|
|
||||||
*
|
|
||||||
* Parameters:
|
|
||||||
*
|
|
||||||
* @param pobj: A pointer to the EFI_SIMPLE_NETWORK_PROTOCOL instance.
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
*
|
|
||||||
* This function starts a network interface. If the network interface successfully starts, then
|
|
||||||
* EFI_SUCCESS will be returned.
|
|
||||||
*/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
SnpStart (
|
|
||||||
IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* UEFI Stop() function
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
SnpStop (
|
|
||||||
IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* UEFI Initialize() function
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
SnpInitialize (
|
|
||||||
IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
|
|
||||||
IN UINTN rx_buff_size,
|
|
||||||
IN UINTN tx_buff_size
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* UEFI Reset() function
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
SnpReset (
|
|
||||||
IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
|
|
||||||
IN BOOLEAN ext_ver
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* UEFI Shutdown() function
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
SnpShutdown (
|
|
||||||
IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* UEFI ReceiveFilters() function
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
SnpReceiveFilters (
|
|
||||||
IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
|
|
||||||
IN UINT32 enable,
|
|
||||||
IN UINT32 disable,
|
|
||||||
IN BOOLEAN reset_mfilter,
|
|
||||||
IN UINTN num_mfilter,
|
|
||||||
IN EFI_MAC_ADDRESS *mfilter
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* UEFI StationAddress() function
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
SnpStationAddress (
|
|
||||||
IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
|
|
||||||
IN BOOLEAN reset,
|
|
||||||
IN EFI_MAC_ADDRESS *new_maddr
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* UEFI Statistics() function
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
SnpStatistics (
|
|
||||||
IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
|
|
||||||
IN BOOLEAN reset,
|
|
||||||
IN OUT UINTN *stat_size,
|
|
||||||
OUT EFI_NETWORK_STATISTICS *stat_table
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* UEFI MCastIPtoMAC() function
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
SnpMcastIptoMac (
|
|
||||||
IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
|
|
||||||
IN BOOLEAN use_ipv6,
|
|
||||||
IN EFI_IP_ADDRESS *ip_addr,
|
|
||||||
OUT EFI_MAC_ADDRESS *mac_addr
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* UEFI NvData() function
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
SnpNvData (
|
|
||||||
IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
|
|
||||||
IN BOOLEAN read_write,
|
|
||||||
IN UINTN offset,
|
|
||||||
IN UINTN buff_size,
|
|
||||||
IN OUT VOID *data
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* UEFI GetStatus() function
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
SnpGetStatus (
|
|
||||||
IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
|
|
||||||
OUT UINT32 *irq_stat OPTIONAL,
|
|
||||||
OUT VOID **tx_buff OPTIONAL
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* UEFI Transmit() function
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
SnpTransmit (
|
|
||||||
IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
|
|
||||||
IN UINTN hdr_size,
|
|
||||||
IN UINTN buff_size,
|
|
||||||
IN VOID *data,
|
|
||||||
IN EFI_MAC_ADDRESS *src_addr OPTIONAL,
|
|
||||||
IN EFI_MAC_ADDRESS *dest_addr OPTIONAL,
|
|
||||||
IN UINT16 *protocol OPTIONAL
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* UEFI Receive() function
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
SnpReceive (
|
|
||||||
IN EFI_SIMPLE_NETWORK_PROTOCOL* Snp,
|
|
||||||
OUT UINTN *hdr_size OPTIONAL,
|
|
||||||
IN OUT UINTN *buff_size,
|
|
||||||
OUT VOID *data,
|
|
||||||
OUT EFI_MAC_ADDRESS *src_addr OPTIONAL,
|
|
||||||
OUT EFI_MAC_ADDRESS *dest_addr OPTIONAL,
|
|
||||||
OUT UINT16 *protocol OPTIONAL
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
UEFI-Compliant functions for EFI_COMPONENT_NAME2_PROTOCOL
|
|
||||||
|
|
||||||
Refer to the Component Name Protocol section (10.5) in the UEFI 2.3.1 Specification for related definitions
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* UEFI GetDriverName() function
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
SnpGetDriverName (
|
|
||||||
IN EFI_COMPONENT_NAME2_PROTOCOL *Snp,
|
|
||||||
IN CHAR8 *Lang,
|
|
||||||
OUT CHAR16 **DriverName
|
|
||||||
);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* UEFI GetControllerName() function
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
EFI_STATUS
|
|
||||||
EFIAPI
|
|
||||||
SnpGetControllerName (
|
|
||||||
IN EFI_COMPONENT_NAME2_PROTOCOL *Cnp,
|
|
||||||
IN EFI_HANDLE ControllerHandle,
|
|
||||||
IN EFI_HANDLE ChildHandle OPTIONAL,
|
|
||||||
IN CHAR8 *Lang,
|
|
||||||
OUT CHAR16 **ControllerName
|
|
||||||
);
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------
|
|
||||||
Utility functions
|
|
||||||
------------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
EFI_MAC_ADDRESS
|
|
||||||
GetCurrentMacAddress (
|
|
||||||
VOID
|
|
||||||
);
|
|
||||||
|
|
||||||
#endif // __LAN9118_DXE_H__
|
|
|
@ -1,51 +0,0 @@
|
||||||
#/** @file
|
|
||||||
# INF file for the LAN9118 Network Controller Driver.
|
|
||||||
#
|
|
||||||
# Copyright (c) 2012-2015, ARM Limited. All rights reserved.
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
||||||
#
|
|
||||||
#**/
|
|
||||||
|
|
||||||
[Defines]
|
|
||||||
INF_VERSION = 0x00010006
|
|
||||||
BASE_NAME = Lan9118Dxe
|
|
||||||
FILE_GUID = 4356b162-d0b2-11e1-8952-4437e6a60ea5
|
|
||||||
MODULE_TYPE = DXE_DRIVER
|
|
||||||
VERSION_STRING = 0.1
|
|
||||||
ENTRY_POINT = Lan9118DxeEntry
|
|
||||||
|
|
||||||
[Sources.common]
|
|
||||||
Lan9118Dxe.c
|
|
||||||
Lan9118DxeUtil.c
|
|
||||||
Lan9118Dxe.h
|
|
||||||
|
|
||||||
[Packages]
|
|
||||||
EmbeddedPkg/EmbeddedPkg.dec
|
|
||||||
NetworkPkg/NetworkPkg.dec
|
|
||||||
MdeModulePkg/MdeModulePkg.dec
|
|
||||||
MdePkg/MdePkg.dec
|
|
||||||
|
|
||||||
[LibraryClasses]
|
|
||||||
BaseLib
|
|
||||||
UefiLib
|
|
||||||
NetLib
|
|
||||||
UefiDriverEntryPoint
|
|
||||||
BaseMemoryLib
|
|
||||||
IoLib
|
|
||||||
DevicePathLib
|
|
||||||
|
|
||||||
[Protocols]
|
|
||||||
gEfiSimpleNetworkProtocolGuid
|
|
||||||
gEfiMetronomeArchProtocolGuid
|
|
||||||
gEfiPxeBaseCodeProtocolGuid
|
|
||||||
gEfiDevicePathProtocolGuid
|
|
||||||
|
|
||||||
[FixedPcd]
|
|
||||||
gEmbeddedTokenSpaceGuid.PcdLan9118DxeBaseAddress
|
|
||||||
gEmbeddedTokenSpaceGuid.PcdLan9118DefaultMacAddress
|
|
||||||
gEmbeddedTokenSpaceGuid.PcdLan9118DefaultNegotiationTimeout
|
|
||||||
gEmbeddedTokenSpaceGuid.PcdLan9118NegotiationFeatureMask
|
|
||||||
|
|
||||||
[Depex]
|
|
||||||
TRUE
|
|
|
@ -1,394 +0,0 @@
|
||||||
/** @file
|
|
||||||
*
|
|
||||||
* Copyright (c) 2012-2014, ARM Limited. All rights reserved.
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
||||||
*
|
|
||||||
**/
|
|
||||||
|
|
||||||
#ifndef __LAN9118_DXE_HW_H__
|
|
||||||
#define __LAN9118_DXE_HW_H__
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------
|
|
||||||
LAN9118 SMCS Registers
|
|
||||||
------------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
// Base address as on the VE board
|
|
||||||
#define LAN9118_BA ((UINT32) PcdGet32(PcdLan9118DxeBaseAddress))
|
|
||||||
|
|
||||||
/* ------------- Tx and Rx Data and Status Memory Locations ------------------*/
|
|
||||||
#define LAN9118_RX_DATA (0x00000000 + LAN9118_BA)
|
|
||||||
#define LAN9118_RX_STATUS (0x00000040 + LAN9118_BA)
|
|
||||||
#define LAN9118_RX_STATUS_PEEK (0x00000044 + LAN9118_BA)
|
|
||||||
#define LAN9118_TX_DATA (0x00000020 + LAN9118_BA)
|
|
||||||
#define LAN9118_TX_STATUS (0x00000048 + LAN9118_BA)
|
|
||||||
#define LAN9118_TX_STATUS_PEEK (0x0000004C + LAN9118_BA)
|
|
||||||
|
|
||||||
/* ------------- System Control and Status Registers -------------------------*/
|
|
||||||
#define LAN9118_ID_REV (0x00000050 + LAN9118_BA) // Chip ID and Revision
|
|
||||||
#define LAN9118_IRQ_CFG (0x00000054 + LAN9118_BA) // Interrupt Configuration
|
|
||||||
#define LAN9118_INT_STS (0x00000058 + LAN9118_BA) // Interrupt Status
|
|
||||||
#define LAN9118_INT_EN (0x0000005C + LAN9118_BA) // Interrupt Enable
|
|
||||||
//#define LAN9118_RESERVED (0x00000060)
|
|
||||||
#define LAN9118_BYTE_TEST (0x00000064 + LAN9118_BA) // Byte Order Test
|
|
||||||
#define LAN9118_FIFO_INT (0x00000068 + LAN9118_BA) // FIFO Level Interrupts
|
|
||||||
#define LAN9118_RX_CFG (0x0000006C + LAN9118_BA) // Receive Configuration
|
|
||||||
#define LAN9118_TX_CFG (0x00000070 + LAN9118_BA) // Transmit Configuration
|
|
||||||
#define LAN9118_HW_CFG (0x00000074 + LAN9118_BA) // Hardware Configuration
|
|
||||||
#define LAN9118_RX_DP_CTL (0x00000078 + LAN9118_BA) // Receive Data-Path Configuration
|
|
||||||
#define LAN9118_RX_FIFO_INF (0x0000007C + LAN9118_BA) // Receive FIFO Information
|
|
||||||
#define LAN9118_TX_FIFO_INF (0x00000080 + LAN9118_BA) // Transmit FIFO Information
|
|
||||||
#define LAN9118_PMT_CTRL (0x00000084 + LAN9118_BA) // Power Management Control
|
|
||||||
#define LAN9118_GPIO_CFG (0x00000088 + LAN9118_BA) // General Purpose IO Configuration
|
|
||||||
#define LAN9118_GPT_CFG (0x0000008C + LAN9118_BA) // General Purpose Timer Configuration
|
|
||||||
#define LAN9118_GPT_CNT (0x00000090 + LAN9118_BA) // General Purpose Timer Current Count
|
|
||||||
#define LAN9118_WORD_SWAP (0x00000098 + LAN9118_BA) // Word Swap Control
|
|
||||||
#define LAN9118_FREE_RUN (0x0000009C + LAN9118_BA) // Free-Run 25MHz Counter
|
|
||||||
#define LAN9118_RX_DROP (0x000000A0 + LAN9118_BA) // Receiver Dropped Frames Counter
|
|
||||||
#define LAN9118_MAC_CSR_CMD (0x000000A4 + LAN9118_BA) // MAC CSR Synchronizer Command
|
|
||||||
#define LAN9118_MAC_CSR_DATA (0x000000A8 + LAN9118_BA) // MAC CSR Synchronizer Data
|
|
||||||
#define LAN9118_AFC_CFG (0x000000AC + LAN9118_BA) // Automatic Flow Control Configuration
|
|
||||||
#define LAN9118_E2P_CMD (0x000000B0 + LAN9118_BA) // EEPROM Command
|
|
||||||
#define LAN9118_E2P_DATA (0x000000B4 + LAN9118_BA) // EEPROM Data
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Required delays following write cycles (number of BYTE_TEST reads)
|
|
||||||
* Taken from Table 6.1 in Revision 1.5 (07-11-08) of the LAN9118 datasheet.
|
|
||||||
* Where no delay listed, 0 has been assumed.
|
|
||||||
*/
|
|
||||||
#define LAN9118_RX_DATA_WR_DELAY 0
|
|
||||||
#define LAN9118_RX_STATUS_WR_DELAY 0
|
|
||||||
#define LAN9118_RX_STATUS_PEEK_WR_DELAY 0
|
|
||||||
#define LAN9118_TX_DATA_WR_DELAY 0
|
|
||||||
#define LAN9118_TX_STATUS_WR_DELAY 0
|
|
||||||
#define LAN9118_TX_STATUS_PEEK_WR_DELAY 0
|
|
||||||
#define LAN9118_ID_REV_WR_DELAY 0
|
|
||||||
#define LAN9118_IRQ_CFG_WR_DELAY 3
|
|
||||||
#define LAN9118_INT_STS_WR_DELAY 2
|
|
||||||
#define LAN9118_INT_EN_WR_DELAY 1
|
|
||||||
#define LAN9118_BYTE_TEST_WR_DELAY 0
|
|
||||||
#define LAN9118_FIFO_INT_WR_DELAY 1
|
|
||||||
#define LAN9118_RX_CFG_WR_DELAY 1
|
|
||||||
#define LAN9118_TX_CFG_WR_DELAY 1
|
|
||||||
#define LAN9118_HW_CFG_WR_DELAY 1
|
|
||||||
#define LAN9118_RX_DP_CTL_WR_DELAY 1
|
|
||||||
#define LAN9118_RX_FIFO_INF_WR_DELAY 0
|
|
||||||
#define LAN9118_TX_FIFO_INF_WR_DELAY 3
|
|
||||||
#define LAN9118_PMT_CTRL_WR_DELAY 7
|
|
||||||
#define LAN9118_GPIO_CFG_WR_DELAY 1
|
|
||||||
#define LAN9118_GPT_CFG_WR_DELAY 1
|
|
||||||
#define LAN9118_GPT_CNT_WR_DELAY 3
|
|
||||||
#define LAN9118_WORD_SWAP_WR_DELAY 1
|
|
||||||
#define LAN9118_FREE_RUN_WR_DELAY 4
|
|
||||||
#define LAN9118_RX_DROP_WR_DELAY 0
|
|
||||||
#define LAN9118_MAC_CSR_CMD_WR_DELAY 1
|
|
||||||
#define LAN9118_MAC_CSR_DATA_WR_DELAY 1
|
|
||||||
#define LAN9118_AFC_CFG_WR_DELAY 1
|
|
||||||
#define LAN9118_E2P_CMD_WR_DELAY 1
|
|
||||||
#define LAN9118_E2P_DATA_WR_DELAY 1
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Required delays following read cycles (number of BYTE_TEST reads)
|
|
||||||
* Taken from Table 6.2 in Revision 1.5 (07-11-08) of the LAN9118 datasheet.
|
|
||||||
* Where no delay listed, 0 has been assumed.
|
|
||||||
*/
|
|
||||||
#define LAN9118_RX_DATA_RD_DELAY 3
|
|
||||||
#define LAN9118_RX_STATUS_RD_DELAY 3
|
|
||||||
#define LAN9118_RX_STATUS_PEEK_RD_DELAY 0
|
|
||||||
#define LAN9118_TX_DATA_RD_DELAY 0
|
|
||||||
#define LAN9118_TX_STATUS_RD_DELAY 3
|
|
||||||
#define LAN9118_TX_STATUS_PEEK_RD_DELAY 0
|
|
||||||
#define LAN9118_ID_REV_RD_DELAY 0
|
|
||||||
#define LAN9118_IRQ_CFG_RD_DELAY 0
|
|
||||||
#define LAN9118_INT_STS_RD_DELAY 0
|
|
||||||
#define LAN9118_INT_EN_RD_DELAY 0
|
|
||||||
#define LAN9118_BYTE_TEST_RD_DELAY 0
|
|
||||||
#define LAN9118_FIFO_INT_RD_DELAY 0
|
|
||||||
#define LAN9118_RX_CFG_RD_DELAY 0
|
|
||||||
#define LAN9118_TX_CFG_RD_DELAY 0
|
|
||||||
#define LAN9118_HW_CFG_RD_DELAY 0
|
|
||||||
#define LAN9118_RX_DP_CTL_RD_DELAY 0
|
|
||||||
#define LAN9118_RX_FIFO_INF_RD_DELAY 0
|
|
||||||
#define LAN9118_TX_FIFO_INF_RD_DELAY 0
|
|
||||||
#define LAN9118_PMT_CTRL_RD_DELAY 0
|
|
||||||
#define LAN9118_GPIO_CFG_RD_DELAY 0
|
|
||||||
#define LAN9118_GPT_CFG_RD_DELAY 0
|
|
||||||
#define LAN9118_GPT_CNT_RD_DELAY 0
|
|
||||||
#define LAN9118_WORD_SWAP_RD_DELAY 0
|
|
||||||
#define LAN9118_FREE_RUN_RD_DELAY 0
|
|
||||||
#define LAN9118_RX_DROP_RD_DELAY 4
|
|
||||||
#define LAN9118_MAC_CSR_CMD_RD_DELAY 0
|
|
||||||
#define LAN9118_MAC_CSR_DATA_RD_DELAY 0
|
|
||||||
#define LAN9118_AFC_CFG_RD_DELAY 0
|
|
||||||
#define LAN9118_E2P_CMD_RD_DELAY 0
|
|
||||||
#define LAN9118_E2P_DATA_RD_DELAY 0
|
|
||||||
|
|
||||||
// Receiver Status bits
|
|
||||||
#define RXSTATUS_CRC_ERROR BIT1 // Cyclic Redundancy Check Error
|
|
||||||
#define RXSTATUS_DB BIT2 // Dribbling bit: Frame had non-integer multiple of 8bits
|
|
||||||
#define RXSTATUS_MII_ERROR BIT3 // Receive error during interception
|
|
||||||
#define RXSTATUS_RXW_TO BIT4 // Incoming frame larger than 2kb
|
|
||||||
#define RXSTATUS_FT BIT5 // 1: Ether type / 0: 802.3 type frame
|
|
||||||
#define RXSTATUS_LCOLL BIT6 // Late collision detected
|
|
||||||
#define RXSTATUS_FTL BIT7 // Frame longer than Ether type
|
|
||||||
#define RXSTATUS_MCF BIT10 // Frame has Multicast Address
|
|
||||||
#define RXSTATUS_RUNT BIT11 // Bad frame
|
|
||||||
#define RXSTATUS_LE BIT12 // Actual length of frame different than it claims
|
|
||||||
#define RXSTATUS_BCF BIT13 // Frame has Broadcast Address
|
|
||||||
#define RXSTATUS_ES BIT15 // Reports any error from bits 1,6,7 and 11
|
|
||||||
#define RXSTATUS_PL_MASK (0x3FFF0000) // Packet length bit mask
|
|
||||||
#define GET_RXSTATUS_PACKET_LENGTH(RxStatus) (((RxStatus) >> 16) & 0x3FFF) // Packet length bit mask
|
|
||||||
#define RXSTATUS_FILT_FAIL BIT30 // The frame failed filtering test
|
|
||||||
|
|
||||||
// Transmitter Status bits
|
|
||||||
#define TXSTATUS_DEF BIT0 // Packet tx was deferred
|
|
||||||
#define TXSTATUS_EDEF BIT2 // Tx ended because of excessive deferral (> 24288 bit times)
|
|
||||||
#define TXSTATUS_CC_MASK (0x00000078) // Collision Count (before Tx) bit mask
|
|
||||||
#define TXSTATUS_ECOLL BIT8 // Tx ended because of Excessive Collisions (makes CC_MASK invalid after 16 collisions)
|
|
||||||
#define TXSTATUS_LCOLL BIT9 // Packet Tx aborted after coll window of 64 bytes
|
|
||||||
#define TXSTATUS_NO_CA BIT10 // Carrier signal not present during Tx (bad?)
|
|
||||||
#define TXSTATUS_LOST_CA BIT11 // Lost carrier during Tx
|
|
||||||
#define TXSTATUS_ES BIT15 // Reports any errors from bits 1,2,8,9,10 and 11
|
|
||||||
#define TXSTATUS_PTAG_MASK (0xFFFF0000) // Mask for Unique ID of packets (So we know who the packets are for)
|
|
||||||
|
|
||||||
// ID_REV register bits
|
|
||||||
#define IDREV_ID ((Lan9118MmioRead32(LAN9118_ID_REV) & 0xFFFF0000) >> 16)
|
|
||||||
#define IDREV_REV (Lan9118MmioRead32(LAN9118_ID_REV) & 0x0000FFFF)
|
|
||||||
|
|
||||||
// Interrupt Config Register bits
|
|
||||||
#define IRQCFG_IRQ_TYPE BIT0 // IRQ Buffer type
|
|
||||||
#define IRQCFG_IRQ_POL BIT4 // IRQ Polarity
|
|
||||||
#define IRQCFG_IRQ_EN BIT8 // Enable external interrupt
|
|
||||||
#define IRQCFG_IRQ_INT BIT12 // State of internal interrupts line
|
|
||||||
#define IRQCFG_INT_DEAS_STS BIT13 // State of deassertion interval
|
|
||||||
#define IRQCFG_INT_DEAS_CLR BIT14 // Clear the deassertion counter
|
|
||||||
#define IRQCFG_INT_DEAS_MASK (0xFF000000) // Interrupt deassertion interval value mask
|
|
||||||
|
|
||||||
// Interrupt Status Register bits
|
|
||||||
#define INSTS_GPIO_MASK (0x7) // GPIO interrupts mask
|
|
||||||
#define INSTS_RSFL (0x8) // Rx Status FIFO Level reached
|
|
||||||
#define INSTS_RSFF BIT4 // Rx Status FIFO full
|
|
||||||
#define INSTS_RXDF_INT BIT6 // Rx Frame dropped
|
|
||||||
#define INSTS_TSFL BIT7 // Tx Status FIFO Level reached
|
|
||||||
#define INSTS_TSFF BIT8 // Tx Status FIFO full
|
|
||||||
#define INSTS_TDFA BIT9 // Tx Data FIFO Level exceeded
|
|
||||||
#define INSTS_TDFO BIT10 // Tx Data FIFO full
|
|
||||||
#define INSTS_TXE BIT13 // Transmitter Error
|
|
||||||
#define INSTS_RXE BIT14 // Receiver Error
|
|
||||||
#define INSTS_RWT BIT15 // Packet > 2048 bytes received
|
|
||||||
#define INSTS_TXSO BIT16 // Tx Status FIFO Overflow
|
|
||||||
#define INSTS_PME_INT BIT17 // PME Signal detected
|
|
||||||
#define INSTS_PHY_INT BIT18 // Indicates PHY Interrupt
|
|
||||||
#define INSTS_GPT_INT BIT19 // GP Timer wrapped past 0xFFFF
|
|
||||||
#define INSTS_RXD_INT BIT20 // Indicates that amount of data written to RX_CFG was cleared
|
|
||||||
#define INSTS_TX_IOC BIT21 // Finished loading IOC flagged buffer to Tx FIFO
|
|
||||||
#define INSTS_RXDFH_INT BIT23 // Rx Dropped frames went past 0x7FFFFFFF
|
|
||||||
#define INSTS_RXSTOP_INT BIT24 // Rx was stopped
|
|
||||||
#define INSTS_TXSTOP_INT BIT25 // Tx was stopped
|
|
||||||
#define INSTS_SW_INT BIT31 // Software Interrupt occurred
|
|
||||||
|
|
||||||
// Interrupt Enable Register bits
|
|
||||||
|
|
||||||
|
|
||||||
// Hardware Config Register bits
|
|
||||||
#define HWCFG_SRST BIT0 // Software Reset bit (SC)
|
|
||||||
#define HWCFG_SRST_TO BIT1 // Software Reset Timeout bit (RO)
|
|
||||||
#define HWCFG_BMODE BIT2 // 32/16 bit Mode bit (RO)
|
|
||||||
#define HWCFG_TX_FIFO_SIZE_MASK (~ (UINT32)0xF0000) // Mask to Clear FIFO Size
|
|
||||||
#define HWCFG_MBO BIT20 // Must Be One bit
|
|
||||||
|
|
||||||
// Power Management Control Register
|
|
||||||
#define MPTCTRL_READY BIT0 // Device ready indicator
|
|
||||||
#define MPTCTRL_PME_EN BIT1 // Enable external PME signals
|
|
||||||
#define MPTCTRL_PME_POL BIT2 // Set polarity of PME signals
|
|
||||||
#define MPTCTRL_PME_IND BIT3 // Signal type of PME (refer to Spec)
|
|
||||||
#define MPTCTRL_WUPS_MASK (0x18) // Wake up status indicator mask
|
|
||||||
#define MPTCTRL_PME_TYPE BIT6 // PME Buffer type (Open Drain or Push-Pull)
|
|
||||||
#define MPTCTRL_ED_EN BIT8 // Energy-detect enable
|
|
||||||
#define MPTCTRL_WOL_EN BIT9 // Enable wake-on-lan
|
|
||||||
#define MPTCTRL_PHY_RST BIT10 // Reset the PHY
|
|
||||||
#define MPTCTRL_PM_MODE_MASK (BIT12 | BIT13) // Set the power mode
|
|
||||||
|
|
||||||
// PHY control register bits
|
|
||||||
#define PHYCR_COLL_TEST BIT7 // Collision test enable
|
|
||||||
#define PHYCR_DUPLEX_MODE BIT8 // Set Duplex Mode
|
|
||||||
#define PHYCR_RST_AUTO BIT9 // Restart Auto-Negotiation of Link abilities
|
|
||||||
#define PHYCR_PD BIT11 // Power-Down switch
|
|
||||||
#define PHYCR_AUTO_EN BIT12 // Auto-Negotiation Enable
|
|
||||||
#define PHYCR_SPEED_SEL BIT13 // Link Speed Selection
|
|
||||||
#define PHYCR_LOOPBK BIT14 // Set loopback mode
|
|
||||||
#define PHYCR_RESET BIT15 // Do a PHY reset
|
|
||||||
|
|
||||||
// PHY status register bits
|
|
||||||
#define PHYSTS_EXT_CAP BIT0 // Extended Capabilities Register capability
|
|
||||||
#define PHYSTS_JABBER BIT1 // Jabber condition detected
|
|
||||||
#define PHYSTS_LINK_STS BIT2 // Link Status
|
|
||||||
#define PHYSTS_AUTO_CAP BIT3 // Auto-Negotiation Capability
|
|
||||||
#define PHYSTS_REMOTE_FAULT BIT4 // Remote fault detected
|
|
||||||
#define PHYSTS_AUTO_COMP BIT5 // Auto-Negotiation Completed
|
|
||||||
#define PHYSTS_10BASET_HDPLX BIT11 // 10Mbps Half-Duplex ability
|
|
||||||
#define PHYSTS_10BASET_FDPLX BIT12 // 10Mbps Full-Duplex ability
|
|
||||||
#define PHYSTS_100BASETX_HDPLX BIT13 // 100Mbps Half-Duplex ability
|
|
||||||
#define PHYSTS_100BASETX_FDPLX BIT14 // 100Mbps Full-Duplex ability
|
|
||||||
#define PHYSTS_100BASE_T4 BIT15 // Base T4 ability
|
|
||||||
|
|
||||||
// PHY Auto-Negotiation advertisement
|
|
||||||
#define PHYANA_SEL_MASK ((UINT32)0x1F) // Link type selector
|
|
||||||
#define PHYANA_10BASET BIT5 // Advertise 10BASET capability
|
|
||||||
#define PHYANA_10BASETFD BIT6 // Advertise 10BASET Full duplex capability
|
|
||||||
#define PHYANA_100BASETX BIT7 // Advertise 100BASETX capability
|
|
||||||
#define PHYANA_100BASETXFD BIT8 // Advertise 100 BASETX Full duplex capability
|
|
||||||
#define PHYANA_PAUSE_OP_MASK (3 << 10) // Advertise PAUSE frame capability
|
|
||||||
#define PHYANA_REMOTE_FAULT BIT13 // Remote fault detected
|
|
||||||
|
|
||||||
|
|
||||||
// PHY Auto-Negotiation Link Partner Ability
|
|
||||||
|
|
||||||
// PHY Auto-Negotiation Expansion
|
|
||||||
|
|
||||||
// PHY Mode control/status
|
|
||||||
|
|
||||||
// PHY Special Modes
|
|
||||||
|
|
||||||
// PHY Special control/status
|
|
||||||
|
|
||||||
// PHY Interrupt Source Flags
|
|
||||||
|
|
||||||
// PHY Interrupt Mask
|
|
||||||
|
|
||||||
// PHY Super Special control/status
|
|
||||||
#define PHYSSCS_HCDSPEED_MASK (7 << 2) // Speed indication
|
|
||||||
#define PHYSSCS_AUTODONE BIT12 // Auto-Negotiation Done
|
|
||||||
|
|
||||||
|
|
||||||
// MAC control register bits
|
|
||||||
#define MACCR_RX_EN BIT2 // Enable Receiver bit
|
|
||||||
#define MACCR_TX_EN BIT3 // Enable Transmitter bit
|
|
||||||
#define MACCR_DFCHK BIT5 // Deferral Check bit
|
|
||||||
#define MACCR_PADSTR BIT8 // Automatic Pad Stripping bit
|
|
||||||
#define MACCR_BOLMT_MASK (0xC0) // Back-Off limit mask
|
|
||||||
#define MACCR_DISRTY BIT10 // Disable Transmit Retry bit
|
|
||||||
#define MACCR_BCAST BIT11 // Disable Broadcast Frames bit
|
|
||||||
#define MACCR_LCOLL BIT12 // Late Collision Control bit
|
|
||||||
#define MACCR_HPFILT BIT13 // Hash/Perfect Filtering Mode bit
|
|
||||||
#define MACCR_HO BIT15 // Hash Only Filtering Mode
|
|
||||||
#define MACCR_PASSBAD BIT16 // Receive all frames that passed filter bit
|
|
||||||
#define MACCR_INVFILT BIT17 // Enable Inverse Filtering bit
|
|
||||||
#define MACCR_PRMS BIT18 // Promiscuous Mode bit
|
|
||||||
#define MACCR_MCPAS BIT19 // Pass all Multicast packets bit
|
|
||||||
#define MACCR_FDPX BIT20 // Full Duplex Mode bit
|
|
||||||
#define MACCR_LOOPBK BIT21 // Loopback operation mode bit
|
|
||||||
#define MACCR_RCVOWN BIT23 // Disable Receive Own frames bit
|
|
||||||
#define MACCR_RX_ALL BIT31 // Receive all Packets and route to Filter
|
|
||||||
|
|
||||||
// Wake-Up Control and Status Register
|
|
||||||
#define WUCSR_MPEN BIT1 // Magic Packet enable (allow wake from Magic P)
|
|
||||||
#define WUCSR_WUEN BIT2 // Allow remote wake up using Wake-Up Frames
|
|
||||||
#define WUCSR_MPR_MASK (0x10) // Received Magic Packet
|
|
||||||
#define WUCSR_WUFR_MASK (0x20) // Received Wake-Up Frame
|
|
||||||
#define WUCSR_GUE BIT9 // Enable wake on global unicast frames
|
|
||||||
|
|
||||||
// RX Configuration Register bits
|
|
||||||
#define RXCFG_RXDOFF_MASK (0x1F00) // Rx Data Offset in Bytes
|
|
||||||
#define RXCFG_RX_DUMP BIT15 // Clear Rx data and status FIFOs
|
|
||||||
#define RXCFG_RX_DMA_CNT_MASK (0x0FFF0000) // Amount of data to be read from Rx FIFO
|
|
||||||
#define RXCFG_RX_DMA_CNT(cnt) (((cnt) & 0xFFF) << 16) // Amount of data to be read from Rx FIFO
|
|
||||||
#define RXCFG_RX_END_ALIGN_MASK (0xC0000000) // Alignment to preserve
|
|
||||||
|
|
||||||
// TX Configuration Register bits
|
|
||||||
#define TXCFG_STOP_TX BIT0 // Stop the transmitter
|
|
||||||
#define TXCFG_TX_ON BIT1 // Start the transmitter
|
|
||||||
#define TXCFG_TXSAO BIT2 // Tx Status FIFO full
|
|
||||||
#define TXCFG_TXD_DUMP BIT14 // Clear Tx Data FIFO
|
|
||||||
#define TXCFG_TXS_DUMP BIT15 // Clear Tx Status FIFO
|
|
||||||
|
|
||||||
// Rx FIFO Information Register bits
|
|
||||||
#define RXFIFOINF_RXDUSED_MASK (0xFFFF) // Rx Data FIFO Used Space
|
|
||||||
#define RXFIFOINF_RXSUSED_MASK (0xFF0000) // Rx Status FIFO Used Space
|
|
||||||
|
|
||||||
// Tx FIFO Information Register bits
|
|
||||||
#define TXFIFOINF_TDFREE_MASK (0xFFFF) // Tx Data FIFO Free Space
|
|
||||||
#define TXFIFOINF_TXSUSED_MASK (0xFF0000) // Tx Status FIFO Used Space
|
|
||||||
|
|
||||||
// E2P Register
|
|
||||||
#define E2P_EPC_BUSY BIT31
|
|
||||||
#define E2P_EPC_CMD_READ (0)
|
|
||||||
#define E2P_EPC_TIMEOUT BIT9
|
|
||||||
#define E2P_EPC_MAC_ADDRESS_LOADED BIT8
|
|
||||||
#define E2P_EPC_ADDRESS(address) ((address) & 0xFFFF)
|
|
||||||
|
|
||||||
// GPIO Configuration register
|
|
||||||
#define GPIO_GPIO0_PUSH_PULL BIT16
|
|
||||||
#define GPIO_GPIO1_PUSH_PULL BIT17
|
|
||||||
#define GPIO_GPIO2_PUSH_PULL BIT18
|
|
||||||
#define GPIO_LED1_ENABLE BIT28
|
|
||||||
#define GPIO_LED2_ENABLE BIT29
|
|
||||||
#define GPIO_LED3_ENABLE BIT30
|
|
||||||
|
|
||||||
// MII_ACC bits
|
|
||||||
#define MII_ACC_MII_BUSY BIT0
|
|
||||||
#define MII_ACC_MII_WRITE BIT1
|
|
||||||
#define MII_ACC_MII_READ 0
|
|
||||||
|
|
||||||
#define MII_ACC_PHY_VALUE BIT11
|
|
||||||
#define MII_ACC_MII_REG_INDEX(index) (((index) & 0x1F) << 6)
|
|
||||||
|
|
||||||
//
|
|
||||||
// PHY Control Indexes
|
|
||||||
//
|
|
||||||
#define PHY_INDEX_BASIC_CTRL 0
|
|
||||||
#define PHY_INDEX_BASIC_STATUS 1
|
|
||||||
#define PHY_INDEX_ID1 2
|
|
||||||
#define PHY_INDEX_ID2 3
|
|
||||||
#define PHY_INDEX_AUTO_NEG_ADVERT 4
|
|
||||||
#define PHY_INDEX_AUTO_NEG_LINK_ABILITY 5
|
|
||||||
#define PHY_INDEX_AUTO_NEG_EXP 6
|
|
||||||
#define PHY_INDEX_MODE 17
|
|
||||||
#define PHY_INDEX_SPECIAL_MODES 18
|
|
||||||
#define PHY_INDEX_SPECIAL_CTLR 27
|
|
||||||
#define PHY_INDEX_INT_SRC 29
|
|
||||||
#define PHY_INDEX_INT_MASK 30
|
|
||||||
#define PHY_INDEX_SPECIAL_PHY_CTLR 31
|
|
||||||
|
|
||||||
// Indirect MAC Indexes
|
|
||||||
#define INDIRECT_MAC_INDEX_CR 1
|
|
||||||
#define INDIRECT_MAC_INDEX_ADDRH 2
|
|
||||||
#define INDIRECT_MAC_INDEX_ADDRL 3
|
|
||||||
#define INDIRECT_MAC_INDEX_HASHH 4
|
|
||||||
#define INDIRECT_MAC_INDEX_HASHL 5
|
|
||||||
#define INDIRECT_MAC_INDEX_MII_ACC 6
|
|
||||||
#define INDIRECT_MAC_INDEX_MII_DATA 7
|
|
||||||
|
|
||||||
//
|
|
||||||
// MAC CSR Synchronizer Command register
|
|
||||||
//
|
|
||||||
#define MAC_CSR_BUSY BIT31
|
|
||||||
#define MAC_CSR_READ BIT30
|
|
||||||
#define MAC_CSR_WRITE 0
|
|
||||||
#define MAC_CSR_ADDR(Addr) ((Addr) & 0xFF)
|
|
||||||
|
|
||||||
//
|
|
||||||
// TX Packet Format
|
|
||||||
//
|
|
||||||
#define TX_CMD_A_COMPLETION_INT BIT31
|
|
||||||
#define TX_CMD_A_FIRST_SEGMENT BIT13
|
|
||||||
#define TX_CMD_A_LAST_SEGMENT BIT12
|
|
||||||
#define TX_CMD_A_BUFF_SIZE(size) ((size) & 0x000003FF)
|
|
||||||
#define TX_CMD_A_DATA_START_OFFSET(offset) (((offset) & 0x1F) << 16)
|
|
||||||
#define TX_CMD_B_PACKET_LENGTH(size) ((size) & 0x000003FF)
|
|
||||||
#define TX_CMD_B_PACKET_TAG(tag) (((tag) & 0x3FF) << 16)
|
|
||||||
|
|
||||||
// Hardware Configuration Register
|
|
||||||
#define HW_CFG_TX_FIFO_SIZE_MASK (0xF << 16)
|
|
||||||
#define HW_CFG_TX_FIFO_SIZE(size) (((size) & 0xF) << 16)
|
|
||||||
|
|
||||||
// EEPROM Definition
|
|
||||||
#define EEPROM_EXTERNAL_SERIAL_EEPROM 0xA5
|
|
||||||
|
|
||||||
//
|
|
||||||
// Conditional compilation flags
|
|
||||||
//
|
|
||||||
//#define EVAL_PERFORMANCE
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* __LAN9118_DXE_HDR_H__ */
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,276 +0,0 @@
|
||||||
/** @file
|
|
||||||
*
|
|
||||||
* Copyright (c) 2012-2014, ARM Limited. All rights reserved.
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
||||||
*
|
|
||||||
**/
|
|
||||||
|
|
||||||
#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__
|
|
|
@ -133,14 +133,6 @@
|
||||||
gEmbeddedTokenSpaceGuid.PcdGdbMaxPacketRetryCount|10000000|UINT32|0x0000004c
|
gEmbeddedTokenSpaceGuid.PcdGdbMaxPacketRetryCount|10000000|UINT32|0x0000004c
|
||||||
gEmbeddedTokenSpaceGuid.PcdGdbTimerPeriodMilliseconds|250|UINT32|0x0000004d
|
gEmbeddedTokenSpaceGuid.PcdGdbTimerPeriodMilliseconds|250|UINT32|0x0000004d
|
||||||
|
|
||||||
# LAN9118 Ethernet Driver PCDs
|
|
||||||
gEmbeddedTokenSpaceGuid.PcdLan9118DxeBaseAddress|0x0|UINT32|0x00000025
|
|
||||||
gEmbeddedTokenSpaceGuid.PcdLan9118DefaultMacAddress|0x0|UINT64|0x00000026
|
|
||||||
gEmbeddedTokenSpaceGuid.PcdLan9118DefaultNegotiationTimeout|4000|UINT32|0x00000027
|
|
||||||
# The default feature mask below disables full duplex negotiation, since full
|
|
||||||
# duplex operation is suspected to be broken in the driver.
|
|
||||||
gEmbeddedTokenSpaceGuid.PcdLan9118NegotiationFeatureMask|0xFFFFFEBF|UINT32|0x00000028
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Android FastBoot
|
# Android FastBoot
|
||||||
#
|
#
|
||||||
|
|
Loading…
Reference in New Issue