Root/
1 | #ifndef __LINUX_KMOD_H__ |
2 | #define __LINUX_KMOD_H__ |
3 | |
4 | /* |
5 | * include/linux/kmod.h |
6 | * |
7 | * This program is free software; you can redistribute it and/or modify |
8 | * it under the terms of the GNU General Public License as published by |
9 | * the Free Software Foundation; either version 2 of the License, or |
10 | * (at your option) any later version. |
11 | * |
12 | * This program is distributed in the hope that it will be useful, |
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
15 | * GNU General Public License for more details. |
16 | * |
17 | * You should have received a copy of the GNU General Public License |
18 | * along with this program; if not, write to the Free Software |
19 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
20 | */ |
21 | |
22 | #include <linux/gfp.h> |
23 | #include <linux/stddef.h> |
24 | #include <linux/errno.h> |
25 | #include <linux/compiler.h> |
26 | |
27 | #define KMOD_PATH_LEN 256 |
28 | |
29 | #ifdef CONFIG_MODULES |
30 | extern char modprobe_path[]; /* for sysctl */ |
31 | /* modprobe exit status on success, -ve on error. Return value |
32 | * usually useless though. */ |
33 | extern int __request_module(bool wait, const char *name, ...) \ |
34 | __attribute__((format(printf, 2, 3))); |
35 | #define request_module(mod...) __request_module(true, mod) |
36 | #define request_module_nowait(mod...) __request_module(false, mod) |
37 | #define try_then_request_module(x, mod...) \ |
38 | ((x) ?: (__request_module(true, mod), (x))) |
39 | #else |
40 | static inline int request_module(const char *name, ...) { return -ENOSYS; } |
41 | static inline int request_module_nowait(const char *name, ...) { return -ENOSYS; } |
42 | #define try_then_request_module(x, mod...) (x) |
43 | #endif |
44 | |
45 | |
46 | struct key; |
47 | struct file; |
48 | struct subprocess_info; |
49 | |
50 | /* Allocate a subprocess_info structure */ |
51 | struct subprocess_info *call_usermodehelper_setup(char *path, char **argv, |
52 | char **envp, gfp_t gfp_mask); |
53 | |
54 | /* Set various pieces of state into the subprocess_info structure */ |
55 | void call_usermodehelper_setkeys(struct subprocess_info *info, |
56 | struct key *session_keyring); |
57 | int call_usermodehelper_stdinpipe(struct subprocess_info *sub_info, |
58 | struct file **filp); |
59 | void call_usermodehelper_setcleanup(struct subprocess_info *info, |
60 | void (*cleanup)(char **argv, char **envp)); |
61 | |
62 | enum umh_wait { |
63 | UMH_NO_WAIT = -1, /* don't wait at all */ |
64 | UMH_WAIT_EXEC = 0, /* wait for the exec, but not the process */ |
65 | UMH_WAIT_PROC = 1, /* wait for the process to complete */ |
66 | }; |
67 | |
68 | /* Actually execute the sub-process */ |
69 | int call_usermodehelper_exec(struct subprocess_info *info, enum umh_wait wait); |
70 | |
71 | /* Free the subprocess_info. This is only needed if you're not going |
72 | to call call_usermodehelper_exec */ |
73 | void call_usermodehelper_freeinfo(struct subprocess_info *info); |
74 | |
75 | static inline int |
76 | call_usermodehelper(char *path, char **argv, char **envp, enum umh_wait wait) |
77 | { |
78 | struct subprocess_info *info; |
79 | gfp_t gfp_mask = (wait == UMH_NO_WAIT) ? GFP_ATOMIC : GFP_KERNEL; |
80 | |
81 | info = call_usermodehelper_setup(path, argv, envp, gfp_mask); |
82 | if (info == NULL) |
83 | return -ENOMEM; |
84 | return call_usermodehelper_exec(info, wait); |
85 | } |
86 | |
87 | static inline int |
88 | call_usermodehelper_keys(char *path, char **argv, char **envp, |
89 | struct key *session_keyring, enum umh_wait wait) |
90 | { |
91 | struct subprocess_info *info; |
92 | gfp_t gfp_mask = (wait == UMH_NO_WAIT) ? GFP_ATOMIC : GFP_KERNEL; |
93 | |
94 | info = call_usermodehelper_setup(path, argv, envp, gfp_mask); |
95 | if (info == NULL) |
96 | return -ENOMEM; |
97 | |
98 | call_usermodehelper_setkeys(info, session_keyring); |
99 | return call_usermodehelper_exec(info, wait); |
100 | } |
101 | |
102 | extern void usermodehelper_init(void); |
103 | |
104 | struct file; |
105 | extern int call_usermodehelper_pipe(char *path, char *argv[], char *envp[], |
106 | struct file **filp); |
107 | |
108 | extern int usermodehelper_disable(void); |
109 | extern void usermodehelper_enable(void); |
110 | |
111 | #endif /* __LINUX_KMOD_H__ */ |
112 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9