2 * This file is part of the Palacios Virtual Machine Monitor developed
3 * by the V3VEE Project with funding from the United States National
4 * Science Foundation and the Department of Energy.
6 * The V3VEE Project is a joint project between Northwestern University
7 * and the University of New Mexico. You can find out more at
10 * Copyright (c) 2010, Peter Dinda (pdinda@northwestern.edu>
11 * Copyright (c) 2010, The V3VEE Project <http://www.v3vee.org>
12 * All rights reserved.
14 * Author: Peter Dinda <pdinda@northwestern.edu>
16 * This is free software. You are permitted to use,
17 * redistribute, and modify it as specified in the file "V3VEE_LICENSE".
21 #ifndef __VMM_STREAM_H__
22 #define __VMM_STREAM_H__
24 #include <palacios/vmm.h>
29 #define V3_StreamOpen(path, notify_fn, private_data, mode) \
31 extern struct v3_stream_hooks *stream_hooks; \
32 ((stream_hooks) && (stream_hooks)->stream_open) ? \
33 (stream_hooks)->stream_open((path), (notify_fn), (private_data), (mode)) : NULL; \
36 #define V3_StreamRead(stream, b, l) \
38 extern struct v3_stream_hooks *stream_hooks; \
39 ((stream_hooks) && (stream_hooks)->stream_read) ? \
40 (stream_hooks)->stream_read((stream), (b), (l)) : -1; \
43 #define V3_StreamWrite(stream, b, l) \
45 extern struct v3_stream_hooks *stream_hooks; \
46 ((stream_hooks) && (stream_hooks)->stream_write) ? \
47 (stream_hooks)->stream_write((stream), (b), (l)) : -1; \
51 #define V3_StreamClose(stream) \
53 extern struct v3_stream_hooks *stream_hooks; \
54 ((stream_hooks) && (stream_hooks)->stream_close) ? \
55 (stream_hooks)->stream_close((stream), (mode)) : NULL; \
61 #define STREAM_OPEN_MODE_READ (1 << 0)
62 #define STREAM_OPEN_MODE_WRITE (1 << 1)
64 struct v3_stream_hooks {
65 void *(*stream_open)(const char *path, void (*notify)(void *), void *private_data, int mode);
66 int (*stream_read)(void *stream, char *buf, int len);
67 int (*stream_write)(void *stream, char *buf, int len);
68 int (*stream_close)(void *stream);
72 extern void V3_Init_Stream(struct v3_stream_hooks * hooks);