linux/include/linux/kmod.h
<<
>>
Prefs
   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#include <linux/workqueue.h>
  27#include <linux/sysctl.h>
  28
  29#define KMOD_PATH_LEN 256
  30
  31#ifdef CONFIG_MODULES
  32extern char modprobe_path[]; /* for sysctl */
  33/* modprobe exit status on success, -ve on error.  Return value
  34 * usually useless though. */
  35extern __printf(2, 3)
  36int __request_module(bool wait, const char *name, ...);
  37#define request_module(mod...) __request_module(true, mod)
  38#define request_module_nowait(mod...) __request_module(false, mod)
  39#define try_then_request_module(x, mod...) \
  40        ((x) ?: (__request_module(true, mod), (x)))
  41#else
  42static inline int request_module(const char *name, ...) { return -ENOSYS; }
  43static inline int request_module_nowait(const char *name, ...) { return -ENOSYS; }
  44#define try_then_request_module(x, mod...) (x)
  45#endif
  46
  47
  48struct cred;
  49struct file;
  50
  51#define UMH_NO_WAIT     0       /* don't wait at all */
  52#define UMH_WAIT_EXEC   1       /* wait for the exec, but not the process */
  53#define UMH_WAIT_PROC   2       /* wait for the process to complete */
  54#define UMH_KILLABLE    4       /* wait for EXEC/PROC killable */
  55
  56struct subprocess_info {
  57        struct work_struct work;
  58        struct completion *complete;
  59        char *path;
  60        char **argv;
  61        char **envp;
  62        int wait;
  63        int retval;
  64        int (*init)(struct subprocess_info *info, struct cred *new);
  65        void (*cleanup)(struct subprocess_info *info);
  66        void *data;
  67};
  68
  69extern int
  70call_usermodehelper(char *path, char **argv, char **envp, int wait);
  71
  72extern struct subprocess_info *
  73call_usermodehelper_setup(char *path, char **argv, char **envp, gfp_t gfp_mask,
  74                          int (*init)(struct subprocess_info *info, struct cred *new),
  75                          void (*cleanup)(struct subprocess_info *), void *data);
  76
  77extern int
  78call_usermodehelper_exec(struct subprocess_info *info, int wait);
  79
  80extern struct ctl_table usermodehelper_table[];
  81
  82enum umh_disable_depth {
  83        UMH_ENABLED = 0,
  84        UMH_FREEZING,
  85        UMH_DISABLED,
  86};
  87
  88extern int __usermodehelper_disable(enum umh_disable_depth depth);
  89extern void __usermodehelper_set_disable_depth(enum umh_disable_depth depth);
  90
  91static inline int usermodehelper_disable(void)
  92{
  93        return __usermodehelper_disable(UMH_DISABLED);
  94}
  95
  96static inline void usermodehelper_enable(void)
  97{
  98        __usermodehelper_set_disable_depth(UMH_ENABLED);
  99}
 100
 101extern int usermodehelper_read_trylock(void);
 102extern long usermodehelper_read_lock_wait(long timeout);
 103extern void usermodehelper_read_unlock(void);
 104
 105#endif /* __LINUX_KMOD_H__ */
 106