X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fs390%2Fnet%2Fqeth_sys.c;h=5178a6cc2548c8c869a848c0c18e1ef869c19b9a;hb=4e4f43fe003969bdaa246374b90e16708a22ef79;hp=5a3c788cc36fa1b677c4acdb7fd5f08da8780e85;hpb=86090fcac5e27b630656fe3d963a6b80e26dac44;p=linux-2.6.git diff --git a/drivers/s390/net/qeth_sys.c b/drivers/s390/net/qeth_sys.c index 5a3c788cc..5178a6cc2 100644 --- a/drivers/s390/net/qeth_sys.c +++ b/drivers/s390/net/qeth_sys.c @@ -1,6 +1,6 @@ /* * - * linux/drivers/s390/net/qeth_sys.c ($Revision: 1.24 $) + * linux/drivers/s390/net/qeth_sys.c ($Revision: 1.30 $) * * Linux on zSeries OSA Express and HiperSockets support * This file contains code related to sysfs. @@ -20,6 +20,8 @@ #include "qeth_mpc.h" #include "qeth_fs.h" +const char *VERSION_QETH_SYS_C = "$Revision: 1.30 $"; + /*****************************************************************************/ /* */ /* /sys-fs stuff UNDER DEVELOPMENT !!! */ @@ -320,7 +322,8 @@ static DEVICE_ATTR(buffer_count, 0644, qeth_dev_bufcnt_show, 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: @@ -328,11 +331,20 @@ qeth_dev_route_show(struct qeth_routing_info *route, char *buf) 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"); } @@ -346,7 +358,7 @@ qeth_dev_route4_show(struct device *dev, char *buf) 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 @@ -414,7 +426,7 @@ qeth_dev_route6_show(struct device *dev, char *buf) 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 @@ -737,6 +749,10 @@ qeth_dev_ipato_enable_store(struct device *dev, const char *buf, size_t count) 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; @@ -1426,22 +1442,31 @@ qeth_driver_group_store(struct device_driver *ddrv, const char *buf, 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; + + tmp = strsep((char **) &buf, "\n"); + if (!strcmp(tmp, "unregister")){ + return qeth_notifier_unregister(current); + } + + signum = simple_strtoul(buf, &tmp, 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, 0644, 0, + qeth_driver_notifier_register_store); int qeth_create_driver_attributes(void) @@ -1452,7 +1477,7 @@ 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 @@ -1461,5 +1486,5 @@ qeth_remove_driver_attributes(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); }