1/* Modules Definitions
2**
3** Distributed under the terms of the MIT License.
4*/
5
6#ifndef _FSSH_MODULE_H
7#define _FSSH_MODULE_H
8
9
10#include "fssh_os.h"
11
12
13/* Every module exports a list of module_info structures.
14 * It defines the interface of the module and the name
15 * that is used to access the interface.
16 */
17
18typedef struct fssh_module_info {
19	const char		*name;
20	uint32_t		flags;
21	fssh_status_t	(*std_ops)(int32_t, ...);
22} fssh_module_info;
23
24/* module standard operations */
25#define	FSSH_B_MODULE_INIT		1
26#define	FSSH_B_MODULE_UNINIT	2
27
28/* module flags */
29#define	FSSH_B_KEEP_LOADED	0x00000001
30
31
32/* Use the module_dependency structure to let the
33 * kernel automatically load modules yet depend on
34 * before B_MODULE_INIT is called.
35 */
36
37typedef struct fssh_module_dependency {
38	const char			*name;
39	fssh_module_info	**info;
40} fssh_module_dependency;
41
42
43#ifdef __cplusplus
44extern "C" {
45#endif
46
47extern fssh_status_t	fssh_get_module(const char *path,
48								fssh_module_info **_info);
49extern fssh_status_t	fssh_put_module(const char *path);
50
51#ifdef __cplusplus
52}
53#endif
54
55#endif	/* _FSSH_MODULE_H */
56