int _bcm_ptp_sem_take(_bcm_ptp_sem_t b, int usec) { int rv = -1; sal_usecs_t end_time = sal_time_usecs() + usec; int32 wait_time = usec; while ((rv != 0) && (wait_time > 0)) { rv = sal_sem_take(b, wait_time); wait_time = end_time - sal_time_usecs(); } return rv; }
void sal_usleep(uint32 usec) { uint32 start_usec; wait_queue_head_t queue; if (usec <= SECOND_USEC / HZ) { start_usec = sal_time_usecs(); do { SAL_YIELD(current); } while ((sal_time_usecs() - start_usec) < usec); } else { init_waitqueue_head(&queue); WQ_SLEEP(queue, USEC_TO_JIFFIES(usec)); } }
sal_usecs_t soc_timeout_elapsed(soc_timeout_t *to) { sal_usecs_t start_time; start_time = SAL_USECS_SUB(to->expire, to->usec); return SAL_USECS_SUB(sal_time_usecs(), start_time); }
/* * Function: * _bcm_ptp_rx_response_get * Purpose: * Get Rx response data for a PTP clock. * Parameters: * unit - (IN) Unit number. * ptp_id - (IN) PTP stack ID. * clock_num - (IN) PTP clock number. * usec - (IN) Semaphore timeout (usec). * data - (OUT) Response data. * data_len - (OUT) Response data size (octets). * Returns: * BCM_E_XXX * Notes: */ int _bcm_mbox_rx_response_get( int unit, int node_num, int usec, uint8 **data, int *data_len) { #if defined(BCM_CMICM_SUPPORT) int rv = BCM_E_UNAVAIL; int spl; sal_usecs_t expiration_time = sal_time_usecs() + usec; /* soc_cm_print("cmic_rx_get\n"); */ rv = BCM_E_FAIL; /* ptp_printf("Await resp @ %d\n", (int)sal_time_usecs()); */ while (BCM_FAILURE(rv) && (int32) (sal_time_usecs() - expiration_time) < 0) { rv = sal_sem_take(mbox_info.unit_state[unit].response_ready, usec); } if (BCM_FAILURE(rv)) { SOC_DEBUG_PRINT((DK_ERR | DK_VERBOSE, "Failed management Tx to ToP\n")); _MBOX_ERROR_FUNC("_bcm_ptp_sem_take()"); return rv; } /* Lock. */ spl = sal_splhi(); *data = mbox_info.unit_state[unit].response_data; *data_len = mbox_info.unit_state[unit].response_len; mbox_info.unit_state[unit].response_data = 0; /* Unlock. */ sal_spl(spl); return rv; #else /* BCM_CMICM_SUPPORT */ return BCM_E_UNAVAIL; #endif /* BCM_CMICM_SUPPORT */ }
static double __sal_time_usecs(void) { return sal_time_usecs(); }