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