Ejemplo n.º 1
0
status_t HOST_Init(void *host)
{
    sdif_transfer_callback_t sdifCallback = {0};
    sdif_host_t *sdifHost = (sdif_host_t *)host;

    /* Sets callback in host driver. */
    EVENT_InitTimer();

    /* Initialize SDIF. */
    sdifHost->config.endianMode = kHOST_EndianModeLittle;
    sdifHost->config.responseTimeout = 0xFFU;
    sdifHost->config.cardDetDebounce_Clock = 0xFFFFFFU;
    sdifHost->config.dataTimeout = 0xFFFFFFU;
    SDIF_Init(sdifHost->base, &(sdifHost->config));

    /* Set callback for SDHC driver. */
    sdifCallback.TransferComplete = SDIF_TransferCompleteCallback;
    /* Create handle for SDHC driver */
    SDIF_TransferCreateHandle(sdifHost->base, &g_sdifHandle, &sdifCallback, NULL);

    /* Create transfer complete event. */
    if (false == EVENT_Create(kEVENT_TransferComplete))
    {
        return kStatus_Fail;
    }

    /* Define transfer function. */
    sdifHost->transfer = SDIF_TransferFunction;

    /* Enable the card power here for mmc card case, because mmc card don't need card detect*/
    SDIF_EnableCardPower(sdifHost->base, true);

    return kStatus_Success;
}
Ejemplo n.º 2
0
/**
 * Gets event from cache or allocates a new one. Must be called 
 * under synchronization.
 */
STATIC Event * RWLOCK_GetExclusiveEvent(RWLock * lock)
{
    if (lock->eventsInCache > 0) {
        Event * e = lock->eventCache[lock->eventsInCache-1];
        lock->eventCache[lock->eventsInCache-1] = NULL;
        lock->eventsInCache--;
        ASSERT(e);
        return e;
    } else {
        return EVENT_Create();
    }
}