altos: Increase SD card timeout at startup time
[fw/altos] / src / drivers / ao_bufio.c
index 9a5e801ba5830390baaee986774082861b9a3b3a..87de457f96f88539caff1efdc9ef8f00775ed090 100644 (file)
@@ -22,7 +22,7 @@
 #include "ao_sdcard.h"
 #include "ao_bufio.h"
 
-#define AO_NUM_BUF             4
+#define AO_NUM_BUF             16
 #define AO_BUFSIZ              512
 
 struct ao_bufio {
@@ -205,10 +205,13 @@ ao_bufio_get(uint32_t block)
                                bufio->block = 0xffffffff;
                                bufio = NULL;
                        }
-               }
+               } else
+                       ao_panic(AO_PANIC_BUFIO);
        }
        if (bufio) {
                bufio->busy++;
+               if (!bufio->busy)
+                       ao_panic(AO_PANIC_BUFIO);
                buf = ao_bufio_to_buf(bufio);
        }
        ao_bufio_unlock();
@@ -227,6 +230,9 @@ ao_bufio_put(uint8_t *buf, uint8_t write)
        ao_bufio_lock();
        bufio = ao_buf_to_bufio(buf);
        
+       if (!bufio->busy)
+               ao_panic(AO_PANIC_BUFIO);
+
        DBG ("idle buffer %d write %d\n", ao_bufio_to_num(bufio), write);
        bufio->dirty |= write;
        if (!--bufio->busy) {
@@ -286,13 +292,21 @@ static const struct ao_cmds ao_bufio_cmds[] = {
 };
 
 void
-ao_bufio_init(void)
+ao_bufio_setup(void)
 {
        int b;
 
-       for (b = 0; b < AO_NUM_BUF; b++)
+       for (b = 0; b < AO_NUM_BUF; b++) {
+               ao_bufio[b].dirty = 0;
+               ao_bufio[b].busy = 0;
                ao_bufio[b].block = 0xffffffff;
-       ao_sdcard_init();
+       }
+}
 
+void
+ao_bufio_init(void)
+{
+       ao_bufio_setup();
+       ao_sdcard_init();
        ao_cmd_register(&ao_bufio_cmds[0]);
 }