static ssize_t qeth_hw_trap_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct qeth_card *card = dev_get_drvdata(dev); int rc = 0; char *tmp, *curtoken; int state = 0; curtoken = (char *)buf; if (!card) return -EINVAL; mutex_lock(&card->conf_mutex); if (card->state == CARD_STATE_SOFTSETUP || card->state == CARD_STATE_UP) state = 1; tmp = strsep(&curtoken, "\n"); if (!strcmp(tmp, "arm") && !card->info.hwtrap) { if (state) { if (qeth_is_diagass_supported(card, QETH_DIAGS_CMD_TRAP)) { rc = qeth_hw_trap(card, QETH_DIAGS_TRAP_ARM); if (!rc) card->info.hwtrap = 1; } else rc = -EINVAL; } else card->info.hwtrap = 1; } else if (!strcmp(tmp, "disarm") && card->info.hwtrap) { if (state) { rc = qeth_hw_trap(card, QETH_DIAGS_TRAP_DISARM); if (!rc) card->info.hwtrap = 0; } else card->info.hwtrap = 0; } else if (!strcmp(tmp, "trap") && state && card->info.hwtrap) rc = qeth_hw_trap(card, QETH_DIAGS_TRAP_CAPTURE); else rc = -EINVAL; mutex_unlock(&card->conf_mutex); return rc ? rc : count; }
static ssize_t qeth_hw_trap_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { struct qeth_card *card = dev_get_drvdata(dev); int rc = 0; int state = 0; if (!card) return -EINVAL; mutex_lock(&card->conf_mutex); if (qeth_card_hw_is_reachable(card)) state = 1; if (sysfs_streq(buf, "arm") && !card->info.hwtrap) { if (state) { if (qeth_is_diagass_supported(card, QETH_DIAGS_CMD_TRAP)) { rc = qeth_hw_trap(card, QETH_DIAGS_TRAP_ARM); if (!rc) card->info.hwtrap = 1; } else rc = -EINVAL; } else card->info.hwtrap = 1; } else if (sysfs_streq(buf, "disarm") && card->info.hwtrap) { if (state) { rc = qeth_hw_trap(card, QETH_DIAGS_TRAP_DISARM); if (!rc) card->info.hwtrap = 0; } else card->info.hwtrap = 0; } else if (sysfs_streq(buf, "trap") && state && card->info.hwtrap) rc = qeth_hw_trap(card, QETH_DIAGS_TRAP_CAPTURE); else rc = -EINVAL; mutex_unlock(&card->conf_mutex); return rc ? rc : count; }