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; 34struct pt_regs; 35struct task_struct; 36 37int hw_breakpoint_slots(int type); 38int arch_check_bp_in_kernelspace(struct perf_event *bp); 39int arch_validate_hwbkpt_settings(struct perf_event *bp); 40int hw_breakpoint_exceptions_notify(struct notifier_block *unused, 41 unsigned long val, void *data); 42 43int arch_install_hw_breakpoint(struct perf_event *bp); 44void arch_uninstall_hw_breakpoint(struct perf_event *bp); 45void hw_breakpoint_pmu_read(struct perf_event *bp); 46int check_hw_breakpoint(struct pt_regs *regs); 47void clear_ptrace_hw_breakpoint(struct task_struct *tsk); 48 49#else 50 51struct task_struct; 52 53static inline void clear_ptrace_hw_breakpoint(struct task_struct *tsk) 54{ 55} 56 57#endif /* CONFIG_HAVE_HW_BREAKPOINT */ 58#endif /* __ASM_XTENSA_HW_BREAKPOINT_H */ 59