1 /* SPDX-License-Identifier: GPL-2.0-or-later */
3 /***************************************************************************
4 * Copyright (C) 2005 by Dominic Rath *
5 * Dominic.Rath@gmx.de *
6 ***************************************************************************/
8 #ifndef OPENOCD_TARGET_BREAKPOINTS_H
9 #define OPENOCD_TARGET_BREAKPOINTS_H
13 #include "helper/types.h"
17 enum breakpoint_type
{
23 WPT_READ
= 0, WPT_WRITE
= 1, WPT_ACCESS
= 2
27 target_addr_t address
;
30 enum breakpoint_type type
;
34 struct breakpoint
*next
;
39 #define WATCHPOINT_IGNORE_DATA_VALUE_MASK (~(uint64_t)0)
42 target_addr_t address
;
46 enum watchpoint_rw rw
;
49 struct watchpoint
*next
;
53 int breakpoint_clear_target(struct target
*target
);
54 int breakpoint_add(struct target
*target
,
55 target_addr_t address
, uint32_t length
, enum breakpoint_type type
);
56 int context_breakpoint_add(struct target
*target
,
57 uint32_t asid
, uint32_t length
, enum breakpoint_type type
);
58 int hybrid_breakpoint_add(struct target
*target
,
59 target_addr_t address
, uint32_t asid
, uint32_t length
, enum breakpoint_type type
);
60 int breakpoint_remove(struct target
*target
, target_addr_t address
);
61 int breakpoint_remove_all(struct target
*target
);
63 struct breakpoint
*breakpoint_find(struct target
*target
, target_addr_t address
);
65 static inline void breakpoint_hw_set(struct breakpoint
*breakpoint
, unsigned int hw_number
)
67 breakpoint
->is_set
= true;
68 breakpoint
->number
= hw_number
;
71 int watchpoint_clear_target(struct target
*target
);
72 int watchpoint_add(struct target
*target
,
73 target_addr_t address
, uint32_t length
,
74 enum watchpoint_rw rw
, uint64_t value
, uint64_t mask
);
75 int watchpoint_remove(struct target
*target
, target_addr_t address
);
76 int watchpoint_remove_all(struct target
*target
);
78 /* report type and address of just hit watchpoint */
79 int watchpoint_hit(struct target
*target
, enum watchpoint_rw
*rw
,
80 target_addr_t
*address
);
82 static inline void watchpoint_set(struct watchpoint
*watchpoint
, unsigned int number
)
84 watchpoint
->is_set
= true;
85 watchpoint
->number
= number
;
88 #define ERROR_BREAKPOINT_NOT_FOUND (-1600)
89 #define ERROR_WATCHPOINT_NOT_FOUND (-1601)
91 #endif /* OPENOCD_TARGET_BREAKPOINTS_H */