Пример #1
0
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;
}
Пример #2
0
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));
    }
}
Пример #3
0
Файл: util.c Проект: ariavie/bcm
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);
}
Пример #4
0
Файл: mbox.c Проект: ariavie/bcm
/*
 * 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 */
}
Пример #5
0
static double __sal_time_usecs(void)
{
    return sal_time_usecs();
}