#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 {
#if 0
#define DBG(...) printf(__VA_ARGS__)
#else
-#define DBG(...)
+#define DBG(...) (void) 0
#endif
static inline void
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();
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) {
ao_bufio_unlock();
}
+#if BUFIO_COMMANDS
static void
ao_bufio_test_read(void)
{
{ 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
}