VSF Documented
vsf_malfs.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#ifndef __VSF_MALFS_H__
19#define __VSF_MALFS_H__
20
21/*============================ INCLUDES ======================================*/
22
23#include "../../vsf_fs_cfg.h"
24
25#if VSF_USE_FS == ENABLED && VSF_FS_USE_MALFS == ENABLED
26
28
29#undef public_const
30#if defined(__VSF_MALFS_CLASS_IMPLEMENT)
31# undef __VSF_MALFS_CLASS_IMPLEMENT
32# define __VSF_CLASS_IMPLEMENT__
33# define public_const
34#elif defined(__VSF_MALFS_CLASS_INHERIT__)
35# undef __VSF_MALFS_CLASS_INHERIT__
36# define __VSF_CLASS_INHERIT__
37# define public_const
38#else
39# define public_const const
40#endif
41
42#include "utilities/ooc_class.h"
43
44#ifdef __cplusplus
45extern "C" {
46#endif
47
48/*============================ MACROS ========================================*/
49
50// for deprecated API compatiblity
51#define vk_malfs_mount_mbr vk_malfs_mount
52
53#define __implement_malfs_cache(__size, __number) \
54 __vk_malfs_cache_node_t __cache_nodes[__number]; \
55 uint8_t __buffer[__size * __number];
56
57/*============================ MACROFIED FUNCTIONS ===========================*/
58/*============================ TYPES =========================================*/
59
64
71
73 public_member(
74 uint16_t number;
76 )
77
78 private_member(
80 )
81};
82
84 public_member(
85 implement(vk_file_t)
86 void *info;
87 )
88};
89
90// memory layout:
91// |-------------------------------|
92// | __vk_malfs_info_t |
93// |-------------------------------|
94// | __vk_malfs_cache_node_t[num] |
95// |-------------------------------|
96// | cache_buffer[num] |
97// |-------------------------------|
99 public_member(
100 vk_mal_t *mal;
101 uint32_t block_size;
102 __vk_malfs_cache_t cache;
104
105 protected_member(
107 // total control block is only used by vk_malfs_mount
108 // and will be freed by __vk_malfs_unmount
109 void *total_cb;
110#endif
111 char *volume_name;
112 )
113};
114
115#if VSF_USE_HEAP == ENABLED
117 public_member(
118 vk_mal_t *mal;
119#if VSF_KERNEL_CFG_SUPPORT_SYNC == ENABLED
120 // set mutex if there is multiple volume in mal
122#endif
123 vk_file_t *dir;
125 public_const uint8_t partition_mounted;
127};
128#endif
129
130/*============================ GLOBAL VARIABLES ==============================*/
131/*============================ PROTOTYPES ====================================*/
132
133extern void __vk_malfs_init(__vk_malfs_info_t *info);
135// read/write/get_cache will lock/unlock automatically
139extern void __vk_malfs_unmount(__vk_malfs_info_t *info);
140
141#if VSF_USE_HEAP == ENABLED
142// user should set the mal and root in mounter, then call vk_malfs_mount and wait VSF_EVT_RETURN,
143// then check err and partition_mounted in mounter
145#endif
146
147#ifdef __cplusplus
148}
149#endif
150
151#endif // VSF_USE_FS && VSF_FS_USE_MALFS
152#endif // __VSF_MALFS_H__
#define ENABLED
Definition __type.h:28
vsf_err_t
Definition __type.h:42
Definition vsf_malfs.h:72
Definition vsf_malfs.h:83
Definition vsf_malfs.h:98
Definition vsf_fs.h:114
mal class
Definition vsf_mal.h:154
Definition vsf_malfs.h:116
Definition vsf_eda.h:892
#define vsf_dcl_class
Definition ooc_class.h:46
#define vsf_class(__name)
Definition ooc_class.h:48
unsigned short uint16_t
Definition stdint.h:7
unsigned uint32_t
Definition stdint.h:9
unsigned int uint_fast32_t
Definition stdint.h:27
unsigned long long uint64_t
Definition stdint.h:11
unsigned long long uint_fast64_t
Definition stdint.h:29
unsigned char uint8_t
Definition stdint.h:5
Definition vsf_malfs.h:65
uint32_t is_alloced
Definition vsf_malfs.h:69
uint64_t block_addr
Definition vsf_malfs.h:66
uint32_t is_dirty
Definition vsf_malfs.h:68
uint32_t access_time_sec
Definition vsf_malfs.h:67
Definition mutex.h:10
void __vk_malfs_cache_init(__vk_malfs_info_t *info, __vk_malfs_cache_t *cache)
Definition vsf_malfs.c:158
vsf_err_t __vk_malfs_alloc_cache(__vk_malfs_info_t *info, __vk_malfs_cache_t *cache, uint_fast64_t block_addr)
Definition vsf_malfs.c:284
#define public_const
Definition vsf_malfs.h:39
void __vk_malfs_unmount(__vk_malfs_info_t *info)
Definition vsf_malfs.c:312
vsf_err_t __vk_malfs_read(__vk_malfs_info_t *info, uint_fast64_t block_addr, uint_fast32_t block_num, uint8_t *buff)
Definition vsf_malfs.c:293
vsf_err_t __vk_malfs_write(__vk_malfs_info_t *info, uint_fast64_t block_addr, uint_fast32_t block_num, uint8_t *buff)
Definition vsf_malfs.c:305
void __vk_malfs_init(__vk_malfs_info_t *info)
Definition vsf_malfs.c:146
vsf_err_t vk_malfs_mount(vk_malfs_mounter_t *mounter)
Definition vsf_malfs.c:608
uint8_t * buff
Definition vsf_memfs.h:51
#define VSF_USE_HEAP
Definition vsf_service_cfg.h:35