diff options
Diffstat (limited to 'src/components/mem/simple_mem.c')
| -rw-r--r-- | src/components/mem/simple_mem.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/src/components/mem/simple_mem.c b/src/components/mem/simple_mem.c index db2632a..80bddf3 100644 --- a/src/components/mem/simple_mem.c +++ b/src/components/mem/simple_mem.c @@ -12,29 +12,29 @@ struct simple_mem { char buf[]; }; -static stat simple_mem_write(struct simple_mem *mem, uintptr_t addr, - size_t size, char *buf) +static stat simple_mem_write(struct simple_mem *mem, struct packet *pkt) { - uintptr_t offset = addr % mem->size; - if (offset + size > mem->size) { + uintptr_t offset = packet_addr(pkt) % mem->size; + if (offset + packet_size(pkt) > mem->size) { error("write outside memory"); return ESIZE; } - memcpy(mem->buf + offset, buf, size); + memcpy(mem->buf + offset, packet_data(pkt), packet_size(pkt)); + packet_set_state(pkt, PACKET_DONE); return OK; } -static stat simple_mem_read(struct simple_mem *mem, uintptr_t addr, size_t size, - char *buf) +static stat simple_mem_read(struct simple_mem *mem, struct packet *pkt) { - uintptr_t offset = addr % mem->size; - if (offset + size > mem->size) { + uintptr_t offset = packet_addr(pkt) % mem->size; + if (offset + packet_size(pkt) > mem->size) { error("read outside memory"); return ESIZE; } - memcpy(buf, mem->buf + offset, size); + memcpy(packet_data(pkt), mem->buf + offset, packet_size(pkt)); + packet_set_state(pkt, PACKET_DONE); return OK; } @@ -49,3 +49,9 @@ struct component *create_simple_mem(size_t size) new->component.read = (read_callback)simple_mem_read; return (struct component *)new; } + +void init_simple_mem(struct component *m, uintptr_t addr, size_t size, void *data) +{ + struct simple_mem *mem = (struct simple_mem *)m; + memcpy(mem->buf + addr, data, size); +} |
