310 lines
5.7 KiB
C
310 lines
5.7 KiB
C
/**
|
|
* @file e1000_reg.h
|
|
*
|
|
* @brief Hardware specific registers and flags of the Intel
|
|
* Pro/1000 Gigabit Ethernet card(s).
|
|
*
|
|
* Parts of this code is based on the DragonflyBSD (FreeBSD)
|
|
* implementation, and the fxp driver for Minix 3.
|
|
*
|
|
* @see http://svn.freebsd.org/viewvc/base/head/sys/dev/e1000/
|
|
* @see fxp.c
|
|
*
|
|
* @author Niek Linnenbank <nieklinnenbank@gmail.com>
|
|
* @date September 2009
|
|
*
|
|
*/
|
|
|
|
#ifndef __E1000_REG_H
|
|
#define __E1000_REG_H
|
|
|
|
/**
|
|
* @name Controller Registers.
|
|
* @{
|
|
*/
|
|
|
|
/** Device Control. */
|
|
#define E1000_REG_CTRL 0x00000
|
|
|
|
/** Device Status. */
|
|
#define E1000_REG_STATUS 0x00008
|
|
|
|
/** EEPROM Read. */
|
|
#define E1000_REG_EERD 0x00014
|
|
|
|
/** Flow Control Address Low. */
|
|
#define E1000_REG_FCAL 0x00028
|
|
|
|
/** Flow Control Address High. */
|
|
#define E1000_REG_FCAH 0x0002c
|
|
|
|
/** Flow Control Type. */
|
|
#define E1000_REG_FCT 0x00030
|
|
|
|
/** Interrupt Cause Read. */
|
|
#define E1000_REG_ICR 0x000c0
|
|
|
|
/** Interrupt Mask Set/Read Register. */
|
|
#define E1000_REG_IMS 0x000d0
|
|
|
|
/** Receive Control Register. */
|
|
#define E1000_REG_RCTL 0x00100
|
|
|
|
/** Transmit Control Register. */
|
|
#define E1000_REG_TCTL 0x00400
|
|
|
|
/** Flow Control Transmit Timer Value. */
|
|
#define E1000_REG_FCTTV 0x00170
|
|
|
|
/** Receive Descriptor Base Address Low. */
|
|
#define E1000_REG_RDBAL 0x02800
|
|
|
|
/** Receive Descriptor Base Address High. */
|
|
#define E1000_REG_RDBAH 0x02804
|
|
|
|
/** Receive Descriptor Length. */
|
|
#define E1000_REG_RDLEN 0x02808
|
|
|
|
/** Receive Descriptor Head. */
|
|
#define E1000_REG_RDH 0x02810
|
|
|
|
/** Receive Descriptor Tail. */
|
|
#define E1000_REG_RDT 0x02818
|
|
|
|
/** Transmit Descriptor Base Address Low. */
|
|
#define E1000_REG_TDBAL 0x03800
|
|
|
|
/** Transmit Descriptor Base Address High. */
|
|
#define E1000_REG_TDBAH 0x03804
|
|
|
|
/** Transmit Descriptor Length. */
|
|
#define E1000_REG_TDLEN 0x03808
|
|
|
|
/** Transmit Descriptor Head. */
|
|
#define E1000_REG_TDH 0x03810
|
|
|
|
/** Transmit Descriptor Tail. */
|
|
#define E1000_REG_TDT 0x03818
|
|
|
|
/** CRC Error Count. */
|
|
#define E1000_REG_CRCERRS 0x04000
|
|
|
|
/** RX Error Count. */
|
|
#define E1000_REG_RXERRC 0x0400c
|
|
|
|
/** Missed Packets Count. */
|
|
#define E1000_REG_MPC 0x04010
|
|
|
|
/** Collision Count. */
|
|
#define E1000_REG_COLC 0x04028
|
|
|
|
/** Total Packets Received. */
|
|
#define E1000_REG_TPR 0x040D0
|
|
|
|
/** Total Packets Transmitted. */
|
|
#define E1000_REG_TPT 0x040D4
|
|
|
|
/** Receive Address Low. */
|
|
#define E1000_REG_RAL 0x05400
|
|
|
|
/** Receive Address High. */
|
|
#define E1000_REG_RAH 0x05404
|
|
|
|
/** Multicast Table Array. */
|
|
#define E1000_REG_MTA 0x05200
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @name Control Register Bits.
|
|
* @{
|
|
*/
|
|
|
|
/** Auto-Speed Detection Enable. */
|
|
#define E1000_REG_CTRL_ASDE (1 << 5)
|
|
|
|
/** Link Reset. */
|
|
#define E1000_REG_CTRL_LRST (1 << 3)
|
|
|
|
/** Set Link Up. */
|
|
#define E1000_REG_CTRL_SLU (1 << 6)
|
|
|
|
/** Invert Los Of Signal. */
|
|
#define E1000_REG_CTRL_ILOS (1 << 7)
|
|
|
|
/** Device Reset. */
|
|
#define E1000_REG_CTRL_RST (1 << 26)
|
|
|
|
/** VLAN Mode Enable. */
|
|
#define E1000_REG_CTRL_VME (1 << 30)
|
|
|
|
/** PHY Reset. */
|
|
#define E1000_REG_CTRL_PHY_RST (1 << 31)
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @name Status Register Bits.
|
|
* @{
|
|
*/
|
|
|
|
/** Link Full Duplex Configuration Indication. */
|
|
#define E1000_REG_STATUS_FD (1 << 0)
|
|
|
|
/** Link Up Indication. */
|
|
#define E1000_REG_STATUS_LU (1 << 1)
|
|
|
|
/** Transmission Paused. */
|
|
#define E1000_REG_STATUS_TXOFF (1 << 4)
|
|
|
|
/** Link Speed Setting. */
|
|
#define E1000_REG_STATUS_SPEED ((1 << 6) | (1 << 7))
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @name EEPROM Read Register Bits.
|
|
* @{
|
|
*/
|
|
|
|
/** Start Read. */
|
|
#define E1000_REG_EERD_START (1 << 0)
|
|
|
|
/** Read Done. */
|
|
#define E1000_REG_EERD_DONE (1 << 4)
|
|
|
|
/** Read Address Bit Mask. */
|
|
#define E1000_REG_EERD_ADDR (0xff << 8)
|
|
|
|
/** Read Data Bit Mask. */
|
|
#define E1000_REG_EERD_DATA (0xffff << 16)
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @name Interrupt Cause Read.
|
|
* @{
|
|
*/
|
|
|
|
/** Transmit Descripts Written Back. */
|
|
#define E1000_REG_ICR_TXDW (1 << 0)
|
|
|
|
/** Transmit Queue Empty. */
|
|
#define E1000_REG_ICR_TXQE (1 << 1)
|
|
|
|
/** Link Status Change. */
|
|
#define E1000_REG_ICR_LSC (1 << 2)
|
|
|
|
/** Receiver Overrun. */
|
|
#define E1000_REG_ICR_RXO (1 << 6)
|
|
|
|
/** Receiver Timer Interrupt. */
|
|
#define E1000_REG_ICR_RXT (1 << 7)
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @name Interrupt Mask Set/Read Register Bits.
|
|
* @{
|
|
*/
|
|
|
|
/** Transmit Descripts Written Back. */
|
|
#define E1000_REG_IMS_TXDW (1 << 0)
|
|
|
|
/** Transmit Queue Empty. */
|
|
#define E1000_REG_IMS_TXQE (1 << 1)
|
|
|
|
/** Link Status Change. */
|
|
#define E1000_REG_IMS_LSC (1 << 2)
|
|
|
|
/** Receiver FIFO Overrun. */
|
|
#define E1000_REG_IMS_RXO (1 << 6)
|
|
|
|
/** Receiver Timer Interrupt. */
|
|
#define E1000_REG_IMS_RXT (1 << 7)
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @name Receive Control Register Bits.
|
|
* @{
|
|
*/
|
|
|
|
/** Receive Enable. */
|
|
#define E1000_REG_RCTL_EN (1 << 1)
|
|
|
|
/** Multicast Promiscious Enable. */
|
|
#define E1000_REG_RCTL_MPE (1 << 4)
|
|
|
|
/** Broadcast Accept Mode. */
|
|
#define E1000_REG_RCTL_BAM (1 << 15)
|
|
|
|
/** Receive Buffer Size. */
|
|
#define E1000_REG_RCTL_BSIZE ((1 << 16) | (1 << 17))
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @name Transmit Control Register Bits.
|
|
* @{
|
|
*/
|
|
|
|
/** Transmit Enable. */
|
|
#define E1000_REG_TCTL_EN (1 << 1)
|
|
|
|
/** Pad Short Packets. */
|
|
#define E1000_REG_TCTL_PSP (1 << 3)
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @name Receive Address High Register Bits.
|
|
* @{
|
|
*/
|
|
|
|
/** Receive Address Valid. */
|
|
#define E1000_REG_RAH_AV (1 << 31)
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @name ICH Flash Registers.
|
|
* @see http://gitweb.dragonflybsd.org
|
|
* @{
|
|
*/
|
|
|
|
#define ICH_FLASH_GFPREG 0x0000
|
|
#define ICH_FLASH_HSFSTS 0x0004
|
|
#define ICH_FLASH_HSFCTL 0x0006
|
|
#define ICH_FLASH_FADDR 0x0008
|
|
#define ICH_FLASH_FDATA0 0x0010
|
|
#define FLASH_GFPREG_BASE_MASK 0x1FFF
|
|
#define FLASH_SECTOR_ADDR_SHIFT 12
|
|
#define ICH_FLASH_READ_COMMAND_TIMEOUT 500
|
|
#define ICH_FLASH_LINEAR_ADDR_MASK 0x00FFFFFF
|
|
#define ICH_CYCLE_READ 0
|
|
#define ICH_FLASH_CYCLE_REPEAT_COUNT 10
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#endif /* __E1000_REG_H */
|