/*
 * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

#ifndef _ARC_KPROBES_H
#define _ARC_KPROBES_H

typedef u16 kprobe_opcode_t;

#define UNIMP_S_INSTRUCTION 0x79e0
#define TRAP_S_2_INSTRUCTION 0x785e

#define MAX_INSN_SIZE   8
#define MAX_STACK_SIZE  64

struct arch_specific_insn {
    int is_short;
    kprobe_opcode_t *t1_addr, *t2_addr;
    kprobe_opcode_t t1_opcode, t2_opcode;
};

#define flush_insn_slot(p)  do{}while(0)

#define kretprobe_blacklist_size    0

struct kprobe;

void arch_remove_kprobe(struct kprobe *p);

int kprobe_exceptions_notify(struct notifier_block *self,
                                unsigned long val, void *data);

struct prev_kprobe {
    struct kprobe *kp;
    unsigned long status;
};

struct kprobe_ctlblk {
    unsigned int kprobe_status;
    struct pt_regs jprobe_saved_regs;
    char jprobes_stack[MAX_STACK_SIZE];
    struct prev_kprobe prev_kprobe;
};

int kprobe_fault_handler(struct pt_regs *regs, unsigned long cause);

#endif
