1/* SPDX-License-Identifier: GPL-2.0-only */
2/*****************************************************************************
3 *                                                                           *
4 * File: gmac.h                                                              *
5 * $Revision: 1.6 $                                                          *
6 * $Date: 2005/06/21 18:29:47 $                                              *
7 * Description:                                                              *
8 *  Generic MAC functionality.                                               *
9 *  part of the Chelsio 10Gb Ethernet Driver.                                *
10 *                                                                           *
11 *                                                                           *
12 * http://www.chelsio.com                                                    *
13 *                                                                           *
14 * Copyright (c) 2003 - 2005 Chelsio Communications, Inc.                    *
15 * All rights reserved.                                                      *
16 *                                                                           *
17 * Maintainers: maintainers@chelsio.com                                      *
18 *                                                                           *
19 * Authors: Dimitrios Michailidis   <dm@chelsio.com>                         *
20 *          Tina Yang               <tainay@chelsio.com>                     *
21 *          Felix Marti             <felix@chelsio.com>                      *
22 *          Scott Bardone           <sbardone@chelsio.com>                   *
23 *          Kurt Ottaway            <kottaway@chelsio.com>                   *
24 *          Frank DiMambro          <frank@chelsio.com>                      *
25 *                                                                           *
26 * History:                                                                  *
27 *                                                                           *
28 ****************************************************************************/
29
30#ifndef _CXGB_GMAC_H_
31#define _CXGB_GMAC_H_
32
33#include "common.h"
34
35enum {
36	MAC_STATS_UPDATE_FAST,
37	MAC_STATS_UPDATE_FULL
38};
39
40enum {
41	MAC_DIRECTION_RX = 1,
42	MAC_DIRECTION_TX = 2
43};
44
45struct cmac_statistics {
46	/* Transmit */
47	u64 TxOctetsOK;
48	u64 TxOctetsBad;
49	u64 TxUnicastFramesOK;
50	u64 TxMulticastFramesOK;
51	u64 TxBroadcastFramesOK;
52	u64 TxPauseFrames;
53	u64 TxFramesWithDeferredXmissions;
54	u64 TxLateCollisions;
55	u64 TxTotalCollisions;
56	u64 TxFramesAbortedDueToXSCollisions;
57	u64 TxUnderrun;
58	u64 TxLengthErrors;
59	u64 TxInternalMACXmitError;
60	u64 TxFramesWithExcessiveDeferral;
61	u64 TxFCSErrors;
62	u64 TxJumboFramesOK;
63	u64 TxJumboOctetsOK;
64
65	/* Receive */
66	u64 RxOctetsOK;
67	u64 RxOctetsBad;
68	u64 RxUnicastFramesOK;
69	u64 RxMulticastFramesOK;
70	u64 RxBroadcastFramesOK;
71	u64 RxPauseFrames;
72	u64 RxFCSErrors;
73	u64 RxAlignErrors;
74	u64 RxSymbolErrors;
75	u64 RxDataErrors;
76	u64 RxSequenceErrors;
77	u64 RxRuntErrors;
78	u64 RxJabberErrors;
79	u64 RxInternalMACRcvError;
80	u64 RxInRangeLengthErrors;
81	u64 RxOutOfRangeLengthField;
82	u64 RxFrameTooLongErrors;
83	u64 RxJumboFramesOK;
84	u64 RxJumboOctetsOK;
85};
86
87struct cmac_ops {
88	void (*destroy)(struct cmac *);
89	int (*reset)(struct cmac *);
90	int (*interrupt_enable)(struct cmac *);
91	int (*interrupt_disable)(struct cmac *);
92	int (*interrupt_clear)(struct cmac *);
93	int (*interrupt_handler)(struct cmac *);
94
95	int (*enable)(struct cmac *, int);
96	int (*disable)(struct cmac *, int);
97
98	int (*loopback_enable)(struct cmac *);
99	int (*loopback_disable)(struct cmac *);
100
101	int (*set_mtu)(struct cmac *, int mtu);
102	int (*set_rx_mode)(struct cmac *, struct t1_rx_mode *rm);
103
104	int (*set_speed_duplex_fc)(struct cmac *, int speed, int duplex, int fc);
105	int (*get_speed_duplex_fc)(struct cmac *, int *speed, int *duplex,
106				   int *fc);
107
108	const struct cmac_statistics *(*statistics_update)(struct cmac *, int);
109
110	int (*macaddress_get)(struct cmac *, u8 mac_addr[6]);
111	int (*macaddress_set)(struct cmac *, const u8 mac_addr[6]);
112};
113
114typedef struct _cmac_instance cmac_instance;
115
116struct cmac {
117	struct cmac_statistics stats;
118	adapter_t *adapter;
119	const struct cmac_ops *ops;
120	cmac_instance *instance;
121};
122
123struct gmac {
124	unsigned int stats_update_period;
125	struct cmac *(*create)(adapter_t *adapter, int index);
126	int (*reset)(adapter_t *);
127};
128
129extern const struct gmac t1_pm3393_ops;
130extern const struct gmac t1_vsc7326_ops;
131
132#endif /* _CXGB_GMAC_H_ */
133