mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-03 23:58:05 +00:00
Staging: slicoss: remove SLIC_ETHTOOL_SUPPORT
It was always enabled, so just always use it. Cleaned up the ioctl code a bit as well to make it more readable. Cc: Lior Dotan <liodot@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
e8bc9b7a20
commit
e52011e476
1 changed files with 75 additions and 111 deletions
|
@ -94,8 +94,6 @@
|
||||||
#include <asm/unaligned.h>
|
#include <asm/unaligned.h>
|
||||||
|
|
||||||
#include <linux/ethtool.h>
|
#include <linux/ethtool.h>
|
||||||
#define SLIC_ETHTOOL_SUPPORT 1
|
|
||||||
|
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
#include "slicdbg.h"
|
#include "slicdbg.h"
|
||||||
#include "slichw.h"
|
#include "slichw.h"
|
||||||
|
@ -609,35 +607,27 @@ static int slic_entry_halt(struct net_device *dev)
|
||||||
|
|
||||||
static int slic_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
|
static int slic_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
|
||||||
{
|
{
|
||||||
|
struct adapter *adapter = (struct adapter *)netdev_priv(dev);
|
||||||
|
struct ethtool_cmd edata;
|
||||||
|
struct ethtool_cmd ecmd;
|
||||||
|
u32 data[7];
|
||||||
|
u32 intagg;
|
||||||
|
|
||||||
ASSERT(rq);
|
ASSERT(rq);
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case SIOCSLICSETINTAGG:
|
case SIOCSLICSETINTAGG:
|
||||||
{
|
if (copy_from_user(data, rq->ifr_data, 28))
|
||||||
struct adapter *adapter = (struct adapter *)
|
return -EFAULT;
|
||||||
netdev_priv(dev);
|
intagg = data[0];
|
||||||
u32 data[7];
|
printk(KERN_EMERG "%s: set interrupt aggregation to %d\n",
|
||||||
u32 intagg;
|
__func__, intagg);
|
||||||
|
slic_intagg_set(adapter, intagg);
|
||||||
if (copy_from_user(data, rq->ifr_data, 28)) {
|
return 0;
|
||||||
DBG_ERROR
|
|
||||||
("copy_from_user FAILED getting initial \
|
|
||||||
params\n");
|
|
||||||
return -EFAULT;
|
|
||||||
}
|
|
||||||
intagg = data[0];
|
|
||||||
printk(KERN_EMERG
|
|
||||||
"%s: set interrupt aggregation to %d\n",
|
|
||||||
__func__, intagg);
|
|
||||||
slic_intagg_set(adapter, intagg);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef SLIC_TRACE_DUMP_ENABLED
|
#ifdef SLIC_TRACE_DUMP_ENABLED
|
||||||
case SIOCSLICTRACEDUMP:
|
case SIOCSLICTRACEDUMP:
|
||||||
{
|
{
|
||||||
ulong data[7];
|
u32 value;
|
||||||
ulong value;
|
|
||||||
|
|
||||||
DBG_IOCTL("slic_ioctl SIOCSLIC_TRACE_DUMP\n");
|
DBG_IOCTL("slic_ioctl SIOCSLIC_TRACE_DUMP\n");
|
||||||
|
|
||||||
if (copy_from_user(data, rq->ifr_data, 28)) {
|
if (copy_from_user(data, rq->ifr_data, 28)) {
|
||||||
|
@ -670,101 +660,75 @@ static int slic_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if SLIC_ETHTOOL_SUPPORT
|
|
||||||
case SIOCETHTOOL:
|
case SIOCETHTOOL:
|
||||||
{
|
ASSERT(adapter);
|
||||||
struct adapter *adapter = (struct adapter *)
|
if (copy_from_user(&ecmd, rq->ifr_data, sizeof(ecmd)))
|
||||||
netdev_priv(dev);
|
return -EFAULT;
|
||||||
struct ethtool_cmd data;
|
|
||||||
struct ethtool_cmd ecmd;
|
|
||||||
|
|
||||||
ASSERT(adapter);
|
if (ecmd.cmd == ETHTOOL_GSET) {
|
||||||
if (copy_from_user(&ecmd, rq->ifr_data, sizeof(ecmd)))
|
edata.supported = (SUPPORTED_10baseT_Half |
|
||||||
|
SUPPORTED_10baseT_Full |
|
||||||
|
SUPPORTED_100baseT_Half |
|
||||||
|
SUPPORTED_100baseT_Full |
|
||||||
|
SUPPORTED_Autoneg | SUPPORTED_MII);
|
||||||
|
edata.port = PORT_MII;
|
||||||
|
edata.transceiver = XCVR_INTERNAL;
|
||||||
|
edata.phy_address = 0;
|
||||||
|
if (adapter->linkspeed == LINK_100MB)
|
||||||
|
edata.speed = SPEED_100;
|
||||||
|
else if (adapter->linkspeed == LINK_10MB)
|
||||||
|
edata.speed = SPEED_10;
|
||||||
|
else
|
||||||
|
edata.speed = 0;
|
||||||
|
|
||||||
|
if (adapter->linkduplex == LINK_FULLD)
|
||||||
|
edata.duplex = DUPLEX_FULL;
|
||||||
|
else
|
||||||
|
edata.duplex = DUPLEX_HALF;
|
||||||
|
|
||||||
|
edata.autoneg = AUTONEG_ENABLE;
|
||||||
|
edata.maxtxpkt = 1;
|
||||||
|
edata.maxrxpkt = 1;
|
||||||
|
if (copy_to_user(rq->ifr_data, &edata, sizeof(edata)))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
if (ecmd.cmd == ETHTOOL_GSET) {
|
} else if (ecmd.cmd == ETHTOOL_SSET) {
|
||||||
data.supported =
|
if (!capable(CAP_NET_ADMIN))
|
||||||
(SUPPORTED_10baseT_Half |
|
return -EPERM;
|
||||||
SUPPORTED_10baseT_Full |
|
|
||||||
SUPPORTED_100baseT_Half |
|
if (adapter->linkspeed == LINK_100MB)
|
||||||
SUPPORTED_100baseT_Full |
|
edata.speed = SPEED_100;
|
||||||
SUPPORTED_Autoneg | SUPPORTED_MII);
|
else if (adapter->linkspeed == LINK_10MB)
|
||||||
data.port = PORT_MII;
|
edata.speed = SPEED_10;
|
||||||
data.transceiver = XCVR_INTERNAL;
|
else
|
||||||
data.phy_address = 0;
|
edata.speed = 0;
|
||||||
if (adapter->linkspeed == LINK_100MB)
|
|
||||||
data.speed = SPEED_100;
|
if (adapter->linkduplex == LINK_FULLD)
|
||||||
else if (adapter->linkspeed == LINK_10MB)
|
edata.duplex = DUPLEX_FULL;
|
||||||
data.speed = SPEED_10;
|
else
|
||||||
|
edata.duplex = DUPLEX_HALF;
|
||||||
|
|
||||||
|
edata.autoneg = AUTONEG_ENABLE;
|
||||||
|
edata.maxtxpkt = 1;
|
||||||
|
edata.maxrxpkt = 1;
|
||||||
|
if ((ecmd.speed != edata.speed) ||
|
||||||
|
(ecmd.duplex != edata.duplex)) {
|
||||||
|
u32 speed;
|
||||||
|
u32 duplex;
|
||||||
|
|
||||||
|
if (ecmd.speed == SPEED_10)
|
||||||
|
speed = 0;
|
||||||
else
|
else
|
||||||
data.speed = 0;
|
speed = PCR_SPEED_100;
|
||||||
|
if (ecmd.duplex == DUPLEX_FULL)
|
||||||
if (adapter->linkduplex == LINK_FULLD)
|
duplex = PCR_DUPLEX_FULL;
|
||||||
data.duplex = DUPLEX_FULL;
|
|
||||||
else
|
else
|
||||||
data.duplex = DUPLEX_HALF;
|
duplex = 0;
|
||||||
|
slic_link_config(adapter, speed, duplex);
|
||||||
data.autoneg = AUTONEG_ENABLE;
|
slic_link_event_handler(adapter);
|
||||||
data.maxtxpkt = 1;
|
|
||||||
data.maxrxpkt = 1;
|
|
||||||
if (copy_to_user
|
|
||||||
(rq->ifr_data, &data, sizeof(data)))
|
|
||||||
return -EFAULT;
|
|
||||||
|
|
||||||
} else if (ecmd.cmd == ETHTOOL_SSET) {
|
|
||||||
if (!capable(CAP_NET_ADMIN))
|
|
||||||
return -EPERM;
|
|
||||||
|
|
||||||
if (adapter->linkspeed == LINK_100MB)
|
|
||||||
data.speed = SPEED_100;
|
|
||||||
else if (adapter->linkspeed == LINK_10MB)
|
|
||||||
data.speed = SPEED_10;
|
|
||||||
else
|
|
||||||
data.speed = 0;
|
|
||||||
|
|
||||||
if (adapter->linkduplex == LINK_FULLD)
|
|
||||||
data.duplex = DUPLEX_FULL;
|
|
||||||
else
|
|
||||||
data.duplex = DUPLEX_HALF;
|
|
||||||
|
|
||||||
data.autoneg = AUTONEG_ENABLE;
|
|
||||||
data.maxtxpkt = 1;
|
|
||||||
data.maxrxpkt = 1;
|
|
||||||
if ((ecmd.speed != data.speed) ||
|
|
||||||
(ecmd.duplex != data.duplex)) {
|
|
||||||
u32 speed;
|
|
||||||
u32 duplex;
|
|
||||||
|
|
||||||
if (ecmd.speed == SPEED_10) {
|
|
||||||
speed = 0;
|
|
||||||
SLIC_DISPLAY
|
|
||||||
("%s: slic ETHTOOL set \
|
|
||||||
link speed==10MB",
|
|
||||||
dev->name);
|
|
||||||
} else {
|
|
||||||
speed = PCR_SPEED_100;
|
|
||||||
SLIC_DISPLAY
|
|
||||||
("%s: slic ETHTOOL set \
|
|
||||||
link speed==100MB",
|
|
||||||
dev->name);
|
|
||||||
}
|
|
||||||
if (ecmd.duplex == DUPLEX_FULL) {
|
|
||||||
duplex = PCR_DUPLEX_FULL;
|
|
||||||
SLIC_DISPLAY
|
|
||||||
(": duplex==FULL\n");
|
|
||||||
} else {
|
|
||||||
duplex = 0;
|
|
||||||
SLIC_DISPLAY
|
|
||||||
(": duplex==HALF\n");
|
|
||||||
}
|
|
||||||
slic_link_config(adapter,
|
|
||||||
speed, duplex);
|
|
||||||
slic_link_event_handler(adapter);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
#endif
|
return 0;
|
||||||
default:
|
default:
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue