xref: /OK3568_Linux_fs/kernel/drivers/net/ethernet/chelsio/cxgb/gmac.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*****************************************************************************
2*4882a593Smuzhiyun  *                                                                           *
3*4882a593Smuzhiyun  * File: gmac.h                                                              *
4*4882a593Smuzhiyun  * $Revision: 1.6 $                                                          *
5*4882a593Smuzhiyun  * $Date: 2005/06/21 18:29:47 $                                              *
6*4882a593Smuzhiyun  * Description:                                                              *
7*4882a593Smuzhiyun  *  Generic MAC functionality.                                               *
8*4882a593Smuzhiyun  *  part of the Chelsio 10Gb Ethernet Driver.                                *
9*4882a593Smuzhiyun  *                                                                           *
10*4882a593Smuzhiyun  * This program is free software; you can redistribute it and/or modify      *
11*4882a593Smuzhiyun  * it under the terms of the GNU General Public License, version 2, as       *
12*4882a593Smuzhiyun  * published by the Free Software Foundation.                                *
13*4882a593Smuzhiyun  *                                                                           *
14*4882a593Smuzhiyun  * You should have received a copy of the GNU General Public License along   *
15*4882a593Smuzhiyun  * with this program; if not, see <http://www.gnu.org/licenses/>.            *
16*4882a593Smuzhiyun  *                                                                           *
17*4882a593Smuzhiyun  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED    *
18*4882a593Smuzhiyun  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF      *
19*4882a593Smuzhiyun  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.                     *
20*4882a593Smuzhiyun  *                                                                           *
21*4882a593Smuzhiyun  * http://www.chelsio.com                                                    *
22*4882a593Smuzhiyun  *                                                                           *
23*4882a593Smuzhiyun  * Copyright (c) 2003 - 2005 Chelsio Communications, Inc.                    *
24*4882a593Smuzhiyun  * All rights reserved.                                                      *
25*4882a593Smuzhiyun  *                                                                           *
26*4882a593Smuzhiyun  * Maintainers: maintainers@chelsio.com                                      *
27*4882a593Smuzhiyun  *                                                                           *
28*4882a593Smuzhiyun  * Authors: Dimitrios Michailidis   <dm@chelsio.com>                         *
29*4882a593Smuzhiyun  *          Tina Yang               <tainay@chelsio.com>                     *
30*4882a593Smuzhiyun  *          Felix Marti             <felix@chelsio.com>                      *
31*4882a593Smuzhiyun  *          Scott Bardone           <sbardone@chelsio.com>                   *
32*4882a593Smuzhiyun  *          Kurt Ottaway            <kottaway@chelsio.com>                   *
33*4882a593Smuzhiyun  *          Frank DiMambro          <frank@chelsio.com>                      *
34*4882a593Smuzhiyun  *                                                                           *
35*4882a593Smuzhiyun  * History:                                                                  *
36*4882a593Smuzhiyun  *                                                                           *
37*4882a593Smuzhiyun  ****************************************************************************/
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun #ifndef _CXGB_GMAC_H_
40*4882a593Smuzhiyun #define _CXGB_GMAC_H_
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun #include "common.h"
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun enum {
45*4882a593Smuzhiyun 	MAC_STATS_UPDATE_FAST,
46*4882a593Smuzhiyun 	MAC_STATS_UPDATE_FULL
47*4882a593Smuzhiyun };
48*4882a593Smuzhiyun 
49*4882a593Smuzhiyun enum {
50*4882a593Smuzhiyun 	MAC_DIRECTION_RX = 1,
51*4882a593Smuzhiyun 	MAC_DIRECTION_TX = 2
52*4882a593Smuzhiyun };
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun struct cmac_statistics {
55*4882a593Smuzhiyun 	/* Transmit */
56*4882a593Smuzhiyun 	u64 TxOctetsOK;
57*4882a593Smuzhiyun 	u64 TxOctetsBad;
58*4882a593Smuzhiyun 	u64 TxUnicastFramesOK;
59*4882a593Smuzhiyun 	u64 TxMulticastFramesOK;
60*4882a593Smuzhiyun 	u64 TxBroadcastFramesOK;
61*4882a593Smuzhiyun 	u64 TxPauseFrames;
62*4882a593Smuzhiyun 	u64 TxFramesWithDeferredXmissions;
63*4882a593Smuzhiyun 	u64 TxLateCollisions;
64*4882a593Smuzhiyun 	u64 TxTotalCollisions;
65*4882a593Smuzhiyun 	u64 TxFramesAbortedDueToXSCollisions;
66*4882a593Smuzhiyun 	u64 TxUnderrun;
67*4882a593Smuzhiyun 	u64 TxLengthErrors;
68*4882a593Smuzhiyun 	u64 TxInternalMACXmitError;
69*4882a593Smuzhiyun 	u64 TxFramesWithExcessiveDeferral;
70*4882a593Smuzhiyun 	u64 TxFCSErrors;
71*4882a593Smuzhiyun 	u64 TxJumboFramesOK;
72*4882a593Smuzhiyun 	u64 TxJumboOctetsOK;
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun 	/* Receive */
75*4882a593Smuzhiyun 	u64 RxOctetsOK;
76*4882a593Smuzhiyun 	u64 RxOctetsBad;
77*4882a593Smuzhiyun 	u64 RxUnicastFramesOK;
78*4882a593Smuzhiyun 	u64 RxMulticastFramesOK;
79*4882a593Smuzhiyun 	u64 RxBroadcastFramesOK;
80*4882a593Smuzhiyun 	u64 RxPauseFrames;
81*4882a593Smuzhiyun 	u64 RxFCSErrors;
82*4882a593Smuzhiyun 	u64 RxAlignErrors;
83*4882a593Smuzhiyun 	u64 RxSymbolErrors;
84*4882a593Smuzhiyun 	u64 RxDataErrors;
85*4882a593Smuzhiyun 	u64 RxSequenceErrors;
86*4882a593Smuzhiyun 	u64 RxRuntErrors;
87*4882a593Smuzhiyun 	u64 RxJabberErrors;
88*4882a593Smuzhiyun 	u64 RxInternalMACRcvError;
89*4882a593Smuzhiyun 	u64 RxInRangeLengthErrors;
90*4882a593Smuzhiyun 	u64 RxOutOfRangeLengthField;
91*4882a593Smuzhiyun 	u64 RxFrameTooLongErrors;
92*4882a593Smuzhiyun 	u64 RxJumboFramesOK;
93*4882a593Smuzhiyun 	u64 RxJumboOctetsOK;
94*4882a593Smuzhiyun };
95*4882a593Smuzhiyun 
96*4882a593Smuzhiyun struct cmac_ops {
97*4882a593Smuzhiyun 	void (*destroy)(struct cmac *);
98*4882a593Smuzhiyun 	int (*reset)(struct cmac *);
99*4882a593Smuzhiyun 	int (*interrupt_enable)(struct cmac *);
100*4882a593Smuzhiyun 	int (*interrupt_disable)(struct cmac *);
101*4882a593Smuzhiyun 	int (*interrupt_clear)(struct cmac *);
102*4882a593Smuzhiyun 	int (*interrupt_handler)(struct cmac *);
103*4882a593Smuzhiyun 
104*4882a593Smuzhiyun 	int (*enable)(struct cmac *, int);
105*4882a593Smuzhiyun 	int (*disable)(struct cmac *, int);
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun 	int (*loopback_enable)(struct cmac *);
108*4882a593Smuzhiyun 	int (*loopback_disable)(struct cmac *);
109*4882a593Smuzhiyun 
110*4882a593Smuzhiyun 	int (*set_mtu)(struct cmac *, int mtu);
111*4882a593Smuzhiyun 	int (*set_rx_mode)(struct cmac *, struct t1_rx_mode *rm);
112*4882a593Smuzhiyun 
113*4882a593Smuzhiyun 	int (*set_speed_duplex_fc)(struct cmac *, int speed, int duplex, int fc);
114*4882a593Smuzhiyun 	int (*get_speed_duplex_fc)(struct cmac *, int *speed, int *duplex,
115*4882a593Smuzhiyun 				   int *fc);
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun 	const struct cmac_statistics *(*statistics_update)(struct cmac *, int);
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun 	int (*macaddress_get)(struct cmac *, u8 mac_addr[6]);
120*4882a593Smuzhiyun 	int (*macaddress_set)(struct cmac *, u8 mac_addr[6]);
121*4882a593Smuzhiyun };
122*4882a593Smuzhiyun 
123*4882a593Smuzhiyun typedef struct _cmac_instance cmac_instance;
124*4882a593Smuzhiyun 
125*4882a593Smuzhiyun struct cmac {
126*4882a593Smuzhiyun 	struct cmac_statistics stats;
127*4882a593Smuzhiyun 	adapter_t *adapter;
128*4882a593Smuzhiyun 	const struct cmac_ops *ops;
129*4882a593Smuzhiyun 	cmac_instance *instance;
130*4882a593Smuzhiyun };
131*4882a593Smuzhiyun 
132*4882a593Smuzhiyun struct gmac {
133*4882a593Smuzhiyun 	unsigned int stats_update_period;
134*4882a593Smuzhiyun 	struct cmac *(*create)(adapter_t *adapter, int index);
135*4882a593Smuzhiyun 	int (*reset)(adapter_t *);
136*4882a593Smuzhiyun };
137*4882a593Smuzhiyun 
138*4882a593Smuzhiyun extern const struct gmac t1_pm3393_ops;
139*4882a593Smuzhiyun extern const struct gmac t1_vsc7326_ops;
140*4882a593Smuzhiyun 
141*4882a593Smuzhiyun #endif /* _CXGB_GMAC_H_ */
142