diff options
Diffstat (limited to 'include/asm-x86/ds.h')
-rw-r--r-- | include/asm-x86/ds.h | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/include/asm-x86/ds.h b/include/asm-x86/ds.h new file mode 100644 index 000000000000..edd8467740a6 --- /dev/null +++ b/include/asm-x86/ds.h | |||
@@ -0,0 +1,65 @@ | |||
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 long timestamp; | ||
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 */ | ||