|
@@ -1327,6 +1327,28 @@ static unsigned long ibmveth_get_desired_dma(struct vio_dev *vdev)
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+static int ibmveth_set_mac_addr(struct net_device *dev, void *p)
|
|
|
+{
|
|
|
+ struct ibmveth_adapter *adapter = netdev_priv(dev);
|
|
|
+ struct sockaddr *addr = p;
|
|
|
+ u64 mac_address;
|
|
|
+ int rc;
|
|
|
+
|
|
|
+ if (!is_valid_ether_addr(addr->sa_data))
|
|
|
+ return -EADDRNOTAVAIL;
|
|
|
+
|
|
|
+ mac_address = ibmveth_encode_mac_addr(addr->sa_data);
|
|
|
+ rc = h_change_logical_lan_mac(adapter->vdev->unit_address, mac_address);
|
|
|
+ if (rc) {
|
|
|
+ netdev_err(adapter->netdev, "h_change_logical_lan_mac failed with rc=%d\n", rc);
|
|
|
+ return rc;
|
|
|
+ }
|
|
|
+
|
|
|
+ ether_addr_copy(dev->dev_addr, addr->sa_data);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static const struct net_device_ops ibmveth_netdev_ops = {
|
|
|
.ndo_open = ibmveth_open,
|
|
|
.ndo_stop = ibmveth_close,
|
|
@@ -1337,7 +1359,7 @@ static const struct net_device_ops ibmveth_netdev_ops = {
|
|
|
.ndo_fix_features = ibmveth_fix_features,
|
|
|
.ndo_set_features = ibmveth_set_features,
|
|
|
.ndo_validate_addr = eth_validate_addr,
|
|
|
- .ndo_set_mac_address = eth_mac_addr,
|
|
|
+ .ndo_set_mac_address = ibmveth_set_mac_addr,
|
|
|
#ifdef CONFIG_NET_POLL_CONTROLLER
|
|
|
.ndo_poll_controller = ibmveth_poll_controller,
|
|
|
#endif
|