altos: Don't include bufio debug commands by default
[fw/altos] / src / drivers / ao_bufio.c
index 9a5e801ba5830390baaee986774082861b9a3b3a..c0fe604a8784943b3bc4033ca2aaa71fdc07c9f9 100644 (file)
 #include "ao.h"
 #endif
 
+/* Include bufio commands */
+#ifndef AO_FAT_TEST
+#define BUFIO_COMMANDS 0
+#endif
+
 #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 +210,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 +235,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) {
@@ -262,6 +273,7 @@ ao_bufio_flush(void)
        ao_bufio_unlock();
 }
 
+#if BUFIO_COMMANDS
 static void
 ao_bufio_test_read(void)
 {
@@ -284,15 +296,26 @@ static const struct ao_cmds ao_bufio_cmds[] = {
        { ao_bufio_test_read,   "q\0Test bufio read" },
        { 0, NULL },
 };
+#endif
 
 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();
+#if BUFIO_COMMANDS
        ao_cmd_register(&ao_bufio_cmds[0]);
+#endif
 }