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