162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*****************************************************************************
362306a36Sopenharmony_ci *                                                                           *
462306a36Sopenharmony_ci * File: gmac.h                                                              *
562306a36Sopenharmony_ci * $Revision: 1.6 $                                                          *
662306a36Sopenharmony_ci * $Date: 2005/06/21 18:29:47 $                                              *
762306a36Sopenharmony_ci * Description:                                                              *
862306a36Sopenharmony_ci *  Generic MAC functionality.                                               *
962306a36Sopenharmony_ci *  part of the Chelsio 10Gb Ethernet Driver.                                *
1062306a36Sopenharmony_ci *                                                                           *
1162306a36Sopenharmony_ci *                                                                           *
1262306a36Sopenharmony_ci * http://www.chelsio.com                                                    *
1362306a36Sopenharmony_ci *                                                                           *
1462306a36Sopenharmony_ci * Copyright (c) 2003 - 2005 Chelsio Communications, Inc.                    *
1562306a36Sopenharmony_ci * All rights reserved.                                                      *
1662306a36Sopenharmony_ci *                                                                           *
1762306a36Sopenharmony_ci * Maintainers: maintainers@chelsio.com                                      *
1862306a36Sopenharmony_ci *                                                                           *
1962306a36Sopenharmony_ci * Authors: Dimitrios Michailidis   <dm@chelsio.com>                         *
2062306a36Sopenharmony_ci *          Tina Yang               <tainay@chelsio.com>                     *
2162306a36Sopenharmony_ci *          Felix Marti             <felix@chelsio.com>                      *
2262306a36Sopenharmony_ci *          Scott Bardone           <sbardone@chelsio.com>                   *
2362306a36Sopenharmony_ci *          Kurt Ottaway            <kottaway@chelsio.com>                   *
2462306a36Sopenharmony_ci *          Frank DiMambro          <frank@chelsio.com>                      *
2562306a36Sopenharmony_ci *                                                                           *
2662306a36Sopenharmony_ci * History:                                                                  *
2762306a36Sopenharmony_ci *                                                                           *
2862306a36Sopenharmony_ci ****************************************************************************/
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci#ifndef _CXGB_GMAC_H_
3162306a36Sopenharmony_ci#define _CXGB_GMAC_H_
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci#include "common.h"
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_cienum {
3662306a36Sopenharmony_ci	MAC_STATS_UPDATE_FAST,
3762306a36Sopenharmony_ci	MAC_STATS_UPDATE_FULL
3862306a36Sopenharmony_ci};
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_cienum {
4162306a36Sopenharmony_ci	MAC_DIRECTION_RX = 1,
4262306a36Sopenharmony_ci	MAC_DIRECTION_TX = 2
4362306a36Sopenharmony_ci};
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_cistruct cmac_statistics {
4662306a36Sopenharmony_ci	/* Transmit */
4762306a36Sopenharmony_ci	u64 TxOctetsOK;
4862306a36Sopenharmony_ci	u64 TxOctetsBad;
4962306a36Sopenharmony_ci	u64 TxUnicastFramesOK;
5062306a36Sopenharmony_ci	u64 TxMulticastFramesOK;
5162306a36Sopenharmony_ci	u64 TxBroadcastFramesOK;
5262306a36Sopenharmony_ci	u64 TxPauseFrames;
5362306a36Sopenharmony_ci	u64 TxFramesWithDeferredXmissions;
5462306a36Sopenharmony_ci	u64 TxLateCollisions;
5562306a36Sopenharmony_ci	u64 TxTotalCollisions;
5662306a36Sopenharmony_ci	u64 TxFramesAbortedDueToXSCollisions;
5762306a36Sopenharmony_ci	u64 TxUnderrun;
5862306a36Sopenharmony_ci	u64 TxLengthErrors;
5962306a36Sopenharmony_ci	u64 TxInternalMACXmitError;
6062306a36Sopenharmony_ci	u64 TxFramesWithExcessiveDeferral;
6162306a36Sopenharmony_ci	u64 TxFCSErrors;
6262306a36Sopenharmony_ci	u64 TxJumboFramesOK;
6362306a36Sopenharmony_ci	u64 TxJumboOctetsOK;
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ci	/* Receive */
6662306a36Sopenharmony_ci	u64 RxOctetsOK;
6762306a36Sopenharmony_ci	u64 RxOctetsBad;
6862306a36Sopenharmony_ci	u64 RxUnicastFramesOK;
6962306a36Sopenharmony_ci	u64 RxMulticastFramesOK;
7062306a36Sopenharmony_ci	u64 RxBroadcastFramesOK;
7162306a36Sopenharmony_ci	u64 RxPauseFrames;
7262306a36Sopenharmony_ci	u64 RxFCSErrors;
7362306a36Sopenharmony_ci	u64 RxAlignErrors;
7462306a36Sopenharmony_ci	u64 RxSymbolErrors;
7562306a36Sopenharmony_ci	u64 RxDataErrors;
7662306a36Sopenharmony_ci	u64 RxSequenceErrors;
7762306a36Sopenharmony_ci	u64 RxRuntErrors;
7862306a36Sopenharmony_ci	u64 RxJabberErrors;
7962306a36Sopenharmony_ci	u64 RxInternalMACRcvError;
8062306a36Sopenharmony_ci	u64 RxInRangeLengthErrors;
8162306a36Sopenharmony_ci	u64 RxOutOfRangeLengthField;
8262306a36Sopenharmony_ci	u64 RxFrameTooLongErrors;
8362306a36Sopenharmony_ci	u64 RxJumboFramesOK;
8462306a36Sopenharmony_ci	u64 RxJumboOctetsOK;
8562306a36Sopenharmony_ci};
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_cistruct cmac_ops {
8862306a36Sopenharmony_ci	void (*destroy)(struct cmac *);
8962306a36Sopenharmony_ci	int (*reset)(struct cmac *);
9062306a36Sopenharmony_ci	int (*interrupt_enable)(struct cmac *);
9162306a36Sopenharmony_ci	int (*interrupt_disable)(struct cmac *);
9262306a36Sopenharmony_ci	int (*interrupt_clear)(struct cmac *);
9362306a36Sopenharmony_ci	int (*interrupt_handler)(struct cmac *);
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci	int (*enable)(struct cmac *, int);
9662306a36Sopenharmony_ci	int (*disable)(struct cmac *, int);
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ci	int (*loopback_enable)(struct cmac *);
9962306a36Sopenharmony_ci	int (*loopback_disable)(struct cmac *);
10062306a36Sopenharmony_ci
10162306a36Sopenharmony_ci	int (*set_mtu)(struct cmac *, int mtu);
10262306a36Sopenharmony_ci	int (*set_rx_mode)(struct cmac *, struct t1_rx_mode *rm);
10362306a36Sopenharmony_ci
10462306a36Sopenharmony_ci	int (*set_speed_duplex_fc)(struct cmac *, int speed, int duplex, int fc);
10562306a36Sopenharmony_ci	int (*get_speed_duplex_fc)(struct cmac *, int *speed, int *duplex,
10662306a36Sopenharmony_ci				   int *fc);
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ci	const struct cmac_statistics *(*statistics_update)(struct cmac *, int);
10962306a36Sopenharmony_ci
11062306a36Sopenharmony_ci	int (*macaddress_get)(struct cmac *, u8 mac_addr[6]);
11162306a36Sopenharmony_ci	int (*macaddress_set)(struct cmac *, const u8 mac_addr[6]);
11262306a36Sopenharmony_ci};
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_citypedef struct _cmac_instance cmac_instance;
11562306a36Sopenharmony_ci
11662306a36Sopenharmony_cistruct cmac {
11762306a36Sopenharmony_ci	struct cmac_statistics stats;
11862306a36Sopenharmony_ci	adapter_t *adapter;
11962306a36Sopenharmony_ci	const struct cmac_ops *ops;
12062306a36Sopenharmony_ci	cmac_instance *instance;
12162306a36Sopenharmony_ci};
12262306a36Sopenharmony_ci
12362306a36Sopenharmony_cistruct gmac {
12462306a36Sopenharmony_ci	unsigned int stats_update_period;
12562306a36Sopenharmony_ci	struct cmac *(*create)(adapter_t *adapter, int index);
12662306a36Sopenharmony_ci	int (*reset)(adapter_t *);
12762306a36Sopenharmony_ci};
12862306a36Sopenharmony_ci
12962306a36Sopenharmony_ciextern const struct gmac t1_pm3393_ops;
13062306a36Sopenharmony_ciextern const struct gmac t1_vsc7326_ops;
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_ci#endif /* _CXGB_GMAC_H_ */
133