RTEMS  5.1
GT64260eth.h
1 /* GT64260eth.h
2  *
3  * Copyright (c) 2002 Allegro Networks, Inc., Wasabi Systems, Inc.
4  * All rights reserved.
5  *
6  * RTEMS/Mvme5500 port 2004 by S. Kate Feng, <feng1@bnl.gov>,
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  * notice, this list of conditions and the following disclaimer in the
16  * documentation and/or other materials provided with the distribution.
17  * 3. All advertising materials mentioning features or use of this software
18  * must display the following acknowledgement:
19  * This product includes software developed for the NetBSD Project by
20  * Allegro Networks, Inc., and Wasabi Systems, Inc.
21  * 4. The name of Allegro Networks, Inc. may not be used to endorse
22  * or promote products derived from this software without specific prior
23  * written permission.
24  * 5. The name of Wasabi Systems, Inc. may not be used to endorse
25  * or promote products derived from this software without specific prior
26  * written permission.
27  *
28  * THIS SOFTWARE IS PROVIDED BY ALLEGRO NETWORKS, INC. AND
29  * WASABI SYSTEMS, INC. ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
30  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
31  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
32  * IN NO EVENT SHALL EITHER ALLEGRO NETWORKS, INC. OR WASABI SYSTEMS, INC.
33  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
34  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
35  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
36  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
37  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
38  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
39  * POSSIBILITY OF SUCH DAMAGE.
40  */
41 
42 /* Keep the ring sizes a power of two for efficiency.
43  Making the Tx ring too long decreases the effectiveness of channel
44  bonding and packet priority.
45  There are no ill effects from too-large receive rings. */
46 #define TX_RING_SIZE 32
47 #define GT_NEXTTX(x) ((x + 1) % TX_RING_SIZE )
48 #define TX_QUARTER_FULL TX_RING_SIZE/2
49 #define TX_HALF_FULL TX_RING_SIZE/2
50 #define RX_RING_SIZE 16
51 #define HASH_TABLE_SIZE 16
52 #define HASH_DRAM_SIZE HASH_TABLE_SIZE*1024 /* size of DRAM for hash table */
53 #define INTR_ERR_SIZE 16
54 
55 enum GTeth_txprio {
56  GE_TXPRIO_HI=1,
57  GE_TXPRIO_LO=0,
58  GE_TXPRIO_NONE=2
59 };
60 enum GTeth_rxprio {
61  GE_RXPRIO_HI=3,
62  GE_RXPRIO_MEDHI=2,
63  GE_RXPRIO_MEDLO=1,
64  GE_RXPRIO_LO=0
65 };
66 
67 struct GTeth_softc {
68  struct GTeth_desc txq_desc[TX_RING_SIZE]; /* transmit descriptor memory */
69  struct GTeth_desc rxq_desc[RX_RING_SIZE]; /* receive descriptor memory */
70  struct mbuf* txq_mbuf[TX_RING_SIZE]; /* transmit buffer memory */
71  struct mbuf* rxq_mbuf[RX_RING_SIZE]; /* receive buffer memory */
72  struct GTeth_softc *next_module;
73  volatile unsigned int intr_errsts[INTR_ERR_SIZE]; /* capture the right intr_status */
74  unsigned int intr_err_ptr1; /* ptr used in GTeth_error() */
75  unsigned int intr_err_ptr2; /* ptr used in ISR */
76  struct ifqueue txq_pendq; /* these are ready to go to the GT */
77  unsigned int txq_pending;
78  unsigned int txq_lo; /* next to be given to GT DMA */
79  unsigned int txq_fi; /* next to be free */
80  unsigned int txq_to_cpu; /* next to be returned to CPU */
81  unsigned int txq_ei_gapcount; /* counter until next EI */
82  unsigned int txq_nactive; /* number of active descriptors */
83  unsigned int txq_nintr; /* number of txq desc. send TX_EVENT */
84  unsigned int txq_outptr; /* where to put next transmit packet */
85  unsigned int txq_inptr; /* start of 1st queued tx packet */
86  unsigned int txq_free; /* free Tx queue slots. */
87  unsigned txq_intrbits; /* bits to write to EIMR */
88  unsigned txq_esdcmrbits; /* bits to write to ESDCMR */
89  unsigned txq_epsrbits; /* bits to test with EPSR */
90 
91  caddr_t txq_ectdp; /* offset to cur. tx desc ptr reg */
92  unsigned long txq_desc_busaddr; /* bus addr of tx descriptors */
93  caddr_t txq_buf_busaddr; /* bus addr of tx buffers */
94 
95  struct mbuf *rxq_curpkt; /* mbuf for current packet */
96  struct GTeth_desc *rxq_head_desc; /* rxq head descriptor */
97  unsigned int rxq_fi; /* next to be returned to CPU */
98  unsigned int rxq_active; /* # of descriptors given to GT */
99  unsigned rxq_intrbits; /* bits to write to EIMR */
100  unsigned long rxq_desc_busaddr; /* bus addr of rx descriptors */
101 
102  struct arpcom arpcom; /* rtems if structure, contains ifnet */
103  int sc_macno; /* which mac? 0, 1, or 2 */
104 
105  unsigned int sc_tickflags;
106  #define GE_TICK_TX_IFSTART 0x0001
107  #define GE_TICK_RX_RESTART 0x0002
108  unsigned int sc_flags;
109  #define GE_ALLMULTI 0x0001
110  #define GE_PHYSTSCHG 0x0002
111  #define GE_RXACTIVE 0x0004
112  unsigned sc_pcr; /* current EPCR value */
113  unsigned sc_pcxr; /* current EPCXR value */
114  unsigned sc_intrmask; /* current EIMR value */
115  unsigned sc_idlemask; /* suspended EIMR bits */
116  unsigned sc_max_frame_length; /* maximum frame length */
117  unsigned rx_buf_sz;
118 
119  /* Hash table related members */
120  unsigned long long *sc_hashtable;
121  unsigned int sc_hashmask; /* 0x1ff or 0x1fff */
122 
123  rtems_id daemonTid;
124  rtems_id daemonSync; /* synchronization with the daemon */
125  /* statistics */
126  struct {
127  volatile unsigned long rxInterrupts;
128 
129  volatile unsigned long txInterrupts;
130  unsigned long txMultiBuffPacket;
131  unsigned long txMultiMaxLen;
132  unsigned long txSinglMaxLen;
133  unsigned long txMultiMaxLoop;
134  unsigned long txBuffMaxLen;
135  unsigned long length_errors;
136  unsigned long frame_errors;
137  unsigned long crc_errors;
138  unsigned long or_errors; /* overrun error */
139  } stats;
140 };
Definition: GT64260ethreg.h:61
Definition: GT64260eth.h:67
Objects_Id rtems_id
Used to manage and manipulate RTEMS object identifiers.
Definition: types.h:83