162306a36Sopenharmony_ci/*
262306a36Sopenharmony_ci * This file is subject to the terms and conditions of the GNU General Public
362306a36Sopenharmony_ci * License.  See the file "COPYING" in the main directory of this archive
462306a36Sopenharmony_ci * for more details.
562306a36Sopenharmony_ci */
662306a36Sopenharmony_ci#ifndef __ASM_UPROBES_H
762306a36Sopenharmony_ci#define __ASM_UPROBES_H
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/notifier.h>
1062306a36Sopenharmony_ci#include <linux/types.h>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#include <asm/break.h>
1362306a36Sopenharmony_ci#include <asm/inst.h>
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci/*
1662306a36Sopenharmony_ci * We want this to be defined as union mips_instruction but that makes the
1762306a36Sopenharmony_ci * generic code blow up.
1862306a36Sopenharmony_ci */
1962306a36Sopenharmony_citypedef u32 uprobe_opcode_t;
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci/*
2262306a36Sopenharmony_ci * Classic MIPS (note this implementation doesn't consider microMIPS yet)
2362306a36Sopenharmony_ci * instructions are always 4 bytes but in order to deal with branches and
2462306a36Sopenharmony_ci * their delay slots, we treat instructions as having 8 bytes maximum.
2562306a36Sopenharmony_ci */
2662306a36Sopenharmony_ci#define MAX_UINSN_BYTES			8
2762306a36Sopenharmony_ci#define UPROBE_XOL_SLOT_BYTES		128	/* Max. cache line size */
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ci#define UPROBE_BRK_UPROBE		0x000d000d	/* break 13 */
3062306a36Sopenharmony_ci#define UPROBE_BRK_UPROBE_XOL		0x000e000d	/* break 14 */
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci#define UPROBE_SWBP_INSN		UPROBE_BRK_UPROBE
3362306a36Sopenharmony_ci#define UPROBE_SWBP_INSN_SIZE		4
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_cistruct arch_uprobe {
3662306a36Sopenharmony_ci	unsigned long	resume_epc;
3762306a36Sopenharmony_ci	u32	insn[2];
3862306a36Sopenharmony_ci	u32	ixol[2];
3962306a36Sopenharmony_ci};
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_cistruct arch_uprobe_task {
4262306a36Sopenharmony_ci	unsigned long saved_trap_nr;
4362306a36Sopenharmony_ci};
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci#endif /* __ASM_UPROBES_H */
46