if_mcf5272.h

来自「eCos操作系统源码」· C头文件 代码 · 共 331 行

H
331
字号
#ifndef _IF_MCF5272_FEC#define _IF_MCF5272_FEC//==========================================================================//####ECOSGPLCOPYRIGHTBEGIN####// -------------------------------------------// This file is part of eCos, the Embedded Configurable Operating System.// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.//// eCos is free software; you can redistribute it and/or modify it under// the terms of the GNU General Public License as published by the Free// Software Foundation; either version 2 or (at your option) any later version.//// eCos is distributed in the hope that it will be useful, but WITHOUT ANY// WARRANTY; without even the implied warranty of MERCHANTABILITY or// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License// for more details.//// You should have received a copy of the GNU General Public License along// with eCos; if not, write to the Free Software Foundation, Inc.,// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.//// As a special exception, if other files instantiate templates or use macros// or inline functions from this file, or you compile this file and link it// with other works to produce a work based on this file, this file does not// by itself cause the resulting work to be covered by the GNU General Public// License. However the source code for this file must still be made available// in accordance with section (3) of the GNU General Public License.//// This exception does not invalidate any other reasons why a work based on// this file might be covered by the GNU General Public License.//// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.// at http://sources.redhat.com/ecos/ecos-license/// -------------------------------------------//####ECOSGPLCOPYRIGHTEND####//==========================================================================#include <cyg/hal/drv_api.h>#include <cyg/io/eth/eth_drv_stats.h>#include <cyg/devs/eth/nbuf.h> /* Ethernet controller inetrrupt priority level. */#define MCF5272_INT_LEVEL 4/* Bit level definitions and macros */#define MCF5272_FEC_ECR_RESET		(0x00000001)#define MCF5272_FEC_ECR_ETHER_EN	(0x00000002)#define MCF5272_FEC_EIR_GRA			(0x10000000)#define MCF5272_FEC_EIR_HBE		    (0x80000000)#define MCF5272_FEC_EIR_BR		    (0x40000000)#define MCF5272_FEC_EIR_BT		    (0x20000000)#define MCF5272_FEC_EIR_GRA		    (0x10000000)#define MCF5272_FEC_EIR_TXF		    (0x08000000)#define MCF5272_FEC_EIR_TXB		    (0x04000000)#define MCF5272_FEC_EIR_RXF		    (0x02000000)#define MCF5272_FEC_EIR_RXB		    (0x01000000)#define MCF5272_FEC_EIR_MII		    (0x00800000)#define MCF5272_FEC_EIR_EBERR		(0x00400000)#define MCF5272_FEC_EIR_UMINT       (1<<21)#define MCF5272_FEC_IMR_HBEEN		(0x80000000)#define MCF5272_FEC_IMR_BREN		(0x40000000)#define MCF5272_FEC_IMR_BTEN		(0x20000000)#define MCF5272_FEC_IMR_GRAEN		(0x10000000)#define MCF5272_FEC_IMR_TXFEN		(0x08000000)#define MCF5272_FEC_IMR_TXBEN		(0x04000000)#define MCF5272_FEC_IMR_RXFEN		(0x02000000)#define MCF5272_FEC_IMR_RXBEN		(0x01000000)#define MCF5272_FEC_IMR_MIIEN		(0x00800000)#define MCF5272_FEC_IMR_EBERREN		(0x00400000)#define MCF5272_FEC_RCR_PROM		(0x00000008)#define MCF5272_FEC_RCR_MII_MODE	(0x00000004)#define MCF5272_FEC_RCR_DRT			(0x00000002)#define MCF5272_FEC_RCR_LOOP		(0x00000001)#define MCF5272_FEC_TCR_GTS			(0x00000001)#define MCF5272_FEC_TCR_HBC			(0x00000002)#define MCF5272_FEC_TCR_FDEN		(0x00000004)#define MCF5272_FEC_RDAR_DESTACT    (0x01000000)#define MCF5272_FEC_MFLR_BRDCAST    (0x80000000)#define MCF5272_FEC_MFLR_MLTCAST    (0x40000000)#define MCF5272_FEC_XWMRK_64        (0x00000000)#define MCF5272_FEC_XWMRK_128       (0x00000002)#define MCF5272_FEC_XWMRK_192       (0x00000003)/*      Define the PHY addresss.  This address specifies which 32  attached *//* PHY devices.                                                             *///#define MCF5272_PHY_ADD            (0)#define MCF5272_PHY_ADD            (0 << 23)/*      Start of frame delimter for valid MII management frame.             */#define MCF5272_FEC_MII_ST          (0x40000000)/*      Operation code.  This field bust be programmed to generate a  valid *//* MII management frame.                                                    */#define MCF5272_FEC_MII_OP_READ     (0x20000000)#define MCF5272_FEC_MII_OP_WRITE    (0x10000000)/*      Register address.  Specifies one of the 32 attached PHY devices.    */#define MCF5272_FEC_MII_RA_POS      (18)#define MCF5272_FEC_MII_RA_MASK     (0x1F)/*      Turn around.  Must  be programmed  to 10  to generate  a valid  MII *//* management frame.                                                        */#define MCF5272_FEC_MII_TA          (0x00020000)/*      The management frame data maske.  Field  for data to be written  to *//* or read from PHY register.                                               */#define MCF5272_FEC_MII_DATA_MASK   (0x0000FFFF)/*      This define the MII unchanged MII frame management bits.            */#define MCF5272_FEC_MII_FIX_HDR     (0 |                  \                                     MCF5272_FEC_MII_ST | \                                     MCF5272_PHY_ADD |    \                                     MCF5272_FEC_MII_TA)/*      The PHY address mask.                                               */#define MCF5272_FEC_MII_PA          (0x1F << 23)/*      Define the interrupt mask.                                          */#define MCF5272_FEC_INTERRUPT_MASK (MCF5272_FEC_IMR_TXFEN    | \                                    MCF5272_FEC_IMR_RXFEN    )/************************************************** * FEC diagnostic counters **************************************************/typedef struct MCF5272_FEC_DIAG{    /*   We put all the receive statistics first.                           */    unsigned long     rx_pk_cnt;             /*   The   total   number   of */                                             /* received packets            */    unsigned long     rx_pk_cnt_sec;    unsigned long     rx_bytes_cnt;          /*   The   total   number   of */                                             /* received bytes              */    unsigned long     rx_bytes_cnt_sec;    unsigned long     rx_err_cnt;            /*   The total  number of  bad */                                             /* packets received            */    unsigned long     rx_long_frm_err_cnt;   /*   The total number of  long */                                             /* frame errors.               */    unsigned long     rx_short_frm_err_cnt;  /*   The total number of short */                                             /* frame errors.               */    unsigned long     rx_crc_err_cnt;        /*   The total  number of  CRC */                                             /* errors.                     */    unsigned long     rx_overrun_err_cnt;    /*   The   total   number   of */                                             /* overrun errors.             */    unsigned long     rx_trunc_error_cnt;    /*   The  total   numbers   of */                                             /* receieve  truncated  packet */                                             /* errors.                     */    /*   We  put  all  the  transmit  statistics  next.   start_of_transmit */    /* doesn't take any  space but  only separates  the receive  statistics */    /* from the transmit statistics.                                        */    char              start_of_transmit[0];    unsigned long     tx_pk_cnt;          /*   The    total    number    of */                                          /* transmitted packet             */    unsigned long     tx_pk_cnt_sec;    unsigned long     tx_bytes_cnt;       /*   The    total    number    of */                                          /* transmitted bytes              */    unsigned long     tx_bytes_cnt_sec;    unsigned long     tx_err_cnt;         /*   The total  number of  failed */                                          /* packet transmission            */    unsigned long     tx_def_cnt;         /*   The total number of  tansmit */                                          /* defers.                        */    unsigned long     tx_hb_err_cnt;      /*   The total  number  of  heart */                                          /* beat errors.                   */    unsigned long     tx_late_col_cnt;    /*   The  total  number  of  late */                                          /* collisions.                    */    unsigned long     tx_exes_retry_cnt;  /*   Excessive rettry count.      */    unsigned long     tx_retry_cnt;       /*   The total number of transmit */                                          /* retries.                       */    unsigned long     tx_underrun_cnt;    /*   The total number of transmit */                                          /* underruns.                     */    unsigned long     tx_carrrier_loss_cnt; /*   The   total   number    of */                                            /* trasnmit carrier losses.     */    unsigned long     tx_free_bd_cnt;     /*   The total  number  of  freed */                                          /* buffer descriptor.             */    unsigned long     tx_free_min_bd_cnt; /*   The minimum  number of  free */                                          /* buffer descriptor count.       */    unsigned long     tx_full_cnt;        /*   The  number  of  times  when */                                          /* there is no transmit buffer.   */    unsigned long     tx_not_complete_cnt;  /*   The number  of  times  the */                                            /* device   driver   discovered */                                            /* that the BD is still in  use */                                            /* by the FEC.                  */    unsigned long     internal_bus_error_cnt; /*   FEC bus error count.   A */                                              /* bus  error  occurred  when */                                              /* the FEC  was accessing  an */                                              /* internal bus.              */}MCF5272_FEC_DIAG __attribute__ ((aligned, packed));/* Ethernet driver status. */enum eth_drv_status_t{    ETH_DEV_UNKNOWN = 1,    ETH_DEV_DOWN = 2,    ETH_DEV_UP = 3};/* Ethernet duplex mode. */enum eth_drv_mode_t{    ETH_MODE_UNKNOWN = 1,    ETH_MODE_SIMPLEX = 2,    ETH_MODE_DUPLEX = 3};/* Ethernet speed values. */enum eth_speed_t{    ETH_SPEED_10MB  =   10*1000*1000,    ETH_SPEED_100MB =  100*1000*1000};/* Ethernet driver statistics information structure. */struct mcf5272_ether_drv_stats{    struct ifreq ifreq;                 // tell ioctl() which interface.    char description[ DESC_LEN ];       // Textual description of hardware    unsigned char snmp_chipset[ SNMP_CHIPSET_LEN ];                                        // SNMP ID of chipset    enum eth_drv_mode_t  duplex;               // 1 = UNKNOWN, 2 = SIMPLEX, 3 = DUPLEX    enum eth_drv_status_t operational;          // 1 = UNKNOWN, 2 = DOWN, 3 = UP    // These are general status information:    unsigned int speed;                 // 10,000,000 or 100,000,000                                        //     to infinity and beyond?    MCF5272_FEC_DIAG stats;}__attribute__ ((aligned, packed));#ifndef FIELD_OFFSET#define FIELD_OFFSET(type,field) (cyg_uint32)(&(((type*)0)->field)#endif /* FIELD_OFFSET *//* The value of 1 second in nanosecond. */#define SEC_IN_NS 1000000000/* 48-bit Ethernet Addresses */typedef u8_t ETH_ADDR[6];/* 16-bit Ethernet Frame Type, ie. Protocol */typedef u16_t ETH_FTYPE;/* Maximum and Minimum Ethernet Frame Size (Data Field) */#define ETH_DATA_MAX_SIZE	(1500)#define ETH_DATA_MIN_SIZE	(46)/* Maximum and Minimum Ethernet Frame Size (Entire frame) */#define ETH_MAX_SIZE	(ETH_DATA_MAX_SIZE+14)#define ETH_MIN_SIZE	(ETH_DATA_MIN_SIZE+14)/* Common Ethernet Frame definition */typedef struct{	ETH_ADDR dest;	ETH_ADDR src;	ETH_FTYPE type;	u8_t data[ETH_DATA_MAX_SIZE];    u32_t fcs;} eth_frame_hdr  __attribute__ ((aligned, packed));/* 802.1Q Ethernet Frame definition */typedef struct{	ETH_ADDR dest;	ETH_ADDR src;    u32_t header_802_1q;	ETH_FTYPE type;	u8_t data[ETH_DATA_MAX_SIZE];    u32_t fcs;} eth_802_1Q_frame_hdr  __attribute__ ((aligned, packed));/* Definition of macros that access the FEC registers */#define put_reg(_addr_,_value_) \   *((volatile u32_t*)&(_addr_)) = (cyg_uint32)(_value_)#define get_reg(_addr_) \   *(((volatile u32_t*)&(_addr_)))#endif /* _IF_MCF5272_FEC */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?