/** * @file op_interface.h * * Module / user space interface for 2.4 * * @remark Copyright 2002 OProfile authors * @remark Read the file COPYING * * @author John Levon * @author Philippe Elie */ #ifndef OP_INTERFACE_H #define OP_INTERFACE_H #include "op_config.h" #include "op_types.h" /*@{\name notifications types encoded in op_note::type */ /** fork(),vfork(),clone() */ #define OP_FORK 1 /** mapping */ #define OP_MAP 2 /** execve() */ #define OP_EXEC 4 /** init_module() */ #define OP_DROP_MODULES 8 /** exit() */ #define OP_EXIT 16 /*@}*/ /** Data type to transfer samples counts from the module to the daemon */ struct op_sample { unsigned long eip; /**< eip value where occur interrupt */ u32 counter; /**< counter nr */ u32 pid; /**< 32 bits can hold any pid */ u32 tgid; /**< always equal to pid for kernel < 2.4.0 */ }; /** the current kernel-side profiler state */ enum oprof_state { STOPPED = 0, STOPPING = 1, RUNNING = 2 }; /** * The head structure of a kernel sample buffer. */ struct op_buffer_head { int cpu_nr; /**< the CPU number of this buffer */ size_t count; /**< number of samples in this buffer */ enum oprof_state state; /**< current profiler state */ struct op_sample buffer[0]; /**< the sample buffer */ } __attribute__((__packed__)); /** * Data type used by the module to notify daemon of fork/exit/mapping etc. * Meanings of fields depend on the type of notification encoded in the type * field. * \sa OP_FORK, OP_EXEC, OP_MAP, OP_DROP_MODULES and OP_EXIT */ struct op_note { unsigned long addr; unsigned long len; unsigned long offset; unsigned int hash; unsigned int pid; unsigned int tgid; unsigned short type; }; /** * A path component. Directory name are stored as a stack of path components. * Note than the name index acts also as an unique identifier */ struct op_hash_index { /** index inside the string pool */ u32 name; /** parent component, zero if this component is the root */ u32 parent; } __attribute__((__packed__)); /** size of hash map in bytes */ #define OP_HASH_MAP_SIZE (OP_HASH_MAP_NR * sizeof(struct op_hash_index) + POOL_SIZE) #endif /* OP_INTERFACE_H */