Lines Matching refs:ssc

257 ucom_attach(struct ucom_super_softc *ssc, struct ucom_softc *sc,
272 ssc->sc_unit = ucom_unit_alloc();
273 if (ssc->sc_unit == -1)
277 snprintf(ssc->sc_ttyname, sizeof(ssc->sc_ttyname),
278 UCOM_TTY_PREFIX "%d", ssc->sc_unit);
281 error = usb_proc_create(&ssc->sc_tq, mtx, "ucom", USB_PRI_MED);
283 ucom_unit_free(ssc->sc_unit);
286 ssc->sc_subunits = subunits;
287 ssc->sc_flag = UCOM_FLAG_ATTACHED |
291 ssc->sc_flag |= UCOM_FLAG_WAIT_REFS;
294 ucom_ref(ssc);
296 for (subunit = 0; subunit < ssc->sc_subunits; subunit++) {
298 sc[subunit].sc_super = ssc;
303 error = ucom_attach_tty(ssc, &sc[subunit]);
305 ucom_detach(ssc, &sc[0]);
309 ucom_ref(ssc);
316 sc->sc_tty, ssc->sc_unit, ssc->sc_subunits);
323 * by "ssc" and "sc" is zero or has already been detached.
326 ucom_detach(struct ucom_super_softc *ssc, struct ucom_softc *sc)
330 if (!(ssc->sc_flag & UCOM_FLAG_ATTACHED))
333 if (ssc->sc_sysctl_ttyname != NULL) {
334 sysctl_remove_oid(ssc->sc_sysctl_ttyname, 1, 0);
335 ssc->sc_sysctl_ttyname = NULL;
338 if (ssc->sc_sysctl_ttyports != NULL) {
339 sysctl_remove_oid(ssc->sc_sysctl_ttyports, 1, 0);
340 ssc->sc_sysctl_ttyports = NULL;
343 usb_proc_drain(&ssc->sc_tq);
345 for (subunit = 0; subunit < ssc->sc_subunits; subunit++) {
348 ucom_detach_tty(ssc, &sc[subunit]);
354 usb_proc_free(&ssc->sc_tq);
356 ucom_unref(ssc);
358 if (ssc->sc_flag & UCOM_FLAG_WAIT_REFS)
359 ucom_drain(ssc);
362 ssc->sc_flag &= ~UCOM_FLAG_ATTACHED;
366 ucom_drain(struct ucom_super_softc *ssc)
369 while (ssc->sc_refs > 0) {
389 ucom_attach_tty(struct ucom_super_softc *ssc, struct ucom_softc *sc)
402 sizeof(buf), ssc->sc_unit, sc->sc_subunit);
406 if (ssc->sc_subunits > 1) {
409 ssc->sc_unit, sc->sc_subunit);
413 ssc->sc_unit);
429 (ssc->sc_unit == ucom_cons_unit) &&
433 ssc->sc_unit, sc->sc_subunit);
454 ucom_detach_tty(struct ucom_super_softc *ssc, struct ucom_softc *sc)
499 ucom_set_pnpinfo_usb(struct ucom_super_softc *ssc, device_t dev)
506 "%d ttyports=%d", ssc->sc_unit, ssc->sc_subunits);
519 if (ssc->sc_sysctl_ttyname == NULL) {
520 ssc->sc_sysctl_ttyname = SYSCTL_ADD_STRING(NULL,
522 OID_AUTO, "ttyname", CTLFLAG_RD, ssc->sc_ttyname, 0,
525 if (ssc->sc_sysctl_ttyports == NULL) {
526 ssc->sc_sysctl_ttyports = SYSCTL_ADD_INT(NULL,
529 NULL, ssc->sc_subunits, "Number of ports");
538 struct ucom_super_softc *ssc = sc->sc_super;
543 if (usb_proc_is_gone(&ssc->sc_tq)) {
553 usb_proc_msignal(&ssc->sc_tq, t0, t1);
570 usb_proc_mwait(&ssc->sc_tq, t0, t1);
605 struct ucom_super_softc *ssc = sc->sc_super;
607 return (usb_proc_is_gone(&ssc->sc_tq));
1628 ucom_ref(struct ucom_super_softc *ssc)
1631 ssc->sc_refs++;
1643 ucom_free_unit(struct ucom_super_softc *ssc)
1645 if (!(ssc->sc_flag & UCOM_FLAG_FREE_UNIT))
1648 ucom_unit_free(ssc->sc_unit);
1650 ssc->sc_flag &= ~UCOM_FLAG_FREE_UNIT;
1663 ucom_unref(struct ucom_super_softc *ssc)
1668 retval = (ssc->sc_refs < 2);
1669 ssc->sc_refs--;
1673 ucom_free_unit(ssc);