Lines Matching defs:scd
405 struct uhidev *scd = &sc->sc_subdevs[repid];
407 scd->sc_parent = sc;
408 scd->sc_report_id = repid;
409 scd->sc_in_rep_size = repsizes[repid];
417 uha.parent = scd;
431 rnd_attach_source(&scd->sc_rndsource,
541 struct uhidev *scd;
579 scd = &sc->sc_subdevs[rep];
580 DPRINTFN(5,("uhidev_intr: rep=%d, scd=%p state=%#x\n",
581 rep, scd, scd->sc_state));
582 scd->sc_state) & UHIDEV_OPEN))
585 if (scd->sc_in_rep_size != cc) {
587 device_xname(sc->sc_dev), scd->sc_in_rep_size, cc));
595 rnd_add_uint32(&scd->sc_rndsource, (uintptr_t)(sc->sc_ibuf));
596 scd->sc_intr(scd->sc_cookie, p, cc);
600 uhidev_get_report_desc(struct uhidev *scd, void **desc, int *size)
602 struct uhidev_softc *sc = scd->sc_parent;
855 uhidev_open(struct uhidev *scd, void (*intr)(void *, void *, u_int),
858 struct uhidev_softc *sc = scd->sc_parent;
865 scd->sc_report_id,
866 device_xname(scd->sc_dev),
867 scd->sc_state,
871 if (scd->sc_state & UHIDEV_OPEN) {
875 scd->sc_intr = intr;
876 scd->sc_cookie = cookie;
877 atomic_store_release(&scd->sc_state, scd->sc_state | UHIDEV_OPEN);
888 KASSERTMSG(scd->sc_state & UHIDEV_OPEN,
890 device_xname(sc->sc_dev), scd->sc_report_id);
891 atomic_store_relaxed(&scd->sc_state,
892 scd->sc_state & ~UHIDEV_OPEN);
899 * uhidev_stop(scd)
901 * Make all current and future output reports or xfers by scd to
905 * Side effect: If uhidev_write was in progress for this scd,
906 * blocks all other uhidev_writes until uhidev_close on this scd.
912 uhidev_stop(struct uhidev *scd)
914 struct uhidev_softc *sc = scd->sc_parent;
919 atomic_store_relaxed(&scd->sc_state, scd->sc_state | UHIDEV_STOPPED);
930 if (sc->sc_writereportid != scd->sc_report_id)
945 sc->sc_stopreportid = scd->sc_report_id;
951 KASSERT(sc->sc_stopreportid == scd->sc_report_id);
952 sc->sc_stopreportid = scd->sc_report_id;
958 * uhidev_close(scd)
965 uhidev_close(struct uhidev *scd)
967 struct uhidev_softc *sc = scd->sc_parent;
973 scd->sc_report_id,
974 device_xname(scd->sc_dev),
975 scd->sc_state,
978 KASSERTMSG(scd->sc_state & UHIDEV_OPEN,
980 device_xname(sc->sc_dev), scd->sc_report_id);
988 if (sc->sc_stopreportid == scd->sc_report_id) {
989 KASSERT(scd->sc_state & UHIDEV_STOPPED);
995 KASSERT(sc->sc_stopreportid == scd->sc_report_id);
996 KASSERT(scd->sc_state & UHIDEV_STOPPED);
1006 KASSERT(scd->sc_state & UHIDEV_OPEN);
1008 KASSERT(scd->sc_state & UHIDEV_OPEN);
1009 atomic_store_relaxed(&scd->sc_state,
1010 scd->sc_state & ~(UHIDEV_OPEN | UHIDEV_STOPPED));
1029 KASSERT((scd->sc_state & UHIDEV_OPEN) == 0);
1030 scd->sc_intr = NULL;
1031 scd->sc_cookie = NULL;
1037 uhidev_set_report(struct uhidev *scd, int type, void *data, int len)
1042 if (scd->sc_report_id == 0)
1043 return usbd_set_report(scd->sc_parent->sc_iface, type,
1044 scd->sc_report_id, data, len);
1047 buf[0] = scd->sc_report_id;
1050 retstat = usbd_set_report(scd->sc_parent->sc_iface, type,
1051 scd->sc_report_id, buf, len + 1);
1059 uhidev_get_report(struct uhidev *scd, int type, void *data, int len)
1061 return usbd_get_report(scd->sc_parent->sc_iface, type,
1062 scd->sc_report_id, data, len);
1066 uhidev_write(struct uhidev *scd, void *data, int len)
1068 struct uhidev_softc *sc = scd->sc_parent;
1078 KASSERT(scd->sc_state & UHIDEV_OPEN);
1080 if (scd->sc_state & UHIDEV_STOPPED) {
1092 sc->sc_writereportid = scd->sc_report_id;
1112 KASSERT(scd->sc_state & UHIDEV_OPEN);
1115 KASSERTMSG(sc->sc_writereportid == scd->sc_report_id,
1117 device_xname(sc->sc_dev), scd->sc_report_id, sc->sc_writereportid);
1152 uhidev_write_async(struct uhidev *scd, void *data, int len, int flags,
1155 struct uhidev_softc *sc = scd->sc_parent;
1165 KASSERT(scd->sc_state & UHIDEV_OPEN);
1166 if (scd->sc_state & UHIDEV_STOPPED) {
1175 sc->sc_writereportid = scd->sc_report_id;