Re: [PATCH 4/9] usb/gadget: u_ether: construct with default values and add setters/getters

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Apr 11 2013, Andrzej Pietrasiewicz wrote:
> When configfs support is added it will be possible to add an unconfigured
> interface to the system. This patch adds an interface to u_ether which
> makes it possible to create a struct eth_dev filled with default values,
> an interface which makes it possible to fill the struct with useful values,
> and an interface which makes it possible to read the values set.
>
> Signed-off-by: Andrzej Pietrasiewicz <andrzej.p@xxxxxxxxxxx>
> Signed-off-by: Kyungmin Park <kyungmin.park@xxxxxxxxxxx>
> ---
>  drivers/usb/gadget/u_ether.c |  173 ++++++++++++++++++++++++++++++++++++++++++
>  drivers/usb/gadget/u_ether.h |  101 ++++++++++++++++++++++++
>  2 files changed, 274 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/usb/gadget/u_ether.c b/drivers/usb/gadget/u_ether.c
> index de9d84f..f9b17c8 100644
> --- a/drivers/usb/gadget/u_ether.c
> +++ b/drivers/usb/gadget/u_ether.c
> @@ -719,6 +719,24 @@ static int get_ether_addr(const char *str, u8 *dev_addr)
>  	return 1;
>  }
>  
> +static int get_ether_addr_str(u8 dev_addr[ETH_ALEN], char *str, int len)
> +{
> +	char *s;
> +
> +	if (len < 16)

Shouldn't that be 18?

> +		return -EINVAL;
> +
> +	hex_dump_to_buffer(dev_addr, ETH_ALEN, 16, 1, str, 20, false);

Ditto.

> +	s = str;
> +	while (*s) {
> +		if (*s == ' ')
> +			*s = ':';
> +		s++;
> +	}
> +
> +	return strlen(str);
> +}

static int get_ether_addr_str(u8 dev_addr[ETH_ALEN], char *str, int len)
{
	if (len < 18)
		return -EINVAL;
	sprintf(str, "%02x:%02x:%02x:%02x:%02x:%02x",
		dev_addr[0], dev_addr[1], dev_addr[2]
		dev_addr[3], dev_addr[4], dev_addr[5]);
	return 18;
}

Much shorter.               

> @@ -812,6 +830,161 @@ struct eth_dev *gether_setup_name(struct usb_gadget *g,
>  }
>  EXPORT_SYMBOL(gether_setup_name);
>  
> +struct net_device *gether_setup_name_default(const char *netname,
> +					     u8 ethaddr[ETH_ALEN])
> +{
> +	struct net_device	*net;
> +	struct eth_dev		*dev;
> +	int			status;
> +
> +	net = alloc_etherdev(sizeof(*dev));
> +	if (!net)
> +		return ERR_PTR(-ENOMEM);
> +
> +	dev = netdev_priv(net);
> +	spin_lock_init(&dev->lock);
> +	spin_lock_init(&dev->req_lock);
> +	INIT_WORK(&dev->work, eth_work);
> +	INIT_LIST_HEAD(&dev->tx_reqs);
> +	INIT_LIST_HEAD(&dev->rx_reqs);
> +
> +	skb_queue_head_init(&dev->rx_frames);
> +
> +	/* network device setup */
> +	dev->net = net;
> +	dev->qmult = QMULT_DEFAULT;
> +	snprintf(net->name, sizeof(net->name), "%s%%d", netname);
> +	dev->parent_dev = gadget_sysfs_root;
> +
> +	eth_random_addr(net->dev_addr);
> +	dev_warn(dev->parent_dev, "using random %s ethernet address\n", "self");
> +	eth_random_addr(dev->host_mac);
> +	dev_warn(dev->parent_dev, "using random %s ethernet address\n", "host");
> +
> +	if (ethaddr)
> +		memcpy(ethaddr, dev->host_mac, ETH_ALEN);
> +
> +	net->netdev_ops = &eth_netdev_ops;
> +
> +	SET_ETHTOOL_OPS(net, &ops);
> +
> +	SET_NETDEV_DEV(net, dev->parent_dev);
> +	SET_NETDEV_DEVTYPE(net, &gadget_type);
> +
> +	status = register_netdev(net);
> +	if (status < 0) {
> +		dev_dbg(dev->parent_dev, "register_netdev failed, %d\n",
> +			status);
> +		free_netdev(net);
> +		dev = ERR_PTR(status);
> +	} else {
> +		INFO(dev, "MAC %pM\n", net->dev_addr);
> +		INFO(dev, "HOST MAC %pM\n", dev->host_mac);
> +
> +		/* two kinds of host-initiated state changes:
> +		 *  - iff DATA transfer is active, carrier is "on"
> +		 *  - tx queueing enabled if open *and* carrier is "on"
> +		 */

Nitpick, but the comment should be:

+		/*
+		 * Two kinds of host-initiated state changes:
+		 *  - iff DATA transfer is active, carrier is "on"
+		 *  - tx queueing enabled if open *and* carrier is "on"
+		 */

> +		netif_carrier_off(net);
> +	}
> +
> +	return net;
> +}

-- 
Best regards,                                         _     _
.o. | Liege of Serenely Enlightened Majesty of      o' \,=./ `o
..o | Computer Science,  Michał “mina86” Nazarewicz    (o o)
ooo +----<email/xmpp: mpn@xxxxxxxxxx>--------------ooO--(_)--Ooo--

Attachment: pgpKdbO95nvUU.pgp
Description: PGP signature


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux