Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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));
	}
Ejemplo n.º 3
0
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;
}
Ejemplo n.º 4
0
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;
}
Ejemplo n.º 5
0
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;
}
Ejemplo n.º 6
0
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;
}
Ejemplo n.º 7
0
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;
}
Ejemplo n.º 8
0
/*
 * 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;
}
Ejemplo n.º 9
0
/*
 * 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;
}