static void astribank_release(struct device *dev) { xbus_t *xbus; BUG_ON(!dev); xbus = dev_to_xbus(dev); if (XBUS_FLAGS(xbus, CONNECTED)) { XBUS_ERR(xbus, "Try to release CONNECTED device.\n"); BUG(); } if (!XBUS_IS(xbus, IDLE) && !XBUS_IS(xbus, FAIL) && !XBUS_IS(xbus, DEACTIVATED)) { XBUS_ERR(xbus, "Try to release in state %s\n", xbus_statename(XBUS_STATE(xbus))); BUG(); } XBUS_INFO(xbus, "[%s] Astribank Release\n", xbus->label); xbus_free(xbus); }
static DEVICE_ATTR_WRITER(xbus_state_store, dev, buf, count) { xbus_t *xbus; xbus = dev_to_xbus(dev); XBUS_DBG(GENERAL, xbus, "%s\n", buf); if (strncmp(buf, "stop", 4) == 0) xbus_deactivate(xbus); else if (XBUS_IS(xbus, IDLE) && strncmp(buf, "start", 5) == 0) xbus_activate(xbus); else { XBUS_NOTICE(xbus, "%s: Illegal action %s in state %s. Ignored.\n", __func__, buf, xbus_statename(XBUS_STATE(xbus))); return -EINVAL; } return count; }
int xframe_receive(xbus_t *xbus, xframe_t *xframe) { int ret = 0; struct timeval now; struct timeval tv_received; int usec; if(XFRAME_LEN(xframe) < RPACKET_HEADERSIZE) { static int rate_limit; if((rate_limit++ % 1003) == 0) { XBUS_NOTICE(xbus, "short xframe\n"); dump_xframe("short xframe", xbus, xframe, debug); } FREE_RECV_XFRAME(xbus, xframe); return -EPROTO; } if(!XBUS_FLAGS(xbus, CONNECTED)) { XBUS_DBG(GENERAL, xbus, "Dropped xframe. Is shutting down.\n"); return -ENODEV; } tv_received = xframe->tv_received; /* * We want to check that xframes do not mix PCM and other commands */ if(XPACKET_IS_PCM((xpacket_t *)xframe->packets)) { if(!XBUS_IS(xbus, READY)) FREE_RECV_XFRAME(xbus, xframe); else xframe_receive_pcm(xbus, xframe); } else { XBUS_COUNTER(xbus, RX_CMD)++; ret = xframe_receive_cmd(xbus, xframe); } /* Calculate total processing time */ do_gettimeofday(&now); usec = (now.tv_sec - tv_received.tv_sec) * 1000000 + now.tv_usec - tv_received.tv_usec; if(usec > xbus->max_rx_process) xbus->max_rx_process = usec; return ret; }
/* * 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; }