The Android Open Source Project | 10e23ee | 2009-03-03 19:30:30 -0800 | [diff] [blame] | 1 | /** |
| 2 | * @file op_interface.h |
| 3 | * |
| 4 | * Module / user space interface for 2.4 |
| 5 | * |
| 6 | * @remark Copyright 2002 OProfile authors |
| 7 | * @remark Read the file COPYING |
| 8 | * |
| 9 | * @author John Levon |
| 10 | * @author Philippe Elie |
| 11 | */ |
| 12 | |
| 13 | #ifndef OP_INTERFACE_H |
| 14 | #define OP_INTERFACE_H |
| 15 | |
| 16 | #include "op_config.h" |
| 17 | #include "op_types.h" |
| 18 | |
| 19 | /*@{\name notifications types encoded in op_note::type */ |
| 20 | /** fork(),vfork(),clone() */ |
| 21 | #define OP_FORK 1 |
| 22 | /** mapping */ |
| 23 | #define OP_MAP 2 |
| 24 | /** execve() */ |
| 25 | #define OP_EXEC 4 |
| 26 | /** init_module() */ |
| 27 | #define OP_DROP_MODULES 8 |
| 28 | /** exit() */ |
| 29 | #define OP_EXIT 16 |
| 30 | /*@}*/ |
| 31 | |
| 32 | /** Data type to transfer samples counts from the module to the daemon */ |
| 33 | struct op_sample { |
| 34 | unsigned long eip; /**< eip value where occur interrupt */ |
| 35 | u32 counter; /**< counter nr */ |
| 36 | u32 pid; /**< 32 bits can hold any pid */ |
| 37 | u32 tgid; /**< always equal to pid for kernel < 2.4.0 */ |
| 38 | }; |
| 39 | |
| 40 | /** the current kernel-side profiler state */ |
| 41 | enum oprof_state { |
| 42 | STOPPED = 0, |
| 43 | STOPPING = 1, |
| 44 | RUNNING = 2 |
| 45 | }; |
| 46 | |
| 47 | /** |
| 48 | * The head structure of a kernel sample buffer. |
| 49 | */ |
| 50 | struct op_buffer_head { |
| 51 | int cpu_nr; /**< the CPU number of this buffer */ |
| 52 | size_t count; /**< number of samples in this buffer */ |
| 53 | enum oprof_state state; /**< current profiler state */ |
| 54 | struct op_sample buffer[0]; /**< the sample buffer */ |
| 55 | } __attribute__((__packed__)); |
| 56 | |
| 57 | /** |
| 58 | * Data type used by the module to notify daemon of fork/exit/mapping etc. |
| 59 | * Meanings of fields depend on the type of notification encoded in the type |
| 60 | * field. |
| 61 | * \sa OP_FORK, OP_EXEC, OP_MAP, OP_DROP_MODULES and OP_EXIT |
| 62 | */ |
| 63 | struct op_note { |
| 64 | unsigned long addr; |
| 65 | unsigned long len; |
| 66 | unsigned long offset; |
| 67 | unsigned int hash; |
| 68 | unsigned int pid; |
| 69 | unsigned int tgid; |
| 70 | unsigned short type; |
| 71 | }; |
| 72 | |
| 73 | /** |
| 74 | * A path component. Directory name are stored as a stack of path components. |
| 75 | * Note than the name index acts also as an unique identifier |
| 76 | */ |
| 77 | struct op_hash_index { |
| 78 | /** index inside the string pool */ |
| 79 | u32 name; |
| 80 | /** parent component, zero if this component is the root */ |
| 81 | u32 parent; |
| 82 | } __attribute__((__packed__)); |
| 83 | |
| 84 | /** size of hash map in bytes */ |
| 85 | #define OP_HASH_MAP_SIZE (OP_HASH_MAP_NR * sizeof(struct op_hash_index) + POOL_SIZE) |
| 86 | |
| 87 | #endif /* OP_INTERFACE_H */ |