blob: fa2ecbd5008e8af1c8eeea1ac6d869b6611fd3dc [file] [log] [blame]
The Android Open Source Project10e23ee2009-03-03 19:30:30 -08001/**
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 */
33struct 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 */
41enum oprof_state {
42 STOPPED = 0,
43 STOPPING = 1,
44 RUNNING = 2
45};
46
47/**
48 * The head structure of a kernel sample buffer.
49 */
50struct 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 */
63struct 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 */
77struct 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 */