Annotation of qemu/roms/ipxe/src/drivers/net/atl1e.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright(c) 2007 Atheros Corporation. All rights reserved.
                      3:  * Copyright(c) 2007 xiong huang <[email protected]>
                      4:  *
                      5:  * Derived from Intel e1000 driver
                      6:  * Copyright(c) 1999 - 2005 Intel Corporation. All rights reserved.
                      7:  *
                      8:  * Modified for iPXE, October 2009 by Joshua Oreman <[email protected]>
                      9:  *
                     10:  * This program is free software; you can redistribute it and/or modify it
                     11:  * under the terms of the GNU General Public License as published by the Free
                     12:  * Software Foundation; either version 2 of the License, or (at your option)
                     13:  * any later version.
                     14:  *
                     15:  * This program is distributed in the hope that it will be useful, but WITHOUT
                     16:  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
                     17:  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
                     18:  * more details.
                     19:  *
                     20:  * You should have received a copy of the GNU General Public License along with
                     21:  * this program; if not, write to the Free Software Foundation, Inc., 59
                     22:  * Temple Place - Suite 330, Boston, MA  02111-1307, USA.
                     23:  */
                     24: 
                     25: FILE_LICENCE ( GPL2_OR_LATER );
                     26: 
                     27: #ifndef _ATL1E_H_
                     28: #define _ATL1E_H_
                     29: 
                     30: #include <mii.h>
                     31: #include <stdlib.h>
                     32: #include <string.h>
                     33: #include <unistd.h>
                     34: #include <byteswap.h>
                     35: #include <errno.h>
                     36: #include <ipxe/malloc.h>
                     37: #include <ipxe/pci.h>
                     38: #include <ipxe/pci_io.h>
                     39: #include <ipxe/iobuf.h>
                     40: #include <ipxe/netdevice.h>
                     41: #include <ipxe/ethernet.h>
                     42: #include <ipxe/if_ether.h>
                     43: #include <ipxe/io.h>
                     44: 
                     45: #define ETH_FCS_LEN    4
                     46: #define VLAN_HLEN      4
                     47: #define NET_IP_ALIGN   2
                     48: 
                     49: #define SPEED_0                   0xffff
                     50: #define SPEED_10          10
                     51: #define SPEED_100         100
                     52: #define SPEED_1000        1000
                     53: #define HALF_DUPLEX        1
                     54: #define FULL_DUPLEX        2
                     55: 
                     56: /* Error Codes */
                     57: #define AT_ERR_EEPROM      1
                     58: #define AT_ERR_PHY         2
                     59: #define AT_ERR_CONFIG      3
                     60: #define AT_ERR_PARAM       4
                     61: #define AT_ERR_MAC_TYPE    5
                     62: #define AT_ERR_PHY_TYPE    6
                     63: #define AT_ERR_PHY_SPEED   7
                     64: #define AT_ERR_PHY_RES     8
                     65: #define AT_ERR_TIMEOUT     9
                     66: 
                     67: #define AT_MAX_RECEIVE_QUEUE    4
                     68: #define AT_PAGE_NUM_PER_QUEUE   2
                     69: 
                     70: #define AT_TWSI_EEPROM_TIMEOUT         100
                     71: #define AT_HW_MAX_IDLE_DELAY   10
                     72: 
                     73: #define AT_REGS_LEN    75
                     74: #define AT_EEPROM_LEN  512
                     75: 
                     76: /* tpd word 2 */
                     77: #define TPD_BUFLEN_MASK        0x3FFF
                     78: #define TPD_BUFLEN_SHIFT        0
                     79: 
                     80: /* tpd word 3 bits 0:4 */
                     81: #define TPD_EOP_MASK            0x0001
                     82: #define TPD_EOP_SHIFT           0
                     83: 
                     84: struct atl1e_tpd_desc {
                     85:        u64 buffer_addr;
                     86:        u32 word2;
                     87:        u32 word3;
                     88: };
                     89: 
                     90: #define MAX_TX_BUF_LEN      0x2000
                     91: #define MAX_TX_BUF_SHIFT    13
                     92: 
                     93: /* rrs word 1 bit 0:31 */
                     94: #define RRS_RX_CSUM_MASK       0xFFFF
                     95: #define RRS_RX_CSUM_SHIFT      0
                     96: #define RRS_PKT_SIZE_MASK      0x3FFF
                     97: #define RRS_PKT_SIZE_SHIFT     16
                     98: #define RRS_CPU_NUM_MASK       0x0003
                     99: #define        RRS_CPU_NUM_SHIFT       30
                    100: 
                    101: #define        RRS_IS_RSS_IPV4         0x0001
                    102: #define RRS_IS_RSS_IPV4_TCP    0x0002
                    103: #define RRS_IS_RSS_IPV6                0x0004
                    104: #define RRS_IS_RSS_IPV6_TCP    0x0008
                    105: #define RRS_IS_IPV6            0x0010
                    106: #define RRS_IS_IP_FRAG         0x0020
                    107: #define RRS_IS_IP_DF           0x0040
                    108: #define RRS_IS_802_3           0x0080
                    109: #define RRS_IS_VLAN_TAG                0x0100
                    110: #define RRS_IS_ERR_FRAME       0x0200
                    111: #define RRS_IS_IPV4            0x0400
                    112: #define RRS_IS_UDP             0x0800
                    113: #define RRS_IS_TCP             0x1000
                    114: #define RRS_IS_BCAST           0x2000
                    115: #define RRS_IS_MCAST           0x4000
                    116: #define RRS_IS_PAUSE           0x8000
                    117: 
                    118: #define RRS_ERR_BAD_CRC                0x0001
                    119: #define RRS_ERR_CODE           0x0002
                    120: #define RRS_ERR_DRIBBLE                0x0004
                    121: #define RRS_ERR_RUNT           0x0008
                    122: #define RRS_ERR_RX_OVERFLOW    0x0010
                    123: #define RRS_ERR_TRUNC          0x0020
                    124: #define RRS_ERR_IP_CSUM                0x0040
                    125: #define RRS_ERR_L4_CSUM                0x0080
                    126: #define RRS_ERR_LENGTH         0x0100
                    127: #define RRS_ERR_DES_ADDR       0x0200
                    128: 
                    129: struct atl1e_recv_ret_status {
                    130:        u16 seq_num;
                    131:        u16 hash_lo;
                    132:        u32 word1;
                    133:        u16 pkt_flag;
                    134:        u16 err_flag;
                    135:        u16 hash_hi;
                    136:        u16 vtag;
                    137: };
                    138: 
                    139: enum atl1e_dma_req_block {
                    140:        atl1e_dma_req_128 = 0,
                    141:        atl1e_dma_req_256 = 1,
                    142:        atl1e_dma_req_512 = 2,
                    143:        atl1e_dma_req_1024 = 3,
                    144:        atl1e_dma_req_2048 = 4,
                    145:        atl1e_dma_req_4096 = 5
                    146: };
                    147: 
                    148: enum atl1e_nic_type {
                    149:        athr_l1e = 0,
                    150:        athr_l2e_revA = 1,
                    151:        athr_l2e_revB = 2
                    152: };
                    153: 
                    154: struct atl1e_hw {
                    155:        u8 *hw_addr;            /* inner register address */
                    156:        struct atl1e_adapter *adapter;
                    157:        enum atl1e_nic_type  nic_type;
                    158:        u8 mac_addr[ETH_ALEN];
                    159:        u8 perm_mac_addr[ETH_ALEN];
                    160: 
                    161:        u16 mii_autoneg_adv_reg;
                    162:        u16 mii_1000t_ctrl_reg;
                    163: 
                    164:        enum atl1e_dma_req_block dmar_block;
                    165:        enum atl1e_dma_req_block dmaw_block;
                    166: 
                    167:        int phy_configured;
                    168:        int re_autoneg;
                    169:        int emi_ca;
                    170: };
                    171: 
                    172: /*
                    173:  * wrapper around a pointer to a socket buffer,
                    174:  * so a DMA handle can be stored along with the buffer
                    175:  */
                    176: struct atl1e_tx_buffer {
                    177:        struct io_buffer *iob;
                    178:        u16 length;
                    179:        u32 dma;
                    180: };
                    181: 
                    182: struct atl1e_rx_page {
                    183:        u32             dma;    /* receive rage DMA address */
                    184:        u8              *addr;   /* receive rage virtual address */
                    185:        u32             write_offset_dma;  /* the DMA address which contain the
                    186:                                              receive data offset in the page */
                    187:        u32             *write_offset_addr; /* the virtaul address which contain
                    188:                                             the receive data offset in the page */
                    189:        u32             read_offset;       /* the offset where we have read */
                    190: };
                    191: 
                    192: struct atl1e_rx_page_desc {
                    193:        struct atl1e_rx_page   rx_page[AT_PAGE_NUM_PER_QUEUE];
                    194:        u8  rx_using;
                    195:        u16 rx_nxseq;
                    196: };
                    197: 
                    198: /* transmit packet descriptor (tpd) ring */
                    199: struct atl1e_tx_ring {
                    200:        struct atl1e_tpd_desc *desc;  /* descriptor ring virtual address  */
                    201:        u32                dma;    /* descriptor ring physical address */
                    202:        u16                count;  /* the count of transmit rings  */
                    203:        u16                next_to_use;
                    204:        u16                next_to_clean;
                    205:        struct atl1e_tx_buffer *tx_buffer;
                    206:        u32                cmb_dma;
                    207:        u32                *cmb;
                    208: };
                    209: 
                    210: /* receive packet descriptor ring */
                    211: struct atl1e_rx_ring {
                    212:        void            *desc;
                    213:        u32             dma;
                    214:        int             size;
                    215:        u32             page_size; /* bytes length of rxf page */
                    216:        u32             real_page_size; /* real_page_size = page_size + jumbo + aliagn */
                    217:        struct atl1e_rx_page_desc rx_page_desc;
                    218: };
                    219: 
                    220: /* board specific private data structure */
                    221: struct atl1e_adapter {
                    222:        struct net_device   *netdev;
                    223:        struct pci_device   *pdev;
                    224:        struct mii_if_info  mii;    /* MII interface info */
                    225:        struct atl1e_hw        hw;
                    226: 
                    227:        u16 link_speed;
                    228:        u16 link_duplex;
                    229: 
                    230:        /* All Descriptor memory */
                    231:        u32             ring_dma;
                    232:        void            *ring_vir_addr;
                    233:        u32             ring_size;
                    234: 
                    235:        struct atl1e_tx_ring tx_ring;
                    236:        struct atl1e_rx_ring rx_ring;
                    237: 
                    238:        int bd_number;     /* board number;*/
                    239: };
                    240: 
                    241: #define AT_WRITE_REG(a, reg, value) \
                    242:                writel((value), ((a)->hw_addr + reg))
                    243: 
                    244: #define AT_WRITE_FLUSH(a) \
                    245:                readl((a)->hw_addr)
                    246: 
                    247: #define AT_READ_REG(a, reg) \
                    248:                readl((a)->hw_addr + reg)
                    249: 
                    250: #define AT_WRITE_REGB(a, reg, value) \
                    251:                writeb((value), ((a)->hw_addr + reg))
                    252: 
                    253: #define AT_READ_REGB(a, reg) \
                    254:                readb((a)->hw_addr + reg)
                    255: 
                    256: #define AT_WRITE_REGW(a, reg, value) \
                    257:                writew((value), ((a)->hw_addr + reg))
                    258: 
                    259: #define AT_READ_REGW(a, reg) \
                    260:                readw((a)->hw_addr + reg)
                    261: 
                    262: #define AT_WRITE_REG_ARRAY(a, reg, offset, value) \
                    263:                writel((value), (((a)->hw_addr + reg) + ((offset) << 2)))
                    264: 
                    265: #define AT_READ_REG_ARRAY(a, reg, offset) \
                    266:                readl(((a)->hw_addr + reg) + ((offset) << 2))
                    267: 
                    268: extern int atl1e_up(struct atl1e_adapter *adapter);
                    269: extern void atl1e_down(struct atl1e_adapter *adapter);
                    270: extern s32 atl1e_reset_hw(struct atl1e_hw *hw);
                    271: 
                    272: /********** Hardware-level functionality: **********/
                    273: 
                    274: /* function prototype */
                    275: s32 atl1e_reset_hw(struct atl1e_hw *hw);
                    276: s32 atl1e_read_mac_addr(struct atl1e_hw *hw);
                    277: s32 atl1e_init_hw(struct atl1e_hw *hw);
                    278: s32 atl1e_phy_commit(struct atl1e_hw *hw);
                    279: s32 atl1e_get_speed_and_duplex(struct atl1e_hw *hw, u16 *speed, u16 *duplex);
                    280: u32 atl1e_auto_get_fc(struct atl1e_adapter *adapter, u16 duplex);
                    281: s32 atl1e_read_phy_reg(struct atl1e_hw *hw, u16 reg_addr, u16 *phy_data);
                    282: s32 atl1e_write_phy_reg(struct atl1e_hw *hw, u32 reg_addr, u16 phy_data);
                    283: s32 atl1e_validate_mdi_setting(struct atl1e_hw *hw);
                    284: void atl1e_hw_set_mac_addr(struct atl1e_hw *hw);
                    285: s32 atl1e_phy_enter_power_saving(struct atl1e_hw *hw);
                    286: s32 atl1e_phy_leave_power_saving(struct atl1e_hw *hw);
                    287: s32 atl1e_phy_init(struct atl1e_hw *hw);
                    288: int atl1e_check_eeprom_exist(struct atl1e_hw *hw);
                    289: void atl1e_force_ps(struct atl1e_hw *hw);
                    290: s32 atl1e_restart_autoneg(struct atl1e_hw *hw);
                    291: 
                    292: /* register definition */
                    293: #define REG_PM_CTRLSTAT             0x44
                    294: 
                    295: #define REG_PCIE_CAP_LIST           0x58
                    296: 
                    297: #define REG_DEVICE_CAP              0x5C
                    298: #define     DEVICE_CAP_MAX_PAYLOAD_MASK     0x7
                    299: #define     DEVICE_CAP_MAX_PAYLOAD_SHIFT    0
                    300: 
                    301: #define REG_DEVICE_CTRL             0x60
                    302: #define     DEVICE_CTRL_MAX_PAYLOAD_MASK    0x7
                    303: #define     DEVICE_CTRL_MAX_PAYLOAD_SHIFT   5
                    304: #define     DEVICE_CTRL_MAX_RREQ_SZ_MASK    0x7
                    305: #define     DEVICE_CTRL_MAX_RREQ_SZ_SHIFT   12
                    306: 
                    307: #define REG_VPD_CAP                 0x6C
                    308: #define     VPD_CAP_ID_MASK                 0xff
                    309: #define     VPD_CAP_ID_SHIFT                0
                    310: #define     VPD_CAP_NEXT_PTR_MASK           0xFF
                    311: #define     VPD_CAP_NEXT_PTR_SHIFT          8
                    312: #define     VPD_CAP_VPD_ADDR_MASK           0x7FFF
                    313: #define     VPD_CAP_VPD_ADDR_SHIFT          16
                    314: #define     VPD_CAP_VPD_FLAG                0x80000000
                    315: 
                    316: #define REG_VPD_DATA                0x70
                    317: 
                    318: #define REG_SPI_FLASH_CTRL          0x200
                    319: #define     SPI_FLASH_CTRL_STS_NON_RDY      0x1
                    320: #define     SPI_FLASH_CTRL_STS_WEN          0x2
                    321: #define     SPI_FLASH_CTRL_STS_WPEN         0x80
                    322: #define     SPI_FLASH_CTRL_DEV_STS_MASK     0xFF
                    323: #define     SPI_FLASH_CTRL_DEV_STS_SHIFT    0
                    324: #define     SPI_FLASH_CTRL_INS_MASK         0x7
                    325: #define     SPI_FLASH_CTRL_INS_SHIFT        8
                    326: #define     SPI_FLASH_CTRL_START            0x800
                    327: #define     SPI_FLASH_CTRL_EN_VPD           0x2000
                    328: #define     SPI_FLASH_CTRL_LDSTART          0x8000
                    329: #define     SPI_FLASH_CTRL_CS_HI_MASK       0x3
                    330: #define     SPI_FLASH_CTRL_CS_HI_SHIFT      16
                    331: #define     SPI_FLASH_CTRL_CS_HOLD_MASK     0x3
                    332: #define     SPI_FLASH_CTRL_CS_HOLD_SHIFT    18
                    333: #define     SPI_FLASH_CTRL_CLK_LO_MASK      0x3
                    334: #define     SPI_FLASH_CTRL_CLK_LO_SHIFT     20
                    335: #define     SPI_FLASH_CTRL_CLK_HI_MASK      0x3
                    336: #define     SPI_FLASH_CTRL_CLK_HI_SHIFT     22
                    337: #define     SPI_FLASH_CTRL_CS_SETUP_MASK    0x3
                    338: #define     SPI_FLASH_CTRL_CS_SETUP_SHIFT   24
                    339: #define     SPI_FLASH_CTRL_EROM_PGSZ_MASK   0x3
                    340: #define     SPI_FLASH_CTRL_EROM_PGSZ_SHIFT  26
                    341: #define     SPI_FLASH_CTRL_WAIT_READY       0x10000000
                    342: 
                    343: #define REG_SPI_ADDR                0x204
                    344: 
                    345: #define REG_SPI_DATA                0x208
                    346: 
                    347: #define REG_SPI_FLASH_CONFIG        0x20C
                    348: #define     SPI_FLASH_CONFIG_LD_ADDR_MASK   0xFFFFFF
                    349: #define     SPI_FLASH_CONFIG_LD_ADDR_SHIFT  0
                    350: #define     SPI_FLASH_CONFIG_VPD_ADDR_MASK  0x3
                    351: #define     SPI_FLASH_CONFIG_VPD_ADDR_SHIFT 24
                    352: #define     SPI_FLASH_CONFIG_LD_EXIST       0x4000000
                    353: 
                    354: 
                    355: #define REG_SPI_FLASH_OP_PROGRAM    0x210
                    356: #define REG_SPI_FLASH_OP_SC_ERASE   0x211
                    357: #define REG_SPI_FLASH_OP_CHIP_ERASE 0x212
                    358: #define REG_SPI_FLASH_OP_RDID       0x213
                    359: #define REG_SPI_FLASH_OP_WREN       0x214
                    360: #define REG_SPI_FLASH_OP_RDSR       0x215
                    361: #define REG_SPI_FLASH_OP_WRSR       0x216
                    362: #define REG_SPI_FLASH_OP_READ       0x217
                    363: 
                    364: #define REG_TWSI_CTRL               0x218
                    365: #define     TWSI_CTRL_LD_OFFSET_MASK        0xFF
                    366: #define     TWSI_CTRL_LD_OFFSET_SHIFT       0
                    367: #define     TWSI_CTRL_LD_SLV_ADDR_MASK      0x7
                    368: #define     TWSI_CTRL_LD_SLV_ADDR_SHIFT     8
                    369: #define     TWSI_CTRL_SW_LDSTART            0x800
                    370: #define     TWSI_CTRL_HW_LDSTART            0x1000
                    371: #define     TWSI_CTRL_SMB_SLV_ADDR_MASK     0x0x7F
                    372: #define     TWSI_CTRL_SMB_SLV_ADDR_SHIFT    15
                    373: #define     TWSI_CTRL_LD_EXIST              0x400000
                    374: #define     TWSI_CTRL_READ_FREQ_SEL_MASK    0x3
                    375: #define     TWSI_CTRL_READ_FREQ_SEL_SHIFT   23
                    376: #define     TWSI_CTRL_FREQ_SEL_100K         0
                    377: #define     TWSI_CTRL_FREQ_SEL_200K         1
                    378: #define     TWSI_CTRL_FREQ_SEL_300K         2
                    379: #define     TWSI_CTRL_FREQ_SEL_400K         3
                    380: #define     TWSI_CTRL_SMB_SLV_ADDR
                    381: #define     TWSI_CTRL_WRITE_FREQ_SEL_MASK   0x3
                    382: #define     TWSI_CTRL_WRITE_FREQ_SEL_SHIFT  24
                    383: 
                    384: 
                    385: #define REG_PCIE_DEV_MISC_CTRL      0x21C
                    386: #define     PCIE_DEV_MISC_CTRL_EXT_PIPE     0x2
                    387: #define     PCIE_DEV_MISC_CTRL_RETRY_BUFDIS 0x1
                    388: #define     PCIE_DEV_MISC_CTRL_SPIROM_EXIST 0x4
                    389: #define     PCIE_DEV_MISC_CTRL_SERDES_ENDIAN    0x8
                    390: #define     PCIE_DEV_MISC_CTRL_SERDES_SEL_DIN   0x10
                    391: 
                    392: #define REG_PCIE_PHYMISC           0x1000
                    393: #define PCIE_PHYMISC_FORCE_RCV_DET     0x4
                    394: 
                    395: #define REG_LTSSM_TEST_MODE         0x12FC
                    396: #define         LTSSM_TEST_MODE_DEF     0xE000
                    397: 
                    398: /* Selene Master Control Register */
                    399: #define REG_MASTER_CTRL             0x1400
                    400: #define     MASTER_CTRL_SOFT_RST            0x1
                    401: #define     MASTER_CTRL_MTIMER_EN           0x2
                    402: #define     MASTER_CTRL_ITIMER_EN           0x4
                    403: #define     MASTER_CTRL_MANUAL_INT          0x8
                    404: #define     MASTER_CTRL_ITIMER2_EN          0x20
                    405: #define     MASTER_CTRL_INT_RDCLR           0x40
                    406: #define     MASTER_CTRL_LED_MODE           0x200
                    407: #define     MASTER_CTRL_REV_NUM_SHIFT       16
                    408: #define     MASTER_CTRL_REV_NUM_MASK        0xff
                    409: #define     MASTER_CTRL_DEV_ID_SHIFT        24
                    410: #define     MASTER_CTRL_DEV_ID_MASK         0xff
                    411: 
                    412: /* Timer Initial Value Register */
                    413: #define REG_MANUAL_TIMER_INIT       0x1404
                    414: 
                    415: 
                    416: /* IRQ ModeratorTimer Initial Value Register */
                    417: #define REG_IRQ_MODU_TIMER_INIT     0x1408   /* w */
                    418: #define REG_IRQ_MODU_TIMER2_INIT    0x140A   /* w */
                    419: 
                    420: 
                    421: #define REG_GPHY_CTRL               0x140C
                    422: #define     GPHY_CTRL_EXT_RESET         1
                    423: #define     GPHY_CTRL_PIPE_MOD          2
                    424: #define     GPHY_CTRL_TEST_MODE_MASK    3
                    425: #define     GPHY_CTRL_TEST_MODE_SHIFT   2
                    426: #define     GPHY_CTRL_BERT_START        0x10
                    427: #define     GPHY_CTRL_GATE_25M_EN       0x20
                    428: #define     GPHY_CTRL_LPW_EXIT          0x40
                    429: #define     GPHY_CTRL_PHY_IDDQ          0x80
                    430: #define     GPHY_CTRL_PHY_IDDQ_DIS      0x100
                    431: #define     GPHY_CTRL_PCLK_SEL_DIS      0x200
                    432: #define     GPHY_CTRL_HIB_EN            0x400
                    433: #define     GPHY_CTRL_HIB_PULSE         0x800
                    434: #define     GPHY_CTRL_SEL_ANA_RST       0x1000
                    435: #define     GPHY_CTRL_PHY_PLL_ON        0x2000
                    436: #define     GPHY_CTRL_PWDOWN_HW                0x4000
                    437: #define     GPHY_CTRL_DEFAULT (\
                    438:                GPHY_CTRL_PHY_PLL_ON    |\
                    439:                GPHY_CTRL_SEL_ANA_RST   |\
                    440:                GPHY_CTRL_HIB_PULSE     |\
                    441:                GPHY_CTRL_HIB_EN)
                    442: 
                    443: #define     GPHY_CTRL_PW_WOL_DIS (\
                    444:                GPHY_CTRL_PHY_PLL_ON    |\
                    445:                GPHY_CTRL_SEL_ANA_RST   |\
                    446:                GPHY_CTRL_HIB_PULSE     |\
                    447:                GPHY_CTRL_HIB_EN        |\
                    448:                GPHY_CTRL_PWDOWN_HW     |\
                    449:                GPHY_CTRL_PCLK_SEL_DIS  |\
                    450:                GPHY_CTRL_PHY_IDDQ)
                    451: 
                    452: /* IRQ Anti-Lost Timer Initial Value Register */
                    453: #define REG_CMBDISDMA_TIMER         0x140E
                    454: 
                    455: 
                    456: /* Block IDLE Status Register */
                    457: #define REG_IDLE_STATUS        0x1410
                    458: #define     IDLE_STATUS_RXMAC       1    /* 1: RXMAC state machine is in non-IDLE state. 0: RXMAC is idling */
                    459: #define     IDLE_STATUS_TXMAC       2    /* 1: TXMAC state machine is in non-IDLE state. 0: TXMAC is idling */
                    460: #define     IDLE_STATUS_RXQ         4    /* 1: RXQ state machine is in non-IDLE state.   0: RXQ is idling   */
                    461: #define     IDLE_STATUS_TXQ         8    /* 1: TXQ state machine is in non-IDLE state.   0: TXQ is idling   */
                    462: #define     IDLE_STATUS_DMAR        0x10 /* 1: DMAR state machine is in non-IDLE state.  0: DMAR is idling  */
                    463: #define     IDLE_STATUS_DMAW        0x20 /* 1: DMAW state machine is in non-IDLE state.  0: DMAW is idling  */
                    464: #define     IDLE_STATUS_SMB         0x40 /* 1: SMB state machine is in non-IDLE state.   0: SMB is idling   */
                    465: #define     IDLE_STATUS_CMB         0x80 /* 1: CMB state machine is in non-IDLE state.   0: CMB is idling   */
                    466: 
                    467: /* MDIO Control Register */
                    468: #define REG_MDIO_CTRL           0x1414
                    469: #define     MDIO_DATA_MASK          0xffff  /* On MDIO write, the 16-bit control data to write to PHY MII management register */
                    470: #define     MDIO_DATA_SHIFT         0       /* On MDIO read, the 16-bit status data that was read from the PHY MII management register*/
                    471: #define     MDIO_REG_ADDR_MASK      0x1f    /* MDIO register address */
                    472: #define     MDIO_REG_ADDR_SHIFT     16
                    473: #define     MDIO_RW                 0x200000      /* 1: read, 0: write */
                    474: #define     MDIO_SUP_PREAMBLE       0x400000      /* Suppress preamble */
                    475: #define     MDIO_START              0x800000      /* Write 1 to initiate the MDIO master. And this bit is self cleared after one cycle*/
                    476: #define     MDIO_CLK_SEL_SHIFT      24
                    477: #define     MDIO_CLK_25_4           0
                    478: #define     MDIO_CLK_25_6           2
                    479: #define     MDIO_CLK_25_8           3
                    480: #define     MDIO_CLK_25_10          4
                    481: #define     MDIO_CLK_25_14          5
                    482: #define     MDIO_CLK_25_20          6
                    483: #define     MDIO_CLK_25_28          7
                    484: #define     MDIO_BUSY               0x8000000
                    485: #define     MDIO_AP_EN              0x10000000
                    486: #define MDIO_WAIT_TIMES         10
                    487: 
                    488: /* MII PHY Status Register */
                    489: #define REG_PHY_STATUS           0x1418
                    490: #define     PHY_STATUS_100M          0x20000
                    491: #define     PHY_STATUS_EMI_CA        0x40000
                    492: 
                    493: /* BIST Control and Status Register0 (for the Packet Memory) */
                    494: #define REG_BIST0_CTRL              0x141c
                    495: #define     BIST0_NOW                   0x1 /* 1: To trigger BIST0 logic. This bit stays high during the */
                    496: /* BIST process and reset to zero when BIST is done */
                    497: #define     BIST0_SRAM_FAIL             0x2 /* 1: The SRAM failure is un-repairable because it has address */
                    498: /* decoder failure or more than 1 cell stuck-to-x failure */
                    499: #define     BIST0_FUSE_FLAG             0x4 /* 1: Indicating one cell has been fixed */
                    500: 
                    501: /* BIST Control and Status Register1(for the retry buffer of PCI Express) */
                    502: #define REG_BIST1_CTRL              0x1420
                    503: #define     BIST1_NOW                   0x1 /* 1: To trigger BIST0 logic. This bit stays high during the */
                    504: /* BIST process and reset to zero when BIST is done */
                    505: #define     BIST1_SRAM_FAIL             0x2 /* 1: The SRAM failure is un-repairable because it has address */
                    506: /* decoder failure or more than 1 cell stuck-to-x failure.*/
                    507: #define     BIST1_FUSE_FLAG             0x4
                    508: 
                    509: /* SerDes Lock Detect Control and Status Register */
                    510: #define REG_SERDES_LOCK             0x1424
                    511: #define     SERDES_LOCK_DETECT          1  /* 1: SerDes lock detected . This signal comes from Analog SerDes */
                    512: #define     SERDES_LOCK_DETECT_EN       2  /* 1: Enable SerDes Lock detect function */
                    513: 
                    514: /* MAC Control Register  */
                    515: #define REG_MAC_CTRL                0x1480
                    516: #define     MAC_CTRL_TX_EN              1  /* 1: Transmit Enable */
                    517: #define     MAC_CTRL_RX_EN              2  /* 1: Receive Enable */
                    518: #define     MAC_CTRL_TX_FLOW            4  /* 1: Transmit Flow Control Enable */
                    519: #define     MAC_CTRL_RX_FLOW            8  /* 1: Receive Flow Control Enable */
                    520: #define     MAC_CTRL_LOOPBACK           0x10      /* 1: Loop back at G/MII Interface */
                    521: #define     MAC_CTRL_DUPLX              0x20      /* 1: Full-duplex mode  0: Half-duplex mode */
                    522: #define     MAC_CTRL_ADD_CRC            0x40      /* 1: Instruct MAC to attach CRC on all egress Ethernet frames */
                    523: #define     MAC_CTRL_PAD                0x80      /* 1: Instruct MAC to pad short frames to 60-bytes, and then attach CRC. This bit has higher priority over CRC_EN */
                    524: #define     MAC_CTRL_LENCHK             0x100     /* 1: Instruct MAC to check if length field matches the real packet length */
                    525: #define     MAC_CTRL_HUGE_EN            0x200     /* 1: receive Jumbo frame enable */
                    526: #define     MAC_CTRL_PRMLEN_SHIFT       10        /* Preamble length */
                    527: #define     MAC_CTRL_PRMLEN_MASK        0xf
                    528: #define     MAC_CTRL_RMV_VLAN           0x4000    /* 1: to remove VLAN Tag automatically from all receive packets */
                    529: #define     MAC_CTRL_PROMIS_EN          0x8000    /* 1: Promiscuous Mode Enable */
                    530: #define     MAC_CTRL_TX_PAUSE           0x10000   /* 1: transmit test pause */
                    531: #define     MAC_CTRL_SCNT               0x20000   /* 1: shortcut slot time counter */
                    532: #define     MAC_CTRL_SRST_TX            0x40000   /* 1: synchronized reset Transmit MAC module */
                    533: #define     MAC_CTRL_TX_SIMURST         0x80000   /* 1: transmit simulation reset */
                    534: #define     MAC_CTRL_SPEED_SHIFT        20        /* 10: gigabit 01:10M/100M */
                    535: #define     MAC_CTRL_SPEED_MASK         0x300000
                    536: #define     MAC_CTRL_SPEED_1000         2
                    537: #define     MAC_CTRL_SPEED_10_100       1
                    538: #define     MAC_CTRL_DBG_TX_BKPRESURE   0x400000  /* 1: transmit maximum backoff (half-duplex test bit) */
                    539: #define     MAC_CTRL_TX_HUGE            0x800000  /* 1: transmit huge enable */
                    540: #define     MAC_CTRL_RX_CHKSUM_EN       0x1000000 /* 1: RX checksum enable */
                    541: #define     MAC_CTRL_MC_ALL_EN          0x2000000 /* 1: upload all multicast frame without error to system */
                    542: #define     MAC_CTRL_BC_EN              0x4000000 /* 1: upload all broadcast frame without error to system */
                    543: #define     MAC_CTRL_DBG                0x8000000 /* 1: upload all received frame to system (Debug Mode) */
                    544: 
                    545: /* MAC IPG/IFG Control Register  */
                    546: #define REG_MAC_IPG_IFG             0x1484
                    547: #define     MAC_IPG_IFG_IPGT_SHIFT      0     /* Desired back to back inter-packet gap. The default is 96-bit time */
                    548: #define     MAC_IPG_IFG_IPGT_MASK       0x7f
                    549: #define     MAC_IPG_IFG_MIFG_SHIFT      8     /* Minimum number of IFG to enforce in between RX frames */
                    550: #define     MAC_IPG_IFG_MIFG_MASK       0xff  /* Frame gap below such IFP is dropped */
                    551: #define     MAC_IPG_IFG_IPGR1_SHIFT     16    /* 64bit Carrier-Sense window */
                    552: #define     MAC_IPG_IFG_IPGR1_MASK      0x7f
                    553: #define     MAC_IPG_IFG_IPGR2_SHIFT     24    /* 96-bit IPG window */
                    554: #define     MAC_IPG_IFG_IPGR2_MASK      0x7f
                    555: 
                    556: /* MAC STATION ADDRESS  */
                    557: #define REG_MAC_STA_ADDR            0x1488
                    558: 
                    559: /* Hash table for multicast address */
                    560: #define REG_RX_HASH_TABLE           0x1490
                    561: 
                    562: 
                    563: /* MAC Half-Duplex Control Register */
                    564: #define REG_MAC_HALF_DUPLX_CTRL     0x1498
                    565: #define     MAC_HALF_DUPLX_CTRL_LCOL_SHIFT   0      /* Collision Window */
                    566: #define     MAC_HALF_DUPLX_CTRL_LCOL_MASK    0x3ff
                    567: #define     MAC_HALF_DUPLX_CTRL_RETRY_SHIFT  12     /* Retransmission maximum, afterwards the packet will be discarded */
                    568: #define     MAC_HALF_DUPLX_CTRL_RETRY_MASK   0xf
                    569: #define     MAC_HALF_DUPLX_CTRL_EXC_DEF_EN   0x10000 /* 1: Allow the transmission of a packet which has been excessively deferred */
                    570: #define     MAC_HALF_DUPLX_CTRL_NO_BACK_C    0x20000 /* 1: No back-off on collision, immediately start the retransmission */
                    571: #define     MAC_HALF_DUPLX_CTRL_NO_BACK_P    0x40000 /* 1: No back-off on backpressure, immediately start the transmission after back pressure */
                    572: #define     MAC_HALF_DUPLX_CTRL_ABEBE        0x80000 /* 1: Alternative Binary Exponential Back-off Enabled */
                    573: #define     MAC_HALF_DUPLX_CTRL_ABEBT_SHIFT  20      /* Maximum binary exponential number */
                    574: #define     MAC_HALF_DUPLX_CTRL_ABEBT_MASK   0xf
                    575: #define     MAC_HALF_DUPLX_CTRL_JAMIPG_SHIFT 24      /* IPG to start JAM for collision based flow control in half-duplex */
                    576: #define     MAC_HALF_DUPLX_CTRL_JAMIPG_MASK  0xf     /* mode. In unit of 8-bit time */
                    577: 
                    578: /* Maximum Frame Length Control Register   */
                    579: #define REG_MTU                     0x149c
                    580: 
                    581: /* Wake-On-Lan control register */
                    582: #define REG_WOL_CTRL                0x14a0
                    583: #define     WOL_PATTERN_EN                  0x00000001
                    584: #define     WOL_PATTERN_PME_EN              0x00000002
                    585: #define     WOL_MAGIC_EN                    0x00000004
                    586: #define     WOL_MAGIC_PME_EN                0x00000008
                    587: #define     WOL_LINK_CHG_EN                 0x00000010
                    588: #define     WOL_LINK_CHG_PME_EN             0x00000020
                    589: #define     WOL_PATTERN_ST                  0x00000100
                    590: #define     WOL_MAGIC_ST                    0x00000200
                    591: #define     WOL_LINKCHG_ST                  0x00000400
                    592: #define     WOL_CLK_SWITCH_EN               0x00008000
                    593: #define     WOL_PT0_EN                      0x00010000
                    594: #define     WOL_PT1_EN                      0x00020000
                    595: #define     WOL_PT2_EN                      0x00040000
                    596: #define     WOL_PT3_EN                      0x00080000
                    597: #define     WOL_PT4_EN                      0x00100000
                    598: #define     WOL_PT5_EN                      0x00200000
                    599: #define     WOL_PT6_EN                      0x00400000
                    600: /* WOL Length ( 2 DWORD ) */
                    601: #define REG_WOL_PATTERN_LEN         0x14a4
                    602: #define     WOL_PT_LEN_MASK                 0x7f
                    603: #define     WOL_PT0_LEN_SHIFT               0
                    604: #define     WOL_PT1_LEN_SHIFT               8
                    605: #define     WOL_PT2_LEN_SHIFT               16
                    606: #define     WOL_PT3_LEN_SHIFT               24
                    607: #define     WOL_PT4_LEN_SHIFT               0
                    608: #define     WOL_PT5_LEN_SHIFT               8
                    609: #define     WOL_PT6_LEN_SHIFT               16
                    610: 
                    611: /* Internal SRAM Partition Register */
                    612: #define REG_SRAM_TRD_ADDR           0x1518
                    613: #define REG_SRAM_TRD_LEN            0x151C
                    614: #define REG_SRAM_RXF_ADDR           0x1520
                    615: #define REG_SRAM_RXF_LEN            0x1524
                    616: #define REG_SRAM_TXF_ADDR           0x1528
                    617: #define REG_SRAM_TXF_LEN            0x152C
                    618: #define REG_SRAM_TCPH_ADDR          0x1530
                    619: #define REG_SRAM_PKTH_ADDR          0x1532
                    620: 
                    621: /* Load Ptr Register */
                    622: #define REG_LOAD_PTR                0x1534  /* Software sets this bit after the initialization of the head and tail */
                    623: 
                    624: /*
                    625:  * addresses of all descriptors, as well as the following descriptor
                    626:  * control register, which triggers each function block to load the head
                    627:  * pointer to prepare for the operation. This bit is then self-cleared
                    628:  * after one cycle.
                    629:  */
                    630: 
                    631: /* Descriptor Control register  */
                    632: #define REG_RXF3_BASE_ADDR_HI           0x153C
                    633: #define REG_DESC_BASE_ADDR_HI           0x1540
                    634: #define REG_RXF0_BASE_ADDR_HI           0x1540 /* share with DESC BASE ADDR HI */
                    635: #define REG_HOST_RXF0_PAGE0_LO          0x1544
                    636: #define REG_HOST_RXF0_PAGE1_LO          0x1548
                    637: #define REG_TPD_BASE_ADDR_LO            0x154C
                    638: #define REG_RXF1_BASE_ADDR_HI           0x1550
                    639: #define REG_RXF2_BASE_ADDR_HI           0x1554
                    640: #define REG_HOST_RXFPAGE_SIZE           0x1558
                    641: #define REG_TPD_RING_SIZE               0x155C
                    642: /* RSS about */
                    643: #define REG_RSS_KEY0                    0x14B0
                    644: #define REG_RSS_KEY1                    0x14B4
                    645: #define REG_RSS_KEY2                    0x14B8
                    646: #define REG_RSS_KEY3                    0x14BC
                    647: #define REG_RSS_KEY4                    0x14C0
                    648: #define REG_RSS_KEY5                    0x14C4
                    649: #define REG_RSS_KEY6                    0x14C8
                    650: #define REG_RSS_KEY7                    0x14CC
                    651: #define REG_RSS_KEY8                    0x14D0
                    652: #define REG_RSS_KEY9                    0x14D4
                    653: #define REG_IDT_TABLE4                  0x14E0
                    654: #define REG_IDT_TABLE5                  0x14E4
                    655: #define REG_IDT_TABLE6                  0x14E8
                    656: #define REG_IDT_TABLE7                  0x14EC
                    657: #define REG_IDT_TABLE0                  0x1560
                    658: #define REG_IDT_TABLE1                  0x1564
                    659: #define REG_IDT_TABLE2                  0x1568
                    660: #define REG_IDT_TABLE3                  0x156C
                    661: #define REG_IDT_TABLE                   REG_IDT_TABLE0
                    662: #define REG_RSS_HASH_VALUE              0x1570
                    663: #define REG_RSS_HASH_FLAG               0x1574
                    664: #define REG_BASE_CPU_NUMBER             0x157C
                    665: 
                    666: 
                    667: /* TXQ Control Register */
                    668: #define REG_TXQ_CTRL                0x1580
                    669: #define     TXQ_CTRL_NUM_TPD_BURST_MASK     0xF
                    670: #define     TXQ_CTRL_NUM_TPD_BURST_SHIFT    0
                    671: #define     TXQ_CTRL_EN                     0x20  /* 1: Enable TXQ */
                    672: #define     TXQ_CTRL_ENH_MODE               0x40  /* Performance enhancement mode, in which up to two back-to-back DMA read commands might be dispatched. */
                    673: #define     TXQ_CTRL_TXF_BURST_NUM_SHIFT    16    /* Number of data byte to read in a cache-aligned burst. Each SRAM entry is 8-byte in length. */
                    674: #define     TXQ_CTRL_TXF_BURST_NUM_MASK     0xffff
                    675: 
                    676: /* Jumbo packet Threshold for task offload */
                    677: #define REG_TX_EARLY_TH                     0x1584 /* Jumbo frame threshold in QWORD unit. Packet greater than */
                    678: /* JUMBO_TASK_OFFLOAD_THRESHOLD will not be task offloaded. */
                    679: #define     TX_TX_EARLY_TH_MASK             0x7ff
                    680: #define     TX_TX_EARLY_TH_SHIFT            0
                    681: 
                    682: 
                    683: /* RXQ Control Register */
                    684: #define REG_RXQ_CTRL                0x15A0
                    685: #define         RXQ_CTRL_PBA_ALIGN_32                   0   /* rx-packet alignment */
                    686: #define         RXQ_CTRL_PBA_ALIGN_64                   1
                    687: #define         RXQ_CTRL_PBA_ALIGN_128                  2
                    688: #define         RXQ_CTRL_PBA_ALIGN_256                  3
                    689: #define         RXQ_CTRL_Q1_EN                         0x10
                    690: #define         RXQ_CTRL_Q2_EN                         0x20
                    691: #define         RXQ_CTRL_Q3_EN                         0x40
                    692: #define         RXQ_CTRL_IPV6_XSUM_VERIFY_EN           0x80
                    693: #define         RXQ_CTRL_HASH_TLEN_SHIFT                8
                    694: #define         RXQ_CTRL_HASH_TLEN_MASK                 0xFF
                    695: #define         RXQ_CTRL_HASH_TYPE_IPV4                 0x10000
                    696: #define         RXQ_CTRL_HASH_TYPE_IPV4_TCP             0x20000
                    697: #define         RXQ_CTRL_HASH_TYPE_IPV6                 0x40000
                    698: #define         RXQ_CTRL_HASH_TYPE_IPV6_TCP             0x80000
                    699: #define         RXQ_CTRL_RSS_MODE_DISABLE               0
                    700: #define         RXQ_CTRL_RSS_MODE_SQSINT                0x4000000
                    701: #define         RXQ_CTRL_RSS_MODE_MQUESINT              0x8000000
                    702: #define         RXQ_CTRL_RSS_MODE_MQUEMINT              0xC000000
                    703: #define         RXQ_CTRL_NIP_QUEUE_SEL_TBL              0x10000000
                    704: #define         RXQ_CTRL_HASH_ENABLE                    0x20000000
                    705: #define         RXQ_CTRL_CUT_THRU_EN                    0x40000000
                    706: #define         RXQ_CTRL_EN                             0x80000000
                    707: 
                    708: /* Rx jumbo packet threshold and rrd  retirement timer  */
                    709: #define REG_RXQ_JMBOSZ_RRDTIM       0x15A4
                    710: /*
                    711:  * Jumbo packet threshold for non-VLAN packet, in QWORD (64-bit) unit.
                    712:  * When the packet length greater than or equal to this value, RXQ
                    713:  * shall start cut-through forwarding of the received packet.
                    714:  */
                    715: #define         RXQ_JMBOSZ_TH_MASK      0x7ff
                    716: #define         RXQ_JMBOSZ_TH_SHIFT         0  /* RRD retirement timer. Decrement by 1 after every 512ns passes*/
                    717: #define         RXQ_JMBO_LKAH_MASK          0xf
                    718: #define         RXQ_JMBO_LKAH_SHIFT         11
                    719: 
                    720: /* RXF flow control register */
                    721: #define REG_RXQ_RXF_PAUSE_THRESH    0x15A8
                    722: #define     RXQ_RXF_PAUSE_TH_HI_SHIFT       0
                    723: #define     RXQ_RXF_PAUSE_TH_HI_MASK        0xfff
                    724: #define     RXQ_RXF_PAUSE_TH_LO_SHIFT       16
                    725: #define     RXQ_RXF_PAUSE_TH_LO_MASK        0xfff
                    726: 
                    727: 
                    728: /* DMA Engine Control Register */
                    729: #define REG_DMA_CTRL                0x15C0
                    730: #define     DMA_CTRL_DMAR_IN_ORDER          0x1
                    731: #define     DMA_CTRL_DMAR_ENH_ORDER         0x2
                    732: #define     DMA_CTRL_DMAR_OUT_ORDER         0x4
                    733: #define     DMA_CTRL_RCB_VALUE              0x8
                    734: #define     DMA_CTRL_DMAR_BURST_LEN_SHIFT   4
                    735: #define     DMA_CTRL_DMAR_BURST_LEN_MASK    7
                    736: #define     DMA_CTRL_DMAW_BURST_LEN_SHIFT   7
                    737: #define     DMA_CTRL_DMAW_BURST_LEN_MASK    7
                    738: #define     DMA_CTRL_DMAR_REQ_PRI           0x400
                    739: #define     DMA_CTRL_DMAR_DLY_CNT_MASK      0x1F
                    740: #define     DMA_CTRL_DMAR_DLY_CNT_SHIFT     11
                    741: #define     DMA_CTRL_DMAW_DLY_CNT_MASK      0xF
                    742: #define     DMA_CTRL_DMAW_DLY_CNT_SHIFT     16
                    743: #define     DMA_CTRL_TXCMB_EN               0x100000
                    744: #define     DMA_CTRL_RXCMB_EN                          0x200000
                    745: 
                    746: 
                    747: /* CMB/SMB Control Register */
                    748: #define REG_SMB_STAT_TIMER                      0x15C4
                    749: #define REG_TRIG_RRD_THRESH                     0x15CA
                    750: #define REG_TRIG_TPD_THRESH                     0x15C8
                    751: #define REG_TRIG_TXTIMER                        0x15CC
                    752: #define REG_TRIG_RXTIMER                        0x15CE
                    753: 
                    754: /* HOST RXF Page 1,2,3 address */
                    755: #define REG_HOST_RXF1_PAGE0_LO                  0x15D0
                    756: #define REG_HOST_RXF1_PAGE1_LO                  0x15D4
                    757: #define REG_HOST_RXF2_PAGE0_LO                  0x15D8
                    758: #define REG_HOST_RXF2_PAGE1_LO                  0x15DC
                    759: #define REG_HOST_RXF3_PAGE0_LO                  0x15E0
                    760: #define REG_HOST_RXF3_PAGE1_LO                  0x15E4
                    761: 
                    762: /* Mail box */
                    763: #define REG_MB_RXF1_RADDR                       0x15B4
                    764: #define REG_MB_RXF2_RADDR                       0x15B8
                    765: #define REG_MB_RXF3_RADDR                       0x15BC
                    766: #define REG_MB_TPD_PROD_IDX                     0x15F0
                    767: 
                    768: /* RXF-Page 0-3  PageNo & Valid bit */
                    769: #define REG_HOST_RXF0_PAGE0_VLD     0x15F4
                    770: #define     HOST_RXF_VALID              1
                    771: #define     HOST_RXF_PAGENO_SHIFT       1
                    772: #define     HOST_RXF_PAGENO_MASK        0x7F
                    773: #define REG_HOST_RXF0_PAGE1_VLD     0x15F5
                    774: #define REG_HOST_RXF1_PAGE0_VLD     0x15F6
                    775: #define REG_HOST_RXF1_PAGE1_VLD     0x15F7
                    776: #define REG_HOST_RXF2_PAGE0_VLD     0x15F8
                    777: #define REG_HOST_RXF2_PAGE1_VLD     0x15F9
                    778: #define REG_HOST_RXF3_PAGE0_VLD     0x15FA
                    779: #define REG_HOST_RXF3_PAGE1_VLD     0x15FB
                    780: 
                    781: /* Interrupt Status Register */
                    782: #define REG_ISR    0x1600
                    783: #define  ISR_SMB               1
                    784: #define  ISR_TIMER             2       /* Interrupt when Timer is counted down to zero */
                    785: /*
                    786:  * Software manual interrupt, for debug. Set when SW_MAN_INT_EN is set
                    787:  * in Table 51 Selene Master Control Register (Offset 0x1400).
                    788:  */
                    789: #define  ISR_MANUAL            4
                    790: #define  ISR_HW_RXF_OV          8        /* RXF overflow interrupt */
                    791: #define  ISR_HOST_RXF0_OV       0x10
                    792: #define  ISR_HOST_RXF1_OV       0x20
                    793: #define  ISR_HOST_RXF2_OV       0x40
                    794: #define  ISR_HOST_RXF3_OV       0x80
                    795: #define  ISR_TXF_UN             0x100
                    796: #define  ISR_RX0_PAGE_FULL      0x200
                    797: #define  ISR_DMAR_TO_RST        0x400
                    798: #define  ISR_DMAW_TO_RST        0x800
                    799: #define  ISR_GPHY               0x1000
                    800: #define  ISR_TX_CREDIT          0x2000
                    801: #define  ISR_GPHY_LPW           0x4000    /* GPHY low power state interrupt */
                    802: #define  ISR_RX_PKT             0x10000   /* One packet received, triggered by RFD */
                    803: #define  ISR_TX_PKT             0x20000   /* One packet transmitted, triggered by TPD */
                    804: #define  ISR_TX_DMA             0x40000
                    805: #define  ISR_RX_PKT_1           0x80000
                    806: #define  ISR_RX_PKT_2           0x100000
                    807: #define  ISR_RX_PKT_3           0x200000
                    808: #define  ISR_MAC_RX             0x400000
                    809: #define  ISR_MAC_TX             0x800000
                    810: #define  ISR_UR_DETECTED        0x1000000
                    811: #define  ISR_FERR_DETECTED      0x2000000
                    812: #define  ISR_NFERR_DETECTED     0x4000000
                    813: #define  ISR_CERR_DETECTED      0x8000000
                    814: #define  ISR_PHY_LINKDOWN       0x10000000
                    815: #define  ISR_DIS_INT            0x80000000
                    816: 
                    817: 
                    818: /* Interrupt Mask Register */
                    819: #define REG_IMR 0x1604
                    820: 
                    821: 
                    822: #define IMR_NORMAL_MASK (\
                    823:                ISR_SMB         |\
                    824:                ISR_TXF_UN      |\
                    825:                ISR_HW_RXF_OV   |\
                    826:                ISR_HOST_RXF0_OV|\
                    827:                ISR_MANUAL      |\
                    828:                ISR_GPHY        |\
                    829:                ISR_GPHY_LPW    |\
                    830:                ISR_DMAR_TO_RST |\
                    831:                ISR_DMAW_TO_RST |\
                    832:                ISR_PHY_LINKDOWN|\
                    833:                ISR_RX_PKT      |\
                    834:                ISR_TX_PKT)
                    835: 
                    836: #define ISR_TX_EVENT (ISR_TXF_UN | ISR_TX_PKT)
                    837: #define ISR_RX_EVENT (ISR_HOST_RXF0_OV | ISR_HW_RXF_OV | ISR_RX_PKT)
                    838: 
                    839: #define REG_MAC_RX_STATUS_BIN 0x1700
                    840: #define REG_MAC_RX_STATUS_END 0x175c
                    841: #define REG_MAC_TX_STATUS_BIN 0x1760
                    842: #define REG_MAC_TX_STATUS_END 0x17c0
                    843: 
                    844: /* Hardware Offset Register */
                    845: #define REG_HOST_RXF0_PAGEOFF 0x1800
                    846: #define REG_TPD_CONS_IDX      0x1804
                    847: #define REG_HOST_RXF1_PAGEOFF 0x1808
                    848: #define REG_HOST_RXF2_PAGEOFF 0x180C
                    849: #define REG_HOST_RXF3_PAGEOFF 0x1810
                    850: 
                    851: /* RXF-Page 0-3 Offset DMA Address */
                    852: #define REG_HOST_RXF0_MB0_LO  0x1820
                    853: #define REG_HOST_RXF0_MB1_LO  0x1824
                    854: #define REG_HOST_RXF1_MB0_LO  0x1828
                    855: #define REG_HOST_RXF1_MB1_LO  0x182C
                    856: #define REG_HOST_RXF2_MB0_LO  0x1830
                    857: #define REG_HOST_RXF2_MB1_LO  0x1834
                    858: #define REG_HOST_RXF3_MB0_LO  0x1838
                    859: #define REG_HOST_RXF3_MB1_LO  0x183C
                    860: 
                    861: /* Tpd CMB DMA Address */
                    862: #define REG_HOST_TX_CMB_LO    0x1840
                    863: #define REG_HOST_SMB_ADDR_LO  0x1844
                    864: 
                    865: /* DEBUG ADDR */
                    866: #define REG_DEBUG_DATA0 0x1900
                    867: #define REG_DEBUG_DATA1 0x1904
                    868: 
                    869: /***************************** MII definition ***************************************/
                    870: /* PHY Common Register */
                    871: #define MII_BMCR                        0x00
                    872: #define MII_BMSR                        0x01
                    873: #define MII_PHYSID1                     0x02
                    874: #define MII_PHYSID2                     0x03
                    875: #define MII_ADVERTISE                   0x04
                    876: #define MII_LPA                         0x05
                    877: #define MII_EXPANSION                   0x06
                    878: #define MII_AT001_CR                    0x09
                    879: #define MII_AT001_SR                    0x0A
                    880: #define MII_AT001_ESR                   0x0F
                    881: #define MII_AT001_PSCR                  0x10
                    882: #define MII_AT001_PSSR                  0x11
                    883: #define MII_INT_CTRL                    0x12
                    884: #define MII_INT_STATUS                  0x13
                    885: #define MII_SMARTSPEED                  0x14
                    886: #define MII_RERRCOUNTER                 0x15
                    887: #define MII_SREVISION                   0x16
                    888: #define MII_RESV1                       0x17
                    889: #define MII_LBRERROR                    0x18
                    890: #define MII_PHYADDR                     0x19
                    891: #define MII_RESV2                       0x1a
                    892: #define MII_TPISTATUS                   0x1b
                    893: #define MII_NCONFIG                     0x1c
                    894: 
                    895: #define MII_DBG_ADDR                   0x1D
                    896: #define MII_DBG_DATA                   0x1E
                    897: 
                    898: 
                    899: /* PHY Control Register */
                    900: #define MII_CR_SPEED_SELECT_MSB                  0x0040  /* bits 6,13: 10=1000, 01=100, 00=10 */
                    901: #define MII_CR_COLL_TEST_ENABLE                  0x0080  /* Collision test enable */
                    902: #define MII_CR_FULL_DUPLEX                       0x0100  /* FDX =1, half duplex =0 */
                    903: #define MII_CR_RESTART_AUTO_NEG                  0x0200  /* Restart auto negotiation */
                    904: #define MII_CR_ISOLATE                           0x0400  /* Isolate PHY from MII */
                    905: #define MII_CR_POWER_DOWN                        0x0800  /* Power down */
                    906: #define MII_CR_AUTO_NEG_EN                       0x1000  /* Auto Neg Enable */
                    907: #define MII_CR_SPEED_SELECT_LSB                  0x2000  /* bits 6,13: 10=1000, 01=100, 00=10 */
                    908: #define MII_CR_LOOPBACK                          0x4000  /* 0 = normal, 1 = loopback */
                    909: #define MII_CR_RESET                             0x8000  /* 0 = normal, 1 = PHY reset */
                    910: #define MII_CR_SPEED_MASK                        0x2040
                    911: #define MII_CR_SPEED_1000                        0x0040
                    912: #define MII_CR_SPEED_100                         0x2000
                    913: #define MII_CR_SPEED_10                          0x0000
                    914: 
                    915: 
                    916: /* PHY Status Register */
                    917: #define MII_SR_EXTENDED_CAPS                     0x0001  /* Extended register capabilities */
                    918: #define MII_SR_JABBER_DETECT                     0x0002  /* Jabber Detected */
                    919: #define MII_SR_LINK_STATUS                       0x0004  /* Link Status 1 = link */
                    920: #define MII_SR_AUTONEG_CAPS                      0x0008  /* Auto Neg Capable */
                    921: #define MII_SR_REMOTE_FAULT                      0x0010  /* Remote Fault Detect */
                    922: #define MII_SR_AUTONEG_COMPLETE                  0x0020  /* Auto Neg Complete */
                    923: #define MII_SR_PREAMBLE_SUPPRESS                 0x0040  /* Preamble may be suppressed */
                    924: #define MII_SR_EXTENDED_STATUS                   0x0100  /* Ext. status info in Reg 0x0F */
                    925: #define MII_SR_100T2_HD_CAPS                     0x0200  /* 100T2 Half Duplex Capable */
                    926: #define MII_SR_100T2_FD_CAPS                     0x0400  /* 100T2 Full Duplex Capable */
                    927: #define MII_SR_10T_HD_CAPS                       0x0800  /* 10T   Half Duplex Capable */
                    928: #define MII_SR_10T_FD_CAPS                       0x1000  /* 10T   Full Duplex Capable */
                    929: #define MII_SR_100X_HD_CAPS                      0x2000  /* 100X  Half Duplex Capable */
                    930: #define MII_SR_100X_FD_CAPS                      0x4000  /* 100X  Full Duplex Capable */
                    931: #define MII_SR_100T4_CAPS                        0x8000  /* 100T4 Capable */
                    932: 
                    933: /* Link partner ability register. */
                    934: #define MII_LPA_SLCT                             0x001f  /* Same as advertise selector  */
                    935: #define MII_LPA_10HALF                           0x0020  /* Can do 10mbps half-duplex   */
                    936: #define MII_LPA_10FULL                           0x0040  /* Can do 10mbps full-duplex   */
                    937: #define MII_LPA_100HALF                          0x0080  /* Can do 100mbps half-duplex  */
                    938: #define MII_LPA_100FULL                          0x0100  /* Can do 100mbps full-duplex  */
                    939: #define MII_LPA_100BASE4                         0x0200  /* 100BASE-T4  */
                    940: #define MII_LPA_PAUSE                            0x0400  /* PAUSE */
                    941: #define MII_LPA_ASYPAUSE                         0x0800  /* Asymmetrical PAUSE */
                    942: #define MII_LPA_RFAULT                           0x2000  /* Link partner faulted        */
                    943: #define MII_LPA_LPACK                            0x4000  /* Link partner acked us       */
                    944: #define MII_LPA_NPAGE                            0x8000  /* Next page bit               */
                    945: 
                    946: /* Autoneg Advertisement Register */
                    947: #define MII_AR_SELECTOR_FIELD                   0x0001  /* indicates IEEE 802.3 CSMA/CD */
                    948: #define MII_AR_10T_HD_CAPS                      0x0020  /* 10T   Half Duplex Capable */
                    949: #define MII_AR_10T_FD_CAPS                      0x0040  /* 10T   Full Duplex Capable */
                    950: #define MII_AR_100TX_HD_CAPS                    0x0080  /* 100TX Half Duplex Capable */
                    951: #define MII_AR_100TX_FD_CAPS                    0x0100  /* 100TX Full Duplex Capable */
                    952: #define MII_AR_100T4_CAPS                       0x0200  /* 100T4 Capable */
                    953: #define MII_AR_PAUSE                            0x0400  /* Pause operation desired */
                    954: #define MII_AR_ASM_DIR                          0x0800  /* Asymmetric Pause Direction bit */
                    955: #define MII_AR_REMOTE_FAULT                     0x2000  /* Remote Fault detected */
                    956: #define MII_AR_NEXT_PAGE                        0x8000  /* Next Page ability supported */
                    957: #define MII_AR_SPEED_MASK                       0x01E0
                    958: #define MII_AR_DEFAULT_CAP_MASK                 0x0DE0
                    959: 
                    960: /* 1000BASE-T Control Register */
                    961: #define MII_AT001_CR_1000T_HD_CAPS              0x0100  /* Advertise 1000T HD capability */
                    962: #define MII_AT001_CR_1000T_FD_CAPS              0x0200  /* Advertise 1000T FD capability  */
                    963: #define MII_AT001_CR_1000T_REPEATER_DTE         0x0400  /* 1=Repeater/switch device port */
                    964: /* 0=DTE device */
                    965: #define MII_AT001_CR_1000T_MS_VALUE             0x0800  /* 1=Configure PHY as Master */
                    966: /* 0=Configure PHY as Slave */
                    967: #define MII_AT001_CR_1000T_MS_ENABLE            0x1000  /* 1=Master/Slave manual config value */
                    968: /* 0=Automatic Master/Slave config */
                    969: #define MII_AT001_CR_1000T_TEST_MODE_NORMAL     0x0000  /* Normal Operation */
                    970: #define MII_AT001_CR_1000T_TEST_MODE_1          0x2000  /* Transmit Waveform test */
                    971: #define MII_AT001_CR_1000T_TEST_MODE_2          0x4000  /* Master Transmit Jitter test */
                    972: #define MII_AT001_CR_1000T_TEST_MODE_3          0x6000  /* Slave Transmit Jitter test */
                    973: #define MII_AT001_CR_1000T_TEST_MODE_4          0x8000  /* Transmitter Distortion test */
                    974: #define MII_AT001_CR_1000T_SPEED_MASK           0x0300
                    975: #define MII_AT001_CR_1000T_DEFAULT_CAP_MASK     0x0300
                    976: 
                    977: /* 1000BASE-T Status Register */
                    978: #define MII_AT001_SR_1000T_LP_HD_CAPS           0x0400  /* LP is 1000T HD capable */
                    979: #define MII_AT001_SR_1000T_LP_FD_CAPS           0x0800  /* LP is 1000T FD capable */
                    980: #define MII_AT001_SR_1000T_REMOTE_RX_STATUS     0x1000  /* Remote receiver OK */
                    981: #define MII_AT001_SR_1000T_LOCAL_RX_STATUS      0x2000  /* Local receiver OK */
                    982: #define MII_AT001_SR_1000T_MS_CONFIG_RES        0x4000  /* 1=Local TX is Master, 0=Slave */
                    983: #define MII_AT001_SR_1000T_MS_CONFIG_FAULT      0x8000  /* Master/Slave config fault */
                    984: #define MII_AT001_SR_1000T_REMOTE_RX_STATUS_SHIFT   12
                    985: #define MII_AT001_SR_1000T_LOCAL_RX_STATUS_SHIFT    13
                    986: 
                    987: /* Extended Status Register */
                    988: #define MII_AT001_ESR_1000T_HD_CAPS             0x1000  /* 1000T HD capable */
                    989: #define MII_AT001_ESR_1000T_FD_CAPS             0x2000  /* 1000T FD capable */
                    990: #define MII_AT001_ESR_1000X_HD_CAPS             0x4000  /* 1000X HD capable */
                    991: #define MII_AT001_ESR_1000X_FD_CAPS             0x8000  /* 1000X FD capable */
                    992: 
                    993: /* AT001 PHY Specific Control Register */
                    994: #define MII_AT001_PSCR_JABBER_DISABLE           0x0001  /* 1=Jabber Function disabled */
                    995: #define MII_AT001_PSCR_POLARITY_REVERSAL        0x0002  /* 1=Polarity Reversal enabled */
                    996: #define MII_AT001_PSCR_SQE_TEST                 0x0004  /* 1=SQE Test enabled */
                    997: #define MII_AT001_PSCR_MAC_POWERDOWN            0x0008
                    998: #define MII_AT001_PSCR_CLK125_DISABLE           0x0010  /* 1=CLK125 low,
                    999:                                                         * 0=CLK125 toggling
                   1000:                                                         */
                   1001: #define MII_AT001_PSCR_MDI_MANUAL_MODE          0x0000  /* MDI Crossover Mode bits 6:5 */
                   1002: /* Manual MDI configuration */
                   1003: #define MII_AT001_PSCR_MDIX_MANUAL_MODE         0x0020  /* Manual MDIX configuration */
                   1004: #define MII_AT001_PSCR_AUTO_X_1000T             0x0040  /* 1000BASE-T: Auto crossover,
                   1005:                                                         *  100BASE-TX/10BASE-T:
                   1006:                                                         *  MDI Mode
                   1007:                                                         */
                   1008: #define MII_AT001_PSCR_AUTO_X_MODE              0x0060  /* Auto crossover enabled
                   1009:                                                         * all speeds.
                   1010:                                                         */
                   1011: #define MII_AT001_PSCR_10BT_EXT_DIST_ENABLE     0x0080
                   1012: /* 1=Enable Extended 10BASE-T distance
                   1013:  * (Lower 10BASE-T RX Threshold)
                   1014:  * 0=Normal 10BASE-T RX Threshold */
                   1015: #define MII_AT001_PSCR_MII_5BIT_ENABLE          0x0100
                   1016: /* 1=5-Bit interface in 100BASE-TX
                   1017:  * 0=MII interface in 100BASE-TX */
                   1018: #define MII_AT001_PSCR_SCRAMBLER_DISABLE        0x0200  /* 1=Scrambler disable */
                   1019: #define MII_AT001_PSCR_FORCE_LINK_GOOD          0x0400  /* 1=Force link good */
                   1020: #define MII_AT001_PSCR_ASSERT_CRS_ON_TX         0x0800  /* 1=Assert CRS on Transmit */
                   1021: #define MII_AT001_PSCR_POLARITY_REVERSAL_SHIFT    1
                   1022: #define MII_AT001_PSCR_AUTO_X_MODE_SHIFT          5
                   1023: #define MII_AT001_PSCR_10BT_EXT_DIST_ENABLE_SHIFT 7
                   1024: /* AT001 PHY Specific Status Register */
                   1025: #define MII_AT001_PSSR_SPD_DPLX_RESOLVED        0x0800  /* 1=Speed & Duplex resolved */
                   1026: #define MII_AT001_PSSR_DPLX                     0x2000  /* 1=Duplex 0=Half Duplex */
                   1027: #define MII_AT001_PSSR_SPEED                    0xC000  /* Speed, bits 14:15 */
                   1028: #define MII_AT001_PSSR_10MBS                    0x0000  /* 00=10Mbs */
                   1029: #define MII_AT001_PSSR_100MBS                   0x4000  /* 01=100Mbs */
                   1030: #define MII_AT001_PSSR_1000MBS                  0x8000  /* 10=1000Mbs */
                   1031: 
                   1032: 
                   1033: #endif /* _ATL1_E_H_ */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.