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