Lines Matching defs:hidp

87 static int hid_cpr_suspend(hid_state_t *hidp);
88 static void hid_cpr_resume(hid_state_t *hidp);
304 hid_state_t *hidp = NULL;
311 if ((hidp = ddi_get_soft_state(hid_statep, instance)) != NULL) {
312 *result = hidp->hid_dip;
345 hid_state_t *hidp = NULL;
357 hidp = ddi_get_soft_state(hid_statep, instance);
358 hid_cpr_resume(hidp);
369 hidp = ddi_get_soft_state(hid_statep, instance);
371 if (hidp == NULL) {
376 hidp->hid_log_handle = usb_alloc_log_hdl(dip, NULL, &hid_errlevel,
379 hidp->hid_instance = instance;
380 hidp->hid_dip = dip;
386 USB_DPRINTF_L2(PRINT_MASK_ATTA, hidp->hid_log_handle,
395 USB_DPRINTF_L2(PRINT_MASK_ATTA, hidp->hid_log_handle,
402 mutex_init(&hidp->hid_mutex, NULL, MUTEX_DRIVER,
405 hidp->hid_attach_flags |= HID_LOCK_INIT;
411 mutex_enter(&hidp->hid_mutex);
412 hidp->hid_dev_data = dev_data;
413 hidp->hid_dev_descr = dev_data->dev_descr;
414 hidp->hid_interfaceno = dev_data->dev_curr_if;
415 hidp->hid_if_descr = altif_data->altif_descr;
420 if (hidp->hid_if_descr.bInterfaceSubClass != BOOT_INTERFACE)
421 hidp->hid_if_descr.bInterfaceProtocol = NONE_PROTOCOL;
422 mutex_exit(&hidp->hid_mutex);
425 hidp->hid_interfaceno, 0, 0,
428 USB_DPRINTF_L2(PRINT_MASK_ATTA, hidp->hid_log_handle,
434 mutex_enter(&hidp->hid_mutex);
435 hidp->hid_ep_intr_descr = ep_data->ep_descr;
441 if (hid_parse_hid_descr(&hidp->hid_hid_descr, USB_HID_DESCR_SIZE,
448 if (hid_parse_hid_descr_failure(hidp) == USB_FAILURE) {
449 mutex_exit(&hidp->hid_mutex);
464 USB_DPRINTF_L3(PRINT_MASK_ATTA, hidp->hid_log_handle,
471 hidp->hid_hid_descr.bLength,
472 hidp->hid_hid_descr.bDescriptorType,
473 hidp->hid_hid_descr.bcdHID,
474 hidp->hid_hid_descr.bCountryCode,
475 hidp->hid_hid_descr.bNumDescriptors,
476 hidp->hid_hid_descr.bReportDescriptorType,
477 hidp->hid_hid_descr.wReportDescriptorLength);
483 hidp->hid_default_pipe = hidp->hid_dev_data->dev_default_ph;
487 hidp->hid_dev_data = NULL;
512 mutex_exit(&hidp->hid_mutex);
514 if (hid_handle_report_descriptor(hidp,
515 hidp->hid_interfaceno) == USB_SUCCESS) {
524 mutex_enter(&hidp->hid_mutex);
531 if (hidp->hid_packet_size == 0) {
532 if (hidp->hid_if_descr.bInterfaceProtocol ==
535 hidp->hid_packet_size = USBKPSZ;
536 } else if (hidp->
540 hidp->hid_packet_size = USBMSSZ;
543 hidp->hid_log_handle,
545 mutex_exit(&hidp->hid_mutex);
555 hidp->hid_intr_pipe_policy.pp_max_async_reqs = 1;
562 mutex_exit(&hidp->hid_mutex);
563 hid_set_idle(hidp);
566 hid_set_protocol(hidp, SET_REPORT_PROTOCOL);
567 mutex_enter(&hidp->hid_mutex);
573 switch (hidp->hid_if_descr.bInterfaceProtocol) {
589 hidp->hid_report_descr, HID_GENERIC_DESKTOP,
597 hidp->hid_report_descr, &usage_page, &usage) !=
647 USB_DPRINTF_L1(PRINT_MASK_ATTA, hidp->hid_log_handle,
649 mutex_exit(&hidp->hid_mutex);
657 mutex_exit(&hidp->hid_mutex);
662 USB_DPRINTF_L2(PRINT_MASK_ATTA, hidp->hid_log_handle,
686 mutex_enter(&hidp->hid_mutex);
687 hidp->hid_attach_flags |= HID_MINOR_NODES;
688 hidp->hid_dev_state = USB_DEV_ONLINE;
689 mutex_exit(&hidp->hid_mutex);
693 USB_DPRINTF_L2(PRINT_MASK_ATTA, hidp->hid_log_handle,
700 hid_create_pm_components(dip, hidp);
701 hid_pm_busy_component(hidp);
703 hid_pm_idle_component(hidp);
705 hidp->hid_internal_rq = hidp->hid_external_rq = NULL;
706 hidp->hid_internal_flag = hidp->hid_external_flag = 0;
707 hidp->hid_inuse_rq = NULL;
714 USB_DPRINTF_L4(PRINT_MASK_ATTA, hidp->hid_log_handle,
720 if (hidp) {
721 USB_DPRINTF_L2(PRINT_MASK_ATTA, hidp->hid_log_handle,
723 hid_detach_cleanup(dip, hidp);
738 hid_state_t *hidp;
741 hidp = ddi_get_soft_state(hid_statep, instance);
743 USB_DPRINTF_L4(PRINT_MASK_ALL, hidp->hid_log_handle, "hid_detach");
753 hid_detach_cleanup(dip, hidp);
757 rval = hid_cpr_suspend(hidp);
778 hid_state_t *hidp;
783 hidp = ddi_get_soft_state(hid_statep, instance);
784 if (hidp == NULL) {
789 USB_DPRINTF_L4(PRINT_MASK_OPEN, hidp->hid_log_handle,
810 mutex_enter(&hidp->hid_mutex);
812 (hidp->hid_dev_state == USB_DEV_DISCONNECTED)) {
813 mutex_exit(&hidp->hid_mutex);
818 (hidp->hid_internal_rq != NULL)) {
819 ASSERT(hidp->hid_internal_rq == q);
821 mutex_exit(&hidp->hid_mutex);
826 (hidp->hid_external_rq != NULL)) {
827 ASSERT(hidp->hid_external_rq == q);
829 mutex_exit(&hidp->hid_mutex);
833 mutex_exit(&hidp->hid_mutex);
835 q->q_ptr = hidp;
836 WR(q)->q_ptr = hidp;
838 mutex_enter(&hidp->hid_mutex);
839 if (hidp->hid_inuse_rq != NULL) {
843 hidp->hid_internal_flag = HID_STREAMS_OPEN;
844 hidp->hid_inuse_rq = hidp->hid_internal_rq = q;
846 hidp->hid_external_flag = HID_STREAMS_OPEN;
847 hidp->hid_inuse_rq = hidp->hid_external_rq = q;
850 mutex_exit(&hidp->hid_mutex);
858 hidp->hid_interrupt_pipe = NULL;
859 no_of_ep = hidp->hid_if_descr.bNumEndpoints;
860 mutex_exit(&hidp->hid_mutex);
865 if (usb_pipe_open(hidp->hid_dip,
866 &hidp->hid_ep_intr_descr,
867 &hidp->hid_intr_pipe_policy, USB_FLAGS_SLEEP,
868 &hidp->hid_interrupt_pipe) !=
877 hid_pm_busy_component(hidp);
878 (void) pm_raise_power(hidp->hid_dip, 0, USB_DEV_OS_FULL_PWR);
880 mutex_enter(&hidp->hid_mutex);
882 hidp->hid_internal_flag = HID_STREAMS_OPEN;
883 hidp->hid_inuse_rq = hidp->hid_internal_rq = q;
885 hidp->hid_external_flag = HID_STREAMS_OPEN;
886 hidp->hid_inuse_rq = hidp->hid_external_rq = q;
889 mutex_exit(&hidp->hid_mutex);
893 mutex_enter(&hidp->hid_mutex);
895 if ((rval = hid_start_intr_polling(hidp)) != USB_SUCCESS) {
896 USB_DPRINTF_L2(PRINT_MASK_OPEN, hidp->hid_log_handle,
900 hidp->hid_internal_flag = HID_STREAMS_DISMANTLING;
902 hidp->hid_external_flag = HID_STREAMS_DISMANTLING;
903 mutex_exit(&hidp->hid_mutex);
905 usb_pipe_close(hidp->hid_dip, hidp->hid_interrupt_pipe,
908 mutex_enter(&hidp->hid_mutex);
909 hidp->hid_interrupt_pipe = NULL;
910 mutex_exit(&hidp->hid_mutex);
914 mutex_enter(&hidp->hid_mutex);
916 hidp->hid_internal_flag = 0;
917 hidp->hid_internal_rq = NULL;
918 if (hidp->hid_external_flag == HID_STREAMS_OPEN)
919 hidp->hid_inuse_rq = hidp->hid_external_rq;
921 hidp->hid_inuse_rq = NULL;
923 hidp->hid_external_flag = 0;
924 hidp->hid_external_rq = NULL;
925 if (hidp->hid_internal_flag == HID_STREAMS_OPEN)
926 hidp->hid_inuse_rq = hidp->hid_internal_rq;
928 hidp->hid_inuse_rq = NULL;
930 mutex_exit(&hidp->hid_mutex);
935 hid_pm_idle_component(hidp);
939 mutex_exit(&hidp->hid_mutex);
941 USB_DPRINTF_L4(PRINT_MASK_OPEN, hidp->hid_log_handle, "hid_open: End");
947 switch (hidp->hid_pm->hid_pm_strategy) {
949 hid_pm_idle_component(hidp);
969 hid_state_t *hidp = (hid_state_t *)q->q_ptr;
973 USB_DPRINTF_L4(PRINT_MASK_CLOSE, hidp->hid_log_handle, "hid_close:");
975 mutex_enter(&hidp->hid_mutex);
977 ASSERT((hidp->hid_internal_rq == q) ||
978 (hidp->hid_external_rq == q));
980 if (hidp->hid_internal_rq == q)
981 hidp->hid_internal_flag = HID_STREAMS_DISMANTLING;
983 hidp->hid_external_flag = HID_STREAMS_DISMANTLING;
985 mutex_exit(&hidp->hid_mutex);
991 (void) usb_pipe_drain_reqs(hidp->hid_dip,
992 hidp->hid_default_pipe, 0, USB_FLAGS_SLEEP, NULL, 0);
994 mutex_enter(&hidp->hid_mutex);
999 mutex_exit(&hidp->hid_mutex);
1000 hid_pm_idle_component(hidp);
1001 mutex_enter(&hidp->hid_mutex);
1003 mutex_exit(&hidp->hid_mutex);
1010 mutex_enter(&hidp->hid_mutex);
1012 if (hidp->hid_internal_rq == q) {
1013 hidp->hid_internal_rq = NULL;
1014 hidp->hid_internal_flag = 0;
1015 if (hidp->hid_inuse_rq == q) {
1017 if (hidp->hid_external_flag == HID_STREAMS_OPEN)
1018 hidp->hid_inuse_rq = hidp->hid_external_rq;
1020 hidp->hid_inuse_rq = NULL;
1023 hidp->hid_external_rq = NULL;
1024 hidp->hid_external_flag = 0;
1025 if (hidp->hid_inuse_rq == q) {
1027 if (hidp->hid_internal_flag == HID_STREAMS_OPEN)
1028 hidp->hid_inuse_rq = hidp->hid_internal_rq;
1030 hidp->hid_inuse_rq = NULL;
1034 if (hidp->hid_inuse_rq != NULL) {
1035 mutex_exit(&hidp->hid_mutex);
1040 hid_close_intr_pipe(hidp);
1041 mutex_exit(&hidp->hid_mutex);
1046 switch (hidp->hid_pm->hid_pm_strategy) {
1051 hid_pm_idle_component(hidp);
1055 USB_DPRINTF_L4(PRINT_MASK_CLOSE, hidp->hid_log_handle,
1069 hid_state_t *hidp = (hid_state_t *)q->q_ptr;
1078 USB_DPRINTF_L4(PRINT_MASK_ALL, hidp->hid_log_handle,
1112 mutex_enter(&hidp->hid_mutex);
1113 ASSERT(hidp->hid_inuse_rq != NULL);
1114 mutex_exit(&hidp->hid_mutex);
1121 mutex_enter(&hidp->hid_mutex);
1122 if (hidp->hid_inuse_rq == hidp->hid_internal_rq) {
1126 ASSERT(hidp->hid_inuse_rq ==
1127 hidp->hid_external_rq);
1131 mutex_exit(&hidp->hid_mutex);
1170 mutex_enter(&hidp->hid_mutex);
1174 flag = hidp->hid_internal_flag;
1175 tmpq = hidp->hid_internal_rq;
1178 flag = hidp->hid_external_flag;
1179 tmpq = hidp->hid_external_rq;
1183 mutex_exit(&hidp->hid_mutex);
1188 hidp->hid_inuse_rq = tmpq;
1190 mutex_exit(&hidp->hid_mutex);
1203 hid_pm_busy_component(hidp);
1231 hid_pm_idle_component(hidp);
1242 USB_DPRINTF_L4(PRINT_MASK_ALL, hidp->hid_log_handle,
1257 hid_state_t *hidp = (hid_state_t *)q->q_ptr;
1261 USB_DPRINTF_L4(PRINT_MASK_ALL, hidp->hid_log_handle,
1264 mutex_enter(&hidp->hid_mutex);
1265 USB_DPRINTF_L4(PRINT_MASK_ALL, hidp->hid_log_handle,
1267 usb_str_dev_state(hidp->hid_dev_state));
1273 if (hidp->hid_dev_state == USB_DEV_PWRED_DOWN) {
1274 mutex_exit(&hidp->hid_mutex);
1275 (void) pm_raise_power(hidp->hid_dip, 0, USB_DEV_OS_FULL_PWR);
1276 mutex_enter(&hidp->hid_mutex);
1283 while ((hidp->hid_dev_state == USB_DEV_ONLINE) &&
1284 (HID_STREAMS_FLAG(q, hidp) != HID_STREAMS_DISMANTLING) &&
1288 mutex_exit(&hidp->hid_mutex);
1303 hid_pm_idle_component(hidp);
1307 mutex_enter(&hidp->hid_mutex);
1309 mutex_exit(&hidp->hid_mutex);
1310 USB_DPRINTF_L4(PRINT_MASK_ALL, hidp->hid_log_handle,
1325 hid_state_t *hidp;
1329 hidp = ddi_get_soft_state(hid_statep, instance);
1331 USB_DPRINTF_L3(PRINT_MASK_PM, hidp->hid_log_handle, "hid_power:"
1335 mutex_enter(&hidp->hid_mutex);
1336 hidpm = hidp->hid_pm;
1340 USB_DPRINTF_L2(PRINT_MASK_PM, hidp->hid_log_handle,
1344 mutex_exit(&hidp->hid_mutex);
1351 retval = hid_pwrlvl0(hidp);
1354 retval = hid_pwrlvl1(hidp);
1357 retval = hid_pwrlvl2(hidp);
1360 retval = hid_pwrlvl3(hidp);
1367 mutex_exit(&hidp->hid_mutex);
1382 hid_state_t *hidp = (hid_state_t *)req->intr_client_private;
1385 USB_DPRINTF_L4(PRINT_MASK_ALL, hidp->hid_log_handle,
1389 hid_pm_busy_component(hidp);
1391 mutex_enter(&hidp->hid_mutex);
1398 if (HID_STREAMS_FLAG(hidp->hid_inuse_rq, hidp) ==
1403 if (!canputnext(hidp->hid_inuse_rq)) {
1404 USB_DPRINTF_L2(PRINT_MASK_ALL, hidp->hid_log_handle,
1408 hid_flush(hidp->hid_inuse_rq);
1409 mutex_exit(&hidp->hid_mutex);
1411 q = hidp->hid_inuse_rq;
1412 mutex_exit(&hidp->hid_mutex);
1421 mutex_exit(&hidp->hid_mutex);
1426 hid_pm_idle_component(hidp);
1443 hid_state_t *hidp = (hid_state_t *)rq->q_ptr;
1447 USB_DPRINTF_L4(PRINT_MASK_ALL, hidp->hid_log_handle,
1484 mutex_enter(&hidp->hid_mutex);
1485 hidp->hid_default_pipe_req--;
1486 ASSERT(hidp->hid_default_pipe_req >= 0);
1487 mutex_exit(&hidp->hid_mutex);
1489 hid_pm_idle_component(hidp);
1504 hid_state_t *hidp = (hid_state_t *)req->intr_client_private;
1509 USB_DPRINTF_L2(PRINT_MASK_ALL, hidp->hid_log_handle,
1519 hidp->hid_log_handle,
1525 mutex_enter(&hidp->hid_mutex);
1535 if ((hidp->hid_dev_state == USB_DEV_ONLINE) &&
1536 ((rval = hid_start_intr_polling(hidp)) !=
1538 USB_DPRINTF_L2(PRINT_MASK_ALL, hidp->hid_log_handle,
1546 mutex_exit(&hidp->hid_mutex);
1565 hid_state_t *hidp = (hid_state_t *)rq->q_ptr;
1569 USB_DPRINTF_L2(PRINT_MASK_ALL, hidp->hid_log_handle,
1593 mutex_enter(&hidp->hid_mutex);
1594 hidp->hid_default_pipe_req--;
1595 ASSERT(hidp->hid_default_pipe_req >= 0);
1596 mutex_exit(&hidp->hid_mutex);
1600 hid_pm_idle_component(hidp);
1616 hid_state_t *hidp = (hid_state_t *)ddi_get_soft_state(hid_statep,
1619 ASSERT(hidp != NULL);
1621 USB_DPRINTF_L3(PRINT_MASK_EVENTS, hidp->hid_log_handle,
1624 hid_restore_device_state(dip, hidp);
1635 hid_cpr_suspend(hid_state_t *hidp)
1640 USB_DPRINTF_L4(PRINT_MASK_EVENTS, hidp->hid_log_handle,
1641 "hid_cpr_suspend: dip=0x%p", (void *)hidp->hid_dip);
1643 mutex_enter(&hidp->hid_mutex);
1644 switch (hidp->hid_dev_state) {
1647 prev_state = hidp->hid_dev_state;
1648 hidp->hid_dev_state = USB_DEV_SUSPENDED;
1649 mutex_exit(&hidp->hid_mutex);
1652 rval = usb_pipe_drain_reqs(hidp->hid_dip,
1653 hidp->hid_default_pipe, hid_default_pipe_drain_timeout,
1657 mutex_enter(&hidp->hid_mutex);
1658 if ((rval != USB_SUCCESS) || (hidp->hid_default_pipe_req > 0)) {
1659 USB_DPRINTF_L2(PRINT_MASK_EVENTS, hidp->hid_log_handle,
1664 hidp->hid_dev_state = prev_state;
1667 hid_save_device_state(hidp);
1672 hidp->hid_dev_state = USB_DEV_SUSPENDED;
1673 hid_save_device_state(hidp);
1678 USB_DPRINTF_L2(PRINT_MASK_EVENTS, hidp->hid_log_handle,
1680 hidp->hid_dev_state);
1684 mutex_exit(&hidp->hid_mutex);
1691 hid_cpr_resume(hid_state_t *hidp)
1693 USB_DPRINTF_L4(PRINT_MASK_EVENTS, hidp->hid_log_handle,
1694 "hid_cpr_resume: dip=0x%p", (void *)hidp->hid_dip);
1696 hid_restore_device_state(hidp->hid_dip, hidp);
1708 hid_state_t *hidp;
1711 hidp = (hid_state_t *)ddi_get_soft_state(hid_statep,
1713 ASSERT(hidp != NULL);
1715 USB_DPRINTF_L4(PRINT_MASK_EVENTS, hidp->hid_log_handle,
1718 mutex_enter(&hidp->hid_mutex);
1719 switch (hidp->hid_dev_state) {
1722 hidp->hid_dev_state = USB_DEV_DISCONNECTED;
1723 if (HID_IS_OPEN(hidp)) {
1725 USB_DPRINTF_L2(PRINT_MASK_EVENTS, hidp->hid_log_handle,
1728 hid_save_device_state(hidp);
1735 if (hidp->hid_external_flag == HID_STREAMS_OPEN) {
1736 queue_t *q = hidp->hid_external_rq;
1737 mutex_exit(&hidp->hid_mutex);
1746 mutex_enter(&hidp->hid_mutex);
1755 USB_DPRINTF_L2(PRINT_MASK_EVENTS, hidp->hid_log_handle,
1757 hidp->hid_dev_state);
1761 mutex_exit(&hidp->hid_mutex);
1775 hid_state_t *hidp;
1778 hidp = (hid_state_t *)arg;
1780 USB_DPRINTF_L4(PRINT_MASK_PM, hidp->hid_log_handle,
1783 mutex_enter(&hidp->hid_mutex);
1784 hidp->hid_pm->hid_raise_power = B_FALSE;
1786 if (hidp->hid_dev_state == USB_DEV_ONLINE) {
1787 wq = WR(hidp->hid_inuse_rq);
1788 mutex_exit(&hidp->hid_mutex);
1793 mutex_exit(&hidp->hid_mutex);
1850 hid_parse_hid_descr_failure(hid_state_t *hidp)
1859 USB_DPRINTF_L1(PRINT_MASK_ATTA, hidp->hid_log_handle,
1862 if (hidp->hid_if_descr.bInterfaceProtocol == KEYBOARD_PROTOCOL) {
1863 USB_DPRINTF_L2(PRINT_MASK_ATTA, hidp->hid_log_handle,
1868 hidp->hid_hid_descr.wReportDescriptorLength =
1871 hidp->hid_packet_size = USBKPSZ;
1873 } else if (hidp->hid_if_descr.bInterfaceProtocol ==
1875 USB_DPRINTF_L2(PRINT_MASK_ATTA, hidp->hid_log_handle,
1880 hidp->hid_hid_descr.wReportDescriptorLength =
1883 hidp->hid_packet_size = USBMSSZ;
1899 hid_handle_report_descriptor(hid_state_t *hidp,
1922 setup.wLength = hidp->hid_hid_descr.wReportDescriptorLength;
1923 if (usb_pipe_ctrl_xfer_wait(hidp->hid_default_pipe,
1928 USB_DPRINTF_L2(PRINT_MASK_ATTA, hidp->hid_log_handle,
1935 int n = hidp->hid_hid_descr.wReportDescriptorLength;
1941 USB_DPRINTF_L3(PRINT_MASK_ATTA, hidp->hid_log_handle,
1949 hidp->hid_hid_descr.wReportDescriptorLength,
1950 &hidp->hid_hid_descr,
1951 &hidp->hid_report_descr) == HIDPARSER_SUCCESS) {
1955 hidp->hid_report_descr, &hpack);
1957 hidp->hid_packet_size = (hpack.max_packet_size + 7) / 8;
1961 hidp->hid_packet_size++;
1964 USB_DPRINTF_L1(PRINT_MASK_ATTA, hidp->hid_log_handle,
1986 hid_set_idle(hid_state_t *hidp)
2001 USB_DPRINTF_L4(PRINT_MASK_ATTA, hidp->hid_log_handle,
2004 setup.wIndex = hidp->hid_if_descr.bInterfaceNumber;
2006 hidp->hid_default_pipe,
2011 USB_DPRINTF_L2(PRINT_MASK_ATTA, hidp->hid_log_handle,
2016 USB_DPRINTF_L4(PRINT_MASK_ATTA, hidp->hid_log_handle,
2027 hid_set_protocol(hid_state_t *hidp, int protocol)
2033 USB_DPRINTF_L4(PRINT_MASK_ATTA, hidp->hid_log_handle,
2041 setup.wIndex = hidp->hid_if_descr.bInterfaceNumber;
2045 hidp->hid_default_pipe, /* bmRequestType */
2055 USB_DPRINTF_L2(PRINT_MASK_ATTA, hidp->hid_log_handle,
2061 USB_DPRINTF_L4(PRINT_MASK_ATTA, hidp->hid_log_handle,
2071 hid_detach_cleanup(dev_info_t *dip, hid_state_t *hidp)
2073 int flags = hidp->hid_attach_flags;
2077 USB_DPRINTF_L4(PRINT_MASK_ALL, hidp->hid_log_handle,
2080 if ((hidp->hid_attach_flags & HID_LOCK_INIT) == 0) {
2094 mutex_enter(&hidp->hid_mutex);
2096 hidpm = hidp->hid_pm;
2098 USB_DPRINTF_L2(PRINT_MASK_ALL, hidp->hid_log_handle,
2101 if (hidpm && (hidp->hid_dev_state != USB_DEV_DISCONNECTED)) {
2103 mutex_exit(&hidp->hid_mutex);
2104 hid_pm_busy_component(hidp);
2119 hidp->hid_log_handle,
2128 hid_pm_idle_component(hidp);
2129 mutex_enter(&hidp->hid_mutex);
2135 hidp->hid_pm = NULL;
2138 mutex_exit(&hidp->hid_mutex);
2140 if (hidp->hid_report_descr != NULL) {
2142 hidp->hid_report_descr);
2149 mutex_destroy(&hidp->hid_mutex);
2151 USB_DPRINTF_L4(PRINT_MASK_ALL, hidp->hid_log_handle,
2155 usb_client_detach(dip, hidp->hid_dev_data);
2156 usb_free_log_hdl(hidp->hid_log_handle);
2157 ddi_soft_state_free(hid_statep, hidp->hid_instance);
2169 hid_start_intr_polling(hid_state_t *hidp)
2174 USB_DPRINTF_L4(PRINT_MASK_PM, hidp->hid_log_handle,
2177 usb_str_dev_state(hidp->hid_dev_state), hidp->hid_internal_flag,
2178 hidp->hid_external_flag, (void *)hidp->hid_interrupt_pipe);
2180 if (HID_IS_OPEN(hidp) && (hidp->hid_interrupt_pipe != NULL)) {
2184 req = usb_alloc_intr_req(hidp->hid_dip, 0, USB_FLAGS_SLEEP);
2185 req->intr_client_private = (usb_opaque_t)hidp;
2188 req->intr_len = hidp->hid_packet_size;
2195 mutex_exit(&hidp->hid_mutex);
2197 if ((rval = usb_pipe_intr_xfer(hidp->hid_interrupt_pipe, req,
2199 USB_DPRINTF_L2(PRINT_MASK_PM, hidp->hid_log_handle,
2205 mutex_enter(&hidp->hid_mutex);
2208 USB_DPRINTF_L4(PRINT_MASK_PM, hidp->hid_log_handle,
2220 hid_close_intr_pipe(hid_state_t *hidp)
2222 USB_DPRINTF_L4(PRINT_MASK_CLOSE, hidp->hid_log_handle,
2225 if (hidp->hid_interrupt_pipe) {
2229 mutex_exit(&hidp->hid_mutex);
2230 usb_pipe_close(hidp->hid_dip, hidp->hid_interrupt_pipe,
2232 mutex_enter(&hidp->hid_mutex);
2233 hidp->hid_interrupt_pipe = NULL;
2235 USB_DPRINTF_L4(PRINT_MASK_CLOSE, hidp->hid_log_handle,
2248 hid_state_t *hidp = (hid_state_t *)q->q_ptr;
2256 USB_DPRINTF_L4(PRINT_MASK_ALL, hidp->hid_log_handle,
2284 (uchar_t *)&hidp->hid_report_descr,
2285 sizeof (hidp->hid_report_descr));
2294 sizeof (hidp->hid_report_descr);
2309 hidp->hid_dev_descr->idVendor;
2311 hidp->hid_dev_descr->idProduct;
2346 (hid_polled_handle_t)hidp;
2359 (void) hid_polled_input_init(hidp);
2374 (void) hid_polled_input_fini(hidp);
2414 mutex_enter(&hidp->hid_mutex);
2415 USB_DPRINTF_L4(PRINT_MASK_ALL, hidp->hid_log_handle,
2417 usb_str_dev_state(hidp->hid_dev_state));
2419 switch (hidp->hid_dev_state) {
2425 hidp->hid_dev_state = USB_DEV_HID_POWER_CHANGE;
2426 mutex_exit(&hidp->hid_mutex);
2427 if (usb_req_raise_power(hidp->hid_dip, 0,
2429 hidp, 0) != USB_SUCCESS) {
2431 mutex_enter(&hidp->hid_mutex);
2432 hidp->hid_dev_state = USB_DEV_PWRED_DOWN;
2433 mutex_exit(&hidp->hid_mutex);
2439 mutex_exit(&hidp->hid_mutex);
2444 if (HID_STREAMS_FLAG(q, hidp) != HID_STREAMS_DISMANTLING) {
2446 mutex_exit(&hidp->hid_mutex);
2453 mutex_exit(&hidp->hid_mutex);
2459 mutex_exit(&hidp->hid_mutex);
2480 hid_state_t *hidp = (hid_state_t *)q->q_ptr;
2483 USB_DPRINTF_L4(PRINT_MASK_ALL, hidp->hid_log_handle,
2486 request_index = hidp->hid_if_descr.bInterfaceNumber;
2535 hid_state_t *hidp = (hid_state_t *)q->q_ptr;
2540 USB_DPRINTF_L4(PRINT_MASK_ALL, hidp->hid_log_handle,
2545 mutex_enter(&hidp->hid_mutex);
2546 hidp->hid_default_pipe_req++;
2547 mutex_exit(&hidp->hid_mutex);
2556 USB_DPRINTF_L2(PRINT_MASK_ALL, hidp->hid_log_handle,
2564 if ((ctrl_req = usb_alloc_ctrl_req(hidp->hid_dip, length, 0)) == NULL) {
2565 USB_DPRINTF_L2(PRINT_MASK_ALL, hidp->hid_log_handle,
2567 mutex_enter(&hidp->hid_mutex);
2568 hidp->hid_default_pipe_req--;
2569 ASSERT(hidp->hid_default_pipe_req >= 0);
2570 mutex_exit(&hidp->hid_mutex);
2601 if ((rval = usb_pipe_ctrl_xfer(hidp->hid_default_pipe,
2603 mutex_enter(&hidp->hid_mutex);
2604 hidp->hid_default_pipe_req--;
2605 ASSERT(hidp->hid_default_pipe_req >= 0);
2606 mutex_exit(&hidp->hid_mutex);
2609 USB_DPRINTF_L2(PRINT_MASK_ALL, hidp->hid_log_handle,
2626 hid_create_pm_components(dev_info_t *dip, hid_state_t *hidp)
2631 USB_DPRINTF_L4(PRINT_MASK_PM, hidp->hid_log_handle,
2636 hidp->hid_pm = hidpm;
2637 hidpm->hid_state = hidp;
2642 switch (hidp->hid_if_descr.bInterfaceProtocol) {
2650 USB_DPRINTF_L3(PRINT_MASK_PM, hidp->hid_log_handle,
2673 USB_DPRINTF_L4(PRINT_MASK_PM, hidp->hid_log_handle,
2686 hid_state_t *hidp = ddi_get_soft_state(hid_statep,
2701 * hidp->hid_dev_descr won't be NULL.
2703 if ((hidp->hid_dev_descr->idVendor ==
2705 (hidp->hid_dev_descr->idProduct ==
2707 (hidp->hid_dev_descr->bcdDevice >=
2726 hid_save_device_state(hid_state_t *hidp)
2732 USB_DPRINTF_L4(PRINT_MASK_EVENTS, hidp->hid_log_handle,
2735 if (!(HID_IS_OPEN(hidp)))
2738 if (hidp->hid_internal_flag == HID_STREAMS_OPEN) {
2743 q = hidp->hid_internal_rq;
2745 mutex_exit(&hidp->hid_mutex);
2757 mutex_enter(&hidp->hid_mutex);
2760 if (hidp->hid_external_flag == HID_STREAMS_OPEN) {
2765 q = hidp->hid_external_rq;
2767 mutex_exit(&hidp->hid_mutex);
2779 mutex_enter(&hidp->hid_mutex);
2782 mutex_exit(&hidp->hid_mutex);
2784 usb_pipe_stop_intr_polling(hidp->hid_interrupt_pipe, USB_FLAGS_SLEEP);
2785 mutex_enter(&hidp->hid_mutex);
2796 hid_restore_device_state(dev_info_t *dip, hid_state_t *hidp)
2804 hid_pm_busy_component(hidp);
2805 mutex_enter(&hidp->hid_mutex);
2807 USB_DPRINTF_L4(PRINT_MASK_ATTA, hidp->hid_log_handle,
2809 usb_str_dev_state(hidp->hid_dev_state));
2811 hidpm = hidp->hid_pm;
2812 mutex_exit(&hidp->hid_mutex);
2817 mutex_enter(&hidp->hid_mutex);
2818 if (hidp->hid_dev_state == USB_DEV_ONLINE) {
2823 mutex_exit(&hidp->hid_mutex);
2824 hid_pm_idle_component(hidp);
2828 mutex_exit(&hidp->hid_mutex);
2832 if (usb_check_same_device(dip, hidp->hid_log_handle, USB_LOG_L2,
2836 mutex_enter(&hidp->hid_mutex);
2837 hidp->hid_dev_state = USB_DEV_DISCONNECTED;
2838 mutex_exit(&hidp->hid_mutex);
2839 hid_pm_idle_component(hidp);
2843 hid_set_idle(hidp);
2844 hid_set_protocol(hidp, SET_REPORT_PROTOCOL);
2846 mutex_enter(&hidp->hid_mutex);
2849 mutex_exit(&hidp->hid_mutex);
2851 if ((rval = usb_handle_remote_wakeup(hidp->hid_dip,
2854 hidp->hid_log_handle,
2858 mutex_enter(&hidp->hid_mutex);
2865 if (HID_IS_OPEN(hidp)) {
2866 if ((rval = hid_start_intr_polling(hidp)) != USB_SUCCESS) {
2867 USB_DPRINTF_L3(PRINT_MASK_ATTA, hidp->hid_log_handle,
2875 hidp->hid_dev_state = USB_DEV_DISCONNECTED;
2876 mutex_exit(&hidp->hid_mutex);
2877 hid_pm_idle_component(hidp);
2881 if (hidp->hid_dev_state == USB_DEV_DISCONNECTED) {
2882 USB_DPRINTF_L2(PRINT_MASK_EVENTS, hidp->hid_log_handle,
2887 hidp->hid_dev_state = USB_DEV_ONLINE;
2890 if (hidp->hid_internal_flag == HID_STREAMS_OPEN) {
2891 q = hidp->hid_internal_rq;
2893 mutex_exit(&hidp->hid_mutex);
2907 mutex_enter(&hidp->hid_mutex);
2910 if (hidp->hid_external_flag == HID_STREAMS_OPEN) {
2911 q = hidp->hid_external_rq;
2913 mutex_exit(&hidp->hid_mutex);
2927 mutex_enter(&hidp->hid_mutex);
2931 hidp->hid_dev_state = USB_DEV_ONLINE;
2934 mutex_exit(&hidp->hid_mutex);
2935 hid_pm_idle_component(hidp);
2944 mutex_enter(&hidp->hid_mutex);
2946 if ((q = hidp->hid_external_rq) == NULL) {
2947 mutex_exit(&hidp->hid_mutex);
2951 mutex_exit(&hidp->hid_mutex);
3079 hid_pwrlvl0(hid_state_t *hidp)
3087 hidpm = hidp->hid_pm;
3089 switch (hidp->hid_dev_state) {
3097 if (HID_IS_OPEN(hidp)) {
3098 q = hidp->hid_inuse_rq;
3099 mutex_exit(&hidp->hid_mutex);
3110 hidp->hid_interrupt_pipe,
3125 mutex_enter(&hidp->hid_mutex);
3135 mutex_enter(&hidp->hid_mutex);
3144 mutex_enter(&hidp->hid_mutex);
3150 mutex_exit(&hidp->hid_mutex);
3152 rval = usb_set_device_pwrlvl3(hidp->hid_dip);
3155 mutex_enter(&hidp->hid_mutex);
3156 hidp->hid_dev_state = USB_DEV_PWRED_DOWN;
3173 hid_pwrlvl1(hid_state_t *hidp)
3178 rval = usb_set_device_pwrlvl2(hidp->hid_dip);
3187 hid_pwrlvl2(hid_state_t *hidp)
3191 rval = usb_set_device_pwrlvl1(hidp->hid_dip);
3199 hid_pwrlvl3(hid_state_t *hidp)
3207 hidpm = hidp->hid_pm;
3209 switch (hidp->hid_dev_state) {
3213 rval = usb_set_device_pwrlvl0(hidp->hid_dip);
3216 if (HID_IS_OPEN(hidp)) {
3218 rval = hid_start_intr_polling(hidp);
3221 hidp->hid_log_handle,
3229 q = hidp->hid_inuse_rq;
3232 mutex_exit(&hidp->hid_mutex);
3243 mutex_enter(&hidp->hid_mutex);
3246 hidp->hid_dev_state = USB_DEV_ONLINE;
3256 USB_DPRINTF_L2(PRINT_MASK_EVENTS, hidp->hid_log_handle,
3270 hid_polled_input_init(hid_state_t *hidp)
3272 USB_DPRINTF_L4(PRINT_MASK_ALL, hidp->hid_log_handle,
3279 if (usb_console_input_init(hidp->hid_dip, hidp->hid_interrupt_pipe,
3280 &hidp->hid_polled_raw_buf,
3281 &hidp->hid_polled_console_info) != USB_SUCCESS) {
3286 (void) hid_polled_input_fini(hidp);
3301 hid_polled_input_fini(hid_state_t *hidp)
3303 USB_DPRINTF_L4(PRINT_MASK_ALL, hidp->hid_log_handle,
3310 if ((hidp->hid_polled_console_info) &&
3311 (usb_console_input_fini(hidp->hid_polled_console_info) !=
3316 hidp->hid_polled_console_info = NULL;
3334 hid_state_t *hidp = (hid_state_t *)hid_polled_inputp;
3339 (void) usb_console_input_enter(hidp->hid_polled_console_info);
3355 hid_state_t *hidp = (hid_state_t *)hid_polled_input;
3364 if (usb_console_read(hidp->hid_polled_console_info,
3372 *buffer = hidp->hid_polled_raw_buf;
3394 hid_state_t *hidp = (hid_state_t *)hid_polled_inputp;
3399 (void) usb_console_input_exit(hidp->hid_polled_console_info);