source: src/linux/universal/linux-4.9/include/linux/netdev_features.h @ 31707

Last change on this file since 31707 was 31707, checked in by brainslayer, 10 days ago

compiles on northstar, but nand driver will likelly not work yet. still something todo

File size: 8.6 KB
Line 
1/*
2 * Network device features.
3 *
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version
8 * 2 of the License, or (at your option) any later version.
9 */
10#ifndef _LINUX_NETDEV_FEATURES_H
11#define _LINUX_NETDEV_FEATURES_H
12
13#include <linux/types.h>
14
15typedef u64 netdev_features_t;
16
17enum {
18        NETIF_F_SG_BIT,                 /* Scatter/gather IO. */
19        NETIF_F_IP_CSUM_BIT,            /* Can checksum TCP/UDP over IPv4. */
20        __UNUSED_NETIF_F_1,
21        NETIF_F_HW_CSUM_BIT,            /* Can checksum all the packets. */
22        NETIF_F_IPV6_CSUM_BIT,          /* Can checksum TCP/UDP over IPV6 */
23        NETIF_F_HIGHDMA_BIT,            /* Can DMA to high memory. */
24        NETIF_F_FRAGLIST_BIT,           /* Scatter/gather IO. */
25        NETIF_F_HW_VLAN_CTAG_TX_BIT,    /* Transmit VLAN CTAG HW acceleration */
26        NETIF_F_HW_VLAN_CTAG_RX_BIT,    /* Receive VLAN CTAG HW acceleration */
27        NETIF_F_HW_VLAN_CTAG_FILTER_BIT,/* Receive filtering on VLAN CTAGs */
28        NETIF_F_VLAN_CHALLENGED_BIT,    /* Device cannot handle VLAN packets */
29        NETIF_F_GSO_BIT,                /* Enable software GSO. */
30        NETIF_F_LLTX_BIT,               /* LockLess TX - deprecated. Please */
31                                        /* do not use LLTX in new drivers */
32        NETIF_F_NETNS_LOCAL_BIT,        /* Does not change network namespaces */
33        NETIF_F_GRO_BIT,                /* Generic receive offload */
34        NETIF_F_LRO_BIT,                /* large receive offload */
35
36        /**/NETIF_F_GSO_SHIFT,          /* keep the order of SKB_GSO_* bits */
37        NETIF_F_TSO_BIT                 /* ... TCPv4 segmentation */
38                = NETIF_F_GSO_SHIFT,
39        NETIF_F_UFO_BIT,                /* ... UDPv4 fragmentation */
40        NETIF_F_GSO_ROBUST_BIT,         /* ... ->SKB_GSO_DODGY */
41        NETIF_F_TSO_ECN_BIT,            /* ... TCP ECN support */
42        NETIF_F_TSO_MANGLEID_BIT,       /* ... IPV4 ID mangling allowed */
43        NETIF_F_TSO6_BIT,               /* ... TCPv6 segmentation */
44        NETIF_F_FSO_BIT,                /* ... FCoE segmentation */
45        NETIF_F_GSO_GRE_BIT,            /* ... GRE with TSO */
46        NETIF_F_GSO_GRE_CSUM_BIT,       /* ... GRE with csum with TSO */
47        NETIF_F_GSO_IPXIP4_BIT,         /* ... IP4 or IP6 over IP4 with TSO */
48        NETIF_F_GSO_IPXIP6_BIT,         /* ... IP4 or IP6 over IP6 with TSO */
49        NETIF_F_GSO_UDP_TUNNEL_BIT,     /* ... UDP TUNNEL with TSO */
50        NETIF_F_GSO_UDP_TUNNEL_CSUM_BIT,/* ... UDP TUNNEL with TSO & CSUM */
51        NETIF_F_GSO_PARTIAL_BIT,        /* ... Only segment inner-most L4
52                                         *     in hardware and all other
53                                         *     headers in software.
54                                         */
55        NETIF_F_GSO_TUNNEL_REMCSUM_BIT, /* ... TUNNEL with TSO & REMCSUM */
56        NETIF_F_GSO_SCTP_BIT,           /* ... SCTP fragmentation */
57        /**/NETIF_F_GSO_LAST =          /* last bit, see GSO_MASK */
58                NETIF_F_GSO_SCTP_BIT,
59
60        NETIF_F_FCOE_CRC_BIT,           /* FCoE CRC32 */
61        NETIF_F_SCTP_CRC_BIT,           /* SCTP checksum offload */
62        NETIF_F_FCOE_MTU_BIT,           /* Supports max FCoE MTU, 2158 bytes*/
63        NETIF_F_NTUPLE_BIT,             /* N-tuple filters supported */
64        NETIF_F_RXHASH_BIT,             /* Receive hashing offload */
65        NETIF_F_RXCSUM_BIT,             /* Receive checksumming offload */
66        NETIF_F_NOCACHE_COPY_BIT,       /* Use no-cache copyfromuser */
67        NETIF_F_LOOPBACK_BIT,           /* Enable loopback */
68        NETIF_F_RXFCS_BIT,              /* Append FCS to skb pkt data */
69        NETIF_F_RXALL_BIT,              /* Receive errored frames too */
70        NETIF_F_HW_VLAN_STAG_TX_BIT,    /* Transmit VLAN STAG HW acceleration */
71        NETIF_F_HW_VLAN_STAG_RX_BIT,    /* Receive VLAN STAG HW acceleration */
72        NETIF_F_HW_VLAN_STAG_FILTER_BIT,/* Receive filtering on VLAN STAGs */
73        NETIF_F_HW_L2FW_DOFFLOAD_BIT,   /* Allow L2 Forwarding in Hardware */
74        NETIF_F_BUSY_POLL_BIT,          /* Busy poll */
75
76        NETIF_F_HW_TC_BIT,              /* Offload TC infrastructure */
77
78        /*
79         * Add your fresh new feature above and remember to update
80         * netdev_features_strings[] in net/core/ethtool.c and maybe
81         * some feature mask #defines below. Please also describe it
82         * in Documentation/networking/netdev-features.txt.
83         */
84
85        /**/NETDEV_FEATURE_COUNT
86};
87
88/* copy'n'paste compression ;) */
89#define __NETIF_F_BIT(bit)      ((netdev_features_t)1 << (bit))
90#define __NETIF_F(name)         __NETIF_F_BIT(NETIF_F_##name##_BIT)
91
92#define NETIF_F_FCOE_CRC        __NETIF_F(FCOE_CRC)
93#define NETIF_F_FCOE_MTU        __NETIF_F(FCOE_MTU)
94#define NETIF_F_FRAGLIST        __NETIF_F(FRAGLIST)
95#define NETIF_F_FSO             __NETIF_F(FSO)
96#define NETIF_F_GRO             __NETIF_F(GRO)
97#define NETIF_F_GSO             __NETIF_F(GSO)
98#define NETIF_F_GSO_ROBUST      __NETIF_F(GSO_ROBUST)
99#define NETIF_F_HIGHDMA         __NETIF_F(HIGHDMA)
100#define NETIF_F_HW_CSUM         __NETIF_F(HW_CSUM)
101#define NETIF_F_HW_VLAN_CTAG_FILTER __NETIF_F(HW_VLAN_CTAG_FILTER)
102#define NETIF_F_HW_VLAN_CTAG_RX __NETIF_F(HW_VLAN_CTAG_RX)
103#define NETIF_F_HW_VLAN_CTAG_TX __NETIF_F(HW_VLAN_CTAG_TX)
104#define NETIF_F_IP_CSUM         __NETIF_F(IP_CSUM)
105#define NETIF_F_IPV6_CSUM       __NETIF_F(IPV6_CSUM)
106#define NETIF_F_LLTX            __NETIF_F(LLTX)
107#define NETIF_F_LOOPBACK        __NETIF_F(LOOPBACK)
108#define NETIF_F_LRO             __NETIF_F(LRO)
109#define NETIF_F_NETNS_LOCAL     __NETIF_F(NETNS_LOCAL)
110#define NETIF_F_NOCACHE_COPY    __NETIF_F(NOCACHE_COPY)
111#define NETIF_F_NTUPLE          __NETIF_F(NTUPLE)
112#define NETIF_F_RXCSUM          __NETIF_F(RXCSUM)
113#define NETIF_F_RXHASH          __NETIF_F(RXHASH)
114#define NETIF_F_SCTP_CRC        __NETIF_F(SCTP_CRC)
115#define NETIF_F_SG              __NETIF_F(SG)
116#define NETIF_F_TSO6            __NETIF_F(TSO6)
117#define NETIF_F_TSO_ECN         __NETIF_F(TSO_ECN)
118#define NETIF_F_TSO             __NETIF_F(TSO)
119#define NETIF_F_UFO             __NETIF_F(UFO)
120#define NETIF_F_VLAN_CHALLENGED __NETIF_F(VLAN_CHALLENGED)
121#define NETIF_F_RXFCS           __NETIF_F(RXFCS)
122#define NETIF_F_RXALL           __NETIF_F(RXALL)
123#define NETIF_F_GSO_GRE         __NETIF_F(GSO_GRE)
124#define NETIF_F_GSO_GRE_CSUM    __NETIF_F(GSO_GRE_CSUM)
125#define NETIF_F_GSO_IPXIP4      __NETIF_F(GSO_IPXIP4)
126#define NETIF_F_GSO_IPXIP6      __NETIF_F(GSO_IPXIP6)
127#define NETIF_F_GSO_UDP_TUNNEL  __NETIF_F(GSO_UDP_TUNNEL)
128#define NETIF_F_GSO_UDP_TUNNEL_CSUM __NETIF_F(GSO_UDP_TUNNEL_CSUM)
129#define NETIF_F_TSO_MANGLEID    __NETIF_F(TSO_MANGLEID)
130#define NETIF_F_GSO_PARTIAL      __NETIF_F(GSO_PARTIAL)
131#define NETIF_F_GSO_TUNNEL_REMCSUM __NETIF_F(GSO_TUNNEL_REMCSUM)
132#define NETIF_F_GSO_SCTP        __NETIF_F(GSO_SCTP)
133#define NETIF_F_HW_VLAN_STAG_FILTER __NETIF_F(HW_VLAN_STAG_FILTER)
134#define NETIF_F_HW_VLAN_STAG_RX __NETIF_F(HW_VLAN_STAG_RX)
135#define NETIF_F_HW_VLAN_STAG_TX __NETIF_F(HW_VLAN_STAG_TX)
136#define NETIF_F_HW_L2FW_DOFFLOAD        __NETIF_F(HW_L2FW_DOFFLOAD)
137#define NETIF_F_BUSY_POLL       __NETIF_F(BUSY_POLL)
138#define NETIF_F_HW_TC           __NETIF_F(HW_TC)
139
140#define for_each_netdev_feature(mask_addr, bit) \
141        for_each_set_bit(bit, (unsigned long *)mask_addr, NETDEV_FEATURE_COUNT)
142
143/* Features valid for ethtool to change */
144/* = all defined minus driver/device-class-related */
145#define NETIF_F_NEVER_CHANGE    (NETIF_F_VLAN_CHALLENGED | \
146                                 NETIF_F_LLTX | NETIF_F_NETNS_LOCAL)
147
148/* remember that ((t)1 << t_BITS) is undefined in C99 */
149#define NETIF_F_ETHTOOL_BITS    ((__NETIF_F_BIT(NETDEV_FEATURE_COUNT - 1) | \
150                (__NETIF_F_BIT(NETDEV_FEATURE_COUNT - 1) - 1)) & \
151                ~NETIF_F_NEVER_CHANGE)
152
153/* Segmentation offload feature mask */
154#define NETIF_F_GSO_MASK        (__NETIF_F_BIT(NETIF_F_GSO_LAST + 1) - \
155                __NETIF_F_BIT(NETIF_F_GSO_SHIFT))
156
157/* List of IP checksum features. Note that NETIF_F_ HW_CSUM should not be
158 * set in features when NETIF_F_IP_CSUM or NETIF_F_IPV6_CSUM are set--
159 * this would be contradictory
160 */
161#define NETIF_F_CSUM_MASK       (NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | \
162                                 NETIF_F_HW_CSUM)
163
164#define NETIF_F_ALL_TSO         (NETIF_F_TSO | NETIF_F_TSO6 | \
165                                 NETIF_F_TSO_ECN | NETIF_F_TSO_MANGLEID)
166
167#define NETIF_F_ALL_FCOE        (NETIF_F_FCOE_CRC | NETIF_F_FCOE_MTU | \
168                                 NETIF_F_FSO)
169
170/* List of features with software fallbacks. */
171#define NETIF_F_GSO_SOFTWARE    (NETIF_F_ALL_TSO | NETIF_F_UFO | \
172                                 NETIF_F_GSO_SCTP)
173                                 
174#define NETIF_F_GEN_CSUM        NETIF_F_HW_CSUM
175#define NETIF_F_V4_CSUM         (NETIF_F_GEN_CSUM | NETIF_F_IP_CSUM)
176#define NETIF_F_V6_CSUM         (NETIF_F_GEN_CSUM | NETIF_F_IPV6_CSUM)
177#define NETIF_F_ALL_CSUM        (NETIF_F_V4_CSUM | NETIF_F_V6_CSUM)
178
179
180/*
181 * If one device supports one of these features, then enable them
182 * for all in netdev_increment_features.
183 */
184#define NETIF_F_ONE_FOR_ALL     (NETIF_F_GSO_SOFTWARE | NETIF_F_GSO_ROBUST | \
185                                 NETIF_F_SG | NETIF_F_HIGHDMA |         \
186                                 NETIF_F_FRAGLIST | NETIF_F_VLAN_CHALLENGED)
187
188/*
189 * If one device doesn't support one of these features, then disable it
190 * for all in netdev_increment_features.
191 */
192#define NETIF_F_ALL_FOR_ALL     (NETIF_F_NOCACHE_COPY | NETIF_F_FSO)
193
194/*
195 * If upper/master device has these features disabled, they must be disabled
196 * on all lower/slave devices as well.
197 */
198#define NETIF_F_UPPER_DISABLES  NETIF_F_LRO
199
200/* changeable features with no special hardware requirements */
201#define NETIF_F_SOFT_FEATURES   (NETIF_F_GSO | NETIF_F_GRO)
202
203#define NETIF_F_VLAN_FEATURES   (NETIF_F_HW_VLAN_CTAG_FILTER | \
204                                 NETIF_F_HW_VLAN_CTAG_RX | \
205                                 NETIF_F_HW_VLAN_CTAG_TX | \
206                                 NETIF_F_HW_VLAN_STAG_FILTER | \
207                                 NETIF_F_HW_VLAN_STAG_RX | \
208                                 NETIF_F_HW_VLAN_STAG_TX)
209
210#define NETIF_F_GSO_ENCAP_ALL   (NETIF_F_GSO_GRE |                      \
211                                 NETIF_F_GSO_GRE_CSUM |                 \
212                                 NETIF_F_GSO_IPXIP4 |                   \
213                                 NETIF_F_GSO_IPXIP6 |                   \
214                                 NETIF_F_GSO_UDP_TUNNEL |               \
215                                 NETIF_F_GSO_UDP_TUNNEL_CSUM)
216
217#endif  /* _LINUX_NETDEV_FEATURES_H */
Note: See TracBrowser for help on using the repository browser.