0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 #ifndef __GIANFAR_H
0020 #define __GIANFAR_H
0021
0022 #include <linux/kernel.h>
0023 #include <linux/sched.h>
0024 #include <linux/string.h>
0025 #include <linux/errno.h>
0026 #include <linux/slab.h>
0027 #include <linux/interrupt.h>
0028 #include <linux/delay.h>
0029 #include <linux/netdevice.h>
0030 #include <linux/etherdevice.h>
0031 #include <linux/skbuff.h>
0032 #include <linux/spinlock.h>
0033 #include <linux/mm.h>
0034 #include <linux/mii.h>
0035 #include <linux/phy.h>
0036
0037 #include <asm/io.h>
0038 #include <asm/irq.h>
0039 #include <linux/uaccess.h>
0040 #include <linux/module.h>
0041 #include <linux/crc32.h>
0042 #include <linux/workqueue.h>
0043 #include <linux/ethtool.h>
0044
0045 struct ethtool_flow_spec_container {
0046 struct ethtool_rx_flow_spec fs;
0047 struct list_head list;
0048 };
0049
0050 struct ethtool_rx_list {
0051 struct list_head list;
0052 unsigned int count;
0053 };
0054
0055
0056 #define GMAC_FCB_LEN 8
0057
0058
0059 #define GMAC_TXPAL_LEN 16
0060
0061
0062 #define DEFAULT_PADDING 2
0063
0064
0065 #define RXBUF_ALIGNMENT 64
0066
0067 #define DRV_NAME "gfar-enet"
0068
0069
0070 #define MAX_TX_QS 0x8
0071 #define MAX_RX_QS 0x8
0072
0073
0074 #define MAXGROUPS 0x2
0075
0076
0077 #define DEFAULT_TX_RING_SIZE 256
0078 #define DEFAULT_RX_RING_SIZE 256
0079
0080 #define GFAR_RX_BUFF_ALLOC 16
0081
0082 #define GFAR_RX_MAX_RING_SIZE 256
0083 #define GFAR_TX_MAX_RING_SIZE 256
0084
0085 #define FBTHR_SHIFT 24
0086 #define DEFAULT_RX_LFC_THR 16
0087 #define DEFAULT_LFC_PTVVAL 4
0088
0089 #define GFAR_RXB_TRUESIZE 2048
0090 #define GFAR_SKBFRAG_OVR (RXBUF_ALIGNMENT \
0091 + SKB_DATA_ALIGN(sizeof(struct skb_shared_info)))
0092 #define GFAR_RXB_SIZE rounddown(GFAR_RXB_TRUESIZE - GFAR_SKBFRAG_OVR, 64)
0093 #define GFAR_SKBFRAG_SIZE (GFAR_RXB_SIZE + GFAR_SKBFRAG_OVR)
0094
0095 #define TX_RING_MOD_MASK(size) (size-1)
0096 #define RX_RING_MOD_MASK(size) (size-1)
0097 #define GFAR_JUMBO_FRAME_SIZE 9600
0098
0099 #define DEFAULT_FIFO_TX_THR 0x100
0100 #define DEFAULT_FIFO_TX_STARVE 0x40
0101 #define DEFAULT_FIFO_TX_STARVE_OFF 0x80
0102
0103
0104 #define GFAR_EM_NUM 15
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116 #define GFAR_GBIT_TIME 512
0117 #define GFAR_100_TIME 2560
0118 #define GFAR_10_TIME 25600
0119
0120 #define DEFAULT_TX_COALESCE 1
0121 #define DEFAULT_TXCOUNT 16
0122 #define DEFAULT_TXTIME 21
0123
0124 #define DEFAULT_RXTIME 21
0125
0126 #define DEFAULT_RX_COALESCE 0
0127 #define DEFAULT_RXCOUNT 0
0128
0129
0130 #define MII_TBICON 0x11
0131
0132
0133 #define TBICON_CLK_SELECT 0x0020
0134
0135
0136 #define MACCFG1_SOFT_RESET 0x80000000
0137 #define MACCFG1_RESET_RX_MC 0x00080000
0138 #define MACCFG1_RESET_TX_MC 0x00040000
0139 #define MACCFG1_RESET_RX_FUN 0x00020000
0140 #define MACCFG1_RESET_TX_FUN 0x00010000
0141 #define MACCFG1_LOOPBACK 0x00000100
0142 #define MACCFG1_RX_FLOW 0x00000020
0143 #define MACCFG1_TX_FLOW 0x00000010
0144 #define MACCFG1_SYNCD_RX_EN 0x00000008
0145 #define MACCFG1_RX_EN 0x00000004
0146 #define MACCFG1_SYNCD_TX_EN 0x00000002
0147 #define MACCFG1_TX_EN 0x00000001
0148
0149 #define MACCFG2_INIT_SETTINGS 0x00007205
0150 #define MACCFG2_FULL_DUPLEX 0x00000001
0151 #define MACCFG2_IF 0x00000300
0152 #define MACCFG2_MII 0x00000100
0153 #define MACCFG2_GMII 0x00000200
0154 #define MACCFG2_HUGEFRAME 0x00000020
0155 #define MACCFG2_LENGTHCHECK 0x00000010
0156 #define MACCFG2_MPEN 0x00000008
0157
0158 #define ECNTRL_FIFM 0x00008000
0159 #define ECNTRL_INIT_SETTINGS 0x00001000
0160 #define ECNTRL_TBI_MODE 0x00000020
0161 #define ECNTRL_REDUCED_MODE 0x00000010
0162 #define ECNTRL_R100 0x00000008
0163 #define ECNTRL_REDUCED_MII_MODE 0x00000004
0164 #define ECNTRL_SGMII_MODE 0x00000002
0165
0166 #define MINFLR_INIT_SETTINGS 0x00000040
0167
0168
0169 #define TQUEUE_EN0 0x00008000
0170 #define TQUEUE_EN1 0x00004000
0171 #define TQUEUE_EN2 0x00002000
0172 #define TQUEUE_EN3 0x00001000
0173 #define TQUEUE_EN4 0x00000800
0174 #define TQUEUE_EN5 0x00000400
0175 #define TQUEUE_EN6 0x00000200
0176 #define TQUEUE_EN7 0x00000100
0177 #define TQUEUE_EN_ALL 0x0000FF00
0178
0179 #define TR03WT_WT0_MASK 0xFF000000
0180 #define TR03WT_WT1_MASK 0x00FF0000
0181 #define TR03WT_WT2_MASK 0x0000FF00
0182 #define TR03WT_WT3_MASK 0x000000FF
0183
0184 #define TR47WT_WT4_MASK 0xFF000000
0185 #define TR47WT_WT5_MASK 0x00FF0000
0186 #define TR47WT_WT6_MASK 0x0000FF00
0187 #define TR47WT_WT7_MASK 0x000000FF
0188
0189
0190 #define RQUEUE_EX0 0x00800000
0191 #define RQUEUE_EX1 0x00400000
0192 #define RQUEUE_EX2 0x00200000
0193 #define RQUEUE_EX3 0x00100000
0194 #define RQUEUE_EX4 0x00080000
0195 #define RQUEUE_EX5 0x00040000
0196 #define RQUEUE_EX6 0x00020000
0197 #define RQUEUE_EX7 0x00010000
0198 #define RQUEUE_EX_ALL 0x00FF0000
0199
0200 #define RQUEUE_EN0 0x00000080
0201 #define RQUEUE_EN1 0x00000040
0202 #define RQUEUE_EN2 0x00000020
0203 #define RQUEUE_EN3 0x00000010
0204 #define RQUEUE_EN4 0x00000008
0205 #define RQUEUE_EN5 0x00000004
0206 #define RQUEUE_EN6 0x00000002
0207 #define RQUEUE_EN7 0x00000001
0208 #define RQUEUE_EN_ALL 0x000000FF
0209
0210
0211 #define DMACTRL_INIT_SETTINGS 0x000000c3
0212 #define DMACTRL_GRS 0x00000010
0213 #define DMACTRL_GTS 0x00000008
0214
0215 #define TSTAT_CLEAR_THALT_ALL 0xFF000000
0216 #define TSTAT_CLEAR_THALT 0x80000000
0217 #define TSTAT_CLEAR_THALT0 0x80000000
0218 #define TSTAT_CLEAR_THALT1 0x40000000
0219 #define TSTAT_CLEAR_THALT2 0x20000000
0220 #define TSTAT_CLEAR_THALT3 0x10000000
0221 #define TSTAT_CLEAR_THALT4 0x08000000
0222 #define TSTAT_CLEAR_THALT5 0x04000000
0223 #define TSTAT_CLEAR_THALT6 0x02000000
0224 #define TSTAT_CLEAR_THALT7 0x01000000
0225
0226
0227 #define IC_ICEN 0x80000000
0228 #define IC_ICFT_MASK 0x1fe00000
0229 #define IC_ICFT_SHIFT 21
0230 #define mk_ic_icft(x) \
0231 (((unsigned int)x << IC_ICFT_SHIFT)&IC_ICFT_MASK)
0232 #define IC_ICTT_MASK 0x0000ffff
0233 #define mk_ic_ictt(x) (x&IC_ICTT_MASK)
0234
0235 #define mk_ic_value(count, time) (IC_ICEN | \
0236 mk_ic_icft(count) | \
0237 mk_ic_ictt(time))
0238 #define get_icft_value(ic) (((unsigned long)ic & IC_ICFT_MASK) >> \
0239 IC_ICFT_SHIFT)
0240 #define get_ictt_value(ic) ((unsigned long)ic & IC_ICTT_MASK)
0241
0242 #define DEFAULT_TXIC mk_ic_value(DEFAULT_TXCOUNT, DEFAULT_TXTIME)
0243 #define DEFAULT_RXIC mk_ic_value(DEFAULT_RXCOUNT, DEFAULT_RXTIME)
0244
0245 #define RCTRL_TS_ENABLE 0x01000000
0246 #define RCTRL_PAL_MASK 0x001f0000
0247 #define RCTRL_LFC 0x00004000
0248 #define RCTRL_VLEX 0x00002000
0249 #define RCTRL_FILREN 0x00001000
0250 #define RCTRL_GHTX 0x00000400
0251 #define RCTRL_IPCSEN 0x00000200
0252 #define RCTRL_TUCSEN 0x00000100
0253 #define RCTRL_PRSDEP_MASK 0x000000c0
0254 #define RCTRL_PRSDEP_INIT 0x000000c0
0255 #define RCTRL_PRSFM 0x00000020
0256 #define RCTRL_PROM 0x00000008
0257 #define RCTRL_EMEN 0x00000002
0258 #define RCTRL_REQ_PARSER (RCTRL_VLEX | RCTRL_IPCSEN | \
0259 RCTRL_TUCSEN | RCTRL_FILREN)
0260 #define RCTRL_CHECKSUMMING (RCTRL_IPCSEN | RCTRL_TUCSEN | \
0261 RCTRL_PRSDEP_INIT)
0262 #define RCTRL_EXTHASH (RCTRL_GHTX)
0263 #define RCTRL_VLAN (RCTRL_PRSDEP_INIT)
0264 #define RCTRL_PADDING(x) ((x << 16) & RCTRL_PAL_MASK)
0265
0266
0267 #define RSTAT_CLEAR_RHALT 0x00800000
0268 #define RSTAT_CLEAR_RXF0 0x00000080
0269 #define RSTAT_RXF_MASK 0x000000ff
0270
0271 #define TCTRL_IPCSEN 0x00004000
0272 #define TCTRL_TUCSEN 0x00002000
0273 #define TCTRL_VLINS 0x00001000
0274 #define TCTRL_THDF 0x00000800
0275 #define TCTRL_RFCPAUSE 0x00000010
0276 #define TCTRL_TFCPAUSE 0x00000008
0277 #define TCTRL_TXSCHED_MASK 0x00000006
0278 #define TCTRL_TXSCHED_INIT 0x00000000
0279
0280 #define TCTRL_TXSCHED_PRIO 0x00000002
0281
0282 #define TCTRL_TXSCHED_WRRS 0x00000004
0283
0284
0285
0286
0287 #define DEFAULT_WRRS_WEIGHT 0x18181818
0288
0289 #define TCTRL_INIT_CSUM (TCTRL_TUCSEN | TCTRL_IPCSEN)
0290
0291 #define IEVENT_INIT_CLEAR 0xffffffff
0292 #define IEVENT_BABR 0x80000000
0293 #define IEVENT_RXC 0x40000000
0294 #define IEVENT_BSY 0x20000000
0295 #define IEVENT_EBERR 0x10000000
0296 #define IEVENT_MSRO 0x04000000
0297 #define IEVENT_GTSC 0x02000000
0298 #define IEVENT_BABT 0x01000000
0299 #define IEVENT_TXC 0x00800000
0300 #define IEVENT_TXE 0x00400000
0301 #define IEVENT_TXB 0x00200000
0302 #define IEVENT_TXF 0x00100000
0303 #define IEVENT_LC 0x00040000
0304 #define IEVENT_CRL 0x00020000
0305 #define IEVENT_XFUN 0x00010000
0306 #define IEVENT_RXB0 0x00008000
0307 #define IEVENT_MAG 0x00000800
0308 #define IEVENT_GRSC 0x00000100
0309 #define IEVENT_RXF0 0x00000080
0310 #define IEVENT_FGPI 0x00000010
0311 #define IEVENT_FIR 0x00000008
0312 #define IEVENT_FIQ 0x00000004
0313 #define IEVENT_DPE 0x00000002
0314 #define IEVENT_PERR 0x00000001
0315 #define IEVENT_RX_MASK (IEVENT_RXB0 | IEVENT_RXF0 | IEVENT_BSY)
0316 #define IEVENT_TX_MASK (IEVENT_TXB | IEVENT_TXF)
0317 #define IEVENT_RTX_MASK (IEVENT_RX_MASK | IEVENT_TX_MASK)
0318 #define IEVENT_ERR_MASK \
0319 (IEVENT_RXC | IEVENT_BSY | IEVENT_EBERR | IEVENT_MSRO | \
0320 IEVENT_BABT | IEVENT_TXC | IEVENT_TXE | IEVENT_LC \
0321 | IEVENT_CRL | IEVENT_XFUN | IEVENT_DPE | IEVENT_PERR \
0322 | IEVENT_MAG | IEVENT_BABR)
0323
0324 #define IMASK_INIT_CLEAR 0x00000000
0325 #define IMASK_BABR 0x80000000
0326 #define IMASK_RXC 0x40000000
0327 #define IMASK_BSY 0x20000000
0328 #define IMASK_EBERR 0x10000000
0329 #define IMASK_MSRO 0x04000000
0330 #define IMASK_GTSC 0x02000000
0331 #define IMASK_BABT 0x01000000
0332 #define IMASK_TXC 0x00800000
0333 #define IMASK_TXEEN 0x00400000
0334 #define IMASK_TXBEN 0x00200000
0335 #define IMASK_TXFEN 0x00100000
0336 #define IMASK_LC 0x00040000
0337 #define IMASK_CRL 0x00020000
0338 #define IMASK_XFUN 0x00010000
0339 #define IMASK_RXB0 0x00008000
0340 #define IMASK_MAG 0x00000800
0341 #define IMASK_GRSC 0x00000100
0342 #define IMASK_RXFEN0 0x00000080
0343 #define IMASK_FGPI 0x00000010
0344 #define IMASK_FIR 0x00000008
0345 #define IMASK_FIQ 0x00000004
0346 #define IMASK_DPE 0x00000002
0347 #define IMASK_PERR 0x00000001
0348 #define IMASK_DEFAULT (IMASK_TXEEN | IMASK_TXFEN | IMASK_TXBEN | \
0349 IMASK_RXFEN0 | IMASK_BSY | IMASK_EBERR | IMASK_BABR | \
0350 IMASK_XFUN | IMASK_RXC | IMASK_BABT | IMASK_DPE \
0351 | IMASK_PERR)
0352 #define IMASK_RX_DEFAULT (IMASK_RXFEN0 | IMASK_BSY)
0353 #define IMASK_TX_DEFAULT (IMASK_TXFEN | IMASK_TXBEN)
0354
0355 #define IMASK_RX_DISABLED ((~(IMASK_RX_DEFAULT)) & IMASK_DEFAULT)
0356 #define IMASK_TX_DISABLED ((~(IMASK_TX_DEFAULT)) & IMASK_DEFAULT)
0357
0358
0359
0360
0361 #define ATTR_BDSTASH 0x00000800
0362
0363 #define ATTR_BUFSTASH 0x00004000
0364
0365 #define ATTR_SNOOPING 0x000000c0
0366 #define ATTR_INIT_SETTINGS ATTR_SNOOPING
0367
0368 #define ATTRELI_INIT_SETTINGS 0x0
0369 #define ATTRELI_EL_MASK 0x3fff0000
0370 #define ATTRELI_EL(x) (x << 16)
0371 #define ATTRELI_EI_MASK 0x00003fff
0372 #define ATTRELI_EI(x) (x)
0373
0374 #define BD_LFLAG(flags) ((flags) << 16)
0375 #define BD_LENGTH_MASK 0x0000ffff
0376
0377 #define FPR_FILER_MASK 0xFFFFFFFF
0378 #define MAX_FILER_IDX 0xFF
0379
0380
0381
0382 #define DEFAULT_8RXQ_RIR0 0x05397700
0383
0384 #define DEFAULT_2RXQ_RIR0 0x04104100
0385
0386
0387 #define RQFCR_GPI 0x80000000
0388 #define RQFCR_HASHTBL_Q 0x00000000
0389 #define RQFCR_HASHTBL_0 0x00020000
0390 #define RQFCR_HASHTBL_1 0x00040000
0391 #define RQFCR_HASHTBL_2 0x00060000
0392 #define RQFCR_HASHTBL_3 0x00080000
0393 #define RQFCR_HASH 0x00010000
0394 #define RQFCR_QUEUE 0x0000FC00
0395 #define RQFCR_CLE 0x00000200
0396 #define RQFCR_RJE 0x00000100
0397 #define RQFCR_AND 0x00000080
0398 #define RQFCR_CMP_EXACT 0x00000000
0399 #define RQFCR_CMP_MATCH 0x00000020
0400 #define RQFCR_CMP_NOEXACT 0x00000040
0401 #define RQFCR_CMP_NOMATCH 0x00000060
0402
0403
0404 #define RQFCR_PID_MASK 0x00000000
0405 #define RQFCR_PID_PARSE 0x00000001
0406 #define RQFCR_PID_ARB 0x00000002
0407 #define RQFCR_PID_DAH 0x00000003
0408 #define RQFCR_PID_DAL 0x00000004
0409 #define RQFCR_PID_SAH 0x00000005
0410 #define RQFCR_PID_SAL 0x00000006
0411 #define RQFCR_PID_ETY 0x00000007
0412 #define RQFCR_PID_VID 0x00000008
0413 #define RQFCR_PID_PRI 0x00000009
0414 #define RQFCR_PID_TOS 0x0000000A
0415 #define RQFCR_PID_L4P 0x0000000B
0416 #define RQFCR_PID_DIA 0x0000000C
0417 #define RQFCR_PID_SIA 0x0000000D
0418 #define RQFCR_PID_DPT 0x0000000E
0419 #define RQFCR_PID_SPT 0x0000000F
0420
0421
0422 #define RQFPR_HDR_GE_512 0x00200000
0423 #define RQFPR_LERR 0x00100000
0424 #define RQFPR_RAR 0x00080000
0425 #define RQFPR_RARQ 0x00040000
0426 #define RQFPR_AR 0x00020000
0427 #define RQFPR_ARQ 0x00010000
0428 #define RQFPR_EBC 0x00008000
0429 #define RQFPR_VLN 0x00004000
0430 #define RQFPR_CFI 0x00002000
0431 #define RQFPR_JUM 0x00001000
0432 #define RQFPR_IPF 0x00000800
0433 #define RQFPR_FIF 0x00000400
0434 #define RQFPR_IPV4 0x00000200
0435 #define RQFPR_IPV6 0x00000100
0436 #define RQFPR_ICC 0x00000080
0437 #define RQFPR_ICV 0x00000040
0438 #define RQFPR_TCP 0x00000020
0439 #define RQFPR_UDP 0x00000010
0440 #define RQFPR_TUC 0x00000008
0441 #define RQFPR_TUV 0x00000004
0442 #define RQFPR_PER 0x00000002
0443 #define RQFPR_EER 0x00000001
0444
0445
0446 #define CAR1_C164 0x80000000
0447 #define CAR1_C1127 0x40000000
0448 #define CAR1_C1255 0x20000000
0449 #define CAR1_C1511 0x10000000
0450 #define CAR1_C11K 0x08000000
0451 #define CAR1_C1MAX 0x04000000
0452 #define CAR1_C1MGV 0x02000000
0453 #define CAR1_C1REJ 0x00020000
0454 #define CAR1_C1RBY 0x00010000
0455 #define CAR1_C1RPK 0x00008000
0456 #define CAR1_C1RFC 0x00004000
0457 #define CAR1_C1RMC 0x00002000
0458 #define CAR1_C1RBC 0x00001000
0459 #define CAR1_C1RXC 0x00000800
0460 #define CAR1_C1RXP 0x00000400
0461 #define CAR1_C1RXU 0x00000200
0462 #define CAR1_C1RAL 0x00000100
0463 #define CAR1_C1RFL 0x00000080
0464 #define CAR1_C1RCD 0x00000040
0465 #define CAR1_C1RCS 0x00000020
0466 #define CAR1_C1RUN 0x00000010
0467 #define CAR1_C1ROV 0x00000008
0468 #define CAR1_C1RFR 0x00000004
0469 #define CAR1_C1RJB 0x00000002
0470 #define CAR1_C1RDR 0x00000001
0471
0472
0473 #define CAM1_M164 0x80000000
0474 #define CAM1_M1127 0x40000000
0475 #define CAM1_M1255 0x20000000
0476 #define CAM1_M1511 0x10000000
0477 #define CAM1_M11K 0x08000000
0478 #define CAM1_M1MAX 0x04000000
0479 #define CAM1_M1MGV 0x02000000
0480 #define CAM1_M1REJ 0x00020000
0481 #define CAM1_M1RBY 0x00010000
0482 #define CAM1_M1RPK 0x00008000
0483 #define CAM1_M1RFC 0x00004000
0484 #define CAM1_M1RMC 0x00002000
0485 #define CAM1_M1RBC 0x00001000
0486 #define CAM1_M1RXC 0x00000800
0487 #define CAM1_M1RXP 0x00000400
0488 #define CAM1_M1RXU 0x00000200
0489 #define CAM1_M1RAL 0x00000100
0490 #define CAM1_M1RFL 0x00000080
0491 #define CAM1_M1RCD 0x00000040
0492 #define CAM1_M1RCS 0x00000020
0493 #define CAM1_M1RUN 0x00000010
0494 #define CAM1_M1ROV 0x00000008
0495 #define CAM1_M1RFR 0x00000004
0496 #define CAM1_M1RJB 0x00000002
0497 #define CAM1_M1RDR 0x00000001
0498
0499
0500 #define TXBD_READY 0x8000
0501 #define TXBD_PADCRC 0x4000
0502 #define TXBD_WRAP 0x2000
0503 #define TXBD_INTERRUPT 0x1000
0504 #define TXBD_LAST 0x0800
0505 #define TXBD_CRC 0x0400
0506 #define TXBD_DEF 0x0200
0507 #define TXBD_HUGEFRAME 0x0080
0508 #define TXBD_LATECOLLISION 0x0080
0509 #define TXBD_RETRYLIMIT 0x0040
0510 #define TXBD_RETRYCOUNTMASK 0x003c
0511 #define TXBD_UNDERRUN 0x0002
0512 #define TXBD_TOE 0x0002
0513
0514
0515 #define TXFCB_VLN 0x80
0516 #define TXFCB_IP 0x40
0517 #define TXFCB_IP6 0x20
0518 #define TXFCB_TUP 0x10
0519 #define TXFCB_UDP 0x08
0520 #define TXFCB_CIP 0x04
0521 #define TXFCB_CTU 0x02
0522 #define TXFCB_NPH 0x01
0523 #define TXFCB_DEFAULT (TXFCB_IP|TXFCB_TUP|TXFCB_CTU|TXFCB_NPH)
0524
0525
0526 #define RXBD_EMPTY 0x8000
0527 #define RXBD_RO1 0x4000
0528 #define RXBD_WRAP 0x2000
0529 #define RXBD_INTERRUPT 0x1000
0530 #define RXBD_LAST 0x0800
0531 #define RXBD_FIRST 0x0400
0532 #define RXBD_MISS 0x0100
0533 #define RXBD_BROADCAST 0x0080
0534 #define RXBD_MULTICAST 0x0040
0535 #define RXBD_LARGE 0x0020
0536 #define RXBD_NONOCTET 0x0010
0537 #define RXBD_SHORT 0x0008
0538 #define RXBD_CRCERR 0x0004
0539 #define RXBD_OVERRUN 0x0002
0540 #define RXBD_TRUNCATED 0x0001
0541 #define RXBD_STATS 0x01ff
0542 #define RXBD_ERR (RXBD_LARGE | RXBD_SHORT | RXBD_NONOCTET \
0543 | RXBD_CRCERR | RXBD_OVERRUN \
0544 | RXBD_TRUNCATED)
0545
0546
0547 #define RXFCB_VLN 0x8000
0548 #define RXFCB_IP 0x4000
0549 #define RXFCB_IP6 0x2000
0550 #define RXFCB_TUP 0x1000
0551 #define RXFCB_CIP 0x0800
0552 #define RXFCB_CTU 0x0400
0553 #define RXFCB_EIP 0x0200
0554 #define RXFCB_ETU 0x0100
0555 #define RXFCB_CSUM_MASK 0x0f00
0556 #define RXFCB_PERR_MASK 0x000c
0557 #define RXFCB_PERR_BADL3 0x0008
0558
0559 #define GFAR_INT_NAME_MAX (IFNAMSIZ + 6)
0560
0561 #define GFAR_WOL_MAGIC 0x00000001
0562 #define GFAR_WOL_FILER_UCAST 0x00000002
0563
0564 struct txbd8
0565 {
0566 union {
0567 struct {
0568 __be16 status;
0569 __be16 length;
0570 };
0571 __be32 lstatus;
0572 };
0573 __be32 bufPtr;
0574 };
0575
0576 struct txfcb {
0577 u8 flags;
0578 u8 ptp;
0579 u8 l4os;
0580 u8 l3os;
0581 __be16 phcs;
0582 __be16 vlctl;
0583 };
0584
0585 struct rxbd8
0586 {
0587 union {
0588 struct {
0589 __be16 status;
0590 __be16 length;
0591 };
0592 __be32 lstatus;
0593 };
0594 __be32 bufPtr;
0595 };
0596
0597 struct rxfcb {
0598 __be16 flags;
0599 u8 rq;
0600 u8 pro;
0601 u16 reserved;
0602 __be16 vlctl;
0603 };
0604
0605 struct gianfar_skb_cb {
0606 unsigned int bytes_sent;
0607 };
0608
0609 #define GFAR_CB(skb) ((struct gianfar_skb_cb *)((skb)->cb))
0610
0611 struct rmon_mib
0612 {
0613 u32 tr64;
0614 u32 tr127;
0615 u32 tr255;
0616 u32 tr511;
0617 u32 tr1k;
0618 u32 trmax;
0619 u32 trmgv;
0620 u32 rbyt;
0621 u32 rpkt;
0622 u32 rfcs;
0623 u32 rmca;
0624 u32 rbca;
0625 u32 rxcf;
0626 u32 rxpf;
0627 u32 rxuo;
0628 u32 raln;
0629 u32 rflr;
0630 u32 rcde;
0631 u32 rcse;
0632 u32 rund;
0633 u32 rovr;
0634 u32 rfrg;
0635 u32 rjbr;
0636 u32 rdrp;
0637 u32 tbyt;
0638 u32 tpkt;
0639 u32 tmca;
0640 u32 tbca;
0641 u32 txpf;
0642 u32 tdfr;
0643 u32 tedf;
0644 u32 tscl;
0645 u32 tmcl;
0646 u32 tlcl;
0647 u32 txcl;
0648 u32 tncl;
0649 u8 res1[4];
0650 u32 tdrp;
0651 u32 tjbr;
0652 u32 tfcs;
0653 u32 txcf;
0654 u32 tovr;
0655 u32 tund;
0656 u32 tfrg;
0657 u32 car1;
0658 u32 car2;
0659 u32 cam1;
0660 u32 cam2;
0661 };
0662
0663 struct rmon_overflow {
0664
0665
0666
0667 spinlock_t lock;
0668 u32 imask;
0669 u64 rdrp;
0670 };
0671
0672 struct gfar_extra_stats {
0673 atomic64_t rx_alloc_err;
0674 atomic64_t rx_large;
0675 atomic64_t rx_short;
0676 atomic64_t rx_nonoctet;
0677 atomic64_t rx_crcerr;
0678 atomic64_t rx_overrun;
0679 atomic64_t rx_bsy;
0680 atomic64_t rx_babr;
0681 atomic64_t rx_trunc;
0682 atomic64_t eberr;
0683 atomic64_t tx_babt;
0684 atomic64_t tx_underrun;
0685 atomic64_t tx_timeout;
0686 };
0687
0688 #define GFAR_RMON_LEN ((sizeof(struct rmon_mib) - 16)/sizeof(u32))
0689 #define GFAR_EXTRA_STATS_LEN \
0690 (sizeof(struct gfar_extra_stats)/sizeof(atomic64_t))
0691
0692
0693 #define GFAR_STATS_LEN (GFAR_RMON_LEN + GFAR_EXTRA_STATS_LEN)
0694
0695 struct gfar {
0696 u32 tsec_id;
0697 u32 tsec_id2;
0698 u8 res1[8];
0699 u32 ievent;
0700 u32 imask;
0701 u32 edis;
0702 u32 emapg;
0703 u32 ecntrl;
0704 u32 minflr;
0705 u32 ptv;
0706 u32 dmactrl;
0707 u32 tbipa;
0708 u8 res2[28];
0709 u32 fifo_rx_pause;
0710
0711 u32 fifo_rx_pause_shutoff;
0712
0713 u32 fifo_rx_alarm;
0714
0715 u32 fifo_rx_alarm_shutoff;
0716
0717 u8 res3[44];
0718 u32 fifo_tx_thr;
0719 u8 res4[8];
0720 u32 fifo_tx_starve;
0721 u32 fifo_tx_starve_shutoff;
0722 u8 res5[96];
0723 u32 tctrl;
0724 u32 tstat;
0725 u32 dfvlan;
0726 u32 tbdlen;
0727 u32 txic;
0728 u32 tqueue;
0729 u8 res7[40];
0730 u32 tr03wt;
0731 u32 tr47wt;
0732 u8 res8[52];
0733 u32 tbdbph;
0734 u8 res9a[4];
0735 u32 tbptr0;
0736 u8 res9b[4];
0737 u32 tbptr1;
0738 u8 res9c[4];
0739 u32 tbptr2;
0740 u8 res9d[4];
0741 u32 tbptr3;
0742 u8 res9e[4];
0743 u32 tbptr4;
0744 u8 res9f[4];
0745 u32 tbptr5;
0746 u8 res9g[4];
0747 u32 tbptr6;
0748 u8 res9h[4];
0749 u32 tbptr7;
0750 u8 res9[64];
0751 u32 tbaseh;
0752 u32 tbase0;
0753 u8 res10a[4];
0754 u32 tbase1;
0755 u8 res10b[4];
0756 u32 tbase2;
0757 u8 res10c[4];
0758 u32 tbase3;
0759 u8 res10d[4];
0760 u32 tbase4;
0761 u8 res10e[4];
0762 u32 tbase5;
0763 u8 res10f[4];
0764 u32 tbase6;
0765 u8 res10g[4];
0766 u32 tbase7;
0767 u8 res10[192];
0768 u32 rctrl;
0769 u32 rstat;
0770 u8 res12[8];
0771 u32 rxic;
0772 u32 rqueue;
0773 u32 rir0;
0774 u32 rir1;
0775 u32 rir2;
0776 u32 rir3;
0777 u8 res13[8];
0778 u32 rbifx;
0779 u32 rqfar;
0780 u32 rqfcr;
0781 u32 rqfpr;
0782 u32 mrblr;
0783 u8 res14[56];
0784 u32 rbdbph;
0785 u8 res15a[4];
0786 u32 rbptr0;
0787 u8 res15b[4];
0788 u32 rbptr1;
0789 u8 res15c[4];
0790 u32 rbptr2;
0791 u8 res15d[4];
0792 u32 rbptr3;
0793 u8 res15e[4];
0794 u32 rbptr4;
0795 u8 res15f[4];
0796 u32 rbptr5;
0797 u8 res15g[4];
0798 u32 rbptr6;
0799 u8 res15h[4];
0800 u32 rbptr7;
0801 u8 res16[64];
0802 u32 rbaseh;
0803 u32 rbase0;
0804 u8 res17a[4];
0805 u32 rbase1;
0806 u8 res17b[4];
0807 u32 rbase2;
0808 u8 res17c[4];
0809 u32 rbase3;
0810 u8 res17d[4];
0811 u32 rbase4;
0812 u8 res17e[4];
0813 u32 rbase5;
0814 u8 res17f[4];
0815 u32 rbase6;
0816 u8 res17g[4];
0817 u32 rbase7;
0818 u8 res17[192];
0819 u32 maccfg1;
0820 u32 maccfg2;
0821 u32 ipgifg;
0822 u32 hafdup;
0823 u32 maxfrm;
0824 u8 res18[12];
0825 u8 gfar_mii_regs[24];
0826 u32 ifctrl;
0827 u32 ifstat;
0828 u32 macstnaddr1;
0829 u32 macstnaddr2;
0830 u32 mac01addr1;
0831 u32 mac01addr2;
0832 u32 mac02addr1;
0833 u32 mac02addr2;
0834 u32 mac03addr1;
0835 u32 mac03addr2;
0836 u32 mac04addr1;
0837 u32 mac04addr2;
0838 u32 mac05addr1;
0839 u32 mac05addr2;
0840 u32 mac06addr1;
0841 u32 mac06addr2;
0842 u32 mac07addr1;
0843 u32 mac07addr2;
0844 u32 mac08addr1;
0845 u32 mac08addr2;
0846 u32 mac09addr1;
0847 u32 mac09addr2;
0848 u32 mac10addr1;
0849 u32 mac10addr2;
0850 u32 mac11addr1;
0851 u32 mac11addr2;
0852 u32 mac12addr1;
0853 u32 mac12addr2;
0854 u32 mac13addr1;
0855 u32 mac13addr2;
0856 u32 mac14addr1;
0857 u32 mac14addr2;
0858 u32 mac15addr1;
0859 u32 mac15addr2;
0860 u8 res20[192];
0861 struct rmon_mib rmon;
0862 u32 rrej;
0863 u8 res21[188];
0864 u32 igaddr0;
0865 u32 igaddr1;
0866 u32 igaddr2;
0867 u32 igaddr3;
0868 u32 igaddr4;
0869 u32 igaddr5;
0870 u32 igaddr6;
0871 u32 igaddr7;
0872 u8 res22[96];
0873 u32 gaddr0;
0874 u32 gaddr1;
0875 u32 gaddr2;
0876 u32 gaddr3;
0877 u32 gaddr4;
0878 u32 gaddr5;
0879 u32 gaddr6;
0880 u32 gaddr7;
0881 u8 res23a[352];
0882 u32 fifocfg;
0883 u8 res23b[252];
0884 u8 res23c[248];
0885 u32 attr;
0886 u32 attreli;
0887 u32 rqprm0;
0888 u32 rqprm1;
0889 u32 rqprm2;
0890 u32 rqprm3;
0891 u32 rqprm4;
0892 u32 rqprm5;
0893 u32 rqprm6;
0894 u32 rqprm7;
0895 u8 res24[36];
0896 u32 rfbptr0;
0897 u8 res24a[4];
0898 u32 rfbptr1;
0899 u8 res24b[4];
0900 u32 rfbptr2;
0901 u8 res24c[4];
0902 u32 rfbptr3;
0903 u8 res24d[4];
0904 u32 rfbptr4;
0905 u8 res24e[4];
0906 u32 rfbptr5;
0907 u8 res24f[4];
0908 u32 rfbptr6;
0909 u8 res24g[4];
0910 u32 rfbptr7;
0911 u8 res24h[4];
0912 u8 res24x[556];
0913 u32 isrg0;
0914 u32 isrg1;
0915 u32 isrg2;
0916 u32 isrg3;
0917 u8 res25[16];
0918 u32 rxic0;
0919 u32 rxic1;
0920 u32 rxic2;
0921 u32 rxic3;
0922 u32 rxic4;
0923 u32 rxic5;
0924 u32 rxic6;
0925 u32 rxic7;
0926 u8 res26[32];
0927 u32 txic0;
0928 u32 txic1;
0929 u32 txic2;
0930 u32 txic3;
0931 u32 txic4;
0932 u32 txic5;
0933 u32 txic6;
0934 u32 txic7;
0935 u8 res27[208];
0936 };
0937
0938
0939 #define FSL_GIANFAR_DEV_HAS_GIGABIT 0x00000001
0940 #define FSL_GIANFAR_DEV_HAS_COALESCE 0x00000002
0941 #define FSL_GIANFAR_DEV_HAS_RMON 0x00000004
0942 #define FSL_GIANFAR_DEV_HAS_MULTI_INTR 0x00000008
0943 #define FSL_GIANFAR_DEV_HAS_CSUM 0x00000010
0944 #define FSL_GIANFAR_DEV_HAS_VLAN 0x00000020
0945 #define FSL_GIANFAR_DEV_HAS_EXTENDED_HASH 0x00000040
0946 #define FSL_GIANFAR_DEV_HAS_MAGIC_PACKET 0x00000100
0947 #define FSL_GIANFAR_DEV_HAS_BD_STASHING 0x00000200
0948 #define FSL_GIANFAR_DEV_HAS_BUF_STASHING 0x00000400
0949 #define FSL_GIANFAR_DEV_HAS_TIMER 0x00000800
0950 #define FSL_GIANFAR_DEV_HAS_WAKE_ON_FILER 0x00001000
0951 #define FSL_GIANFAR_DEV_HAS_RX_FILER 0x00002000
0952
0953 #if (MAXGROUPS == 2)
0954 #define DEFAULT_MAPPING 0xAA
0955 #else
0956 #define DEFAULT_MAPPING 0xFF
0957 #endif
0958
0959 #define ISRG_RR0 0x80000000
0960 #define ISRG_TR0 0x00800000
0961
0962
0963
0964
0965
0966
0967 enum {
0968 SQ_SG_MODE = 0,
0969 MQ_MG_MODE
0970 };
0971
0972
0973
0974
0975 struct tx_q_stats {
0976 u64 tx_packets;
0977 u64 tx_bytes;
0978 };
0979
0980
0981
0982
0983
0984
0985
0986
0987
0988
0989
0990
0991
0992
0993
0994
0995
0996
0997
0998
0999
1000 struct gfar_priv_tx_q {
1001
1002 spinlock_t txlock __attribute__ ((aligned (SMP_CACHE_BYTES)));
1003 struct txbd8 *tx_bd_base;
1004 struct txbd8 *cur_tx;
1005 unsigned int num_txbdfree;
1006 unsigned short skb_curtx;
1007 unsigned short tx_ring_size;
1008 struct tx_q_stats stats;
1009 struct gfar_priv_grp *grp;
1010
1011 struct net_device *dev;
1012 struct sk_buff **tx_skbuff;
1013 struct txbd8 *dirty_tx;
1014 unsigned short skb_dirtytx;
1015 unsigned short qindex;
1016
1017 unsigned int txcoalescing;
1018 unsigned long txic;
1019 dma_addr_t tx_bd_dma_base;
1020 };
1021
1022
1023
1024
1025 struct rx_q_stats {
1026 u64 rx_packets;
1027 u64 rx_bytes;
1028 u64 rx_dropped;
1029 };
1030
1031 struct gfar_rx_buff {
1032 dma_addr_t dma;
1033 struct page *page;
1034 unsigned int page_offset;
1035 };
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050 struct gfar_priv_rx_q {
1051 struct gfar_rx_buff *rx_buff __aligned(SMP_CACHE_BYTES);
1052 struct rxbd8 *rx_bd_base;
1053 struct net_device *ndev;
1054 struct device *dev;
1055 u16 rx_ring_size;
1056 u16 qindex;
1057 struct gfar_priv_grp *grp;
1058 u16 next_to_clean;
1059 u16 next_to_use;
1060 u16 next_to_alloc;
1061 struct sk_buff *skb;
1062 struct rx_q_stats stats;
1063 u32 __iomem *rfbptr;
1064 unsigned char rxcoalescing;
1065 unsigned long rxic;
1066 dma_addr_t rx_bd_dma_base;
1067 };
1068
1069 enum gfar_irqinfo_id {
1070 GFAR_TX = 0,
1071 GFAR_RX = 1,
1072 GFAR_ER = 2,
1073 GFAR_NUM_IRQS = 3
1074 };
1075
1076 struct gfar_irqinfo {
1077 unsigned int irq;
1078 char name[GFAR_INT_NAME_MAX];
1079 };
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089 struct gfar_priv_grp {
1090 spinlock_t grplock __aligned(SMP_CACHE_BYTES);
1091 struct napi_struct napi_rx;
1092 struct napi_struct napi_tx;
1093 struct gfar __iomem *regs;
1094 struct gfar_priv_tx_q *tx_queue;
1095 struct gfar_priv_rx_q *rx_queue;
1096 unsigned int tstat;
1097 unsigned int rstat;
1098
1099 struct gfar_private *priv;
1100 unsigned long num_tx_queues;
1101 unsigned long tx_bit_map;
1102 unsigned long num_rx_queues;
1103 unsigned long rx_bit_map;
1104
1105 struct gfar_irqinfo *irqinfo[GFAR_NUM_IRQS];
1106 };
1107
1108 #define gfar_irq(grp, ID) \
1109 ((grp)->irqinfo[GFAR_##ID])
1110
1111 enum gfar_errata {
1112 GFAR_ERRATA_74 = 0x01,
1113 GFAR_ERRATA_76 = 0x02,
1114 GFAR_ERRATA_A002 = 0x04,
1115 GFAR_ERRATA_12 = 0x08,
1116 };
1117
1118 enum gfar_dev_state {
1119 GFAR_DOWN = 1,
1120 GFAR_RESETTING
1121 };
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132 struct gfar_private {
1133 struct device *dev;
1134 struct net_device *ndev;
1135 enum gfar_errata errata;
1136
1137 u16 uses_rxfcb;
1138 u16 padding;
1139 u32 device_flags;
1140
1141
1142 int hwts_rx_en;
1143 int hwts_tx_en;
1144
1145 struct gfar_priv_tx_q *tx_queue[MAX_TX_QS];
1146 struct gfar_priv_rx_q *rx_queue[MAX_RX_QS];
1147 struct gfar_priv_grp gfargrp[MAXGROUPS];
1148
1149 unsigned long state;
1150
1151 unsigned short mode;
1152 unsigned int num_tx_queues;
1153 unsigned int num_rx_queues;
1154 unsigned int num_grps;
1155 int tx_actual_en;
1156
1157
1158 struct gfar_extra_stats extra_stats;
1159 struct rmon_overflow rmon_overflow;
1160
1161
1162 phy_interface_t interface;
1163 struct device_node *phy_node;
1164 struct device_node *tbi_node;
1165 struct mii_bus *mii_bus;
1166 int oldspeed;
1167 int oldduplex;
1168 int oldlink;
1169
1170 uint32_t msg_enable;
1171
1172 struct work_struct reset_task;
1173
1174 struct platform_device *ofdev;
1175 unsigned char
1176 extended_hash:1,
1177 bd_stash_en:1,
1178 rx_filer_enable:1,
1179
1180 prio_sched_en:1,
1181
1182 pause_aneg_en:1,
1183 tx_pause_en:1,
1184 rx_pause_en:1;
1185
1186
1187 unsigned int total_tx_ring_size;
1188 unsigned int total_rx_ring_size;
1189
1190 u32 rqueue;
1191 u32 tqueue;
1192
1193
1194 unsigned int rx_stash_size;
1195 unsigned int rx_stash_index;
1196
1197 u32 cur_filer_idx;
1198
1199
1200 struct ethtool_rx_list rx_list;
1201 struct mutex rx_queue_access;
1202
1203
1204 u32 __iomem *hash_regs[16];
1205 int hash_width;
1206
1207
1208 u16 wol_opts;
1209 u16 wol_supported;
1210
1211
1212 unsigned int ftp_rqfpr[MAX_FILER_IDX + 1];
1213 unsigned int ftp_rqfcr[MAX_FILER_IDX + 1];
1214 };
1215
1216
1217 static inline int gfar_has_errata(struct gfar_private *priv,
1218 enum gfar_errata err)
1219 {
1220 return priv->errata & err;
1221 }
1222
1223 static inline u32 gfar_read(unsigned __iomem *addr)
1224 {
1225 u32 val;
1226 val = ioread32be(addr);
1227 return val;
1228 }
1229
1230 static inline void gfar_write(unsigned __iomem *addr, u32 val)
1231 {
1232 iowrite32be(val, addr);
1233 }
1234
1235 static inline void gfar_write_filer(struct gfar_private *priv,
1236 unsigned int far, unsigned int fcr, unsigned int fpr)
1237 {
1238 struct gfar __iomem *regs = priv->gfargrp[0].regs;
1239
1240 gfar_write(®s->rqfar, far);
1241 gfar_write(®s->rqfcr, fcr);
1242 gfar_write(®s->rqfpr, fpr);
1243 }
1244
1245 static inline void gfar_read_filer(struct gfar_private *priv,
1246 unsigned int far, unsigned int *fcr, unsigned int *fpr)
1247 {
1248 struct gfar __iomem *regs = priv->gfargrp[0].regs;
1249
1250 gfar_write(®s->rqfar, far);
1251 *fcr = gfar_read(®s->rqfcr);
1252 *fpr = gfar_read(®s->rqfpr);
1253 }
1254
1255 static inline void gfar_write_isrg(struct gfar_private *priv)
1256 {
1257 struct gfar __iomem *regs = priv->gfargrp[0].regs;
1258 u32 __iomem *baddr = ®s->isrg0;
1259 u32 isrg = 0;
1260 int grp_idx, i;
1261
1262 for (grp_idx = 0; grp_idx < priv->num_grps; grp_idx++) {
1263 struct gfar_priv_grp *grp = &priv->gfargrp[grp_idx];
1264
1265 for_each_set_bit(i, &grp->rx_bit_map, priv->num_rx_queues) {
1266 isrg |= (ISRG_RR0 >> i);
1267 }
1268
1269 for_each_set_bit(i, &grp->tx_bit_map, priv->num_tx_queues) {
1270 isrg |= (ISRG_TR0 >> i);
1271 }
1272
1273 gfar_write(baddr, isrg);
1274
1275 baddr++;
1276 isrg = 0;
1277 }
1278 }
1279
1280 static inline int gfar_is_dma_stopped(struct gfar_private *priv)
1281 {
1282 struct gfar __iomem *regs = priv->gfargrp[0].regs;
1283
1284 return ((gfar_read(®s->ievent) & (IEVENT_GRSC | IEVENT_GTSC)) ==
1285 (IEVENT_GRSC | IEVENT_GTSC));
1286 }
1287
1288 static inline int gfar_is_rx_dma_stopped(struct gfar_private *priv)
1289 {
1290 struct gfar __iomem *regs = priv->gfargrp[0].regs;
1291
1292 return gfar_read(®s->ievent) & IEVENT_GRSC;
1293 }
1294
1295 static inline void gfar_wmb(void)
1296 {
1297 #if defined(CONFIG_PPC)
1298
1299
1300
1301
1302
1303
1304
1305 eieio();
1306 #else
1307 wmb();
1308 #endif
1309 }
1310
1311 static inline void gfar_clear_txbd_status(struct txbd8 *bdp)
1312 {
1313 u32 lstatus = be32_to_cpu(bdp->lstatus);
1314
1315 lstatus &= BD_LFLAG(TXBD_WRAP);
1316 bdp->lstatus = cpu_to_be32(lstatus);
1317 }
1318
1319 static inline int gfar_rxbd_unused(struct gfar_priv_rx_q *rxq)
1320 {
1321 if (rxq->next_to_clean > rxq->next_to_use)
1322 return rxq->next_to_clean - rxq->next_to_use - 1;
1323
1324 return rxq->rx_ring_size + rxq->next_to_clean - rxq->next_to_use - 1;
1325 }
1326
1327 static inline u32 gfar_rxbd_dma_lastfree(struct gfar_priv_rx_q *rxq)
1328 {
1329 struct rxbd8 *bdp;
1330 u32 bdp_dma;
1331 int i;
1332
1333 i = rxq->next_to_use ? rxq->next_to_use - 1 : rxq->rx_ring_size - 1;
1334 bdp = &rxq->rx_bd_base[i];
1335 bdp_dma = lower_32_bits(rxq->rx_bd_dma_base);
1336 bdp_dma += (uintptr_t)bdp - (uintptr_t)rxq->rx_bd_base;
1337
1338 return bdp_dma;
1339 }
1340
1341 int startup_gfar(struct net_device *dev);
1342 void stop_gfar(struct net_device *dev);
1343 void gfar_mac_reset(struct gfar_private *priv);
1344 int gfar_set_features(struct net_device *dev, netdev_features_t features);
1345
1346 extern const struct ethtool_ops gfar_ethtool_ops;
1347
1348 #define MAX_FILER_CACHE_IDX (2*(MAX_FILER_IDX))
1349
1350 #define RQFCR_PID_PRI_MASK 0xFFFFFFF8
1351 #define RQFCR_PID_L4P_MASK 0xFFFFFF00
1352 #define RQFCR_PID_VID_MASK 0xFFFFF000
1353 #define RQFCR_PID_PORT_MASK 0xFFFF0000
1354 #define RQFCR_PID_MAC_MASK 0xFF000000
1355
1356
1357 struct gfar_filer_entry {
1358 u32 ctrl;
1359 u32 prop;
1360 };
1361
1362
1363
1364 struct filer_table {
1365 u32 index;
1366 struct gfar_filer_entry fe[MAX_FILER_CACHE_IDX + 20];
1367 };
1368
1369 #endif