Lines Matching defs:usp

329 usbser_insert(struct usbser_state *usp)
336 usbser_list = usp;
340 tmp->us_next = usp;
346 usbser_remove(struct usbser_state *usp)
352 while (tmp != usp) {
356 ASSERT(tmp == usp); /* must exist, else attach/detach wrong */
358 prev->us_next = usp->us_next;
360 usbser_list = usp->us_next;
361 usp->us_next = NULL;
389 usbser_state_t *usp;
411 if ((usp = ddi_get_soft_state(statep, instance)) == NULL) {
417 usp->us_statep = statep;
418 usp->us_dip = dip;
419 usp->us_instance = instance;
420 usp->us_ds_ops = ds_ops;
422 if (rseq_do(rseq_att, NELEM(rseq_att), (uintptr_t)usp, 0) == RSEQ_OK) {
424 usbser_insert(usp);
440 usbser_state_t *usp;
443 usp = ddi_get_soft_state(statep, instance);
447 USB_DPRINTF_L4(DPRINT_DETACH, usp->us_lh, "usbser_detach");
448 usbser_remove(usp);
449 (void) rseq_undo(rseq_att, NELEM(rseq_att), (uintptr_t)usp, 0);
476 usbser_state_t *usp;
489 usp = ddi_get_soft_state(statep, instance);
490 if (usp == NULL) {
496 mutex_enter(&usp->us_mutex);
497 if (usp->us_dev_state == USB_DEV_DISCONNECTED) {
498 mutex_exit(&usp->us_mutex);
502 mutex_exit(&usp->us_mutex);
506 if (port_num >= usp->us_port_cnt) {
510 pp = &usp->us_ports[port_num];
670 usbser_state_t *usp;
675 usp = ddi_get_soft_state(statep, ddi_get_instance(dip));
677 USB_DPRINTF_L3(DPRINT_EVENTS, usp->us_lh,
681 mutex_enter(&usp->us_mutex);
682 new_state = usp->us_dev_state;
683 mutex_exit(&usp->us_mutex);
686 rval = USBSER_DS_USB_POWER(usp, comp, level, &new_state);
689 mutex_enter(&usp->us_mutex);
690 usp->us_dev_state = new_state;
691 mutex_exit(&usp->us_mutex);
707 usbser_state_t *usp = (usbser_state_t *)arg;
712 USB_DPRINTF_L2(DPRINT_ATTACH, usp->us_lh,
727 usbser_free_soft_state(usbser_state_t *usp)
729 ddi_soft_state_free(usp->us_statep, usp->us_instance);
738 usbser_init_soft_state(usbser_state_t *usp)
740 usp->us_lh = usb_alloc_log_hdl(usp->us_dip, "usbs[*].",
743 mutex_init(&usp->us_mutex, NULL, MUTEX_DRIVER, (void *)NULL);
746 ddi_set_driver_private(usp->us_dip, usp->us_statep);
748 usp->us_dev_state = USBSER_DEV_INIT;
757 usbser_fini_soft_state(usbser_state_t *usp)
759 usb_free_log_hdl(usp->us_lh);
760 mutex_destroy(&usp->us_mutex);
761 ddi_set_driver_private(usp->us_dip, NULL);
770 usbser_attach_dev(usbser_state_t *usp)
775 usp->us_dev_state = USB_DEV_ONLINE;
777 ai.ai_dip = usp->us_dip;
779 ai.ai_hdl = &usp->us_ds_hdl;
780 ai.ai_port_cnt = &usp->us_port_cnt;
782 rval = USBSER_DS_ATTACH(usp, &ai);
784 if ((rval != USB_SUCCESS) || (usp->us_ds_hdl == NULL) ||
785 (usp->us_port_cnt == 0)) {
786 USB_DPRINTF_L4(DPRINT_ATTACH, usp->us_lh, "usbser_attach_dev: "
787 "failed %d %p %d", rval, usp->us_ds_hdl, usp->us_port_cnt);
792 USB_DPRINTF_L4(DPRINT_ATTACH, usp->us_lh,
793 "usbser_attach_dev: port_cnt = %d", usp->us_port_cnt);
803 usbser_detach_dev(usbser_state_t *usp)
805 USBSER_DS_DETACH(usp);
813 usbser_attach_ports(usbser_state_t *usp)
822 usp->us_ports = kmem_zalloc(usp->us_port_cnt *
833 for (i = 0; i < usp->us_port_cnt; i++) {
834 pp = &usp->us_ports[i];
840 pp->port_usp = usp;
841 pp->port_ds_ops = usp->us_ds_ops;
842 pp->port_ds_hdl = usp->us_ds_hdl;
846 pp->port_lh = usb_alloc_log_hdl(usp->us_dip,
872 USBSER_DS_REGISTER_CB(usp, i, &ds_cb);
876 if (usbser_create_port_minor_nodes(usp, i) != USB_SUCCESS) {
877 usbser_detach_ports(usp);
891 usbser_create_port_minor_nodes(usbser_state_t *usp, int port_num)
893 int instance = usp->us_instance;
903 if (ddi_create_minor_node(usp->us_dip, name,
915 if (ddi_create_minor_node(usp->us_dip, name,
929 usbser_detach_ports(usbser_state_t *usp)
938 ddi_remove_minor_node(usp->us_dip, NULL);
940 for (i = 0; i < usp->us_port_cnt; i++) {
941 pp = &usp->us_ports[i];
949 USBSER_DS_UNREGISTER_CB(usp, i);
965 sz = usp->us_port_cnt * sizeof (usbser_port_t);
966 kmem_free(usp->us_ports, sz);
967 usp->us_ports = NULL;
975 usbser_create_taskq(usbser_state_t *usp)
977 int nthr = usp->us_port_cnt * 2;
979 usp->us_taskq = ddi_taskq_create(usp->us_dip, "usbser_taskq",
982 return ((usp->us_taskq == NULL) ? DDI_FAILURE : DDI_SUCCESS);
987 usbser_destroy_taskq(usbser_state_t *usp)
989 ddi_taskq_destroy(usp->us_taskq);
994 usbser_set_dev_state_init(usbser_state_t *usp)
996 mutex_enter(&usp->us_mutex);
997 usp->us_dev_state = USBSER_DEV_INIT;
998 mutex_exit(&usp->us_mutex);
1012 usbser_state_t *usp;
1015 usp = ddi_get_soft_state(statep, ddi_get_instance(dip));
1017 USB_DPRINTF_L3(DPRINT_EVENTS, usp->us_lh,
1020 mutex_enter(&usp->us_mutex);
1021 switch (usp->us_dev_state) {
1025 usp->us_dev_state = USB_DEV_DISCONNECTED;
1026 mutex_exit(&usp->us_mutex);
1029 usbser_disconnect_ports(usp);
1032 if (USBSER_DS_DISCONNECT(usp) != USB_DEV_DISCONNECTED) {
1033 USB_DPRINTF_L2(DPRINT_EVENTS, usp->us_lh,
1041 mutex_exit(&usp->us_mutex);
1058 usbser_state_t *usp;
1061 usp = ddi_get_soft_state(statep, ddi_get_instance(dip));
1063 USB_DPRINTF_L3(DPRINT_EVENTS, usp->us_lh,
1066 (void) usbser_restore_device_state(usp);
1077 usbser_disconnect_ports(usbser_state_t *usp)
1086 if (usp->us_ports == NULL) {
1090 for (i = 0; i < usp->us_port_cnt; i++) {
1091 pp = &usp->us_ports[i];
1142 USB_DPRINTF_L0(DPRINT_EVENTS, usp->us_lh, "device was "
1162 usbser_state_t *usp;
1167 usp = ddi_get_soft_state(statep, ddi_get_instance(dip));
1169 USB_DPRINTF_L4(DPRINT_EVENTS, usp->us_lh, "usbser_cpr_suspend");
1172 if (usbser_suspend_ports(usp) != USB_SUCCESS) {
1173 USB_DPRINTF_L3(DPRINT_EVENTS, usp->us_lh,
1179 new_state = USBSER_DS_SUSPEND(usp); /* let DSD do its part */
1181 mutex_enter(&usp->us_mutex);
1188 usp->us_dev_state = new_state;
1189 mutex_exit(&usp->us_mutex);
1196 usbser_suspend_ports(usbser_state_t *usp)
1201 for (i = 0; i < usp->us_port_cnt; i++) {
1202 pp = &usp->us_ports[i];
1226 usbser_state_t *usp;
1229 usp = ddi_get_soft_state(statep, ddi_get_instance(dip));
1231 USB_DPRINTF_L3(DPRINT_EVENTS, usp->us_lh, "usbser_cpr_resume");
1233 (void) usbser_restore_device_state(usp);
1241 usbser_restore_device_state(usbser_state_t *usp)
1246 (void) pm_busy_component(usp->us_dip, 0);
1247 (void) pm_raise_power(usp->us_dip, 0, USB_DEV_OS_FULL_PWR);
1249 mutex_enter(&usp->us_mutex);
1250 current_state = usp->us_dev_state;
1251 mutex_exit(&usp->us_mutex);
1260 new_state = USBSER_DS_RECONNECT(usp);
1262 new_state = USBSER_DS_RESUME(usp);
1265 mutex_enter(&usp->us_mutex);
1266 usp->us_dev_state = new_state;
1267 mutex_exit(&usp->us_mutex);
1273 usbser_restore_ports_state(usp);
1276 (void) pm_idle_component(usp->us_dip, 0);
1286 usbser_restore_ports_state(usbser_state_t *usp)
1292 for (i = 0; i < usp->us_port_cnt; i++) {
1293 pp = &usp->us_ports[i];
1474 usbser_state_t *usp = pp->port_usp;
1518 rval = USBSER_DS_OPEN_PORT(usp, pp->port_num);
1591 usbser_state_t *usp = pp->port_usp;
1598 if (USBSER_DS_CLOSE_PORT(usp, port_num) != USB_SUCCESS) {
1867 usbser_state_t *usp = pp->port_usp;
1875 rval = ddi_taskq_dispatch(usp->us_taskq, thr->thr_func, thr->thr_arg,
3266 usbser_dev_is_online(usbser_state_t *usp)
3270 mutex_enter(&usp->us_mutex);
3271 rval = (usp->us_dev_state == USB_DEV_ONLINE);
3272 mutex_exit(&usp->us_mutex);