/*
*
- * linux/drivers/s390/net/qeth_sys.c ($Revision: 1.24 $)
+ * linux/drivers/s390/net/qeth_sys.c ($Revision: 1.32 $)
*
* Linux on zSeries OSA Express and HiperSockets support
* This file contains code related to sysfs.
#include "qeth_mpc.h"
#include "qeth_fs.h"
+const char *VERSION_QETH_SYS_C = "$Revision: 1.32 $";
+
/*****************************************************************************/
/* */
/* /sys-fs stuff UNDER DEVELOPMENT !!! */
qeth_dev_bufcnt_store);
static inline ssize_t
-qeth_dev_route_show(struct qeth_routing_info *route, char *buf)
+qeth_dev_route_show(struct qeth_card *card, struct qeth_routing_info *route,
+ char *buf)
{
switch (route->type) {
case PRIMARY_ROUTER:
case SECONDARY_ROUTER:
return sprintf(buf, "%s\n", "secondary router");
case MULTICAST_ROUTER:
- return sprintf(buf, "%s\n", "multicast router");
+ if (card->info.broadcast_capable == QETH_BROADCAST_WITHOUT_ECHO)
+ return sprintf(buf, "%s\n", "multicast router+");
+ else
+ return sprintf(buf, "%s\n", "multicast router");
case PRIMARY_CONNECTOR:
- return sprintf(buf, "%s\n", "primary connector");
+ if (card->info.broadcast_capable == QETH_BROADCAST_WITHOUT_ECHO)
+ return sprintf(buf, "%s\n", "primary connector+");
+ else
+ return sprintf(buf, "%s\n", "primary connector");
case SECONDARY_CONNECTOR:
- return sprintf(buf, "%s\n", "secondary connector");
+ if (card->info.broadcast_capable == QETH_BROADCAST_WITHOUT_ECHO)
+ return sprintf(buf, "%s\n", "secondary connector+");
+ else
+ return sprintf(buf, "%s\n", "secondary connector");
default:
return sprintf(buf, "%s\n", "no");
}
if (!card)
return -EINVAL;
- return qeth_dev_route_show(&card->options.route4, buf);
+ return qeth_dev_route_show(card, &card->options.route4, buf);
}
static inline ssize_t
if (!qeth_is_supported(card, IPA_IPV6))
return sprintf(buf, "%s\n", "n/a");
- return qeth_dev_route_show(&card->options.route6, buf);
+ return qeth_dev_route_show(card, &card->options.route6, buf);
}
static ssize_t
if (!card)
return -EINVAL;
+ if ((card->state != CARD_STATE_DOWN) &&
+ (card->state != CARD_STATE_RECOVER))
+ return -EPERM;
+
tmp = strsep((char **) &buf, "\n");
if (!strcmp(tmp, "toggle")){
card->ipato.enabled = (card->ipato.enabled)? 0 : 1;
static DRIVER_ATTR(group, 0200, 0, qeth_driver_group_store);
static ssize_t
-qeth_driver_snmp_register_show(struct device_driver *ddrv, char *buf)
-{
- /* TODO */
- return 0;
-}
-
-static ssize_t
-qeth_driver_snmp_register_store(struct device_driver *ddrv, const char *buf,
+qeth_driver_notifier_register_store(struct device_driver *ddrv, const char *buf,
size_t count)
{
- /* TODO */
+ int rc;
+ int signum;
+ char *tmp, *tmp2;
+
+ tmp = strsep((char **) &buf, "\n");
+ if (!strncmp(tmp, "unregister", 10)){
+ if ((rc = qeth_notifier_unregister(current)))
+ return rc;
+ return count;
+ }
+
+ signum = simple_strtoul(tmp, &tmp2, 10);
+ if ((signum < 0) || (signum > 32)){
+ PRINT_WARN("Signal number %d is out of range\n", signum);
+ return -EINVAL;
+ }
+ if ((rc = qeth_notifier_register(current, signum)))
+ return rc;
+
return count;
}
-static DRIVER_ATTR(snmp_register, 0644, qeth_driver_snmp_register_show,
- qeth_driver_snmp_register_store);
+static DRIVER_ATTR(notifier_register, 0200, 0,
+ qeth_driver_notifier_register_store);
int
qeth_create_driver_attributes(void)
&driver_attr_group)))
return rc;
return driver_create_file(&qeth_ccwgroup_driver.driver,
- &driver_attr_snmp_register);
+ &driver_attr_notifier_register);
}
void
driver_remove_file(&qeth_ccwgroup_driver.driver,
&driver_attr_group);
driver_remove_file(&qeth_ccwgroup_driver.driver,
- &driver_attr_snmp_register);
+ &driver_attr_notifier_register);
}