0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030 #ifndef _CXGB_GMAC_H_
0031 #define _CXGB_GMAC_H_
0032
0033 #include "common.h"
0034
0035 enum {
0036 MAC_STATS_UPDATE_FAST,
0037 MAC_STATS_UPDATE_FULL
0038 };
0039
0040 enum {
0041 MAC_DIRECTION_RX = 1,
0042 MAC_DIRECTION_TX = 2
0043 };
0044
0045 struct cmac_statistics {
0046
0047 u64 TxOctetsOK;
0048 u64 TxOctetsBad;
0049 u64 TxUnicastFramesOK;
0050 u64 TxMulticastFramesOK;
0051 u64 TxBroadcastFramesOK;
0052 u64 TxPauseFrames;
0053 u64 TxFramesWithDeferredXmissions;
0054 u64 TxLateCollisions;
0055 u64 TxTotalCollisions;
0056 u64 TxFramesAbortedDueToXSCollisions;
0057 u64 TxUnderrun;
0058 u64 TxLengthErrors;
0059 u64 TxInternalMACXmitError;
0060 u64 TxFramesWithExcessiveDeferral;
0061 u64 TxFCSErrors;
0062 u64 TxJumboFramesOK;
0063 u64 TxJumboOctetsOK;
0064
0065
0066 u64 RxOctetsOK;
0067 u64 RxOctetsBad;
0068 u64 RxUnicastFramesOK;
0069 u64 RxMulticastFramesOK;
0070 u64 RxBroadcastFramesOK;
0071 u64 RxPauseFrames;
0072 u64 RxFCSErrors;
0073 u64 RxAlignErrors;
0074 u64 RxSymbolErrors;
0075 u64 RxDataErrors;
0076 u64 RxSequenceErrors;
0077 u64 RxRuntErrors;
0078 u64 RxJabberErrors;
0079 u64 RxInternalMACRcvError;
0080 u64 RxInRangeLengthErrors;
0081 u64 RxOutOfRangeLengthField;
0082 u64 RxFrameTooLongErrors;
0083 u64 RxJumboFramesOK;
0084 u64 RxJumboOctetsOK;
0085 };
0086
0087 struct cmac_ops {
0088 void (*destroy)(struct cmac *);
0089 int (*reset)(struct cmac *);
0090 int (*interrupt_enable)(struct cmac *);
0091 int (*interrupt_disable)(struct cmac *);
0092 int (*interrupt_clear)(struct cmac *);
0093 int (*interrupt_handler)(struct cmac *);
0094
0095 int (*enable)(struct cmac *, int);
0096 int (*disable)(struct cmac *, int);
0097
0098 int (*loopback_enable)(struct cmac *);
0099 int (*loopback_disable)(struct cmac *);
0100
0101 int (*set_mtu)(struct cmac *, int mtu);
0102 int (*set_rx_mode)(struct cmac *, struct t1_rx_mode *rm);
0103
0104 int (*set_speed_duplex_fc)(struct cmac *, int speed, int duplex, int fc);
0105 int (*get_speed_duplex_fc)(struct cmac *, int *speed, int *duplex,
0106 int *fc);
0107
0108 const struct cmac_statistics *(*statistics_update)(struct cmac *, int);
0109
0110 int (*macaddress_get)(struct cmac *, u8 mac_addr[6]);
0111 int (*macaddress_set)(struct cmac *, const u8 mac_addr[6]);
0112 };
0113
0114 typedef struct _cmac_instance cmac_instance;
0115
0116 struct cmac {
0117 struct cmac_statistics stats;
0118 adapter_t *adapter;
0119 const struct cmac_ops *ops;
0120 cmac_instance *instance;
0121 };
0122
0123 struct gmac {
0124 unsigned int stats_update_period;
0125 struct cmac *(*create)(adapter_t *adapter, int index);
0126 int (*reset)(adapter_t *);
0127 };
0128
0129 extern const struct gmac t1_pm3393_ops;
0130 extern const struct gmac t1_vsc7326_ops;
0131
0132 #endif