adjust exec_param to keep track of sp_el0, fix incorrect use sys regs
[lunaix-os.git] / lunaix-os / includes / lunaix / fs / twifs.h
1 #ifndef __LUNAIX_TWIFS_H
2 #define __LUNAIX_TWIFS_H
3
4 #include <lunaix/ds/ldga.h>
5 #include <lunaix/fs.h>
6 #include <lunaix/fs/twimap.h>
7 #include <lunaix/spike.h>
8
9 struct twifs_node
10 {
11     struct hstr name;
12     inode_t ino_id;
13     void* data;
14     u32_t itype;
15     char name_val[VFS_NAME_MAXLEN];
16     struct llist_header children;
17     struct llist_header siblings;
18     struct
19     {
20         int (*write)(struct v_inode* inode,
21                      void* buffer,
22                      size_t len,
23                      size_t fpos);
24         int (*read)(struct v_inode* inode,
25                     void* buffer,
26                     size_t len,
27                     size_t fpos);
28     } ops;
29 };
30
31 #define twinode_getdata(inode, type)                                           \
32     ({                                                                         \
33         struct twifs_node* twinode = (struct twifs_node*)(inode)->data;        \
34         assert(twinode);                                                       \
35         (type) twinode->data;                                                  \
36     })
37
38 #define EXPORT_TWIFS_PLUGIN(label, plg_init)                                   \
39     export_ldga_el(twiplugin_inits, label, ptr_t, plg_init)
40
41 void
42 twifs_register_plugins();
43
44 void
45 twifs_init();
46
47 struct twifs_node*
48 twifs_file_node_vargs(struct twifs_node* parent, const char* fmt, va_list args);
49
50 struct twifs_node*
51 twifs_file_node(struct twifs_node* parent, const char* fmt, ...);
52
53 struct twifs_node*
54 twifs_dir_node(struct twifs_node* parent, const char* fmt, ...);
55
56 int
57 twifs_rm_node(struct twifs_node* node);
58
59 struct twimap*
60 twifs_mapping(struct twifs_node* parent, void* data, const char* fmt, ...);
61
62 #define twimap_entry_simple(parent, name, data, read_cb)                       \
63     ({                                                                         \
64         struct twimap* map = twifs_mapping((parent), (data), (name));          \
65         map->read = (read_cb);                                                 \
66         map;                                                                   \
67     })
68
69 #endif /* __LUNAIX_TWIFS_H */