x86, ptrace: use jiffies for BTS timestamps
[pandora-kernel.git] / include / asm-x86 / ds.h
1 /*
2  * Debug Store (DS) support
3  *
4  * This provides a low-level interface to the hardware's Debug Store
5  * feature that is used for last branch recording (LBR) and
6  * precise-event based sampling (PEBS).
7  *
8  * Different architectures use a different DS layout/pointer size.
9  * The below functions therefore work on a void*.
10  *
11  *
12  * Since there is no user for PEBS, yet, only LBR (or branch
13  * trace store, BTS) is supported.
14  *
15  *
16  * Copyright (C) 2007 Intel Corporation.
17  * Markus Metzger <markus.t.metzger@intel.com>, Dec 2007
18  */
19
20 #ifndef _ASM_X86_DS_H
21 #define _ASM_X86_DS_H
22
23 #include <linux/types.h>
24 #include <linux/init.h>
25
26 struct cpuinfo_x86;
27
28
29 /* a branch trace record entry
30  *
31  * In order to unify the interface between various processor versions,
32  * we use the below data structure for all processors.
33  */
34 enum bts_qualifier {
35         BTS_INVALID = 0,
36         BTS_BRANCH,
37         BTS_TASK_ARRIVES,
38         BTS_TASK_DEPARTS
39 };
40
41 struct bts_struct {
42         enum bts_qualifier qualifier;
43         union {
44                 /* BTS_BRANCH */
45                 struct {
46                         long from_ip;
47                         long to_ip;
48                 } lbr;
49                 /* BTS_TASK_ARRIVES or
50                    BTS_TASK_DEPARTS */
51                 unsigned long jiffies;
52         } variant;
53 };
54
55
56 extern int ds_allocate(void **, size_t);
57 extern int ds_free(void **);
58 extern int ds_get_bts_size(void *);
59 extern int ds_get_bts_index(void *);
60 extern int ds_read_bts(void *, size_t, struct bts_struct *);
61 extern int ds_write_bts(void *, const struct bts_struct *);
62 extern unsigned long ds_debugctl_mask(void);
63 extern void __cpuinit ds_init_intel(struct cpuinfo_x86 *c);
64
65 #endif /* _ASM_X86_DS_H */