]>
Commit | Line | Data |
---|---|---|
586fc304 LDM |
1 | /* |
2 | * libkmod - interface to kernel module operations | |
3 | * | |
4 | * Copyright (C) 2011 ProFUSION embedded systems | |
586fc304 LDM |
5 | * |
6 | * This library is free software; you can redistribute it and/or | |
7 | * modify it under the terms of the GNU Lesser General Public | |
cb451f35 LDM |
8 | * License as published by the Free Software Foundation; either |
9 | * version 2.1 of the License, or (at your option) any later version. | |
586fc304 LDM |
10 | * |
11 | * This library is distributed in the hope that it will be useful, | |
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
14 | * Lesser General Public License for more details. | |
15 | * | |
16 | * You should have received a copy of the GNU Lesser General Public | |
17 | * License along with this library; if not, write to the Free Software | |
18 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |
19 | */ | |
20 | ||
6ad98307 LDM |
21 | #ifndef _LIBKMOD_H_ |
22 | #define _LIBKMOD_H_ | |
586fc304 | 23 | |
6806a043 | 24 | #include <fcntl.h> |
586fc304 | 25 | #include <stdarg.h> |
5369797d | 26 | #include <inttypes.h> |
586fc304 LDM |
27 | |
28 | #ifdef __cplusplus | |
29 | extern "C" { | |
30 | #endif | |
31 | ||
32 | /* | |
33 | * kmod_ctx | |
34 | * | |
35 | * library user context - reads the config and system | |
36 | * environment, user variables, allows custom logging | |
37 | */ | |
38 | struct kmod_ctx; | |
cb8d4d3e | 39 | struct kmod_ctx *kmod_new(const char *dirname, const char * const *config_dirs); |
586fc304 LDM |
40 | struct kmod_ctx *kmod_ref(struct kmod_ctx *ctx); |
41 | struct kmod_ctx *kmod_unref(struct kmod_ctx *ctx); | |
586fc304 | 42 | void kmod_set_log_fn(struct kmod_ctx *ctx, |
1bdd951e | 43 | void (*log_fn)(void *log_data, |
e4351b05 LDM |
44 | int priority, const char *file, int line, |
45 | const char *fn, const char *format, | |
1bdd951e GSB |
46 | va_list args), |
47 | const void *data); | |
6d177553 | 48 | int kmod_get_log_priority(const struct kmod_ctx *ctx); |
586fc304 | 49 | void kmod_set_log_priority(struct kmod_ctx *ctx, int priority); |
6d177553 | 50 | void *kmod_get_userdata(const struct kmod_ctx *ctx); |
1ce08a56 | 51 | void kmod_set_userdata(struct kmod_ctx *ctx, const void *userdata); |
33bb69b9 LDM |
52 | int kmod_load_resources(struct kmod_ctx *ctx); |
53 | void kmod_unload_resources(struct kmod_ctx *ctx); | |
586fc304 LDM |
54 | |
55 | /* | |
56 | * kmod_list | |
57 | * | |
58 | * access to kmod generated lists | |
59 | */ | |
6924e47a | 60 | struct kmod_list; |
1ce08a56 GSB |
61 | struct kmod_list *kmod_list_next(const struct kmod_list *first_entry, |
62 | const struct kmod_list *list_entry); | |
63 | struct kmod_list *kmod_list_prev(const struct kmod_list *first_entry, | |
64 | const struct kmod_list *list_entry); | |
6924e47a | 65 | #define kmod_list_foreach(list_entry, first_entry) \ |
586fc304 | 66 | for (list_entry = first_entry; \ |
e4351b05 | 67 | list_entry != NULL; \ |
6924e47a | 68 | list_entry = kmod_list_next(first_entry, list_entry)) |
586fc304 | 69 | |
5f3429cd | 70 | /* Removal flags, not implemented yet */ |
423f856a | 71 | enum kmod_remove { |
6806a043 LDM |
72 | KMOD_REMOVE_FORCE = O_TRUNC, |
73 | KMOD_REMOVE_NOWAIT = O_NONBLOCK, | |
74 | }; | |
75 | ||
5f3429cd | 76 | /* Insertion flags, not implemented yet */ |
8f788d58 LDM |
77 | enum kmod_insert { |
78 | KMOD_INSERT_FORCE_VERMAGIC = 0x1, | |
79 | KMOD_INSERT_FORCE_MODVERSION = 0x2, | |
8f788d58 LDM |
80 | }; |
81 | ||
82 | /* | |
83 | * kmod_module | |
84 | * | |
85 | * Operate on kernel modules | |
86 | */ | |
87 | struct kmod_module; | |
88 | int kmod_module_new_from_name(struct kmod_ctx *ctx, const char *name, | |
89 | struct kmod_module **mod); | |
90 | int kmod_module_new_from_path(struct kmod_ctx *ctx, const char *path, | |
91 | struct kmod_module **mod); | |
7f3eb0cc LDM |
92 | int kmod_module_new_from_lookup(struct kmod_ctx *ctx, const char *alias, |
93 | struct kmod_list **list); | |
a102e262 | 94 | int kmod_module_new_from_loaded(struct kmod_ctx *ctx, struct kmod_list **list); |
8f788d58 LDM |
95 | |
96 | struct kmod_module *kmod_module_ref(struct kmod_module *mod); | |
97 | struct kmod_module *kmod_module_unref(struct kmod_module *mod); | |
7f3eb0cc | 98 | int kmod_module_unref_list(struct kmod_list *list); |
ad4d1ae5 | 99 | struct kmod_module *kmod_module_get_module(const struct kmod_list *entry); |
f1cd799f | 100 | struct kmod_list *kmod_module_get_dependencies(const struct kmod_module *mod); |
8f788d58 | 101 | |
1487a64f GSB |
102 | int kmod_module_get_filtered_blacklist(const struct kmod_ctx *ctx, const struct kmod_list *input, struct kmod_list **output); |
103 | ||
8f788d58 | 104 | int kmod_module_remove_module(struct kmod_module *mod, unsigned int flags); |
3a721bbc | 105 | int kmod_module_insert_module(struct kmod_module *mod, unsigned int flags, const char *options); |
8f788d58 | 106 | |
1ce08a56 GSB |
107 | const char *kmod_module_get_name(const struct kmod_module *mod); |
108 | const char *kmod_module_get_path(const struct kmod_module *mod); | |
6e869df7 | 109 | |
f12ae3c4 GSB |
110 | enum kmod_module_initstate { |
111 | KMOD_MODULE_BUILTIN = 0, | |
112 | KMOD_MODULE_LIVE, | |
113 | KMOD_MODULE_COMING, | |
49b741d0 LDM |
114 | KMOD_MODULE_GOING, |
115 | /* Padding to make sure enum is not mapped to char */ | |
116 | _KMOD_MODULE_PAD = (1 << 31), | |
f12ae3c4 GSB |
117 | }; |
118 | const char *kmod_module_initstate_str(enum kmod_module_initstate initstate); | |
119 | int kmod_module_get_initstate(const struct kmod_module *mod); | |
120 | int kmod_module_get_refcnt(const struct kmod_module *mod); | |
121 | struct kmod_list *kmod_module_get_holders(const struct kmod_module *mod); | |
122 | ||
123 | struct kmod_list *kmod_module_get_sections(const struct kmod_module *mod); | |
124 | const char *kmod_module_section_get_name(const struct kmod_list *entry); | |
125 | unsigned long kmod_module_section_get_address(const struct kmod_list *entry); | |
126 | void kmod_module_section_free_list(struct kmod_list *list); | |
127 | ||
69f9dd43 | 128 | long kmod_module_get_size(const struct kmod_module *mod); |
f12ae3c4 | 129 | |
bd3f5535 GSB |
130 | const char *kmod_module_get_options(const struct kmod_module *mod); |
131 | const char *kmod_module_get_install_commands(const struct kmod_module *mod); | |
132 | const char *kmod_module_get_remove_commands(const struct kmod_module *mod); | |
133 | ||
1c522600 GSB |
134 | int kmod_module_get_softdeps(const struct kmod_module *mod, struct kmod_list **pre, struct kmod_list **post); |
135 | ||
2bd6299d LDM |
136 | #ifdef __cplusplus |
137 | } /* extern "C" */ | |
138 | #endif | |
586fc304 | 139 | #endif |