diff options
author | Sandeep Gopalpet <Sandeep.Kumar@freescale.com> | 2009-11-02 02:03:40 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-11-03 02:40:59 -0500 |
commit | 7a8b3372e29ff58ebdf94def26703afabd287f11 (patch) | |
tree | 7d4ae47bb2ddc7de481fb4da4a4f9f31e808e1bf /drivers/net/gianfar.h | |
parent | 46ceb60ca80fa07703bc6eb8f4651f900dff5a82 (diff) |
gianfar: Basic Support for programming hash rules
This patch provides basic hash rules programming via the ethtool
interface.
Signed-off-by: Sandeep Gopalpet <Sandeep.Kumar@freescale.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/gianfar.h')
-rw-r--r-- | drivers/net/gianfar.h | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/drivers/net/gianfar.h b/drivers/net/gianfar.h index a2c1f963cdd6..44b63daa7ff3 100644 --- a/drivers/net/gianfar.h +++ b/drivers/net/gianfar.h | |||
@@ -381,6 +381,84 @@ extern const char gfar_driver_version[]; | |||
381 | #define BD_LFLAG(flags) ((flags) << 16) | 381 | #define BD_LFLAG(flags) ((flags) << 16) |
382 | #define BD_LENGTH_MASK 0x0000ffff | 382 | #define BD_LENGTH_MASK 0x0000ffff |
383 | 383 | ||
384 | #define CLASS_CODE_UNRECOG 0x00 | ||
385 | #define CLASS_CODE_DUMMY1 0x01 | ||
386 | #define CLASS_CODE_ETHERTYPE1 0x02 | ||
387 | #define CLASS_CODE_ETHERTYPE2 0x03 | ||
388 | #define CLASS_CODE_USER_PROG1 0x04 | ||
389 | #define CLASS_CODE_USER_PROG2 0x05 | ||
390 | #define CLASS_CODE_USER_PROG3 0x06 | ||
391 | #define CLASS_CODE_USER_PROG4 0x07 | ||
392 | #define CLASS_CODE_TCP_IPV4 0x08 | ||
393 | #define CLASS_CODE_UDP_IPV4 0x09 | ||
394 | #define CLASS_CODE_AH_ESP_IPV4 0x0a | ||
395 | #define CLASS_CODE_SCTP_IPV4 0x0b | ||
396 | #define CLASS_CODE_TCP_IPV6 0x0c | ||
397 | #define CLASS_CODE_UDP_IPV6 0x0d | ||
398 | #define CLASS_CODE_AH_ESP_IPV6 0x0e | ||
399 | #define CLASS_CODE_SCTP_IPV6 0x0f | ||
400 | |||
401 | #define FPR_FILER_MASK 0xFFFFFFFF | ||
402 | #define MAX_FILER_IDX 0xFF | ||
403 | |||
404 | /* RQFCR register bits */ | ||
405 | #define RQFCR_GPI 0x80000000 | ||
406 | #define RQFCR_HASHTBL_Q 0x00000000 | ||
407 | #define RQFCR_HASHTBL_0 0x00020000 | ||
408 | #define RQFCR_HASHTBL_1 0x00040000 | ||
409 | #define RQFCR_HASHTBL_2 0x00060000 | ||
410 | #define RQFCR_HASHTBL_3 0x00080000 | ||
411 | #define RQFCR_HASH 0x00010000 | ||
412 | #define RQFCR_CLE 0x00000200 | ||
413 | #define RQFCR_RJE 0x00000100 | ||
414 | #define RQFCR_AND 0x00000080 | ||
415 | #define RQFCR_CMP_EXACT 0x00000000 | ||
416 | #define RQFCR_CMP_MATCH 0x00000020 | ||
417 | #define RQFCR_CMP_NOEXACT 0x00000040 | ||
418 | #define RQFCR_CMP_NOMATCH 0x00000060 | ||
419 | |||
420 | /* RQFCR PID values */ | ||
421 | #define RQFCR_PID_MASK 0x00000000 | ||
422 | #define RQFCR_PID_PARSE 0x00000001 | ||
423 | #define RQFCR_PID_ARB 0x00000002 | ||
424 | #define RQFCR_PID_DAH 0x00000003 | ||
425 | #define RQFCR_PID_DAL 0x00000004 | ||
426 | #define RQFCR_PID_SAH 0x00000005 | ||
427 | #define RQFCR_PID_SAL 0x00000006 | ||
428 | #define RQFCR_PID_ETY 0x00000007 | ||
429 | #define RQFCR_PID_VID 0x00000008 | ||
430 | #define RQFCR_PID_PRI 0x00000009 | ||
431 | #define RQFCR_PID_TOS 0x0000000A | ||
432 | #define RQFCR_PID_L4P 0x0000000B | ||
433 | #define RQFCR_PID_DIA 0x0000000C | ||
434 | #define RQFCR_PID_SIA 0x0000000D | ||
435 | #define RQFCR_PID_DPT 0x0000000E | ||
436 | #define RQFCR_PID_SPT 0x0000000F | ||
437 | |||
438 | /* RQFPR when PID is 0x0001 */ | ||
439 | #define RQFPR_HDR_GE_512 0x00200000 | ||
440 | #define RQFPR_LERR 0x00100000 | ||
441 | #define RQFPR_RAR 0x00080000 | ||
442 | #define RQFPR_RARQ 0x00040000 | ||
443 | #define RQFPR_AR 0x00020000 | ||
444 | #define RQFPR_ARQ 0x00010000 | ||
445 | #define RQFPR_EBC 0x00008000 | ||
446 | #define RQFPR_VLN 0x00004000 | ||
447 | #define RQFPR_CFI 0x00002000 | ||
448 | #define RQFPR_JUM 0x00001000 | ||
449 | #define RQFPR_IPF 0x00000800 | ||
450 | #define RQFPR_FIF 0x00000400 | ||
451 | #define RQFPR_IPV4 0x00000200 | ||
452 | #define RQFPR_IPV6 0x00000100 | ||
453 | #define RQFPR_ICC 0x00000080 | ||
454 | #define RQFPR_ICV 0x00000040 | ||
455 | #define RQFPR_TCP 0x00000020 | ||
456 | #define RQFPR_UDP 0x00000010 | ||
457 | #define RQFPR_TUC 0x00000008 | ||
458 | #define RQFPR_TUV 0x00000004 | ||
459 | #define RQFPR_PER 0x00000002 | ||
460 | #define RQFPR_EER 0x00000001 | ||
461 | |||
384 | /* TxBD status field bits */ | 462 | /* TxBD status field bits */ |
385 | #define TXBD_READY 0x8000 | 463 | #define TXBD_READY 0x8000 |
386 | #define TXBD_PADCRC 0x4000 | 464 | #define TXBD_PADCRC 0x4000 |
@@ -959,6 +1037,8 @@ struct gfar_private { | |||
959 | unsigned int rx_stash_size; | 1037 | unsigned int rx_stash_size; |
960 | unsigned int rx_stash_index; | 1038 | unsigned int rx_stash_index; |
961 | 1039 | ||
1040 | u32 cur_filer_idx; | ||
1041 | |||
962 | struct sk_buff_head rx_recycle; | 1042 | struct sk_buff_head rx_recycle; |
963 | 1043 | ||
964 | struct vlan_group *vlgrp; | 1044 | struct vlan_group *vlgrp; |
@@ -1002,6 +1082,9 @@ struct gfar_private { | |||
1002 | struct gfar_extra_stats extra_stats; | 1082 | struct gfar_extra_stats extra_stats; |
1003 | }; | 1083 | }; |
1004 | 1084 | ||
1085 | extern unsigned int ftp_rqfpr[MAX_FILER_IDX + 1]; | ||
1086 | extern unsigned int ftp_rqfcr[MAX_FILER_IDX + 1]; | ||
1087 | |||
1005 | static inline u32 gfar_read(volatile unsigned __iomem *addr) | 1088 | static inline u32 gfar_read(volatile unsigned __iomem *addr) |
1006 | { | 1089 | { |
1007 | u32 val; | 1090 | u32 val; |
@@ -1014,6 +1097,16 @@ static inline void gfar_write(volatile unsigned __iomem *addr, u32 val) | |||
1014 | out_be32(addr, val); | 1097 | out_be32(addr, val); |
1015 | } | 1098 | } |
1016 | 1099 | ||
1100 | static inline void gfar_write_filer(struct gfar_private *priv, | ||
1101 | unsigned int far, unsigned int fcr, unsigned int fpr) | ||
1102 | { | ||
1103 | struct gfar __iomem *regs = priv->gfargrp[0].regs; | ||
1104 | |||
1105 | gfar_write(®s->rqfar, far); | ||
1106 | gfar_write(®s->rqfcr, fcr); | ||
1107 | gfar_write(®s->rqfpr, fpr); | ||
1108 | } | ||
1109 | |||
1017 | extern void lock_rx_qs(struct gfar_private *priv); | 1110 | extern void lock_rx_qs(struct gfar_private *priv); |
1018 | extern void lock_tx_qs(struct gfar_private *priv); | 1111 | extern void lock_tx_qs(struct gfar_private *priv); |
1019 | extern void unlock_rx_qs(struct gfar_private *priv); | 1112 | extern void unlock_rx_qs(struct gfar_private *priv); |