diff options
author | Giuseppe CAVALLARO <peppe.cavallaro@st.com> | 2011-10-26 15:43:09 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-10-27 23:17:12 -0400 |
commit | 3c20f72f9108b2fcf30ec63d8a4203736c01ccd0 (patch) | |
tree | 8310be8eba2e616fc3b93e5c7e379343c0480710 /drivers/net/ethernet/stmicro/stmmac/descs.h | |
parent | e2c57f839c63f452b4704e048c8db9cf669ed410 (diff) |
stmmac: update normal descriptor structure (v2)
This patch updates the normal descriptor structure
to work fine on new GMAC Synopsys chips.
Normal descriptors were designed on the old MAC10/100
databook 1.91 where some bits were reserved: for example
the tx checksum insertion and rx checksum offload.
The patch maintains the back-compatibility with old
MAC devices (tested on STx7109 MAC10/100) and adds new
fields that actually new GMAC devices can use.
For example, STx7109 (MAC10/100) will pass from the platform
tx_coe = 0, enh_desc = 0, has_gmac = 0.
A platform like Loongson1B (GMAC) will pass:
tx_coe = 1, enh_desc = 0, has_gmac = 1.
Thanks to Kelvin, he enhanced the normal descriptors for
GMAC (on MIPS Loongson1B platform).
Signed-off-by: Kelvin Cheung <keguang.zhang@gmail.com>
Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro@st.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/stmicro/stmmac/descs.h')
-rw-r--r-- | drivers/net/ethernet/stmicro/stmmac/descs.h | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/drivers/net/ethernet/stmicro/stmmac/descs.h b/drivers/net/ethernet/stmicro/stmmac/descs.h index 63a03e26469..9820ec842cc 100644 --- a/drivers/net/ethernet/stmicro/stmmac/descs.h +++ b/drivers/net/ethernet/stmicro/stmmac/descs.h | |||
@@ -25,33 +25,34 @@ struct dma_desc { | |||
25 | union { | 25 | union { |
26 | struct { | 26 | struct { |
27 | /* RDES0 */ | 27 | /* RDES0 */ |
28 | u32 reserved1:1; | 28 | u32 payload_csum_error:1; |
29 | u32 crc_error:1; | 29 | u32 crc_error:1; |
30 | u32 dribbling:1; | 30 | u32 dribbling:1; |
31 | u32 mii_error:1; | 31 | u32 mii_error:1; |
32 | u32 receive_watchdog:1; | 32 | u32 receive_watchdog:1; |
33 | u32 frame_type:1; | 33 | u32 frame_type:1; |
34 | u32 collision:1; | 34 | u32 collision:1; |
35 | u32 frame_too_long:1; | 35 | u32 ipc_csum_error:1; |
36 | u32 last_descriptor:1; | 36 | u32 last_descriptor:1; |
37 | u32 first_descriptor:1; | 37 | u32 first_descriptor:1; |
38 | u32 multicast_frame:1; | 38 | u32 vlan_tag:1; |
39 | u32 run_frame:1; | 39 | u32 overflow_error:1; |
40 | u32 length_error:1; | 40 | u32 length_error:1; |
41 | u32 partial_frame_error:1; | 41 | u32 sa_filter_fail:1; |
42 | u32 descriptor_error:1; | 42 | u32 descriptor_error:1; |
43 | u32 error_summary:1; | 43 | u32 error_summary:1; |
44 | u32 frame_length:14; | 44 | u32 frame_length:14; |
45 | u32 filtering_fail:1; | 45 | u32 da_filter_fail:1; |
46 | u32 own:1; | 46 | u32 own:1; |
47 | /* RDES1 */ | 47 | /* RDES1 */ |
48 | u32 buffer1_size:11; | 48 | u32 buffer1_size:11; |
49 | u32 buffer2_size:11; | 49 | u32 buffer2_size:11; |
50 | u32 reserved2:2; | 50 | u32 reserved1:2; |
51 | u32 second_address_chained:1; | 51 | u32 second_address_chained:1; |
52 | u32 end_ring:1; | 52 | u32 end_ring:1; |
53 | u32 reserved3:5; | 53 | u32 reserved2:5; |
54 | u32 disable_ic:1; | 54 | u32 disable_ic:1; |
55 | |||
55 | } rx; | 56 | } rx; |
56 | struct { | 57 | struct { |
57 | /* RDES0 */ | 58 | /* RDES0 */ |
@@ -91,24 +92,28 @@ struct dma_desc { | |||
91 | u32 underflow_error:1; | 92 | u32 underflow_error:1; |
92 | u32 excessive_deferral:1; | 93 | u32 excessive_deferral:1; |
93 | u32 collision_count:4; | 94 | u32 collision_count:4; |
94 | u32 heartbeat_fail:1; | 95 | u32 vlan_frame:1; |
95 | u32 excessive_collisions:1; | 96 | u32 excessive_collisions:1; |
96 | u32 late_collision:1; | 97 | u32 late_collision:1; |
97 | u32 no_carrier:1; | 98 | u32 no_carrier:1; |
98 | u32 loss_carrier:1; | 99 | u32 loss_carrier:1; |
99 | u32 reserved1:3; | 100 | u32 payload_error:1; |
101 | u32 frame_flushed:1; | ||
102 | u32 jabber_timeout:1; | ||
100 | u32 error_summary:1; | 103 | u32 error_summary:1; |
101 | u32 reserved2:15; | 104 | u32 ip_header_error:1; |
105 | u32 time_stamp_status:1; | ||
106 | u32 reserved1:13; | ||
102 | u32 own:1; | 107 | u32 own:1; |
103 | /* TDES1 */ | 108 | /* TDES1 */ |
104 | u32 buffer1_size:11; | 109 | u32 buffer1_size:11; |
105 | u32 buffer2_size:11; | 110 | u32 buffer2_size:11; |
106 | u32 reserved3:1; | 111 | u32 time_stamp_enable:1; |
107 | u32 disable_padding:1; | 112 | u32 disable_padding:1; |
108 | u32 second_address_chained:1; | 113 | u32 second_address_chained:1; |
109 | u32 end_ring:1; | 114 | u32 end_ring:1; |
110 | u32 crc_disable:1; | 115 | u32 crc_disable:1; |
111 | u32 reserved4:2; | 116 | u32 checksum_insertion:2; |
112 | u32 first_segment:1; | 117 | u32 first_segment:1; |
113 | u32 last_segment:1; | 118 | u32 last_segment:1; |
114 | u32 interrupt:1; | 119 | u32 interrupt:1; |