Lines Matching defs:ssc
265 ucom_attach(struct ucom_super_softc *ssc, struct ucom_softc *sc,
280 ssc->sc_unit = ucom_unit_alloc();
281 if (ssc->sc_unit == -1)
285 snprintf(ssc->sc_ttyname, sizeof(ssc->sc_ttyname),
286 UCOM_TTY_PREFIX "%d", ssc->sc_unit);
289 error = usb_proc_create(&ssc->sc_tq, mtx, "ucom", USB_PRI_MED);
291 ucom_unit_free(ssc->sc_unit);
294 ssc->sc_subunits = subunits;
295 ssc->sc_flag = UCOM_FLAG_ATTACHED |
296 UCOM_FLAG_FREE_UNIT | (ssc->sc_flag & UCOM_FLAG_DEVICE_MODE);
299 ssc->sc_flag |= UCOM_FLAG_WAIT_REFS;
302 ucom_ref(ssc);
304 for (subunit = 0; subunit < ssc->sc_subunits; subunit++) {
306 sc[subunit].sc_super = ssc;
311 error = ucom_attach_tty(ssc, &sc[subunit]);
313 ucom_detach(ssc, &sc[0]);
317 ucom_ref(ssc);
324 sc->sc_tty, ssc->sc_unit, ssc->sc_subunits);
331 * by "ssc" and "sc" is zero or has already been detached.
334 ucom_detach(struct ucom_super_softc *ssc, struct ucom_softc *sc)
338 if (!(ssc->sc_flag & UCOM_FLAG_ATTACHED))
341 if (ssc->sc_sysctl_ttyname != NULL) {
342 sysctl_remove_oid(ssc->sc_sysctl_ttyname, 1, 0);
343 ssc->sc_sysctl_ttyname = NULL;
346 if (ssc->sc_sysctl_ttyports != NULL) {
347 sysctl_remove_oid(ssc->sc_sysctl_ttyports, 1, 0);
348 ssc->sc_sysctl_ttyports = NULL;
351 usb_proc_drain(&ssc->sc_tq);
353 for (subunit = 0; subunit < ssc->sc_subunits; subunit++) {
355 ucom_detach_tty(ssc, &sc[subunit]);
361 usb_proc_free(&ssc->sc_tq);
363 ucom_unref(ssc);
365 if (ssc->sc_flag & UCOM_FLAG_WAIT_REFS)
366 ucom_drain(ssc);
369 ssc->sc_flag &= ~UCOM_FLAG_ATTACHED;
373 ucom_drain(struct ucom_super_softc *ssc)
376 while (ssc->sc_refs > 0) {
414 ucom_attach_tty(struct ucom_super_softc *ssc, struct ucom_softc *sc)
427 sizeof(buf), ssc->sc_unit, sc->sc_subunit);
431 if (ssc->sc_subunits > 1) {
434 ssc->sc_unit, sc->sc_subunit);
438 ssc->sc_unit);
454 (ssc->sc_unit == ucom_cons_unit) &&
457 ssc->sc_unit, sc->sc_subunit);
474 if ((ssc->sc_flag & UCOM_FLAG_DEVICE_MODE) != 0 &&
496 ucom_detach_tty(struct ucom_super_softc *ssc, struct ucom_softc *sc)
547 ucom_set_pnpinfo_usb(struct ucom_super_softc *ssc, device_t dev)
554 "%d ttyports=%d", ssc->sc_unit, ssc->sc_subunits);
567 if (ssc->sc_sysctl_ttyname == NULL) {
568 ssc->sc_sysctl_ttyname = SYSCTL_ADD_STRING(NULL,
570 OID_AUTO, "ttyname", CTLFLAG_RD, ssc->sc_ttyname, 0,
573 if (ssc->sc_sysctl_ttyports == NULL) {
574 ssc->sc_sysctl_ttyports = SYSCTL_ADD_INT(NULL,
577 NULL, ssc->sc_subunits, "Number of ports");
582 ucom_set_usb_mode(struct ucom_super_softc *ssc, enum usb_hc_mode usb_mode)
587 ssc->sc_flag |= UCOM_FLAG_DEVICE_MODE;
590 ssc->sc_flag &= ~UCOM_FLAG_DEVICE_MODE;
609 struct ucom_super_softc *ssc = sc->sc_super;
616 if (usb_proc_is_gone(&ssc->sc_tq)) {
621 task = usb_proc_msignal(&ssc->sc_tq, &dummy, &dummy);
622 error = usb_proc_mwait_sig(&ssc->sc_tq, task, task);
633 struct ucom_super_softc *ssc = sc->sc_super;
639 if (usb_proc_is_gone(&ssc->sc_tq)) {
649 usb_proc_msignal(&ssc->sc_tq, t0, t1);
666 error = usb_proc_mwait_sig(&ssc->sc_tq, t0, t1);
710 struct ucom_super_softc *ssc = sc->sc_super;
712 return (usb_proc_is_gone(&ssc->sc_tq));
1757 ucom_ref(struct ucom_super_softc *ssc)
1760 ssc->sc_refs++;
1772 ucom_free_unit(struct ucom_super_softc *ssc)
1774 if (!(ssc->sc_flag & UCOM_FLAG_FREE_UNIT))
1777 ucom_unit_free(ssc->sc_unit);
1779 ssc->sc_flag &= ~UCOM_FLAG_FREE_UNIT;
1792 ucom_unref(struct ucom_super_softc *ssc)
1797 retval = (ssc->sc_refs < 2);
1798 ssc->sc_refs--;
1802 ucom_free_unit(ssc);