/*
 * U-boot - ptrace.h
 *
 * Copyright (c) 2005-2007 Analog Devices Inc.
 *
 * See file CREDITS for list of people who contributed to this
 * project.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
 * MA 02110-1301 USA
 */

#ifndef _BLACKFIN_PTRACE_H
#define _BLACKFIN_PTRACE_H

#define NEW_PT_REGS

/*
 * GCC defines register number like this:
 * -----------------------------
 *       0 - 7 are data registers R0-R7
 *       8 - 15 are address registers P0-P7
 *      16 - 31 dsp registers I/B/L0 -- I/B/L3 & M0--M3
 *      32 - 33 A registers A0 & A1
 *      34 -    status register
 *
 * We follows above, except:
 *      32-33 --- Low 32-bit of A0&1
 *      34-35 --- High 8-bit of A0&1
 */

#if defined(NEW_PT_REGS)

#define PT_IPEND	0
#define PT_SYSCFG	(PT_IPEND+4)
#define PT_SEQSTAT	(PT_SYSCFG+4)
#define PT_RETE		(PT_SEQSTAT+4)
#define PT_RETN		(PT_RETE+4)
#define PT_RETX		(PT_RETN+4)
#define PT_RETI		(PT_RETX+4)
#define PT_PC		PT_RETI
#define PT_RETS		(PT_RETI+4)
#define PT_RESERVED	(PT_RETS+4)
#define PT_ASTAT	(PT_RESERVED+4)
#define PT_LB1		(PT_ASTAT+4)
#define PT_LB0		(PT_LB1+4)
#define PT_LT1		(PT_LB0+4)
#define PT_LT0		(PT_LT1+4)
#define PT_LC1		(PT_LT0+4)
#define PT_LC0		(PT_LC1+4)
#define PT_A1W		(PT_LC0+4)
#define PT_A1X		(PT_A1W+4)
#define PT_A0W		(PT_A1X+4)
#define PT_A0X		(PT_A0W+4)
#define PT_B3		(PT_A0X+4)
#define PT_B2		(PT_B3+4)
#define PT_B1		(PT_B2+4)
#define PT_B0		(PT_B1+4)
#define PT_L3		(PT_B0+4)
#define PT_L2		(PT_L3+4)
#define PT_L1		(PT_L2+4)
#define PT_L0		(PT_L1+4)
#define PT_M3		(PT_L0+4)
#define PT_M2		(PT_M3+4)
#define PT_M1		(PT_M2+4)
#define PT_M0		(PT_M1+4)
#define PT_I3		(PT_M0+4)
#define PT_I2		(PT_I3+4)
#define PT_I1		(PT_I2+4)
#define PT_I0		(PT_I1+4)
#define PT_USP		(PT_I0+4)
#define PT_FP		(PT_USP+4)
#define PT_P5		(PT_FP+4)
#define PT_P4		(PT_P5+4)
#define PT_P3		(PT_P4+4)
#define PT_P2		(PT_P3+4)
#define PT_P1		(PT_P2+4)
#define PT_P0		(PT_P1+4)
#define PT_R7		(PT_P0+4)
#define PT_R6		(PT_R7+4)
#define PT_R5		(PT_R6+4)
#define PT_R4		(PT_R5+4)
#define PT_R3		(PT_R4+4)
#define PT_R2		(PT_R3+4)
#define PT_R1		(PT_R2+4)
#define PT_R0		(PT_R1+4)
#define PT_ORIG_R0	(PT_R0+4)
#define PT_SR		PT_SEQSTAT

#else
/*
 * Here utilize blackfin : dpregs = [pregs + imm16s4]
 *                     [pregs + imm16s4] = dpregs
 * to access defferent saved reg in stack
 */
#define PT_R3		0
#define PT_R4		4
#define PT_R2		8
#define PT_R1		12
#define PT_P5		16
#define PT_P4		20
#define PT_P3		24
#define PT_P2		28
#define PT_P1		32
#define PT_P0		36
#define PT_R7		40
#define PT_R6		44
#define PT_R5		48
#define PT_PC		52
#define PT_SEQSTAT	56	/* so-called SR reg */
#define PT_SR		PT_SEQSTAT
#define PT_ASTAT	60
#define PT_RETS		64
#define PT_A1w		68
#define PT_A0w		72
#define PT_A1x		76
#define PT_A0x		80
#define PT_ORIG_R0	84
#define PT_R0		88
#define PT_USP		92
#define PT_FP		96
#define PT_SP		100

/* Added by HuTao, May26 2003 3:18PM */
#define PT_IPEND	100

/* Add SYSCFG register for single stepping support */
#define PT_SYSCFG	104

#endif

#ifndef __ASSEMBLY__

#if defined(NEW_PT_REGS)
/* this struct defines the way the registers are stored on the
 * stack during a system call.
 */
struct pt_regs {
	long ipend;
	long syscfg;
	long seqstat;
	long rete;
	long retn;
	long retx;
	long pc;
	long rets;
	long reserved;
	long astat;
	long lb1;
	long lb0;
	long lt1;
	long lt0;
	long lc1;
	long lc0;
	long a1w;
	long a1x;
	long a0w;
	long a0x;
	long b3;
	long b2;
	long b1;
	long b0;
	long l3;
	long l2;
	long l1;
	long l0;
	long m3;
	long m2;
	long m1;
	long m0;
	long i3;
	long i2;
	long i1;
	long i0;
	long usp;
	long fp;
	long p5;
	long p4;
	long p3;
	long p2;
	long p1;
	long p0;
	long r7;
	long r6;
	long r5;
	long r4;
	long r3;
	long r2;
	long r1;
	long r0;
	long orig_r0;
};

#else
/* now we don't know what regs the system call will use	*/
struct pt_regs {
	long r3;
	long r4;
	long r2;
	long r1;
	long p5;
	long p4;
	long p3;
	long p2;
	long p1;
	long p0;
	long r7;
	long r6;
	long r5;
	unsigned long pc;
	unsigned long seqstat;
	unsigned long astat;
	unsigned long rets;
	long a1w;
	long a0w;
	long a1x;
	long a0x;
	long orig_r0;
	long r0;
	long usp;
	long fp;
/*
 * Added for supervisor/user mode switch.
 *
 * HuTao May26 03 3:23PM
 */
	long ipend;
	long syscfg;
};

#endif

/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
#define PTRACE_GETREGS		12
#define PTRACE_SETREGS		13	/* ptrace signal */

#ifdef __KERNEL__

#ifndef PS_S
#define PS_S			(0x0c00)

/* Bit 11:10 of SEQSTAT defines user/supervisor/debug mode
 *        00: user
 *        01: supervisor
 *        1x: debug
 */

#define PS_M			(0x1000)	/* I am not sure why this is required here Akbar */
#endif

#define user_mode(regs)			(!((regs)->seqstat & PS_S))
#define instruction_pointer(regs)	((regs)->pc)
extern void show_regs(struct pt_regs *);

#endif
#endif
#endif
