cxgb3 - manage sysfs attributes per port
sysfs attributes are now managed per port, no longer per adapter. Signed-off-by: Divy Le Ray <divy@chelsio.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
d8d70caf83
commit
896392ef94
1 changed files with 12 additions and 9 deletions
|
@ -434,27 +434,25 @@ static int setup_sge_qsets(struct adapter *adap)
|
||||||
|
|
||||||
static ssize_t attr_show(struct device *d, struct device_attribute *attr,
|
static ssize_t attr_show(struct device *d, struct device_attribute *attr,
|
||||||
char *buf,
|
char *buf,
|
||||||
ssize_t(*format) (struct adapter *, char *))
|
ssize_t(*format) (struct net_device *, char *))
|
||||||
{
|
{
|
||||||
ssize_t len;
|
ssize_t len;
|
||||||
struct adapter *adap = to_net_dev(d)->priv;
|
|
||||||
|
|
||||||
/* Synchronize with ioctls that may shut down the device */
|
/* Synchronize with ioctls that may shut down the device */
|
||||||
rtnl_lock();
|
rtnl_lock();
|
||||||
len = (*format) (adap, buf);
|
len = (*format) (to_net_dev(d), buf);
|
||||||
rtnl_unlock();
|
rtnl_unlock();
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t attr_store(struct device *d, struct device_attribute *attr,
|
static ssize_t attr_store(struct device *d, struct device_attribute *attr,
|
||||||
const char *buf, size_t len,
|
const char *buf, size_t len,
|
||||||
ssize_t(*set) (struct adapter *, unsigned int),
|
ssize_t(*set) (struct net_device *, unsigned int),
|
||||||
unsigned int min_val, unsigned int max_val)
|
unsigned int min_val, unsigned int max_val)
|
||||||
{
|
{
|
||||||
char *endp;
|
char *endp;
|
||||||
ssize_t ret;
|
ssize_t ret;
|
||||||
unsigned int val;
|
unsigned int val;
|
||||||
struct adapter *adap = to_net_dev(d)->priv;
|
|
||||||
|
|
||||||
if (!capable(CAP_NET_ADMIN))
|
if (!capable(CAP_NET_ADMIN))
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
|
@ -464,7 +462,7 @@ static ssize_t attr_store(struct device *d, struct device_attribute *attr,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
rtnl_lock();
|
rtnl_lock();
|
||||||
ret = (*set) (adap, val);
|
ret = (*set) (to_net_dev(d), val);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
ret = len;
|
ret = len;
|
||||||
rtnl_unlock();
|
rtnl_unlock();
|
||||||
|
@ -472,8 +470,9 @@ static ssize_t attr_store(struct device *d, struct device_attribute *attr,
|
||||||
}
|
}
|
||||||
|
|
||||||
#define CXGB3_SHOW(name, val_expr) \
|
#define CXGB3_SHOW(name, val_expr) \
|
||||||
static ssize_t format_##name(struct adapter *adap, char *buf) \
|
static ssize_t format_##name(struct net_device *dev, char *buf) \
|
||||||
{ \
|
{ \
|
||||||
|
struct adapter *adap = dev->priv; \
|
||||||
return sprintf(buf, "%u\n", val_expr); \
|
return sprintf(buf, "%u\n", val_expr); \
|
||||||
} \
|
} \
|
||||||
static ssize_t show_##name(struct device *d, struct device_attribute *attr, \
|
static ssize_t show_##name(struct device *d, struct device_attribute *attr, \
|
||||||
|
@ -482,8 +481,10 @@ static ssize_t show_##name(struct device *d, struct device_attribute *attr, \
|
||||||
return attr_show(d, attr, buf, format_##name); \
|
return attr_show(d, attr, buf, format_##name); \
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t set_nfilters(struct adapter *adap, unsigned int val)
|
static ssize_t set_nfilters(struct net_device *dev, unsigned int val)
|
||||||
{
|
{
|
||||||
|
struct adapter *adap = dev->priv;
|
||||||
|
|
||||||
if (adap->flags & FULL_INIT_DONE)
|
if (adap->flags & FULL_INIT_DONE)
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
if (val && adap->params.rev == 0)
|
if (val && adap->params.rev == 0)
|
||||||
|
@ -500,8 +501,10 @@ static ssize_t store_nfilters(struct device *d, struct device_attribute *attr,
|
||||||
return attr_store(d, attr, buf, len, set_nfilters, 0, ~0);
|
return attr_store(d, attr, buf, len, set_nfilters, 0, ~0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t set_nservers(struct adapter *adap, unsigned int val)
|
static ssize_t set_nservers(struct net_device *dev, unsigned int val)
|
||||||
{
|
{
|
||||||
|
struct adapter *adap = dev->priv;
|
||||||
|
|
||||||
if (adap->flags & FULL_INIT_DONE)
|
if (adap->flags & FULL_INIT_DONE)
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
if (val > t3_mc5_size(&adap->mc5) - adap->params.mc5.nfilters)
|
if (val > t3_mc5_size(&adap->mc5) - adap->params.mc5.nfilters)
|
||||||
|
|
Loading…
Add table
Reference in a new issue