2513 }
2514 USB_DPRINTF_L3(DPRINT_OUT_DATA, kp->kp_lh, "keyspan_tx_copy_data:"
2515 "copied data_len = %d", data_len);
2516
2517 return (data_len);
2518 }
2519
2520
2521 /*
2522 * wait until local tx buffer drains.
2523 * 'timeout' is in seconds, zero means wait forever
2524 */
2525 static int
2526 keyspan_wait_tx_drain(keyspan_port_t *kp, int timeout)
2527 {
2528 clock_t until;
2529 int over = 0;
2530
2531 USB_DPRINTF_L4(DPRINT_OUT_DATA, kp->kp_lh, "keyspan_wait_tx_drain:"
2532 "timeout = %d", timeout);
2533 until = ddi_get_lbolt() + drv_usectohz(1000000 * timeout);
2534
2535 while (kp->kp_tx_mp && !over) {
2536 if (timeout > 0) {
2537 over = (cv_timedwait_sig(&kp->kp_tx_cv,
2538 &kp->kp_mutex, until) <= 0);
2539 } else {
2540 over = (cv_wait_sig(&kp->kp_tx_cv, &kp->kp_mutex) == 0);
2541 }
2542 }
2543
2544 return ((kp->kp_tx_mp == NULL) ? USB_SUCCESS : USB_FAILURE);
2545 }
2546
2547 /*
2548 * returns 0 if device is not online, != 0 otherwise
2549 */
2550 int
2551 keyspan_dev_is_online(keyspan_state_t *ksp)
2552 {
2553 int rval;
|
2513 }
2514 USB_DPRINTF_L3(DPRINT_OUT_DATA, kp->kp_lh, "keyspan_tx_copy_data:"
2515 "copied data_len = %d", data_len);
2516
2517 return (data_len);
2518 }
2519
2520
2521 /*
2522 * wait until local tx buffer drains.
2523 * 'timeout' is in seconds, zero means wait forever
2524 */
2525 static int
2526 keyspan_wait_tx_drain(keyspan_port_t *kp, int timeout)
2527 {
2528 clock_t until;
2529 int over = 0;
2530
2531 USB_DPRINTF_L4(DPRINT_OUT_DATA, kp->kp_lh, "keyspan_wait_tx_drain:"
2532 "timeout = %d", timeout);
2533 until = ddi_get_lbolt() + drv_sectohz(timeout);
2534
2535 while (kp->kp_tx_mp && !over) {
2536 if (timeout > 0) {
2537 over = (cv_timedwait_sig(&kp->kp_tx_cv,
2538 &kp->kp_mutex, until) <= 0);
2539 } else {
2540 over = (cv_wait_sig(&kp->kp_tx_cv, &kp->kp_mutex) == 0);
2541 }
2542 }
2543
2544 return ((kp->kp_tx_mp == NULL) ? USB_SUCCESS : USB_FAILURE);
2545 }
2546
2547 /*
2548 * returns 0 if device is not online, != 0 otherwise
2549 */
2550 int
2551 keyspan_dev_is_online(keyspan_state_t *ksp)
2552 {
2553 int rval;
|