net/usb/mcs7830: add set_mac_address
Implement set_mac_address for mcs7830. This enables me to use it with my cable modem. Signed-off-by: Oliver Martin <oliver.martin@student.tuwien.ac.at> Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
This commit is contained in:
committed by
Jeff Garzik
parent
8382cc1c2d
commit
1025433147
@@ -446,6 +446,29 @@ static struct ethtool_ops mcs7830_ethtool_ops = {
|
|||||||
.nway_reset = usbnet_nway_reset,
|
.nway_reset = usbnet_nway_reset,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int mcs7830_set_mac_address(struct net_device *netdev, void *p)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
struct usbnet *dev = netdev_priv(netdev);
|
||||||
|
struct sockaddr *addr = p;
|
||||||
|
|
||||||
|
if (netif_running(netdev))
|
||||||
|
return -EBUSY;
|
||||||
|
|
||||||
|
if (!is_valid_ether_addr(addr->sa_data))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
|
||||||
|
|
||||||
|
ret = mcs7830_set_reg(dev, HIF_REG_ETHERNET_ADDR, ETH_ALEN,
|
||||||
|
netdev->dev_addr);
|
||||||
|
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int mcs7830_bind(struct usbnet *dev, struct usb_interface *udev)
|
static int mcs7830_bind(struct usbnet *dev, struct usb_interface *udev)
|
||||||
{
|
{
|
||||||
struct net_device *net = dev->net;
|
struct net_device *net = dev->net;
|
||||||
@@ -459,6 +482,7 @@ static int mcs7830_bind(struct usbnet *dev, struct usb_interface *udev)
|
|||||||
net->ethtool_ops = &mcs7830_ethtool_ops;
|
net->ethtool_ops = &mcs7830_ethtool_ops;
|
||||||
net->set_multicast_list = mcs7830_set_multicast;
|
net->set_multicast_list = mcs7830_set_multicast;
|
||||||
mcs7830_set_multicast(net);
|
mcs7830_set_multicast(net);
|
||||||
|
net->set_mac_address = mcs7830_set_mac_address;
|
||||||
|
|
||||||
/* reserve space for the status byte on rx */
|
/* reserve space for the status byte on rx */
|
||||||
dev->rx_urb_size = ETH_FRAME_LEN + 1;
|
dev->rx_urb_size = ETH_FRAME_LEN + 1;
|
||||||
|
Reference in New Issue
Block a user