/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * 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.
 */

#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
