]>
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 | |
8 | * License as published by the Free Software Foundation version 2.1. | |
9 | * | |
10 | * This library is distributed in the hope that it will be useful, | |
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 | * Lesser General Public License for more details. | |
14 | * | |
15 | * You should have received a copy of the GNU Lesser General Public | |
16 | * License along with this library; if not, write to the Free Software | |
17 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |
18 | */ | |
19 | ||
6ad98307 LDM |
20 | #ifndef _LIBKMOD_H_ |
21 | #define _LIBKMOD_H_ | |
586fc304 | 22 | |
6806a043 | 23 | #include <fcntl.h> |
586fc304 | 24 | #include <stdarg.h> |
5369797d | 25 | #include <inttypes.h> |
586fc304 LDM |
26 | |
27 | #ifdef __cplusplus | |
28 | extern "C" { | |
29 | #endif | |
30 | ||
31 | /* | |
32 | * kmod_ctx | |
33 | * | |
34 | * library user context - reads the config and system | |
35 | * environment, user variables, allows custom logging | |
36 | */ | |
37 | struct kmod_ctx; | |
221631d5 | 38 | struct kmod_ctx *kmod_new(const char *dirname); |
586fc304 LDM |
39 | struct kmod_ctx *kmod_ref(struct kmod_ctx *ctx); |
40 | struct kmod_ctx *kmod_unref(struct kmod_ctx *ctx); | |
586fc304 | 41 | void kmod_set_log_fn(struct kmod_ctx *ctx, |
e4351b05 LDM |
42 | void (*log_fn)(struct kmod_ctx *ctx, |
43 | int priority, const char *file, int line, | |
44 | const char *fn, const char *format, | |
45 | va_list args)); | |
6d177553 | 46 | int kmod_get_log_priority(const struct kmod_ctx *ctx); |
586fc304 | 47 | void kmod_set_log_priority(struct kmod_ctx *ctx, int priority); |
6d177553 | 48 | void *kmod_get_userdata(const struct kmod_ctx *ctx); |
1ce08a56 | 49 | void kmod_set_userdata(struct kmod_ctx *ctx, const void *userdata); |
586fc304 LDM |
50 | |
51 | /* | |
52 | * kmod_list | |
53 | * | |
54 | * access to kmod generated lists | |
55 | */ | |
6924e47a | 56 | struct kmod_list; |
1ce08a56 GSB |
57 | struct kmod_list *kmod_list_next(const struct kmod_list *first_entry, |
58 | const struct kmod_list *list_entry); | |
59 | struct kmod_list *kmod_list_prev(const struct kmod_list *first_entry, | |
60 | const struct kmod_list *list_entry); | |
6924e47a | 61 | #define kmod_list_foreach(list_entry, first_entry) \ |
586fc304 | 62 | for (list_entry = first_entry; \ |
e4351b05 | 63 | list_entry != NULL; \ |
6924e47a | 64 | list_entry = kmod_list_next(first_entry, list_entry)) |
586fc304 | 65 | |
8f788d58 LDM |
66 | /* |
67 | * kmod_loaded | |
68 | * | |
69 | * retrieve info from /proc/modules regarding loaded modules | |
70 | */ | |
5369797d LDM |
71 | struct kmod_loaded; |
72 | int kmod_loaded_new(struct kmod_ctx *ctx, struct kmod_loaded **mod); | |
73 | struct kmod_loaded *kmod_loaded_ref(struct kmod_loaded *mod); | |
74 | struct kmod_loaded *kmod_loaded_unref(struct kmod_loaded *mod); | |
75 | int kmod_loaded_get_list(struct kmod_loaded *mod, struct kmod_list **list); | |
6d177553 LDM |
76 | int kmod_loaded_get_module_info(const struct kmod_list *entry, |
77 | const char **name, long *size, int *use_count, | |
78 | const char **deps, uintptr_t *addr); | |
5369797d | 79 | |
423f856a | 80 | enum kmod_remove { |
6806a043 LDM |
81 | KMOD_REMOVE_FORCE = O_TRUNC, |
82 | KMOD_REMOVE_NOWAIT = O_NONBLOCK, | |
83 | }; | |
84 | ||
85 | int kmod_loaded_remove_module(struct kmod_loaded *kmod, | |
86 | struct kmod_list *entry, unsigned int flags); | |
8f788d58 LDM |
87 | |
88 | enum kmod_insert { | |
89 | KMOD_INSERT_FORCE_VERMAGIC = 0x1, | |
90 | KMOD_INSERT_FORCE_MODVERSION = 0x2, | |
91 | KMOD_INSERT_HANDLE_DEPENDENCIES = 0x4, | |
92 | KMOD_INSERT_IGNORE_CONFIG = 0x8, | |
93 | }; | |
94 | ||
95 | /* | |
96 | * kmod_module | |
97 | * | |
98 | * Operate on kernel modules | |
99 | */ | |
100 | struct kmod_module; | |
101 | int kmod_module_new_from_name(struct kmod_ctx *ctx, const char *name, | |
102 | struct kmod_module **mod); | |
103 | int kmod_module_new_from_path(struct kmod_ctx *ctx, const char *path, | |
104 | struct kmod_module **mod); | |
7f3eb0cc LDM |
105 | int kmod_module_new_from_lookup(struct kmod_ctx *ctx, const char *alias, |
106 | struct kmod_list **list); | |
8f788d58 LDM |
107 | |
108 | struct kmod_module *kmod_module_ref(struct kmod_module *mod); | |
109 | struct kmod_module *kmod_module_unref(struct kmod_module *mod); | |
7f3eb0cc | 110 | int kmod_module_unref_list(struct kmod_list *list); |
1ce08a56 GSB |
111 | struct kmod_module *kmod_module_get_module(const struct kmod_list *l); |
112 | struct kmod_list *kmod_module_get_dependency(const struct kmod_module *mod); | |
8f788d58 LDM |
113 | |
114 | int kmod_module_remove_module(struct kmod_module *mod, unsigned int flags); | |
115 | int kmod_module_insert_module(struct kmod_module *mod, unsigned int flags); | |
116 | ||
1ce08a56 GSB |
117 | const char *kmod_module_get_name(const struct kmod_module *mod); |
118 | const char *kmod_module_get_path(const struct kmod_module *mod); | |
6e869df7 | 119 | |
2bd6299d LDM |
120 | #ifdef __cplusplus |
121 | } /* extern "C" */ | |
122 | #endif | |
586fc304 | 123 | #endif |