root/arch/x86/include/asm/hw_breakpoint.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. hw_breakpoint_slots

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef _I386_HW_BREAKPOINT_H
   3 #define _I386_HW_BREAKPOINT_H
   4 
   5 #include <uapi/asm/hw_breakpoint.h>
   6 
   7 #define __ARCH_HW_BREAKPOINT_H
   8 
   9 /*
  10  * The name should probably be something dealt in
  11  * a higher level. While dealing with the user
  12  * (display/resolving)
  13  */
  14 struct arch_hw_breakpoint {
  15         unsigned long   address;
  16         unsigned long   mask;
  17         u8              len;
  18         u8              type;
  19 };
  20 
  21 #include <linux/kdebug.h>
  22 #include <linux/percpu.h>
  23 #include <linux/list.h>
  24 
  25 /* Available HW breakpoint length encodings */
  26 #define X86_BREAKPOINT_LEN_X            0x40
  27 #define X86_BREAKPOINT_LEN_1            0x40
  28 #define X86_BREAKPOINT_LEN_2            0x44
  29 #define X86_BREAKPOINT_LEN_4            0x4c
  30 
  31 #ifdef CONFIG_X86_64
  32 #define X86_BREAKPOINT_LEN_8            0x48
  33 #endif
  34 
  35 /* Available HW breakpoint type encodings */
  36 
  37 /* trigger on instruction execute */
  38 #define X86_BREAKPOINT_EXECUTE  0x80
  39 /* trigger on memory write */
  40 #define X86_BREAKPOINT_WRITE    0x81
  41 /* trigger on memory read or write */
  42 #define X86_BREAKPOINT_RW       0x83
  43 
  44 /* Total number of available HW breakpoint registers */
  45 #define HBP_NUM 4
  46 
  47 static inline int hw_breakpoint_slots(int type)
  48 {
  49         return HBP_NUM;
  50 }
  51 
  52 struct perf_event_attr;
  53 struct perf_event;
  54 struct pmu;
  55 
  56 extern int arch_check_bp_in_kernelspace(struct arch_hw_breakpoint *hw);
  57 extern int hw_breakpoint_arch_parse(struct perf_event *bp,
  58                                     const struct perf_event_attr *attr,
  59                                     struct arch_hw_breakpoint *hw);
  60 extern int hw_breakpoint_exceptions_notify(struct notifier_block *unused,
  61                                            unsigned long val, void *data);
  62 
  63 
  64 int arch_install_hw_breakpoint(struct perf_event *bp);
  65 void arch_uninstall_hw_breakpoint(struct perf_event *bp);
  66 void hw_breakpoint_pmu_read(struct perf_event *bp);
  67 void hw_breakpoint_pmu_unthrottle(struct perf_event *bp);
  68 
  69 extern void
  70 arch_fill_perf_breakpoint(struct perf_event *bp);
  71 
  72 unsigned long encode_dr7(int drnum, unsigned int len, unsigned int type);
  73 int decode_dr7(unsigned long dr7, int bpnum, unsigned *len, unsigned *type);
  74 
  75 extern int arch_bp_generic_fields(int x86_len, int x86_type,
  76                                   int *gen_len, int *gen_type);
  77 
  78 extern struct pmu perf_ops_bp;
  79 
  80 #endif  /* _I386_HW_BREAKPOINT_H */

/* [<][>][^][v][top][bottom][index][help] */