ethtool: Add "-f" option to flash firmware image to a network device.
Subsystems (2)
PATCH 1/1 ethtool: Add "-f" option to flash firmware image to a network device.
Attached is a patch for ethtool utility to add a new "-f" option. This will enable flashing a firmware image to a network interface.
Usage:
ethtool -f <interface name>
Signed-off-by Ajit Khaparde <[email protected]>
--- ethtool-copy.h | 1 + ethtool.c | 22 +++++++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletions(-)
ethtool-copy.h +1 -0
@@ -338,6 +338,7 @@ struct ethtool_rxnfc {#define ETHTOOL_SRXFH 0x0000002a/* Set RX flow hash configuration */ #define ETHTOOL_GGRO 0x0000002b/* Get GRO enable (ethtool_value) */ #define ETHTOOL_SGRO 0x0000002c/* Set GRO enable (ethtool_value) */ +#define ETHTOOL_FLASHDEV 0x00000033/* Flash firmware (ethtool_value) */ /* compatibility with older code */ #define SPARC_ETH_GSET ETHTOOL_GSET
ethtool.c +21 -1
@@ -77,6 +77,7 @@ static char *unparse_rxfhashopts(u64 opts);static int dump_rxfhash (int fhash,u64 val);static int do_srxclass (int fd,struct ifreq *ifr);static int do_grxclass (int fd,struct ifreq *ifr); +static int do_flash (int fd,struct ifreq *ifr);static int send_ioctl (int fd,struct ifreq *ifr); static enum {
@@ -101,6 +102,7 @@ static enum {MODE_GSTATS ,MODE_GNFC ,MODE_SNFC , +MODE_FLASHDEV , } mode = MODE_GSET; static struct option {
@@ -192,6 +194,7 @@ static struct option { "classification options", " [ rx-flow-hash tcp4|udp4|ah4|sctp4|" "tcp6|udp6|ah6|sctp6 p|m|v|t|s|d|f|n|r... ]\n" }, + { "-f", "--flash", MODE_FLASHDEV, "Flash firmware to device" }, { "-h", "--help", MODE_HELP, "Show this help" }, {} };
@@ -496,7 +499,8 @@ static void parse_cmdline(int argc, char **argp) (mode == MODE_GSTATS) || (mode == MODE_GNFC) || (mode == MODE_SNFC) || - (mode == MODE_PHYS_ID)) { + (mode == MODE_PHYS_ID) || + (mode == MODE_FLASHDEV)) { devname = argp[i];break ; }
@@ -1504,6 +1508,8 @@ static int doit(void)return do_grxclass (fd, &ifr); }else if (mode ==MODE_SNFC ) {return do_srxclass (fd, &ifr); + }else if (mode ==MODE_FLASHDEV ) { +return do_flash (fd, &ifr); }return 69 ;
@@ -2398,6 +2404,20 @@ static int do_grxclass(int fd, struct ifreq *ifr)return 0 ; } +static int do_flash (int fd,struct ifreq *ifr) +{ +int err; +struct ethtool_value ecmd; + + ecmd.cmd =ETHTOOL_FLASHDEV ; + ifr->ifr_data = (caddr_t)&ecmd; + err =send_ioctl (fd, ifr); +if (err <0 ) +perror ("Flashing failed" ); + +return err; +} +static int send_ioctl (int fd,struct ifreq *ifr) {return ioctl (fd,SIOCETHTOOL , ifr);
Signature · 1 line
1.6.0.4
Quoted 2 lines · Ajit Khaparde
Attached is a patch for ethtool utility to add a new "-f" option. This will enable flashing a firmware image to a network interface.
Which firmware? There can be several firmware images for controller, PHY, host boot "ROM" and others.
[...]
Quoted 5 lines
ethtool.c +0
-0@@ -2398,6 +2404,20 @@ static int do_grxclass(int fd, struct ifreq *ifr)return 0 ; }
ethtool.c static int do_grxclass(int fd, struct ifreq · line 2417
Quoted 10 lines
ethtool.c +10
-0+static int do_flash (int fd,struct ifreq *ifr) +{ +int err; +struct ethtool_value ecmd; + + ecmd.cmd =ETHTOOL_FLASHDEV ; + ifr->ifr_data = (caddr_t)&ecmd; + err =send_ioctl (fd, ifr); +if (err <0 ) +perror ("Flashing failed" );
[..]
Where does the image come from? The running code? What about static variables that have changed since startup?
Ben.
Signature · 3 lines
Ben Hutchings, Senior Software Engineer, Solarflare Communications Not speaking for my employer; that's the marketing department's job. They asked us to note that Solarflare product names are trademarked.