>> OK, so this means that 
>> 
>>     hdsp_fifo_wait (hdsp, 0, some_count);
>> 
>> is waiting till the FIFO is empty. by contrast, 
>> 
>>     hdsp_fifo_wait (hdsp, 127, some_count);
>> 
>> waits till there is 1 word available in the FIFO, meaning that we can
>> write to it.
>> 
>How is that we can write to it if it is full ?

we never test for it being full. the tests are either for <= 0 (EMPTY)
or <= 127 (at least 1 word available).

>In the case the above question is stupid, and the fifo being full
>meaning we can write to it, we have the following code in
>snd_hdsp_initialize_firmware anyway:
>
>for (i = 0; i < 24413; ++i) {
>       hdsp_write(hdsp, HDSP_fifoData, firmware_ptr[i]);
>       if (hdsp_fifo_wait (hdsp, 127, HDSP_LONG_WAIT)) {
>               snd_printk ("timeout during firmware loading\n");
>               return -EIO;
>       }
>}

yes, but before we enter that loop we checked to make sure that the
FIFO was empty. so the loop is really writing a word, then waiting for
a word to be available.

>> this doesn't help explain why we sometimes fail to see this condition
>> being met. any insights?
>
>Is it really that the condition is not being met ?
>It should gracefully fail. That's what timeouts are for. If the
>condition fails, then the driver should fail to instantiate, and the
>boot process should go on. The problem is that we have a freeze.

i agree. i can't see why it doesn't, unless the LONG_WAIT delays us
for so long that it looks like a freeze ...

--p


-------------------------------------------------------
This SF.net email is sponsored by: Etnus, makers of TotalView, The debugger 
for complex code. Debugging C/C++ programs can leave you feeling lost and 
disoriented. TotalView can help you find your way. Available on major UNIX 
and Linux platforms. Try it free. www.etnus.com
_______________________________________________
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel

Reply via email to