From: Jack Lange Date: Tue, 9 Nov 2010 19:24:07 +0000 (-0600) Subject: updated stream API X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=commitdiff_plain;h=24e0221dd2fdcf613cc5e487ec57a30f2fef25e3;p=palacios.git updated stream API --- diff --git a/palacios/include/palacios/vmm_stream.h b/palacios/include/palacios/vmm_stream.h index ce4cb8f..513cf73 100644 --- a/palacios/include/palacios/vmm_stream.h +++ b/palacios/include/palacios/vmm_stream.h @@ -21,54 +21,29 @@ #ifndef __VMM_STREAM_H__ #define __VMM_STREAM_H__ -#include #ifdef __V3VEE__ +#include -#define V3_StreamOpen(path, notify_fn, private_data, mode) \ - ({ \ - extern struct v3_stream_hooks *stream_hooks; \ - ((stream_hooks) && (stream_hooks)->stream_open) ? \ - (stream_hooks)->stream_open((path), (notify_fn), (private_data), (mode)) : NULL; \ - }) - -#define V3_StreamRead(stream, b, l) \ - ({ \ - extern struct v3_stream_hooks *stream_hooks; \ - ((stream_hooks) && (stream_hooks)->stream_read) ? \ - (stream_hooks)->stream_read((stream), (b), (l)) : -1; \ - }) - -#define V3_StreamWrite(stream, b, l) \ - ({ \ - extern struct v3_stream_hooks *stream_hooks; \ - ((stream_hooks) && (stream_hooks)->stream_write) ? \ - (stream_hooks)->stream_write((stream), (b), (l)) : -1; \ - }) - +typedef void * v3_stream_t; -#define V3_StreamClose(stream) \ - ({ \ - extern struct v3_stream_hooks *stream_hooks; \ - ((stream_hooks) && (stream_hooks)->stream_close) ? \ - (stream_hooks)->stream_close((stream), (mode)) : NULL; \ - }) +/* VM Can be NULL */ +v3_stream_t v3_stream_open(struct v3_vm_info * vm, const char * name); +int v3_stream_write(v3_stream_t stream, uint8_t * buf, uint32_t len); +void v3_stream_close(v3_stream_t stream); #endif -#define STREAM_OPEN_MODE_READ (1 << 0) -#define STREAM_OPEN_MODE_WRITE (1 << 1) struct v3_stream_hooks { - void *(*stream_open)(const char *path, void (*notify)(void *), void *private_data, int mode); - int (*stream_read)(void *stream, char *buf, int len); - int (*stream_write)(void *stream, char *buf, int len); - int (*stream_close)(void *stream); + void *(*open)(const char * name, void * private_data); + int (*write)(void * stream, char * buf, int len); + void (*close)(void * stream); }; -extern void V3_Init_Stream(struct v3_stream_hooks * hooks); +void V3_Init_Stream(struct v3_stream_hooks * hooks); #endif diff --git a/palacios/src/palacios/vmm_stream.c b/palacios/src/palacios/vmm_stream.c index 729c661..f9fe479 100644 --- a/palacios/src/palacios/vmm_stream.c +++ b/palacios/src/palacios/vmm_stream.c @@ -18,13 +18,39 @@ */ -#include #include #include #include +#include + +static struct v3_stream_hooks * stream_hooks = NULL; + +// VM can be NULL +v3_stream_t v3_stream_open(struct v3_vm_info * vm, const char * name) { + V3_ASSERT(stream_hooks != NULL); + V3_ASSERT(stream_hooks->open != NULL); + + return stream_hooks->open(name, vm->host_private_data); +} + +int v3_stream_write(v3_stream_t stream, uint8_t * buf, uint32_t len) { + V3_ASSERT(stream_hooks != NULL); + V3_ASSERT(stream_hooks->write != NULL); + + return stream_hooks->write(stream, buf, len); +} + +void v3_stream_close(v3_stream_t stream) { + V3_ASSERT(stream_hooks != NULL); + V3_ASSERT(stream_hooks->close != NULL); + + return stream_hooks->close(stream); +} + + + -struct v3_stream_hooks * stream_hooks = 0; void V3_Init_Stream(struct v3_stream_hooks * hooks) { stream_hooks = hooks;