mirror of
https://github.com/ipxe/ipxe
synced 2025-12-31 06:49:20 +03:00
On devices with no EEPROM or OTP, the MAC_CR register defaults to not using automatic link speed detection, with the result that no packets are successfully sent or received. Fix by always enabling automatic speed and duplex detection, since iPXE provides no mechanism for manual configuration of either link speed or duplex. Signed-off-by: Michael Brown <mcb30@ipxe.org>
104 lines
3.2 KiB
C
104 lines
3.2 KiB
C
#ifndef _LAN78XX_H
|
|
#define _LAN78XX_H
|
|
|
|
/** @file
|
|
*
|
|
* Microchip LAN78xx USB Ethernet driver
|
|
*
|
|
*/
|
|
|
|
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
|
|
|
#include "smscusb.h"
|
|
#include "smsc75xx.h"
|
|
|
|
/** Hardware configuration register */
|
|
#define LAN78XX_HW_CFG 0x0010
|
|
#define LAN78XX_HW_CFG_LED1_EN 0x00200000UL /**< LED1 enable */
|
|
#define LAN78XX_HW_CFG_LED0_EN 0x00100000UL /**< LED1 enable */
|
|
#define LAN78XX_HW_CFG_LRST 0x00000002UL /**< Soft lite reset */
|
|
|
|
/** Interrupt endpoint control register */
|
|
#define LAN78XX_INT_EP_CTL 0x0098
|
|
#define LAN78XX_INT_EP_CTL_RDFO_EN 0x00400000UL /**< RX FIFO overflow */
|
|
#define LAN78XX_INT_EP_CTL_PHY_EN 0x00020000UL /**< PHY interrupt */
|
|
|
|
/** Bulk IN delay register */
|
|
#define LAN78XX_BULK_IN_DLY 0x0094
|
|
#define LAN78XX_BULK_IN_DLY_SET(ticks) ( (ticks) << 0 ) /**< Delay / 16.7ns */
|
|
|
|
/** EEPROM register base */
|
|
#define LAN78XX_E2P_BASE 0x0040
|
|
|
|
/** USB configuration register 0 */
|
|
#define LAN78XX_USB_CFG0 0x0080
|
|
#define LAN78XX_USB_CFG0_BIR 0x00000040UL /**< Bulk IN use NAK */
|
|
|
|
/** Receive filtering engine control register */
|
|
#define LAN78XX_RFE_CTL 0x00b0
|
|
#define LAN78XX_RFE_CTL_AB 0x00000400UL /**< Accept broadcast */
|
|
#define LAN78XX_RFE_CTL_AM 0x00000200UL /**< Accept multicast */
|
|
#define LAN78XX_RFE_CTL_AU 0x00000100UL /**< Accept unicast */
|
|
|
|
/** FIFO controller RX FIFO control register */
|
|
#define LAN78XX_FCT_RX_CTL 0x00c0
|
|
#define LAN78XX_FCT_RX_CTL_EN 0x80000000UL /**< FCT RX enable */
|
|
#define LAN78XX_FCT_RX_CTL_BAD 0x02000000UL /**< Store bad frames */
|
|
|
|
/** FIFO controller TX FIFO control register */
|
|
#define LAN78XX_FCT_TX_CTL 0x00c4
|
|
#define LAN78XX_FCT_TX_CTL_EN 0x80000000UL /**< FCT TX enable */
|
|
|
|
/** MAC control register */
|
|
#define LAN78XX_MAC_CR 0x0100
|
|
#define LAN78XX_MAC_CR_ADP 0x00002000UL /**< Duplex polarity */
|
|
#define LAN78XX_MAC_CR_ADD 0x00001000UL /**< Auto duplex */
|
|
#define LAN78XX_MAC_CR_ASD 0x00000800UL /**< Auto speed */
|
|
|
|
/** MAC receive register */
|
|
#define LAN78XX_MAC_RX 0x0104
|
|
#define LAN78XX_MAC_RX_MAX_SIZE(mtu) ( (mtu) << 16 ) /**< Max frame size */
|
|
#define LAN78XX_MAC_RX_MAX_SIZE_DEFAULT \
|
|
LAN78XX_MAC_RX_MAX_SIZE ( ETH_FRAME_LEN + 4 /* VLAN */ + 4 /* CRC */ )
|
|
#define LAN78XX_MAC_RX_FCS 0x00000010UL /**< FCS stripping */
|
|
#define LAN78XX_MAC_RX_EN 0x00000001UL /**< RX enable */
|
|
|
|
/** MAC transmit register */
|
|
#define LAN78XX_MAC_TX 0x0108
|
|
#define LAN78XX_MAC_TX_EN 0x00000001UL /**< TX enable */
|
|
|
|
/** MAC receive address register base */
|
|
#define LAN78XX_RX_ADDR_BASE 0x0118
|
|
|
|
/** MII register base */
|
|
#define LAN78XX_MII_BASE 0x0120
|
|
|
|
/** PHY interrupt mask MII register */
|
|
#define LAN78XX_MII_PHY_INTR_MASK 25
|
|
|
|
/** PHY interrupt source MII register */
|
|
#define LAN78XX_MII_PHY_INTR_SOURCE 26
|
|
|
|
/** PHY interrupt: global enable */
|
|
#define LAN78XX_PHY_INTR_ENABLE 0x8000
|
|
|
|
/** PHY interrupt: link state change */
|
|
#define LAN78XX_PHY_INTR_LINK 0x2000
|
|
|
|
/** PHY interrupt: auto-negotiation failure */
|
|
#define LAN78XX_PHY_INTR_ANEG_ERR 0x0800
|
|
|
|
/** PHY interrupt: auto-negotiation complete */
|
|
#define LAN78XX_PHY_INTR_ANEG_DONE 0x0400
|
|
|
|
/** MAC address perfect filter register base */
|
|
#define LAN78XX_ADDR_FILT_BASE 0x0400
|
|
|
|
/** OTP register base */
|
|
#define LAN78XX_OTP_BASE 0x1000
|
|
|
|
/** Maximum time to wait for reset (in milliseconds) */
|
|
#define LAN78XX_RESET_MAX_WAIT_MS 100
|
|
|
|
#endif /* _LAN78XX_H */
|