summaryrefslogtreecommitdiff
path: root/target/linux/adm5120/patches-2.6.31/810-adm5120sw-netdev_ops.patch
blob: ae116509cb1bd2d93adead713729a1b90bc9f5df (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
--- a/drivers/net/adm5120sw.c
+++ b/drivers/net/adm5120sw.c
@@ -973,9 +973,12 @@ static void adm5120_if_set_multicast_lis
 
 static int adm5120_if_set_mac_address(struct net_device *dev, void *p)
 {
-	struct sockaddr *addr = p;
+	int ret;
+
+	ret = eth_mac_addr(dev, p);
+	if (ret)
+		return ret;
 
-	memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
 	adm5120_write_mac(dev);
 	return 0;
 }
@@ -1017,6 +1020,18 @@ static int adm5120_if_do_ioctl(struct ne
 	return 0;
 }
 
+static const struct net_device_ops adm5120sw_netdev_ops = {
+        .ndo_open               = adm5120_if_open,
+        .ndo_stop               = adm5120_if_stop,
+        .ndo_start_xmit         = adm5120_if_hard_start_xmit,
+        .ndo_set_multicast_list = adm5120_if_set_multicast_list,
+        .ndo_do_ioctl           = adm5120_if_do_ioctl,
+        .ndo_tx_timeout         = adm5120_if_tx_timeout,
+        .ndo_validate_addr      = eth_validate_addr,
+        .ndo_change_mtu         = eth_change_mtu,
+	.ndo_set_mac_address    = adm5120_if_set_mac_address,
+};
+
 static struct net_device *adm5120_if_alloc(void)
 {
 	struct net_device *dev;
@@ -1030,14 +1045,8 @@ static struct net_device *adm5120_if_all
 	priv->dev = dev;
 
 	dev->irq		= ADM5120_IRQ_SWITCH;
-	dev->open		= adm5120_if_open;
-	dev->hard_start_xmit 	= adm5120_if_hard_start_xmit;
-	dev->stop		= adm5120_if_stop;
-	dev->set_multicast_list	= adm5120_if_set_multicast_list;
-	dev->do_ioctl		= adm5120_if_do_ioctl;
-	dev->tx_timeout		= adm5120_if_tx_timeout;
+	dev->netdev_ops		= &adm5120sw_netdev_ops;
 	dev->watchdog_timeo 	= TX_TIMEOUT;
-	dev->set_mac_address 	= adm5120_if_set_mac_address;
 
 #ifdef CONFIG_ADM5120_SWITCH_NAPI
 	netif_napi_add(dev, &priv->napi, adm5120_if_poll, 64);