Lines Matching refs:ssc

259 ucom_attach(struct ucom_super_softc *ssc, struct ucom_softc *sc,
274 ssc->sc_unit = ucom_unit_alloc();
275 if (ssc->sc_unit == -1)
279 snprintf(ssc->sc_ttyname, sizeof(ssc->sc_ttyname),
280 UCOM_TTY_PREFIX "%d", ssc->sc_unit);
283 error = usb_proc_create(&ssc->sc_tq, mtx, "ucom", USB_PRI_MED);
285 ucom_unit_free(ssc->sc_unit);
288 ssc->sc_subunits = subunits;
289 ssc->sc_flag = UCOM_FLAG_ATTACHED |
293 ssc->sc_flag |= UCOM_FLAG_WAIT_REFS;
296 ucom_ref(ssc);
298 for (subunit = 0; subunit < ssc->sc_subunits; subunit++) {
300 sc[subunit].sc_super = ssc;
305 error = ucom_attach_tty(ssc, &sc[subunit]);
307 ucom_detach(ssc, &sc[0]);
311 ucom_ref(ssc);
318 sc->sc_tty, ssc->sc_unit, ssc->sc_subunits);
325 * by "ssc" and "sc" is zero or has already been detached.
328 ucom_detach(struct ucom_super_softc *ssc, struct ucom_softc *sc)
332 if (!(ssc->sc_flag & UCOM_FLAG_ATTACHED))
335 if (ssc->sc_sysctl_ttyname != NULL) {
336 sysctl_remove_oid(ssc->sc_sysctl_ttyname, 1, 0);
337 ssc->sc_sysctl_ttyname = NULL;
340 if (ssc->sc_sysctl_ttyports != NULL) {
341 sysctl_remove_oid(ssc->sc_sysctl_ttyports, 1, 0);
342 ssc->sc_sysctl_ttyports = NULL;
345 usb_proc_drain(&ssc->sc_tq);
347 for (subunit = 0; subunit < ssc->sc_subunits; subunit++) {
350 ucom_detach_tty(ssc, &sc[subunit]);
356 usb_proc_free(&ssc->sc_tq);
358 ucom_unref(ssc);
360 if (ssc->sc_flag & UCOM_FLAG_WAIT_REFS)
361 ucom_drain(ssc);
364 ssc->sc_flag &= ~UCOM_FLAG_ATTACHED;
368 ucom_drain(struct ucom_super_softc *ssc)
371 while (ssc->sc_refs > 0) {
391 ucom_attach_tty(struct ucom_super_softc *ssc, struct ucom_softc *sc)
404 sizeof(buf), ssc->sc_unit, sc->sc_subunit);
408 if (ssc->sc_subunits > 1) {
411 ssc->sc_unit, sc->sc_subunit);
415 ssc->sc_unit);
431 (ssc->sc_unit == ucom_cons_unit) &&
435 ssc->sc_unit, sc->sc_subunit);
456 ucom_detach_tty(struct ucom_super_softc *ssc, struct ucom_softc *sc)
501 ucom_set_pnpinfo_usb(struct ucom_super_softc *ssc, device_t dev)
508 "%d ttyports=%d", ssc->sc_unit, ssc->sc_subunits);
521 if (ssc->sc_sysctl_ttyname == NULL) {
522 ssc->sc_sysctl_ttyname = SYSCTL_ADD_STRING(NULL,
524 OID_AUTO, "ttyname", CTLFLAG_RD, ssc->sc_ttyname, 0,
527 if (ssc->sc_sysctl_ttyports == NULL) {
528 ssc->sc_sysctl_ttyports = SYSCTL_ADD_INT(NULL,
531 NULL, ssc->sc_subunits, "Number of ports");
540 struct ucom_super_softc *ssc = sc->sc_super;
545 if (usb_proc_is_gone(&ssc->sc_tq)) {
555 usb_proc_msignal(&ssc->sc_tq, t0, t1);
572 usb_proc_mwait(&ssc->sc_tq, t0, t1);
607 struct ucom_super_softc *ssc = sc->sc_super;
609 return (usb_proc_is_gone(&ssc->sc_tq));
1651 ucom_ref(struct ucom_super_softc *ssc)
1654 ssc->sc_refs++;
1666 ucom_free_unit(struct ucom_super_softc *ssc)
1668 if (!(ssc->sc_flag & UCOM_FLAG_FREE_UNIT))
1671 ucom_unit_free(ssc->sc_unit);
1673 ssc->sc_flag &= ~UCOM_FLAG_FREE_UNIT;
1686 ucom_unref(struct ucom_super_softc *ssc)
1691 retval = (ssc->sc_refs < 2);
1692 ssc->sc_refs--;
1696 ucom_free_unit(ssc);