Print this page
XXXX introduce drv_sectohz


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;