/**
 * Copyright (C) ST-Ericsson SA 2010
 * Author: Shujuan Chen <shujuan.chen@stericsson.com> for ST-Ericsson.
 * Author: Jonas Linde <jonas.linde@stericsson.com> for ST-Ericsson.
 * Author: Joakim Bech <joakim.xx.bech@stericsson.com> for ST-Ericsson.
 * Author: Berne Hebark <berne.herbark@stericsson.com> for ST-Ericsson.
 * Author: Niklas Hernaeus <niklas.hernaeus@stericsson.com> for ST-Ericsson.
 * License terms: GNU General Public License (GPL) version 2
 */

#ifndef __CRYP_IRQP_H_
#define __CRYP_IRQP_H_

#include "cryp_irq.h"

/**
 *
 * CRYP Registers - Offset mapping
 *     +-----------------+
 * 00h | CRYP_CR         |  Configuration register
 *     +-----------------+
 * 04h | CRYP_SR         |  Status register
 *     +-----------------+
 * 08h | CRYP_DIN        |  Data In register
 *     +-----------------+
 * 0ch | CRYP_DOUT       |  Data out register
 *     +-----------------+
 * 10h | CRYP_DMACR      |  DMA control register
 *     +-----------------+
 * 14h | CRYP_IMSC       |  IMSC
 *     +-----------------+
 * 18h | CRYP_RIS        |  Raw interrupt status
 *     +-----------------+
 * 1ch | CRYP_MIS        |  Masked interrupt status.
 *     +-----------------+
 *       Key registers
 *       IVR registers
 *       Peripheral
 *       Cell IDs
 *
 *       Refer data structure for other register map
 */

/**
 * struct cryp_register
 * @cr			- Configuration register
 * @status		- Status register
 * @din			- Data input register
 * @din_size		- Data input size register
 * @dout		- Data output register
 * @dout_size		- Data output size register
 * @dmacr		- Dma control register
 * @imsc		- Interrupt mask set/clear register
 * @ris			- Raw interrupt status
 * @mis			- Masked interrupt statu register
 * @key_1_l		- Key register 1 L
 * @key_1_r		- Key register 1 R
 * @key_2_l		- Key register 2 L
 * @key_2_r		- Key register 2 R
 * @key_3_l		- Key register 3 L
 * @key_3_r		- Key register 3 R
 * @key_4_l		- Key register 4 L
 * @key_4_r		- Key register 4 R
 * @init_vect_0_l	- init vector 0 L
 * @init_vect_0_r	- init vector 0 R
 * @init_vect_1_l	- init vector 1 L
 * @init_vect_1_r	- init vector 1 R
 * @cryp_unused1	- unused registers
 * @itcr		- Integration test control register
 * @itip		- Integration test input register
 * @itop		- Integration test output register
 * @cryp_unused2	- unused registers
 * @periphId0		- FE0 CRYP Peripheral Identication Register
 * @periphId1		- FE4
 * @periphId2		- FE8
 * @periphId3		- FEC
 * @pcellId0		- FF0  CRYP PCell Identication Register
 * @pcellId1		- FF4
 * @pcellId2		- FF8
 * @pcellId3		- FFC
 */
struct cryp_register {
	u32 cr;			/* Configuration register   */
	u32 sr;			/* Status register          */
	u32 din;		/* Data input register      */
	u32 din_size;		/* Data input size register */
	u32 dout;		/* Data output register     */
	u32 dout_size;		/* Data output size register */
	u32 dmacr;		/* Dma control register     */
	u32 imsc;		/* Interrupt mask set/clear register */
	u32 ris;		/* Raw interrupt status             */
	u32 mis;		/* Masked interrupt statu register  */

	u32 key_1_l;		/*Key register 1 L */
	u32 key_1_r;		/*Key register 1 R */
	u32 key_2_l;		/*Key register 2 L */
	u32 key_2_r;		/*Key register 2 R */
	u32 key_3_l;		/*Key register 3 L */
	u32 key_3_r;		/*Key register 3 R */
	u32 key_4_l;		/*Key register 4 L */
	u32 key_4_r;		/*Key register 4 R */

	u32 init_vect_0_l;	/*init vector 0 L */
	u32 init_vect_0_r;	/*init vector 0 R */
	u32 init_vect_1_l;	/*init vector 1 L */
	u32 init_vect_1_r;	/*init vector 1 R */

	u32 cryp_unused1[(0x80 - 0x58) / sizeof(u32)];	/* unused registers */
	u32 itcr;		/*Integration test control register */
	u32 itip;		/*Integration test input register */
	u32 itop;		/*Integration test output register */
	u32 cryp_unused2[(0xFE0 - 0x8C) / sizeof(u32)];	/* unused registers */

	u32 periphId0;		/* FE0  CRYP Peripheral Identication Register */
	u32 periphId1;		/* FE4 */
	u32 periphId2;		/* FE8 */
	u32 periphId3;		/* FEC */

	u32 pcellId0;		/* FF0  CRYP PCell Identication Register */
	u32 pcellId1;		/* FF4 */
	u32 pcellId2;		/* FF8 */
	u32 pcellId3;		/* FFC */
};

#endif
