xref: /aosp_15_r20/external/ethtool/internal.h (revision 1b481fc3bb1b45d4cf28d1ec12969dc1055f555d)
1*1b481fc3SMaciej Żenczykowski /* Portions Copyright 2001 Sun Microsystems ([email protected]) */
2*1b481fc3SMaciej Żenczykowski /* Portions Copyright 2002 Intel ([email protected]) */
3*1b481fc3SMaciej Żenczykowski #ifndef ETHTOOL_INTERNAL_H__
4*1b481fc3SMaciej Żenczykowski #define ETHTOOL_INTERNAL_H__
5*1b481fc3SMaciej Żenczykowski 
6*1b481fc3SMaciej Żenczykowski /* Some platforms (eg. ppc64) need __SANE_USERSPACE_TYPES__ before
7*1b481fc3SMaciej Żenczykowski  * <linux/types.h> to select 'int-ll64.h' and avoid compile warnings
8*1b481fc3SMaciej Żenczykowski  * when printing __u64 with %llu.
9*1b481fc3SMaciej Żenczykowski  */
10*1b481fc3SMaciej Żenczykowski #define __SANE_USERSPACE_TYPES__
11*1b481fc3SMaciej Żenczykowski 
12*1b481fc3SMaciej Żenczykowski #ifdef HAVE_CONFIG_H
13*1b481fc3SMaciej Żenczykowski #include "ethtool-config.h"
14*1b481fc3SMaciej Żenczykowski #endif
15*1b481fc3SMaciej Żenczykowski #include <stdbool.h>
16*1b481fc3SMaciej Żenczykowski #include <stdio.h>
17*1b481fc3SMaciej Żenczykowski #include <stdint.h>
18*1b481fc3SMaciej Żenczykowski #include <stdlib.h>
19*1b481fc3SMaciej Żenczykowski #include <string.h>
20*1b481fc3SMaciej Żenczykowski #include <sys/types.h>
21*1b481fc3SMaciej Żenczykowski #include <unistd.h>
22*1b481fc3SMaciej Żenczykowski #include <endian.h>
23*1b481fc3SMaciej Żenczykowski #include <sys/ioctl.h>
24*1b481fc3SMaciej Żenczykowski #define __UAPI_DEF_IF_IFNAMSIZ	1
25*1b481fc3SMaciej Żenczykowski #define __UAPI_DEF_IF_IFMAP	1
26*1b481fc3SMaciej Żenczykowski #define __UAPI_DEF_IF_IFREQ	1
27*1b481fc3SMaciej Żenczykowski #include <linux/if.h>
28*1b481fc3SMaciej Żenczykowski 
29*1b481fc3SMaciej Żenczykowski #include "json_writer.h"
30*1b481fc3SMaciej Żenczykowski #include "json_print.h"
31*1b481fc3SMaciej Żenczykowski 
32*1b481fc3SMaciej Żenczykowski #define __maybe_unused __attribute__((__unused__))
33*1b481fc3SMaciej Żenczykowski 
34*1b481fc3SMaciej Żenczykowski /* internal for netlink interface */
35*1b481fc3SMaciej Żenczykowski #ifdef ETHTOOL_ENABLE_NETLINK
36*1b481fc3SMaciej Żenczykowski struct nl_context;
37*1b481fc3SMaciej Żenczykowski #endif
38*1b481fc3SMaciej Żenczykowski 
39*1b481fc3SMaciej Żenczykowski typedef unsigned long long u64;
40*1b481fc3SMaciej Żenczykowski typedef uint32_t u32;
41*1b481fc3SMaciej Żenczykowski typedef uint16_t u16;
42*1b481fc3SMaciej Żenczykowski typedef uint8_t u8;
43*1b481fc3SMaciej Żenczykowski typedef int32_t s32;
44*1b481fc3SMaciej Żenczykowski 
45*1b481fc3SMaciej Żenczykowski #include <linux/ethtool.h>
46*1b481fc3SMaciej Żenczykowski #include <linux/net_tstamp.h>
47*1b481fc3SMaciej Żenczykowski 
48*1b481fc3SMaciej Żenczykowski #if __BYTE_ORDER == __BIG_ENDIAN
cpu_to_be16(u16 value)49*1b481fc3SMaciej Żenczykowski static inline u16 cpu_to_be16(u16 value)
50*1b481fc3SMaciej Żenczykowski {
51*1b481fc3SMaciej Żenczykowski 	return value;
52*1b481fc3SMaciej Żenczykowski }
cpu_to_be32(u32 value)53*1b481fc3SMaciej Żenczykowski static inline u32 cpu_to_be32(u32 value)
54*1b481fc3SMaciej Żenczykowski {
55*1b481fc3SMaciej Żenczykowski 	return value;
56*1b481fc3SMaciej Żenczykowski }
cpu_to_be64(u64 value)57*1b481fc3SMaciej Żenczykowski static inline u64 cpu_to_be64(u64 value)
58*1b481fc3SMaciej Żenczykowski {
59*1b481fc3SMaciej Żenczykowski 	return value;
60*1b481fc3SMaciej Żenczykowski }
61*1b481fc3SMaciej Żenczykowski #else
cpu_to_be16(u16 value)62*1b481fc3SMaciej Żenczykowski static inline u16 cpu_to_be16(u16 value)
63*1b481fc3SMaciej Żenczykowski {
64*1b481fc3SMaciej Żenczykowski 	return (value >> 8) | (value << 8);
65*1b481fc3SMaciej Żenczykowski }
cpu_to_be32(u32 value)66*1b481fc3SMaciej Żenczykowski static inline u32 cpu_to_be32(u32 value)
67*1b481fc3SMaciej Żenczykowski {
68*1b481fc3SMaciej Żenczykowski 	return cpu_to_be16(value >> 16) | (cpu_to_be16(value) << 16);
69*1b481fc3SMaciej Żenczykowski }
cpu_to_be64(u64 value)70*1b481fc3SMaciej Żenczykowski static inline u64 cpu_to_be64(u64 value)
71*1b481fc3SMaciej Żenczykowski {
72*1b481fc3SMaciej Żenczykowski 	return cpu_to_be32(value >> 32) | ((u64)cpu_to_be32(value) << 32);
73*1b481fc3SMaciej Żenczykowski }
74*1b481fc3SMaciej Żenczykowski #endif
75*1b481fc3SMaciej Żenczykowski 
76*1b481fc3SMaciej Żenczykowski #define ntohll cpu_to_be64
77*1b481fc3SMaciej Żenczykowski #define htonll cpu_to_be64
78*1b481fc3SMaciej Żenczykowski 
79*1b481fc3SMaciej Żenczykowski #define BITS_PER_BYTE		8
80*1b481fc3SMaciej Żenczykowski #define BITS_PER_LONG		(BITS_PER_BYTE * sizeof(long))
81*1b481fc3SMaciej Żenczykowski #define DIV_ROUND_UP(n, d)	(((n) + (d) - 1) / (d))
82*1b481fc3SMaciej Żenczykowski #define BITS_TO_LONGS(nr)	DIV_ROUND_UP(nr, BITS_PER_LONG)
83*1b481fc3SMaciej Żenczykowski 
set_bit(unsigned int nr,unsigned long * addr)84*1b481fc3SMaciej Żenczykowski static inline void set_bit(unsigned int nr, unsigned long *addr)
85*1b481fc3SMaciej Żenczykowski {
86*1b481fc3SMaciej Żenczykowski 	addr[nr / BITS_PER_LONG] |= 1UL << (nr % BITS_PER_LONG);
87*1b481fc3SMaciej Żenczykowski }
88*1b481fc3SMaciej Żenczykowski 
clear_bit(unsigned int nr,unsigned long * addr)89*1b481fc3SMaciej Żenczykowski static inline void clear_bit(unsigned int nr, unsigned long *addr)
90*1b481fc3SMaciej Żenczykowski {
91*1b481fc3SMaciej Żenczykowski 	addr[nr / BITS_PER_LONG] &= ~(1UL << (nr % BITS_PER_LONG));
92*1b481fc3SMaciej Żenczykowski }
93*1b481fc3SMaciej Żenczykowski 
test_bit(unsigned int nr,const unsigned long * addr)94*1b481fc3SMaciej Żenczykowski static inline int test_bit(unsigned int nr, const unsigned long *addr)
95*1b481fc3SMaciej Żenczykowski {
96*1b481fc3SMaciej Żenczykowski 	return !!((1UL << (nr % BITS_PER_LONG)) &
97*1b481fc3SMaciej Żenczykowski 		  (((unsigned long *)addr)[nr / BITS_PER_LONG]));
98*1b481fc3SMaciej Żenczykowski }
99*1b481fc3SMaciej Żenczykowski 
100*1b481fc3SMaciej Żenczykowski #ifndef ARRAY_SIZE
101*1b481fc3SMaciej Żenczykowski #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
102*1b481fc3SMaciej Żenczykowski #endif
103*1b481fc3SMaciej Żenczykowski 
104*1b481fc3SMaciej Żenczykowski #ifndef SIOCETHTOOL
105*1b481fc3SMaciej Żenczykowski #define SIOCETHTOOL     0x8946
106*1b481fc3SMaciej Żenczykowski #endif
107*1b481fc3SMaciej Żenczykowski 
108*1b481fc3SMaciej Żenczykowski /* debugging flags */
109*1b481fc3SMaciej Żenczykowski enum {
110*1b481fc3SMaciej Żenczykowski 	DEBUG_PARSE,
111*1b481fc3SMaciej Żenczykowski 	DEBUG_NL_MSGS,		/* incoming/outgoing netlink messages */
112*1b481fc3SMaciej Żenczykowski 	DEBUG_NL_DUMP_SND,	/* dump outgoing netlink messages */
113*1b481fc3SMaciej Żenczykowski 	DEBUG_NL_DUMP_RCV,	/* dump incoming netlink messages */
114*1b481fc3SMaciej Żenczykowski 	DEBUG_NL_PRETTY_MSG,	/* pretty print of messages and errors */
115*1b481fc3SMaciej Żenczykowski };
116*1b481fc3SMaciej Żenczykowski 
debug_on(unsigned long debug,unsigned int bit)117*1b481fc3SMaciej Żenczykowski static inline bool debug_on(unsigned long debug, unsigned int bit)
118*1b481fc3SMaciej Żenczykowski {
119*1b481fc3SMaciej Żenczykowski 	return (debug & (1 << bit));
120*1b481fc3SMaciej Żenczykowski }
121*1b481fc3SMaciej Żenczykowski 
122*1b481fc3SMaciej Żenczykowski /* Internal values for old-style offload flags.  Values and names
123*1b481fc3SMaciej Żenczykowski  * must not clash with the flags defined for ETHTOOL_{G,S}FLAGS.
124*1b481fc3SMaciej Żenczykowski  */
125*1b481fc3SMaciej Żenczykowski #define ETH_FLAG_RXCSUM		(1 << 0)
126*1b481fc3SMaciej Żenczykowski #define ETH_FLAG_TXCSUM		(1 << 1)
127*1b481fc3SMaciej Żenczykowski #define ETH_FLAG_SG		(1 << 2)
128*1b481fc3SMaciej Żenczykowski #define ETH_FLAG_TSO		(1 << 3)
129*1b481fc3SMaciej Żenczykowski #define ETH_FLAG_UFO		(1 << 4)
130*1b481fc3SMaciej Żenczykowski #define ETH_FLAG_GSO		(1 << 5)
131*1b481fc3SMaciej Żenczykowski #define ETH_FLAG_GRO		(1 << 6)
132*1b481fc3SMaciej Żenczykowski #define ETH_FLAG_INT_MASK	(ETH_FLAG_RXCSUM | ETH_FLAG_TXCSUM |	\
133*1b481fc3SMaciej Żenczykowski 				 ETH_FLAG_SG | ETH_FLAG_TSO | ETH_FLAG_UFO | \
134*1b481fc3SMaciej Żenczykowski 				 ETH_FLAG_GSO | ETH_FLAG_GRO),
135*1b481fc3SMaciej Żenczykowski /* Mask of all flags defined for ETHTOOL_{G,S}FLAGS. */
136*1b481fc3SMaciej Żenczykowski #define ETH_FLAG_EXT_MASK	(ETH_FLAG_LRO | ETH_FLAG_RXVLAN |	\
137*1b481fc3SMaciej Żenczykowski 				 ETH_FLAG_TXVLAN | ETH_FLAG_NTUPLE |	\
138*1b481fc3SMaciej Żenczykowski 				 ETH_FLAG_RXHASH)
139*1b481fc3SMaciej Żenczykowski 
140*1b481fc3SMaciej Żenczykowski /* internal API for link mode bitmap interaction with kernel. */
141*1b481fc3SMaciej Żenczykowski 
142*1b481fc3SMaciej Żenczykowski #define ETHTOOL_LINK_MODE_MASK_MAX_KERNEL_NU32		\
143*1b481fc3SMaciej Żenczykowski 	(SCHAR_MAX)
144*1b481fc3SMaciej Żenczykowski #define ETHTOOL_LINK_MODE_MASK_MAX_KERNEL_NBITS		\
145*1b481fc3SMaciej Żenczykowski 	(32 * ETHTOOL_LINK_MODE_MASK_MAX_KERNEL_NU32)
146*1b481fc3SMaciej Żenczykowski #define ETHTOOL_LINK_MODE_MASK_MAX_KERNEL_NBYTES	\
147*1b481fc3SMaciej Żenczykowski 	(4 * ETHTOOL_LINK_MODE_MASK_MAX_KERNEL_NU32)
148*1b481fc3SMaciej Żenczykowski #define ETHTOOL_DECLARE_LINK_MODE_MASK(name)		\
149*1b481fc3SMaciej Żenczykowski 	u32 name[ETHTOOL_LINK_MODE_MASK_MAX_KERNEL_NU32]
150*1b481fc3SMaciej Żenczykowski 
151*1b481fc3SMaciej Żenczykowski struct ethtool_link_usettings {
152*1b481fc3SMaciej Żenczykowski 	struct {
153*1b481fc3SMaciej Żenczykowski 		__u8 transceiver;
154*1b481fc3SMaciej Żenczykowski 	} deprecated;
155*1b481fc3SMaciej Żenczykowski 	struct ethtool_link_settings base;
156*1b481fc3SMaciej Żenczykowski 	struct {
157*1b481fc3SMaciej Żenczykowski 		ETHTOOL_DECLARE_LINK_MODE_MASK(supported);
158*1b481fc3SMaciej Żenczykowski 		ETHTOOL_DECLARE_LINK_MODE_MASK(advertising);
159*1b481fc3SMaciej Żenczykowski 		ETHTOOL_DECLARE_LINK_MODE_MASK(lp_advertising);
160*1b481fc3SMaciej Żenczykowski 	} link_modes;
161*1b481fc3SMaciej Żenczykowski };
162*1b481fc3SMaciej Żenczykowski 
163*1b481fc3SMaciej Żenczykowski #define ethtool_link_mode_for_each_u32(index)			\
164*1b481fc3SMaciej Żenczykowski 	for ((index) = 0;					\
165*1b481fc3SMaciej Żenczykowski 	     (index) < ETHTOOL_LINK_MODE_MASK_MAX_KERNEL_NU32;	\
166*1b481fc3SMaciej Żenczykowski 	     ++(index))
167*1b481fc3SMaciej Żenczykowski 
ethtool_link_mode_zero(u32 * dst)168*1b481fc3SMaciej Żenczykowski static inline void ethtool_link_mode_zero(u32 *dst)
169*1b481fc3SMaciej Żenczykowski {
170*1b481fc3SMaciej Żenczykowski 	memset(dst, 0, ETHTOOL_LINK_MODE_MASK_MAX_KERNEL_NBYTES);
171*1b481fc3SMaciej Żenczykowski }
172*1b481fc3SMaciej Żenczykowski 
ethtool_link_mode_is_empty(const u32 * mask)173*1b481fc3SMaciej Żenczykowski static inline bool ethtool_link_mode_is_empty(const u32 *mask)
174*1b481fc3SMaciej Żenczykowski {
175*1b481fc3SMaciej Żenczykowski 	unsigned int i;
176*1b481fc3SMaciej Żenczykowski 
177*1b481fc3SMaciej Żenczykowski 	ethtool_link_mode_for_each_u32(i) {
178*1b481fc3SMaciej Żenczykowski 		if (mask[i] != 0)
179*1b481fc3SMaciej Żenczykowski 			return false;
180*1b481fc3SMaciej Żenczykowski 	}
181*1b481fc3SMaciej Żenczykowski 
182*1b481fc3SMaciej Żenczykowski 	return true;
183*1b481fc3SMaciej Żenczykowski }
184*1b481fc3SMaciej Żenczykowski 
ethtool_link_mode_copy(u32 * dst,const u32 * src)185*1b481fc3SMaciej Żenczykowski static inline void ethtool_link_mode_copy(u32 *dst, const u32 *src)
186*1b481fc3SMaciej Żenczykowski {
187*1b481fc3SMaciej Żenczykowski 	memcpy(dst, src, ETHTOOL_LINK_MODE_MASK_MAX_KERNEL_NBYTES);
188*1b481fc3SMaciej Żenczykowski }
189*1b481fc3SMaciej Żenczykowski 
ethtool_link_mode_test_bit(unsigned int nr,const u32 * mask)190*1b481fc3SMaciej Żenczykowski static inline int ethtool_link_mode_test_bit(unsigned int nr, const u32 *mask)
191*1b481fc3SMaciej Żenczykowski {
192*1b481fc3SMaciej Żenczykowski 	if (nr >= ETHTOOL_LINK_MODE_MASK_MAX_KERNEL_NBITS)
193*1b481fc3SMaciej Żenczykowski 		return !!0;
194*1b481fc3SMaciej Żenczykowski 	return !!(mask[nr / 32] & (1 << (nr % 32)));
195*1b481fc3SMaciej Żenczykowski }
196*1b481fc3SMaciej Żenczykowski 
ethtool_link_mode_set_bit(unsigned int nr,u32 * mask)197*1b481fc3SMaciej Żenczykowski static inline int ethtool_link_mode_set_bit(unsigned int nr, u32 *mask)
198*1b481fc3SMaciej Żenczykowski {
199*1b481fc3SMaciej Żenczykowski 	if (nr >= ETHTOOL_LINK_MODE_MASK_MAX_KERNEL_NBITS)
200*1b481fc3SMaciej Żenczykowski 		return -1;
201*1b481fc3SMaciej Żenczykowski 	mask[nr / 32] |= (1 << (nr % 32));
202*1b481fc3SMaciej Żenczykowski 	return 0;
203*1b481fc3SMaciej Żenczykowski }
204*1b481fc3SMaciej Żenczykowski 
205*1b481fc3SMaciej Żenczykowski /* Struct for managing module EEPROM pages */
206*1b481fc3SMaciej Żenczykowski struct ethtool_module_eeprom {
207*1b481fc3SMaciej Żenczykowski 	u32	offset;
208*1b481fc3SMaciej Żenczykowski 	u32	length;
209*1b481fc3SMaciej Żenczykowski 	u8	page;
210*1b481fc3SMaciej Żenczykowski 	u8	bank;
211*1b481fc3SMaciej Żenczykowski 	u8	i2c_address;
212*1b481fc3SMaciej Żenczykowski 	u8	*data;
213*1b481fc3SMaciej Żenczykowski };
214*1b481fc3SMaciej Żenczykowski 
215*1b481fc3SMaciej Żenczykowski /* Context for sub-commands */
216*1b481fc3SMaciej Żenczykowski struct cmd_context {
217*1b481fc3SMaciej Żenczykowski 	const char *devname;	/* net device name */
218*1b481fc3SMaciej Żenczykowski 	int fd;			/* socket suitable for ethtool ioctl */
219*1b481fc3SMaciej Żenczykowski 	struct ifreq ifr;	/* ifreq suitable for ethtool ioctl */
220*1b481fc3SMaciej Żenczykowski 	unsigned int argc;	/* number of arguments to the sub-command */
221*1b481fc3SMaciej Żenczykowski 	char **argp;		/* arguments to the sub-command */
222*1b481fc3SMaciej Żenczykowski 	unsigned long debug;	/* debugging mask */
223*1b481fc3SMaciej Żenczykowski 	bool json;		/* Output JSON, if supported */
224*1b481fc3SMaciej Żenczykowski 	bool show_stats;	/* include command-specific stats */
225*1b481fc3SMaciej Żenczykowski #ifdef ETHTOOL_ENABLE_NETLINK
226*1b481fc3SMaciej Żenczykowski 	struct nl_context *nlctx;	/* netlink context (opaque) */
227*1b481fc3SMaciej Żenczykowski #endif
228*1b481fc3SMaciej Żenczykowski };
229*1b481fc3SMaciej Żenczykowski 
230*1b481fc3SMaciej Żenczykowski #ifdef TEST_ETHTOOL
231*1b481fc3SMaciej Żenczykowski int test_cmdline(const char *args);
232*1b481fc3SMaciej Żenczykowski 
233*1b481fc3SMaciej Żenczykowski struct cmd_expect {
234*1b481fc3SMaciej Żenczykowski 	const void *cmd;	/* expected command; NULL at end of list */
235*1b481fc3SMaciej Żenczykowski 	size_t cmd_len;		/* length to match (might be < sizeof struct) */
236*1b481fc3SMaciej Żenczykowski 	int rc;			/* kernel return code */
237*1b481fc3SMaciej Żenczykowski 	const void *resp;	/* response to write back; may be NULL */
238*1b481fc3SMaciej Żenczykowski 	size_t resp_len;	/* length to write back */
239*1b481fc3SMaciej Żenczykowski };
240*1b481fc3SMaciej Żenczykowski int test_ioctl(const struct cmd_expect *expect, void *cmd);
241*1b481fc3SMaciej Żenczykowski #define TEST_IOCTL_MISMATCH (-2)
242*1b481fc3SMaciej Żenczykowski 
243*1b481fc3SMaciej Żenczykowski int test_main(int argc, char **argp);
244*1b481fc3SMaciej Żenczykowski void test_exit(int rc) __attribute__((noreturn));
245*1b481fc3SMaciej Żenczykowski 
246*1b481fc3SMaciej Żenczykowski #ifndef TEST_NO_WRAPPERS
247*1b481fc3SMaciej Żenczykowski #define main(...) test_main(__VA_ARGS__)
248*1b481fc3SMaciej Żenczykowski #undef exit
249*1b481fc3SMaciej Żenczykowski #define exit(rc) test_exit(rc)
250*1b481fc3SMaciej Żenczykowski void *test_malloc(size_t size);
251*1b481fc3SMaciej Żenczykowski #undef malloc
252*1b481fc3SMaciej Żenczykowski #define malloc(size) test_malloc(size)
253*1b481fc3SMaciej Żenczykowski void *test_calloc(size_t nmemb, size_t size);
254*1b481fc3SMaciej Żenczykowski #undef calloc
255*1b481fc3SMaciej Żenczykowski #define calloc(nmemb, size) test_calloc(nmemb, size)
256*1b481fc3SMaciej Żenczykowski char *test_strdup(const char *s);
257*1b481fc3SMaciej Żenczykowski #undef strdup
258*1b481fc3SMaciej Żenczykowski #define strdup(s) test_strdup(s)
259*1b481fc3SMaciej Żenczykowski void test_free(void *ptr);
260*1b481fc3SMaciej Żenczykowski #undef free
261*1b481fc3SMaciej Żenczykowski #define free(ptr) test_free(ptr)
262*1b481fc3SMaciej Żenczykowski void *test_realloc(void *ptr, size_t size);
263*1b481fc3SMaciej Żenczykowski #undef realloc
264*1b481fc3SMaciej Żenczykowski #define realloc(ptr, size) test_realloc(ptr, size)
265*1b481fc3SMaciej Żenczykowski int test_open(const char *pathname, int flag, ...);
266*1b481fc3SMaciej Żenczykowski #undef open
267*1b481fc3SMaciej Żenczykowski #define open(...) test_open(__VA_ARGS__)
268*1b481fc3SMaciej Żenczykowski int test_socket(int domain, int type, int protocol);
269*1b481fc3SMaciej Żenczykowski #undef socket
270*1b481fc3SMaciej Żenczykowski #define socket(...) test_socket(__VA_ARGS__)
271*1b481fc3SMaciej Żenczykowski int test_close(int fd);
272*1b481fc3SMaciej Żenczykowski #undef close
273*1b481fc3SMaciej Żenczykowski #define close(fd) test_close(fd)
274*1b481fc3SMaciej Żenczykowski FILE *test_fopen(const char *path, const char *mode);
275*1b481fc3SMaciej Żenczykowski #undef fopen
276*1b481fc3SMaciej Żenczykowski #define fopen(path, mode) test_fopen(path, mode)
277*1b481fc3SMaciej Żenczykowski int test_fclose(FILE *fh);
278*1b481fc3SMaciej Żenczykowski #undef fclose
279*1b481fc3SMaciej Żenczykowski #define fclose(fh) test_fclose(fh)
280*1b481fc3SMaciej Żenczykowski #endif
281*1b481fc3SMaciej Żenczykowski #endif
282*1b481fc3SMaciej Żenczykowski 
283*1b481fc3SMaciej Żenczykowski int send_ioctl(struct cmd_context *ctx, void *cmd);
284*1b481fc3SMaciej Żenczykowski 
285*1b481fc3SMaciej Żenczykowski void dump_hex(FILE *f, const u8 *data, int len, int offset);
286*1b481fc3SMaciej Żenczykowski 
287*1b481fc3SMaciej Żenczykowski /* National Semiconductor DP83815, DP83816 */
288*1b481fc3SMaciej Żenczykowski int natsemi_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
289*1b481fc3SMaciej Żenczykowski int natsemi_dump_eeprom(struct ethtool_drvinfo *info,
290*1b481fc3SMaciej Żenczykowski 	struct ethtool_eeprom *ee);
291*1b481fc3SMaciej Żenczykowski 
292*1b481fc3SMaciej Żenczykowski /* Digital/Intel 21040 and 21041 */
293*1b481fc3SMaciej Żenczykowski int de2104x_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
294*1b481fc3SMaciej Żenczykowski 
295*1b481fc3SMaciej Żenczykowski /* Intel(R) PRO/1000 Gigabit Adapter Family */
296*1b481fc3SMaciej Żenczykowski int e1000_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
297*1b481fc3SMaciej Żenczykowski 
298*1b481fc3SMaciej Żenczykowski int igb_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
299*1b481fc3SMaciej Żenczykowski 
300*1b481fc3SMaciej Żenczykowski /* RealTek PCI */
301*1b481fc3SMaciej Żenczykowski int realtek_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
302*1b481fc3SMaciej Żenczykowski 
303*1b481fc3SMaciej Żenczykowski /* Intel(R) PRO/100 Fast Ethernet Adapter Family */
304*1b481fc3SMaciej Żenczykowski int e100_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
305*1b481fc3SMaciej Żenczykowski 
306*1b481fc3SMaciej Żenczykowski /* Tigon3 */
307*1b481fc3SMaciej Żenczykowski int tg3_dump_eeprom(struct ethtool_drvinfo *info, struct ethtool_eeprom *ee);
308*1b481fc3SMaciej Żenczykowski 
309*1b481fc3SMaciej Żenczykowski /* Advanced Micro Devices  AMD8111 based Adapter */
310*1b481fc3SMaciej Żenczykowski int amd8111e_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
311*1b481fc3SMaciej Żenczykowski 
312*1b481fc3SMaciej Żenczykowski /* Advanced Micro Devices PCnet32 Adapter */
313*1b481fc3SMaciej Żenczykowski int pcnet32_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
314*1b481fc3SMaciej Żenczykowski 
315*1b481fc3SMaciej Żenczykowski /* Motorola 8xx FEC Ethernet controller */
316*1b481fc3SMaciej Żenczykowski int fec_8xx_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
317*1b481fc3SMaciej Żenczykowski 
318*1b481fc3SMaciej Żenczykowski /* PowerPC 4xx on-chip Ethernet controller */
319*1b481fc3SMaciej Żenczykowski int ibm_emac_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
320*1b481fc3SMaciej Żenczykowski 
321*1b481fc3SMaciej Żenczykowski /* Intel(R) PRO/10GBe Gigabit Adapter Family */
322*1b481fc3SMaciej Żenczykowski int ixgb_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
323*1b481fc3SMaciej Żenczykowski 
324*1b481fc3SMaciej Żenczykowski int ixgbe_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
325*1b481fc3SMaciej Żenczykowski 
326*1b481fc3SMaciej Żenczykowski int ixgbevf_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
327*1b481fc3SMaciej Żenczykowski 
328*1b481fc3SMaciej Żenczykowski /* Broadcom Tigon3 Ethernet controller */
329*1b481fc3SMaciej Żenczykowski int tg3_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
330*1b481fc3SMaciej Żenczykowski 
331*1b481fc3SMaciej Żenczykowski /* SysKonnect Gigabit (Genesis and Yukon) */
332*1b481fc3SMaciej Żenczykowski int skge_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
333*1b481fc3SMaciej Żenczykowski 
334*1b481fc3SMaciej Żenczykowski /* SysKonnect Gigabit (Yukon2) */
335*1b481fc3SMaciej Żenczykowski int sky2_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
336*1b481fc3SMaciej Żenczykowski 
337*1b481fc3SMaciej Żenczykowski /* Fabric7 VIOC */
338*1b481fc3SMaciej Żenczykowski int vioc_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
339*1b481fc3SMaciej Żenczykowski 
340*1b481fc3SMaciej Żenczykowski /* SMSC LAN911x/LAN921x embedded ethernet controller */
341*1b481fc3SMaciej Żenczykowski int smsc911x_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
342*1b481fc3SMaciej Żenczykowski 
343*1b481fc3SMaciej Żenczykowski int at76c50x_usb_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
344*1b481fc3SMaciej Żenczykowski 
345*1b481fc3SMaciej Żenczykowski /* Solarflare Solarstorm controllers */
346*1b481fc3SMaciej Żenczykowski int sfc_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
347*1b481fc3SMaciej Żenczykowski 
348*1b481fc3SMaciej Żenczykowski /* STMMAC embedded ethernet controller */
349*1b481fc3SMaciej Żenczykowski int st_mac100_dump_regs(struct ethtool_drvinfo *info,
350*1b481fc3SMaciej Żenczykowski 			struct ethtool_regs *regs);
351*1b481fc3SMaciej Żenczykowski int st_gmac_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
352*1b481fc3SMaciej Żenczykowski 
353*1b481fc3SMaciej Żenczykowski /* Et131x ethernet controller */
354*1b481fc3SMaciej Żenczykowski int et131x_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
355*1b481fc3SMaciej Żenczykowski 
356*1b481fc3SMaciej Żenczykowski /* Altera TSE 10/100/1000 ethernet controller */
357*1b481fc3SMaciej Żenczykowski int altera_tse_dump_regs(struct ethtool_drvinfo *info,
358*1b481fc3SMaciej Żenczykowski 			 struct ethtool_regs *regs);
359*1b481fc3SMaciej Żenczykowski 
360*1b481fc3SMaciej Żenczykowski /* VMware vmxnet3 ethernet controller */
361*1b481fc3SMaciej Żenczykowski int vmxnet3_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
362*1b481fc3SMaciej Żenczykowski 
363*1b481fc3SMaciej Żenczykowski /* hns3 ethernet controller */
364*1b481fc3SMaciej Żenczykowski int hns3_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
365*1b481fc3SMaciej Żenczykowski 
366*1b481fc3SMaciej Żenczykowski /* Rx flow classification */
367*1b481fc3SMaciej Żenczykowski int rxclass_parse_ruleopts(struct cmd_context *ctx,
368*1b481fc3SMaciej Żenczykowski 			   struct ethtool_rx_flow_spec *fsp, __u32 *rss_context);
369*1b481fc3SMaciej Żenczykowski int rxclass_rule_getall(struct cmd_context *ctx);
370*1b481fc3SMaciej Żenczykowski int rxclass_rule_get(struct cmd_context *ctx, __u32 loc);
371*1b481fc3SMaciej Żenczykowski int rxclass_rule_ins(struct cmd_context *ctx,
372*1b481fc3SMaciej Żenczykowski 		     struct ethtool_rx_flow_spec *fsp, __u32 rss_context);
373*1b481fc3SMaciej Żenczykowski int rxclass_rule_del(struct cmd_context *ctx, __u32 loc);
374*1b481fc3SMaciej Żenczykowski 
375*1b481fc3SMaciej Żenczykowski /* Module EEPROM parsing code */
376*1b481fc3SMaciej Żenczykowski void sff8079_show_all_ioctl(const __u8 *id);
377*1b481fc3SMaciej Żenczykowski int sff8079_show_all_nl(struct cmd_context *ctx);
378*1b481fc3SMaciej Żenczykowski 
379*1b481fc3SMaciej Żenczykowski /* Optics diagnostics */
380*1b481fc3SMaciej Żenczykowski void sff8472_show_all(const __u8 *id);
381*1b481fc3SMaciej Żenczykowski 
382*1b481fc3SMaciej Żenczykowski /* QSFP Optics diagnostics */
383*1b481fc3SMaciej Żenczykowski void sff8636_show_all_ioctl(const __u8 *id, __u32 eeprom_len);
384*1b481fc3SMaciej Żenczykowski int sff8636_show_all_nl(struct cmd_context *ctx);
385*1b481fc3SMaciej Żenczykowski 
386*1b481fc3SMaciej Żenczykowski /* FUJITSU Extended Socket network device */
387*1b481fc3SMaciej Żenczykowski int fjes_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
388*1b481fc3SMaciej Żenczykowski 
389*1b481fc3SMaciej Żenczykowski /* MICROCHIP LAN78XX USB ETHERNET Controller */
390*1b481fc3SMaciej Żenczykowski int lan78xx_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
391*1b481fc3SMaciej Żenczykowski 
392*1b481fc3SMaciej Żenczykowski /* Distributed Switch Architecture */
393*1b481fc3SMaciej Żenczykowski int dsa_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
394*1b481fc3SMaciej Żenczykowski 
395*1b481fc3SMaciej Żenczykowski /* i.MX Fast Ethernet Controller */
396*1b481fc3SMaciej Żenczykowski int fec_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
397*1b481fc3SMaciej Żenczykowski 
398*1b481fc3SMaciej Żenczykowski /* Freescale/NXP ENETC Ethernet Controller */
399*1b481fc3SMaciej Żenczykowski int fsl_enetc_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
400*1b481fc3SMaciej Żenczykowski 
401*1b481fc3SMaciej Żenczykowski /* Intel(R) Ethernet Controller I225-LM/I225-V adapter family */
402*1b481fc3SMaciej Żenczykowski int igc_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
403*1b481fc3SMaciej Żenczykowski 
404*1b481fc3SMaciej Żenczykowski /* Broadcom Ethernet Controller */
405*1b481fc3SMaciej Żenczykowski int bnxt_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
406*1b481fc3SMaciej Żenczykowski 
407*1b481fc3SMaciej Żenczykowski /* TI CPSW Ethernet Switch */
408*1b481fc3SMaciej Żenczykowski int cpsw_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
409*1b481fc3SMaciej Żenczykowski 
410*1b481fc3SMaciej Żenczykowski /* Microchip Ethernet Controller */
411*1b481fc3SMaciej Żenczykowski int lan743x_dump_regs(struct ethtool_drvinfo *info, struct ethtool_regs *regs);
412*1b481fc3SMaciej Żenczykowski 
413*1b481fc3SMaciej Żenczykowski #endif /* ETHTOOL_INTERNAL_H__ */
414