static DEVICE_ATTR_READER(type_show, dev, buf) { xpd_t *xpd; int len = 0; BUG_ON(!dev); xpd = dev_to_xpd(dev); if (!xpd) return -ENODEV; len += sprintf(buf, "%s\n", xpd->type_name); return len; }
static DEVICE_ATTR_READER(offhook_show, dev, buf) { xpd_t *xpd; int len = 0; int i; BUG_ON(!dev); xpd = dev_to_xpd(dev); if (!xpd) return -ENODEV; for_each_line(xpd, i) { len += sprintf(buf + len, "%d ", IS_OFFHOOK(xpd, i)); }
static DEVICE_ATTR_READER(blink_show, dev, buf) { xpd_t *xpd; unsigned long flags; int len = 0; BUG_ON(!dev); xpd = dev_to_xpd(dev); if (!xpd) return -ENODEV; spin_lock_irqsave(&xpd->lock, flags); len += sprintf(buf, "0x%lX\n", xpd->blink_mode); spin_unlock_irqrestore(&xpd->lock, flags); return len; }
static DEVICE_ATTR_READER(span_show, dev, buf) { xpd_t *xpd; unsigned long flags; int len = 0; BUG_ON(!dev); xpd = dev_to_xpd(dev); if (!xpd) return -ENODEV; spin_lock_irqsave(&xpd->lock, flags); len += sprintf(buf, "%d\n", SPAN_REGISTERED(xpd) ? PHONEDEV(xpd).span.spanno : 0); spin_unlock_irqrestore(&xpd->lock, flags); return len; }
static DEVICE_ATTR_READER(chipregs_show, dev, buf) { xpd_t *xpd; unsigned long flags; reg_cmd_t *regs; bool do_datah; char datah_str[50]; int len = 0; BUG_ON(!dev); xpd = dev_to_xpd(dev); if (!xpd) return -ENODEV; spin_lock_irqsave(&xpd->lock, flags); regs = &xpd->last_reply; len += sprintf(buf + len, "# Writing bad data to this file may damage your hardware!\n"); len += sprintf(buf + len, "# Consult firmware docs first\n"); len += sprintf(buf + len, "#\n"); do_datah = REG_FIELD(regs, do_datah) ? 1 : 0; if (do_datah) { snprintf(datah_str, ARRAY_SIZE(datah_str), "\t%02X", REG_FIELD(regs, data_high)); } else datah_str[0] = '\0'; if (REG_FIELD(regs, do_subreg)) { len += sprintf(buf + len, "#CH\tOP\tReg.\tSub\tDL%s\n", (do_datah) ? "\tDH" : ""); len += sprintf(buf + len, "%2d\tRS\t%02X\t%02X\t%02X%s\n", regs->portnum, REG_FIELD(regs, regnum), REG_FIELD(regs, subreg), REG_FIELD(regs, data_low), datah_str); } else { len += sprintf(buf + len, "#CH\tOP\tReg.\tDL%s\n", (do_datah) ? "\tDH" : ""); len += sprintf(buf + len, "%2d\tRD\t%02X\t%02X%s\n", regs->portnum, REG_FIELD(regs, regnum), REG_FIELD(regs, data_low), datah_str); } spin_unlock_irqrestore(&xpd->lock, flags); return len; }
static DEVICE_ATTR_WRITER(blink_store, dev, buf, count) { xpd_t *xpd; char *endp; unsigned long blink; BUG_ON(!dev); xpd = dev_to_xpd(dev); //XPD_DBG(GENERAL, xpd, "%s\n", buf); if (!xpd) return -ENODEV; blink = simple_strtoul(buf, &endp, 0); if (*endp != '\0' && *endp != '\n' && *endp != '\r') return -EINVAL; if (blink > 0xFFFF) return -EINVAL; XPD_DBG(GENERAL, xpd, "BLINK channels: 0x%lX\n", blink); xpd->blink_mode = blink; return count; }
static DEVICE_ATTR_WRITER(chipregs_store, dev, buf, count) { xpd_t *xpd; const char *p; char tmp[MAX_PROC_WRITE]; int i; int ret; BUG_ON(!dev); xpd = dev_to_xpd(dev); //XPD_DBG(GENERAL, xpd, "%s\n", buf); if (!xpd) return -ENODEV; p = buf; while ((p - buf) < count) { i = strcspn(p, "\r\n"); if (i > 0) { if (i >= MAX_PROC_WRITE) { XPD_NOTICE(xpd, "Command too long (%d chars)\n", i); return -E2BIG; } memcpy(tmp, p, i); tmp[i] = '\0'; ret = parse_chip_command(xpd, tmp); if (ret < 0) { XPD_NOTICE(xpd, "Failed writing command: '%s'\n", tmp); return ret; } } p += i + 1; /* Don't flood command_queue */ if (xframe_queue_count(&xpd->xbus->command_queue) > 5) msleep(6); } return count; }
/* * For backward compatibility with old dahdi-tools * Remove after dahdi_registration is upgraded */ static DEVICE_ATTR_WRITER(span_store, dev, buf, count) { xpd_t *xpd; int dahdi_reg; int ret; BUG_ON(!dev); xpd = dev_to_xpd(dev); if (!xpd) return -ENODEV; ret = sscanf(buf, "%d", &dahdi_reg); if (ret != 1) return -EINVAL; if (!XBUS_IS(xpd->xbus, READY)) return -ENODEV; XPD_DBG(DEVICES, xpd, "%s -- deprecated (should use assigned-spans)\n", (dahdi_reg) ? "register" : "unregister"); if (dahdi_reg) xbus_register_dahdi_device(xpd->xbus); else xbus_unregister_dahdi_device(xpd->xbus); return count; }
/* * For backward compatibility with old dahdi-tools * Remove after dahdi_registration is upgraded */ static DEVICE_ATTR_WRITER(span_store, dev, buf, count) { xpd_t *xpd; int dahdi_reg; int ret; BUG_ON(!dev); xpd = dev_to_xpd(dev); if (!xpd) return -ENODEV; ret = sscanf(buf, "%d", &dahdi_reg); if (ret != 1) return -EINVAL; if (!XBUS_IS(xpd->xbus, READY)) return -ENODEV; XPD_DBG(DEVICES, xpd, "%s -- deprecated (should use pinned-spans)\n", (dahdi_reg) ? "register" : "unregister"); if (xbus_is_registered(xpd->xbus)) { if (dahdi_reg) { XPD_DBG(DEVICES, xpd, "already registered %s. Ignored.\n", xpd->xbus->busname); } else { xbus_unregister_dahdi_device(xpd->xbus); } } else { if (!dahdi_reg) { XPD_DBG(DEVICES, xpd, "already unregistered %s. Ignored.\n", xpd->xbus->busname); } else { xbus_register_dahdi_device(xpd->xbus); } } return count; }