110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/**
210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @file op_interface.h
310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *
410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Module / user space interface for 2.4
510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *
610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @remark Copyright 2002 OProfile authors
710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @remark Read the file COPYING
810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project *
910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @author John Levon
1010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * @author Philippe Elie
1110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */
1210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
1310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#ifndef OP_INTERFACE_H
1410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define OP_INTERFACE_H
1510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
1610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include "op_config.h"
1710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#include "op_types.h"
1810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
1910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/*@{\name notifications types encoded in op_note::type */
2010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/** fork(),vfork(),clone() */
2110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define OP_FORK 1
2210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/** mapping */
2310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define OP_MAP 2
2410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/** execve() */
2510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define OP_EXEC 4
2610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/** init_module() */
2710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define OP_DROP_MODULES 8
2810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/** exit() */
2910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define OP_EXIT 16
3010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/*@}*/
3110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
3210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/** Data type to transfer samples counts from the module to the daemon */
3310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectstruct op_sample {
3410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	unsigned long eip; /**< eip value where occur interrupt */
3510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	u32 counter; /**< counter nr */
3610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	u32 pid; /**< 32 bits can hold any pid */
3710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	u32 tgid; /**< always equal to pid for kernel < 2.4.0 */
3810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project};
3910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
4010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/** the current kernel-side profiler state */
4110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectenum oprof_state {
4210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	STOPPED = 0,
4310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	STOPPING = 1,
4410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	RUNNING = 2
4510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project};
4610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
4710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/**
4810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * The head structure of a kernel sample buffer.
4910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */
5010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectstruct op_buffer_head {
5110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	int cpu_nr; /**< the CPU number of this buffer */
5210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	size_t count; /**< number of samples in this buffer */
5310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	enum oprof_state state; /**< current profiler state */
5410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	struct op_sample buffer[0]; /**< the sample buffer */
5510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} __attribute__((__packed__));
5610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
5710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/**
5810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Data type used by the module to notify daemon of fork/exit/mapping etc.
5910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Meanings of fields depend on the type of notification encoded in the type
6010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * field.
6110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * \sa OP_FORK, OP_EXEC, OP_MAP, OP_DROP_MODULES and OP_EXIT
6210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */
6310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectstruct op_note {
6410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	unsigned long   addr;
6510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	unsigned long   len;
6610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	unsigned long   offset;
6710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	unsigned int    hash;
6810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	unsigned int	pid;
6910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	unsigned int    tgid;
7010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	unsigned short	type;
7110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project};
7210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
7310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/**
7410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * A path component. Directory name are stored as a stack of path components.
7510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project * Note than the name index acts also as an unique identifier
7610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project */
7710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Projectstruct op_hash_index {
7810e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	/** index inside the string pool */
7910e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	u32 name;
8010e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	/** parent component, zero if this component is the root */
8110e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project	u32 parent;
8210e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project} __attribute__((__packed__));
8310e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
8410e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project/** size of hash map in bytes */
8510e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#define OP_HASH_MAP_SIZE (OP_HASH_MAP_NR * sizeof(struct op_hash_index) + POOL_SIZE)
8610e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project
8710e23eebca4175a8dfe3a788b2bebacb1fcfce54The Android Open Source Project#endif /* OP_INTERFACE_H */
88