|  | /* | 
|  | * Virtio 9p | 
|  | * | 
|  | * Copyright IBM, Corp. 2011 | 
|  | * | 
|  | * Authors: | 
|  | *  Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> | 
|  | * | 
|  | * This work is licensed under the terms of the GNU GPL, version 2.  See | 
|  | * the COPYING file in the top-level directory. | 
|  | * | 
|  | */ | 
|  | #ifndef HW_9PFS_VIRTIO9P_SYNTH_H | 
|  | #define HW_9PFS_VIRTIO9P_SYNTH_H 1 | 
|  |  | 
|  | #include <unistd.h> | 
|  | #include <sys/types.h> | 
|  | #include <limits.h> | 
|  |  | 
|  | typedef struct V9fsSynthNode V9fsSynthNode; | 
|  | typedef ssize_t (*v9fs_synth_read)(void *buf, int len, off_t offset, | 
|  | void *arg); | 
|  | typedef ssize_t (*v9fs_synth_write)(void *buf, int len, off_t offset, | 
|  | void *arg); | 
|  | typedef struct V9fsSynthNodeAttr { | 
|  | int mode; | 
|  | int inode; | 
|  | int nlink; | 
|  | v9fs_synth_read read; | 
|  | v9fs_synth_write write; | 
|  | } V9fsSynthNodeAttr; | 
|  |  | 
|  | struct V9fsSynthNode { | 
|  | QLIST_HEAD(, V9fsSynthNode) child; | 
|  | QLIST_ENTRY(V9fsSynthNode) sibling; | 
|  | char name[NAME_MAX]; | 
|  | V9fsSynthNodeAttr *attr; | 
|  | V9fsSynthNodeAttr actual_attr; | 
|  | void *private; | 
|  | int open_count; | 
|  | }; | 
|  |  | 
|  | typedef struct V9fsSynthOpenState { | 
|  | off_t offset; | 
|  | V9fsSynthNode *node; | 
|  | } V9fsSynthOpenState; | 
|  |  | 
|  | extern int qemu_v9fs_synth_mkdir(V9fsSynthNode *parent, int mode, | 
|  | const char *name, V9fsSynthNode **result); | 
|  | extern int qemu_v9fs_synth_add_file(V9fsSynthNode *parent, int mode, | 
|  | const char *name, v9fs_synth_read read, | 
|  | v9fs_synth_write write, void *arg); | 
|  |  | 
|  | #endif |