212 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			212 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/*
 | 
						|
    HASH driver header file
 | 
						|
 | 
						|
    HASH driver header file.
 | 
						|
 | 
						|
    @file       hash.h
 | 
						|
    @ingroup    mIDrvMisc_HASH
 | 
						|
    @note       Nothing
 | 
						|
 | 
						|
    Copyright   Novatek Microelectronics Corp. 2020.  All rights reserved.
 | 
						|
*/
 | 
						|
 | 
						|
#ifndef _HASH_H
 | 
						|
#define _HASH_H
 | 
						|
 | 
						|
#include <kwrap/nvt_type.h>
 | 
						|
 | 
						|
/**
 | 
						|
    @addtogroup mIDrvMisc_HASH
 | 
						|
*/
 | 
						|
//@{
 | 
						|
/**
 | 
						|
    Hash engine clock rate
 | 
						|
*/
 | 
						|
typedef enum
 | 
						|
{
 | 
						|
    HASH_CLOCK_240MHz = 0x00,        ///< Select HASH clock rate 240 MHz
 | 
						|
    HASH_CLOCK_320MHz,               ///< Select HASH clock rate 320 MHz
 | 
						|
    HASH_CLOCK_Reserved,             ///< Select HASH clock rate Reserved
 | 
						|
    HASH_CLOCK_PLL9,                 ///< Select HASH clock rate PLL9(for IDE/ETH)
 | 
						|
 | 
						|
    HASH_CLOCK_RATE_NUM,
 | 
						|
    ENUM_DUMMY4WORD(HASH_CLOCK_RATE)
 | 
						|
} HASH_CLOCK_RATE;
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
    Hash engine Algorithm
 | 
						|
*/
 | 
						|
typedef enum
 | 
						|
{
 | 
						|
    HASH_MODE_SHA1 = 0x00,            ///< Select HASH mode SHA1
 | 
						|
    HASH_MODE_SHA256,                 ///< Select HASH mode SHA256
 | 
						|
    HASH_MODE_HMAC_SHA1,              ///< Select HASH mode HMAC_SHA1
 | 
						|
    HASH_MODE_HMAC_SHA256,            ///< Select HASH mode HMAC_SHA256
 | 
						|
 | 
						|
    HASH_MODE_NUM,
 | 
						|
    ENUM_DUMMY4WORD(HASH_MODE)
 | 
						|
} HASH_MODE;
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
    Hash engine Select Iniatial Vector source
 | 
						|
*/
 | 
						|
typedef enum
 | 
						|
{
 | 
						|
    HASH_IV_Default=0,                ///< Set HASH IV with default value of algorithm.
 | 
						|
    HASH_IV_REG,                      ///< Configured by using register HASH_IV_0 to HASH_IV_7
 | 
						|
 | 
						|
    HASH_IV_NUM,
 | 
						|
    ENUM_DUMMY4WORD(HASH_IV)
 | 
						|
} HASH_IV;
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
    Hash engine Access Mode
 | 
						|
*/
 | 
						|
typedef enum
 | 
						|
{
 | 
						|
    HASH_ACCMODE_PIO=0,               ///< Select HASH Access mode PIO
 | 
						|
    HASH_ACCMODE_DMA,                 ///< Select HASH Access mode DMA
 | 
						|
 | 
						|
    HASH_ACCMODE_NUM,
 | 
						|
    ENUM_DUMMY4WORD(HASH_ACCMODE)
 | 
						|
} HASH_ACCMODE;
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
    Hash engine Access Mode
 | 
						|
*/
 | 
						|
typedef enum
 | 
						|
{
 | 
						|
    HASH_DMA_PAD_DISABLE=0,               ///< Select HASH DMA mode Padding Disable
 | 
						|
    HASH_DMA_PAD_ENABLE,                  ///< Select HASH DMA mode Padding Enable
 | 
						|
 | 
						|
    HASH_DMA_PAD_NUM,
 | 
						|
    ENUM_DUMMY4WORD(HASH_DMA_PAD)
 | 
						|
} HASH_DMA_PAD;
 | 
						|
 | 
						|
/**
 | 
						|
    Hash funciotn bypass or not at DMA mode.
 | 
						|
*/
 | 
						|
typedef enum
 | 
						|
{
 | 
						|
    HASH_BYPASS_NORMAL=0,             ///< Set HASH engine as normal mode
 | 
						|
    HASH_BYPASS_HwCopy,               ///< Set HASH engine as HwCopy
 | 
						|
 | 
						|
    HASH_BYPASS_NUM,
 | 
						|
    ENUM_DUMMY4WORD(HASH_BYPASS)
 | 
						|
} HASH_BYPASS;
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
    Set Hash funciotn as initail state.
 | 
						|
*/
 | 
						|
typedef enum
 | 
						|
{
 | 
						|
    HASH_INI_NORMAL=0,                ///< Set HASH engine as normal state
 | 
						|
    HASH_INI_STATE,                   ///< Set HASH engine as initail state
 | 
						|
 | 
						|
    HASH_INI_NUM,
 | 
						|
    ENUM_DUMMY4WORD(HASH_INI)
 | 
						|
} HASH_INI;
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
    Set Hash funciotn as internal padding state.
 | 
						|
*/
 | 
						|
typedef enum
 | 
						|
{
 | 
						|
    HASH_IPAD_NORMAL=0,              ///< Set HASH engine as normal state
 | 
						|
    HASH_IPAD_STATE,                 ///< Set HASH engine as internal padding state
 | 
						|
 | 
						|
    HASH_IPAD_NUM,
 | 
						|
    ENUM_DUMMY4WORD(HASH_IPAD)
 | 
						|
} HASH_IPAD;
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
    Set Hash funciotn as external padding state.
 | 
						|
*/
 | 
						|
typedef enum
 | 
						|
{
 | 
						|
    HASH_OPAD_NORMAL=0,              ///< Set HASH engine as normal state
 | 
						|
    HASH_OPAD_STATE,                  ///< Set HASH engine as internal padding state
 | 
						|
 | 
						|
    HASH_OPAD_NUM,
 | 
						|
    ENUM_DUMMY4WORD(HASH_OPAD)
 | 
						|
} HASH_OPAD;
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
    Hash configuration identifier
 | 
						|
 | 
						|
    @note For hash_setConfig()
 | 
						|
*/
 | 
						|
typedef enum
 | 
						|
{
 | 
						|
    HASH_CONFIG_ID_CLOCK_RATE,          ///< Select HASH engine internal clock rate usage
 | 
						|
                                        ///< Context can be any of:
 | 
						|
                                        ///< - @b HASH_CLOCK_240MHz:     Internal clock rate 240MHz
 | 
						|
                                        ///< - @b HASH_CLOCK_320MHz:     Internal clock rate 320MHz
 | 
						|
                                        ///< - @b HASH_CLOCK_PLL9MHz:    Internal clock rate 280MHz
 | 
						|
    HASH_CONFIG_ID_MODE,                ///< Select HASH engine Algorithm
 | 
						|
                                        ///< Context can be any of:
 | 
						|
                                        ///< - @b HASH_MODE_SHA1:        Select HASH mode SHA1
 | 
						|
                                        ///< - @b HASH_MODE_SHA256:      Select HASH mode SHA256
 | 
						|
                                        ///< - @b HASH_MODE_HMAC_SHA1:   Select HASH mode HMAC_SHA1
 | 
						|
                                        ///< - @b HASH_MODE_HMAC_SHA256: Select HASH mode HMAC_SHA256
 | 
						|
                                        ///< - @b HASH_MODE_HwCopy:      Select Bypass HASH function
 | 
						|
    HASH_CONFIG_ID_IV_SEL,              ///< Select HASH engine Iniatial Vector source
 | 
						|
                                        ///< Context can be any of:
 | 
						|
                                        ///< - @b HASH_IV_Defaut:        Set HASH IV with default value of algorithm.
 | 
						|
                                        ///< - @b HASH_IV_REG:           Configured by using register HASH_IV_0 to HASH_IV_7
 | 
						|
    HASH_CONFIG_ID_ACCMODE,             ///< Select HASH engine Access Mode
 | 
						|
                                        ///< Context can be any of:
 | 
						|
                                        ///< - @b HASH_ACCMODE_PIO:      Select HASH Access mode PIO
 | 
						|
                                        ///< - @b HASH_ACCMODE_DMA:      Select HASH Access mode DMA
 | 
						|
    HASH_CONFIG_ID_DMA_PAD,             ///< Select HASH engine DMA mode Padding Enable
 | 
						|
                                        ///< Context can be any of:
 | 
						|
                                        ///< - @b HASH_DMA_PAD_DISABLE:  Select HASH DMA mode Padding Disable
 | 
						|
                                        ///< - @b HASH_DMA_PAD_ENABLE:   Select HASH DMA mode Padding Enable
 | 
						|
    HASH_CONFIG_ID_BYPASS,              ///< Select HASH engine DMA mode bypass or not for HwCopy.
 | 
						|
                                        ///< Context can be any of:
 | 
						|
                                        ///< - @b HASH_BYPASS_NORMAL:    Set HASH engine as normal mode
 | 
						|
                                        ///< - @b HASH_BYPASS_HwCopy:    Set HASH engine as HwCopy
 | 
						|
    HASH_CONFIG_ID_INI,                 ///< Set HASH engine DMA mode as initail state.
 | 
						|
                                        ///< Context can be any of:
 | 
						|
                                        ///< - @b HASH_INI_NORMAL:       Set HASH engine as normal state
 | 
						|
                                        ///< - @b HASH_INI_STATE:        Set HASH engine as initail state
 | 
						|
    HASH_CONFIG_ID_IPAD,                ///< Set HASH engine DMA mode as internal padding state.
 | 
						|
                                        ///< Context can be any of:
 | 
						|
                                        ///< - @b HASH_IPAD_NORMAL:      Set HASH engine as normal state
 | 
						|
                                        ///< - @b HASH_IPAD_STATE:       Set HASH engine as internal padding state
 | 
						|
    HASH_CONFIG_ID_OPAD,                ///< Set HASH engine DMA mode as external padding state.
 | 
						|
                                        ///< Context can be any of:
 | 
						|
                                        ///< - @b HASH_OPAD_NORMAL:      Set HASH engine as normal state
 | 
						|
                                        ///< - @b HASH_OPAD_STATE:       Set HASH engine as external padding state
 | 
						|
    ENUM_DUMMY4WORD(HASH_CONFIG_ID)
 | 
						|
} HASH_CONFIG_ID;
 | 
						|
 | 
						|
 | 
						|
extern ER   hash_setConfig(HASH_CONFIG_ID cfgid, UINT32 cfgvalue);
 | 
						|
extern ER   hash_open(void);
 | 
						|
extern ER   hash_close(void);
 | 
						|
extern void hash_pio_enable(UINT8* ucInput, UINT32 len, BOOL bmac);
 | 
						|
extern void hash_setKey(UINT8 * ucKey, UINT32 uiLen);
 | 
						|
extern void hash_setIV(UINT8 * ucIV);
 | 
						|
extern void hash_getOutput(UINT8 * Output, UINT32 len);
 | 
						|
extern void hash_dma_enable(UINT32 addr, UINT32 size, UINT32 pad_len);
 | 
						|
extern void hash_dma_HwCopy(UINT32 Srcaddr, UINT32 Dstaddr, UINT32 size);
 | 
						|
extern BOOL hashpadding(UINT8* ucInput, UINT32 len);
 | 
						|
 | 
						|
#if defined(_NVT_FPGA_) || defined(_NVT_EMULATION_)
 | 
						|
extern void hash_dma_HwCopy_without_flush(UINT32 Srcaddr, UINT32 Dstaddr, UINT32 size);
 | 
						|
extern void hash_dma_enable_random_terminate(UINT32 addr, UINT32 size, UINT32 pad_len);
 | 
						|
#endif
 | 
						|
 | 
						|
//@}
 | 
						|
 | 
						|
#endif /* _HASH_H */
 |