#ifndef __LOAD_H__
#define __LOAD_H__
#ifdef __cplusplus
extern "C" {
#endif
#include "dgraph.h"
#ifdef KERNEL
#else
#include "KXKext.h"
#endif
#ifndef KERNEL
typedef KXKextManagerError kload_error;
enum {
kload_error_none = kKXKextManagerErrorNone,
kload_error_unspecified = kKXKextManagerErrorUnspecified,
kload_error_invalid_argument = kKXKextManagerErrorInvalidArgument,
kload_error_no_memory = kKXKextManagerErrorNoMemory,
kload_error_user_abort = kKXKextManagerErrorUserAbort,
kload_error_kernel_error = kKXKextManagerErrorKernelError,
kload_error_kernel_permission = kKXKextManagerErrorKernelPermission,
kload_error_executable_bad = kKXKextManagerErrorLoadExecutableBad,
kload_error_already_loaded = kKXKextManagerErrorAlreadyLoaded,
kload_error_loaded_version_differs = kKXKextManagerErrorLoadedVersionDiffers,
kload_error_dependency_loaded_version_differs = kKXKextManagerErrorDependencyLoadedVersionDiffers,
kload_error_link_load = kKXKextManagerErrorLinkLoad
};
typedef KXKextManagerLogLevel kload_log_level;
enum {
kload_log_level_silent = kKXKextManagerLogLevelSilent,
kload_log_level_errors_only = kKXKextManagerLogLevelErrorsOnly,
kload_log_level_default = kKXKextManagerLogLevelDefault,
kload_log_level_basic = kKXKextManagerLogLevelBasic,
kload_log_level_load_basic = kKXKextManagerLogLevelLoadBasic,
kload_log_level_details = kKXKextManagerLogLevelDetails,
kload_log_level_kexts = kKXKextManagerLogLevelKexts,
kload_log_level_kext_details = kKXKextManagerLogLevelKextDetails,
kload_log_level_load_details = kKXKextManagerLogLevelLoadDetails
};
#else
typedef enum {
kload_error_none,
kload_error_unspecified,
kload_error_invalid_argument,
kload_error_no_memory,
kload_error_user_abort,
kload_error_kernel_error,
kload_error_kernel_permission,
kload_error_executable_bad,
kload_error_already_loaded,
kload_error_loaded_version_differs,
kload_error_dependency_loaded_version_differs,
kload_error_link_load
} kload_error;
typedef enum {
kload_log_level_silent = -2, kload_log_level_errors_only = -1,
kload_log_level_default = 0,
kload_log_level_basic = 1,
kload_log_level_load_basic = 2,
kload_log_level_details = 3,
kload_log_level_kexts = 4,
kload_log_level_kext_details = 5,
kload_log_level_load_details = 6
} kload_log_level;
#endif
kload_error kload_load_dgraph(dgraph_t * dgraph
#ifndef KERNEL
,
const char * kernel_file,
const char * patch_file, const char * patch_dir,
const char * symbol_file, const char * symbol_dir,
int do_load, int do_start_kmod, int do_prelink,
int interactive_level,
int ask_overwrite_symbols, int overwrite_symbols
#endif
);
#ifndef KERNEL
kload_error kload_load_with_arglist(
int argc, char **argv,
const char * kernel_file,
const char * patch_file, const char * patch_dir,
const char * symbol_file, const char * symbol_dir,
int do_load, int do_start_kmod,
int interactive_level,
int ask_overwrite_symbols, int overwrite_symbols);
#endif
kload_error kload_map_dgraph(dgraph_t * dgraph
#ifndef KERNEL
,
const char * kernel_file
#endif
);
kload_error kload_map_entry(dgraph_entry_t * entry);
#ifndef KERNEL
int kload_file_exists(const char * path);
kload_error kload_request_load_addresses(
dgraph_t * dgraph,
const char * kernel_file);
kload_error kload_set_load_addresses_from_args(
dgraph_t * dgraph,
const char * kernel_file,
char ** addresses);
#endif
kload_error kload_set_load_addresses_from_kernel(
dgraph_t * dgraph
#ifndef KERNEL
,
const char * kernel_file,
int do_load
#endif
);
void kload_set_log_level(kload_log_level level);
#ifndef KERNEL
void kload_set_log_function(
void (*)(const char * format, ...));
void kload_set_error_log_function(
void (*)(const char * format, ...));
void kload_set_user_approve_function(
int (*)(int default_answer, const char * format, ...));
void kload_set_user_veto_function(
int (*)(int default_answer, const char * format, ...));
void kload_set_user_input_function(
const char * (*)(const char * format, ...));
void kload_log_message(const char * format, ...);
void kload_log_error(const char * format, ...);
#define KNL ""
#else
#define kload_log_message IOLog
#define kload_log_error IOLog
#define KNL "\n"
#endif
#endif
#ifdef __cplusplus
}
#endif