📄 emac_sl2312.h
字号:
/***************************************************************************** Copyright Storlink Corp 2005. All rights reserved. *--------------------------------------------------------------------------* Name : emac_sl2312.h* Description : * Define for device driver of Storlink SL2312 Chip** History** Date Writer Description* ----------- ----------- -------------------------------------------------* 04/25/2005 Gary Chen Create and implement from Jason's Redboot code*****************************************************************************/#ifndef _EMAC_SL2312_H#define _EMAC_SL2312_H#define EMAC_STATISTICS 1typedef unsigned int dma_addr_t;#define ETHER_ADDR_LEN 6#define BIG_ENDIAN 0/* define chip information */#define DRV_NAME "SL2312"#define DRV_VERSION "0.1.1"#define SL2312_DRIVER_NAME DRV_NAME " Fast Ethernet driver " DRV_VERSION#define TX_DESC_NUM 16#define RX_DESC_NUM 16#define RX_BUF_NUM (RX_DESC_NUM * 1)#define MAX_ETH_FRAME_SIZE 1536#undef TX_DESC_NUM#undef RX_DESC_NUM#define BUF_COUNT 512#define TX_DESC_NUM (BUF_COUNT)#define RX_DESC_NUM (BUF_COUNT)#define EMAC_BUF_SIZE (RX_DESC_NUM * MAX_ETH_FRAME_SIZE)/* define TX/RX descriptor parameter */#define TX_BUF_SIZE MAX_ETH_FRAME_SIZE#define TX_BUF_TOT_LEN (TX_BUF_SIZE * TX_DESC_NUM)#define RX_BUF_SIZE MAX_ETH_FRAME_SIZE#define RX_BUF_TOT_LEN (RX_BUF_SIZE * RX_BUF_NUM)/* define EMAC base address */#define EMAC_BASE_ADDR (SL2312_EMAC_BASE)/* define owner bit */#define CPU 0#define DMA 1/* define PHY address */#define PHY_ADDR 0x01#define ADM_EECS 0x01#define ADM_EECK 0x02#define ADM_EDIO 0x04#define LDN_GPIO 0x07#define LPC_BASE_ADDR SL2312_LPC_IO_BASE#define IT8712_GPIO_BASE 0x800 // 0x800-0x804 for GPIO set1-set5#define BASE_OFF 0x03/***************************************//* the offset address of EMAC register *//***************************************/enum EMAC_REGISTER { EMAC_STA_ADD0 = 0x0000, EMAC_STA_ADD1 = 0x0004, EMAC_STA_ADD2 = 0x0008, EMAC_RX_FLTR = 0x000c, EMAC_MCAST_FIL0 = 0x0010, EMAC_MCAST_FIL1 = 0x0014, EMAC_CONFIG0 = 0x0018, EMAC_CONFIG1 = 0x001c, EMAC_CONFIG2 = 0x0020, EMAC_BNCR = 0x0024, EMAC_RBNR = 0x0028, EMAC_STATUS = 0x002c, EMAC_IN_DISCARDS= 0x0030, EMAC_IN_ERRORS = 0x0034}; /*******************************************//* the offset address of EMAC DMA register *//*******************************************/enum EMAC_DMA_REGISTER { EMAC_DMA_DEVICE_ID = 0xff00, EMAC_DMA_STATUS = 0xff04, EMAC_TXDMA_CTRL = 0xff08, EMAC_TXDMA_FIRST_DESC = 0xff0c, EMAC_TXDMA_CURR_DESC = 0xff10, EMAC_RXDMA_CTRL = 0xff14, EMAC_RXDMA_FIRST_DESC = 0xff18, EMAC_RXDMA_CURR_DESC = 0xff1c,};/*******************************************//* the register structure of EMAC *//*******************************************/typedef union{ unsigned int bits32; struct bit1_0004 {#if (BIG_ENDIAN==1) unsigned int sta_add2_l16 : 16; /* station MAC address2 bits 15 to 0 */ unsigned int sta_add1_h16 : 16; /* station MAC address1 bits 47 to 32 */#else unsigned int sta_add1_h16 : 16; /* station MAC address1 bits 47 to 32 */ unsigned int sta_add2_l16 : 16; /* station MAC address2 bits 15 to 0 */#endif } bits;} EMAC_STA_ADD1_T; typedef union{ unsigned int bits32; struct bit1_000c {#if (BIG_ENDIAN==1) unsigned int : 27; unsigned int error : 1; /* enable receive of all error frames */ unsigned int promiscuous : 1; /* enable receive of all frames */ unsigned int broadcast : 1; /* enable receive of broadcast frames */ unsigned int multicast : 1; /* enable receive of multicast frames that pass multicast filter */ unsigned int unicast : 1; /* enable receive of unicast frames that are sent to STA address */#else unsigned int unicast : 1; /* enable receive of unicast frames that are sent to STA address */ unsigned int multicast : 1; /* enable receive of multicast frames that pass multicast filter */ unsigned int broadcast : 1; /* enable receive of broadcast frames */ unsigned int promiscuous : 1; /* enable receive of all frames */ unsigned int error : 1; /* enable receive of all error frames */ unsigned int : 27;#endif } bits;} EMAC_RX_FLTR_T;typedef union{ unsigned int bits32; struct bit1_0018 {#if (BIG_ENDIAN==1) unsigned int : 19; unsigned int sim_test : 1; /* speed up timers in simulation */ unsigned int dis_col : 1; /* disable 16 collisions abort function */ unsigned int dis_bkoff : 1; /* disable back-off function */ unsigned int max_len : 2; /* maximum receive frame length allowed */ unsigned int adj_ifg : 4; /* adjust IFG from 96+/-56 */ unsigned int fc_en : 1; /* flow control enable */ unsigned int loop_back : 1; /* transmit data loopback enable */ unsigned int dis_rx : 1; /* disable receive */ unsigned int dis_tx : 1; /* disable transmit */#else unsigned int dis_tx : 1; /* disable transmit */ unsigned int dis_rx : 1; /* disable receive */ unsigned int loop_back : 1; /* transmit data loopback enable */ unsigned int fc_en : 1; /* flow control enable */ unsigned int adj_ifg : 4; /* adjust IFG from 96+/-56 */ unsigned int max_len : 2; /* maximum receive frame length allowed */ unsigned int dis_bkoff : 1; /* disable back-off function */ unsigned int dis_col : 1; /* disable 16 collisions abort function */ unsigned int sim_test : 1; /* speed up timers in simulation */ unsigned int : 19;#endif } bits;} EMAC_CONFIG0_T; typedef union{ unsigned int bits32; struct bit1_001c {#if (BIG_ENDIAN==1) unsigned int : 28; unsigned int buf_size : 4; /* per packet buffer size */#else unsigned int buf_size : 4; /* per packet buffer size */ unsigned int : 28;#endif } bits;} EMAC_CONFIG1_T;typedef union{ unsigned int bits32; struct bit1_0020 {#if (BIG_ENDIAN==1) unsigned int rel_threshold : 16; /* flow control release threshold */ unsigned int set_threshold : 16; /* flow control set threshold */#else unsigned int set_threshold : 16; /* flow control set threshold */ unsigned int rel_threshold : 16; /* flow control release threshold */#endif } bits;} EMAC_CONFIG2_T;typedef union{ unsigned int bits32; struct bit1_0024 {#if (BIG_ENDIAN==1) unsigned int : 16; unsigned int buf_num : 16; /* return buffer number from software */#else unsigned int buf_num : 16; /* return buffer number from software */ unsigned int : 16;#endif } bits;} EMAC_BNCR_T;typedef union{ unsigned int bits32; struct bit1_0028 {#if (BIG_ENDIAN==1) unsigned int : 16; unsigned int buf_remain : 16; /* remaining buffer number */#else unsigned int buf_remain : 16; /* remaining buffer number */ unsigned int : 16;#endif } bits;} EMAC_RBNR_T;typedef union{ unsigned int bits32; struct bit1_002c {#if (BIG_ENDIAN==1) unsigned int : 27; unsigned int phy_mode : 1; /* PHY interface mode in 10M-bps */ unsigned int mii_rmii : 1; /* PHY interface type */ unsigned int duplex : 1; /* duplex mode */ unsigned int speed : 1; /* link speed */ unsigned int link : 1; /* link status */#else unsigned int link : 1; /* link status */ unsigned int speed : 1; /* link speed */ unsigned int duplex : 1; /* duplex mode */ unsigned int mii_rmii : 1; /* PHY interface type */ unsigned int phy_mode : 1; /* PHY interface mode in 10M-bps */ unsigned int : 27;#endif } bits;} EMAC_STATUS_T; typedef union{ unsigned int bits32; struct bit1_009 {#if (BIG_ENDIAN==1) unsigned int : 10; unsigned int tx_fail : 1; /* Tx fail interrupt */ unsigned int cnt_full : 1; /* MIB counters half full interrupt */ unsigned int rx_pause_on : 1; /* received pause on frame interrupt */ unsigned int tx_pause_on : 1; /* transmit pause on frame interrupt */ unsigned int rx_pause_off : 1; /* received pause off frame interrupt */ unsigned int tx_pause_off : 1; /* received pause off frame interrupt */ unsigned int rx_overrun : 1; /* EMAC Rx FIFO overrun interrupt */ unsigned int tx_underrun : 1; /* EMAC Tx FIFO underrun interrupt */ unsigned int : 6; unsigned int m_tx_fail : 1; /* Tx fail interrupt mask */ unsigned int m_cnt_full : 1; /* MIB counters half full interrupt mask */ unsigned int m_rx_pause_on : 1; /* received pause on frame interrupt mask */ unsigned int m_tx_pause_on : 1; /* transmit pause on frame interrupt mask */ unsigned int m_rx_pause_off : 1; /* received pause off frame interrupt mask */ unsigned int m_tx_pause_off : 1; /* received pause off frame interrupt mask */ unsigned int m_rx_overrun : 1; /* EMAC Rx FIFO overrun interrupt mask */ unsigned int m_tx_underrun : 1; /* EMAC Tx FIFO underrun interrupt mask */#else unsigned int m_tx_underrun : 1; /* EMAC Tx FIFO underrun interrupt mask */ unsigned int m_rx_overrun : 1; /* EMAC Rx FIFO overrun interrupt mask */ unsigned int m_tx_pause_off : 1; /* received pause off frame interrupt mask */ unsigned int m_rx_pause_off : 1; /* received pause off frame interrupt mask */ unsigned int m_tx_pause_on : 1; /* transmit pause on frame interrupt mask */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -