From: Jack Lange Date: Thu, 5 Aug 2010 18:48:46 +0000 (-0500) Subject: File support added (interface to file support in host) X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=commitdiff_plain;h=b25296b8b79d1964be81a4ebfa8262d4ca36a63f;p=palacios.git File support added (interface to file support in host) Conflicts: Kconfig --- diff --git a/palacios/include/palacios/vmm_file.h b/palacios/include/palacios/vmm_file.h new file mode 100644 index 0000000..ea8dd97 --- /dev/null +++ b/palacios/include/palacios/vmm_file.h @@ -0,0 +1,86 @@ +/* + * This file is part of the Palacios Virtual Machine Monitor developed + * by the V3VEE Project with funding from the United States National + * Science Foundation and the Department of Energy. + * + * The V3VEE Project is a joint project between Northwestern University + * and the University of New Mexico. You can find out more at + * http://www.v3vee.org + * + * Copyright (c) 2010, Peter Dinda (pdinda@cs.northwestern.edu> + * Copyright (c) 2010, The V3VEE Project + * All rights reserved. + * + * Author: Peter Dinda + * + * This is free software. You are permitted to use, + * redistribute, and modify it as specified in the file "V3VEE_LICENSE". + */ + + +#ifndef __VMM_FILE_H__ +#define __VMM_FILE_H__ + +#include + + +#ifdef __V3VEE__ + +#define V3_FileOpen(path, mode) \ + ({ \ + extern struct v3_file_hooks *file_hooks; \ + ((file_hooks) && (file_hooks)->file_open) ? \ + (file_hooks)->file_open((path), (mode)) : -1 ; \ + }) + +#define V3_FileClose(fd) \ + ({ \ + extern struct v3_file_hooks *file_hooks; \ + ((file_hooks) && (file_hooks)->file_close) ? \ + (file_hooks)->file_close((fd)) : -1 ; \ + }) + +#define V3_FileSize(fd) \ + ({ \ + extern struct v3_file_hooks *file_hooks; \ + ((file_hooks) && (file_hooks)->file_size) ? \ + (file_hooks)->file_size((fd)) : -1 ; \ + }) + +#define V3_FileRead(fd,start,buf,len) \ + ({ \ + extern struct v3_file_hooks *file_hooks; \ + ((file_hooks) && (file_hooks)->file_read) ? \ + (file_hooks)->file_read((fd),(start),(buf),(length)) : -1 ; \ + }) + +#define V3_FileWrite(fd,start,buf,len) \ + ({ \ + extern struct v3_file_hooks *file_hooks; \ + ((file_hooks) && (file_hooks)->file_write) ? \ + (file_hooks)->file_write((fd),(start),(buf),(length)) : -1 ; \ + }) + + +#endif + +#define FILE_OPEN_MODE_READ (1 << 0) +#define FILE_OPEN_MODE_WRITE (1 << 1) + +struct v3_file_hooks { + + int (*file_open)(const char *path, int mode); + int (*file_close)(int fd); + + long long (*file_size)(int fd); + + // blocking reads and writes + long long (*file_read)(int fd, long long start, void *buffer, long long length); + long long (*file_write)(int fd, long long start, void *buffer, long long length); + +}; + + +extern void V3_Init_File(struct v3_file_hooks * hooks); + +#endif diff --git a/palacios/src/palacios/Makefile b/palacios/src/palacios/Makefile index 2d2eda8..52497e1 100644 --- a/palacios/src/palacios/Makefile +++ b/palacios/src/palacios/Makefile @@ -60,8 +60,9 @@ obj-$(CONFIG_VMX) += vmx.o \ obj-$(CONFIG_INSTRUMENT_VMM) += vmm_instrument.o obj-$(CONFIG_TELEMETRY) += vmm_telemetry.o obj-$(CONFIG_SOCKET) += vmm_socket.o -obj-$(CONFIG_CONSOLE) += vmm_console.o obj-$(CONFIG_VNET) += vmm_vnet.o +obj-$(CONFIG_FILE) += vmm_file.o + obj-$(CONFIG_SYMBIOTIC) += vmm_symbiotic.o vmm_symspy.o obj-$(CONFIG_SYMCALL) += vmm_symcall.o diff --git a/palacios/src/palacios/vmm_file.c b/palacios/src/palacios/vmm_file.c new file mode 100644 index 0000000..ada9972 --- /dev/null +++ b/palacios/src/palacios/vmm_file.c @@ -0,0 +1,34 @@ +/* + * This file is part of the Palacios Virtual Machine Monitor developed + * by the V3VEE Project with funding from the United States National + * Science Foundation and the Department of Energy. + * + * The V3VEE Project is a joint project between Northwestern University + * and the University of New Mexico. You can find out more at + * http://www.v3vee.org + * + * Copyright (c) 2010, Peter Dinda + * Copyright (c) 2010, The V3VEE Project + * All rights reserved. + * + * Author: Peter Dinda + * + * This is free software. You are permitted to use, + * redistribute, and modify it as specified in the file "V3VEE_LICENSE". + */ + + +#include +#include +#include +#include + + +struct v3_file_hooks * file_hooks = 0; + +void V3_Init_File(struct v3_file_hooks * hooks) { + file_hooks = hooks; + PrintDebug("V3 file access inited\n"); + + return; +}