update DI disc code
[libogc.git] / libogc / sdgecko_buf.c
blob5ecec1feda2ce4054ccbbfd68fe6412dc7f17c35
1 #include <stdio.h>
2 #include <string.h>
4 #include "card_cmn.h"
5 #include "card_buf.h"
7 //#define _POOLBUFFER_DEBUG
9 #define BUF_POOL_CNT 3
11 typedef struct _buf_node {
12 struct _buf_node *next;
13 u8 data[SECTOR_SIZE+2];
15 } BufNode;
17 static BufNode s_buf[BUF_POOL_CNT];
18 static BufNode *s_freepool;
20 void sdgecko_initBufferPool()
22 u32 i;
23 #ifdef _POOLBUFFER_DEBUG
24 printf("card_initBufferPool()\n");
25 #endif
26 for(i=0;i<BUF_POOL_CNT-1;++i) {
27 s_buf[i].next = s_buf+i+1;
29 s_buf[i].next = NULL;
30 s_freepool = s_buf;
33 u8* sdgecko_allocBuffer()
35 u8 *buf = NULL;
37 if(s_freepool) {
38 buf = s_freepool->data;
39 s_freepool = s_freepool->next;
42 return buf;
45 void sdgecko_freeBuffer(u8 *buf)
47 if(buf) {
48 BufNode *node = (BufNode*)(buf-offsetof(BufNode,data));
49 node->next = s_freepool;
50 s_freepool = node;