source: mainline/uspace/lib/fs/libfs.h@ cd1e3fc0

Last change on this file since cd1e3fc0 was d7f7a4a, checked in by Jiří Zárevúcky <zarevucky.jiri@…>, 4 years ago

Replace some license headers with SPDX identifier

Headers are replaced using tools/transorm-copyright.sh only
when it can be matched verbatim with the license header used
throughout most of the codebase.

  • Property mode set to 100644
File size: 2.5 KB
Line 
1/*
2 * SPDX-FileCopyrightText: 2009 Jakub Jermar
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7/** @addtogroup libfs
8 * @{
9 */
10/**
11 * @file
12 */
13
14#ifndef LIBFS_LIBFS_H_
15#define LIBFS_LIBFS_H_
16
17#include <ipc/vfs.h>
18#include <offset.h>
19#include <async.h>
20#include <loc.h>
21
22typedef struct {
23 errno_t (*fsprobe)(service_id_t, vfs_fs_probe_info_t *);
24 errno_t (*mounted)(service_id_t, const char *, fs_index_t *, aoff64_t *);
25 errno_t (*unmounted)(service_id_t);
26 errno_t (*read)(service_id_t, fs_index_t, aoff64_t, size_t *);
27 errno_t (*write)(service_id_t, fs_index_t, aoff64_t, size_t *,
28 aoff64_t *);
29 errno_t (*truncate)(service_id_t, fs_index_t, aoff64_t);
30 errno_t (*close)(service_id_t, fs_index_t);
31 errno_t (*destroy)(service_id_t, fs_index_t);
32 errno_t (*sync)(service_id_t, fs_index_t);
33} vfs_out_ops_t;
34
35typedef struct {
36 void *data; /**< Data of the file system implementation. */
37} fs_node_t;
38
39typedef struct {
40 /*
41 * The first set of methods are functions that return an integer error
42 * code. If some additional return value is to be returned, the first
43 * argument holds the output argument.
44 */
45 errno_t (*root_get)(fs_node_t **, service_id_t);
46 errno_t (*match)(fs_node_t **, fs_node_t *, const char *);
47 errno_t (*node_get)(fs_node_t **, service_id_t, fs_index_t);
48 errno_t (*node_open)(fs_node_t *);
49 errno_t (*node_put)(fs_node_t *);
50 errno_t (*create)(fs_node_t **, service_id_t, int);
51 errno_t (*destroy)(fs_node_t *);
52 errno_t (*link)(fs_node_t *, fs_node_t *, const char *);
53 errno_t (*unlink)(fs_node_t *, fs_node_t *, const char *);
54 errno_t (*has_children)(bool *, fs_node_t *);
55 /*
56 * The second set of methods are usually mere getters that do not
57 * return an integer error code.
58 */
59 fs_index_t (*index_get)(fs_node_t *);
60 aoff64_t (*size_get)(fs_node_t *);
61 unsigned int (*lnkcnt_get)(fs_node_t *);
62 bool (*is_directory)(fs_node_t *);
63 bool (*is_file)(fs_node_t *);
64 service_id_t (*service_get)(fs_node_t *);
65 errno_t (*size_block)(service_id_t, uint32_t *);
66 errno_t (*total_block_count)(service_id_t, uint64_t *);
67 errno_t (*free_block_count)(service_id_t, uint64_t *);
68} libfs_ops_t;
69
70typedef struct {
71 int fs_handle; /**< File system handle. */
72 uint8_t *plb_ro; /**< Read-only PLB view. */
73} fs_reg_t;
74
75extern errno_t fs_register(async_sess_t *, vfs_info_t *, vfs_out_ops_t *,
76 libfs_ops_t *);
77
78extern void fs_node_initialize(fs_node_t *);
79
80extern errno_t fs_instance_create(service_id_t, void *);
81extern errno_t fs_instance_get(service_id_t, void **);
82extern errno_t fs_instance_destroy(service_id_t);
83
84#endif
85
86/** @}
87 */
Note: See TracBrowser for help on using the repository browser.