mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 22:51:42 +00:00
Sanitise ethtool.h and mii.h for userspace.
They shouldn't be using 'u32' et al in structures which are used for communication with userspace. Switch to the proper types (__u32 etc). Signed-off-by: David Woodhouse <dwmw2@infradead.org>
This commit is contained in:
parent
5614253686
commit
c3ce7e203a
@ -15,24 +15,24 @@
|
||||
|
||||
/* This should work for both 32 and 64 bit userland. */
|
||||
struct ethtool_cmd {
|
||||
u32 cmd;
|
||||
u32 supported; /* Features this interface supports */
|
||||
u32 advertising; /* Features this interface advertises */
|
||||
u16 speed; /* The forced speed, 10Mb, 100Mb, gigabit */
|
||||
u8 duplex; /* Duplex, half or full */
|
||||
u8 port; /* Which connector port */
|
||||
u8 phy_address;
|
||||
u8 transceiver; /* Which transceiver to use */
|
||||
u8 autoneg; /* Enable or disable autonegotiation */
|
||||
u32 maxtxpkt; /* Tx pkts before generating tx int */
|
||||
u32 maxrxpkt; /* Rx pkts before generating rx int */
|
||||
u32 reserved[4];
|
||||
__u32 cmd;
|
||||
__u32 supported; /* Features this interface supports */
|
||||
__u32 advertising; /* Features this interface advertises */
|
||||
__u16 speed; /* The forced speed, 10Mb, 100Mb, gigabit */
|
||||
__u8 duplex; /* Duplex, half or full */
|
||||
__u8 port; /* Which connector port */
|
||||
__u8 phy_address;
|
||||
__u8 transceiver; /* Which transceiver to use */
|
||||
__u8 autoneg; /* Enable or disable autonegotiation */
|
||||
__u32 maxtxpkt; /* Tx pkts before generating tx int */
|
||||
__u32 maxrxpkt; /* Rx pkts before generating rx int */
|
||||
__u32 reserved[4];
|
||||
};
|
||||
|
||||
#define ETHTOOL_BUSINFO_LEN 32
|
||||
/* these strings are set to whatever the driver author decides... */
|
||||
struct ethtool_drvinfo {
|
||||
u32 cmd;
|
||||
__u32 cmd;
|
||||
char driver[32]; /* driver short name, "tulip", "eepro100" */
|
||||
char version[32]; /* driver version string */
|
||||
char fw_version[32]; /* firmware version string, if applicable */
|
||||
@ -40,53 +40,53 @@ struct ethtool_drvinfo {
|
||||
/* For PCI devices, use pci_name(pci_dev). */
|
||||
char reserved1[32];
|
||||
char reserved2[16];
|
||||
u32 n_stats; /* number of u64's from ETHTOOL_GSTATS */
|
||||
u32 testinfo_len;
|
||||
u32 eedump_len; /* Size of data from ETHTOOL_GEEPROM (bytes) */
|
||||
u32 regdump_len; /* Size of data from ETHTOOL_GREGS (bytes) */
|
||||
__u32 n_stats; /* number of u64's from ETHTOOL_GSTATS */
|
||||
__u32 testinfo_len;
|
||||
__u32 eedump_len; /* Size of data from ETHTOOL_GEEPROM (bytes) */
|
||||
__u32 regdump_len; /* Size of data from ETHTOOL_GREGS (bytes) */
|
||||
};
|
||||
|
||||
#define SOPASS_MAX 6
|
||||
/* wake-on-lan settings */
|
||||
struct ethtool_wolinfo {
|
||||
u32 cmd;
|
||||
u32 supported;
|
||||
u32 wolopts;
|
||||
u8 sopass[SOPASS_MAX]; /* SecureOn(tm) password */
|
||||
__u32 cmd;
|
||||
__u32 supported;
|
||||
__u32 wolopts;
|
||||
__u8 sopass[SOPASS_MAX]; /* SecureOn(tm) password */
|
||||
};
|
||||
|
||||
/* for passing single values */
|
||||
struct ethtool_value {
|
||||
u32 cmd;
|
||||
u32 data;
|
||||
__u32 cmd;
|
||||
__u32 data;
|
||||
};
|
||||
|
||||
/* for passing big chunks of data */
|
||||
struct ethtool_regs {
|
||||
u32 cmd;
|
||||
u32 version; /* driver-specific, indicates different chips/revs */
|
||||
u32 len; /* bytes */
|
||||
u8 data[0];
|
||||
__u32 cmd;
|
||||
__u32 version; /* driver-specific, indicates different chips/revs */
|
||||
__u32 len; /* bytes */
|
||||
__u8 data[0];
|
||||
};
|
||||
|
||||
/* for passing EEPROM chunks */
|
||||
struct ethtool_eeprom {
|
||||
u32 cmd;
|
||||
u32 magic;
|
||||
u32 offset; /* in bytes */
|
||||
u32 len; /* in bytes */
|
||||
u8 data[0];
|
||||
__u32 cmd;
|
||||
__u32 magic;
|
||||
__u32 offset; /* in bytes */
|
||||
__u32 len; /* in bytes */
|
||||
__u8 data[0];
|
||||
};
|
||||
|
||||
/* for configuring coalescing parameters of chip */
|
||||
struct ethtool_coalesce {
|
||||
u32 cmd; /* ETHTOOL_{G,S}COALESCE */
|
||||
__u32 cmd; /* ETHTOOL_{G,S}COALESCE */
|
||||
|
||||
/* How many usecs to delay an RX interrupt after
|
||||
* a packet arrives. If 0, only rx_max_coalesced_frames
|
||||
* is used.
|
||||
*/
|
||||
u32 rx_coalesce_usecs;
|
||||
__u32 rx_coalesce_usecs;
|
||||
|
||||
/* How many packets to delay an RX interrupt after
|
||||
* a packet arrives. If 0, only rx_coalesce_usecs is
|
||||
@ -94,21 +94,21 @@ struct ethtool_coalesce {
|
||||
* to zero as this would cause RX interrupts to never be
|
||||
* generated.
|
||||
*/
|
||||
u32 rx_max_coalesced_frames;
|
||||
__u32 rx_max_coalesced_frames;
|
||||
|
||||
/* Same as above two parameters, except that these values
|
||||
* apply while an IRQ is being serviced by the host. Not
|
||||
* all cards support this feature and the values are ignored
|
||||
* in that case.
|
||||
*/
|
||||
u32 rx_coalesce_usecs_irq;
|
||||
u32 rx_max_coalesced_frames_irq;
|
||||
__u32 rx_coalesce_usecs_irq;
|
||||
__u32 rx_max_coalesced_frames_irq;
|
||||
|
||||
/* How many usecs to delay a TX interrupt after
|
||||
* a packet is sent. If 0, only tx_max_coalesced_frames
|
||||
* is used.
|
||||
*/
|
||||
u32 tx_coalesce_usecs;
|
||||
__u32 tx_coalesce_usecs;
|
||||
|
||||
/* How many packets to delay a TX interrupt after
|
||||
* a packet is sent. If 0, only tx_coalesce_usecs is
|
||||
@ -116,22 +116,22 @@ struct ethtool_coalesce {
|
||||
* to zero as this would cause TX interrupts to never be
|
||||
* generated.
|
||||
*/
|
||||
u32 tx_max_coalesced_frames;
|
||||
__u32 tx_max_coalesced_frames;
|
||||
|
||||
/* Same as above two parameters, except that these values
|
||||
* apply while an IRQ is being serviced by the host. Not
|
||||
* all cards support this feature and the values are ignored
|
||||
* in that case.
|
||||
*/
|
||||
u32 tx_coalesce_usecs_irq;
|
||||
u32 tx_max_coalesced_frames_irq;
|
||||
__u32 tx_coalesce_usecs_irq;
|
||||
__u32 tx_max_coalesced_frames_irq;
|
||||
|
||||
/* How many usecs to delay in-memory statistics
|
||||
* block updates. Some drivers do not have an in-memory
|
||||
* statistic block, and in such cases this value is ignored.
|
||||
* This value must not be zero.
|
||||
*/
|
||||
u32 stats_block_coalesce_usecs;
|
||||
__u32 stats_block_coalesce_usecs;
|
||||
|
||||
/* Adaptive RX/TX coalescing is an algorithm implemented by
|
||||
* some drivers to improve latency under low packet rates and
|
||||
@ -140,18 +140,18 @@ struct ethtool_coalesce {
|
||||
* not implemented by the driver causes these values to be
|
||||
* silently ignored.
|
||||
*/
|
||||
u32 use_adaptive_rx_coalesce;
|
||||
u32 use_adaptive_tx_coalesce;
|
||||
__u32 use_adaptive_rx_coalesce;
|
||||
__u32 use_adaptive_tx_coalesce;
|
||||
|
||||
/* When the packet rate (measured in packets per second)
|
||||
* is below pkt_rate_low, the {rx,tx}_*_low parameters are
|
||||
* used.
|
||||
*/
|
||||
u32 pkt_rate_low;
|
||||
u32 rx_coalesce_usecs_low;
|
||||
u32 rx_max_coalesced_frames_low;
|
||||
u32 tx_coalesce_usecs_low;
|
||||
u32 tx_max_coalesced_frames_low;
|
||||
__u32 pkt_rate_low;
|
||||
__u32 rx_coalesce_usecs_low;
|
||||
__u32 rx_max_coalesced_frames_low;
|
||||
__u32 tx_coalesce_usecs_low;
|
||||
__u32 tx_max_coalesced_frames_low;
|
||||
|
||||
/* When the packet rate is below pkt_rate_high but above
|
||||
* pkt_rate_low (both measured in packets per second) the
|
||||
@ -162,43 +162,43 @@ struct ethtool_coalesce {
|
||||
* is above pkt_rate_high, the {rx,tx}_*_high parameters are
|
||||
* used.
|
||||
*/
|
||||
u32 pkt_rate_high;
|
||||
u32 rx_coalesce_usecs_high;
|
||||
u32 rx_max_coalesced_frames_high;
|
||||
u32 tx_coalesce_usecs_high;
|
||||
u32 tx_max_coalesced_frames_high;
|
||||
__u32 pkt_rate_high;
|
||||
__u32 rx_coalesce_usecs_high;
|
||||
__u32 rx_max_coalesced_frames_high;
|
||||
__u32 tx_coalesce_usecs_high;
|
||||
__u32 tx_max_coalesced_frames_high;
|
||||
|
||||
/* How often to do adaptive coalescing packet rate sampling,
|
||||
* measured in seconds. Must not be zero.
|
||||
*/
|
||||
u32 rate_sample_interval;
|
||||
__u32 rate_sample_interval;
|
||||
};
|
||||
|
||||
/* for configuring RX/TX ring parameters */
|
||||
struct ethtool_ringparam {
|
||||
u32 cmd; /* ETHTOOL_{G,S}RINGPARAM */
|
||||
__u32 cmd; /* ETHTOOL_{G,S}RINGPARAM */
|
||||
|
||||
/* Read only attributes. These indicate the maximum number
|
||||
* of pending RX/TX ring entries the driver will allow the
|
||||
* user to set.
|
||||
*/
|
||||
u32 rx_max_pending;
|
||||
u32 rx_mini_max_pending;
|
||||
u32 rx_jumbo_max_pending;
|
||||
u32 tx_max_pending;
|
||||
__u32 rx_max_pending;
|
||||
__u32 rx_mini_max_pending;
|
||||
__u32 rx_jumbo_max_pending;
|
||||
__u32 tx_max_pending;
|
||||
|
||||
/* Values changeable by the user. The valid values are
|
||||
* in the range 1 to the "*_max_pending" counterpart above.
|
||||
*/
|
||||
u32 rx_pending;
|
||||
u32 rx_mini_pending;
|
||||
u32 rx_jumbo_pending;
|
||||
u32 tx_pending;
|
||||
__u32 rx_pending;
|
||||
__u32 rx_mini_pending;
|
||||
__u32 rx_jumbo_pending;
|
||||
__u32 tx_pending;
|
||||
};
|
||||
|
||||
/* for configuring link flow control parameters */
|
||||
struct ethtool_pauseparam {
|
||||
u32 cmd; /* ETHTOOL_{G,S}PAUSEPARAM */
|
||||
__u32 cmd; /* ETHTOOL_{G,S}PAUSEPARAM */
|
||||
|
||||
/* If the link is being auto-negotiated (via ethtool_cmd.autoneg
|
||||
* being true) the user may set 'autonet' here non-zero to have the
|
||||
@ -210,9 +210,9 @@ struct ethtool_pauseparam {
|
||||
* then {rx,tx}_pause force the driver to use/not-use pause
|
||||
* flow control.
|
||||
*/
|
||||
u32 autoneg;
|
||||
u32 rx_pause;
|
||||
u32 tx_pause;
|
||||
__u32 autoneg;
|
||||
__u32 rx_pause;
|
||||
__u32 tx_pause;
|
||||
};
|
||||
|
||||
#define ETH_GSTRING_LEN 32
|
||||
@ -223,10 +223,10 @@ enum ethtool_stringset {
|
||||
|
||||
/* for passing string sets for data tagging */
|
||||
struct ethtool_gstrings {
|
||||
u32 cmd; /* ETHTOOL_GSTRINGS */
|
||||
u32 string_set; /* string set id e.c. ETH_SS_TEST, etc*/
|
||||
u32 len; /* number of strings in the string set */
|
||||
u8 data[0];
|
||||
__u32 cmd; /* ETHTOOL_GSTRINGS */
|
||||
__u32 string_set; /* string set id e.c. ETH_SS_TEST, etc*/
|
||||
__u32 len; /* number of strings in the string set */
|
||||
__u8 data[0];
|
||||
};
|
||||
|
||||
enum ethtool_test_flags {
|
||||
@ -236,26 +236,28 @@ enum ethtool_test_flags {
|
||||
|
||||
/* for requesting NIC test and getting results*/
|
||||
struct ethtool_test {
|
||||
u32 cmd; /* ETHTOOL_TEST */
|
||||
u32 flags; /* ETH_TEST_FL_xxx */
|
||||
u32 reserved;
|
||||
u32 len; /* result length, in number of u64 elements */
|
||||
u64 data[0];
|
||||
__u32 cmd; /* ETHTOOL_TEST */
|
||||
__u32 flags; /* ETH_TEST_FL_xxx */
|
||||
__u32 reserved;
|
||||
__u32 len; /* result length, in number of u64 elements */
|
||||
__u64 data[0];
|
||||
};
|
||||
|
||||
/* for dumping NIC-specific statistics */
|
||||
struct ethtool_stats {
|
||||
u32 cmd; /* ETHTOOL_GSTATS */
|
||||
u32 n_stats; /* number of u64's being returned */
|
||||
u64 data[0];
|
||||
__u32 cmd; /* ETHTOOL_GSTATS */
|
||||
__u32 n_stats; /* number of u64's being returned */
|
||||
__u64 data[0];
|
||||
};
|
||||
|
||||
struct ethtool_perm_addr {
|
||||
u32 cmd; /* ETHTOOL_GPERMADDR */
|
||||
u32 size;
|
||||
u8 data[0];
|
||||
__u32 cmd; /* ETHTOOL_GPERMADDR */
|
||||
__u32 size;
|
||||
__u8 data[0];
|
||||
};
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
struct net_device;
|
||||
|
||||
/* Some generic methods drivers may use in their ethtool_ops */
|
||||
@ -371,6 +373,7 @@ struct ethtool_ops {
|
||||
u32 (*get_ufo)(struct net_device *);
|
||||
int (*set_ufo)(struct net_device *, u32);
|
||||
};
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
/* CMDs currently supported */
|
||||
#define ETHTOOL_GSET 0x00000001 /* Get settings. */
|
||||
|
@ -9,7 +9,6 @@
|
||||
#define __LINUX_MII_H__
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/if.h>
|
||||
|
||||
/* Generic MII registers. */
|
||||
|
||||
@ -136,6 +135,20 @@
|
||||
#define LPA_1000FULL 0x0800 /* Link partner 1000BASE-T full duplex */
|
||||
#define LPA_1000HALF 0x0400 /* Link partner 1000BASE-T half duplex */
|
||||
|
||||
/* This structure is used in all SIOCxMIIxxx ioctl calls */
|
||||
struct mii_ioctl_data {
|
||||
__u16 phy_id;
|
||||
__u16 reg_num;
|
||||
__u16 val_in;
|
||||
__u16 val_out;
|
||||
};
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <linux/if.h>
|
||||
|
||||
struct ethtool_cmd;
|
||||
|
||||
struct mii_if_info {
|
||||
int phy_id;
|
||||
int advertising;
|
||||
@ -151,9 +164,6 @@ struct mii_if_info {
|
||||
void (*mdio_write) (struct net_device *dev, int phy_id, int location, int val);
|
||||
};
|
||||
|
||||
struct ethtool_cmd;
|
||||
struct mii_ioctl_data;
|
||||
|
||||
extern int mii_link_ok (struct mii_if_info *mii);
|
||||
extern int mii_nway_restart (struct mii_if_info *mii);
|
||||
extern int mii_ethtool_gset(struct mii_if_info *mii, struct ethtool_cmd *ecmd);
|
||||
@ -168,16 +178,6 @@ extern int generic_mii_ioctl(struct mii_if_info *mii_if,
|
||||
unsigned int *duplex_changed);
|
||||
|
||||
|
||||
|
||||
/* This structure is used in all SIOCxMIIxxx ioctl calls */
|
||||
struct mii_ioctl_data {
|
||||
u16 phy_id;
|
||||
u16 reg_num;
|
||||
u16 val_in;
|
||||
u16 val_out;
|
||||
};
|
||||
|
||||
|
||||
static inline struct mii_ioctl_data *if_mii(struct ifreq *rq)
|
||||
{
|
||||
return (struct mii_ioctl_data *) &rq->ifr_ifru;
|
||||
@ -235,5 +235,5 @@ static inline unsigned int mii_duplex (unsigned int duplex_lock,
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#endif /* __KERNEL__ */
|
||||
#endif /* __LINUX_MII_H__ */
|
||||
|
Loading…
Reference in New Issue
Block a user