X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fio%2Fkblock_ram.c;h=c89d0c0fa505e3fc1fe4fc8fe2ac6b4b2b5b223b;hb=b7e2d109273eea51248e355f56abb36b0b9018d6;hp=d5ffc9078441cb5d0963e4a49b53ed766a8bff12;hpb=cc570c92300692ce173ad22359f9a02f06f24eae;p=bertos.git diff --git a/bertos/io/kblock_ram.c b/bertos/io/kblock_ram.c index d5ffc907..c89d0c0f 100644 --- a/bertos/io/kblock_ram.c +++ b/bertos/io/kblock_ram.c @@ -26,7 +26,7 @@ * invalidate any other reasons why the executable file might be covered by * the GNU General Public License. * - * Copyright 2009 Develer S.r.l. (http://www.develer.com/) + * Copyright 2010 Develer S.r.l. (http://www.develer.com/) * * --> * @@ -40,63 +40,59 @@ #include -int kblockram_load(KBlock *b, block_idx_t index) +static int kblockram_load(KBlock *b, block_idx_t index) { KBlockRam *r = KBLOCKRAM_CAST(b); - memcpy(r->b.priv.pagebuf, r->membuf + index * r->b.blk_size, r->b.blk_size); + memcpy(r->pagebuf, r->membuf + index * r->b.blk_size, r->b.blk_size); return 0; } -int kblockram_store(struct KBlock *b, block_idx_t index) +static int kblockram_store(struct KBlock *b, block_idx_t index) { KBlockRam *r = KBLOCKRAM_CAST(b); - memcpy(r->membuf + index * r->b.blk_size, r->b.priv.pagebuf, r->b.blk_size); + memcpy(r->membuf + index * r->b.blk_size, r->pagebuf, r->b.blk_size); return 0; } -size_t kblockram_readBuf(struct KBlock *b, void *buf, size_t offset, size_t size) +static size_t kblockram_readBuf(struct KBlock *b, void *buf, size_t offset, size_t size) { KBlockRam *r = KBLOCKRAM_CAST(b); - memcpy(buf, (uint8_t *)r->b.priv.pagebuf + offset, size); + memcpy(buf, r->pagebuf + offset, size); return size; } -size_t kblockram_writeBuf(struct KBlock *b, const void *buf, size_t offset, size_t size) +static size_t kblockram_readDirect(struct KBlock *b, block_idx_t index, void *buf, size_t offset, size_t size) { KBlockRam *r = KBLOCKRAM_CAST(b); - memcpy((uint8_t *)r->b.priv.pagebuf + offset, buf, size); + memcpy(buf, r->membuf + index * r->b.blk_size + offset, size); return size; } -void * kblockram_map(struct KBlock *b, size_t offset, UNUSED_ARG(size_t, size)) +static size_t kblockram_writeBuf(struct KBlock *b, const void *buf, size_t offset, size_t size) { - return (uint8_t *)b->priv.pagebuf + offset; -} - - -int kblockram_unmap(UNUSED_ARG(struct KBlock *, b), UNUSED_ARG(size_t, offset), UNUSED_ARG(size_t, size)) -{ - return 0; + KBlockRam *r = KBLOCKRAM_CAST(b); + memcpy(r->pagebuf + offset, buf, size); + return size; } -int kblockram_error(struct KBlock *b) +static int kblockram_error(struct KBlock *b) { return b->priv.flags; } -int kblockram_dummy(UNUSED_ARG(struct KBlock *,b)) +static int kblockram_dummy(UNUSED_ARG(struct KBlock *,b)) { return 0; } -static const KBlockVTable kblockram_vt = +static KBlockVTable kblockram_vt = { + .readDirect = kblockram_readDirect, .readBuf = kblockram_readBuf, .writeBuf = kblockram_writeBuf, .load = kblockram_load, .store = kblockram_store, - .map = kblockram_map, - .unmap = kblockram_unmap, + .error = kblockram_error, .clearerr = kblockram_dummy, .close = kblockram_dummy, @@ -109,13 +105,13 @@ void kblockram_init(KBlockRam *ram, void *buf, size_t size, size_t block_size) ASSERT(block_size); memset(ram, 0, sizeof(*ram)); - + + DB(ram->b.priv.type = KBT_KBLOCKRAM); + // First page used as page buffer ram->b.blk_cnt = (size / block_size) - 1; - ram->b.priv.pagebuf = buf; - ram->b.priv.pagebuf_size = block_size; - + ram->pagebuf = (uint8_t *)buf; ram->membuf = (uint8_t *)buf + block_size; - ram->b.blk_size = block_size; - ram->b.vt = &kblockram_vt; + ram->b.blk_size = block_size; + ram->b.priv.vt = &kblockram_vt; }