xref: /openbmc/qemu/hw/9pfs/9p-synth.h (revision 364031f17932814484657e5551ba12957d993d7e)
1*364031f1SWei Liu /*
2*364031f1SWei Liu  * 9p
3*364031f1SWei Liu  *
4*364031f1SWei Liu  * Copyright IBM, Corp. 2011
5*364031f1SWei Liu  *
6*364031f1SWei Liu  * Authors:
7*364031f1SWei Liu  *  Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
8*364031f1SWei Liu  *
9*364031f1SWei Liu  * This work is licensed under the terms of the GNU GPL, version 2.  See
10*364031f1SWei Liu  * the COPYING file in the top-level directory.
11*364031f1SWei Liu  *
12*364031f1SWei Liu  */
13*364031f1SWei Liu #ifndef HW_9PFS_SYNTH_H
14*364031f1SWei Liu #define HW_9PFS_SYNTH_H 1
15*364031f1SWei Liu 
16*364031f1SWei Liu #include <unistd.h>
17*364031f1SWei Liu #include <sys/types.h>
18*364031f1SWei Liu #include <limits.h>
19*364031f1SWei Liu 
20*364031f1SWei Liu typedef struct V9fsSynthNode V9fsSynthNode;
21*364031f1SWei Liu typedef ssize_t (*v9fs_synth_read)(void *buf, int len, off_t offset,
22*364031f1SWei Liu                                    void *arg);
23*364031f1SWei Liu typedef ssize_t (*v9fs_synth_write)(void *buf, int len, off_t offset,
24*364031f1SWei Liu                                     void *arg);
25*364031f1SWei Liu typedef struct V9fsSynthNodeAttr {
26*364031f1SWei Liu     int mode;
27*364031f1SWei Liu     int inode;
28*364031f1SWei Liu     int nlink;
29*364031f1SWei Liu     v9fs_synth_read read;
30*364031f1SWei Liu     v9fs_synth_write write;
31*364031f1SWei Liu } V9fsSynthNodeAttr;
32*364031f1SWei Liu 
33*364031f1SWei Liu struct V9fsSynthNode {
34*364031f1SWei Liu     QLIST_HEAD(, V9fsSynthNode) child;
35*364031f1SWei Liu     QLIST_ENTRY(V9fsSynthNode) sibling;
36*364031f1SWei Liu     char name[NAME_MAX];
37*364031f1SWei Liu     V9fsSynthNodeAttr *attr;
38*364031f1SWei Liu     V9fsSynthNodeAttr actual_attr;
39*364031f1SWei Liu     void *private;
40*364031f1SWei Liu     int open_count;
41*364031f1SWei Liu };
42*364031f1SWei Liu 
43*364031f1SWei Liu typedef struct V9fsSynthOpenState {
44*364031f1SWei Liu     off_t offset;
45*364031f1SWei Liu     V9fsSynthNode *node;
46*364031f1SWei Liu } V9fsSynthOpenState;
47*364031f1SWei Liu 
48*364031f1SWei Liu extern int qemu_v9fs_synth_mkdir(V9fsSynthNode *parent, int mode,
49*364031f1SWei Liu                                  const char *name, V9fsSynthNode **result);
50*364031f1SWei Liu extern int qemu_v9fs_synth_add_file(V9fsSynthNode *parent, int mode,
51*364031f1SWei Liu                                     const char *name, v9fs_synth_read read,
52*364031f1SWei Liu                                     v9fs_synth_write write, void *arg);
53*364031f1SWei Liu 
54*364031f1SWei Liu #endif
55