// Generated register defines for hmac

// Copyright information found in source file:
// Copyright lowRISC contributors.

// Licensing information found in source file:
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0

#ifndef _HMAC_REG_DEFS_
#define _HMAC_REG_DEFS_

// Interrupt State Register
#define HMAC_INTR_STATE(id) (HMAC##id##_BASE_ADDR + 0x0)
#define HMAC_INTR_STATE_HMAC_DONE 0
#define HMAC_INTR_STATE_FIFO_FULL 1

// Interrupt Enable Register
#define HMAC_INTR_ENABLE(id) (HMAC##id##_BASE_ADDR + 0x4)
#define HMAC_INTR_ENABLE_HMAC_DONE 0
#define HMAC_INTR_ENABLE_FIFO_FULL 1

// Interrupt Test Register
#define HMAC_INTR_TEST(id) (HMAC##id##_BASE_ADDR + 0x8)
#define HMAC_INTR_TEST_HMAC_DONE 0
#define HMAC_INTR_TEST_FIFO_FULL 1

// HMAC Configuration register
#define HMAC_CFG(id) (HMAC##id##_BASE_ADDR + 0xc)
#define HMAC_CFG_HMAC_EN 0
#define HMAC_CFG_SHA_EN 1
#define HMAC_CFG_ENDIAN_SWAP 2
#define HMAC_CFG_DIGEST_SWAP 3

// HMAC command register
#define HMAC_CMD(id) (HMAC##id##_BASE_ADDR + 0x10)
#define HMAC_CMD_HASH_START 0
#define HMAC_CMD_HASH_PROCESS 1

// HMAC Status register
#define HMAC_STATUS(id) (HMAC##id##_BASE_ADDR + 0x14)
#define HMAC_STATUS_FIFO_EMPTY 0
#define HMAC_STATUS_FIFO_FULL 1
#define HMAC_STATUS_FIFO_DEPTH_MASK 0x1f
#define HMAC_STATUS_FIFO_DEPTH_OFFSET 4

// Randomize internal secret registers.
#define HMAC_WIPE_SECRET(id) (HMAC##id##_BASE_ADDR + 0x18)

// HMAC Secret Key
#define HMAC_KEY0(id) (HMAC##id##_BASE_ADDR + 0x1c)

// HMAC Secret Key
#define HMAC_KEY1(id) (HMAC##id##_BASE_ADDR + 0x20)

// HMAC Secret Key
#define HMAC_KEY2(id) (HMAC##id##_BASE_ADDR + 0x24)

// HMAC Secret Key
#define HMAC_KEY3(id) (HMAC##id##_BASE_ADDR + 0x28)

// HMAC Secret Key
#define HMAC_KEY4(id) (HMAC##id##_BASE_ADDR + 0x2c)

// HMAC Secret Key
#define HMAC_KEY5(id) (HMAC##id##_BASE_ADDR + 0x30)

// HMAC Secret Key
#define HMAC_KEY6(id) (HMAC##id##_BASE_ADDR + 0x34)

// HMAC Secret Key
#define HMAC_KEY7(id) (HMAC##id##_BASE_ADDR + 0x38)

// Digest output. If HMAC is disabled, the register shows result of SHA256
#define HMAC_DIGEST0(id) (HMAC##id##_BASE_ADDR + 0x3c)

// Digest output. If HMAC is disabled, the register shows result of SHA256
#define HMAC_DIGEST1(id) (HMAC##id##_BASE_ADDR + 0x40)

// Digest output. If HMAC is disabled, the register shows result of SHA256
#define HMAC_DIGEST2(id) (HMAC##id##_BASE_ADDR + 0x44)

// Digest output. If HMAC is disabled, the register shows result of SHA256
#define HMAC_DIGEST3(id) (HMAC##id##_BASE_ADDR + 0x48)

// Digest output. If HMAC is disabled, the register shows result of SHA256
#define HMAC_DIGEST4(id) (HMAC##id##_BASE_ADDR + 0x4c)

// Digest output. If HMAC is disabled, the register shows result of SHA256
#define HMAC_DIGEST5(id) (HMAC##id##_BASE_ADDR + 0x50)

// Digest output. If HMAC is disabled, the register shows result of SHA256
#define HMAC_DIGEST6(id) (HMAC##id##_BASE_ADDR + 0x54)

// Digest output. If HMAC is disabled, the register shows result of SHA256
#define HMAC_DIGEST7(id) (HMAC##id##_BASE_ADDR + 0x58)

// Received Message Length in bits [31:0].
#define HMAC_MSG_LENGTH_LOWER(id) (HMAC##id##_BASE_ADDR + 0x5c)

// Received Message Length in bits [63:32]
#define HMAC_MSG_LENGTH_UPPER(id) (HMAC##id##_BASE_ADDR + 0x60)

// Memory area: Message FIFO. Any address starts from offset 0x800 to 0xFFF
#define HMAC_MSG_FIFO(base) ((base) + 0x800)
#define HMAC_MSG_FIFO_SIZE_WORDS 512
#define HMAC_MSG_FIFO_SIZE_BYTES 2048
#endif  // _HMAC_REG_DEFS_
// End generated register defines for hmac
