All pastes #580993 Raw Edit

Someone

public text v1 · immutable
#580993 ·published 2007-06-21 09:58 UTC
rendered paste body
int ata_init(void)
{
    if (!initialized)
    {
        spinlock_init(&sd_mtx);

        spinlock_lock(&sd_mtx);

        ata_led(false);
        
        initialized = true;

        outl(inl(0x70000088) & ~(0x4), 0x70000088);
        outl(inl(0x7000008c) & ~(0x4), 0x7000008c);
        outl(inl(0x70000084) | 0x4, 0x70000084);
        outl(0x1010, 0x70000034);

        GPIOA_OUTPUT_EN  &= ~(1 << 7);
        GPIOA_ENABLE     |=  (1 << 7);

        GPIOG_ENABLE     |= (0x3 << 5);
        GPIOG_OUTPUT_EN  |= (0x3 << 5);
        GPIOG_OUTPUT_VAL |= (0x3 << 5);

        sleep(HZ/10);

        sd_init_device(0);

        queue_init(&sd_queue, true);
        create_thread(sd_thread, sd_stack, sizeof(sd_stack),
            sd_thread_name IF_PRIO(, PRIORITY_SYSTEM) IF_COP(, CPU, false));

        /* enable interupt for the mSD card */
        GPIOA_INT_EN  &= ~(1 << 7);

        CPU_INT_EN = HI_MASK;
        CPU_HI_INT_EN = GPIO0_MASK;

        current_status = GPIOA_INPUT_VAL & 0x80;
        GPIOA_INT_LEV = (GPIOA_INT_LEV & ~0x80) | (current_status ^ 0x80);

        GPIOA_INT_CLR = (1 << 7);
        GPIOA_INT_EN |= (1 << 7);
        spinlock_unlock(&sd_mtx);
    }
    return 0;
}