//*****************************************************************************
//
//  Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/
//
//
//  Redistribution and use in source and binary forms, with or without
//  modification, are permitted provided that the following conditions
//  are met:
//
//    Redistributions of source code must retain the above copyright
//    notice, this list of conditions and the following disclaimer.
//
//    Redistributions in binary form must reproduce the above copyright
//    notice, this list of conditions and the following disclaimer in the
//    documentation and/or other materials provided with the
//    distribution.
//
//    Neither the name of Texas Instruments Incorporated nor the names of
//    its contributors may be used to endorse or promote products derived
//    from this software without specific prior written permission.
//
//  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
//  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
//  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
//  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
//  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
//  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
//  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
//  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
//  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
//  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//*****************************************************************************

#ifndef __HW_SHAMD5_H__
#define __HW_SHAMD5_H__

//*****************************************************************************
//
// The following are defines for the SHAMD5_P register offsets.
//
//*****************************************************************************
#define SHAMD5_O_ODIGEST_A       0x00000000  // WRITE: Outer Digest [127:96] for
                                            // MD5 [159:128] for SHA-1 [255:224]
                                            // for SHA-2 / HMAC Key [31:0] for
                                            // HMAC key proc READ: Outer Digest
                                            // [127:96] for MD5 [159:128] for
                                            // SHA-1 [255:224] for SHA-2
#define SHAMD5_O_ODIGEST_B       0x00000004  // WRITE: Outer Digest [95:64] for
                                            // MD5 [127:96] for SHA-1 [223:192]
                                            // for SHA-2 / HMAC Key [63:32] for
                                            // HMAC key proc READ: Outer Digest
                                            // [95:64] for MD5 [127:96] for
                                            // SHA-1 [223:192] for SHA-2
#define SHAMD5_O_ODIGEST_C       0x00000008  // WRITE: Outer Digest [63:32] for
                                            // MD5 [95:64] for SHA-1 [191:160]
                                            // for SHA-2 / HMAC Key [95:64] for
                                            // HMAC key proc READ: Outer Digest
                                            // [63:32] for MD5 [95:64] for SHA-1
                                            // [191:160] for SHA-2
#define SHAMD5_O_ODIGEST_D       0x0000000C  // WRITE: Outer Digest [31:0] for
                                            // MD5 [63:31] for SHA-1 [159:128]
                                            // for SHA-2 / HMAC Key [127:96] for
                                            // HMAC key proc READ: Outer Digest
                                            // [31:0] for MD5 [63:32] for SHA-1
                                            // [159:128] for SHA-2
#define SHAMD5_O_ODIGEST_E       0x00000010  // WRITE: Outer Digest [31:0] for
                                            // SHA-1 [127:96] for SHA-2 / HMAC
                                            // Key [159:128] for HMAC key proc
                                            // READ: Outer Digest [31:0] for
                                            // SHA-1 [127:96] for SHA-2
#define SHAMD5_O_ODIGEST_F       0x00000014  // WRITE: Outer Digest [95:64] for
                                            // SHA-2 / HMAC Key [191:160] for
                                            // HMAC key proc READ: Outer Digest
                                            // [95:64] for SHA-2
#define SHAMD5_O_ODIGEST_G       0x00000018  // WRITE: Outer Digest [63:32] for
                                            // SHA-2 / HMAC Key [223:192] for
                                            // HMAC key proc READ: Outer Digest
                                            // [63:32] for SHA-2
#define SHAMD5_O_ODIGEST_H       0x0000001C  // WRITE: Outer Digest [31:0] for
                                            // SHA-2 / HMAC Key [255:224] for
                                            // HMAC key proc READ: Outer Digest
                                            // [31:0] for SHA-2
#define SHAMD5_O_IDIGEST_A       0x00000020  // WRITE: Inner / Initial Digest
                                            // [127:96] for MD5 [159:128] for
                                            // SHA-1 [255:224] for SHA-2 / HMAC
                                            // Key [287:256] for HMAC key proc
                                            // READ: Intermediate / Inner Digest
                                            // [127:96] for MD5 [159:128] for
                                            // SHA-1 [255:224] for SHA-2 /
                                            // Result Digest/MAC [127:96] for
                                            // MD5 [159:128] for SHA-1 [223:192]
                                            // for SHA-2 224 [255:224] for SHA-2
                                            // 256
#define SHAMD5_O_IDIGEST_B       0x00000024  // WRITE: Inner / Initial Digest
                                            // [95:64] for MD5 [127:96] for
                                            // SHA-1 [223:192] for SHA-2 / HMAC
                                            // Key [319:288] for HMAC key proc
                                            // READ: Intermediate / Inner Digest
                                            // [95:64] for MD5 [127:96] for
                                            // SHA-1 [223:192] for SHA-2 /
                                            // Result Digest/MAC [95:64] for MD5
                                            // [127:96] for SHA-1 [191:160] for
                                            // SHA-2 224 [223:192] for SHA-2 256
#define SHAMD5_O_IDIGEST_C       0x00000028  // WRITE: Inner / Initial Digest
                                            // [63:32] for MD5 [95:64] for SHA-1
                                            // [191:160] for SHA- 2 / HMAC Key
                                            // [351:320] for HMAC key proc READ:
                                            // Intermediate / Inner Digest
                                            // [63:32] for MD5 [95:64] for SHA-1
                                            // [191:160] for SHA-2 / Result
                                            // Digest/MAC [63:32] for MD5
                                            // [95:64] for SHA-1 [159:128] for
                                            // SHA-2 224 [191:160] for SHA-2 256
#define SHAMD5_O_IDIGEST_D       0x0000002C  // WRITE: Inner / Initial Digest
                                            // [31:0] for MD5 [63:32] for SHA-1
                                            // [159:128] for SHA-2 / HMAC Key
                                            // [383:352] for HMAC key proc READ:
                                            // Intermediate / Inner Digest
                                            // [31:0] for MD5 [63:32] for SHA-1
                                            // [159:128] for SHA-2 / Result
                                            // Digest/MAC [31:0] for MD5 [63:32]
                                            // for SHA-1 [127:96] for SHA-2 224
                                            // [159:128] for SHA-2 256
#define SHAMD5_O_IDIGEST_E       0x00000030  // WRITE: Inner / Initial Digest
                                            // [31:0] for SHA-1 [127:96] for
                                            // SHA-2 / HMAC Key [415:384] for
                                            // HMAC key proc READ: Intermediate
                                            // / Inner Digest [31:0] for SHA-1
                                            // [127:96] for SHA-2 / Result
                                            // Digest/MAC [31:0] for SHA-1
                                            // [95:64] for SHA-2 224 [127:96]
                                            // for SHA-2 256
#define SHAMD5_O_IDIGEST_F       0x00000034  // WRITE: Inner / Initial Digest
                                            // [95:64] for SHA-2 / HMAC Key
                                            // [447:416] for HMAC key proc READ:
                                            // Intermediate / Inner Digest
                                            // [95:64] for SHA-2 / Result
                                            // Digest/MAC [63:32] for SHA-2 224
                                            // [95:64] for SHA-2 256
#define SHAMD5_O_IDIGEST_G       0x00000038  // WRITE: Inner / Initial Digest
                                            // [63:32] for SHA-2 / HMAC Key
                                            // [479:448] for HMAC key proc READ:
                                            // Intermediate / Inner Digest
                                            // [63:32] for SHA-2 / Result
                                            // Digest/MAC [31:0] for SHA-2 224
                                            // [63:32] for SHA-2 256
#define SHAMD5_O_IDIGEST_H       0x0000003C  // WRITE: Inner / Initial Digest
                                            // [31:0] for SHA-2 / HMAC Key
                                            // [511:480] for HMAC key proc READ:
                                            // Intermediate / Inner Digest
                                            // [31:0] for SHA-2 / Result
                                            // Digest/MAC [31:0] for SHA-2 256
#define SHAMD5_O_DIGEST_COUNT    0x00000040  // WRITE: Initial Digest Count
                                            // ([31:6] only [5:0] assumed 0)
                                            // READ: Result / IntermediateDigest
                                            // Count The initial digest byte
                                            // count for hash/HMAC continue
                                            // operations (HMAC Key Processing =
                                            // 0 and Use Algorithm Constants =
                                            // 0) on the Secure World must be
                                            // written to this register prior to
                                            // starting the operation by writing
                                            // to S_HASH_MODE. When either HMAC
                                            // Key Processing is 1 or Use
                                            // Algorithm Constants is 1 this
                                            // register does not need to be
                                            // written it will be overwritten
                                            // with 64 (1 hash block of key XOR
                                            // ipad) or 0 respectively
                                            // automatically. When starting a
                                            // HMAC operation from pre-computes
                                            // (HMAC Key Processing is 0) then
                                            // the value 64 must be written here
                                            // to compensate for the appended
                                            // key XOR ipad block. Note that the
                                            // value written should always be a
                                            // 64 byte multiple the lower 6 bits
                                            // written are ignored. The updated
                                            // digest byte count (initial digest
                                            // byte count + bytes processed) can
                                            // be read from this register when
                                            // the status register indicates
                                            // that the operation is done or
                                            // suspended due to a context switch
                                            // request or when a Secure World
                                            // context out DMA is requested. In
                                            // Advanced DMA mode when not
                                            // suspended with a partial result
                                            // reading the SHAMD5_DIGEST_COUNT
                                            // register triggers the Hash/HMAC
                                            // Engine to start the next context
                                            // input DMA. Therefore reading the
                                            // SHAMD5_DIGEST_COUNT register
                                            // should always be the last
                                            // context-read action if not
                                            // suspended with a partial result
                                            // (i.e. PartHashReady interrupt not
                                            // pending).
#define SHAMD5_O_MODE            0x00000044  // Register SHAMD5_MODE
#define SHAMD5_O_LENGTH          0x00000048  // WRITE: Block Length / Remaining
                                            // Byte Count (bytes) READ:
                                            // Remaining Byte Count. The value
                                            // programmed MUST be a 64-byte
                                            // multiple if Close Hash is set to
                                            // 0. This register is also the
                                            // trigger to start processing: once
                                            // this register is written the core
                                            // will commence requesting input
                                            // data via DMA or IRQ (if
                                            // programmed length > 0) and start
                                            // processing. The remaining byte
                                            // count for the active operation
                                            // can be read from this register
                                            // when the interrupt status
                                            // register indicates that the
                                            // operation is suspended due to a
                                            // context switch request.
#define SHAMD5_O_DATA0_IN        0x00000080  // Data input message 0
#define SHAMD5_O_DATA1_IN        0x00000084  // Data input message 1
#define SHAMD5_O_DATA2_IN        0x00000088  // Data input message 2
#define SHAMD5_O_DATA3_IN        0x0000008C  // Data input message 3
#define SHAMD5_O_DATA4_IN        0x00000090  // Data input message 4
#define SHAMD5_O_DATA5_IN        0x00000094  // Data input message 5
#define SHAMD5_O_DATA6_IN        0x00000098  // Data input message 6
#define SHAMD5_O_DATA7_IN        0x0000009C  // Data input message 7
#define SHAMD5_O_DATA8_IN        0x000000A0  // Data input message 8
#define SHAMD5_O_DATA9_IN        0x000000A4  // Data input message 9
#define SHAMD5_O_DATA10_IN       0x000000A8  // Data input message 10
#define SHAMD5_O_DATA11_IN       0x000000AC  // Data input message 11
#define SHAMD5_O_DATA12_IN       0x000000B0  // Data input message 12
#define SHAMD5_O_DATA13_IN       0x000000B4  // Data input message 13
#define SHAMD5_O_DATA14_IN       0x000000B8  // Data input message 14
#define SHAMD5_O_DATA15_IN       0x000000BC  // Data input message 15
#define SHAMD5_O_REVISION        0x00000100  // Register SHAMD5_REV
#define SHAMD5_O_SYSCONFIG       0x00000110  // Register SHAMD5_SYSCONFIG
#define SHAMD5_O_SYSSTATUS       0x00000114  // Register SHAMD5_SYSSTATUS
#define SHAMD5_O_IRQSTATUS       0x00000118  // Register SHAMD5_IRQSTATUS
#define SHAMD5_O_IRQENABLE       0x0000011C  // Register SHAMD5_IRQENABLE. The
                                            // SHAMD5_IRQENABLE register contains
                                            // an enable bit for each unique
                                            // interrupt for the public side. An
                                            // interrupt is enabled when both
                                            // the global enable in
                                            // SHAMD5_SYSCONFIG (PIT_en) and the
                                            // bit in this register are both set
                                            // to 1. An interrupt that is
                                            // enabled is propagated to the
                                            // SINTREQUEST_P output. Please note
                                            // that the dedicated partial hash
                                            // output (SINTREQUEST_PART_P) is
                                            // not affected by this register it
                                            // is only affected by the global
                                            // enable SHAMD5_SYSCONFIG (PIT_en).
#define SHAMD5_O_HASH512_ODIGEST_A \
                                0x00000200

#define SHAMD5_O_HASH512_ODIGEST_B \
                                0x00000204

#define SHAMD5_O_HASH512_ODIGEST_C \
                                0x00000208

#define SHAMD5_O_HASH512_ODIGEST_D \
                                0x0000020C

#define SHAMD5_O_HASH512_ODIGEST_E \
                                0x00000210

#define SHAMD5_O_HASH512_ODIGEST_F \
                                0x00000214

#define SHAMD5_O_HASH512_ODIGEST_G \
                                0x00000218

#define SHAMD5_O_HASH512_ODIGEST_H \
                                0x0000021C

#define SHAMD5_O_HASH512_ODIGEST_I \
                                0x00000220

#define SHAMD5_O_HASH512_ODIGEST_J \
                                0x00000224

#define SHAMD5_O_HASH512_ODIGEST_K \
                                0x00000228

#define SHAMD5_O_HASH512_ODIGEST_L \
                                0x0000022C

#define SHAMD5_O_HASH512_ODIGEST_M \
                                0x00000230

#define SHAMD5_O_HASH512_ODIGEST_N \
                                0x00000234

#define SHAMD5_O_HASH512_ODIGEST_O \
                                0x00000238

#define SHAMD5_O_HASH512_ODIGEST_P \
                                0x0000023C

#define SHAMD5_O_HASH512_IDIGEST_A \
                                0x00000240

#define SHAMD5_O_HASH512_IDIGEST_B \
                                0x00000244

#define SHAMD5_O_HASH512_IDIGEST_C \
                                0x00000248

#define SHAMD5_O_HASH512_IDIGEST_D \
                                0x0000024C

#define SHAMD5_O_HASH512_IDIGEST_E \
                                0x00000250

#define SHAMD5_O_HASH512_IDIGEST_F \
                                0x00000254

#define SHAMD5_O_HASH512_IDIGEST_G \
                                0x00000258

#define SHAMD5_O_HASH512_IDIGEST_H \
                                0x0000025C

#define SHAMD5_O_HASH512_IDIGEST_I \
                                0x00000260

#define SHAMD5_O_HASH512_IDIGEST_J \
                                0x00000264

#define SHAMD5_O_HASH512_IDIGEST_K \
                                0x00000268

#define SHAMD5_O_HASH512_IDIGEST_L \
                                0x0000026C

#define SHAMD5_O_HASH512_IDIGEST_M \
                                0x00000270

#define SHAMD5_O_HASH512_IDIGEST_N \
                                0x00000274

#define SHAMD5_O_HASH512_IDIGEST_O \
                                0x00000278

#define SHAMD5_O_HASH512_IDIGEST_P \
                                0x0000027C

#define SHAMD5_O_HASH512_DIGEST_COUNT \
                                0x00000280

#define SHAMD5_O_HASH512_MODE    0x00000284
#define SHAMD5_O_HASH512_LENGTH  0x00000288



//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_ODIGEST_A register.
//
//******************************************************************************
#define SHAMD5_ODIGEST_A_DATA_M  0xFFFFFFFF  // data
#define SHAMD5_ODIGEST_A_DATA_S  0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_ODIGEST_B register.
//
//******************************************************************************
#define SHAMD5_ODIGEST_B_DATA_M  0xFFFFFFFF  // data
#define SHAMD5_ODIGEST_B_DATA_S  0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_ODIGEST_C register.
//
//******************************************************************************
#define SHAMD5_ODIGEST_C_DATA_M  0xFFFFFFFF  // data
#define SHAMD5_ODIGEST_C_DATA_S  0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_ODIGEST_D register.
//
//******************************************************************************
#define SHAMD5_ODIGEST_D_DATA_M  0xFFFFFFFF  // data
#define SHAMD5_ODIGEST_D_DATA_S  0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_ODIGEST_E register.
//
//******************************************************************************
#define SHAMD5_ODIGEST_E_DATA_M  0xFFFFFFFF  // data
#define SHAMD5_ODIGEST_E_DATA_S  0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_ODIGEST_F register.
//
//******************************************************************************
#define SHAMD5_ODIGEST_F_DATA_M  0xFFFFFFFF  // data
#define SHAMD5_ODIGEST_F_DATA_S  0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_ODIGEST_G register.
//
//******************************************************************************
#define SHAMD5_ODIGEST_G_DATA_M  0xFFFFFFFF  // data
#define SHAMD5_ODIGEST_G_DATA_S  0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_ODIGEST_H register.
//
//******************************************************************************
#define SHAMD5_ODIGEST_H_DATA_M  0xFFFFFFFF  // data
#define SHAMD5_ODIGEST_H_DATA_S  0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_IDIGEST_A register.
//
//******************************************************************************
#define SHAMD5_IDIGEST_A_DATA_M  0xFFFFFFFF  // data
#define SHAMD5_IDIGEST_A_DATA_S  0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_IDIGEST_B register.
//
//******************************************************************************
#define SHAMD5_IDIGEST_B_DATA_M  0xFFFFFFFF  // data
#define SHAMD5_IDIGEST_B_DATA_S  0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_IDIGEST_C register.
//
//******************************************************************************
#define SHAMD5_IDIGEST_C_DATA_M  0xFFFFFFFF  // data
#define SHAMD5_IDIGEST_C_DATA_S  0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_IDIGEST_D register.
//
//******************************************************************************
#define SHAMD5_IDIGEST_D_DATA_M  0xFFFFFFFF  // data
#define SHAMD5_IDIGEST_D_DATA_S  0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_IDIGEST_E register.
//
//******************************************************************************
#define SHAMD5_IDIGEST_E_DATA_M  0xFFFFFFFF  // data
#define SHAMD5_IDIGEST_E_DATA_S  0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_IDIGEST_F register.
//
//******************************************************************************
#define SHAMD5_IDIGEST_F_DATA_M  0xFFFFFFFF  // data
#define SHAMD5_IDIGEST_F_DATA_S  0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_IDIGEST_G register.
//
//******************************************************************************
#define SHAMD5_IDIGEST_G_DATA_M  0xFFFFFFFF  // data
#define SHAMD5_IDIGEST_G_DATA_S  0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_IDIGEST_H register.
//
//******************************************************************************
#define SHAMD5_IDIGEST_H_DATA_M  0xFFFFFFFF  // data
#define SHAMD5_IDIGEST_H_DATA_S  0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_DIGEST_COUNT register.
//
//******************************************************************************
#define SHAMD5_DIGEST_COUNT_DATA_M \
                                0xFFFFFFFF  // data

#define SHAMD5_DIGEST_COUNT_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_MODE register.
//
//******************************************************************************
#define SHAMD5_MODE_HMAC_OUTER_HASH \
                                0x00000080  // The HMAC Outer Hash is performed
                                            // on the hash digest when the inner
                                            // hash hash finished (block length
                                            // exhausted and final hash
                                            // performed if close_hash is 1).
                                            // This bit should normally be set
                                            // together with close_hash to
                                            // finish the inner hash first or
                                            // Block Length should be zero (HMAC
                                            // continue with the just outer hash
                                            // to be done). Auto cleared
                                            // internally when outer hash
                                            // performed. 0 No operation 1 hmac
                                            // processing

#define SHAMD5_MODE_HMAC_KEY_PROC \
                                0x00000020  // Performs HMAC key processing on
                                            // the 512 bit HMAC key loaded into
                                            // the SHAMD5_IDIGEST_{A to H} and
                                            // SHAMD5_ODIGEST_{A to H} register
                                            // block. Once HMAC key processing
                                            // is finished this bit is
                                            // automatically cleared and the
                                            // resulting Inner and Outer digest
                                            // is available from
                                            // SHAMD5_IDIGEST_{A to H} and
                                            // SHAMD5_ODIGEST_{A to H}
                                            // respectively after which regular
                                            // hash processing (using
                                            // SHAMD5_IDIGEST_{A to H} as initial
                                            // digest) will commence until the
                                            // Block Length is exhausted. 0 No
                                            // operation. 1 Hmac processing.

#define SHAMD5_MODE_CLOSE_HASH   0x00000010  // Performs the padding the
                                            // hash/HMAC will be 'closed' at the
                                            // end of the block as per
                                            // MD5/SHA-1/SHA-2 specification
                                            // (i.e. appropriate padding is
                                            // added) or no padding is done
                                            // allowing the hash to be continued
                                            // later. However if the hash/HMAC
                                            // is not closed then the Block
                                            // Length MUST be a multiple of 64
                                            // bytes to ensure correct
                                            // operation. Auto cleared
                                            // internally when hash closed. 0 No
                                            // padding hash computation can be
                                            // contimued. 1 Last packet will be
                                            // padded.
#define SHAMD5_MODE_ALGO_CONSTANT \
                                0x00000008  // The initial digest register will
                                            // be overwritten with the algorithm
                                            // constants for the selected
                                            // algorithm when hashing and the
                                            // initial digest count register
                                            // will be reset to 0. This will
                                            // start a normal hash operation.
                                            // When continuing an existing hash
                                            // or when performing an HMAC
                                            // operation this register must be
                                            // set to 0 and the
                                            // intermediate/inner digest or HMAC
                                            // key and digest count need to be
                                            // written to the context input
                                            // registers prior to writing
                                            // SHAMD5_MODE. Auto cleared
                                            // internally after first block
                                            // processed. 0 Use pre-calculated
                                            // digest (from an other operation)
                                            // 1 Use constants of the selected
                                            // algo.

#define SHAMD5_MODE_ALGO_M       0x00000006  // These bits select the hash
                                            // algorithm to be used for
                                            // processing: 0x0 md5_128 algorithm
                                            // 0x1 sha1_160 algorithm 0x2
                                            // sha2_224 algorithm 0x3 sha2_256
                                            // algorithm
#define SHAMD5_MODE_ALGO_S       1
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_LENGTH register.
//
//******************************************************************************
#define SHAMD5_LENGTH_DATA_M     0xFFFFFFFF  // data
#define SHAMD5_LENGTH_DATA_S     0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_DATA0_IN register.
//
//******************************************************************************
#define SHAMD5_DATA0_IN_DATA0_IN_M \
                                0xFFFFFFFF  // data

#define SHAMD5_DATA0_IN_DATA0_IN_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_DATA1_IN register.
//
//******************************************************************************
#define SHAMD5_DATA1_IN_DATA1_IN_M \
                                0xFFFFFFFF  // data

#define SHAMD5_DATA1_IN_DATA1_IN_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_DATA2_IN register.
//
//******************************************************************************
#define SHAMD5_DATA2_IN_DATA2_IN_M \
                                0xFFFFFFFF  // data

#define SHAMD5_DATA2_IN_DATA2_IN_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_DATA3_IN register.
//
//******************************************************************************
#define SHAMD5_DATA3_IN_DATA3_IN_M \
                                0xFFFFFFFF  // data

#define SHAMD5_DATA3_IN_DATA3_IN_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_DATA4_IN register.
//
//******************************************************************************
#define SHAMD5_DATA4_IN_DATA4_IN_M \
                                0xFFFFFFFF  // data

#define SHAMD5_DATA4_IN_DATA4_IN_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_DATA5_IN register.
//
//******************************************************************************
#define SHAMD5_DATA5_IN_DATA5_IN_M \
                                0xFFFFFFFF  // data

#define SHAMD5_DATA5_IN_DATA5_IN_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_DATA6_IN register.
//
//******************************************************************************
#define SHAMD5_DATA6_IN_DATA6_IN_M \
                                0xFFFFFFFF  // data

#define SHAMD5_DATA6_IN_DATA6_IN_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_DATA7_IN register.
//
//******************************************************************************
#define SHAMD5_DATA7_IN_DATA7_IN_M \
                                0xFFFFFFFF  // data

#define SHAMD5_DATA7_IN_DATA7_IN_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_DATA8_IN register.
//
//******************************************************************************
#define SHAMD5_DATA8_IN_DATA8_IN_M \
                                0xFFFFFFFF  // data

#define SHAMD5_DATA8_IN_DATA8_IN_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_DATA9_IN register.
//
//******************************************************************************
#define SHAMD5_DATA9_IN_DATA9_IN_M \
                                0xFFFFFFFF  // data

#define SHAMD5_DATA9_IN_DATA9_IN_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_DATA10_IN register.
//
//******************************************************************************
#define SHAMD5_DATA10_IN_DATA10_IN_M \
                                0xFFFFFFFF  // data

#define SHAMD5_DATA10_IN_DATA10_IN_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_DATA11_IN register.
//
//******************************************************************************
#define SHAMD5_DATA11_IN_DATA11_IN_M \
                                0xFFFFFFFF  // data

#define SHAMD5_DATA11_IN_DATA11_IN_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_DATA12_IN register.
//
//******************************************************************************
#define SHAMD5_DATA12_IN_DATA12_IN_M \
                                0xFFFFFFFF  // data

#define SHAMD5_DATA12_IN_DATA12_IN_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_DATA13_IN register.
//
//******************************************************************************
#define SHAMD5_DATA13_IN_DATA13_IN_M \
                                0xFFFFFFFF  // data

#define SHAMD5_DATA13_IN_DATA13_IN_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_DATA14_IN register.
//
//******************************************************************************
#define SHAMD5_DATA14_IN_DATA14_IN_M \
                                0xFFFFFFFF  // data

#define SHAMD5_DATA14_IN_DATA14_IN_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_DATA15_IN register.
//
//******************************************************************************
#define SHAMD5_DATA15_IN_DATA15_IN_M \
                                0xFFFFFFFF  // data

#define SHAMD5_DATA15_IN_DATA15_IN_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_REVISION register.
//
//******************************************************************************
#define SHAMD5_REVISION_SCHEME_M 0xC0000000
#define SHAMD5_REVISION_SCHEME_S 30
#define SHAMD5_REVISION_FUNC_M   0x0FFF0000  // Function indicates a software
                                            // compatible module family. If
                                            // there is no level of software
                                            // compatibility a new Func number
                                            // (and hence REVISION) should be
                                            // assigned.
#define SHAMD5_REVISION_FUNC_S   16
#define SHAMD5_REVISION_R_RTL_M  0x0000F800  // RTL Version (R) maintained by IP
                                            // design owner. RTL follows a
                                            // numbering such as X.Y.R.Z which
                                            // are explained in this table. R
                                            // changes ONLY when: (1) PDS
                                            // uploads occur which may have been
                                            // due to spec changes (2) Bug fixes
                                            // occur (3) Resets to '0' when X or
                                            // Y changes. Design team has an
                                            // internal 'Z' (customer invisible)
                                            // number which increments on every
                                            // drop that happens due to DV and
                                            // RTL updates. Z resets to 0 when R
                                            // increments.
#define SHAMD5_REVISION_R_RTL_S  11
#define SHAMD5_REVISION_X_MAJOR_M \
                                0x00000700  // Major Revision (X) maintained by
                                            // IP specification owner. X changes
                                            // ONLY when: (1) There is a major
                                            // feature addition. An example
                                            // would be adding Master Mode to
                                            // Utopia Level2. The Func field (or
                                            // Class/Type in old PID format)
                                            // will remain the same. X does NOT
                                            // change due to: (1) Bug fixes (2)
                                            // Change in feature parameters.

#define SHAMD5_REVISION_X_MAJOR_S 8
#define SHAMD5_REVISION_CUSTOM_M 0x000000C0
#define SHAMD5_REVISION_CUSTOM_S 6
#define SHAMD5_REVISION_Y_MINOR_M \
                                0x0000003F  // Minor Revision (Y) maintained by
                                            // IP specification owner. Y changes
                                            // ONLY when: (1) Features are
                                            // scaled (up or down). Flexibility
                                            // exists in that this feature
                                            // scalability may either be
                                            // represented in the Y change or a
                                            // specific register in the IP that
                                            // indicates which features are
                                            // exactly available. (2) When
                                            // feature creeps from Is-Not list
                                            // to Is list. But this may not be
                                            // the case once it sees silicon; in
                                            // which case X will change. Y does
                                            // NOT change due to: (1) Bug fixes
                                            // (2) Typos or clarifications (3)
                                            // major functional/feature
                                            // change/addition/deletion. Instead
                                            // these changes may be reflected
                                            // via R S X as applicable. Spec
                                            // owner maintains a
                                            // customer-invisible number 'S'
                                            // which changes due to: (1)
                                            // Typos/clarifications (2) Bug
                                            // documentation. Note that this bug
                                            // is not due to a spec change but
                                            // due to implementation.
                                            // Nevertheless the spec tracks the
                                            // IP bugs. An RTL release (say for
                                            // silicon PG1.1) that occurs due to
                                            // bug fix should document the
                                            // corresponding spec number (X.Y.S)
                                            // in its release notes.

#define SHAMD5_REVISION_Y_MINOR_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_SYSCONFIG register.
//
//******************************************************************************
#define SHAMD5_SYSCONFIG_PADVANCED \
                                0x00000080  // If set to 1 Advanced mode is
                                            // enabled for the Secure World. If
                                            // set to 0 Legacy mode is enabled
                                            // for the Secure World.

#define SHAMD5_SYSCONFIG_PCONT_SWT \
                                0x00000040  // Finish all pending data and
                                            // context DMA input requests (but
                                            // will not assert any new requests)
                                            // finish processing all data in the
                                            // module and provide a saved
                                            // context (partial hash result
                                            // updated digest count remaining
                                            // length updated mode information
                                            // where applicable) for the last
                                            // operation that was interrupted so
                                            // that it can be resumed later.

#define SHAMD5_SYSCONFIG_PDMA_EN 0x00000008
#define SHAMD5_SYSCONFIG_PIT_EN  0x00000004
//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_SYSSTATUS register.
//
//******************************************************************************
#define SHAMD5_SYSSTATUS_RESETDONE \
                                0x00000001  // data

//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_IRQSTATUS register.
//
//******************************************************************************
#define SHAMD5_IRQSTATUS_CONTEXT_READY \
                                0x00000008  // indicates that the secure side
                                            // context input registers are
                                            // available for a new context for
                                            // the next packet to be processed.

#define SHAMD5_IRQSTATUS_PARTHASH_READY \
                                0x00000004  // After a secure side context
                                            // switch request this bit will read
                                            // as 1 indicating that the saved
                                            // context is available from the
                                            // secure side context output
                                            // registers. Note that if the
                                            // context switch request coincides
                                            // with a final hash (when hashing)
                                            // or an outer hash (when doing
                                            // HMAC) that PartHashReady will not
                                            // become active but a regular
                                            // Output Ready will occur instead
                                            // (indicating that the result is
                                            // final and therefore no
                                            // continuation is required).

#define SHAMD5_IRQSTATUS_INPUT_READY \
                                0x00000002  // indicates that the secure side
                                            // data FIFO is ready to receive the
                                            // next 64 byte data block.

#define SHAMD5_IRQSTATUS_OUTPUT_READY \
                                0x00000001  // Indicates that a (partial)
                                            // result or saved context is
                                            // available from the secure side
                                            // context output registers.

//******************************************************************************
//
// The following are defines for the bit fields in the SHAMD5_O_IRQENABLE register.
//
//******************************************************************************
#define SHAMD5_IRQENABLE_M_CONTEXT_READY \
                                0x00000008  // mask for context ready

#define SHAMD5_IRQENABLE_M_PARTHASH_READY \
                                0x00000004  // mask for partial hash

#define SHAMD5_IRQENABLE_M_INPUT_READY \
                                0x00000002  // mask for input_ready

#define SHAMD5_IRQENABLE_M_OUTPUT_READY \
                                0x00000001  // mask for output_ready

//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_ODIGEST_A register.
//
//******************************************************************************
#define SHAMD5_HASH512_ODIGEST_A_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_ODIGEST_A_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_ODIGEST_B register.
//
//******************************************************************************
#define SHAMD5_HASH512_ODIGEST_B_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_ODIGEST_B_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_ODIGEST_C register.
//
//******************************************************************************
#define SHAMD5_HASH512_ODIGEST_C_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_ODIGEST_C_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_ODIGEST_D register.
//
//******************************************************************************
#define SHAMD5_HASH512_ODIGEST_D_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_ODIGEST_D_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_ODIGEST_E register.
//
//******************************************************************************
#define SHAMD5_HASH512_ODIGEST_E_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_ODIGEST_E_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_ODIGEST_F register.
//
//******************************************************************************
#define SHAMD5_HASH512_ODIGEST_F_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_ODIGEST_F_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_ODIGEST_G register.
//
//******************************************************************************
#define SHAMD5_HASH512_ODIGEST_G_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_ODIGEST_G_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_ODIGEST_H register.
//
//******************************************************************************
#define SHAMD5_HASH512_ODIGEST_H_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_ODIGEST_H_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_ODIGEST_I register.
//
//******************************************************************************
#define SHAMD5_HASH512_ODIGEST_I_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_ODIGEST_I_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_ODIGEST_J register.
//
//******************************************************************************
#define SHAMD5_HASH512_ODIGEST_J_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_ODIGEST_J_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_ODIGEST_K register.
//
//******************************************************************************
#define SHAMD5_HASH512_ODIGEST_K_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_ODIGEST_K_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_ODIGEST_L register.
//
//******************************************************************************
#define SHAMD5_HASH512_ODIGEST_L_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_ODIGEST_L_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_ODIGEST_M register.
//
//******************************************************************************
#define SHAMD5_HASH512_ODIGEST_M_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_ODIGEST_M_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_ODIGEST_N register.
//
//******************************************************************************
#define SHAMD5_HASH512_ODIGEST_N_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_ODIGEST_N_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_ODIGEST_O register.
//
//******************************************************************************
#define SHAMD5_HASH512_ODIGEST_O_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_ODIGEST_O_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_ODIGEST_P register.
//
//******************************************************************************
#define SHAMD5_HASH512_ODIGEST_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_ODIGEST_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_IDIGEST_A register.
//
//******************************************************************************
#define SHAMD5_HASH512_IDIGEST_A_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_IDIGEST_A_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_IDIGEST_B register.
//
//******************************************************************************
#define SHAMD5_HASH512_IDIGEST_B_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_IDIGEST_B_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_IDIGEST_C register.
//
//******************************************************************************
#define SHAMD5_HASH512_IDIGEST_C_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_IDIGEST_C_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_IDIGEST_D register.
//
//******************************************************************************
#define SHAMD5_HASH512_IDIGEST_D_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_IDIGEST_D_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_IDIGEST_E register.
//
//******************************************************************************
#define SHAMD5_HASH512_IDIGEST_E_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_IDIGEST_E_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_IDIGEST_F register.
//
//******************************************************************************
#define SHAMD5_HASH512_IDIGEST_F_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_IDIGEST_F_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_IDIGEST_G register.
//
//******************************************************************************
#define SHAMD5_HASH512_IDIGEST_G_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_IDIGEST_G_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_IDIGEST_H register.
//
//******************************************************************************
#define SHAMD5_HASH512_IDIGEST_H_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_IDIGEST_H_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_IDIGEST_I register.
//
//******************************************************************************
#define SHAMD5_HASH512_IDIGEST_I_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_IDIGEST_I_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_IDIGEST_J register.
//
//******************************************************************************
#define SHAMD5_HASH512_IDIGEST_J_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_IDIGEST_J_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_IDIGEST_K register.
//
//******************************************************************************
#define SHAMD5_HASH512_IDIGEST_K_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_IDIGEST_K_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_IDIGEST_L register.
//
//******************************************************************************
#define SHAMD5_HASH512_IDIGEST_L_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_IDIGEST_L_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_IDIGEST_M register.
//
//******************************************************************************
#define SHAMD5_HASH512_IDIGEST_M_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_IDIGEST_M_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_IDIGEST_N register.
//
//******************************************************************************
#define SHAMD5_HASH512_IDIGEST_N_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_IDIGEST_N_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_IDIGEST_O register.
//
//******************************************************************************
#define SHAMD5_HASH512_IDIGEST_O_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_IDIGEST_O_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_IDIGEST_P register.
//
//******************************************************************************
#define SHAMD5_HASH512_IDIGEST_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_IDIGEST_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_DIGEST_COUNT register.
//
//******************************************************************************
#define SHAMD5_HASH512_DIGEST_COUNT_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_DIGEST_COUNT_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_MODE register.
//
//******************************************************************************
#define SHAMD5_HASH512_MODE_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_MODE_DATA_S 0
//******************************************************************************
//
// The following are defines for the bit fields in the
// SHAMD5_O_HASH512_LENGTH register.
//
//******************************************************************************
#define SHAMD5_HASH512_LENGTH_DATA_M \
                                0xFFFFFFFF

#define SHAMD5_HASH512_LENGTH_DATA_S 0



#endif // __HW_SHAMD5_H__