1/*
2 * Copyright 2002-2008, Haiku Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _MODULE_H
6#define _MODULE_H
7
8
9#include <OS.h>
10
11
12/* Every module exports a list of module_info structures.
13 * It defines the interface of the module and the name
14 * that is used to access the interface.
15 */
16
17typedef struct module_info {
18	const char	*name;
19	uint32		flags;
20	status_t	(*std_ops)(int32, ...);
21} module_info;
22
23/* module standard operations */
24#define	B_MODULE_INIT	1
25#define	B_MODULE_UNINIT	2
26
27/* module flags */
28#define	B_KEEP_LOADED	0x00000001
29
30
31/* Use the module_dependency structure to let the
32 * kernel automatically load modules yet depend on
33 * before B_MODULE_INIT is called.
34 */
35
36typedef struct module_dependency {
37	const char	*name;
38	module_info	**info;
39} module_dependency;
40
41
42#ifdef __cplusplus
43extern "C" {
44#endif
45
46extern status_t get_module(const char *path, module_info **_info);
47extern status_t put_module(const char *path);
48extern status_t get_next_loaded_module_name(uint32 *cookie, char *buffer,
49	size_t *_bufferSize);
50extern void *open_module_list_etc(const char *prefix, const char *suffix);
51extern void *open_module_list(const char *prefix);
52extern status_t close_module_list(void *cookie);
53extern status_t read_next_module_name(void *cookie, char *buffer,
54	size_t *_bufferSize);
55
56#ifdef __cplusplus
57}
58#endif
59
60#endif	/* _MODULE_H */
61