Commit 3343c49a authored by Arnd Bergmann's avatar Arnd Bergmann Committed by David S. Miller

staging: wlan-ng: use siocdevprivate

wlan-ng has two private ioctls that correctly work in compat
mode. Move these over to the new ndo_siocdevprivate mechanism.

The p80211netdev_ethtool() function is commented out and
has no use here, so this can be removed
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 89939e89
...@@ -98,8 +98,8 @@ static int p80211knetdev_stop(struct net_device *netdev); ...@@ -98,8 +98,8 @@ static int p80211knetdev_stop(struct net_device *netdev);
static netdev_tx_t p80211knetdev_hard_start_xmit(struct sk_buff *skb, static netdev_tx_t p80211knetdev_hard_start_xmit(struct sk_buff *skb,
struct net_device *netdev); struct net_device *netdev);
static void p80211knetdev_set_multicast_list(struct net_device *dev); static void p80211knetdev_set_multicast_list(struct net_device *dev);
static int p80211knetdev_do_ioctl(struct net_device *dev, struct ifreq *ifr, static int p80211knetdev_siocdevprivate(struct net_device *dev, struct ifreq *ifr,
int cmd); void __user *data, int cmd);
static int p80211knetdev_set_mac_address(struct net_device *dev, void *addr); static int p80211knetdev_set_mac_address(struct net_device *dev, void *addr);
static void p80211knetdev_tx_timeout(struct net_device *netdev, unsigned int txqueue); static void p80211knetdev_tx_timeout(struct net_device *netdev, unsigned int txqueue);
static int p80211_rx_typedrop(struct wlandevice *wlandev, u16 fc); static int p80211_rx_typedrop(struct wlandevice *wlandev, u16 fc);
...@@ -461,56 +461,8 @@ static void p80211knetdev_set_multicast_list(struct net_device *dev) ...@@ -461,56 +461,8 @@ static void p80211knetdev_set_multicast_list(struct net_device *dev)
wlandev->set_multicast_list(wlandev, dev); wlandev->set_multicast_list(wlandev, dev);
} }
#ifdef SIOCETHTOOL
static int p80211netdev_ethtool(struct wlandevice *wlandev,
void __user *useraddr)
{
u32 ethcmd;
struct ethtool_drvinfo info;
struct ethtool_value edata;
memset(&info, 0, sizeof(info));
memset(&edata, 0, sizeof(edata));
if (copy_from_user(&ethcmd, useraddr, sizeof(ethcmd)))
return -EFAULT;
switch (ethcmd) {
case ETHTOOL_GDRVINFO:
info.cmd = ethcmd;
snprintf(info.driver, sizeof(info.driver), "p80211_%s",
wlandev->nsdname);
snprintf(info.version, sizeof(info.version), "%s",
WLAN_RELEASE);
if (copy_to_user(useraddr, &info, sizeof(info)))
return -EFAULT;
return 0;
#ifdef ETHTOOL_GLINK
case ETHTOOL_GLINK:
edata.cmd = ethcmd;
if (wlandev->linkstatus &&
(wlandev->macmode != WLAN_MACMODE_NONE)) {
edata.data = 1;
} else {
edata.data = 0;
}
if (copy_to_user(useraddr, &edata, sizeof(edata)))
return -EFAULT;
return 0;
#endif
}
return -EOPNOTSUPP;
}
#endif
/*---------------------------------------------------------------- /*----------------------------------------------------------------
* p80211knetdev_do_ioctl * p80211knetdev_siocdevprivate
* *
* Handle an ioctl call on one of our devices. Everything Linux * Handle an ioctl call on one of our devices. Everything Linux
* ioctl specific is done here. Then we pass the contents of the * ioctl specific is done here. Then we pass the contents of the
...@@ -537,8 +489,9 @@ static int p80211netdev_ethtool(struct wlandevice *wlandev, ...@@ -537,8 +489,9 @@ static int p80211netdev_ethtool(struct wlandevice *wlandev,
* locks. * locks.
*---------------------------------------------------------------- *----------------------------------------------------------------
*/ */
static int p80211knetdev_do_ioctl(struct net_device *dev, static int p80211knetdev_siocdevprivate(struct net_device *dev,
struct ifreq *ifr, int cmd) struct ifreq *ifr,
void __user *data, int cmd)
{ {
int result = 0; int result = 0;
struct p80211ioctl_req *req = (struct p80211ioctl_req *)ifr; struct p80211ioctl_req *req = (struct p80211ioctl_req *)ifr;
...@@ -547,13 +500,8 @@ static int p80211knetdev_do_ioctl(struct net_device *dev, ...@@ -547,13 +500,8 @@ static int p80211knetdev_do_ioctl(struct net_device *dev,
netdev_dbg(dev, "rx'd ioctl, cmd=%d, len=%d\n", cmd, req->len); netdev_dbg(dev, "rx'd ioctl, cmd=%d, len=%d\n", cmd, req->len);
#ifdef SIOCETHTOOL if (in_compat_syscall())
if (cmd == SIOCETHTOOL) { return -EOPNOTSUPP;
result =
p80211netdev_ethtool(wlandev, (void __user *)ifr->ifr_data);
goto bail;
}
#endif
/* Test the magic, assume ifr is good if it's there */ /* Test the magic, assume ifr is good if it's there */
if (req->magic != P80211_IOCTL_MAGIC) { if (req->magic != P80211_IOCTL_MAGIC) {
...@@ -569,7 +517,7 @@ static int p80211knetdev_do_ioctl(struct net_device *dev, ...@@ -569,7 +517,7 @@ static int p80211knetdev_do_ioctl(struct net_device *dev,
goto bail; goto bail;
} }
msgbuf = memdup_user(req->data, req->len); msgbuf = memdup_user(data, req->len);
if (IS_ERR(msgbuf)) { if (IS_ERR(msgbuf)) {
result = PTR_ERR(msgbuf); result = PTR_ERR(msgbuf);
goto bail; goto bail;
...@@ -578,10 +526,8 @@ static int p80211knetdev_do_ioctl(struct net_device *dev, ...@@ -578,10 +526,8 @@ static int p80211knetdev_do_ioctl(struct net_device *dev,
result = p80211req_dorequest(wlandev, msgbuf); result = p80211req_dorequest(wlandev, msgbuf);
if (result == 0) { if (result == 0) {
if (copy_to_user if (copy_to_user(data, msgbuf, req->len))
(req->data, msgbuf, req->len)) {
result = -EFAULT; result = -EFAULT;
}
} }
kfree(msgbuf); kfree(msgbuf);
...@@ -682,7 +628,7 @@ static const struct net_device_ops p80211_netdev_ops = { ...@@ -682,7 +628,7 @@ static const struct net_device_ops p80211_netdev_ops = {
.ndo_stop = p80211knetdev_stop, .ndo_stop = p80211knetdev_stop,
.ndo_start_xmit = p80211knetdev_hard_start_xmit, .ndo_start_xmit = p80211knetdev_hard_start_xmit,
.ndo_set_rx_mode = p80211knetdev_set_multicast_list, .ndo_set_rx_mode = p80211knetdev_set_multicast_list,
.ndo_do_ioctl = p80211knetdev_do_ioctl, .ndo_siocdevprivate = p80211knetdev_siocdevprivate,
.ndo_set_mac_address = p80211knetdev_set_mac_address, .ndo_set_mac_address = p80211knetdev_set_mac_address,
.ndo_tx_timeout = p80211knetdev_tx_timeout, .ndo_tx_timeout = p80211knetdev_tx_timeout,
.ndo_validate_addr = eth_validate_addr, .ndo_validate_addr = eth_validate_addr,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment