Lines Matching refs:cc

1028 ccid_command_resp_length(ccid_command_t *cc)  in ccid_command_resp_length()  argument
1033 VERIFY3P(cc, !=, NULL); in ccid_command_resp_length()
1034 VERIFY3P(cc->cc_response, !=, NULL); in ccid_command_resp_length()
1039 cch = (ccid_header_t *)cc->cc_response->b_rptr; in ccid_command_resp_length()
1046 ccid_command_resp_param2(ccid_command_t *cc) in ccid_command_resp_param2() argument
1051 VERIFY3P(cc, !=, NULL); in ccid_command_resp_param2()
1052 VERIFY3P(cc->cc_response, !=, NULL); in ccid_command_resp_param2()
1054 cch = (ccid_header_t *)cc->cc_response->b_rptr; in ccid_command_resp_param2()
1068 ccid_command_complete(ccid_command_t *cc) in ccid_command_complete() argument
1070 ccid_t *ccid = cc->cc_ccid; in ccid_command_complete()
1073 cc->cc_completion_time = gethrtime(); in ccid_command_complete()
1074 list_remove(&ccid->ccid_command_queue, cc); in ccid_command_complete()
1076 if (cc->cc_flags & CCID_COMMAND_F_USER) { in ccid_command_complete()
1079 slot = &ccid->ccid_slots[cc->cc_slot]; in ccid_command_complete()
1081 slot->cs_icc.icc_complete(ccid, slot, cc); in ccid_command_complete()
1083 list_insert_tail(&ccid->ccid_complete_queue, cc); in ccid_command_complete()
1084 cv_broadcast(&cc->cc_cv); in ccid_command_complete()
1094 ccid_command_state_transition(ccid_command_t *cc, ccid_command_state_t state) in ccid_command_state_transition() argument
1096 VERIFY(MUTEX_HELD(&cc->cc_ccid->ccid_mutex)); in ccid_command_state_transition()
1098 cc->cc_state = state; in ccid_command_state_transition()
1099 cv_broadcast(&cc->cc_cv); in ccid_command_state_transition()
1103 ccid_command_transport_error(ccid_command_t *cc, int usb_status, usb_cr_t cr) in ccid_command_transport_error() argument
1105 VERIFY(MUTEX_HELD(&cc->cc_ccid->ccid_mutex)); in ccid_command_transport_error()
1107 ccid_command_state_transition(cc, CCID_COMMAND_TRANSPORT_ERROR); in ccid_command_transport_error()
1108 cc->cc_usb = usb_status; in ccid_command_transport_error()
1109 cc->cc_usbcr = cr; in ccid_command_transport_error()
1110 cc->cc_response = NULL; in ccid_command_transport_error()
1112 ccid_command_complete(cc); in ccid_command_transport_error()
1116 ccid_command_status_decode(ccid_command_t *cc, in ccid_command_status_decode() argument
1123 VERIFY3S(cc->cc_state, ==, CCID_COMMAND_COMPLETE); in ccid_command_status_decode()
1124 VERIFY3P(cc->cc_response, !=, NULL); in ccid_command_status_decode()
1125 mblen = msgsize(cc->cc_response); in ccid_command_status_decode()
1128 bcopy(cc->cc_response->b_rptr, &cch, sizeof (cch)); in ccid_command_status_decode()
1149 ccid_command_t *cc; in ccid_reply_bulk_cb() local
1165 if ((cc = list_head(&ccid->ccid_command_queue)) == NULL) { in ccid_reply_bulk_cb()
1187 if (cc->cc_state != CCID_COMMAND_REPLYING) { in ccid_reply_bulk_cb()
1189 VERIFY3S(cch.ch_seq, !=, cc->cc_seq); in ccid_reply_bulk_cb()
1207 ccid_command_state_transition(cc, CCID_COMMAND_CCID_ABORTED); in ccid_reply_bulk_cb()
1208 ccid_command_complete(cc); in ccid_reply_bulk_cb()
1214 slot = &ccid->ccid_slots[cc->cc_slot]; in ccid_reply_bulk_cb()
1222 if (cch.ch_seq != cc->cc_seq || in ccid_reply_bulk_cb()
1223 cch.ch_slot != cc->cc_slot || in ccid_reply_bulk_cb()
1224 cch.ch_mtype != cc->cc_rtype) { in ccid_reply_bulk_cb()
1225 ccid_command_state_transition(cc, CCID_COMMAND_CCID_ABORTED); in ccid_reply_bulk_cb()
1226 ccid_command_complete(cc); in ccid_reply_bulk_cb()
1239 ccid_command_state_transition(cc, CCID_COMMAND_CCID_ABORTED); in ccid_reply_bulk_cb()
1240 ccid_command_complete(cc); in ccid_reply_bulk_cb()
1259 ccid_command_transport_error(cc, ret, USB_CR_OK); in ccid_reply_bulk_cb()
1273 cc->cc_response = ubrp->bulk_data; in ccid_reply_bulk_cb()
1275 ccid_command_state_transition(cc, CCID_COMMAND_COMPLETE); in ccid_reply_bulk_cb()
1276 ccid_command_complete(cc); in ccid_reply_bulk_cb()
1285 ccid_command_t *cc; in ccid_reply_bulk_exc_cb() local
1303 if ((cc = list_head(&ccid->ccid_command_queue)) != NULL) { in ccid_reply_bulk_exc_cb()
1304 if (cc->cc_state == CCID_COMMAND_REPLYING) { in ccid_reply_bulk_exc_cb()
1305 ccid_command_transport_error(cc, USB_SUCCESS, in ccid_reply_bulk_exc_cb()
1402 ccid_command_t *cc; in ccid_command_dispatch() local
1405 while ((cc = list_head(&ccid->ccid_command_queue)) != NULL) { in ccid_command_dispatch()
1415 if (cc->cc_state > CCID_COMMAND_QUEUED) { in ccid_command_dispatch()
1423 ccid_command_state_transition(cc, CCID_COMMAND_DISPATCHED); in ccid_command_dispatch()
1424 cc->cc_dispatch_time = gethrtime(); in ccid_command_dispatch()
1431 ret = usb_pipe_bulk_xfer(ccid->ccid_bulkout_pipe, cc->cc_ubrp, in ccid_command_dispatch()
1442 ccid_command_transport_error(cc, ret, USB_CR_OK); in ccid_command_dispatch()
1448 ccid_command_queue(ccid_t *ccid, ccid_command_t *cc) in ccid_command_queue() argument
1456 cc->cc_seq = seq; in ccid_command_queue()
1458 cchead = (void *)cc->cc_ubrp->bulk_data->b_rptr; in ccid_command_queue()
1467 list_insert_tail(&ccid->ccid_command_queue, cc); in ccid_command_queue()
1468 ccid_command_state_transition(cc, CCID_COMMAND_QUEUED); in ccid_command_queue()
1469 cc->cc_queue_time = gethrtime(); in ccid_command_queue()
1484 ccid_command_t *cc = (void *)ubrp->bulk_client_private; in ccid_dispatch_bulk_cb() local
1485 ccid_t *ccid = cc->cc_ccid; in ccid_dispatch_bulk_cb()
1488 VERIFY3S(cc->cc_state, ==, CCID_COMMAND_DISPATCHED); in ccid_dispatch_bulk_cb()
1489 ccid_command_state_transition(cc, CCID_COMMAND_REPLYING); in ccid_dispatch_bulk_cb()
1490 cc->cc_dispatch_cb_time = gethrtime(); in ccid_dispatch_bulk_cb()
1499 ccid_command_transport_error(cc, ret, USB_CR_OK); in ccid_dispatch_bulk_cb()
1511 ccid_command_t *cc = (void *)ubrp->bulk_client_private; in ccid_dispatch_bulk_exc_cb() local
1512 ccid_t *ccid = cc->cc_ccid; in ccid_dispatch_bulk_exc_cb()
1515 ccid_command_transport_error(cc, USB_SUCCESS, in ccid_dispatch_bulk_exc_cb()
1521 ccid_command_free(ccid_command_t *cc) in ccid_command_free() argument
1523 VERIFY0(list_link_active(&cc->cc_list_node)); in ccid_command_free()
1524 VERIFY(cc->cc_state == CCID_COMMAND_ALLOCATED || in ccid_command_free()
1525 cc->cc_state >= CCID_COMMAND_COMPLETE); in ccid_command_free()
1527 if (cc->cc_response != NULL) { in ccid_command_free()
1528 freemsgchain(cc->cc_response); in ccid_command_free()
1529 cc->cc_response = NULL; in ccid_command_free()
1532 if (cc->cc_ubrp != NULL) { in ccid_command_free()
1533 usb_free_bulk_req(cc->cc_ubrp); in ccid_command_free()
1534 cc->cc_ubrp = NULL; in ccid_command_free()
1537 if (cc->cc_seq != 0) { in ccid_command_free()
1538 id_free(cc->cc_ccid->ccid_seqs, cc->cc_seq); in ccid_command_free()
1539 cc->cc_seq = 0; in ccid_command_free()
1542 cv_destroy(&cc->cc_cv); in ccid_command_free()
1543 kmem_free(cc, sizeof (ccid_command_t)); in ccid_command_free()
1550 ccid_command_bcopy(ccid_command_t *cc, const void *buf, size_t len) in ccid_command_bcopy() argument
1554 mlen = msgsize(cc->cc_ubrp->bulk_data); in ccid_command_bcopy()
1558 VERIFY3U(mlen, <=, cc->cc_ubrp->bulk_len); in ccid_command_bcopy()
1560 bcopy(buf, cc->cc_ubrp->bulk_data->b_wptr, len); in ccid_command_bcopy()
1561 cc->cc_ubrp->bulk_data->b_wptr += len; in ccid_command_bcopy()
1575 ccid_command_t *cc; in ccid_command_alloc() local
1648 cc = kmem_zalloc(sizeof (ccid_command_t), kmflag); in ccid_command_alloc()
1649 if (cc == NULL) in ccid_command_alloc()
1654 cc->cc_ubrp = usb_alloc_bulk_req(ccid->ccid_dip, allocsz, in ccid_command_alloc()
1657 cc->cc_ubrp = usb_alloc_bulk_req(ccid->ccid_dip, 0, usbflag); in ccid_command_alloc()
1659 if (cc->cc_ubrp == NULL) { in ccid_command_alloc()
1660 kmem_free(cc, sizeof (ccid_command_t)); in ccid_command_alloc()
1664 list_link_init(&cc->cc_list_node); in ccid_command_alloc()
1665 cv_init(&cc->cc_cv, NULL, CV_DRIVER, NULL); in ccid_command_alloc()
1666 cc->cc_mtype = mtype; in ccid_command_alloc()
1667 cc->cc_rtype = rtype; in ccid_command_alloc()
1668 cc->cc_slot = slot->cs_slotno; in ccid_command_alloc()
1669 cc->cc_reqlen = datasz; in ccid_command_alloc()
1670 cc->cc_ccid = ccid; in ccid_command_alloc()
1671 cc->cc_state = CCID_COMMAND_ALLOCATED; in ccid_command_alloc()
1678 cc->cc_ubrp->bulk_data = datamp; in ccid_command_alloc()
1680 cc->cc_ubrp->bulk_len = allocsz; in ccid_command_alloc()
1681 cc->cc_ubrp->bulk_timeout = CCID_BULK_OUT_TIMEOUT; in ccid_command_alloc()
1682 cc->cc_ubrp->bulk_client_private = (usb_opaque_t)cc; in ccid_command_alloc()
1683 cc->cc_ubrp->bulk_attributes = USB_ATTRS_AUTOCLEARING; in ccid_command_alloc()
1684 cc->cc_ubrp->bulk_cb = ccid_dispatch_bulk_cb; in ccid_command_alloc()
1685 cc->cc_ubrp->bulk_exc_cb = ccid_dispatch_bulk_exc_cb; in ccid_command_alloc()
1691 cchead = (void *)cc->cc_ubrp->bulk_data->b_rptr; in ccid_command_alloc()
1699 cc->cc_ubrp->bulk_data->b_wptr += sizeof (ccid_header_t); in ccid_command_alloc()
1700 *ccp = cc; in ccid_command_alloc()
1711 ccid_command_poll(ccid_t *ccid, ccid_command_t *cc) in ccid_command_poll() argument
1713 VERIFY0(cc->cc_flags & CCID_COMMAND_F_USER); in ccid_command_poll()
1716 while ((cc->cc_state < CCID_COMMAND_COMPLETE) && in ccid_command_poll()
1718 cv_wait(&cc->cc_cv, &ccid->ccid_mutex); in ccid_command_poll()
1728 if (cc == check) in ccid_command_poll()
1733 VERIFY(list_link_active(&cc->cc_list_node)); in ccid_command_poll()
1734 list_remove(&ccid->ccid_complete_queue, cc); in ccid_command_poll()
1742 ccid_command_t *cc; in ccid_command_power_off() local
1747 CCID_REQUEST_POWER_OFF, 0, 0, 0, &cc)) != 0) { in ccid_command_power_off()
1751 if ((ret = ccid_command_queue(ccid, cc)) != 0) { in ccid_command_power_off()
1752 ccid_command_free(cc); in ccid_command_power_off()
1756 ccid_command_poll(ccid, cc); in ccid_command_power_off()
1758 if (cc->cc_state != CCID_COMMAND_COMPLETE) { in ccid_command_power_off()
1763 ccid_command_status_decode(cc, &crs, &cis, NULL); in ccid_command_power_off()
1774 ccid_command_free(cc); in ccid_command_power_off()
1783 ccid_command_t *cc; in ccid_command_power_on() local
1804 CCID_REQUEST_POWER_ON, volt, 0, 0, &cc)) != 0) { in ccid_command_power_on()
1808 if ((ret = ccid_command_queue(ccid, cc)) != 0) { in ccid_command_power_on()
1809 ccid_command_free(cc); in ccid_command_power_on()
1813 ccid_command_poll(ccid, cc); in ccid_command_power_on()
1815 if (cc->cc_state != CCID_COMMAND_COMPLETE) { in ccid_command_power_on()
1826 ccid_command_status_decode(cc, &crs, &cis, &cce); in ccid_command_power_on()
1844 len = ccid_command_resp_length(cc); in ccid_command_power_on()
1855 size_t mlen = msgsize(cc->cc_response); in ccid_command_power_on()
1866 cc->cc_response->b_rptr += sizeof (ccid_header_t); in ccid_command_power_on()
1867 cc->cc_response->b_wptr = cc->cc_response->b_rptr + len; in ccid_command_power_on()
1868 *atrp = cc->cc_response; in ccid_command_power_on()
1869 cc->cc_response = NULL; in ccid_command_power_on()
1874 ccid_command_free(cc); in ccid_command_power_on()
1885 ccid_command_t *cc; in ccid_command_get_parameters() local
1891 CCID_REQUEST_GET_PARAMS, 0, 0, 0, &cc)) != 0) { in ccid_command_get_parameters()
1895 if ((ret = ccid_command_queue(ccid, cc)) != 0) in ccid_command_get_parameters()
1898 ccid_command_poll(ccid, cc); in ccid_command_get_parameters()
1900 if (cc->cc_state != CCID_COMMAND_COMPLETE) { in ccid_command_get_parameters()
1905 ccid_command_status_decode(cc, &crs, &cis, NULL); in ccid_command_get_parameters()
1918 prot = ccid_command_resp_param2(cc); in ccid_command_get_parameters()
1919 mlen = ccid_command_resp_length(cc); in ccid_command_get_parameters()
1920 cpbuf = cc->cc_response->b_rptr + sizeof (ccid_header_t); in ccid_command_get_parameters()
1946 ccid_command_free(cc); in ccid_command_get_parameters()
3216 ccid_command_t *cc; in ccid_cleanup() local
3218 while ((cc = list_remove_head(&ccid->ccid_command_queue)) != in ccid_cleanup()
3220 ccid_command_free(cc); in ccid_cleanup()
3224 while ((cc = list_remove_head(&ccid->ccid_complete_queue)) != in ccid_cleanup()
3226 ccid_command_free(cc); in ccid_cleanup()
3581 ccid_complete_apdu(ccid_t *ccid, ccid_slot_t *slot, ccid_command_t *cc) in ccid_complete_apdu() argument
3588 VERIFY3P(slot->cs_io.ci_command, ==, cc); in ccid_complete_apdu()
3597 ccid_command_free(cc); in ccid_complete_apdu()
3607 if (cc->cc_state != CCID_COMMAND_COMPLETE) { in ccid_complete_apdu()
3614 ccid_command_status_decode(cc, &crs, &cis, &cce); in ccid_complete_apdu()
3618 mp = cc->cc_response; in ccid_complete_apdu()
3619 cc->cc_response = NULL; in ccid_complete_apdu()
3639 ccid_command_free(cc); in ccid_complete_apdu()
3652 ccid_command_t *cc; in ccid_write_apdu() local
3658 &cc)) != 0) { in ccid_write_apdu()
3662 cc->cc_flags |= CCID_COMMAND_F_USER; in ccid_write_apdu()
3663 ccid_command_bcopy(cc, slot->cs_io.ci_ibuf, slot->cs_io.ci_ilen); in ccid_write_apdu()
3665 slot->cs_io.ci_command = cc; in ccid_write_apdu()
3668 if ((ret = ccid_command_queue(ccid, cc)) != 0) { in ccid_write_apdu()
3671 ccid_command_free(cc); in ccid_write_apdu()