aboutsummaryrefslogtreecommitdiff
path: root/src/components/mem/simple_mem.c
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2023-05-05 23:13:42 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2023-05-05 23:13:42 +0300
commit1a2ff9a1e5b91b7e307246ed2f4b898f1e179806 (patch)
tree6da407851e3b01fadd1ffba64fbdffce71dab68a /src/components/mem/simple_mem.c
parent79f67d5ca820b663e9e5682aaaad07118fdbfad8 (diff)
downloadgran-1a2ff9a1e5b91b7e307246ed2f4b898f1e179806.tar.gz
gran-1a2ff9a1e5b91b7e307246ed2f4b898f1e179806.zip
add async packets
Diffstat (limited to 'src/components/mem/simple_mem.c')
-rw-r--r--src/components/mem/simple_mem.c26
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);
+}