1/* 2 * Xtensa hardware breakpoints/watchpoints handling functions 3 * 4 * This file is subject to the terms and conditions of the GNU General Public 5 * License. See the file "COPYING" in the main directory of this archive 6 * for more details. 7 * 8 * Copyright (C) 2016 Cadence Design Systems Inc. 9 */ 10 11#ifndef __ASM_XTENSA_HW_BREAKPOINT_H 12#define __ASM_XTENSA_HW_BREAKPOINT_H 13 14#ifdef CONFIG_HAVE_HW_BREAKPOINT 15 16#include <linux/kdebug.h> 17#include <linux/types.h> 18#include <uapi/linux/hw_breakpoint.h> 19 20/* Breakpoint */ 21#define XTENSA_BREAKPOINT_EXECUTE 0 22 23/* Watchpoints */ 24#define XTENSA_BREAKPOINT_LOAD 1 25#define XTENSA_BREAKPOINT_STORE 2 26 27struct arch_hw_breakpoint { 28 unsigned long address; 29 u16 len; 30 u16 type; 31}; 32 33struct perf_event_attr; 34struct perf_event; 35struct pt_regs; 36struct task_struct; 37 38int hw_breakpoint_slots(int type); 39int arch_check_bp_in_kernelspace(struct arch_hw_breakpoint *hw); 40int hw_breakpoint_arch_parse(struct perf_event *bp, 41 const struct perf_event_attr *attr, 42 struct arch_hw_breakpoint *hw); 43int hw_breakpoint_exceptions_notify(struct notifier_block *unused, 44 unsigned long val, void *data); 45 46int arch_install_hw_breakpoint(struct perf_event *bp); 47void arch_uninstall_hw_breakpoint(struct perf_event *bp); 48void hw_breakpoint_pmu_read(struct perf_event *bp); 49int check_hw_breakpoint(struct pt_regs *regs); 50void clear_ptrace_hw_breakpoint(struct task_struct *tsk); 51 52#else 53 54struct task_struct; 55 56static inline void clear_ptrace_hw_breakpoint(struct task_struct *tsk) 57{ 58} 59 60#endif /* CONFIG_HAVE_HW_BREAKPOINT */ 61#endif /* __ASM_XTENSA_HW_BREAKPOINT_H */ 62