/********************************************************************************
 * Marvell GPL License Option
 *
 * If you received this File from Marvell, you may opt to use, redistribute and/or
 * modify this File in accordance with the terms and conditions of the General
 * Public License Version 2, June 1991 (the "GPL License"), a copy of which is
 * available along with the File in the license.txt file or by writing to the Free
 * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
 * on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
 *
 * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
 * DISCLAIMED.  The GPL License provides additional details about this warranty
 * disclaimer.
 ******************************************************************************/

/**********************************************************************************************************************
*	DO NOT EDIT! Automatically generated by "Interface Specification Compiler" ver-1.0
*			<ansi-c> :    customer_keystore_spec.h
**********************************************************************************************************************/
#ifdef	_customer_keystore_spec_h
#else
#define	_customer_keystore_spec_h	"_keystore_spec_h >>>    "
#include	"ctypes.h"

#pragma	pack(4)

#ifdef	__cplusplus
	extern	"C"
	{
#endif



/**********************************************************************************************************************
*	INTERFACE: StreamHdr
*	@  FUNC
*		%unsigned  12  rdFunc  0
*						*  *
*						*  PC of the read function pointer
*		%unsigned  4  uStrmType
*						*  *
*						*  This field only valid for Debug purpose
*		%unsigned  12  wrFunc  0
*						*  *
*						*  PC of the write function pointer
*		%unsigned  4  algnFactor  0
*						*  *
*						*  If uStrmType == DSStreamIn type, the minimum pre-load buffer size is (1 << algnFactor)
*						*  if uStrmType == DSStreamOut type, the minimum output buffer size is (1 << algnFactor) except the forced flush or interleaved streams
*	@  INFO
*		%unsigned  16  datPtr  0
*						*  *
*						*  Stream type specific data field.
*						*  For uStrmType == DSStreamIn, this filed is the pointer of the data memory pool.
*						*  For uStrmType == DSStreamOut, This field is the pointer of DSOutputModule
*						*  For uStrmType == DTCMStream, this field is referring to the data block base.
*		%unsigned  16  ctrlPtr  0
*						*  *
*						*  the address of the DTCM FIFO Control FIFO
**********************************************************************************************************************/
#ifdef	h_StreamHdr
#else
#define	h_StreamHdr

#define	\
	AR_StreamHdr \
		2
#define	\
	AB_StreamHdr \
		3

typedef struct SIE_StreamHdr {

	#define	RA_StreamHdr_FUNC 			0x00000
	#define	w32StreamHdr_FUNC 			{										\
					UNSG32				uFUNC_rdFunc				 : 12;		\
					UNSG32				uFUNC_uStrmType				 :  4;		\
					UNSG32				uFUNC_wrFunc				 : 12;		\
					UNSG32				uFUNC_algnFactor			 :  4;		\
										}
	/* @'00000 */	union {	UNSG32		u32StreamHdr_FUNC;
								struct	w32StreamHdr_FUNC;
										};

	/* [11: 0] */	#define	  BA_StreamHdr_FUNC_rdFunc				 0x00000
	/* ---:--- */	#define	    bStreamHdr_FUNC_rdFunc				   12 /*bit*/
	/* ---:--- */	#define	LSb32StreamHdr_FUNC_rdFunc				    0 /*:11*/
	/* ---:--- */	#define	MSK32StreamHdr_FUNC_rdFunc				       0x00000FFF
	/* ---:--- */	#define	GET32StreamHdr_FUNC_rdFunc(r32)				 (((r32)>> 0)&0x0FFF)
	/* ---:--- */	#define	GET16StreamHdr_FUNC_rdFunc(r16)				 (((r16)>> 0)&0x0FFF)
	/* ---:--- */	#define	SET32StreamHdr_FUNC_rdFunc(r32,v)			do{(r32)&=~(0x0FFF<< 0);(r32)|=((v)&0x0FFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16StreamHdr_FUNC_rdFunc(r16,v)			do{(r16)&=~(0x0FFF<< 0);(r16)|=((v)&0x0FFF)<< 0;}while(0)

	/* [15:12] */	#define	  BA_StreamHdr_FUNC_uStrmType			 0x00001
	/* ---:--- */	#define	    bStreamHdr_FUNC_uStrmType			    4 /*bit*/
	/* ---:--- */	#define	LSb32StreamHdr_FUNC_uStrmType			   12 /*:15*/
	/* ---:--- */	#define	MSK32StreamHdr_FUNC_uStrmType			       0x0000F000
	/* ---:--- */	#define	GET32StreamHdr_FUNC_uStrmType(r32)			 (((r32)>>12)&0x000F)
	/* ---:--- */	#define	GET16StreamHdr_FUNC_uStrmType(r16)			 (((r16)>>12)&0x000F)
	/* ---:--- */	#define	SET32StreamHdr_FUNC_uStrmType(r32,v)		do{(r32)&=~(0x000F<<12);(r32)|=((v)&0x000F)<<12;}while(0)
	/* ---:--- */	#define	SET16StreamHdr_FUNC_uStrmType(r16,v)		do{(r16)&=~(0x000F<<12);(r16)|=((v)&0x000F)<<12;}while(0)

	/* [27:16] */	#define	  BA_StreamHdr_FUNC_wrFunc				 0x00002
	/* ---:--- */	#define	    bStreamHdr_FUNC_wrFunc				   12 /*bit*/
	/* ---:--- */	#define	LSb32StreamHdr_FUNC_wrFunc				   16 /*:27*/
	/* ---:--- */	#define	MSK32StreamHdr_FUNC_wrFunc				       0x0FFF0000
	/* ---:--- */	#define	GET32StreamHdr_FUNC_wrFunc(r32)				 (((r32)>>16)&0x0FFF)
	/* ---:--- */	#define	GET16StreamHdr_FUNC_wrFunc(r16)				 (((r16)>> 0)&0x0FFF)
	/* ---:--- */	#define	SET32StreamHdr_FUNC_wrFunc(r32,v)			do{(r32)&=~(0x0FFF<<16);(r32)|=((v)&0x0FFF)<<16;}while(0)
	/* ---:--- */	#define	SET16StreamHdr_FUNC_wrFunc(r16,v)			do{(r16)&=~(0x0FFF<< 0);(r16)|=((v)&0x0FFF)<< 0;}while(0)

	/* [31:28] */	#define	  BA_StreamHdr_FUNC_algnFactor			 0x00003
	/* ---:--- */	#define	    bStreamHdr_FUNC_algnFactor			    4 /*bit*/
	/* ---:--- */	#define	LSb32StreamHdr_FUNC_algnFactor			   28 /*:31*/
	/* ---:--- */	#define	MSK32StreamHdr_FUNC_algnFactor			       0xF0000000
	/* ---:--- */	#define	GET32StreamHdr_FUNC_algnFactor(r32)			 (((r32)>>28)&0x000F)
	/* ---:--- */	#define	GET16StreamHdr_FUNC_algnFactor(r16)			 (((r16)>>12)&0x000F)
	/* ---:--- */	#define	SET32StreamHdr_FUNC_algnFactor(r32,v)		do{(r32)&=~(0x000F<<28);(r32)|=((v)&0x000F)<<28;}while(0)
	/* ---:--- */	#define	SET16StreamHdr_FUNC_algnFactor(r16,v)		do{(r16)&=~(0x000F<<12);(r16)|=((v)&0x000F)<<12;}while(0)

	#define	RA_StreamHdr_INFO 			0x00004
	#define	w32StreamHdr_INFO 			{										\
					UNSG32				uINFO_datPtr				 : 16;		\
					UNSG32				uINFO_ctrlPtr				 : 16;		\
										}
	/* @'00004 */	union {	UNSG32		u32StreamHdr_INFO;
								struct	w32StreamHdr_INFO;
										};

	/* [15: 0] */	#define	  BA_StreamHdr_INFO_datPtr				 0x00004
	/* ---:--- */	#define	    bStreamHdr_INFO_datPtr				   16 /*bit*/
	/* ---:--- */	#define	LSb32StreamHdr_INFO_datPtr				    0 /*:15*/
	/* ---:--- */	#define	MSK32StreamHdr_INFO_datPtr				       0x0000FFFF
	/* ---:--- */	#define	GET32StreamHdr_INFO_datPtr(r32)				 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16StreamHdr_INFO_datPtr(r16)				 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32StreamHdr_INFO_datPtr(r32,v)			do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16StreamHdr_INFO_datPtr(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_StreamHdr_INFO_ctrlPtr				 0x00006
	/* ---:--- */	#define	    bStreamHdr_INFO_ctrlPtr				   16 /*bit*/
	/* ---:--- */	#define	LSb32StreamHdr_INFO_ctrlPtr				   16 /*:31*/
	/* ---:--- */	#define	MSK32StreamHdr_INFO_ctrlPtr				       0xFFFF0000
	/* ---:--- */	#define	GET32StreamHdr_INFO_ctrlPtr(r32)			 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16StreamHdr_INFO_ctrlPtr(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32StreamHdr_INFO_ctrlPtr(r32,v)			do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16StreamHdr_INFO_ctrlPtr(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

} SIE_StreamHdr;

	#define	dftStreamHdr_FUNC 			0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32StreamHdr_FUNC;
										} T32StreamHdr_FUNC;
	#define	dftStreamHdr_INFO 			0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32StreamHdr_INFO;
										} T32StreamHdr_INFO;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	StreamHdr_drvrd (SIE_StreamHdr *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	StreamHdr_drvwr (SIE_StreamHdr *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	StreamHdr_reset (SIE_StreamHdr *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	StreamHdr_check(p,pie,ps8name,hfpErrLOG)		StreamHdr_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	StreamHdr_print(p,    ps8name,hfpErrLOG)		StreamHdr_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	StreamHdr_cmp   (SIE_StreamHdr *p, SIE_StreamHdr *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	StreamHdr_import(SIE_StreamHdr *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	StreamHdr_export(SIE_StreamHdr *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: StreamHdr
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: HBOADDR
*	@
*		%unsigned  16  uAddr  0
**********************************************************************************************************************/
#ifdef	h_HBOADDR
#else
#define	h_HBOADDR

#define	\
	AR_HBOADDR \
		1
#define	\
	AB_HBOADDR \
		2

typedef struct SIE_HBOADDR {

	#define	RA_HBOADDR_D0th_ 			ISC_USE_ONLY	0x00000
	#define	w32HBOADDR_D0th_ 			{										\
					UNSG32				u_uAddr						 : 16;		\
					UNSG32				_x00000	: 16;							\
										}
	/* @'00000 */				struct	w32HBOADDR_D0th_;

	/* [15: 0] */	#define	  BA_HBOADDR_uAddr						 0x00000
	/* ---:--- */	#define	    bHBOADDR_uAddr						   16 /*bit*/
	/* ---:--- */	#define	LSb32HBOADDR_uAddr						    0 /*:15*/
	/* ---:--- */	#define	MSK32HBOADDR_uAddr						       0x0000FFFF
	/* ---:--- */	#define	GET32HBOADDR_uAddr(r32)						 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16HBOADDR_uAddr(r16)						 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32HBOADDR_uAddr(r32,v)					do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16HBOADDR_uAddr(r16,v)					do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

} SIE_HBOADDR;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	HBOADDR_drvrd (SIE_HBOADDR *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	HBOADDR_drvwr (SIE_HBOADDR *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	HBOADDR_reset (SIE_HBOADDR *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	HBOADDR_check(p,pie,ps8name,hfpErrLOG)		HBOADDR_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	HBOADDR_print(p,    ps8name,hfpErrLOG)		HBOADDR_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	HBOADDR_cmp   (SIE_HBOADDR *p, SIE_HBOADDR *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	HBOADDR_import(SIE_HBOADDR *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	HBOADDR_export(SIE_HBOADDR *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: HBOADDR
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: UINT32
*	@  V32
*		%unsigned  16  uV16L  0
*		%unsigned  16  uV16H  0
**********************************************************************************************************************/
#ifdef	h_UINT32
#else
#define	h_UINT32

#define	\
	AR_UINT32 \
		1
#define	\
	AB_UINT32 \
		2

typedef struct SIE_UINT32 {

	#define	RA_UINT32_V32 				0x00000
	#define	w32UINT32_V32 				{										\
					UNSG32				uV32_uV16L					 : 16;		\
					UNSG32				uV32_uV16H					 : 16;		\
										}
	/* @'00000 */	union {	UNSG32		u32UINT32_V32;
								struct	w32UINT32_V32;
										};

	/* [15: 0] */	#define	  BA_UINT32_V32_uV16L					 0x00000
	/* ---:--- */	#define	    bUINT32_V32_uV16L					   16 /*bit*/
	/* ---:--- */	#define	LSb32UINT32_V32_uV16L					    0 /*:15*/
	/* ---:--- */	#define	MSK32UINT32_V32_uV16L					       0x0000FFFF
	/* ---:--- */	#define	GET32UINT32_V32_uV16L(r32)					 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16UINT32_V32_uV16L(r16)					 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32UINT32_V32_uV16L(r32,v)				do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16UINT32_V32_uV16L(r16,v)				do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_UINT32_V32_uV16H					 0x00002
	/* ---:--- */	#define	    bUINT32_V32_uV16H					   16 /*bit*/
	/* ---:--- */	#define	LSb32UINT32_V32_uV16H					   16 /*:31*/
	/* ---:--- */	#define	MSK32UINT32_V32_uV16H					       0xFFFF0000
	/* ---:--- */	#define	GET32UINT32_V32_uV16H(r32)					 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16UINT32_V32_uV16H(r16)					 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32UINT32_V32_uV16H(r32,v)				do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16UINT32_V32_uV16H(r16,v)				do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

} SIE_UINT32;

	#define	dftUINT32_V32 				0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32UINT32_V32;
										} T32UINT32_V32;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	UINT32_drvrd (SIE_UINT32 *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	UINT32_drvwr (SIE_UINT32 *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	UINT32_reset (SIE_UINT32 *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	UINT32_check(p,pie,ps8name,hfpErrLOG)		UINT32_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	UINT32_print(p,    ps8name,hfpErrLOG)		UINT32_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	UINT32_cmp   (SIE_UINT32 *p, SIE_UINT32 *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	UINT32_import(SIE_UINT32 *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	UINT32_export(SIE_UINT32 *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: UINT32
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: UINT64
*		$UINT32  v32  REG  [2]
**********************************************************************************************************************/
#ifdef	h_UINT64
#else
#define	h_UINT64

#define	\
	AR_UINT64 \
		2
#define	\
	AB_UINT64 \
		3

typedef struct SIE_UINT64 {

	#define	RA_UINT64_v32 				0x00000
	/* @'00000 */	SIE_UINT32 					ie_v32				 [2];
					#define	 arr_UINT64_v32 						  2

} SIE_UINT64;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	UINT64_drvrd (SIE_UINT64 *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	UINT64_drvwr (SIE_UINT64 *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	UINT64_reset (SIE_UINT64 *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	UINT64_check(p,pie,ps8name,hfpErrLOG)		UINT64_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	UINT64_print(p,    ps8name,hfpErrLOG)		UINT64_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	UINT64_cmp   (SIE_UINT64 *p, SIE_UINT64 *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	UINT64_import(SIE_UINT64 *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	UINT64_export(SIE_UINT64 *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: UINT64
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: UINT128
*		$UINT32  v32  REG  [4]
**********************************************************************************************************************/
#ifdef	h_UINT128
#else
#define	h_UINT128

#define	\
	AR_UINT128 \
		4
#define	\
	AB_UINT128 \
		4

typedef struct SIE_UINT128 {

	#define	RA_UINT128_v32 				0x00000
	/* @'00000 */	SIE_UINT32 					ie_v32				 [4];
					#define	 arr_UINT128_v32 						  4

} SIE_UINT128;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	UINT128_drvrd (SIE_UINT128 *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	UINT128_drvwr (SIE_UINT128 *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	UINT128_reset (SIE_UINT128 *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	UINT128_check(p,pie,ps8name,hfpErrLOG)		UINT128_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	UINT128_print(p,    ps8name,hfpErrLOG)		UINT128_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	UINT128_cmp   (SIE_UINT128 *p, SIE_UINT128 *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	UINT128_import(SIE_UINT128 *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	UINT128_export(SIE_UINT128 *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: UINT128
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: UINT1024
*		$UINT128  v128  REG  [8]
**********************************************************************************************************************/
#ifdef	h_UINT1024
#else
#define	h_UINT1024

#define	\
	AR_UINT1024 \
		32
#define	\
	AB_UINT1024 \
		7

typedef struct SIE_UINT1024 {

	#define	RA_UINT1024_v128 			0x00000
	/* @'00000 */	SIE_UINT128 				ie_v128				 [8];
					#define	 arr_UINT1024_v128 						  8

} SIE_UINT1024;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	UINT1024_drvrd (SIE_UINT1024 *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	UINT1024_drvwr (SIE_UINT1024 *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	UINT1024_reset (SIE_UINT1024 *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	UINT1024_check(p,pie,ps8name,hfpErrLOG)		UINT1024_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	UINT1024_print(p,    ps8name,hfpErrLOG)		UINT1024_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	UINT1024_cmp   (SIE_UINT1024 *p, SIE_UINT1024 *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	UINT1024_import(SIE_UINT1024 *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	UINT1024_export(SIE_UINT1024 *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: UINT1024
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: FIGOSYSLIB
*	@
*			:  INVALID_BIU_PTR  0xFFFF
*						*  *
*						*  Invalid BIU pointer
*			:  INVALID_FIGOEVENT_FLAG  0xFF
*			:  MAX_BLK_NUM  16
*						*  *
*						*  Maxim block number
*			:  MAX_DS_CMD_ID  0x100
*						*  *
*						*  Maxim data streamer command ID
*			:  FIFODIR_INPUT  0
*						*  *
*						*  Input FIFO from DDR to DTCM
*			:  FIFODIR_OUTPUT  1
*						*  *
*						*  Output FIFO from DTCM to DDR
*			:  DS_CMDFIFO_IDX  0
*						*  *
*						*  Data streamer command FIFO index
*			:  STRMTYPE_DTCM  1
*						*  *
*						*  DTCM stream type
*			:  STRMTYPE_DSIN  2
*						*  *
*						*  DRAM to SRAM input stream type
*			:  STRMTYPE_DSOUT  3
*						*  *
*						*  SRAM to DTCM output stream type
*			:  MAX_CTRL_SIZE  56
*						*  *
*						*  Maximum control information size
*			:  INVALID_DS_BASE  0xffffffff
*						*  *
*						*  Invalid data streamer base address
*	@
*		%unsigned  32  dummy
**********************************************************************************************************************/
#ifdef	h_FIGOSYSLIB
#else
#define	h_FIGOSYSLIB

#define	\
	AR_FIGOSYSLIB \
		1
#define	\
	AB_FIGOSYSLIB \
		2

	#define	FIGOSYSLIB_INVALID_BIU_PTR 	0xFFFF
	#define	FIGOSYSLIB_INVALID_FIGOEVENT_FLAG 0xFF
	#define	FIGOSYSLIB_MAX_BLK_NUM 		0x10
	#define	FIGOSYSLIB_MAX_DS_CMD_ID 	0x100
	#define	FIGOSYSLIB_FIFODIR_INPUT 	0x0
	#define	FIGOSYSLIB_FIFODIR_OUTPUT 	0x1
	#define	FIGOSYSLIB_DS_CMDFIFO_IDX 	0x0
	#define	FIGOSYSLIB_STRMTYPE_DTCM 	0x1
	#define	FIGOSYSLIB_STRMTYPE_DSIN 	0x2
	#define	FIGOSYSLIB_STRMTYPE_DSOUT 	0x3
	#define	FIGOSYSLIB_MAX_CTRL_SIZE 	0x38
	#define	FIGOSYSLIB_INVALID_DS_BASE 	0xFFFFFFFF

typedef struct SIE_FIGOSYSLIB {

	#define	RA_FIGOSYSLIB_D0th_ 		ISC_USE_ONLY	0x00000
	#define	w32FIGOSYSLIB_D0th_ 		{										\
					UNSG32				u_dummy						 : 32;		\
										}
	/* @'00000 */				struct	w32FIGOSYSLIB_D0th_;

	/* [31: 0] */	#define	  BA_FIGOSYSLIB_dummy					 0x00000
	/* ---:--- */	#define	    bFIGOSYSLIB_dummy					   32 /*bit*/
	/* ---:--- */	#define	LSb32FIGOSYSLIB_dummy					    0 /*:31*/
	/* ---:--- */	#define	MSK32FIGOSYSLIB_dummy					       0xFFFFFFFF
	/* ---:--- */	#define	GET32FIGOSYSLIB_dummy(r32)					 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16FIGOSYSLIB_dummy(r16)					 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32FIGOSYSLIB_dummy(r32,v)				do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16FIGOSYSLIB_dummy(r16,v)				do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

} SIE_FIGOSYSLIB;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	FIGOSYSLIB_drvrd (SIE_FIGOSYSLIB *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	FIGOSYSLIB_drvwr (SIE_FIGOSYSLIB *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	FIGOSYSLIB_reset (SIE_FIGOSYSLIB *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	FIGOSYSLIB_check(p,pie,ps8name,hfpErrLOG)		FIGOSYSLIB_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	FIGOSYSLIB_print(p,    ps8name,hfpErrLOG)		FIGOSYSLIB_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	FIGOSYSLIB_cmp   (SIE_FIGOSYSLIB *p, SIE_FIGOSYSLIB *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	FIGOSYSLIB_import(SIE_FIGOSYSLIB *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	FIGOSYSLIB_export(SIE_FIGOSYSLIB *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: FIGOSYSLIB
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: FIGOCtrl
*	@  HDR
*		%unsigned  8  uFlag
*		%unsigned  8  SourceId
*		%unsigned  8  OutBufId
*		%unsigned  8  cmdSize
*						*  *
*						*  Total command size
*		%unsigned  32  uSyncPoint
*						*  *
*						*  32 bits offset of the stream where the control information should be affective, 0xFFFFFFFF means immediate commands
*			:  IM_SYNCP  0xFFFFFFFF
**********************************************************************************************************************/
#ifdef	h_FIGOCtrl
#else
#define	h_FIGOCtrl

#define	\
	AR_FIGOCtrl \
		2
#define	\
	AB_FIGOCtrl \
		3

typedef struct SIE_FIGOCtrl {

	#define	RA_FIGOCtrl_HDR 			0x00000
	#define	w32FIGOCtrl_HDR 			{										\
					UNSG32				uHDR_uFlag					 :  8;		\
					UNSG32				uHDR_SourceId				 :  8;		\
					UNSG32				uHDR_OutBufId				 :  8;		\
					UNSG32				uHDR_cmdSize				 :  8;		\
										}
	/* @'00000 */	union {	UNSG32		u32FIGOCtrl_HDR;
								struct	w32FIGOCtrl_HDR;
										};

	/* [ 7: 0] */	#define	  BA_FIGOCtrl_HDR_uFlag					 0x00000
	/* ---:--- */	#define	    bFIGOCtrl_HDR_uFlag					    8 /*bit*/
	/* ---:--- */	#define	LSb32FIGOCtrl_HDR_uFlag					    0 /*: 7*/
	/* ---:--- */	#define	MSK32FIGOCtrl_HDR_uFlag					       0x000000FF
	/* ---:--- */	#define	GET32FIGOCtrl_HDR_uFlag(r32)				 (((r32)>> 0)&0x00FF)
	/* ---:--- */	#define	GET16FIGOCtrl_HDR_uFlag(r16)				 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32FIGOCtrl_HDR_uFlag(r32,v)				do{(r32)&=~(0x00FF<< 0);(r32)|=((v)&0x00FF)<< 0;}while(0)
	/* ---:--- */	#define	SET16FIGOCtrl_HDR_uFlag(r16,v)				do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	/* [15: 8] */	#define	  BA_FIGOCtrl_HDR_SourceId				 0x00001
	/* ---:--- */	#define	    bFIGOCtrl_HDR_SourceId				    8 /*bit*/
	/* ---:--- */	#define	LSb32FIGOCtrl_HDR_SourceId				    8 /*:15*/
	/* ---:--- */	#define	MSK32FIGOCtrl_HDR_SourceId				       0x0000FF00
	/* ---:--- */	#define	GET32FIGOCtrl_HDR_SourceId(r32)				 (((r32)>> 8)&0x00FF)
	/* ---:--- */	#define	GET16FIGOCtrl_HDR_SourceId(r16)				 (((r16)>> 8)&0x00FF)
	/* ---:--- */	#define	SET32FIGOCtrl_HDR_SourceId(r32,v)			do{(r32)&=~(0x00FF<< 8);(r32)|=((v)&0x00FF)<< 8;}while(0)
	/* ---:--- */	#define	SET16FIGOCtrl_HDR_SourceId(r16,v)			do{(r16)&=~(0x00FF<< 8);(r16)|=((v)&0x00FF)<< 8;}while(0)

	/* [23:16] */	#define	  BA_FIGOCtrl_HDR_OutBufId				 0x00002
	/* ---:--- */	#define	    bFIGOCtrl_HDR_OutBufId				    8 /*bit*/
	/* ---:--- */	#define	LSb32FIGOCtrl_HDR_OutBufId				   16 /*:23*/
	/* ---:--- */	#define	MSK32FIGOCtrl_HDR_OutBufId				       0x00FF0000
	/* ---:--- */	#define	GET32FIGOCtrl_HDR_OutBufId(r32)				 (((r32)>>16)&0x00FF)
	/* ---:--- */	#define	GET16FIGOCtrl_HDR_OutBufId(r16)				 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32FIGOCtrl_HDR_OutBufId(r32,v)			do{(r32)&=~(0x00FF<<16);(r32)|=((v)&0x00FF)<<16;}while(0)
	/* ---:--- */	#define	SET16FIGOCtrl_HDR_OutBufId(r16,v)			do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	/* [31:24] */	#define	  BA_FIGOCtrl_HDR_cmdSize				 0x00003
	/* ---:--- */	#define	    bFIGOCtrl_HDR_cmdSize				    8 /*bit*/
	/* ---:--- */	#define	LSb32FIGOCtrl_HDR_cmdSize				   24 /*:31*/
	/* ---:--- */	#define	MSK32FIGOCtrl_HDR_cmdSize				       0xFF000000
	/* ---:--- */	#define	GET32FIGOCtrl_HDR_cmdSize(r32)				 (((r32)>>24)&0x00FF)
	/* ---:--- */	#define	GET16FIGOCtrl_HDR_cmdSize(r16)				 (((r16)>> 8)&0x00FF)
	/* ---:--- */	#define	SET32FIGOCtrl_HDR_cmdSize(r32,v)			do{(r32)&=~(0x00FF<<24);(r32)|=((v)&0x00FF)<<24;}while(0)
	/* ---:--- */	#define	SET16FIGOCtrl_HDR_cmdSize(r16,v)			do{(r16)&=~(0x00FF<< 8);(r16)|=((v)&0x00FF)<< 8;}while(0)

	#define	RA_FIGOCtrl_HDR1 			0x00004
	#define	w32FIGOCtrl_HDR1 			{										\
					UNSG32				uHDR_uSyncPoint				 : 32;		\
										}
	/* @'00004 */	union {	UNSG32		u32FIGOCtrl_HDR1;
								struct	w32FIGOCtrl_HDR1;
										};

	/* [31: 0] */	#define	  BA_FIGOCtrl_HDR_uSyncPoint			 0x00004
	/* ---:--- */	#define	    bFIGOCtrl_HDR_uSyncPoint			   32 /*bit*/
	/* ---:--- */	#define	LSb32FIGOCtrl_HDR_uSyncPoint			    0 /*:31*/
	/* ---:--- */	#define	MSK32FIGOCtrl_HDR_uSyncPoint			       0xFFFFFFFF
	/* ---:--- */	#define	GET32FIGOCtrl_HDR_uSyncPoint(r32)			 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16FIGOCtrl_HDR_uSyncPoint(r16)			 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32FIGOCtrl_HDR_uSyncPoint(r32,v)			do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16FIGOCtrl_HDR_uSyncPoint(r16,v)			do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)
					#define	     FIGOCtrl_HDR_uSyncPoint_IM_SYNCP			0xFFFFFFFF

} SIE_FIGOCtrl;

	#define	dftFIGOCtrl_HDR 			0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32FIGOCtrl_HDR;
										} T32FIGOCtrl_HDR;
	#define	dftFIGOCtrl_HDR1 			0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32FIGOCtrl_HDR1;
										} T32FIGOCtrl_HDR1;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	FIGOCtrl_drvrd (SIE_FIGOCtrl *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	FIGOCtrl_drvwr (SIE_FIGOCtrl *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	FIGOCtrl_reset (SIE_FIGOCtrl *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	FIGOCtrl_check(p,pie,ps8name,hfpErrLOG)		FIGOCtrl_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	FIGOCtrl_print(p,    ps8name,hfpErrLOG)		FIGOCtrl_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	FIGOCtrl_cmp   (SIE_FIGOCtrl *p, SIE_FIGOCtrl *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	FIGOCtrl_import(SIE_FIGOCtrl *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	FIGOCtrl_export(SIE_FIGOCtrl *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: FIGOCtrl
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: FIGOEvent
*	@  CTRLINFO
*		$UINT32  pbData  REG  [14]
*	@  PTRINFO
*		%unsigned  32  nFifoOffset  0
*						*  *
*						*  For non command event, this field indicates the current read or wirte offset. For command event, this field is unused
*		%unsigned  16  uDSFifo32PtrAddr
*						*  *
*						*  Application specific event
*		%unsigned  1  uEnFlag
*		%unsigned  15  Reserved
**********************************************************************************************************************/
#ifdef	h_FIGOEvent
#else
#define	h_FIGOEvent

#define	\
	AR_FIGOEvent \
		16
#define	\
	AB_FIGOEvent \
		6

typedef struct SIE_FIGOEvent {

	#define	RA_FIGOEvent_CTRLINFO 		0x00000
	/* @'00000 */	SIE_UINT32 					ie_pbData			 [14];
					#define	 arr_FIGOEvent_pbData 					  14

	#define	RA_FIGOEvent_PTRINFO 		0x00038
	#define	w32FIGOEvent_PTRINFO 		{										\
					UNSG32				uPTRINFO_nFifoOffset		 : 32;		\
										}
	/* @'00038 */	union {	UNSG32		u32FIGOEvent_PTRINFO;
								struct	w32FIGOEvent_PTRINFO;
										};

	/* [31: 0] */	#define	  BA_FIGOEvent_PTRINFO_nFifoOffset		 0x00038
	/* ---:--- */	#define	    bFIGOEvent_PTRINFO_nFifoOffset		   32 /*bit*/
	/* ---:--- */	#define	LSb32FIGOEvent_PTRINFO_nFifoOffset		    0 /*:31*/
	/* ---:--- */	#define	MSK32FIGOEvent_PTRINFO_nFifoOffset		       0xFFFFFFFF
	/* ---:--- */	#define	GET32FIGOEvent_PTRINFO_nFifoOffset(r32)		 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16FIGOEvent_PTRINFO_nFifoOffset(r16)		 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32FIGOEvent_PTRINFO_nFifoOffset(r32,v)	do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16FIGOEvent_PTRINFO_nFifoOffset(r16,v)	do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_FIGOEvent_PTRINFO1 		0x0003C
	#define	w32FIGOEvent_PTRINFO1 		{										\
					UNSG32				uPTRINFO_uDSFifo32PtrAddr	 : 16;		\
					UNSG32				uPTRINFO_uEnFlag			 :  1;		\
					UNSG32				uPTRINFO_Reserved			 : 15;		\
										}
	/* @'0003C */	union {	UNSG32		u32FIGOEvent_PTRINFO1;
								struct	w32FIGOEvent_PTRINFO1;
										};

	/* [15: 0] */	#define	  BA_FIGOEvent_PTRINFO_uDSFifo32PtrAddr	 0x0003C
	/* ---:--- */	#define	    bFIGOEvent_PTRINFO_uDSFifo32PtrAddr	   16 /*bit*/
	/* ---:--- */	#define	LSb32FIGOEvent_PTRINFO_uDSFifo32PtrAddr	    0 /*:15*/
	/* ---:--- */	#define	MSK32FIGOEvent_PTRINFO_uDSFifo32PtrAddr	       0x0000FFFF
	/* ---:--- */	#define	GET32FIGOEvent_PTRINFO_uDSFifo32PtrAddr(r32) (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16FIGOEvent_PTRINFO_uDSFifo32PtrAddr(r16) (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32FIGOEvent_PTRINFO_uDSFifo32PtrAddr(r32,v)do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16FIGOEvent_PTRINFO_uDSFifo32PtrAddr(r16,v)do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [16:16] */	#define	  BA_FIGOEvent_PTRINFO_uEnFlag			 0x0003E
	/* ---:--- */	#define	    bFIGOEvent_PTRINFO_uEnFlag			    1 /*bit*/
	/* ---:--- */	#define	LSb32FIGOEvent_PTRINFO_uEnFlag			   16 /*:16*/
	/* ---:--- */	#define	MSK32FIGOEvent_PTRINFO_uEnFlag			       0x00010000
	/* ---:--- */	#define	GET32FIGOEvent_PTRINFO_uEnFlag(r32)			 (((r32)>>16)&0x0001)
	/* ---:--- */	#define	GET16FIGOEvent_PTRINFO_uEnFlag(r16)			 (((r16)>> 0)&0x0001)
	/* ---:--- */	#define	SET32FIGOEvent_PTRINFO_uEnFlag(r32,v)		do{(r32)&=~(0x0001<<16);(r32)|=((v)&0x0001)<<16;}while(0)
	/* ---:--- */	#define	SET16FIGOEvent_PTRINFO_uEnFlag(r16,v)		do{(r16)&=~(0x0001<< 0);(r16)|=((v)&0x0001)<< 0;}while(0)

	/* [31:17] */	#define	  BA_FIGOEvent_PTRINFO_Reserved			 0x0003E
	/* ---:--- */	#define	    bFIGOEvent_PTRINFO_Reserved			   15 /*bit*/
	/* ---:--- */	#define	LSb32FIGOEvent_PTRINFO_Reserved			   17 /*:31*/
	/* ---:--- */	#define	MSK32FIGOEvent_PTRINFO_Reserved			       0xFFFE0000
	/* ---:--- */	#define	GET32FIGOEvent_PTRINFO_Reserved(r32)		 (((r32)>>17)&0x7FFF)
	/* ---:--- */	#define	GET16FIGOEvent_PTRINFO_Reserved(r16)		 (((r16)>> 1)&0x7FFF)
	/* ---:--- */	#define	SET32FIGOEvent_PTRINFO_Reserved(r32,v)		do{(r32)&=~(0x7FFF<<17);(r32)|=((v)&0x7FFF)<<17;}while(0)
	/* ---:--- */	#define	SET16FIGOEvent_PTRINFO_Reserved(r16,v)		do{(r16)&=~(0x7FFF<< 1);(r16)|=((v)&0x7FFF)<< 1;}while(0)

} SIE_FIGOEvent;

	#define	dftFIGOEvent_PTRINFO 		0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32FIGOEvent_PTRINFO;
										} T32FIGOEvent_PTRINFO;
	#define	dftFIGOEvent_PTRINFO1 		0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32FIGOEvent_PTRINFO1;
										} T32FIGOEvent_PTRINFO1;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	FIGOEvent_drvrd (SIE_FIGOEvent *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	FIGOEvent_drvwr (SIE_FIGOEvent *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	FIGOEvent_reset (SIE_FIGOEvent *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	FIGOEvent_check(p,pie,ps8name,hfpErrLOG)		FIGOEvent_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	FIGOEvent_print(p,    ps8name,hfpErrLOG)		FIGOEvent_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	FIGOEvent_cmp   (SIE_FIGOEvent *p, SIE_FIGOEvent *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	FIGOEvent_import(SIE_FIGOEvent *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	FIGOEvent_export(SIE_FIGOEvent *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: FIGOEvent
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DTCMFifo
*	@
*		%unsigned  16  nRdOff  0
*						*  *
*						*  Current read offset
*		%unsigned  16  pbBase  0
*						*  *
*						*  DTCM FIFO base address
*	@
*		%unsigned  16  nWrOff  0
*						*  *
*						*  Current write offset
*		%unsigned  16  nMaxSize  0
*						*  *
*						*  MAX size of DTCM FIFO in bytes
**********************************************************************************************************************/
#ifdef	h_DTCMFifo
#else
#define	h_DTCMFifo

#define	\
	AR_DTCMFifo \
		2
#define	\
	AB_DTCMFifo \
		3

typedef struct SIE_DTCMFifo {

	#define	RA_DTCMFifo_D0th_ 			ISC_USE_ONLY	0x00000
	#define	w32DTCMFifo_D0th_ 			{										\
					UNSG32				u_nRdOff					 : 16;		\
					UNSG32				u_pbBase					 : 16;		\
										}
	/* @'00000 */				struct	w32DTCMFifo_D0th_;

	/* [15: 0] */	#define	  BA_DTCMFifo_nRdOff					 0x00000
	/* ---:--- */	#define	    bDTCMFifo_nRdOff					   16 /*bit*/
	/* ---:--- */	#define	LSb32DTCMFifo_nRdOff					    0 /*:15*/
	/* ---:--- */	#define	MSK32DTCMFifo_nRdOff					       0x0000FFFF
	/* ---:--- */	#define	GET32DTCMFifo_nRdOff(r32)					 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DTCMFifo_nRdOff(r16)					 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DTCMFifo_nRdOff(r32,v)					do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DTCMFifo_nRdOff(r16,v)					do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DTCMFifo_pbBase					 0x00002
	/* ---:--- */	#define	    bDTCMFifo_pbBase					   16 /*bit*/
	/* ---:--- */	#define	LSb32DTCMFifo_pbBase					   16 /*:31*/
	/* ---:--- */	#define	MSK32DTCMFifo_pbBase					       0xFFFF0000
	/* ---:--- */	#define	GET32DTCMFifo_pbBase(r32)					 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DTCMFifo_pbBase(r16)					 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DTCMFifo_pbBase(r32,v)					do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DTCMFifo_pbBase(r16,v)					do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DTCMFifo_D1th_ 			ISC_USE_ONLY	0x00004
	#define	w32DTCMFifo_D1th_ 			{										\
					UNSG32				u_nWrOff					 : 16;		\
					UNSG32				u_nMaxSize					 : 16;		\
										}
	/* @'00004 */				struct	w32DTCMFifo_D1th_;

	/* [15: 0] */	#define	  BA_DTCMFifo_nWrOff					 0x00004
	/* ---:--- */	#define	    bDTCMFifo_nWrOff					   16 /*bit*/
	/* ---:--- */	#define	LSb32DTCMFifo_nWrOff					    0 /*:15*/
	/* ---:--- */	#define	MSK32DTCMFifo_nWrOff					       0x0000FFFF
	/* ---:--- */	#define	GET32DTCMFifo_nWrOff(r32)					 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DTCMFifo_nWrOff(r16)					 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DTCMFifo_nWrOff(r32,v)					do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DTCMFifo_nWrOff(r16,v)					do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DTCMFifo_nMaxSize					 0x00006
	/* ---:--- */	#define	    bDTCMFifo_nMaxSize					   16 /*bit*/
	/* ---:--- */	#define	LSb32DTCMFifo_nMaxSize					   16 /*:31*/
	/* ---:--- */	#define	MSK32DTCMFifo_nMaxSize					       0xFFFF0000
	/* ---:--- */	#define	GET32DTCMFifo_nMaxSize(r32)					 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DTCMFifo_nMaxSize(r16)					 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DTCMFifo_nMaxSize(r32,v)				do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DTCMFifo_nMaxSize(r16,v)				do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

} SIE_DTCMFifo;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DTCMFifo_drvrd (SIE_DTCMFifo *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DTCMFifo_drvwr (SIE_DTCMFifo *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DTCMFifo_reset (SIE_DTCMFifo *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DTCMFifo_check(p,pie,ps8name,hfpErrLOG)		DTCMFifo_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DTCMFifo_print(p,    ps8name,hfpErrLOG)		DTCMFifo_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DTCMFifo_cmp   (SIE_DTCMFifo *p, SIE_DTCMFifo *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DTCMFifo_import(SIE_DTCMFifo *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DTCMFifo_export(SIE_DTCMFifo *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DTCMFifo
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DSFifo32
*	@
*		%unsigned  32  nRdOff  0
*						*  *
*						*  Current FIFO read offset from the base address of the FIFO
*	@
*		%unsigned  32  pbBase  0
*						*  *
*						*  32-bits address of the FIFO buffer base in DDR
*	@
*		%unsigned  32  nWrOff  0
*						*  *
*						*  Current FIFO write offset from the base address of the FIFO
*	@
*		%unsigned  32  nMaxSize  0
*						*  *
*						*  MAX size of DS FIFO in bytes
**********************************************************************************************************************/
#ifdef	h_DSFifo32
#else
#define	h_DSFifo32

#define	\
	AR_DSFifo32 \
		4
#define	\
	AB_DSFifo32 \
		4

typedef struct SIE_DSFifo32 {

	#define	RA_DSFifo32_D0th_ 			ISC_USE_ONLY	0x00000
	#define	w32DSFifo32_D0th_ 			{										\
					UNSG32				u_nRdOff					 : 32;		\
										}
	/* @'00000 */				struct	w32DSFifo32_D0th_;

	/* [31: 0] */	#define	  BA_DSFifo32_nRdOff					 0x00000
	/* ---:--- */	#define	    bDSFifo32_nRdOff					   32 /*bit*/
	/* ---:--- */	#define	LSb32DSFifo32_nRdOff					    0 /*:31*/
	/* ---:--- */	#define	MSK32DSFifo32_nRdOff					       0xFFFFFFFF
	/* ---:--- */	#define	GET32DSFifo32_nRdOff(r32)					 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DSFifo32_nRdOff(r16)					 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DSFifo32_nRdOff(r32,v)					do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DSFifo32_nRdOff(r16,v)					do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DSFifo32_D1th_ 			ISC_USE_ONLY	0x00004
	#define	w32DSFifo32_D1th_ 			{										\
					UNSG32				u_pbBase					 : 32;		\
										}
	/* @'00004 */				struct	w32DSFifo32_D1th_;

	/* [31: 0] */	#define	  BA_DSFifo32_pbBase					 0x00004
	/* ---:--- */	#define	    bDSFifo32_pbBase					   32 /*bit*/
	/* ---:--- */	#define	LSb32DSFifo32_pbBase					    0 /*:31*/
	/* ---:--- */	#define	MSK32DSFifo32_pbBase					       0xFFFFFFFF
	/* ---:--- */	#define	GET32DSFifo32_pbBase(r32)					 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DSFifo32_pbBase(r16)					 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DSFifo32_pbBase(r32,v)					do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DSFifo32_pbBase(r16,v)					do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DSFifo32_D2th_ 			ISC_USE_ONLY	0x00008
	#define	w32DSFifo32_D2th_ 			{										\
					UNSG32				u_nWrOff					 : 32;		\
										}
	/* @'00008 */				struct	w32DSFifo32_D2th_;

	/* [31: 0] */	#define	  BA_DSFifo32_nWrOff					 0x00008
	/* ---:--- */	#define	    bDSFifo32_nWrOff					   32 /*bit*/
	/* ---:--- */	#define	LSb32DSFifo32_nWrOff					    0 /*:31*/
	/* ---:--- */	#define	MSK32DSFifo32_nWrOff					       0xFFFFFFFF
	/* ---:--- */	#define	GET32DSFifo32_nWrOff(r32)					 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DSFifo32_nWrOff(r16)					 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DSFifo32_nWrOff(r32,v)					do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DSFifo32_nWrOff(r16,v)					do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DSFifo32_D3th_ 			ISC_USE_ONLY	0x0000C
	#define	w32DSFifo32_D3th_ 			{										\
					UNSG32				u_nMaxSize					 : 32;		\
										}
	/* @'0000C */				struct	w32DSFifo32_D3th_;

	/* [31: 0] */	#define	  BA_DSFifo32_nMaxSize					 0x0000C
	/* ---:--- */	#define	    bDSFifo32_nMaxSize					   32 /*bit*/
	/* ---:--- */	#define	LSb32DSFifo32_nMaxSize					    0 /*:31*/
	/* ---:--- */	#define	MSK32DSFifo32_nMaxSize					       0xFFFFFFFF
	/* ---:--- */	#define	GET32DSFifo32_nMaxSize(r32)					 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DSFifo32_nMaxSize(r16)					 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DSFifo32_nMaxSize(r32,v)				do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DSFifo32_nMaxSize(r16,v)				do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

} SIE_DSFifo32;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DSFifo32_drvrd (SIE_DSFifo32 *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DSFifo32_drvwr (SIE_DSFifo32 *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DSFifo32_reset (SIE_DSFifo32 *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DSFifo32_check(p,pie,ps8name,hfpErrLOG)		DSFifo32_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DSFifo32_print(p,    ps8name,hfpErrLOG)		DSFifo32_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DSFifo32_cmp   (SIE_DSFifo32 *p, SIE_DSFifo32 *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DSFifo32_import(SIE_DSFifo32 *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DSFifo32_export(SIE_DSFifo32 *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DSFifo32
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DTCMBlk
*	@  HDR
*		%unsigned  1  isDSFinished  0
*						*  *
*		%unsigned  15  nReserved  0
*		%unsigned  16  uBackDSID  0
*						*  *
*		%unsigned  16  addrHdr  0
*						*  *
*						*  Address to the block header
*		%unsigned  16  hdrSize  0
*						*  *
*						*  Size of the block header
*	@  DAT
*		$DTCMFifo  dtcmFifo  0
*						*  *
*						*  Bytes of data available in the current data block
**********************************************************************************************************************/
#ifdef	h_DTCMBlk
#else
#define	h_DTCMBlk

#define	\
	AR_DTCMBlk \
		4
#define	\
	AB_DTCMBlk \
		4

typedef struct SIE_DTCMBlk {

	#define	RA_DTCMBlk_HDR 				0x00000
	#define	w32DTCMBlk_HDR 				{										\
					UNSG32				uHDR_isDSFinished			 :  1;		\
					UNSG32				uHDR_nReserved				 : 15;		\
					UNSG32				uHDR_uBackDSID				 : 16;		\
										}
	/* @'00000 */	union {	UNSG32		u32DTCMBlk_HDR;
								struct	w32DTCMBlk_HDR;
										};

	/* [ 0: 0] */	#define	  BA_DTCMBlk_HDR_isDSFinished			 0x00000
	/* ---:--- */	#define	    bDTCMBlk_HDR_isDSFinished			    1 /*bit*/
	/* ---:--- */	#define	LSb32DTCMBlk_HDR_isDSFinished			    0 /*: 0*/
	/* ---:--- */	#define	MSK32DTCMBlk_HDR_isDSFinished			       0x00000001
	/* ---:--- */	#define	GET32DTCMBlk_HDR_isDSFinished(r32)			 (((r32)>> 0)&0x0001)
	/* ---:--- */	#define	GET16DTCMBlk_HDR_isDSFinished(r16)			 (((r16)>> 0)&0x0001)
	/* ---:--- */	#define	SET32DTCMBlk_HDR_isDSFinished(r32,v)		do{(r32)&=~(0x0001<< 0);(r32)|=((v)&0x0001)<< 0;}while(0)
	/* ---:--- */	#define	SET16DTCMBlk_HDR_isDSFinished(r16,v)		do{(r16)&=~(0x0001<< 0);(r16)|=((v)&0x0001)<< 0;}while(0)

	/* [15: 1] */	#define	  BA_DTCMBlk_HDR_nReserved				 0x00000
	/* ---:--- */	#define	    bDTCMBlk_HDR_nReserved				   15 /*bit*/
	/* ---:--- */	#define	LSb32DTCMBlk_HDR_nReserved				    1 /*:15*/
	/* ---:--- */	#define	MSK32DTCMBlk_HDR_nReserved				       0x0000FFFE
	/* ---:--- */	#define	GET32DTCMBlk_HDR_nReserved(r32)				 (((r32)>> 1)&0x7FFF)
	/* ---:--- */	#define	GET16DTCMBlk_HDR_nReserved(r16)				 (((r16)>> 1)&0x7FFF)
	/* ---:--- */	#define	SET32DTCMBlk_HDR_nReserved(r32,v)			do{(r32)&=~(0x7FFF<< 1);(r32)|=((v)&0x7FFF)<< 1;}while(0)
	/* ---:--- */	#define	SET16DTCMBlk_HDR_nReserved(r16,v)			do{(r16)&=~(0x7FFF<< 1);(r16)|=((v)&0x7FFF)<< 1;}while(0)

	/* [31:16] */	#define	  BA_DTCMBlk_HDR_uBackDSID				 0x00002
	/* ---:--- */	#define	    bDTCMBlk_HDR_uBackDSID				   16 /*bit*/
	/* ---:--- */	#define	LSb32DTCMBlk_HDR_uBackDSID				   16 /*:31*/
	/* ---:--- */	#define	MSK32DTCMBlk_HDR_uBackDSID				       0xFFFF0000
	/* ---:--- */	#define	GET32DTCMBlk_HDR_uBackDSID(r32)				 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DTCMBlk_HDR_uBackDSID(r16)				 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DTCMBlk_HDR_uBackDSID(r32,v)			do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DTCMBlk_HDR_uBackDSID(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DTCMBlk_HDR1 			0x00004
	#define	w32DTCMBlk_HDR1 			{										\
					UNSG32				uHDR_addrHdr				 : 16;		\
					UNSG32				uHDR_hdrSize				 : 16;		\
										}
	/* @'00004 */	union {	UNSG32		u32DTCMBlk_HDR1;
								struct	w32DTCMBlk_HDR1;
										};

	/* [15: 0] */	#define	  BA_DTCMBlk_HDR_addrHdr				 0x00004
	/* ---:--- */	#define	    bDTCMBlk_HDR_addrHdr				   16 /*bit*/
	/* ---:--- */	#define	LSb32DTCMBlk_HDR_addrHdr				    0 /*:15*/
	/* ---:--- */	#define	MSK32DTCMBlk_HDR_addrHdr				       0x0000FFFF
	/* ---:--- */	#define	GET32DTCMBlk_HDR_addrHdr(r32)				 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DTCMBlk_HDR_addrHdr(r16)				 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DTCMBlk_HDR_addrHdr(r32,v)				do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DTCMBlk_HDR_addrHdr(r16,v)				do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DTCMBlk_HDR_hdrSize				 0x00006
	/* ---:--- */	#define	    bDTCMBlk_HDR_hdrSize				   16 /*bit*/
	/* ---:--- */	#define	LSb32DTCMBlk_HDR_hdrSize				   16 /*:31*/
	/* ---:--- */	#define	MSK32DTCMBlk_HDR_hdrSize				       0xFFFF0000
	/* ---:--- */	#define	GET32DTCMBlk_HDR_hdrSize(r32)				 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DTCMBlk_HDR_hdrSize(r16)				 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DTCMBlk_HDR_hdrSize(r32,v)				do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DTCMBlk_HDR_hdrSize(r16,v)				do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DTCMBlk_DAT 				0x00008
	/* @'00008 */	SIE_DTCMFifo 				ie_dtcmFifo;

} SIE_DTCMBlk;

	#define	dftDTCMBlk_HDR 				0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DTCMBlk_HDR;
										} T32DTCMBlk_HDR;
	#define	dftDTCMBlk_HDR1 			0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DTCMBlk_HDR1;
										} T32DTCMBlk_HDR1;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DTCMBlk_drvrd (SIE_DTCMBlk *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DTCMBlk_drvwr (SIE_DTCMBlk *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DTCMBlk_reset (SIE_DTCMBlk *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DTCMBlk_check(p,pie,ps8name,hfpErrLOG)		DTCMBlk_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DTCMBlk_print(p,    ps8name,hfpErrLOG)		DTCMBlk_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DTCMBlk_cmp   (SIE_DTCMBlk *p, SIE_DTCMBlk *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DTCMBlk_import(SIE_DTCMBlk *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DTCMBlk_export(SIE_DTCMBlk *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DTCMBlk
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DTCMBlkQ
*	@  HDR
*		%unsigned  16  nRdOff  0
*						*  *
*						*  Offset of the block to be read
*		%unsigned  16  nWrOff  0
*						*  *
*						*  Offset of the block to be written
*		%unsigned  16  nTotalSize
*						*  *
*						*  Total bytes of data buffering in this block queue
*		%unsigned  16  nMaxSize
*						*  *
*						*  Total bytes of data can be held in the memory
*	@  LIST
*		%unsigned  16  blkPtrList  REG  [16]
*						*  *
*						*  Block pointer
**********************************************************************************************************************/
#ifdef	h_DTCMBlkQ
#else
#define	h_DTCMBlkQ

#define	\
	AR_DTCMBlkQ \
		10
#define	\
	AB_DTCMBlkQ \
		6

typedef struct SIE_DTCMBlkQ {

	#define	RA_DTCMBlkQ_HDR 			0x00000
	#define	w32DTCMBlkQ_HDR 			{										\
					UNSG32				uHDR_nRdOff					 : 16;		\
					UNSG32				uHDR_nWrOff					 : 16;		\
										}
	/* @'00000 */	union {	UNSG32		u32DTCMBlkQ_HDR;
								struct	w32DTCMBlkQ_HDR;
										};

	/* [15: 0] */	#define	  BA_DTCMBlkQ_HDR_nRdOff				 0x00000
	/* ---:--- */	#define	    bDTCMBlkQ_HDR_nRdOff				   16 /*bit*/
	/* ---:--- */	#define	LSb32DTCMBlkQ_HDR_nRdOff				    0 /*:15*/
	/* ---:--- */	#define	MSK32DTCMBlkQ_HDR_nRdOff				       0x0000FFFF
	/* ---:--- */	#define	GET32DTCMBlkQ_HDR_nRdOff(r32)				 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DTCMBlkQ_HDR_nRdOff(r16)				 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DTCMBlkQ_HDR_nRdOff(r32,v)				do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DTCMBlkQ_HDR_nRdOff(r16,v)				do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DTCMBlkQ_HDR_nWrOff				 0x00002
	/* ---:--- */	#define	    bDTCMBlkQ_HDR_nWrOff				   16 /*bit*/
	/* ---:--- */	#define	LSb32DTCMBlkQ_HDR_nWrOff				   16 /*:31*/
	/* ---:--- */	#define	MSK32DTCMBlkQ_HDR_nWrOff				       0xFFFF0000
	/* ---:--- */	#define	GET32DTCMBlkQ_HDR_nWrOff(r32)				 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DTCMBlkQ_HDR_nWrOff(r16)				 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DTCMBlkQ_HDR_nWrOff(r32,v)				do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DTCMBlkQ_HDR_nWrOff(r16,v)				do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DTCMBlkQ_HDR1 			0x00004
	#define	w32DTCMBlkQ_HDR1 			{										\
					UNSG32				uHDR_nTotalSize				 : 16;		\
					UNSG32				uHDR_nMaxSize				 : 16;		\
										}
	/* @'00004 */	union {	UNSG32		u32DTCMBlkQ_HDR1;
								struct	w32DTCMBlkQ_HDR1;
										};

	/* [15: 0] */	#define	  BA_DTCMBlkQ_HDR_nTotalSize			 0x00004
	/* ---:--- */	#define	    bDTCMBlkQ_HDR_nTotalSize			   16 /*bit*/
	/* ---:--- */	#define	LSb32DTCMBlkQ_HDR_nTotalSize			    0 /*:15*/
	/* ---:--- */	#define	MSK32DTCMBlkQ_HDR_nTotalSize			       0x0000FFFF
	/* ---:--- */	#define	GET32DTCMBlkQ_HDR_nTotalSize(r32)			 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DTCMBlkQ_HDR_nTotalSize(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DTCMBlkQ_HDR_nTotalSize(r32,v)			do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DTCMBlkQ_HDR_nTotalSize(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DTCMBlkQ_HDR_nMaxSize				 0x00006
	/* ---:--- */	#define	    bDTCMBlkQ_HDR_nMaxSize				   16 /*bit*/
	/* ---:--- */	#define	LSb32DTCMBlkQ_HDR_nMaxSize				   16 /*:31*/
	/* ---:--- */	#define	MSK32DTCMBlkQ_HDR_nMaxSize				       0xFFFF0000
	/* ---:--- */	#define	GET32DTCMBlkQ_HDR_nMaxSize(r32)				 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DTCMBlkQ_HDR_nMaxSize(r16)				 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DTCMBlkQ_HDR_nMaxSize(r32,v)			do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DTCMBlkQ_HDR_nMaxSize(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DTCMBlkQ_LIST 			0x00008
	#define	w32DTCMBlkQ_LIST 			{										\
					UNSG32				uLIST_blkPtrList_0i			 : 16;		\
					UNSG32				uLIST_blkPtrList_1i			 : 16;		\
										}
	/* @'00008 */	union {	UNSG32		u32DTCMBlkQ_LIST;
								struct	w32DTCMBlkQ_LIST;
										};

	/* [15: 0] */	#define	  BA_DTCMBlkQ_LIST_blkPtrList_0i		 0x00008
	/* ---:--- */	#define	    bDTCMBlkQ_LIST_blkPtrList_0i		   16 /*bit*/
	/* ---:--- */	#define	LSb32DTCMBlkQ_LIST_blkPtrList_0i		    0 /*:15*/
	/* ---:--- */	#define	MSK32DTCMBlkQ_LIST_blkPtrList_0i		       0x0000FFFF
	/* ---:--- */	#define	GET32DTCMBlkQ_LIST_blkPtrList_0i(r32)		 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DTCMBlkQ_LIST_blkPtrList_0i(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DTCMBlkQ_LIST_blkPtrList_0i(r32,v)		do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DTCMBlkQ_LIST_blkPtrList_0i(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DTCMBlkQ_LIST_blkPtrList_1i		 0x0000A
	/* ---:--- */	#define	    bDTCMBlkQ_LIST_blkPtrList_1i		   16 /*bit*/
	/* ---:--- */	#define	LSb32DTCMBlkQ_LIST_blkPtrList_1i		   16 /*:31*/
	/* ---:--- */	#define	MSK32DTCMBlkQ_LIST_blkPtrList_1i		       0xFFFF0000
	/* ---:--- */	#define	GET32DTCMBlkQ_LIST_blkPtrList_1i(r32)		 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DTCMBlkQ_LIST_blkPtrList_1i(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DTCMBlkQ_LIST_blkPtrList_1i(r32,v)		do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DTCMBlkQ_LIST_blkPtrList_1i(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DTCMBlkQ_LIST1 			0x0000C
	#define	w32DTCMBlkQ_LIST1 			{										\
					UNSG32				uLIST_blkPtrList_2i			 : 16;		\
					UNSG32				uLIST_blkPtrList_3i			 : 16;		\
										}
	/* @'0000C */	union {	UNSG32		u32DTCMBlkQ_LIST1;
								struct	w32DTCMBlkQ_LIST1;
										};

	/* [15: 0] */	#define	  BA_DTCMBlkQ_LIST_blkPtrList_2i		 0x0000C
	/* ---:--- */	#define	    bDTCMBlkQ_LIST_blkPtrList_2i		   16 /*bit*/
	/* ---:--- */	#define	LSb32DTCMBlkQ_LIST_blkPtrList_2i		    0 /*:15*/
	/* ---:--- */	#define	MSK32DTCMBlkQ_LIST_blkPtrList_2i		       0x0000FFFF
	/* ---:--- */	#define	GET32DTCMBlkQ_LIST_blkPtrList_2i(r32)		 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DTCMBlkQ_LIST_blkPtrList_2i(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DTCMBlkQ_LIST_blkPtrList_2i(r32,v)		do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DTCMBlkQ_LIST_blkPtrList_2i(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DTCMBlkQ_LIST_blkPtrList_3i		 0x0000E
	/* ---:--- */	#define	    bDTCMBlkQ_LIST_blkPtrList_3i		   16 /*bit*/
	/* ---:--- */	#define	LSb32DTCMBlkQ_LIST_blkPtrList_3i		   16 /*:31*/
	/* ---:--- */	#define	MSK32DTCMBlkQ_LIST_blkPtrList_3i		       0xFFFF0000
	/* ---:--- */	#define	GET32DTCMBlkQ_LIST_blkPtrList_3i(r32)		 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DTCMBlkQ_LIST_blkPtrList_3i(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DTCMBlkQ_LIST_blkPtrList_3i(r32,v)		do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DTCMBlkQ_LIST_blkPtrList_3i(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DTCMBlkQ_LIST2 			0x00010
	#define	w32DTCMBlkQ_LIST2 			{										\
					UNSG32				uLIST_blkPtrList_4i			 : 16;		\
					UNSG32				uLIST_blkPtrList_5i			 : 16;		\
										}
	/* @'00010 */	union {	UNSG32		u32DTCMBlkQ_LIST2;
								struct	w32DTCMBlkQ_LIST2;
										};

	/* [15: 0] */	#define	  BA_DTCMBlkQ_LIST_blkPtrList_4i		 0x00010
	/* ---:--- */	#define	    bDTCMBlkQ_LIST_blkPtrList_4i		   16 /*bit*/
	/* ---:--- */	#define	LSb32DTCMBlkQ_LIST_blkPtrList_4i		    0 /*:15*/
	/* ---:--- */	#define	MSK32DTCMBlkQ_LIST_blkPtrList_4i		       0x0000FFFF
	/* ---:--- */	#define	GET32DTCMBlkQ_LIST_blkPtrList_4i(r32)		 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DTCMBlkQ_LIST_blkPtrList_4i(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DTCMBlkQ_LIST_blkPtrList_4i(r32,v)		do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DTCMBlkQ_LIST_blkPtrList_4i(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DTCMBlkQ_LIST_blkPtrList_5i		 0x00012
	/* ---:--- */	#define	    bDTCMBlkQ_LIST_blkPtrList_5i		   16 /*bit*/
	/* ---:--- */	#define	LSb32DTCMBlkQ_LIST_blkPtrList_5i		   16 /*:31*/
	/* ---:--- */	#define	MSK32DTCMBlkQ_LIST_blkPtrList_5i		       0xFFFF0000
	/* ---:--- */	#define	GET32DTCMBlkQ_LIST_blkPtrList_5i(r32)		 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DTCMBlkQ_LIST_blkPtrList_5i(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DTCMBlkQ_LIST_blkPtrList_5i(r32,v)		do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DTCMBlkQ_LIST_blkPtrList_5i(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DTCMBlkQ_LIST3 			0x00014
	#define	w32DTCMBlkQ_LIST3 			{										\
					UNSG32				uLIST_blkPtrList_6i			 : 16;		\
					UNSG32				uLIST_blkPtrList_7i			 : 16;		\
										}
	/* @'00014 */	union {	UNSG32		u32DTCMBlkQ_LIST3;
								struct	w32DTCMBlkQ_LIST3;
										};

	/* [15: 0] */	#define	  BA_DTCMBlkQ_LIST_blkPtrList_6i		 0x00014
	/* ---:--- */	#define	    bDTCMBlkQ_LIST_blkPtrList_6i		   16 /*bit*/
	/* ---:--- */	#define	LSb32DTCMBlkQ_LIST_blkPtrList_6i		    0 /*:15*/
	/* ---:--- */	#define	MSK32DTCMBlkQ_LIST_blkPtrList_6i		       0x0000FFFF
	/* ---:--- */	#define	GET32DTCMBlkQ_LIST_blkPtrList_6i(r32)		 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DTCMBlkQ_LIST_blkPtrList_6i(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DTCMBlkQ_LIST_blkPtrList_6i(r32,v)		do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DTCMBlkQ_LIST_blkPtrList_6i(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DTCMBlkQ_LIST_blkPtrList_7i		 0x00016
	/* ---:--- */	#define	    bDTCMBlkQ_LIST_blkPtrList_7i		   16 /*bit*/
	/* ---:--- */	#define	LSb32DTCMBlkQ_LIST_blkPtrList_7i		   16 /*:31*/
	/* ---:--- */	#define	MSK32DTCMBlkQ_LIST_blkPtrList_7i		       0xFFFF0000
	/* ---:--- */	#define	GET32DTCMBlkQ_LIST_blkPtrList_7i(r32)		 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DTCMBlkQ_LIST_blkPtrList_7i(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DTCMBlkQ_LIST_blkPtrList_7i(r32,v)		do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DTCMBlkQ_LIST_blkPtrList_7i(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DTCMBlkQ_LIST4 			0x00018
	#define	w32DTCMBlkQ_LIST4 			{										\
					UNSG32				uLIST_blkPtrList_8i			 : 16;		\
					UNSG32				uLIST_blkPtrList_9i			 : 16;		\
										}
	/* @'00018 */	union {	UNSG32		u32DTCMBlkQ_LIST4;
								struct	w32DTCMBlkQ_LIST4;
										};

	/* [15: 0] */	#define	  BA_DTCMBlkQ_LIST_blkPtrList_8i		 0x00018
	/* ---:--- */	#define	    bDTCMBlkQ_LIST_blkPtrList_8i		   16 /*bit*/
	/* ---:--- */	#define	LSb32DTCMBlkQ_LIST_blkPtrList_8i		    0 /*:15*/
	/* ---:--- */	#define	MSK32DTCMBlkQ_LIST_blkPtrList_8i		       0x0000FFFF
	/* ---:--- */	#define	GET32DTCMBlkQ_LIST_blkPtrList_8i(r32)		 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DTCMBlkQ_LIST_blkPtrList_8i(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DTCMBlkQ_LIST_blkPtrList_8i(r32,v)		do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DTCMBlkQ_LIST_blkPtrList_8i(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DTCMBlkQ_LIST_blkPtrList_9i		 0x0001A
	/* ---:--- */	#define	    bDTCMBlkQ_LIST_blkPtrList_9i		   16 /*bit*/
	/* ---:--- */	#define	LSb32DTCMBlkQ_LIST_blkPtrList_9i		   16 /*:31*/
	/* ---:--- */	#define	MSK32DTCMBlkQ_LIST_blkPtrList_9i		       0xFFFF0000
	/* ---:--- */	#define	GET32DTCMBlkQ_LIST_blkPtrList_9i(r32)		 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DTCMBlkQ_LIST_blkPtrList_9i(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DTCMBlkQ_LIST_blkPtrList_9i(r32,v)		do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DTCMBlkQ_LIST_blkPtrList_9i(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DTCMBlkQ_LIST5 			0x0001C
	#define	w32DTCMBlkQ_LIST5 			{										\
					UNSG32				uLIST_blkPtrList_10i		 : 16;		\
					UNSG32				uLIST_blkPtrList_11i		 : 16;		\
										}
	/* @'0001C */	union {	UNSG32		u32DTCMBlkQ_LIST5;
								struct	w32DTCMBlkQ_LIST5;
										};

	/* [15: 0] */	#define	  BA_DTCMBlkQ_LIST_blkPtrList_10i		 0x0001C
	/* ---:--- */	#define	    bDTCMBlkQ_LIST_blkPtrList_10i		   16 /*bit*/
	/* ---:--- */	#define	LSb32DTCMBlkQ_LIST_blkPtrList_10i		    0 /*:15*/
	/* ---:--- */	#define	MSK32DTCMBlkQ_LIST_blkPtrList_10i		       0x0000FFFF
	/* ---:--- */	#define	GET32DTCMBlkQ_LIST_blkPtrList_10i(r32)		 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DTCMBlkQ_LIST_blkPtrList_10i(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DTCMBlkQ_LIST_blkPtrList_10i(r32,v)	do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DTCMBlkQ_LIST_blkPtrList_10i(r16,v)	do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DTCMBlkQ_LIST_blkPtrList_11i		 0x0001E
	/* ---:--- */	#define	    bDTCMBlkQ_LIST_blkPtrList_11i		   16 /*bit*/
	/* ---:--- */	#define	LSb32DTCMBlkQ_LIST_blkPtrList_11i		   16 /*:31*/
	/* ---:--- */	#define	MSK32DTCMBlkQ_LIST_blkPtrList_11i		       0xFFFF0000
	/* ---:--- */	#define	GET32DTCMBlkQ_LIST_blkPtrList_11i(r32)		 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DTCMBlkQ_LIST_blkPtrList_11i(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DTCMBlkQ_LIST_blkPtrList_11i(r32,v)	do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DTCMBlkQ_LIST_blkPtrList_11i(r16,v)	do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DTCMBlkQ_LIST6 			0x00020
	#define	w32DTCMBlkQ_LIST6 			{										\
					UNSG32				uLIST_blkPtrList_12i		 : 16;		\
					UNSG32				uLIST_blkPtrList_13i		 : 16;		\
										}
	/* @'00020 */	union {	UNSG32		u32DTCMBlkQ_LIST6;
								struct	w32DTCMBlkQ_LIST6;
										};

	/* [15: 0] */	#define	  BA_DTCMBlkQ_LIST_blkPtrList_12i		 0x00020
	/* ---:--- */	#define	    bDTCMBlkQ_LIST_blkPtrList_12i		   16 /*bit*/
	/* ---:--- */	#define	LSb32DTCMBlkQ_LIST_blkPtrList_12i		    0 /*:15*/
	/* ---:--- */	#define	MSK32DTCMBlkQ_LIST_blkPtrList_12i		       0x0000FFFF
	/* ---:--- */	#define	GET32DTCMBlkQ_LIST_blkPtrList_12i(r32)		 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DTCMBlkQ_LIST_blkPtrList_12i(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DTCMBlkQ_LIST_blkPtrList_12i(r32,v)	do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DTCMBlkQ_LIST_blkPtrList_12i(r16,v)	do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DTCMBlkQ_LIST_blkPtrList_13i		 0x00022
	/* ---:--- */	#define	    bDTCMBlkQ_LIST_blkPtrList_13i		   16 /*bit*/
	/* ---:--- */	#define	LSb32DTCMBlkQ_LIST_blkPtrList_13i		   16 /*:31*/
	/* ---:--- */	#define	MSK32DTCMBlkQ_LIST_blkPtrList_13i		       0xFFFF0000
	/* ---:--- */	#define	GET32DTCMBlkQ_LIST_blkPtrList_13i(r32)		 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DTCMBlkQ_LIST_blkPtrList_13i(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DTCMBlkQ_LIST_blkPtrList_13i(r32,v)	do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DTCMBlkQ_LIST_blkPtrList_13i(r16,v)	do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DTCMBlkQ_LIST7 			0x00024
	#define	w32DTCMBlkQ_LIST7 			{										\
					UNSG32				uLIST_blkPtrList_14i		 : 16;		\
					UNSG32				uLIST_blkPtrList_15i		 : 16;		\
										}
	/* @'00024 */	union {	UNSG32		u32DTCMBlkQ_LIST7;
								struct	w32DTCMBlkQ_LIST7;
										};

	/* [15: 0] */	#define	  BA_DTCMBlkQ_LIST_blkPtrList_14i		 0x00024
	/* ---:--- */	#define	    bDTCMBlkQ_LIST_blkPtrList_14i		   16 /*bit*/
	/* ---:--- */	#define	LSb32DTCMBlkQ_LIST_blkPtrList_14i		    0 /*:15*/
	/* ---:--- */	#define	MSK32DTCMBlkQ_LIST_blkPtrList_14i		       0x0000FFFF
	/* ---:--- */	#define	GET32DTCMBlkQ_LIST_blkPtrList_14i(r32)		 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DTCMBlkQ_LIST_blkPtrList_14i(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DTCMBlkQ_LIST_blkPtrList_14i(r32,v)	do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DTCMBlkQ_LIST_blkPtrList_14i(r16,v)	do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DTCMBlkQ_LIST_blkPtrList_15i		 0x00026
	/* ---:--- */	#define	    bDTCMBlkQ_LIST_blkPtrList_15i		   16 /*bit*/
	/* ---:--- */	#define	LSb32DTCMBlkQ_LIST_blkPtrList_15i		   16 /*:31*/
	/* ---:--- */	#define	MSK32DTCMBlkQ_LIST_blkPtrList_15i		       0xFFFF0000
	/* ---:--- */	#define	GET32DTCMBlkQ_LIST_blkPtrList_15i(r32)		 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DTCMBlkQ_LIST_blkPtrList_15i(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DTCMBlkQ_LIST_blkPtrList_15i(r32,v)	do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DTCMBlkQ_LIST_blkPtrList_15i(r16,v)	do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

} SIE_DTCMBlkQ;

	#define	dftDTCMBlkQ_HDR 			0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DTCMBlkQ_HDR;
										} T32DTCMBlkQ_HDR;
	#define	dftDTCMBlkQ_HDR1 			0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DTCMBlkQ_HDR1;
										} T32DTCMBlkQ_HDR1;
	#define	dftDTCMBlkQ_LIST 			0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DTCMBlkQ_LIST;
										} T32DTCMBlkQ_LIST;
	#define	dftDTCMBlkQ_LIST1 			0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DTCMBlkQ_LIST1;
										} T32DTCMBlkQ_LIST1;
	#define	dftDTCMBlkQ_LIST2 			0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DTCMBlkQ_LIST2;
										} T32DTCMBlkQ_LIST2;
	#define	dftDTCMBlkQ_LIST3 			0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DTCMBlkQ_LIST3;
										} T32DTCMBlkQ_LIST3;
	#define	dftDTCMBlkQ_LIST4 			0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DTCMBlkQ_LIST4;
										} T32DTCMBlkQ_LIST4;
	#define	dftDTCMBlkQ_LIST5 			0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DTCMBlkQ_LIST5;
										} T32DTCMBlkQ_LIST5;
	#define	dftDTCMBlkQ_LIST6 			0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DTCMBlkQ_LIST6;
										} T32DTCMBlkQ_LIST6;
	#define	dftDTCMBlkQ_LIST7 			0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DTCMBlkQ_LIST7;
										} T32DTCMBlkQ_LIST7;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DTCMBlkQ_drvrd (SIE_DTCMBlkQ *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DTCMBlkQ_drvwr (SIE_DTCMBlkQ *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DTCMBlkQ_reset (SIE_DTCMBlkQ *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DTCMBlkQ_check(p,pie,ps8name,hfpErrLOG)		DTCMBlkQ_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DTCMBlkQ_print(p,    ps8name,hfpErrLOG)		DTCMBlkQ_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DTCMBlkQ_cmp   (SIE_DTCMBlkQ *p, SIE_DTCMBlkQ *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DTCMBlkQ_import(SIE_DTCMBlkQ *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DTCMBlkQ_export(SIE_DTCMBlkQ *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DTCMBlkQ
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DTCMBlkPool
*	@  PTR
*		$DTCMBlkQ  blkQ
*	@  DAT
*		$DTCMBlk  blkList  REG  [16]
*						*  *
*						*  Block list
**********************************************************************************************************************/
#ifdef	h_DTCMBlkPool
#else
#define	h_DTCMBlkPool

#define	\
	AR_DTCMBlkPool \
		74
#define	\
	AB_DTCMBlkPool \
		9

typedef struct SIE_DTCMBlkPool {

	#define	RA_DTCMBlkPool_PTR 			0x00000
	/* @'00000 */	SIE_DTCMBlkQ 				ie_blkQ;

	#define	RA_DTCMBlkPool_DAT 			0x00028
	/* @'00028 */	SIE_DTCMBlk 				ie_blkList			 [16];
					#define	 arr_DTCMBlkPool_blkList 				  16

} SIE_DTCMBlkPool;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DTCMBlkPool_drvrd (SIE_DTCMBlkPool *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DTCMBlkPool_drvwr (SIE_DTCMBlkPool *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DTCMBlkPool_reset (SIE_DTCMBlkPool *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DTCMBlkPool_check(p,pie,ps8name,hfpErrLOG)		DTCMBlkPool_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DTCMBlkPool_print(p,    ps8name,hfpErrLOG)		DTCMBlkPool_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DTCMBlkPool_cmp   (SIE_DTCMBlkPool *p, SIE_DTCMBlkPool *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DTCMBlkPool_import(SIE_DTCMBlkPool *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DTCMBlkPool_export(SIE_DTCMBlkPool *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DTCMBlkPool
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: IOCtrlFlag
*	@  IOCTRL
*		%unsigned  1  datFlag  0
*						*  *
*						*  1 : Read/Write Data
*						*  0: Read/Write Control
*		%unsigned  3  opFlag
*			:  PEAK_OP  0
*						*  *
*						*  Copy content without moving pointers
*			:  SEEK_OP  1
*						*  *
*						*  Move pointers without copy data
*			:  CLEAR_OP  2
*						*  *
*						*  Clear all of the pending data and without copying
*			:  APPEND_OP  3
*						*  *
*						*  Append the data into the stream
*			:  FLUSH_OP  4
*						*  *
*						*  Append the data into the stream and flush all the pending data
**********************************************************************************************************************/
#ifdef	h_IOCtrlFlag
#else
#define	h_IOCtrlFlag

#define	\
	AR_IOCtrlFlag \
		1
#define	\
	AB_IOCtrlFlag \
		2

typedef struct SIE_IOCtrlFlag {

	#define	RA_IOCtrlFlag_IOCTRL 		0x00000
	#define	w32IOCtrlFlag_IOCTRL 		{										\
					UNSG32				uIOCTRL_datFlag				 :  1;		\
					UNSG32				uIOCTRL_opFlag				 :  3;		\
					UNSG32				_x00000	: 28;							\
										}
	/* @'00000 */	union {	UNSG32		u32IOCtrlFlag_IOCTRL;
								struct	w32IOCtrlFlag_IOCTRL;
										};

	/* [ 0: 0] */	#define	  BA_IOCtrlFlag_IOCTRL_datFlag			 0x00000
	/* ---:--- */	#define	    bIOCtrlFlag_IOCTRL_datFlag			    1 /*bit*/
	/* ---:--- */	#define	LSb32IOCtrlFlag_IOCTRL_datFlag			    0 /*: 0*/
	/* ---:--- */	#define	MSK32IOCtrlFlag_IOCTRL_datFlag			       0x00000001
	/* ---:--- */	#define	GET32IOCtrlFlag_IOCTRL_datFlag(r32)			 (((r32)>> 0)&0x0001)
	/* ---:--- */	#define	GET16IOCtrlFlag_IOCTRL_datFlag(r16)			 (((r16)>> 0)&0x0001)
	/* ---:--- */	#define	SET32IOCtrlFlag_IOCTRL_datFlag(r32,v)		do{(r32)&=~(0x0001<< 0);(r32)|=((v)&0x0001)<< 0;}while(0)
	/* ---:--- */	#define	SET16IOCtrlFlag_IOCTRL_datFlag(r16,v)		do{(r16)&=~(0x0001<< 0);(r16)|=((v)&0x0001)<< 0;}while(0)

	/* [ 3: 1] */	#define	  BA_IOCtrlFlag_IOCTRL_opFlag			 0x00000
	/* ---:--- */	#define	    bIOCtrlFlag_IOCTRL_opFlag			    3 /*bit*/
	/* ---:--- */	#define	LSb32IOCtrlFlag_IOCTRL_opFlag			    1 /*: 3*/
	/* ---:--- */	#define	MSK32IOCtrlFlag_IOCTRL_opFlag			       0x0000000E
	/* ---:--- */	#define	GET32IOCtrlFlag_IOCTRL_opFlag(r32)			 (((r32)>> 1)&0x0007)
	/* ---:--- */	#define	GET16IOCtrlFlag_IOCTRL_opFlag(r16)			 (((r16)>> 1)&0x0007)
	/* ---:--- */	#define	SET32IOCtrlFlag_IOCTRL_opFlag(r32,v)		do{(r32)&=~(0x0007<< 1);(r32)|=((v)&0x0007)<< 1;}while(0)
	/* ---:--- */	#define	SET16IOCtrlFlag_IOCTRL_opFlag(r16,v)		do{(r16)&=~(0x0007<< 1);(r16)|=((v)&0x0007)<< 1;}while(0)
					#define	     IOCtrlFlag_IOCTRL_opFlag_PEAK_OP			0x0
					#define	     IOCtrlFlag_IOCTRL_opFlag_SEEK_OP			0x1
					#define	     IOCtrlFlag_IOCTRL_opFlag_CLEAR_OP			0x2
					#define	     IOCtrlFlag_IOCTRL_opFlag_APPEND_OP			0x3
					#define	     IOCtrlFlag_IOCTRL_opFlag_FLUSH_OP			0x4

} SIE_IOCtrlFlag;

	#define	dftIOCtrlFlag_IOCTRL 		0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32IOCtrlFlag_IOCTRL;
										} T32IOCtrlFlag_IOCTRL;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	IOCtrlFlag_drvrd (SIE_IOCtrlFlag *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	IOCtrlFlag_drvwr (SIE_IOCtrlFlag *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	IOCtrlFlag_reset (SIE_IOCtrlFlag *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	IOCtrlFlag_check(p,pie,ps8name,hfpErrLOG)		IOCtrlFlag_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	IOCtrlFlag_print(p,    ps8name,hfpErrLOG)		IOCtrlFlag_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	IOCtrlFlag_cmp   (SIE_IOCtrlFlag *p, SIE_IOCtrlFlag *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	IOCtrlFlag_import(SIE_IOCtrlFlag *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	IOCtrlFlag_export(SIE_IOCtrlFlag *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: IOCtrlFlag
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DSStreamIn
*	@  HDR
*		$StreamHdr  hdr
*	@  FIFOPTR
*		$DSFifo32  dsFifo
*						*  *
*						*  Fifo pointer information
*	@  DATBLKQ
*		$DTCMBlkQ  blkQ
*						*  *
*						*  Preloaded data block
*	@  CTRLFIFO
*		$DTCMFifo  ctrlFIFoIn
*						*  *
*						*  Input control information
**********************************************************************************************************************/
#ifdef	h_DSStreamIn
#else
#define	h_DSStreamIn

#define	\
	AR_DSStreamIn \
		18
#define	\
	AB_DSStreamIn \
		7

typedef struct SIE_DSStreamIn {

	#define	RA_DSStreamIn_HDR 			0x00000
	/* @'00000 */	SIE_StreamHdr 				ie_hdr;

	#define	RA_DSStreamIn_FIFOPTR 		0x00008
	/* @'00008 */	SIE_DSFifo32 				ie_dsFifo;

	#define	RA_DSStreamIn_DATBLKQ 		0x00018
	/* @'00018 */	SIE_DTCMBlkQ 				ie_blkQ;

	#define	RA_DSStreamIn_CTRLFIFO 		0x00040
	/* @'00040 */	SIE_DTCMFifo 				ie_ctrlFIFoIn;

} SIE_DSStreamIn;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DSStreamIn_drvrd (SIE_DSStreamIn *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DSStreamIn_drvwr (SIE_DSStreamIn *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DSStreamIn_reset (SIE_DSStreamIn *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DSStreamIn_check(p,pie,ps8name,hfpErrLOG)		DSStreamIn_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DSStreamIn_print(p,    ps8name,hfpErrLOG)		DSStreamIn_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DSStreamIn_cmp   (SIE_DSStreamIn *p, SIE_DSStreamIn *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DSStreamIn_import(SIE_DSStreamIn *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DSStreamIn_export(SIE_DSStreamIn *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DSStreamIn
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DSStreamOut
*	@  HDR
*		$StreamHdr  hdr  0
*						*  *
*						*  The pointer to the memory block pool
*	@  FIFOPTR
*		$DSFifo32  dsFifo  0
*						*  *
*						*  Fifo pointer information
**********************************************************************************************************************/
#ifdef	h_DSStreamOut
#else
#define	h_DSStreamOut

#define	\
	AR_DSStreamOut \
		6
#define	\
	AB_DSStreamOut \
		5

typedef struct SIE_DSStreamOut {

	#define	RA_DSStreamOut_HDR 			0x00000
	/* @'00000 */	SIE_StreamHdr 				ie_hdr;

	#define	RA_DSStreamOut_FIFOPTR 		0x00008
	/* @'00008 */	SIE_DSFifo32 				ie_dsFifo;

} SIE_DSStreamOut;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DSStreamOut_drvrd (SIE_DSStreamOut *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DSStreamOut_drvwr (SIE_DSStreamOut *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DSStreamOut_reset (SIE_DSStreamOut *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DSStreamOut_check(p,pie,ps8name,hfpErrLOG)		DSStreamOut_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DSStreamOut_print(p,    ps8name,hfpErrLOG)		DSStreamOut_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DSStreamOut_cmp   (SIE_DSStreamOut *p, SIE_DSStreamOut *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DSStreamOut_import(SIE_DSStreamOut *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DSStreamOut_export(SIE_DSStreamOut *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DSStreamOut
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DSStreamOutModule
*	@  HDR
*		%unsigned  16  datBlkPool  0
*						*  *
*						*  The pointer to the memory block pool
*		%unsigned  16  lastDatBlkPtr  0
*						*  *
*						*  The pointer to the current block
*		%unsigned  16  lastDSOutOwner
*						*  *
*						*  The pointer to the current data streamer output FIFO owner
*		%unsigned  16  Reserved
*	@  EV
*		$DSFifo32  evDSFifoOut  0
*						*  *
*						*  The output event FIFO
**********************************************************************************************************************/
#ifdef	h_DSStreamOutModule
#else
#define	h_DSStreamOutModule

#define	\
	AR_DSStreamOutModule \
		6
#define	\
	AB_DSStreamOutModule \
		5

typedef struct SIE_DSStreamOutModule {

	#define	RA_DSStreamOutModule_HDR 	0x00000
	#define	w32DSStreamOutModule_HDR 	{										\
					UNSG32				uHDR_datBlkPool				 : 16;		\
					UNSG32				uHDR_lastDatBlkPtr			 : 16;		\
										}
	/* @'00000 */	union {	UNSG32		u32DSStreamOutModule_HDR;
								struct	w32DSStreamOutModule_HDR;
										};

	/* [15: 0] */	#define	  BA_DSStreamOutModule_HDR_datBlkPool	 0x00000
	/* ---:--- */	#define	    bDSStreamOutModule_HDR_datBlkPool	   16 /*bit*/
	/* ---:--- */	#define	LSb32DSStreamOutModule_HDR_datBlkPool	    0 /*:15*/
	/* ---:--- */	#define	MSK32DSStreamOutModule_HDR_datBlkPool	       0x0000FFFF
	/* ---:--- */	#define	GET32DSStreamOutModule_HDR_datBlkPool(r32)	 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DSStreamOutModule_HDR_datBlkPool(r16)	 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DSStreamOutModule_HDR_datBlkPool(r32,v)do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DSStreamOutModule_HDR_datBlkPool(r16,v)do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DSStreamOutModule_HDR_lastDatBlkPtr 0x00002
	/* ---:--- */	#define	    bDSStreamOutModule_HDR_lastDatBlkPtr   16 /*bit*/
	/* ---:--- */	#define	LSb32DSStreamOutModule_HDR_lastDatBlkPtr   16 /*:31*/
	/* ---:--- */	#define	MSK32DSStreamOutModule_HDR_lastDatBlkPtr       0xFFFF0000
	/* ---:--- */	#define	GET32DSStreamOutModule_HDR_lastDatBlkPtr(r32) (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DSStreamOutModule_HDR_lastDatBlkPtr(r16) (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DSStreamOutModule_HDR_lastDatBlkPtr(r32,v)do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DSStreamOutModule_HDR_lastDatBlkPtr(r16,v)do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DSStreamOutModule_HDR1 	0x00004
	#define	w32DSStreamOutModule_HDR1 	{										\
					UNSG32				uHDR_lastDSOutOwner			 : 16;		\
					UNSG32				uHDR_Reserved				 : 16;		\
										}
	/* @'00004 */	union {	UNSG32		u32DSStreamOutModule_HDR1;
								struct	w32DSStreamOutModule_HDR1;
										};

	/* [15: 0] */	#define	  BA_DSStreamOutModule_HDR_lastDSOutOwner 0x00004
	/* ---:--- */	#define	    bDSStreamOutModule_HDR_lastDSOutOwner   16 /*bit*/
	/* ---:--- */	#define	LSb32DSStreamOutModule_HDR_lastDSOutOwner    0 /*:15*/
	/* ---:--- */	#define	MSK32DSStreamOutModule_HDR_lastDSOutOwner       0x0000FFFF
	/* ---:--- */	#define	GET32DSStreamOutModule_HDR_lastDSOutOwner(r32) (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DSStreamOutModule_HDR_lastDSOutOwner(r16) (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DSStreamOutModule_HDR_lastDSOutOwner(r32,v)do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DSStreamOutModule_HDR_lastDSOutOwner(r16,v)do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DSStreamOutModule_HDR_Reserved		 0x00006
	/* ---:--- */	#define	    bDSStreamOutModule_HDR_Reserved		   16 /*bit*/
	/* ---:--- */	#define	LSb32DSStreamOutModule_HDR_Reserved		   16 /*:31*/
	/* ---:--- */	#define	MSK32DSStreamOutModule_HDR_Reserved		       0xFFFF0000
	/* ---:--- */	#define	GET32DSStreamOutModule_HDR_Reserved(r32)	 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DSStreamOutModule_HDR_Reserved(r16)	 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DSStreamOutModule_HDR_Reserved(r32,v)	do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DSStreamOutModule_HDR_Reserved(r16,v)	do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DSStreamOutModule_EV 	0x00008
	/* @'00008 */	SIE_DSFifo32 				ie_evDSFifoOut;

} SIE_DSStreamOutModule;

	#define	dftDSStreamOutModule_HDR 	0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DSStreamOutModule_HDR;
										} T32DSStreamOutModule_HDR;
	#define	dftDSStreamOutModule_HDR1 	0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DSStreamOutModule_HDR1;
										} T32DSStreamOutModule_HDR1;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DSStreamOutModule_drvrd (SIE_DSStreamOutModule *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DSStreamOutModule_drvwr (SIE_DSStreamOutModule *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DSStreamOutModule_reset (SIE_DSStreamOutModule *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DSStreamOutModule_check(p,pie,ps8name,hfpErrLOG)		DSStreamOutModule_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DSStreamOutModule_print(p,    ps8name,hfpErrLOG)		DSStreamOutModule_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DSStreamOutModule_cmp   (SIE_DSStreamOutModule *p, SIE_DSStreamOutModule *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DSStreamOutModule_import(SIE_DSStreamOutModule *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DSStreamOutModule_export(SIE_DSStreamOutModule *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DSStreamOutModule
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DSOutBlkReserved
*	@
*		$FIGOEvent  figoEvent  REG
*	@
*		$UINT32  dsFifoPtr  REG  [4]
*						*  *
*						*  The pointer to the current block
**********************************************************************************************************************/
#ifdef	h_DSOutBlkReserved
#else
#define	h_DSOutBlkReserved

#define	\
	AR_DSOutBlkReserved \
		20
#define	\
	AB_DSOutBlkReserved \
		7

typedef struct SIE_DSOutBlkReserved {

	#define	RA_DSOutBlkReserved_figoEvent 0x00000
	/* @'00000 */	SIE_FIGOEvent 				ie_figoEvent;

	#define	RA_DSOutBlkReserved_dsFifoPtr 0x00040
	/* @'00040 */	SIE_UINT32 					ie_dsFifoPtr		 [4];
					#define	 arr_DSOutBlkReserved_dsFifoPtr 		  4

} SIE_DSOutBlkReserved;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DSOutBlkReserved_drvrd (SIE_DSOutBlkReserved *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DSOutBlkReserved_drvwr (SIE_DSOutBlkReserved *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DSOutBlkReserved_reset (SIE_DSOutBlkReserved *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DSOutBlkReserved_check(p,pie,ps8name,hfpErrLOG)		DSOutBlkReserved_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DSOutBlkReserved_print(p,    ps8name,hfpErrLOG)		DSOutBlkReserved_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DSOutBlkReserved_cmp   (SIE_DSOutBlkReserved *p, SIE_DSOutBlkReserved *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DSOutBlkReserved_import(SIE_DSOutBlkReserved *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DSOutBlkReserved_export(SIE_DSOutBlkReserved *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DSOutBlkReserved
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DTCMStream
*	@  HDR
*		$StreamHdr  hdr  0
*	@  DAT
*		$DTCMFifo  datFifo  CTRL
*		$DTCMFifo  ctrlFifo  0
**********************************************************************************************************************/
#ifdef	h_DTCMStream
#else
#define	h_DTCMStream

#define	\
	AR_DTCMStream \
		6
#define	\
	AB_DTCMStream \
		5

typedef struct SIE_DTCMStream {

	#define	RA_DTCMStream_HDR 			0x00000
	/* @'00000 */	SIE_StreamHdr 				ie_hdr;

	#define	RA_DTCMStream_DAT 			0x00008
	/* @'00008 */	SIE_DTCMFifo 				ie_datFifo;

	#define	RA_DTCMStream_ctrlFifo 		0x00010
	/* @'00010 */	SIE_DTCMFifo 				ie_ctrlFifo;

} SIE_DTCMStream;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DTCMStream_drvrd (SIE_DTCMStream *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DTCMStream_drvwr (SIE_DTCMStream *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DTCMStream_reset (SIE_DTCMStream *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DTCMStream_check(p,pie,ps8name,hfpErrLOG)		DTCMStream_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DTCMStream_print(p,    ps8name,hfpErrLOG)		DTCMStream_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DTCMStream_cmp   (SIE_DTCMStream *p, SIE_DTCMStream *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DTCMStream_import(SIE_DTCMStream *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DTCMStream_export(SIE_DTCMStream *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DTCMStream
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DSBlkRetEntry
*	@  DAT
*		%unsigned  16  puAddr  0
*		%unsigned  16  uValue
*		%unsigned  16  nDSCmdID
*		%unsigned  16  nReserved
**********************************************************************************************************************/
#ifdef	h_DSBlkRetEntry
#else
#define	h_DSBlkRetEntry

#define	\
	AR_DSBlkRetEntry \
		2
#define	\
	AB_DSBlkRetEntry \
		3

typedef struct SIE_DSBlkRetEntry {

	#define	RA_DSBlkRetEntry_DAT 		0x00000
	#define	w32DSBlkRetEntry_DAT 		{										\
					UNSG32				uDAT_puAddr					 : 16;		\
					UNSG32				uDAT_uValue					 : 16;		\
										}
	/* @'00000 */	union {	UNSG32		u32DSBlkRetEntry_DAT;
								struct	w32DSBlkRetEntry_DAT;
										};

	/* [15: 0] */	#define	  BA_DSBlkRetEntry_DAT_puAddr			 0x00000
	/* ---:--- */	#define	    bDSBlkRetEntry_DAT_puAddr			   16 /*bit*/
	/* ---:--- */	#define	LSb32DSBlkRetEntry_DAT_puAddr			    0 /*:15*/
	/* ---:--- */	#define	MSK32DSBlkRetEntry_DAT_puAddr			       0x0000FFFF
	/* ---:--- */	#define	GET32DSBlkRetEntry_DAT_puAddr(r32)			 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DSBlkRetEntry_DAT_puAddr(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DSBlkRetEntry_DAT_puAddr(r32,v)		do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DSBlkRetEntry_DAT_puAddr(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DSBlkRetEntry_DAT_uValue			 0x00002
	/* ---:--- */	#define	    bDSBlkRetEntry_DAT_uValue			   16 /*bit*/
	/* ---:--- */	#define	LSb32DSBlkRetEntry_DAT_uValue			   16 /*:31*/
	/* ---:--- */	#define	MSK32DSBlkRetEntry_DAT_uValue			       0xFFFF0000
	/* ---:--- */	#define	GET32DSBlkRetEntry_DAT_uValue(r32)			 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DSBlkRetEntry_DAT_uValue(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DSBlkRetEntry_DAT_uValue(r32,v)		do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DSBlkRetEntry_DAT_uValue(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DSBlkRetEntry_DAT1 		0x00004
	#define	w32DSBlkRetEntry_DAT1 		{										\
					UNSG32				uDAT_nDSCmdID				 : 16;		\
					UNSG32				uDAT_nReserved				 : 16;		\
										}
	/* @'00004 */	union {	UNSG32		u32DSBlkRetEntry_DAT1;
								struct	w32DSBlkRetEntry_DAT1;
										};

	/* [15: 0] */	#define	  BA_DSBlkRetEntry_DAT_nDSCmdID			 0x00004
	/* ---:--- */	#define	    bDSBlkRetEntry_DAT_nDSCmdID			   16 /*bit*/
	/* ---:--- */	#define	LSb32DSBlkRetEntry_DAT_nDSCmdID			    0 /*:15*/
	/* ---:--- */	#define	MSK32DSBlkRetEntry_DAT_nDSCmdID			       0x0000FFFF
	/* ---:--- */	#define	GET32DSBlkRetEntry_DAT_nDSCmdID(r32)		 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DSBlkRetEntry_DAT_nDSCmdID(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DSBlkRetEntry_DAT_nDSCmdID(r32,v)		do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DSBlkRetEntry_DAT_nDSCmdID(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DSBlkRetEntry_DAT_nReserved		 0x00006
	/* ---:--- */	#define	    bDSBlkRetEntry_DAT_nReserved		   16 /*bit*/
	/* ---:--- */	#define	LSb32DSBlkRetEntry_DAT_nReserved		   16 /*:31*/
	/* ---:--- */	#define	MSK32DSBlkRetEntry_DAT_nReserved		       0xFFFF0000
	/* ---:--- */	#define	GET32DSBlkRetEntry_DAT_nReserved(r32)		 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DSBlkRetEntry_DAT_nReserved(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DSBlkRetEntry_DAT_nReserved(r32,v)		do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DSBlkRetEntry_DAT_nReserved(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

} SIE_DSBlkRetEntry;

	#define	dftDSBlkRetEntry_DAT 		0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DSBlkRetEntry_DAT;
										} T32DSBlkRetEntry_DAT;
	#define	dftDSBlkRetEntry_DAT1 		0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DSBlkRetEntry_DAT1;
										} T32DSBlkRetEntry_DAT1;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DSBlkRetEntry_drvrd (SIE_DSBlkRetEntry *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DSBlkRetEntry_drvwr (SIE_DSBlkRetEntry *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DSBlkRetEntry_reset (SIE_DSBlkRetEntry *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DSBlkRetEntry_check(p,pie,ps8name,hfpErrLOG)		DSBlkRetEntry_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DSBlkRetEntry_print(p,    ps8name,hfpErrLOG)		DSBlkRetEntry_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DSBlkRetEntry_cmp   (SIE_DSBlkRetEntry *p, SIE_DSBlkRetEntry *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DSBlkRetEntry_import(SIE_DSBlkRetEntry *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DSBlkRetEntry_export(SIE_DSBlkRetEntry *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DSBlkRetEntry
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DSBlkRetQ
*	@  HDR
*		%unsigned  16  nRdOffset  REG
*		%unsigned  16  nWrOffset
*		%unsigned  32  nReserved32
*	@  DAT
*		$DSBlkRetEntry  entryList  REG  [16]
**********************************************************************************************************************/
#ifdef	h_DSBlkRetQ
#else
#define	h_DSBlkRetQ

#define	\
	AR_DSBlkRetQ \
		34
#define	\
	AB_DSBlkRetQ \
		8

typedef struct SIE_DSBlkRetQ {

	#define	RA_DSBlkRetQ_HDR 			0x00000
	#define	w32DSBlkRetQ_HDR 			{										\
					UNSG32				uHDR_nRdOffset				 : 16;		\
					UNSG32				uHDR_nWrOffset				 : 16;		\
										}
	/* @'00000 */	union {	UNSG32		u32DSBlkRetQ_HDR;
								struct	w32DSBlkRetQ_HDR;
										};

	/* [15: 0] */	#define	  BA_DSBlkRetQ_HDR_nRdOffset			 0x00000
	/* ---:--- */	#define	    bDSBlkRetQ_HDR_nRdOffset			   16 /*bit*/
	/* ---:--- */	#define	LSb32DSBlkRetQ_HDR_nRdOffset			    0 /*:15*/
	/* ---:--- */	#define	MSK32DSBlkRetQ_HDR_nRdOffset			       0x0000FFFF
	/* ---:--- */	#define	GET32DSBlkRetQ_HDR_nRdOffset(r32)			 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DSBlkRetQ_HDR_nRdOffset(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DSBlkRetQ_HDR_nRdOffset(r32,v)			do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DSBlkRetQ_HDR_nRdOffset(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DSBlkRetQ_HDR_nWrOffset			 0x00002
	/* ---:--- */	#define	    bDSBlkRetQ_HDR_nWrOffset			   16 /*bit*/
	/* ---:--- */	#define	LSb32DSBlkRetQ_HDR_nWrOffset			   16 /*:31*/
	/* ---:--- */	#define	MSK32DSBlkRetQ_HDR_nWrOffset			       0xFFFF0000
	/* ---:--- */	#define	GET32DSBlkRetQ_HDR_nWrOffset(r32)			 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DSBlkRetQ_HDR_nWrOffset(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DSBlkRetQ_HDR_nWrOffset(r32,v)			do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DSBlkRetQ_HDR_nWrOffset(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DSBlkRetQ_HDR1 			0x00004
	#define	w32DSBlkRetQ_HDR1 			{										\
					UNSG32				uHDR_nReserved32			 : 32;		\
										}
	/* @'00004 */	union {	UNSG32		u32DSBlkRetQ_HDR1;
								struct	w32DSBlkRetQ_HDR1;
										};

	/* [31: 0] */	#define	  BA_DSBlkRetQ_HDR_nReserved32			 0x00004
	/* ---:--- */	#define	    bDSBlkRetQ_HDR_nReserved32			   32 /*bit*/
	/* ---:--- */	#define	LSb32DSBlkRetQ_HDR_nReserved32			    0 /*:31*/
	/* ---:--- */	#define	MSK32DSBlkRetQ_HDR_nReserved32			       0xFFFFFFFF
	/* ---:--- */	#define	GET32DSBlkRetQ_HDR_nReserved32(r32)			 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DSBlkRetQ_HDR_nReserved32(r16)			 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DSBlkRetQ_HDR_nReserved32(r32,v)		do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DSBlkRetQ_HDR_nReserved32(r16,v)		do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DSBlkRetQ_DAT 			0x00008
	/* @'00008 */	SIE_DSBlkRetEntry 			ie_entryList		 [16];
					#define	 arr_DSBlkRetQ_entryList 				  16

} SIE_DSBlkRetQ;

	#define	dftDSBlkRetQ_HDR 			0x0000CCCC
			typedef	union {	UNSG32		u32;
								struct	w32DSBlkRetQ_HDR;
										} T32DSBlkRetQ_HDR;
	#define	dftDSBlkRetQ_HDR1 			0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DSBlkRetQ_HDR1;
										} T32DSBlkRetQ_HDR1;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DSBlkRetQ_drvrd (SIE_DSBlkRetQ *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DSBlkRetQ_drvwr (SIE_DSBlkRetQ *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DSBlkRetQ_reset (SIE_DSBlkRetQ *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DSBlkRetQ_check(p,pie,ps8name,hfpErrLOG)		DSBlkRetQ_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DSBlkRetQ_print(p,    ps8name,hfpErrLOG)		DSBlkRetQ_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DSBlkRetQ_cmp   (SIE_DSBlkRetQ *p, SIE_DSBlkRetQ *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DSBlkRetQ_import(SIE_DSBlkRetQ *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DSBlkRetQ_export(SIE_DSBlkRetQ *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DSBlkRetQ
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: StallCmd
*	@  CMD
*		%unsigned  16  cmdTag  0
*			:  RUN  1
*			:  STALL  2
*			:  JUMPTOROM  0
*	@  RSP
*		%unsigned  16  rspTag  0
**********************************************************************************************************************/
#ifdef	h_StallCmd
#else
#define	h_StallCmd

#define	\
	AR_StallCmd \
		2
#define	\
	AB_StallCmd \
		3

typedef struct SIE_StallCmd {

	#define	RA_StallCmd_CMD 			0x00000
	#define	w32StallCmd_CMD 			{										\
					UNSG32				uCMD_cmdTag					 : 16;		\
					UNSG32				_x00000	: 16;							\
										}
	/* @'00000 */	union {	UNSG32		u32StallCmd_CMD;
								struct	w32StallCmd_CMD;
										};

	/* [15: 0] */	#define	  BA_StallCmd_CMD_cmdTag				 0x00000
	/* ---:--- */	#define	    bStallCmd_CMD_cmdTag				   16 /*bit*/
	/* ---:--- */	#define	LSb32StallCmd_CMD_cmdTag				    0 /*:15*/
	/* ---:--- */	#define	MSK32StallCmd_CMD_cmdTag				       0x0000FFFF
	/* ---:--- */	#define	GET32StallCmd_CMD_cmdTag(r32)				 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16StallCmd_CMD_cmdTag(r16)				 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32StallCmd_CMD_cmdTag(r32,v)				do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16StallCmd_CMD_cmdTag(r16,v)				do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)
					#define	     StallCmd_CMD_cmdTag_RUN					0x1
					#define	     StallCmd_CMD_cmdTag_STALL					0x2
					#define	     StallCmd_CMD_cmdTag_JUMPTOROM				0x0

	#define	RA_StallCmd_RSP 			0x00004
	#define	w32StallCmd_RSP 			{										\
					UNSG32				uRSP_rspTag					 : 16;		\
					UNSG32				_x00004	: 16;							\
										}
	/* @'00004 */	union {	UNSG32		u32StallCmd_RSP;
								struct	w32StallCmd_RSP;
										};

	/* [15: 0] */	#define	  BA_StallCmd_RSP_rspTag				 0x00004
	/* ---:--- */	#define	    bStallCmd_RSP_rspTag				   16 /*bit*/
	/* ---:--- */	#define	LSb32StallCmd_RSP_rspTag				    0 /*:15*/
	/* ---:--- */	#define	MSK32StallCmd_RSP_rspTag				       0x0000FFFF
	/* ---:--- */	#define	GET32StallCmd_RSP_rspTag(r32)				 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16StallCmd_RSP_rspTag(r16)				 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32StallCmd_RSP_rspTag(r32,v)				do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16StallCmd_RSP_rspTag(r16,v)				do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

} SIE_StallCmd;

	#define	dftStallCmd_CMD 			0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32StallCmd_CMD;
										} T32StallCmd_CMD;
	#define	dftStallCmd_RSP 			0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32StallCmd_RSP;
										} T32StallCmd_RSP;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	StallCmd_drvrd (SIE_StallCmd *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	StallCmd_drvwr (SIE_StallCmd *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	StallCmd_reset (SIE_StallCmd *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	StallCmd_check(p,pie,ps8name,hfpErrLOG)		StallCmd_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	StallCmd_print(p,    ps8name,hfpErrLOG)		StallCmd_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	StallCmd_cmp   (SIE_StallCmd *p, SIE_StallCmd *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	StallCmd_import(SIE_StallCmd *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	StallCmd_export(SIE_StallCmd *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: StallCmd
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: LocalArea
*	@
*		%unsigned  16  uDsCmdIdRet  REG
*						*  *Data streamer retired command ID
*	@
*		%unsigned  32  nDSBase  REG
*	@
*		%unsigned  16  uNextDsCmdId  REG
*						*  *Next data streamer command ID
*	@  BRKCFG
*		%unsigned  1  uDisableBreakPoint  REG
*						*  *
*		$StallCmd  stallCmd  REG
*						*  *
*	@  DSRETQ
*		$DSBlkRetQ  retQ  REG
*	@  REGDUMP
*		$UINT64  regDumpArea  REG  [32]
*						*  *
*						*  Registers Dumping Area for debug purpose
*	@  IMGBASE
*		%unsigned  32  uDDRImgBase  REG
*						*  *
*						*  32 DDR Base of the shadow image
*		%unsigned  32  uReserved  REG
*						*  *
*						*  Reserved bits
*	@
*		$DTCMFifo  hboFifoList  REG  [16]
*						*  *
*						*  HBO Fifo Pointer Information
**********************************************************************************************************************/
#ifdef	h_LocalArea
#else
#define	h_LocalArea

#define	\
	AR_LocalArea \
		138
#define	\
	AB_LocalArea \
		10

typedef struct SIE_LocalArea {

	#define	RA_LocalArea_D0th_ 			ISC_USE_ONLY	0x00000
	#define	w32LocalArea_D0th_ 			{										\
					UNSG32				u_uDsCmdIdRet				 : 16;		\
					UNSG32				_x00000	: 16;							\
										}
	/* @'00000 */				struct	w32LocalArea_D0th_;

	/* [15: 0] */	#define	  BA_LocalArea_uDsCmdIdRet				 0x00000
	/* ---:--- */	#define	    bLocalArea_uDsCmdIdRet				   16 /*bit*/
	/* ---:--- */	#define	LSb32LocalArea_uDsCmdIdRet				    0 /*:15*/
	/* ---:--- */	#define	MSK32LocalArea_uDsCmdIdRet				       0x0000FFFF
	/* ---:--- */	#define	GET32LocalArea_uDsCmdIdRet(r32)				 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16LocalArea_uDsCmdIdRet(r16)				 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32LocalArea_uDsCmdIdRet(r32,v)			do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16LocalArea_uDsCmdIdRet(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_LocalArea_D1th_ 			ISC_USE_ONLY	0x00004
	#define	w32LocalArea_D1th_ 			{										\
					UNSG32				u_nDSBase					 : 32;		\
										}
	/* @'00004 */				struct	w32LocalArea_D1th_;

	/* [31: 0] */	#define	  BA_LocalArea_nDSBase					 0x00004
	/* ---:--- */	#define	    bLocalArea_nDSBase					   32 /*bit*/
	/* ---:--- */	#define	LSb32LocalArea_nDSBase					    0 /*:31*/
	/* ---:--- */	#define	MSK32LocalArea_nDSBase					       0xFFFFFFFF
	/* ---:--- */	#define	GET32LocalArea_nDSBase(r32)					 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16LocalArea_nDSBase(r16)					 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32LocalArea_nDSBase(r32,v)				do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16LocalArea_nDSBase(r16,v)				do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_LocalArea_D2th_ 			ISC_USE_ONLY	0x00008
	#define	w32LocalArea_D2th_ 			{										\
					UNSG32				u_uNextDsCmdId				 : 16;		\
					UNSG32				_x00008	: 16;							\
										}
	/* @'00008 */				struct	w32LocalArea_D2th_;

	/* [15: 0] */	#define	  BA_LocalArea_uNextDsCmdId				 0x00008
	/* ---:--- */	#define	    bLocalArea_uNextDsCmdId				   16 /*bit*/
	/* ---:--- */	#define	LSb32LocalArea_uNextDsCmdId				    0 /*:15*/
	/* ---:--- */	#define	MSK32LocalArea_uNextDsCmdId				       0x0000FFFF
	/* ---:--- */	#define	GET32LocalArea_uNextDsCmdId(r32)			 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16LocalArea_uNextDsCmdId(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32LocalArea_uNextDsCmdId(r32,v)			do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16LocalArea_uNextDsCmdId(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_LocalArea_BRKCFG 		0x0000C
	#define	w32LocalArea_BRKCFG 		{										\
					UNSG32				uBRKCFG_uDisableBreakPoint	 :  1;		\
					UNSG32				_x0000C	: 31;							\
										}
	/* @'0000C */	union {	UNSG32		u32LocalArea_BRKCFG;
								struct	w32LocalArea_BRKCFG;
										};

	/* [ 0: 0] */	#define	  BA_LocalArea_BRKCFG_uDisableBreakPoint 0x0000C
	/* ---:--- */	#define	    bLocalArea_BRKCFG_uDisableBreakPoint    1 /*bit*/
	/* ---:--- */	#define	LSb32LocalArea_BRKCFG_uDisableBreakPoint    0 /*: 0*/
	/* ---:--- */	#define	MSK32LocalArea_BRKCFG_uDisableBreakPoint       0x00000001
	/* ---:--- */	#define	GET32LocalArea_BRKCFG_uDisableBreakPoint(r32) (((r32)>> 0)&0x0001)
	/* ---:--- */	#define	GET16LocalArea_BRKCFG_uDisableBreakPoint(r16) (((r16)>> 0)&0x0001)
	/* ---:--- */	#define	SET32LocalArea_BRKCFG_uDisableBreakPoint(r32,v)do{(r32)&=~(0x0001<< 0);(r32)|=((v)&0x0001)<< 0;}while(0)
	/* ---:--- */	#define	SET16LocalArea_BRKCFG_uDisableBreakPoint(r16,v)do{(r16)&=~(0x0001<< 0);(r16)|=((v)&0x0001)<< 0;}while(0)

	#define	RA_LocalArea_stallCmd 		0x00010
	/* @'00010 */	SIE_StallCmd 				ie_stallCmd;

	#define	RA_LocalArea_DSRETQ 		0x00018
	/* @'00018 */	SIE_DSBlkRetQ 				ie_retQ;

	#define	RA_LocalArea_REGDUMP 		0x000A0
	/* @'000A0 */	SIE_UINT64 					ie_regDumpArea		 [32];
					#define	 arr_LocalArea_regDumpArea 				  32

	#define	RA_LocalArea_IMGBASE 		0x001A0
	#define	w32LocalArea_IMGBASE 		{										\
					UNSG32				uIMGBASE_uDDRImgBase		 : 32;		\
										}
	/* @'001A0 */	union {	UNSG32		u32LocalArea_IMGBASE;
								struct	w32LocalArea_IMGBASE;
										};

	/* [31: 0] */	#define	  BA_LocalArea_IMGBASE_uDDRImgBase		 0x001A0
	/* ---:--- */	#define	    bLocalArea_IMGBASE_uDDRImgBase		   32 /*bit*/
	/* ---:--- */	#define	LSb32LocalArea_IMGBASE_uDDRImgBase		    0 /*:31*/
	/* ---:--- */	#define	MSK32LocalArea_IMGBASE_uDDRImgBase		       0xFFFFFFFF
	/* ---:--- */	#define	GET32LocalArea_IMGBASE_uDDRImgBase(r32)		 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16LocalArea_IMGBASE_uDDRImgBase(r16)		 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32LocalArea_IMGBASE_uDDRImgBase(r32,v)	do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16LocalArea_IMGBASE_uDDRImgBase(r16,v)	do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_LocalArea_IMGBASE1 		0x001A4
	#define	w32LocalArea_IMGBASE1 		{										\
					UNSG32				uIMGBASE_uReserved			 : 32;		\
										}
	/* @'001A4 */	union {	UNSG32		u32LocalArea_IMGBASE1;
								struct	w32LocalArea_IMGBASE1;
										};

	/* [31: 0] */	#define	  BA_LocalArea_IMGBASE_uReserved		 0x001A4
	/* ---:--- */	#define	    bLocalArea_IMGBASE_uReserved		   32 /*bit*/
	/* ---:--- */	#define	LSb32LocalArea_IMGBASE_uReserved		    0 /*:31*/
	/* ---:--- */	#define	MSK32LocalArea_IMGBASE_uReserved		       0xFFFFFFFF
	/* ---:--- */	#define	GET32LocalArea_IMGBASE_uReserved(r32)		 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16LocalArea_IMGBASE_uReserved(r16)		 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32LocalArea_IMGBASE_uReserved(r32,v)		do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16LocalArea_IMGBASE_uReserved(r16,v)		do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_LocalArea_hboFifoList 	0x001A8
	/* @'001A8 */	SIE_DTCMFifo 				ie_hboFifoList		 [16];
					#define	 arr_LocalArea_hboFifoList 				  16

} SIE_LocalArea;

	#define	dftLocalArea_BRKCFG 		0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32LocalArea_BRKCFG;
										} T32LocalArea_BRKCFG;
	#define	dftLocalArea_IMGBASE 		0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32LocalArea_IMGBASE;
										} T32LocalArea_IMGBASE;
	#define	dftLocalArea_IMGBASE1 		0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32LocalArea_IMGBASE1;
										} T32LocalArea_IMGBASE1;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	LocalArea_drvrd (SIE_LocalArea *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	LocalArea_drvwr (SIE_LocalArea *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	LocalArea_reset (SIE_LocalArea *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	LocalArea_check(p,pie,ps8name,hfpErrLOG)		LocalArea_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	LocalArea_print(p,    ps8name,hfpErrLOG)		LocalArea_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	LocalArea_cmp   (SIE_LocalArea *p, SIE_LocalArea *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	LocalArea_import(SIE_LocalArea *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	LocalArea_export(SIE_LocalArea *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: LocalArea
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: LACryptoCmdCnt
*	@  Local
*		%unsigned  16  uLocalCmdCnt  0
*	@  RegSyn
*		%unsigned  16  uCryptoEngineUpdateCnt  0
**********************************************************************************************************************/
#ifdef	h_LACryptoCmdCnt
#else
#define	h_LACryptoCmdCnt

#define	\
	AR_LACryptoCmdCnt \
		2
#define	\
	AB_LACryptoCmdCnt \
		3

typedef struct SIE_LACryptoCmdCnt {

	#define	RA_LACryptoCmdCnt_Local 	0x00000
	#define	w32LACryptoCmdCnt_Local 	{										\
					UNSG32				uLocal_uLocalCmdCnt			 : 16;		\
					UNSG32				_x00000	: 16;							\
										}
	/* @'00000 */	union {	UNSG32		u32LACryptoCmdCnt_Local;
								struct	w32LACryptoCmdCnt_Local;
										};

	/* [15: 0] */	#define	  BA_LACryptoCmdCnt_Local_uLocalCmdCnt	 0x00000
	/* ---:--- */	#define	    bLACryptoCmdCnt_Local_uLocalCmdCnt	   16 /*bit*/
	/* ---:--- */	#define	LSb32LACryptoCmdCnt_Local_uLocalCmdCnt	    0 /*:15*/
	/* ---:--- */	#define	MSK32LACryptoCmdCnt_Local_uLocalCmdCnt	       0x0000FFFF
	/* ---:--- */	#define	GET32LACryptoCmdCnt_Local_uLocalCmdCnt(r32)	 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16LACryptoCmdCnt_Local_uLocalCmdCnt(r16)	 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32LACryptoCmdCnt_Local_uLocalCmdCnt(r32,v)do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16LACryptoCmdCnt_Local_uLocalCmdCnt(r16,v)do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_LACryptoCmdCnt_RegSyn 	0x00004
	#define	w32LACryptoCmdCnt_RegSyn 	{										\
					UNSG32				uRegSyn_uCryptoEngineUpdateCnt : 16;		\
					UNSG32				_x00004	: 16;							\
										}
	/* @'00004 */	union {	UNSG32		u32LACryptoCmdCnt_RegSyn;
								struct	w32LACryptoCmdCnt_RegSyn;
										};

	/* [15: 0] */	#define	  BA_LACryptoCmdCnt_RegSyn_uCryptoEngineUpdateCnt 0x00004
	/* ---:--- */	#define	    bLACryptoCmdCnt_RegSyn_uCryptoEngineUpdateCnt   16 /*bit*/
	/* ---:--- */	#define	LSb32LACryptoCmdCnt_RegSyn_uCryptoEngineUpdateCnt    0 /*:15*/
	/* ---:--- */	#define	MSK32LACryptoCmdCnt_RegSyn_uCryptoEngineUpdateCnt       0x0000FFFF
	/* ---:--- */	#define	GET32LACryptoCmdCnt_RegSyn_uCryptoEngineUpdateCnt(r32) (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16LACryptoCmdCnt_RegSyn_uCryptoEngineUpdateCnt(r16) (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32LACryptoCmdCnt_RegSyn_uCryptoEngineUpdateCnt(r32,v)do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16LACryptoCmdCnt_RegSyn_uCryptoEngineUpdateCnt(r16,v)do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

} SIE_LACryptoCmdCnt;

	#define	dftLACryptoCmdCnt_Local 	0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32LACryptoCmdCnt_Local;
										} T32LACryptoCmdCnt_Local;
	#define	dftLACryptoCmdCnt_RegSyn 	0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32LACryptoCmdCnt_RegSyn;
										} T32LACryptoCmdCnt_RegSyn;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	LACryptoCmdCnt_drvrd (SIE_LACryptoCmdCnt *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	LACryptoCmdCnt_drvwr (SIE_LACryptoCmdCnt *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	LACryptoCmdCnt_reset (SIE_LACryptoCmdCnt *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	LACryptoCmdCnt_check(p,pie,ps8name,hfpErrLOG)		LACryptoCmdCnt_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	LACryptoCmdCnt_print(p,    ps8name,hfpErrLOG)		LACryptoCmdCnt_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	LACryptoCmdCnt_cmp   (SIE_LACryptoCmdCnt *p, SIE_LACryptoCmdCnt *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	LACryptoCmdCnt_import(SIE_LACryptoCmdCnt *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	LACryptoCmdCnt_export(SIE_LACryptoCmdCnt *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: LACryptoCmdCnt
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: LocalArea_Ext
*	@
*		%unsigned  16  uDsCmdIdRet  REG
*						*  *Data streamer retired command ID
*	@
*		%unsigned  32  nDSBase  REG
*	@
*		%unsigned  16  uNextDsCmdId  REG
*						*  *Next data streamer command ID
*	@  BRKCFG
*		%unsigned  1  uDisableBreakPoint  REG
*						*  *
*		$StallCmd  stallCmd  REG
*						*  *
*	@  DSRETQ
*		$DSBlkRetQ  retQ  REG
*	@  REGDUMP
*		$UINT64  regDumpArea  REG  [32]
*						*  *
*						*  Registers Dumping Area for debug purpose
*	@  IMGBASE
*		%unsigned  32  uDDRImgBase  REG
*						*  *
*						*  32 DDR Base of the shadow image
*		%unsigned  32  uReserved  REG
*						*  *
*						*  Reserved bits
*	@
*		$DTCMFifo  hboFifoList  REG  [16]
*						*  *
*						*  HBO Fifo Pointer Information
*	@  CryEngine
*		$LACryptoCmdCnt  CryptoRtn  REG  [3]
*						*  *
*						*  CMD count for crypto engine
**********************************************************************************************************************/
#ifdef	h_LocalArea_Ext
#else
#define	h_LocalArea_Ext

#define	\
	AR_LocalArea_Ext \
		144
#define	\
	AB_LocalArea_Ext \
		10

typedef struct SIE_LocalArea_Ext {

	#define	RA_LocalArea_Ext_D0th_ 		ISC_USE_ONLY	0x00000
	#define	w32LocalArea_Ext_D0th_ 		{										\
					UNSG32				u_uDsCmdIdRet				 : 16;		\
					UNSG32				_x00000	: 16;							\
										}
	/* @'00000 */				struct	w32LocalArea_Ext_D0th_;

	/* [15: 0] */	#define	  BA_LocalArea_Ext_uDsCmdIdRet			 0x00000
	/* ---:--- */	#define	    bLocalArea_Ext_uDsCmdIdRet			   16 /*bit*/
	/* ---:--- */	#define	LSb32LocalArea_Ext_uDsCmdIdRet			    0 /*:15*/
	/* ---:--- */	#define	MSK32LocalArea_Ext_uDsCmdIdRet			       0x0000FFFF
	/* ---:--- */	#define	GET32LocalArea_Ext_uDsCmdIdRet(r32)			 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16LocalArea_Ext_uDsCmdIdRet(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32LocalArea_Ext_uDsCmdIdRet(r32,v)		do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16LocalArea_Ext_uDsCmdIdRet(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_LocalArea_Ext_D1th_ 		ISC_USE_ONLY	0x00004
	#define	w32LocalArea_Ext_D1th_ 		{										\
					UNSG32				u_nDSBase					 : 32;		\
										}
	/* @'00004 */				struct	w32LocalArea_Ext_D1th_;

	/* [31: 0] */	#define	  BA_LocalArea_Ext_nDSBase				 0x00004
	/* ---:--- */	#define	    bLocalArea_Ext_nDSBase				   32 /*bit*/
	/* ---:--- */	#define	LSb32LocalArea_Ext_nDSBase				    0 /*:31*/
	/* ---:--- */	#define	MSK32LocalArea_Ext_nDSBase				       0xFFFFFFFF
	/* ---:--- */	#define	GET32LocalArea_Ext_nDSBase(r32)				 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16LocalArea_Ext_nDSBase(r16)				 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32LocalArea_Ext_nDSBase(r32,v)			do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16LocalArea_Ext_nDSBase(r16,v)			do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_LocalArea_Ext_D2th_ 		ISC_USE_ONLY	0x00008
	#define	w32LocalArea_Ext_D2th_ 		{										\
					UNSG32				u_uNextDsCmdId				 : 16;		\
					UNSG32				_x00008	: 16;							\
										}
	/* @'00008 */				struct	w32LocalArea_Ext_D2th_;

	/* [15: 0] */	#define	  BA_LocalArea_Ext_uNextDsCmdId			 0x00008
	/* ---:--- */	#define	    bLocalArea_Ext_uNextDsCmdId			   16 /*bit*/
	/* ---:--- */	#define	LSb32LocalArea_Ext_uNextDsCmdId			    0 /*:15*/
	/* ---:--- */	#define	MSK32LocalArea_Ext_uNextDsCmdId			       0x0000FFFF
	/* ---:--- */	#define	GET32LocalArea_Ext_uNextDsCmdId(r32)		 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16LocalArea_Ext_uNextDsCmdId(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32LocalArea_Ext_uNextDsCmdId(r32,v)		do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16LocalArea_Ext_uNextDsCmdId(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_LocalArea_Ext_BRKCFG 	0x0000C
	#define	w32LocalArea_Ext_BRKCFG 	{										\
					UNSG32				uBRKCFG_uDisableBreakPoint	 :  1;		\
					UNSG32				_x0000C	: 31;							\
										}
	/* @'0000C */	union {	UNSG32		u32LocalArea_Ext_BRKCFG;
								struct	w32LocalArea_Ext_BRKCFG;
										};

	/* [ 0: 0] */	#define	  BA_LocalArea_Ext_BRKCFG_uDisableBreakPoint 0x0000C
	/* ---:--- */	#define	    bLocalArea_Ext_BRKCFG_uDisableBreakPoint    1 /*bit*/
	/* ---:--- */	#define	LSb32LocalArea_Ext_BRKCFG_uDisableBreakPoint    0 /*: 0*/
	/* ---:--- */	#define	MSK32LocalArea_Ext_BRKCFG_uDisableBreakPoint       0x00000001
	/* ---:--- */	#define	GET32LocalArea_Ext_BRKCFG_uDisableBreakPoint(r32) (((r32)>> 0)&0x0001)
	/* ---:--- */	#define	GET16LocalArea_Ext_BRKCFG_uDisableBreakPoint(r16) (((r16)>> 0)&0x0001)
	/* ---:--- */	#define	SET32LocalArea_Ext_BRKCFG_uDisableBreakPoint(r32,v)do{(r32)&=~(0x0001<< 0);(r32)|=((v)&0x0001)<< 0;}while(0)
	/* ---:--- */	#define	SET16LocalArea_Ext_BRKCFG_uDisableBreakPoint(r16,v)do{(r16)&=~(0x0001<< 0);(r16)|=((v)&0x0001)<< 0;}while(0)

	#define	RA_LocalArea_Ext_stallCmd 	0x00010
	/* @'00010 */	SIE_StallCmd 				ie_stallCmd;

	#define	RA_LocalArea_Ext_DSRETQ 	0x00018
	/* @'00018 */	SIE_DSBlkRetQ 				ie_retQ;

	#define	RA_LocalArea_Ext_REGDUMP 	0x000A0
	/* @'000A0 */	SIE_UINT64 					ie_regDumpArea		 [32];
					#define	 arr_LocalArea_Ext_regDumpArea 			  32

	#define	RA_LocalArea_Ext_IMGBASE 	0x001A0
	#define	w32LocalArea_Ext_IMGBASE 	{										\
					UNSG32				uIMGBASE_uDDRImgBase		 : 32;		\
										}
	/* @'001A0 */	union {	UNSG32		u32LocalArea_Ext_IMGBASE;
								struct	w32LocalArea_Ext_IMGBASE;
										};

	/* [31: 0] */	#define	  BA_LocalArea_Ext_IMGBASE_uDDRImgBase	 0x001A0
	/* ---:--- */	#define	    bLocalArea_Ext_IMGBASE_uDDRImgBase	   32 /*bit*/
	/* ---:--- */	#define	LSb32LocalArea_Ext_IMGBASE_uDDRImgBase	    0 /*:31*/
	/* ---:--- */	#define	MSK32LocalArea_Ext_IMGBASE_uDDRImgBase	       0xFFFFFFFF
	/* ---:--- */	#define	GET32LocalArea_Ext_IMGBASE_uDDRImgBase(r32)	 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16LocalArea_Ext_IMGBASE_uDDRImgBase(r16)	 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32LocalArea_Ext_IMGBASE_uDDRImgBase(r32,v)do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16LocalArea_Ext_IMGBASE_uDDRImgBase(r16,v)do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_LocalArea_Ext_IMGBASE1 	0x001A4
	#define	w32LocalArea_Ext_IMGBASE1 	{										\
					UNSG32				uIMGBASE_uReserved			 : 32;		\
										}
	/* @'001A4 */	union {	UNSG32		u32LocalArea_Ext_IMGBASE1;
								struct	w32LocalArea_Ext_IMGBASE1;
										};

	/* [31: 0] */	#define	  BA_LocalArea_Ext_IMGBASE_uReserved	 0x001A4
	/* ---:--- */	#define	    bLocalArea_Ext_IMGBASE_uReserved	   32 /*bit*/
	/* ---:--- */	#define	LSb32LocalArea_Ext_IMGBASE_uReserved	    0 /*:31*/
	/* ---:--- */	#define	MSK32LocalArea_Ext_IMGBASE_uReserved	       0xFFFFFFFF
	/* ---:--- */	#define	GET32LocalArea_Ext_IMGBASE_uReserved(r32)	 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16LocalArea_Ext_IMGBASE_uReserved(r16)	 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32LocalArea_Ext_IMGBASE_uReserved(r32,v)	do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16LocalArea_Ext_IMGBASE_uReserved(r16,v)	do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_LocalArea_Ext_hboFifoList 0x001A8
	/* @'001A8 */	SIE_DTCMFifo 				ie_hboFifoList		 [16];
					#define	 arr_LocalArea_Ext_hboFifoList 			  16

	#define	RA_LocalArea_Ext_CryEngine 	0x00228
	/* @'00228 */	SIE_LACryptoCmdCnt 			ie_CryptoRtn		 [3];
					#define	 arr_LocalArea_Ext_CryptoRtn 			  3

} SIE_LocalArea_Ext;

	#define	dftLocalArea_Ext_BRKCFG 	0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32LocalArea_Ext_BRKCFG;
										} T32LocalArea_Ext_BRKCFG;
	#define	dftLocalArea_Ext_IMGBASE 	0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32LocalArea_Ext_IMGBASE;
										} T32LocalArea_Ext_IMGBASE;
	#define	dftLocalArea_Ext_IMGBASE1 	0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32LocalArea_Ext_IMGBASE1;
										} T32LocalArea_Ext_IMGBASE1;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	LocalArea_Ext_drvrd (SIE_LocalArea_Ext *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	LocalArea_Ext_drvwr (SIE_LocalArea_Ext *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	LocalArea_Ext_reset (SIE_LocalArea_Ext *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	LocalArea_Ext_check(p,pie,ps8name,hfpErrLOG)		LocalArea_Ext_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	LocalArea_Ext_print(p,    ps8name,hfpErrLOG)		LocalArea_Ext_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	LocalArea_Ext_cmp   (SIE_LocalArea_Ext *p, SIE_LocalArea_Ext *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	LocalArea_Ext_import(SIE_LocalArea_Ext *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	LocalArea_Ext_export(SIE_LocalArea_Ext *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: LocalArea_Ext
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: OTP_PRV_KEY
*	@
*		$UINT128  rsaPubKey  REG  [4]
*						*  *
*						*  512 bits RSA Public Key Data.
*	@
*		$UINT128  rsaMod  REG  [8]
*						*  *
*						*  1024 bits RSA Modulus Data
**********************************************************************************************************************/
#ifdef	h_OTP_PRV_KEY
#else
#define	h_OTP_PRV_KEY

#define	\
	AR_OTP_PRV_KEY \
		48
#define	\
	AB_OTP_PRV_KEY \
		8

typedef struct SIE_OTP_PRV_KEY {

	#define	RA_OTP_PRV_KEY_rsaPubKey 	0x00000
	/* @'00000 */	SIE_UINT128 				ie_rsaPubKey		 [4];
					#define	 arr_OTP_PRV_KEY_rsaPubKey 				  4

	#define	RA_OTP_PRV_KEY_rsaMod 		0x00040
	/* @'00040 */	SIE_UINT128 				ie_rsaMod			 [8];
					#define	 arr_OTP_PRV_KEY_rsaMod 				  8

} SIE_OTP_PRV_KEY;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	OTP_PRV_KEY_drvrd (SIE_OTP_PRV_KEY *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	OTP_PRV_KEY_drvwr (SIE_OTP_PRV_KEY *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	OTP_PRV_KEY_reset (SIE_OTP_PRV_KEY *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	OTP_PRV_KEY_check(p,pie,ps8name,hfpErrLOG)		OTP_PRV_KEY_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	OTP_PRV_KEY_print(p,    ps8name,hfpErrLOG)		OTP_PRV_KEY_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	OTP_PRV_KEY_cmp   (SIE_OTP_PRV_KEY *p, SIE_OTP_PRV_KEY *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	OTP_PRV_KEY_import(SIE_OTP_PRV_KEY *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	OTP_PRV_KEY_export(SIE_OTP_PRV_KEY *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: OTP_PRV_KEY
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: OTP_CRC32
*	@
*		%unsigned  32  prvkCrc32
*						*  *
*						*  CRC32 value of Private Key Data region
*	@
*		%unsigned  32  rkekCrc32
*						*  *
*						*  CRC32 value of RKEK Key Data region
*	@
*		%unsigned  32  aeskCrc32
*						*  *
*						*  CRC32 value of AES Key Data region
*	@
*		%unsigned  32  reserved
**********************************************************************************************************************/
#ifdef	h_OTP_CRC32
#else
#define	h_OTP_CRC32

#define	\
	AR_OTP_CRC32 \
		4
#define	\
	AB_OTP_CRC32 \
		4

typedef struct SIE_OTP_CRC32 {

	#define	RA_OTP_CRC32_D0th_ 			ISC_USE_ONLY	0x00000
	#define	w32OTP_CRC32_D0th_ 			{										\
					UNSG32				u_prvkCrc32					 : 32;		\
										}
	/* @'00000 */				struct	w32OTP_CRC32_D0th_;

	/* [31: 0] */	#define	  BA_OTP_CRC32_prvkCrc32				 0x00000
	/* ---:--- */	#define	    bOTP_CRC32_prvkCrc32				   32 /*bit*/
	/* ---:--- */	#define	LSb32OTP_CRC32_prvkCrc32				    0 /*:31*/
	/* ---:--- */	#define	MSK32OTP_CRC32_prvkCrc32				       0xFFFFFFFF
	/* ---:--- */	#define	GET32OTP_CRC32_prvkCrc32(r32)				 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16OTP_CRC32_prvkCrc32(r16)				 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32OTP_CRC32_prvkCrc32(r32,v)				do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16OTP_CRC32_prvkCrc32(r16,v)				do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_OTP_CRC32_D1th_ 			ISC_USE_ONLY	0x00004
	#define	w32OTP_CRC32_D1th_ 			{										\
					UNSG32				u_rkekCrc32					 : 32;		\
										}
	/* @'00004 */				struct	w32OTP_CRC32_D1th_;

	/* [31: 0] */	#define	  BA_OTP_CRC32_rkekCrc32				 0x00004
	/* ---:--- */	#define	    bOTP_CRC32_rkekCrc32				   32 /*bit*/
	/* ---:--- */	#define	LSb32OTP_CRC32_rkekCrc32				    0 /*:31*/
	/* ---:--- */	#define	MSK32OTP_CRC32_rkekCrc32				       0xFFFFFFFF
	/* ---:--- */	#define	GET32OTP_CRC32_rkekCrc32(r32)				 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16OTP_CRC32_rkekCrc32(r16)				 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32OTP_CRC32_rkekCrc32(r32,v)				do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16OTP_CRC32_rkekCrc32(r16,v)				do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_OTP_CRC32_D2th_ 			ISC_USE_ONLY	0x00008
	#define	w32OTP_CRC32_D2th_ 			{										\
					UNSG32				u_aeskCrc32					 : 32;		\
										}
	/* @'00008 */				struct	w32OTP_CRC32_D2th_;

	/* [31: 0] */	#define	  BA_OTP_CRC32_aeskCrc32				 0x00008
	/* ---:--- */	#define	    bOTP_CRC32_aeskCrc32				   32 /*bit*/
	/* ---:--- */	#define	LSb32OTP_CRC32_aeskCrc32				    0 /*:31*/
	/* ---:--- */	#define	MSK32OTP_CRC32_aeskCrc32				       0xFFFFFFFF
	/* ---:--- */	#define	GET32OTP_CRC32_aeskCrc32(r32)				 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16OTP_CRC32_aeskCrc32(r16)				 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32OTP_CRC32_aeskCrc32(r32,v)				do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16OTP_CRC32_aeskCrc32(r16,v)				do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_OTP_CRC32_D3th_ 			ISC_USE_ONLY	0x0000C
	#define	w32OTP_CRC32_D3th_ 			{										\
					UNSG32				u_reserved					 : 32;		\
										}
	/* @'0000C */				struct	w32OTP_CRC32_D3th_;

	/* [31: 0] */	#define	  BA_OTP_CRC32_reserved					 0x0000C
	/* ---:--- */	#define	    bOTP_CRC32_reserved					   32 /*bit*/
	/* ---:--- */	#define	LSb32OTP_CRC32_reserved					    0 /*:31*/
	/* ---:--- */	#define	MSK32OTP_CRC32_reserved					       0xFFFFFFFF
	/* ---:--- */	#define	GET32OTP_CRC32_reserved(r32)				 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16OTP_CRC32_reserved(r16)				 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32OTP_CRC32_reserved(r32,v)				do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16OTP_CRC32_reserved(r16,v)				do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

} SIE_OTP_CRC32;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	OTP_CRC32_drvrd (SIE_OTP_CRC32 *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	OTP_CRC32_drvwr (SIE_OTP_CRC32 *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	OTP_CRC32_reset (SIE_OTP_CRC32 *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	OTP_CRC32_check(p,pie,ps8name,hfpErrLOG)		OTP_CRC32_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	OTP_CRC32_print(p,    ps8name,hfpErrLOG)		OTP_CRC32_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	OTP_CRC32_cmp   (SIE_OTP_CRC32 *p, SIE_OTP_CRC32 *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	OTP_CRC32_import(SIE_OTP_CRC32 *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	OTP_CRC32_export(SIE_OTP_CRC32 *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: OTP_CRC32
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: OTP_DAT
*	@  PRVK_START
*		$UINT128  prvkDatHamming  REG  [2]
*						*  *
*						*  Private key information hamming code
*	@  PRVK_INFO
*		%unsigned  8  prvkInfoHamming
*						*  *
*						*  Information header hamming code
*		%unsigned  8  crc32Val0
*		%unsigned  8  crc32Val1
*		%unsigned  8  crc32Val2
*		%unsigned  8  crc32Val3
*						*  *
*						*  CRC32 value of Private Key and configuration information
*		%unsigned  8  prvkType
*			:  AES128  1
*			:  CHIPID128  2
*			:  RSA1024_PUBKEY  4
*			:  RSA1024_PRVKEY  8
*			:  RSA2048_PRVK  16
*		%unsigned  8  otpKeyEnable
*						*  *
*						*  Mask for OTP and ROM Key enable/disable
*						*  00: Disable OTP Key,
*						*       Enable ROM Key
*						*  01: Enable OTP Key
*						*      Enable ROM Key
*						*  10: Disable OTP Key
*						*      Disable ROM Key
*						*  11: Enable OTP Key
*						*      Disable ROM Key
*		%unsigned  8  reserved
*	@  PRVK_DAT
*		$UINT128  prvkDat  REG  [12]
*						*  *
*						*  Private Key Data which contains 128 bits symmetric verification key and public key and modulus of RSA algorithm.
*	@  RKEK
*		$UINT128  kekDat  0
*						*  *
*						*  128-bit Root Key Encryption Key (RKEK), which is randomly created, and burned into OTP registers at fist the time boot-up while manufacturing.
*	@  AESK_START
*		$UINT64  aeskDatHamming
*						*  *
*						*  aes key information hamming code
*	@  AESK_INFO
*		%unsigned  8  aeskInfoHamming
*						*  *
*						*  Information header hamming code
*		%unsigned  8  crc32Val0
*		%unsigned  8  crc32Val1
*		%unsigned  8  crc32Val2
*		%unsigned  8  crc32Val3
*						*  *
*						*  CRC32 value of AES Key and configuration information
*		%unsigned  8  aeskType
*		%unsigned  16  featureInfo1
*						*  *
*						*  Reserved information
*	@  AESK_DAT
*		$UINT64  aeskDat  REG  [2]
*						*  *
*						*  AES Key Data
*	@  CHIP_INFO
*		$UINT128  bindInfo
*						*  *
*						*  Binding info of the platform which indicates the chip features
*	@  USER_INFO
*		$UINT128  userInfo
*						*  *
*						*  Customizable area which indicates the products ID and reversion ID
*	@
*		$UINT64  reserved
*						*  *
*						*  64-bit reserved data
**********************************************************************************************************************/
#ifdef	h_OTP_DAT
#else
#define	h_OTP_DAT

#define	\
	AR_OTP_DAT \
		80
#define	\
	AB_OTP_DAT \
		9

typedef struct SIE_OTP_DAT {

	#define	RA_OTP_DAT_PRVK_START 		0x00000
	/* @'00000 */	SIE_UINT128 				ie_prvkDatHamming	 [2];
					#define	 arr_OTP_DAT_prvkDatHamming 			  2

	#define	RA_OTP_DAT_PRVK_INFO 		0x00020
	#define	w32OTP_DAT_PRVK_INFO 		{										\
					UNSG32				uPRVK_INFO_prvkInfoHamming	 :  8;		\
					UNSG32				uPRVK_INFO_crc32Val0		 :  8;		\
					UNSG32				uPRVK_INFO_crc32Val1		 :  8;		\
					UNSG32				uPRVK_INFO_crc32Val2		 :  8;		\
										}
	/* @'00020 */	union {	UNSG32		u32OTP_DAT_PRVK_INFO;
								struct	w32OTP_DAT_PRVK_INFO;
										};

	/* [ 7: 0] */	#define	  BA_OTP_DAT_PRVK_INFO_prvkInfoHamming	 0x00020
	/* ---:--- */	#define	    bOTP_DAT_PRVK_INFO_prvkInfoHamming	    8 /*bit*/
	/* ---:--- */	#define	LSb32OTP_DAT_PRVK_INFO_prvkInfoHamming	    0 /*: 7*/
	/* ---:--- */	#define	MSK32OTP_DAT_PRVK_INFO_prvkInfoHamming	       0x000000FF
	/* ---:--- */	#define	GET32OTP_DAT_PRVK_INFO_prvkInfoHamming(r32)	 (((r32)>> 0)&0x00FF)
	/* ---:--- */	#define	GET16OTP_DAT_PRVK_INFO_prvkInfoHamming(r16)	 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32OTP_DAT_PRVK_INFO_prvkInfoHamming(r32,v)do{(r32)&=~(0x00FF<< 0);(r32)|=((v)&0x00FF)<< 0;}while(0)
	/* ---:--- */	#define	SET16OTP_DAT_PRVK_INFO_prvkInfoHamming(r16,v)do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	/* [15: 8] */	#define	  BA_OTP_DAT_PRVK_INFO_crc32Val0		 0x00021
	/* ---:--- */	#define	    bOTP_DAT_PRVK_INFO_crc32Val0		    8 /*bit*/
	/* ---:--- */	#define	LSb32OTP_DAT_PRVK_INFO_crc32Val0		    8 /*:15*/
	/* ---:--- */	#define	MSK32OTP_DAT_PRVK_INFO_crc32Val0		       0x0000FF00
	/* ---:--- */	#define	GET32OTP_DAT_PRVK_INFO_crc32Val0(r32)		 (((r32)>> 8)&0x00FF)
	/* ---:--- */	#define	GET16OTP_DAT_PRVK_INFO_crc32Val0(r16)		 (((r16)>> 8)&0x00FF)
	/* ---:--- */	#define	SET32OTP_DAT_PRVK_INFO_crc32Val0(r32,v)		do{(r32)&=~(0x00FF<< 8);(r32)|=((v)&0x00FF)<< 8;}while(0)
	/* ---:--- */	#define	SET16OTP_DAT_PRVK_INFO_crc32Val0(r16,v)		do{(r16)&=~(0x00FF<< 8);(r16)|=((v)&0x00FF)<< 8;}while(0)

	/* [23:16] */	#define	  BA_OTP_DAT_PRVK_INFO_crc32Val1		 0x00022
	/* ---:--- */	#define	    bOTP_DAT_PRVK_INFO_crc32Val1		    8 /*bit*/
	/* ---:--- */	#define	LSb32OTP_DAT_PRVK_INFO_crc32Val1		   16 /*:23*/
	/* ---:--- */	#define	MSK32OTP_DAT_PRVK_INFO_crc32Val1		       0x00FF0000
	/* ---:--- */	#define	GET32OTP_DAT_PRVK_INFO_crc32Val1(r32)		 (((r32)>>16)&0x00FF)
	/* ---:--- */	#define	GET16OTP_DAT_PRVK_INFO_crc32Val1(r16)		 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32OTP_DAT_PRVK_INFO_crc32Val1(r32,v)		do{(r32)&=~(0x00FF<<16);(r32)|=((v)&0x00FF)<<16;}while(0)
	/* ---:--- */	#define	SET16OTP_DAT_PRVK_INFO_crc32Val1(r16,v)		do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	/* [31:24] */	#define	  BA_OTP_DAT_PRVK_INFO_crc32Val2		 0x00023
	/* ---:--- */	#define	    bOTP_DAT_PRVK_INFO_crc32Val2		    8 /*bit*/
	/* ---:--- */	#define	LSb32OTP_DAT_PRVK_INFO_crc32Val2		   24 /*:31*/
	/* ---:--- */	#define	MSK32OTP_DAT_PRVK_INFO_crc32Val2		       0xFF000000
	/* ---:--- */	#define	GET32OTP_DAT_PRVK_INFO_crc32Val2(r32)		 (((r32)>>24)&0x00FF)
	/* ---:--- */	#define	GET16OTP_DAT_PRVK_INFO_crc32Val2(r16)		 (((r16)>> 8)&0x00FF)
	/* ---:--- */	#define	SET32OTP_DAT_PRVK_INFO_crc32Val2(r32,v)		do{(r32)&=~(0x00FF<<24);(r32)|=((v)&0x00FF)<<24;}while(0)
	/* ---:--- */	#define	SET16OTP_DAT_PRVK_INFO_crc32Val2(r16,v)		do{(r16)&=~(0x00FF<< 8);(r16)|=((v)&0x00FF)<< 8;}while(0)

	#define	RA_OTP_DAT_PRVK_INFO1 		0x00024
	#define	w32OTP_DAT_PRVK_INFO1 		{										\
					UNSG32				uPRVK_INFO_crc32Val3		 :  8;		\
					UNSG32				uPRVK_INFO_prvkType			 :  8;		\
					UNSG32				uPRVK_INFO_otpKeyEnable		 :  8;		\
					UNSG32				uPRVK_INFO_reserved			 :  8;		\
										}
	/* @'00024 */	union {	UNSG32		u32OTP_DAT_PRVK_INFO1;
								struct	w32OTP_DAT_PRVK_INFO1;
										};

	/* [ 7: 0] */	#define	  BA_OTP_DAT_PRVK_INFO_crc32Val3		 0x00024
	/* ---:--- */	#define	    bOTP_DAT_PRVK_INFO_crc32Val3		    8 /*bit*/
	/* ---:--- */	#define	LSb32OTP_DAT_PRVK_INFO_crc32Val3		    0 /*: 7*/
	/* ---:--- */	#define	MSK32OTP_DAT_PRVK_INFO_crc32Val3		       0x000000FF
	/* ---:--- */	#define	GET32OTP_DAT_PRVK_INFO_crc32Val3(r32)		 (((r32)>> 0)&0x00FF)
	/* ---:--- */	#define	GET16OTP_DAT_PRVK_INFO_crc32Val3(r16)		 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32OTP_DAT_PRVK_INFO_crc32Val3(r32,v)		do{(r32)&=~(0x00FF<< 0);(r32)|=((v)&0x00FF)<< 0;}while(0)
	/* ---:--- */	#define	SET16OTP_DAT_PRVK_INFO_crc32Val3(r16,v)		do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	/* [15: 8] */	#define	  BA_OTP_DAT_PRVK_INFO_prvkType			 0x00025
	/* ---:--- */	#define	    bOTP_DAT_PRVK_INFO_prvkType			    8 /*bit*/
	/* ---:--- */	#define	LSb32OTP_DAT_PRVK_INFO_prvkType			    8 /*:15*/
	/* ---:--- */	#define	MSK32OTP_DAT_PRVK_INFO_prvkType			       0x0000FF00
	/* ---:--- */	#define	GET32OTP_DAT_PRVK_INFO_prvkType(r32)		 (((r32)>> 8)&0x00FF)
	/* ---:--- */	#define	GET16OTP_DAT_PRVK_INFO_prvkType(r16)		 (((r16)>> 8)&0x00FF)
	/* ---:--- */	#define	SET32OTP_DAT_PRVK_INFO_prvkType(r32,v)		do{(r32)&=~(0x00FF<< 8);(r32)|=((v)&0x00FF)<< 8;}while(0)
	/* ---:--- */	#define	SET16OTP_DAT_PRVK_INFO_prvkType(r16,v)		do{(r16)&=~(0x00FF<< 8);(r16)|=((v)&0x00FF)<< 8;}while(0)
					#define	     OTP_DAT_PRVK_INFO_prvkType_AES128			0x1
					#define	     OTP_DAT_PRVK_INFO_prvkType_CHIPID128		0x2
					#define	     OTP_DAT_PRVK_INFO_prvkType_RSA1024_PUBKEY	0x4
					#define	     OTP_DAT_PRVK_INFO_prvkType_RSA1024_PRVKEY	0x8
					#define	     OTP_DAT_PRVK_INFO_prvkType_RSA2048_PRVK	0x10

	/* [23:16] */	#define	  BA_OTP_DAT_PRVK_INFO_otpKeyEnable		 0x00026
	/* ---:--- */	#define	    bOTP_DAT_PRVK_INFO_otpKeyEnable		    8 /*bit*/
	/* ---:--- */	#define	LSb32OTP_DAT_PRVK_INFO_otpKeyEnable		   16 /*:23*/
	/* ---:--- */	#define	MSK32OTP_DAT_PRVK_INFO_otpKeyEnable		       0x00FF0000
	/* ---:--- */	#define	GET32OTP_DAT_PRVK_INFO_otpKeyEnable(r32)	 (((r32)>>16)&0x00FF)
	/* ---:--- */	#define	GET16OTP_DAT_PRVK_INFO_otpKeyEnable(r16)	 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32OTP_DAT_PRVK_INFO_otpKeyEnable(r32,v)	do{(r32)&=~(0x00FF<<16);(r32)|=((v)&0x00FF)<<16;}while(0)
	/* ---:--- */	#define	SET16OTP_DAT_PRVK_INFO_otpKeyEnable(r16,v)	do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	/* [31:24] */	#define	  BA_OTP_DAT_PRVK_INFO_reserved			 0x00027
	/* ---:--- */	#define	    bOTP_DAT_PRVK_INFO_reserved			    8 /*bit*/
	/* ---:--- */	#define	LSb32OTP_DAT_PRVK_INFO_reserved			   24 /*:31*/
	/* ---:--- */	#define	MSK32OTP_DAT_PRVK_INFO_reserved			       0xFF000000
	/* ---:--- */	#define	GET32OTP_DAT_PRVK_INFO_reserved(r32)		 (((r32)>>24)&0x00FF)
	/* ---:--- */	#define	GET16OTP_DAT_PRVK_INFO_reserved(r16)		 (((r16)>> 8)&0x00FF)
	/* ---:--- */	#define	SET32OTP_DAT_PRVK_INFO_reserved(r32,v)		do{(r32)&=~(0x00FF<<24);(r32)|=((v)&0x00FF)<<24;}while(0)
	/* ---:--- */	#define	SET16OTP_DAT_PRVK_INFO_reserved(r16,v)		do{(r16)&=~(0x00FF<< 8);(r16)|=((v)&0x00FF)<< 8;}while(0)

	#define	RA_OTP_DAT_PRVK_DAT 		0x00028
	/* @'00028 */	SIE_UINT128 				ie_prvkDat			 [12];
					#define	 arr_OTP_DAT_prvkDat 					  12

	#define	RA_OTP_DAT_RKEK 			0x000E8
	/* @'000E8 */	SIE_UINT128 				ie_kekDat;

	#define	RA_OTP_DAT_AESK_START 		0x000F8
	/* @'000F8 */	SIE_UINT64 					ie_aeskDatHamming;

	#define	RA_OTP_DAT_AESK_INFO 		0x00100
	#define	w32OTP_DAT_AESK_INFO 		{										\
					UNSG32				uAESK_INFO_aeskInfoHamming	 :  8;		\
					UNSG32				uAESK_INFO_crc32Val0		 :  8;		\
					UNSG32				uAESK_INFO_crc32Val1		 :  8;		\
					UNSG32				uAESK_INFO_crc32Val2		 :  8;		\
										}
	/* @'00100 */	union {	UNSG32		u32OTP_DAT_AESK_INFO;
								struct	w32OTP_DAT_AESK_INFO;
										};

	/* [ 7: 0] */	#define	  BA_OTP_DAT_AESK_INFO_aeskInfoHamming	 0x00100
	/* ---:--- */	#define	    bOTP_DAT_AESK_INFO_aeskInfoHamming	    8 /*bit*/
	/* ---:--- */	#define	LSb32OTP_DAT_AESK_INFO_aeskInfoHamming	    0 /*: 7*/
	/* ---:--- */	#define	MSK32OTP_DAT_AESK_INFO_aeskInfoHamming	       0x000000FF
	/* ---:--- */	#define	GET32OTP_DAT_AESK_INFO_aeskInfoHamming(r32)	 (((r32)>> 0)&0x00FF)
	/* ---:--- */	#define	GET16OTP_DAT_AESK_INFO_aeskInfoHamming(r16)	 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32OTP_DAT_AESK_INFO_aeskInfoHamming(r32,v)do{(r32)&=~(0x00FF<< 0);(r32)|=((v)&0x00FF)<< 0;}while(0)
	/* ---:--- */	#define	SET16OTP_DAT_AESK_INFO_aeskInfoHamming(r16,v)do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	/* [15: 8] */	#define	  BA_OTP_DAT_AESK_INFO_crc32Val0		 0x00101
	/* ---:--- */	#define	    bOTP_DAT_AESK_INFO_crc32Val0		    8 /*bit*/
	/* ---:--- */	#define	LSb32OTP_DAT_AESK_INFO_crc32Val0		    8 /*:15*/
	/* ---:--- */	#define	MSK32OTP_DAT_AESK_INFO_crc32Val0		       0x0000FF00
	/* ---:--- */	#define	GET32OTP_DAT_AESK_INFO_crc32Val0(r32)		 (((r32)>> 8)&0x00FF)
	/* ---:--- */	#define	GET16OTP_DAT_AESK_INFO_crc32Val0(r16)		 (((r16)>> 8)&0x00FF)
	/* ---:--- */	#define	SET32OTP_DAT_AESK_INFO_crc32Val0(r32,v)		do{(r32)&=~(0x00FF<< 8);(r32)|=((v)&0x00FF)<< 8;}while(0)
	/* ---:--- */	#define	SET16OTP_DAT_AESK_INFO_crc32Val0(r16,v)		do{(r16)&=~(0x00FF<< 8);(r16)|=((v)&0x00FF)<< 8;}while(0)

	/* [23:16] */	#define	  BA_OTP_DAT_AESK_INFO_crc32Val1		 0x00102
	/* ---:--- */	#define	    bOTP_DAT_AESK_INFO_crc32Val1		    8 /*bit*/
	/* ---:--- */	#define	LSb32OTP_DAT_AESK_INFO_crc32Val1		   16 /*:23*/
	/* ---:--- */	#define	MSK32OTP_DAT_AESK_INFO_crc32Val1		       0x00FF0000
	/* ---:--- */	#define	GET32OTP_DAT_AESK_INFO_crc32Val1(r32)		 (((r32)>>16)&0x00FF)
	/* ---:--- */	#define	GET16OTP_DAT_AESK_INFO_crc32Val1(r16)		 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32OTP_DAT_AESK_INFO_crc32Val1(r32,v)		do{(r32)&=~(0x00FF<<16);(r32)|=((v)&0x00FF)<<16;}while(0)
	/* ---:--- */	#define	SET16OTP_DAT_AESK_INFO_crc32Val1(r16,v)		do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	/* [31:24] */	#define	  BA_OTP_DAT_AESK_INFO_crc32Val2		 0x00103
	/* ---:--- */	#define	    bOTP_DAT_AESK_INFO_crc32Val2		    8 /*bit*/
	/* ---:--- */	#define	LSb32OTP_DAT_AESK_INFO_crc32Val2		   24 /*:31*/
	/* ---:--- */	#define	MSK32OTP_DAT_AESK_INFO_crc32Val2		       0xFF000000
	/* ---:--- */	#define	GET32OTP_DAT_AESK_INFO_crc32Val2(r32)		 (((r32)>>24)&0x00FF)
	/* ---:--- */	#define	GET16OTP_DAT_AESK_INFO_crc32Val2(r16)		 (((r16)>> 8)&0x00FF)
	/* ---:--- */	#define	SET32OTP_DAT_AESK_INFO_crc32Val2(r32,v)		do{(r32)&=~(0x00FF<<24);(r32)|=((v)&0x00FF)<<24;}while(0)
	/* ---:--- */	#define	SET16OTP_DAT_AESK_INFO_crc32Val2(r16,v)		do{(r16)&=~(0x00FF<< 8);(r16)|=((v)&0x00FF)<< 8;}while(0)

	#define	RA_OTP_DAT_AESK_INFO1 		0x00104
	#define	w32OTP_DAT_AESK_INFO1 		{										\
					UNSG32				uAESK_INFO_crc32Val3		 :  8;		\
					UNSG32				uAESK_INFO_aeskType			 :  8;		\
					UNSG32				uAESK_INFO_featureInfo1		 : 16;		\
										}
	/* @'00104 */	union {	UNSG32		u32OTP_DAT_AESK_INFO1;
								struct	w32OTP_DAT_AESK_INFO1;
										};

	/* [ 7: 0] */	#define	  BA_OTP_DAT_AESK_INFO_crc32Val3		 0x00104
	/* ---:--- */	#define	    bOTP_DAT_AESK_INFO_crc32Val3		    8 /*bit*/
	/* ---:--- */	#define	LSb32OTP_DAT_AESK_INFO_crc32Val3		    0 /*: 7*/
	/* ---:--- */	#define	MSK32OTP_DAT_AESK_INFO_crc32Val3		       0x000000FF
	/* ---:--- */	#define	GET32OTP_DAT_AESK_INFO_crc32Val3(r32)		 (((r32)>> 0)&0x00FF)
	/* ---:--- */	#define	GET16OTP_DAT_AESK_INFO_crc32Val3(r16)		 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32OTP_DAT_AESK_INFO_crc32Val3(r32,v)		do{(r32)&=~(0x00FF<< 0);(r32)|=((v)&0x00FF)<< 0;}while(0)
	/* ---:--- */	#define	SET16OTP_DAT_AESK_INFO_crc32Val3(r16,v)		do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	/* [15: 8] */	#define	  BA_OTP_DAT_AESK_INFO_aeskType			 0x00105
	/* ---:--- */	#define	    bOTP_DAT_AESK_INFO_aeskType			    8 /*bit*/
	/* ---:--- */	#define	LSb32OTP_DAT_AESK_INFO_aeskType			    8 /*:15*/
	/* ---:--- */	#define	MSK32OTP_DAT_AESK_INFO_aeskType			       0x0000FF00
	/* ---:--- */	#define	GET32OTP_DAT_AESK_INFO_aeskType(r32)		 (((r32)>> 8)&0x00FF)
	/* ---:--- */	#define	GET16OTP_DAT_AESK_INFO_aeskType(r16)		 (((r16)>> 8)&0x00FF)
	/* ---:--- */	#define	SET32OTP_DAT_AESK_INFO_aeskType(r32,v)		do{(r32)&=~(0x00FF<< 8);(r32)|=((v)&0x00FF)<< 8;}while(0)
	/* ---:--- */	#define	SET16OTP_DAT_AESK_INFO_aeskType(r16,v)		do{(r16)&=~(0x00FF<< 8);(r16)|=((v)&0x00FF)<< 8;}while(0)

	/* [31:16] */	#define	  BA_OTP_DAT_AESK_INFO_featureInfo1		 0x00106
	/* ---:--- */	#define	    bOTP_DAT_AESK_INFO_featureInfo1		   16 /*bit*/
	/* ---:--- */	#define	LSb32OTP_DAT_AESK_INFO_featureInfo1		   16 /*:31*/
	/* ---:--- */	#define	MSK32OTP_DAT_AESK_INFO_featureInfo1		       0xFFFF0000
	/* ---:--- */	#define	GET32OTP_DAT_AESK_INFO_featureInfo1(r32)	 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16OTP_DAT_AESK_INFO_featureInfo1(r16)	 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32OTP_DAT_AESK_INFO_featureInfo1(r32,v)	do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16OTP_DAT_AESK_INFO_featureInfo1(r16,v)	do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_OTP_DAT_AESK_DAT 		0x00108
	/* @'00108 */	SIE_UINT64 					ie_aeskDat			 [2];
					#define	 arr_OTP_DAT_aeskDat 					  2

	#define	RA_OTP_DAT_CHIP_INFO 		0x00118
	/* @'00118 */	SIE_UINT128 				ie_bindInfo;

	#define	RA_OTP_DAT_USER_INFO 		0x00128
	/* @'00128 */	SIE_UINT128 				ie_userInfo;

	#define	RA_OTP_DAT_reserved 		0x00138
	/* @'00138 */	SIE_UINT64 					ie_reserved;

} SIE_OTP_DAT;

	#define	dftOTP_DAT_PRVK_INFO 		0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32OTP_DAT_PRVK_INFO;
										} T32OTP_DAT_PRVK_INFO;
	#define	dftOTP_DAT_PRVK_INFO1 		0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32OTP_DAT_PRVK_INFO1;
										} T32OTP_DAT_PRVK_INFO1;
	#define	dftOTP_DAT_AESK_INFO 		0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32OTP_DAT_AESK_INFO;
										} T32OTP_DAT_AESK_INFO;
	#define	dftOTP_DAT_AESK_INFO1 		0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32OTP_DAT_AESK_INFO1;
										} T32OTP_DAT_AESK_INFO1;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	OTP_DAT_drvrd (SIE_OTP_DAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	OTP_DAT_drvwr (SIE_OTP_DAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	OTP_DAT_reset (SIE_OTP_DAT *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	OTP_DAT_check(p,pie,ps8name,hfpErrLOG)		OTP_DAT_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	OTP_DAT_print(p,    ps8name,hfpErrLOG)		OTP_DAT_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	OTP_DAT_cmp   (SIE_OTP_DAT *p, SIE_OTP_DAT *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	OTP_DAT_import(SIE_OTP_DAT *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	OTP_DAT_export(SIE_OTP_DAT *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: OTP_DAT
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: OTP_STATUS
*			:  unknown  0
*						*  *OTP region status is unknown
*			:  clean  1
*						*  *OTP region has not been programmed
*			:  dirty  2
*						*  *OTP region has been programmed but not CRC32 check failed
*			:  valid  3
*						*  *OTP region has been programmed and CRC32 check succeed
*	@  DAT
*		%unsigned  2  rkek_status
*						*  *
*						*  RKEK key status
*		%unsigned  2  prvk_status
*						*  *
*						*  private key status
*		%unsigned  2  aesk_status
*						*  *
*						*  aes key status
**********************************************************************************************************************/
#ifdef	h_OTP_STATUS
#else
#define	h_OTP_STATUS

#define	\
	AR_OTP_STATUS \
		1
#define	\
	AB_OTP_STATUS \
		2

	#define	OTP_STATUS_unknown 			0x0
	#define	OTP_STATUS_clean 			0x1
	#define	OTP_STATUS_dirty 			0x2
	#define	OTP_STATUS_valid 			0x3

typedef struct SIE_OTP_STATUS {

	#define	RA_OTP_STATUS_DAT 			0x00000
	#define	w32OTP_STATUS_DAT 			{										\
					UNSG32				uDAT_rkek_status			 :  2;		\
					UNSG32				uDAT_prvk_status			 :  2;		\
					UNSG32				uDAT_aesk_status			 :  2;		\
					UNSG32				_x00000	: 26;							\
										}
	/* @'00000 */	union {	UNSG32		u32OTP_STATUS_DAT;
								struct	w32OTP_STATUS_DAT;
										};

	/* [ 1: 0] */	#define	  BA_OTP_STATUS_DAT_rkek_status			 0x00000
	/* ---:--- */	#define	    bOTP_STATUS_DAT_rkek_status			    2 /*bit*/
	/* ---:--- */	#define	LSb32OTP_STATUS_DAT_rkek_status			    0 /*: 1*/
	/* ---:--- */	#define	MSK32OTP_STATUS_DAT_rkek_status			       0x00000003
	/* ---:--- */	#define	GET32OTP_STATUS_DAT_rkek_status(r32)		 (((r32)>> 0)&0x0003)
	/* ---:--- */	#define	GET16OTP_STATUS_DAT_rkek_status(r16)		 (((r16)>> 0)&0x0003)
	/* ---:--- */	#define	SET32OTP_STATUS_DAT_rkek_status(r32,v)		do{(r32)&=~(0x0003<< 0);(r32)|=((v)&0x0003)<< 0;}while(0)
	/* ---:--- */	#define	SET16OTP_STATUS_DAT_rkek_status(r16,v)		do{(r16)&=~(0x0003<< 0);(r16)|=((v)&0x0003)<< 0;}while(0)

	/* [ 3: 2] */	#define	  BA_OTP_STATUS_DAT_prvk_status			 0x00000
	/* ---:--- */	#define	    bOTP_STATUS_DAT_prvk_status			    2 /*bit*/
	/* ---:--- */	#define	LSb32OTP_STATUS_DAT_prvk_status			    2 /*: 3*/
	/* ---:--- */	#define	MSK32OTP_STATUS_DAT_prvk_status			       0x0000000C
	/* ---:--- */	#define	GET32OTP_STATUS_DAT_prvk_status(r32)		 (((r32)>> 2)&0x0003)
	/* ---:--- */	#define	GET16OTP_STATUS_DAT_prvk_status(r16)		 (((r16)>> 2)&0x0003)
	/* ---:--- */	#define	SET32OTP_STATUS_DAT_prvk_status(r32,v)		do{(r32)&=~(0x0003<< 2);(r32)|=((v)&0x0003)<< 2;}while(0)
	/* ---:--- */	#define	SET16OTP_STATUS_DAT_prvk_status(r16,v)		do{(r16)&=~(0x0003<< 2);(r16)|=((v)&0x0003)<< 2;}while(0)

	/* [ 5: 4] */	#define	  BA_OTP_STATUS_DAT_aesk_status			 0x00000
	/* ---:--- */	#define	    bOTP_STATUS_DAT_aesk_status			    2 /*bit*/
	/* ---:--- */	#define	LSb32OTP_STATUS_DAT_aesk_status			    4 /*: 5*/
	/* ---:--- */	#define	MSK32OTP_STATUS_DAT_aesk_status			       0x00000030
	/* ---:--- */	#define	GET32OTP_STATUS_DAT_aesk_status(r32)		 (((r32)>> 4)&0x0003)
	/* ---:--- */	#define	GET16OTP_STATUS_DAT_aesk_status(r16)		 (((r16)>> 4)&0x0003)
	/* ---:--- */	#define	SET32OTP_STATUS_DAT_aesk_status(r32,v)		do{(r32)&=~(0x0003<< 4);(r32)|=((v)&0x0003)<< 4;}while(0)
	/* ---:--- */	#define	SET16OTP_STATUS_DAT_aesk_status(r16,v)		do{(r16)&=~(0x0003<< 4);(r16)|=((v)&0x0003)<< 4;}while(0)

} SIE_OTP_STATUS;

	#define	dftOTP_STATUS_DAT 			0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32OTP_STATUS_DAT;
										} T32OTP_STATUS_DAT;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	OTP_STATUS_drvrd (SIE_OTP_STATUS *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	OTP_STATUS_drvwr (SIE_OTP_STATUS *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	OTP_STATUS_reset (SIE_OTP_STATUS *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	OTP_STATUS_check(p,pie,ps8name,hfpErrLOG)		OTP_STATUS_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	OTP_STATUS_print(p,    ps8name,hfpErrLOG)		OTP_STATUS_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	OTP_STATUS_cmp   (SIE_OTP_STATUS *p, SIE_OTP_STATUS *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	OTP_STATUS_import(SIE_OTP_STATUS *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	OTP_STATUS_export(SIE_OTP_STATUS *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: OTP_STATUS
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: SECHF_ENTRY
*	@  (P)
*		%unsigned  2  flag  0
*			:  DISABLED  0
*						*  *
*						*  This entry is disabled
*			:  RO  1
*						*  *
*						*  The entry indicate a BIU register space range which is ready only for ARM
*			:  WO  2
*						*  *
*						*  The entry indicate a BIU register space range which is write only for ARM
*			:  RW  3
*						*  *
*						*  The entry indicate a BIU register space range which can be read and written by ARM
*		%unsigned  14  reserved
*						*  *
*						*  Reserved bits
*		%unsigned  16  regSize  0
*						*  *
*						*  The size of the register spaces   in bytes to be configured
*	@  (RW)
*		%unsigned  32  regAddr  0
*						*  *
*						*  Start offset of the register spaces within the secure processor BIU to be configured
*						*  0
**********************************************************************************************************************/
#ifdef	h_SECHF_ENTRY
#else
#define	h_SECHF_ENTRY

#define	\
	AR_SECHF_ENTRY \
		2
#define	\
	AB_SECHF_ENTRY \
		3

typedef struct SIE_SECHF_ENTRY {

	#define	RA_SECHF_ENTRY_D0th_ 		ISC_USE_ONLY	0x00000
	#define	w32SECHF_ENTRY_D0th_ 		{										\
					UNSG32				u_flag						 :  2;		\
					UNSG32				u_reserved					 : 14;		\
					UNSG32				u_regSize					 : 16;		\
										}
	/* @'00000 */				struct	w32SECHF_ENTRY_D0th_;

	/* [ 1: 0] */	#define	  BA_SECHF_ENTRY_flag					 0x00000
	/* ---:--- */	#define	    bSECHF_ENTRY_flag					    2 /*bit*/
	/* ---:--- */	#define	LSb32SECHF_ENTRY_flag					    0 /*: 1*/
	/* ---:--- */	#define	MSK32SECHF_ENTRY_flag					       0x00000003
	/* ---:--- */	#define	GET32SECHF_ENTRY_flag(r32)					 (((r32)>> 0)&0x0003)
	/* ---:--- */	#define	GET16SECHF_ENTRY_flag(r16)					 (((r16)>> 0)&0x0003)
	/* ---:--- */	#define	SET32SECHF_ENTRY_flag(r32,v)				do{(r32)&=~(0x0003<< 0);(r32)|=((v)&0x0003)<< 0;}while(0)
	/* ---:--- */	#define	SET16SECHF_ENTRY_flag(r16,v)				do{(r16)&=~(0x0003<< 0);(r16)|=((v)&0x0003)<< 0;}while(0)
					#define	     SECHF_ENTRY_flag_DISABLED					0x0
					#define	     SECHF_ENTRY_flag_RO						0x1
					#define	     SECHF_ENTRY_flag_WO						0x2
					#define	     SECHF_ENTRY_flag_RW						0x3

	/* [15: 2] */	#define	  BA_SECHF_ENTRY_reserved				 0x00000
	/* ---:--- */	#define	    bSECHF_ENTRY_reserved				   14 /*bit*/
	/* ---:--- */	#define	LSb32SECHF_ENTRY_reserved				    2 /*:15*/
	/* ---:--- */	#define	MSK32SECHF_ENTRY_reserved				       0x0000FFFC
	/* ---:--- */	#define	GET32SECHF_ENTRY_reserved(r32)				 (((r32)>> 2)&0x3FFF)
	/* ---:--- */	#define	GET16SECHF_ENTRY_reserved(r16)				 (((r16)>> 2)&0x3FFF)
	/* ---:--- */	#define	SET32SECHF_ENTRY_reserved(r32,v)			do{(r32)&=~(0x3FFF<< 2);(r32)|=((v)&0x3FFF)<< 2;}while(0)
	/* ---:--- */	#define	SET16SECHF_ENTRY_reserved(r16,v)			do{(r16)&=~(0x3FFF<< 2);(r16)|=((v)&0x3FFF)<< 2;}while(0)

	/* [31:16] */	#define	  BA_SECHF_ENTRY_regSize				 0x00002
	/* ---:--- */	#define	    bSECHF_ENTRY_regSize				   16 /*bit*/
	/* ---:--- */	#define	LSb32SECHF_ENTRY_regSize				   16 /*:31*/
	/* ---:--- */	#define	MSK32SECHF_ENTRY_regSize				       0xFFFF0000
	/* ---:--- */	#define	GET32SECHF_ENTRY_regSize(r32)				 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16SECHF_ENTRY_regSize(r16)				 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32SECHF_ENTRY_regSize(r32,v)				do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16SECHF_ENTRY_regSize(r16,v)				do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_SECHF_ENTRY_D1th_ 		ISC_USE_ONLY	0x00004
	#define	w32SECHF_ENTRY_D1th_ 		{										\
					UNSG32				u_regAddr					 : 32;		\
										}
	/* @'00004 */				struct	w32SECHF_ENTRY_D1th_;

	/* [31: 0] */	#define	  BA_SECHF_ENTRY_regAddr				 0x00004
	/* ---:--- */	#define	    bSECHF_ENTRY_regAddr				   32 /*bit*/
	/* ---:--- */	#define	LSb32SECHF_ENTRY_regAddr				    0 /*:31*/
	/* ---:--- */	#define	MSK32SECHF_ENTRY_regAddr				       0xFFFFFFFF
	/* ---:--- */	#define	GET32SECHF_ENTRY_regAddr(r32)				 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16SECHF_ENTRY_regAddr(r16)				 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32SECHF_ENTRY_regAddr(r32,v)				do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16SECHF_ENTRY_regAddr(r16,v)				do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

} SIE_SECHF_ENTRY;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	SECHF_ENTRY_drvrd (SIE_SECHF_ENTRY *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	SECHF_ENTRY_drvwr (SIE_SECHF_ENTRY *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	SECHF_ENTRY_reset (SIE_SECHF_ENTRY *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	SECHF_ENTRY_check(p,pie,ps8name,hfpErrLOG)		SECHF_ENTRY_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	SECHF_ENTRY_print(p,    ps8name,hfpErrLOG)		SECHF_ENTRY_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	SECHF_ENTRY_cmp   (SIE_SECHF_ENTRY *p, SIE_SECHF_ENTRY *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	SECHF_ENTRY_import(SIE_SECHF_ENTRY *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	SECHF_ENTRY_export(SIE_SECHF_ENTRY *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: SECHF_ENTRY
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: SECHF
*	@
*		$SECHF_ENTRY  secEntries  [8]
*						*  *
*						*  The entries to define accessible range of the secure processor of the BIU
**********************************************************************************************************************/
#ifdef	h_SECHF
#else
#define	h_SECHF

#define	\
	AR_SECHF \
		2
#define	\
	AB_SECHF \
		3

typedef struct SIE_SECHF {

	#define	RA_SECHF_secEntries 		0x00000
	/* @'00000 */	SIE_SECHF_ENTRY 			ie_secEntries;

} SIE_SECHF;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	SECHF_drvrd (SIE_SECHF *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	SECHF_drvwr (SIE_SECHF *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	SECHF_reset (SIE_SECHF *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	SECHF_check(p,pie,ps8name,hfpErrLOG)		SECHF_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	SECHF_print(p,    ps8name,hfpErrLOG)		SECHF_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	SECHF_cmp   (SIE_SECHF *p, SIE_SECHF *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	SECHF_import(SIE_SECHF *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	SECHF_export(SIE_SECHF *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: SECHF
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: JTAGCTL
*	@
*		%unsigned  1  EN  0
*						*  *
*						*  0 to disable Jtag
*						*  1 to enable Jtag
**********************************************************************************************************************/
#ifdef	h_JTAGCTL
#else
#define	h_JTAGCTL

#define	\
	AR_JTAGCTL \
		1
#define	\
	AB_JTAGCTL \
		2

typedef struct SIE_JTAGCTL {

	#define	RA_JTAGCTL_D0th_ 			ISC_USE_ONLY	0x00000
	#define	w32JTAGCTL_D0th_ 			{										\
					UNSG32				u_EN						 :  1;		\
					UNSG32				_x00000	: 31;							\
										}
	/* @'00000 */				struct	w32JTAGCTL_D0th_;

	/* [ 0: 0] */	#define	  BA_JTAGCTL_EN							 0x00000
	/* ---:--- */	#define	    bJTAGCTL_EN							    1 /*bit*/
	/* ---:--- */	#define	LSb32JTAGCTL_EN							    0 /*: 0*/
	/* ---:--- */	#define	MSK32JTAGCTL_EN							       0x00000001
	/* ---:--- */	#define	GET32JTAGCTL_EN(r32)						 (((r32)>> 0)&0x0001)
	/* ---:--- */	#define	GET16JTAGCTL_EN(r16)						 (((r16)>> 0)&0x0001)
	/* ---:--- */	#define	SET32JTAGCTL_EN(r32,v)						do{(r32)&=~(0x0001<< 0);(r32)|=((v)&0x0001)<< 0;}while(0)
	/* ---:--- */	#define	SET16JTAGCTL_EN(r16,v)						do{(r16)&=~(0x0001<< 0);(r16)|=((v)&0x0001)<< 0;}while(0)

} SIE_JTAGCTL;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	JTAGCTL_drvrd (SIE_JTAGCTL *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	JTAGCTL_drvwr (SIE_JTAGCTL *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	JTAGCTL_reset (SIE_JTAGCTL *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	JTAGCTL_check(p,pie,ps8name,hfpErrLOG)		JTAGCTL_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	JTAGCTL_print(p,    ps8name,hfpErrLOG)		JTAGCTL_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	JTAGCTL_cmp   (SIE_JTAGCTL *p, SIE_JTAGCTL *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	JTAGCTL_import(SIE_JTAGCTL *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	JTAGCTL_export(SIE_JTAGCTL *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: JTAGCTL
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: REG64
*		%unsigned  8  b  [8]
**********************************************************************************************************************/
#ifdef	h_REG64
#else
#define	h_REG64

#define	\
	AR_REG64 \
		2
#define	\
	AB_REG64 \
		3

typedef struct SIE_REG64 {

	#define	RA_REG64_D0th_ 				ISC_USE_ONLY	0x00000
	#define	w32REG64_D0th_ 				{										\
					UNSG32				u_b_0i						 :  8;		\
					UNSG32				u_b_1i						 :  8;		\
					UNSG32				u_b_2i						 :  8;		\
					UNSG32				u_b_3i						 :  8;		\
										}
	/* @'00000 */				struct	w32REG64_D0th_;

	/* [ 7: 0] */	#define	  BA_REG64_b_0i							 0x00000
	/* ---:--- */	#define	    bREG64_b_0i							    8 /*bit*/
	/* ---:--- */	#define	LSb32REG64_b_0i							    0 /*: 7*/
	/* ---:--- */	#define	MSK32REG64_b_0i							       0x000000FF
	/* ---:--- */	#define	GET32REG64_b_0i(r32)						 (((r32)>> 0)&0x00FF)
	/* ---:--- */	#define	GET16REG64_b_0i(r16)						 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32REG64_b_0i(r32,v)						do{(r32)&=~(0x00FF<< 0);(r32)|=((v)&0x00FF)<< 0;}while(0)
	/* ---:--- */	#define	SET16REG64_b_0i(r16,v)						do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	/* [15: 8] */	#define	  BA_REG64_b_1i							 0x00001
	/* ---:--- */	#define	    bREG64_b_1i							    8 /*bit*/
	/* ---:--- */	#define	LSb32REG64_b_1i							    8 /*:15*/
	/* ---:--- */	#define	MSK32REG64_b_1i							       0x0000FF00
	/* ---:--- */	#define	GET32REG64_b_1i(r32)						 (((r32)>> 8)&0x00FF)
	/* ---:--- */	#define	GET16REG64_b_1i(r16)						 (((r16)>> 8)&0x00FF)
	/* ---:--- */	#define	SET32REG64_b_1i(r32,v)						do{(r32)&=~(0x00FF<< 8);(r32)|=((v)&0x00FF)<< 8;}while(0)
	/* ---:--- */	#define	SET16REG64_b_1i(r16,v)						do{(r16)&=~(0x00FF<< 8);(r16)|=((v)&0x00FF)<< 8;}while(0)

	/* [23:16] */	#define	  BA_REG64_b_2i							 0x00002
	/* ---:--- */	#define	    bREG64_b_2i							    8 /*bit*/
	/* ---:--- */	#define	LSb32REG64_b_2i							   16 /*:23*/
	/* ---:--- */	#define	MSK32REG64_b_2i							       0x00FF0000
	/* ---:--- */	#define	GET32REG64_b_2i(r32)						 (((r32)>>16)&0x00FF)
	/* ---:--- */	#define	GET16REG64_b_2i(r16)						 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32REG64_b_2i(r32,v)						do{(r32)&=~(0x00FF<<16);(r32)|=((v)&0x00FF)<<16;}while(0)
	/* ---:--- */	#define	SET16REG64_b_2i(r16,v)						do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	/* [31:24] */	#define	  BA_REG64_b_3i							 0x00003
	/* ---:--- */	#define	    bREG64_b_3i							    8 /*bit*/
	/* ---:--- */	#define	LSb32REG64_b_3i							   24 /*:31*/
	/* ---:--- */	#define	MSK32REG64_b_3i							       0xFF000000
	/* ---:--- */	#define	GET32REG64_b_3i(r32)						 (((r32)>>24)&0x00FF)
	/* ---:--- */	#define	GET16REG64_b_3i(r16)						 (((r16)>> 8)&0x00FF)
	/* ---:--- */	#define	SET32REG64_b_3i(r32,v)						do{(r32)&=~(0x00FF<<24);(r32)|=((v)&0x00FF)<<24;}while(0)
	/* ---:--- */	#define	SET16REG64_b_3i(r16,v)						do{(r16)&=~(0x00FF<< 8);(r16)|=((v)&0x00FF)<< 8;}while(0)

	#define	RA_REG64_D1th_ 				ISC_USE_ONLY	0x00004
	#define	w32REG64_D1th_ 				{										\
					UNSG32				u_b_4i						 :  8;		\
					UNSG32				u_b_5i						 :  8;		\
					UNSG32				u_b_6i						 :  8;		\
					UNSG32				u_b_7i						 :  8;		\
										}
	/* @'00004 */				struct	w32REG64_D1th_;

	/* [ 7: 0] */	#define	  BA_REG64_b_4i							 0x00004
	/* ---:--- */	#define	    bREG64_b_4i							    8 /*bit*/
	/* ---:--- */	#define	LSb32REG64_b_4i							    0 /*: 7*/
	/* ---:--- */	#define	MSK32REG64_b_4i							       0x000000FF
	/* ---:--- */	#define	GET32REG64_b_4i(r32)						 (((r32)>> 0)&0x00FF)
	/* ---:--- */	#define	GET16REG64_b_4i(r16)						 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32REG64_b_4i(r32,v)						do{(r32)&=~(0x00FF<< 0);(r32)|=((v)&0x00FF)<< 0;}while(0)
	/* ---:--- */	#define	SET16REG64_b_4i(r16,v)						do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	/* [15: 8] */	#define	  BA_REG64_b_5i							 0x00005
	/* ---:--- */	#define	    bREG64_b_5i							    8 /*bit*/
	/* ---:--- */	#define	LSb32REG64_b_5i							    8 /*:15*/
	/* ---:--- */	#define	MSK32REG64_b_5i							       0x0000FF00
	/* ---:--- */	#define	GET32REG64_b_5i(r32)						 (((r32)>> 8)&0x00FF)
	/* ---:--- */	#define	GET16REG64_b_5i(r16)						 (((r16)>> 8)&0x00FF)
	/* ---:--- */	#define	SET32REG64_b_5i(r32,v)						do{(r32)&=~(0x00FF<< 8);(r32)|=((v)&0x00FF)<< 8;}while(0)
	/* ---:--- */	#define	SET16REG64_b_5i(r16,v)						do{(r16)&=~(0x00FF<< 8);(r16)|=((v)&0x00FF)<< 8;}while(0)

	/* [23:16] */	#define	  BA_REG64_b_6i							 0x00006
	/* ---:--- */	#define	    bREG64_b_6i							    8 /*bit*/
	/* ---:--- */	#define	LSb32REG64_b_6i							   16 /*:23*/
	/* ---:--- */	#define	MSK32REG64_b_6i							       0x00FF0000
	/* ---:--- */	#define	GET32REG64_b_6i(r32)						 (((r32)>>16)&0x00FF)
	/* ---:--- */	#define	GET16REG64_b_6i(r16)						 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32REG64_b_6i(r32,v)						do{(r32)&=~(0x00FF<<16);(r32)|=((v)&0x00FF)<<16;}while(0)
	/* ---:--- */	#define	SET16REG64_b_6i(r16,v)						do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	/* [31:24] */	#define	  BA_REG64_b_7i							 0x00007
	/* ---:--- */	#define	    bREG64_b_7i							    8 /*bit*/
	/* ---:--- */	#define	LSb32REG64_b_7i							   24 /*:31*/
	/* ---:--- */	#define	MSK32REG64_b_7i							       0xFF000000
	/* ---:--- */	#define	GET32REG64_b_7i(r32)						 (((r32)>>24)&0x00FF)
	/* ---:--- */	#define	GET16REG64_b_7i(r16)						 (((r16)>> 8)&0x00FF)
	/* ---:--- */	#define	SET32REG64_b_7i(r32,v)						do{(r32)&=~(0x00FF<<24);(r32)|=((v)&0x00FF)<<24;}while(0)
	/* ---:--- */	#define	SET16REG64_b_7i(r16,v)						do{(r16)&=~(0x00FF<< 8);(r16)|=((v)&0x00FF)<< 8;}while(0)

} SIE_REG64;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	REG64_drvrd (SIE_REG64 *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	REG64_drvwr (SIE_REG64 *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	REG64_reset (SIE_REG64 *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	REG64_check(p,pie,ps8name,hfpErrLOG)		REG64_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	REG64_print(p,    ps8name,hfpErrLOG)		REG64_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	REG64_cmp   (SIE_REG64 *p, SIE_REG64 *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	REG64_import(SIE_REG64 *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	REG64_export(SIE_REG64 *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: REG64
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: A64Par
*	@
*		%unsigned  4  s0  0
*		%unsigned  4  s1  0
*		%unsigned  4  s2  0
*		%unsigned  4  d0  0
**********************************************************************************************************************/
#ifdef	h_A64Par
#else
#define	h_A64Par

#define	\
	AR_A64Par \
		1
#define	\
	AB_A64Par \
		2

typedef struct SIE_A64Par {

	#define	RA_A64Par_D0th_ 			ISC_USE_ONLY	0x00000
	#define	w32A64Par_D0th_ 			{										\
					UNSG32				u_s0						 :  4;		\
					UNSG32				u_s1						 :  4;		\
					UNSG32				u_s2						 :  4;		\
					UNSG32				u_d0						 :  4;		\
					UNSG32				_x00000	: 16;							\
										}
	/* @'00000 */				struct	w32A64Par_D0th_;

	/* [ 3: 0] */	#define	  BA_A64Par_s0							 0x00000
	/* ---:--- */	#define	    bA64Par_s0							    4 /*bit*/
	/* ---:--- */	#define	LSb32A64Par_s0							    0 /*: 3*/
	/* ---:--- */	#define	MSK32A64Par_s0							       0x0000000F
	/* ---:--- */	#define	GET32A64Par_s0(r32)							 (((r32)>> 0)&0x000F)
	/* ---:--- */	#define	GET16A64Par_s0(r16)							 (((r16)>> 0)&0x000F)
	/* ---:--- */	#define	SET32A64Par_s0(r32,v)						do{(r32)&=~(0x000F<< 0);(r32)|=((v)&0x000F)<< 0;}while(0)
	/* ---:--- */	#define	SET16A64Par_s0(r16,v)						do{(r16)&=~(0x000F<< 0);(r16)|=((v)&0x000F)<< 0;}while(0)

	/* [ 7: 4] */	#define	  BA_A64Par_s1							 0x00000
	/* ---:--- */	#define	    bA64Par_s1							    4 /*bit*/
	/* ---:--- */	#define	LSb32A64Par_s1							    4 /*: 7*/
	/* ---:--- */	#define	MSK32A64Par_s1							       0x000000F0
	/* ---:--- */	#define	GET32A64Par_s1(r32)							 (((r32)>> 4)&0x000F)
	/* ---:--- */	#define	GET16A64Par_s1(r16)							 (((r16)>> 4)&0x000F)
	/* ---:--- */	#define	SET32A64Par_s1(r32,v)						do{(r32)&=~(0x000F<< 4);(r32)|=((v)&0x000F)<< 4;}while(0)
	/* ---:--- */	#define	SET16A64Par_s1(r16,v)						do{(r16)&=~(0x000F<< 4);(r16)|=((v)&0x000F)<< 4;}while(0)

	/* [11: 8] */	#define	  BA_A64Par_s2							 0x00001
	/* ---:--- */	#define	    bA64Par_s2							    4 /*bit*/
	/* ---:--- */	#define	LSb32A64Par_s2							    8 /*:11*/
	/* ---:--- */	#define	MSK32A64Par_s2							       0x00000F00
	/* ---:--- */	#define	GET32A64Par_s2(r32)							 (((r32)>> 8)&0x000F)
	/* ---:--- */	#define	GET16A64Par_s2(r16)							 (((r16)>> 8)&0x000F)
	/* ---:--- */	#define	SET32A64Par_s2(r32,v)						do{(r32)&=~(0x000F<< 8);(r32)|=((v)&0x000F)<< 8;}while(0)
	/* ---:--- */	#define	SET16A64Par_s2(r16,v)						do{(r16)&=~(0x000F<< 8);(r16)|=((v)&0x000F)<< 8;}while(0)

	/* [15:12] */	#define	  BA_A64Par_d0							 0x00001
	/* ---:--- */	#define	    bA64Par_d0							    4 /*bit*/
	/* ---:--- */	#define	LSb32A64Par_d0							   12 /*:15*/
	/* ---:--- */	#define	MSK32A64Par_d0							       0x0000F000
	/* ---:--- */	#define	GET32A64Par_d0(r32)							 (((r32)>>12)&0x000F)
	/* ---:--- */	#define	GET16A64Par_d0(r16)							 (((r16)>>12)&0x000F)
	/* ---:--- */	#define	SET32A64Par_d0(r32,v)						do{(r32)&=~(0x000F<<12);(r32)|=((v)&0x000F)<<12;}while(0)
	/* ---:--- */	#define	SET16A64Par_d0(r16,v)						do{(r16)&=~(0x000F<<12);(r16)|=((v)&0x000F)<<12;}while(0)

} SIE_A64Par;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	A64Par_drvrd (SIE_A64Par *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	A64Par_drvwr (SIE_A64Par *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	A64Par_reset (SIE_A64Par *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	A64Par_check(p,pie,ps8name,hfpErrLOG)		A64Par_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	A64Par_print(p,    ps8name,hfpErrLOG)		A64Par_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	A64Par_cmp   (SIE_A64Par *p, SIE_A64Par *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	A64Par_import(SIE_A64Par *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	A64Par_export(SIE_A64Par *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: A64Par
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: K6
*	@
*		%unsigned  1  Re0  0
*		%unsigned  1  Re1  0
*		%unsigned  1  Re2  0
*		%unsigned  1  We  0
*		%unsigned  1  reserved1  0
*		%unsigned  1  reserved2  0
**********************************************************************************************************************/
#ifdef	h_K6
#else
#define	h_K6

#define	\
	AR_K6 \
		1
#define	\
	AB_K6 \
		2

typedef struct SIE_K6 {

	#define	RA_K6_D0th_ 				ISC_USE_ONLY	0x00000
	#define	w32K6_D0th_ 				{										\
					UNSG32				u_Re0						 :  1;		\
					UNSG32				u_Re1						 :  1;		\
					UNSG32				u_Re2						 :  1;		\
					UNSG32				u_We						 :  1;		\
					UNSG32				u_reserved1					 :  1;		\
					UNSG32				u_reserved2					 :  1;		\
					UNSG32				_x00000	: 26;							\
										}
	/* @'00000 */				struct	w32K6_D0th_;

	/* [ 0: 0] */	#define	  BA_K6_Re0								 0x00000
	/* ---:--- */	#define	    bK6_Re0								    1 /*bit*/
	/* ---:--- */	#define	LSb32K6_Re0								    0 /*: 0*/
	/* ---:--- */	#define	MSK32K6_Re0								       0x00000001
	/* ---:--- */	#define	GET32K6_Re0(r32)							 (((r32)>> 0)&0x0001)
	/* ---:--- */	#define	GET16K6_Re0(r16)							 (((r16)>> 0)&0x0001)
	/* ---:--- */	#define	SET32K6_Re0(r32,v)							do{(r32)&=~(0x0001<< 0);(r32)|=((v)&0x0001)<< 0;}while(0)
	/* ---:--- */	#define	SET16K6_Re0(r16,v)							do{(r16)&=~(0x0001<< 0);(r16)|=((v)&0x0001)<< 0;}while(0)

	/* [ 1: 1] */	#define	  BA_K6_Re1								 0x00000
	/* ---:--- */	#define	    bK6_Re1								    1 /*bit*/
	/* ---:--- */	#define	LSb32K6_Re1								    1 /*: 1*/
	/* ---:--- */	#define	MSK32K6_Re1								       0x00000002
	/* ---:--- */	#define	GET32K6_Re1(r32)							 (((r32)>> 1)&0x0001)
	/* ---:--- */	#define	GET16K6_Re1(r16)							 (((r16)>> 1)&0x0001)
	/* ---:--- */	#define	SET32K6_Re1(r32,v)							do{(r32)&=~(0x0001<< 1);(r32)|=((v)&0x0001)<< 1;}while(0)
	/* ---:--- */	#define	SET16K6_Re1(r16,v)							do{(r16)&=~(0x0001<< 1);(r16)|=((v)&0x0001)<< 1;}while(0)

	/* [ 2: 2] */	#define	  BA_K6_Re2								 0x00000
	/* ---:--- */	#define	    bK6_Re2								    1 /*bit*/
	/* ---:--- */	#define	LSb32K6_Re2								    2 /*: 2*/
	/* ---:--- */	#define	MSK32K6_Re2								       0x00000004
	/* ---:--- */	#define	GET32K6_Re2(r32)							 (((r32)>> 2)&0x0001)
	/* ---:--- */	#define	GET16K6_Re2(r16)							 (((r16)>> 2)&0x0001)
	/* ---:--- */	#define	SET32K6_Re2(r32,v)							do{(r32)&=~(0x0001<< 2);(r32)|=((v)&0x0001)<< 2;}while(0)
	/* ---:--- */	#define	SET16K6_Re2(r16,v)							do{(r16)&=~(0x0001<< 2);(r16)|=((v)&0x0001)<< 2;}while(0)

	/* [ 3: 3] */	#define	  BA_K6_We								 0x00000
	/* ---:--- */	#define	    bK6_We								    1 /*bit*/
	/* ---:--- */	#define	LSb32K6_We								    3 /*: 3*/
	/* ---:--- */	#define	MSK32K6_We								       0x00000008
	/* ---:--- */	#define	GET32K6_We(r32)								 (((r32)>> 3)&0x0001)
	/* ---:--- */	#define	GET16K6_We(r16)								 (((r16)>> 3)&0x0001)
	/* ---:--- */	#define	SET32K6_We(r32,v)							do{(r32)&=~(0x0001<< 3);(r32)|=((v)&0x0001)<< 3;}while(0)
	/* ---:--- */	#define	SET16K6_We(r16,v)							do{(r16)&=~(0x0001<< 3);(r16)|=((v)&0x0001)<< 3;}while(0)

	/* [ 4: 4] */	#define	  BA_K6_reserved1						 0x00000
	/* ---:--- */	#define	    bK6_reserved1						    1 /*bit*/
	/* ---:--- */	#define	LSb32K6_reserved1						    4 /*: 4*/
	/* ---:--- */	#define	MSK32K6_reserved1						       0x00000010
	/* ---:--- */	#define	GET32K6_reserved1(r32)						 (((r32)>> 4)&0x0001)
	/* ---:--- */	#define	GET16K6_reserved1(r16)						 (((r16)>> 4)&0x0001)
	/* ---:--- */	#define	SET32K6_reserved1(r32,v)					do{(r32)&=~(0x0001<< 4);(r32)|=((v)&0x0001)<< 4;}while(0)
	/* ---:--- */	#define	SET16K6_reserved1(r16,v)					do{(r16)&=~(0x0001<< 4);(r16)|=((v)&0x0001)<< 4;}while(0)

	/* [ 5: 5] */	#define	  BA_K6_reserved2						 0x00000
	/* ---:--- */	#define	    bK6_reserved2						    1 /*bit*/
	/* ---:--- */	#define	LSb32K6_reserved2						    5 /*: 5*/
	/* ---:--- */	#define	MSK32K6_reserved2						       0x00000020
	/* ---:--- */	#define	GET32K6_reserved2(r32)						 (((r32)>> 5)&0x0001)
	/* ---:--- */	#define	GET16K6_reserved2(r16)						 (((r16)>> 5)&0x0001)
	/* ---:--- */	#define	SET32K6_reserved2(r32,v)					do{(r32)&=~(0x0001<< 5);(r32)|=((v)&0x0001)<< 5;}while(0)
	/* ---:--- */	#define	SET16K6_reserved2(r16,v)					do{(r16)&=~(0x0001<< 5);(r16)|=((v)&0x0001)<< 5;}while(0)

} SIE_K6;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	K6_drvrd (SIE_K6 *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	K6_drvwr (SIE_K6 *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	K6_reset (SIE_K6 *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	K6_check(p,pie,ps8name,hfpErrLOG)		K6_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	K6_print(p,    ps8name,hfpErrLOG)		K6_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	K6_cmp   (SIE_K6 *p, SIE_K6 *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	K6_import(SIE_K6 *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	K6_export(SIE_K6 *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: K6
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRMPushID
*	@
*		%unsigned  2  OP  0
*			:  PUSH  0x0
*			:  RSV  0x1
*			:  TBINIT  0x2
*			:  EXE0  0x3
*		%unsigned  4  OPCSEL
**********************************************************************************************************************/
#ifdef	h_DRMPushID
#else
#define	h_DRMPushID

#define	\
	AR_DRMPushID \
		1
#define	\
	AB_DRMPushID \
		2

typedef struct SIE_DRMPushID {

	#define	RA_DRMPushID_D0th_ 			ISC_USE_ONLY	0x00000
	#define	w32DRMPushID_D0th_ 			{										\
					UNSG32				u_OP						 :  2;		\
					UNSG32				u_OPCSEL					 :  4;		\
					UNSG32				_x00000	: 26;							\
										}
	/* @'00000 */				struct	w32DRMPushID_D0th_;

	/* [ 1: 0] */	#define	  BA_DRMPushID_OP						 0x00000
	/* ---:--- */	#define	    bDRMPushID_OP						    2 /*bit*/
	/* ---:--- */	#define	LSb32DRMPushID_OP						    0 /*: 1*/
	/* ---:--- */	#define	MSK32DRMPushID_OP						       0x00000003
	/* ---:--- */	#define	GET32DRMPushID_OP(r32)						 (((r32)>> 0)&0x0003)
	/* ---:--- */	#define	GET16DRMPushID_OP(r16)						 (((r16)>> 0)&0x0003)
	/* ---:--- */	#define	SET32DRMPushID_OP(r32,v)					do{(r32)&=~(0x0003<< 0);(r32)|=((v)&0x0003)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMPushID_OP(r16,v)					do{(r16)&=~(0x0003<< 0);(r16)|=((v)&0x0003)<< 0;}while(0)
					#define	     DRMPushID_OP_PUSH							0x0
					#define	     DRMPushID_OP_RSV							0x1
					#define	     DRMPushID_OP_TBINIT						0x2
					#define	     DRMPushID_OP_EXE0							0x3

	/* [ 5: 2] */	#define	  BA_DRMPushID_OPCSEL					 0x00000
	/* ---:--- */	#define	    bDRMPushID_OPCSEL					    4 /*bit*/
	/* ---:--- */	#define	LSb32DRMPushID_OPCSEL					    2 /*: 5*/
	/* ---:--- */	#define	MSK32DRMPushID_OPCSEL					       0x0000003C
	/* ---:--- */	#define	GET32DRMPushID_OPCSEL(r32)					 (((r32)>> 2)&0x000F)
	/* ---:--- */	#define	GET16DRMPushID_OPCSEL(r16)					 (((r16)>> 2)&0x000F)
	/* ---:--- */	#define	SET32DRMPushID_OPCSEL(r32,v)				do{(r32)&=~(0x000F<< 2);(r32)|=((v)&0x000F)<< 2;}while(0)
	/* ---:--- */	#define	SET16DRMPushID_OPCSEL(r16,v)				do{(r16)&=~(0x000F<< 2);(r16)|=((v)&0x000F)<< 2;}while(0)

} SIE_DRMPushID;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRMPushID_drvrd (SIE_DRMPushID *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRMPushID_drvwr (SIE_DRMPushID *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRMPushID_reset (SIE_DRMPushID *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRMPushID_check(p,pie,ps8name,hfpErrLOG)		DRMPushID_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRMPushID_print(p,    ps8name,hfpErrLOG)		DRMPushID_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRMPushID_cmp   (SIE_DRMPushID *p, SIE_DRMPushID *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRMPushID_import(SIE_DRMPushID *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRMPushID_export(SIE_DRMPushID *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRMPushID
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: A64Entry
*		$DRMPushID  pushID  0
*		$A64Par  a64Par  0
*		$REG64  xT  0
*		$K6  k6
*		$REG64  r64Before  REG  [16]
*		$REG64  r64After  REG  [16]
**********************************************************************************************************************/
#ifdef	h_A64Entry
#else
#define	h_A64Entry

#define	\
	AR_A64Entry \
		69
#define	\
	AB_A64Entry \
		9

typedef struct SIE_A64Entry {

	#define	RA_A64Entry_pushID 			0x00000
	/* @'00000 */	SIE_DRMPushID 				ie_pushID;

	#define	RA_A64Entry_a64Par 			0x00004
	/* @'00004 */	SIE_A64Par 					ie_a64Par;

	#define	RA_A64Entry_xT 				0x00008
	/* @'00008 */	SIE_REG64 					ie_xT;

	#define	RA_A64Entry_k6 				0x00010
	/* @'00010 */	SIE_K6 						ie_k6;

	#define	RA_A64Entry_r64Before 		0x00014
	/* @'00014 */	SIE_REG64 					ie_r64Before		 [16];
					#define	 arr_A64Entry_r64Before 				  16

	#define	RA_A64Entry_r64After 		0x00094
	/* @'00094 */	SIE_REG64 					ie_r64After			 [16];
					#define	 arr_A64Entry_r64After 					  16

} SIE_A64Entry;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	A64Entry_drvrd (SIE_A64Entry *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	A64Entry_drvwr (SIE_A64Entry *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	A64Entry_reset (SIE_A64Entry *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	A64Entry_check(p,pie,ps8name,hfpErrLOG)		A64Entry_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	A64Entry_print(p,    ps8name,hfpErrLOG)		A64Entry_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	A64Entry_cmp   (SIE_A64Entry *p, SIE_A64Entry *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	A64Entry_import(SIE_A64Entry *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	A64Entry_export(SIE_A64Entry *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: A64Entry
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRM_CTXTYPE
*	@
*			:  AES
*						*  *
*						*  128 bits AES
*			:  DES
*						*  *
*						*  64 bits DES
*			:  3xDES
*						*  *
*			:  RSA1024
*			:  RSA2048
*			:  SHA1
*			:  HMAC
*			:  CMAC
*	@
*		%unsigned  32  dummy
**********************************************************************************************************************/
#ifdef	h_DRM_CTXTYPE
#else
#define	h_DRM_CTXTYPE

#define	\
	AR_DRM_CTXTYPE \
		1
#define	\
	AB_DRM_CTXTYPE \
		2

typedef struct SIE_DRM_CTXTYPE {

	#define	RA_DRM_CTXTYPE_D0th_ 		ISC_USE_ONLY	0x00000
	#define	w32DRM_CTXTYPE_D0th_ 		{										\
					UNSG32				u_dummy						 : 32;		\
										}
	/* @'00000 */				struct	w32DRM_CTXTYPE_D0th_;

	/* [31: 0] */	#define	  BA_DRM_CTXTYPE_dummy					 0x00000
	/* ---:--- */	#define	    bDRM_CTXTYPE_dummy					   32 /*bit*/
	/* ---:--- */	#define	LSb32DRM_CTXTYPE_dummy					    0 /*:31*/
	/* ---:--- */	#define	MSK32DRM_CTXTYPE_dummy					       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRM_CTXTYPE_dummy(r32)					 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRM_CTXTYPE_dummy(r16)					 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRM_CTXTYPE_dummy(r32,v)				do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_CTXTYPE_dummy(r16,v)				do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

} SIE_DRM_CTXTYPE;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRM_CTXTYPE_drvrd (SIE_DRM_CTXTYPE *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRM_CTXTYPE_drvwr (SIE_DRM_CTXTYPE *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRM_CTXTYPE_reset (SIE_DRM_CTXTYPE *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRM_CTXTYPE_check(p,pie,ps8name,hfpErrLOG)		DRM_CTXTYPE_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRM_CTXTYPE_print(p,    ps8name,hfpErrLOG)		DRM_CTXTYPE_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRM_CTXTYPE_cmp   (SIE_DRM_CTXTYPE *p, SIE_DRM_CTXTYPE *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRM_CTXTYPE_import(SIE_DRM_CTXTYPE *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRM_CTXTYPE_export(SIE_DRM_CTXTYPE *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRM_CTXTYPE
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRM_CTXHDR
*	@
*		%unsigned  16  ctxSize
*						*  *
*						*  Context size
*		%unsigned  8  ctxType
*						*  *
*						*  Context type
*	@
*		%unsigned  32  reserved
*						*  *
*						*  Key parameter
**********************************************************************************************************************/
#ifdef	h_DRM_CTXHDR
#else
#define	h_DRM_CTXHDR

#define	\
	AR_DRM_CTXHDR \
		2
#define	\
	AB_DRM_CTXHDR \
		3

typedef struct SIE_DRM_CTXHDR {

	#define	RA_DRM_CTXHDR_D0th_ 		ISC_USE_ONLY	0x00000
	#define	w32DRM_CTXHDR_D0th_ 		{										\
					UNSG32				u_ctxSize					 : 16;		\
					UNSG32				u_ctxType					 :  8;		\
					UNSG32				_x00000	:  8;							\
										}
	/* @'00000 */				struct	w32DRM_CTXHDR_D0th_;

	/* [15: 0] */	#define	  BA_DRM_CTXHDR_ctxSize					 0x00000
	/* ---:--- */	#define	    bDRM_CTXHDR_ctxSize					   16 /*bit*/
	/* ---:--- */	#define	LSb32DRM_CTXHDR_ctxSize					    0 /*:15*/
	/* ---:--- */	#define	MSK32DRM_CTXHDR_ctxSize					       0x0000FFFF
	/* ---:--- */	#define	GET32DRM_CTXHDR_ctxSize(r32)				 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRM_CTXHDR_ctxSize(r16)				 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRM_CTXHDR_ctxSize(r32,v)				do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_CTXHDR_ctxSize(r16,v)				do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [23:16] */	#define	  BA_DRM_CTXHDR_ctxType					 0x00002
	/* ---:--- */	#define	    bDRM_CTXHDR_ctxType					    8 /*bit*/
	/* ---:--- */	#define	LSb32DRM_CTXHDR_ctxType					   16 /*:23*/
	/* ---:--- */	#define	MSK32DRM_CTXHDR_ctxType					       0x00FF0000
	/* ---:--- */	#define	GET32DRM_CTXHDR_ctxType(r32)				 (((r32)>>16)&0x00FF)
	/* ---:--- */	#define	GET16DRM_CTXHDR_ctxType(r16)				 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32DRM_CTXHDR_ctxType(r32,v)				do{(r32)&=~(0x00FF<<16);(r32)|=((v)&0x00FF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRM_CTXHDR_ctxType(r16,v)				do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	#define	RA_DRM_CTXHDR_D1th_ 		ISC_USE_ONLY	0x00004
	#define	w32DRM_CTXHDR_D1th_ 		{										\
					UNSG32				u_reserved					 : 32;		\
										}
	/* @'00004 */				struct	w32DRM_CTXHDR_D1th_;

	/* [31: 0] */	#define	  BA_DRM_CTXHDR_reserved				 0x00004
	/* ---:--- */	#define	    bDRM_CTXHDR_reserved				   32 /*bit*/
	/* ---:--- */	#define	LSb32DRM_CTXHDR_reserved				    0 /*:31*/
	/* ---:--- */	#define	MSK32DRM_CTXHDR_reserved				       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRM_CTXHDR_reserved(r32)				 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRM_CTXHDR_reserved(r16)				 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRM_CTXHDR_reserved(r32,v)				do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_CTXHDR_reserved(r16,v)				do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

} SIE_DRM_CTXHDR;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRM_CTXHDR_drvrd (SIE_DRM_CTXHDR *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRM_CTXHDR_drvwr (SIE_DRM_CTXHDR *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRM_CTXHDR_reset (SIE_DRM_CTXHDR *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRM_CTXHDR_check(p,pie,ps8name,hfpErrLOG)		DRM_CTXHDR_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRM_CTXHDR_print(p,    ps8name,hfpErrLOG)		DRM_CTXHDR_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRM_CTXHDR_cmp   (SIE_DRM_CTXHDR *p, SIE_DRM_CTXHDR *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRM_CTXHDR_import(SIE_DRM_CTXHDR *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRM_CTXHDR_export(SIE_DRM_CTXHDR *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRM_CTXHDR
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRM_SIGNTYPE
*	@  DAT
*		%unsigned  8  typeID
*						*  *
*						*  type ID
*			:  CMAC  0x00
*						*  *
*						*  CMAC
*			:  RSAPSS  0x02
*						*  *
*						*  RSA-PSS signature
*			:  INVALID  0xff
**********************************************************************************************************************/
#ifdef	h_DRM_SIGNTYPE
#else
#define	h_DRM_SIGNTYPE

#define	\
	AR_DRM_SIGNTYPE \
		1
#define	\
	AB_DRM_SIGNTYPE \
		2

typedef struct SIE_DRM_SIGNTYPE {

	#define	RA_DRM_SIGNTYPE_DAT 		0x00000
	#define	w32DRM_SIGNTYPE_DAT 		{										\
					UNSG32				uDAT_typeID					 :  8;		\
					UNSG32				_x00000	: 24;							\
										}
	/* @'00000 */	union {	UNSG32		u32DRM_SIGNTYPE_DAT;
								struct	w32DRM_SIGNTYPE_DAT;
										};

	/* [ 7: 0] */	#define	  BA_DRM_SIGNTYPE_DAT_typeID			 0x00000
	/* ---:--- */	#define	    bDRM_SIGNTYPE_DAT_typeID			    8 /*bit*/
	/* ---:--- */	#define	LSb32DRM_SIGNTYPE_DAT_typeID			    0 /*: 7*/
	/* ---:--- */	#define	MSK32DRM_SIGNTYPE_DAT_typeID			       0x000000FF
	/* ---:--- */	#define	GET32DRM_SIGNTYPE_DAT_typeID(r32)			 (((r32)>> 0)&0x00FF)
	/* ---:--- */	#define	GET16DRM_SIGNTYPE_DAT_typeID(r16)			 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32DRM_SIGNTYPE_DAT_typeID(r32,v)			do{(r32)&=~(0x00FF<< 0);(r32)|=((v)&0x00FF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_SIGNTYPE_DAT_typeID(r16,v)			do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)
					#define	     DRM_SIGNTYPE_DAT_typeID_CMAC				0x0
					#define	     DRM_SIGNTYPE_DAT_typeID_RSAPSS				0x2
					#define	     DRM_SIGNTYPE_DAT_typeID_INVALID			0xFF

} SIE_DRM_SIGNTYPE;

	#define	dftDRM_SIGNTYPE_DAT 		0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DRM_SIGNTYPE_DAT;
										} T32DRM_SIGNTYPE_DAT;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRM_SIGNTYPE_drvrd (SIE_DRM_SIGNTYPE *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRM_SIGNTYPE_drvwr (SIE_DRM_SIGNTYPE *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRM_SIGNTYPE_reset (SIE_DRM_SIGNTYPE *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRM_SIGNTYPE_check(p,pie,ps8name,hfpErrLOG)		DRM_SIGNTYPE_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRM_SIGNTYPE_print(p,    ps8name,hfpErrLOG)		DRM_SIGNTYPE_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRM_SIGNTYPE_cmp   (SIE_DRM_SIGNTYPE *p, SIE_DRM_SIGNTYPE *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRM_SIGNTYPE_import(SIE_DRM_SIGNTYPE *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRM_SIGNTYPE_export(SIE_DRM_SIGNTYPE *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRM_SIGNTYPE
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRM_CTXID
*	@  DAT
*		%unsigned  8  ctxID
*						*  *
*						*  Context ID
*			:  RKEK  0x01
*						*  *
*						*  Root Key wrapping key ID
*			:  SIGNK  0x02
*						*  *
*						*  Signature key
*			:  AESK  0x04
*						*  *
*						*  AES key wrapping key ID index aes area in OTP
*			:  ROMKEY  0x10
*						*  *
*						*  ROM key
*			:  UKEY  0x80
*						*  *
*						*  User key id start
*			:  INVALID  0xff
**********************************************************************************************************************/
#ifdef	h_DRM_CTXID
#else
#define	h_DRM_CTXID

#define	\
	AR_DRM_CTXID \
		1
#define	\
	AB_DRM_CTXID \
		2

typedef struct SIE_DRM_CTXID {

	#define	RA_DRM_CTXID_DAT 			0x00000
	#define	w32DRM_CTXID_DAT 			{										\
					UNSG32				uDAT_ctxID					 :  8;		\
					UNSG32				_x00000	: 24;							\
										}
	/* @'00000 */	union {	UNSG32		u32DRM_CTXID_DAT;
								struct	w32DRM_CTXID_DAT;
										};

	/* [ 7: 0] */	#define	  BA_DRM_CTXID_DAT_ctxID				 0x00000
	/* ---:--- */	#define	    bDRM_CTXID_DAT_ctxID				    8 /*bit*/
	/* ---:--- */	#define	LSb32DRM_CTXID_DAT_ctxID				    0 /*: 7*/
	/* ---:--- */	#define	MSK32DRM_CTXID_DAT_ctxID				       0x000000FF
	/* ---:--- */	#define	GET32DRM_CTXID_DAT_ctxID(r32)				 (((r32)>> 0)&0x00FF)
	/* ---:--- */	#define	GET16DRM_CTXID_DAT_ctxID(r16)				 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32DRM_CTXID_DAT_ctxID(r32,v)				do{(r32)&=~(0x00FF<< 0);(r32)|=((v)&0x00FF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_CTXID_DAT_ctxID(r16,v)				do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)
					#define	     DRM_CTXID_DAT_ctxID_RKEK					0x1
					#define	     DRM_CTXID_DAT_ctxID_SIGNK					0x2
					#define	     DRM_CTXID_DAT_ctxID_AESK					0x4
					#define	     DRM_CTXID_DAT_ctxID_ROMKEY					0x10
					#define	     DRM_CTXID_DAT_ctxID_UKEY					0x80
					#define	     DRM_CTXID_DAT_ctxID_INVALID				0xFF

} SIE_DRM_CTXID;

	#define	dftDRM_CTXID_DAT 			0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DRM_CTXID_DAT;
										} T32DRM_CTXID_DAT;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRM_CTXID_drvrd (SIE_DRM_CTXID *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRM_CTXID_drvwr (SIE_DRM_CTXID *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRM_CTXID_reset (SIE_DRM_CTXID *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRM_CTXID_check(p,pie,ps8name,hfpErrLOG)		DRM_CTXID_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRM_CTXID_print(p,    ps8name,hfpErrLOG)		DRM_CTXID_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRM_CTXID_cmp   (SIE_DRM_CTXID *p, SIE_DRM_CTXID *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRM_CTXID_import(SIE_DRM_CTXID *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRM_CTXID_export(SIE_DRM_CTXID *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRM_CTXID
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRM_KEYPARM
*	@
*		$UINT32  keyParm  [8]
*						*  *
*						*  Reserved key parameter data
**********************************************************************************************************************/
#ifdef	h_DRM_KEYPARM
#else
#define	h_DRM_KEYPARM

#define	\
	AR_DRM_KEYPARM \
		1
#define	\
	AB_DRM_KEYPARM \
		2

typedef struct SIE_DRM_KEYPARM {

	#define	RA_DRM_KEYPARM_keyParm 		0x00000
	/* @'00000 */	SIE_UINT32 					ie_keyParm;

} SIE_DRM_KEYPARM;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRM_KEYPARM_drvrd (SIE_DRM_KEYPARM *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRM_KEYPARM_drvwr (SIE_DRM_KEYPARM *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRM_KEYPARM_reset (SIE_DRM_KEYPARM *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRM_KEYPARM_check(p,pie,ps8name,hfpErrLOG)		DRM_KEYPARM_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRM_KEYPARM_print(p,    ps8name,hfpErrLOG)		DRM_KEYPARM_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRM_KEYPARM_cmp   (SIE_DRM_KEYPARM *p, SIE_DRM_KEYPARM *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRM_KEYPARM_import(SIE_DRM_KEYPARM *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRM_KEYPARM_export(SIE_DRM_KEYPARM *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRM_KEYPARM
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRM_KEYPARM_RSA
*	@
*		%unsigned  16  keyLen
*						*  *
*						*  The size of the RSA key in bits
*		%unsigned  16  numPrimes  0
*						*  *
*						*  the number of prime factors used by this RSA key.
*	@
*		%unsigned  16  exponentSize  0
*						*  *
*						*  the size of the exponent. If the key is using the default exponent then the exponentSize MUST be 0.
**********************************************************************************************************************/
#ifdef	h_DRM_KEYPARM_RSA
#else
#define	h_DRM_KEYPARM_RSA

#define	\
	AR_DRM_KEYPARM_RSA \
		2
#define	\
	AB_DRM_KEYPARM_RSA \
		3

typedef struct SIE_DRM_KEYPARM_RSA {

	#define	RA_DRM_KEYPARM_RSA_D0th_ 	ISC_USE_ONLY	0x00000
	#define	w32DRM_KEYPARM_RSA_D0th_ 	{										\
					UNSG32				u_keyLen					 : 16;		\
					UNSG32				u_numPrimes					 : 16;		\
										}
	/* @'00000 */				struct	w32DRM_KEYPARM_RSA_D0th_;

	/* [15: 0] */	#define	  BA_DRM_KEYPARM_RSA_keyLen				 0x00000
	/* ---:--- */	#define	    bDRM_KEYPARM_RSA_keyLen				   16 /*bit*/
	/* ---:--- */	#define	LSb32DRM_KEYPARM_RSA_keyLen				    0 /*:15*/
	/* ---:--- */	#define	MSK32DRM_KEYPARM_RSA_keyLen				       0x0000FFFF
	/* ---:--- */	#define	GET32DRM_KEYPARM_RSA_keyLen(r32)			 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRM_KEYPARM_RSA_keyLen(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRM_KEYPARM_RSA_keyLen(r32,v)			do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_KEYPARM_RSA_keyLen(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DRM_KEYPARM_RSA_numPrimes			 0x00002
	/* ---:--- */	#define	    bDRM_KEYPARM_RSA_numPrimes			   16 /*bit*/
	/* ---:--- */	#define	LSb32DRM_KEYPARM_RSA_numPrimes			   16 /*:31*/
	/* ---:--- */	#define	MSK32DRM_KEYPARM_RSA_numPrimes			       0xFFFF0000
	/* ---:--- */	#define	GET32DRM_KEYPARM_RSA_numPrimes(r32)			 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DRM_KEYPARM_RSA_numPrimes(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRM_KEYPARM_RSA_numPrimes(r32,v)		do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRM_KEYPARM_RSA_numPrimes(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DRM_KEYPARM_RSA_D1th_ 	ISC_USE_ONLY	0x00004
	#define	w32DRM_KEYPARM_RSA_D1th_ 	{										\
					UNSG32				u_exponentSize				 : 16;		\
					UNSG32				_x00004	: 16;							\
										}
	/* @'00004 */				struct	w32DRM_KEYPARM_RSA_D1th_;

	/* [15: 0] */	#define	  BA_DRM_KEYPARM_RSA_exponentSize		 0x00004
	/* ---:--- */	#define	    bDRM_KEYPARM_RSA_exponentSize		   16 /*bit*/
	/* ---:--- */	#define	LSb32DRM_KEYPARM_RSA_exponentSize		    0 /*:15*/
	/* ---:--- */	#define	MSK32DRM_KEYPARM_RSA_exponentSize		       0x0000FFFF
	/* ---:--- */	#define	GET32DRM_KEYPARM_RSA_exponentSize(r32)		 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRM_KEYPARM_RSA_exponentSize(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRM_KEYPARM_RSA_exponentSize(r32,v)	do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_KEYPARM_RSA_exponentSize(r16,v)	do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

} SIE_DRM_KEYPARM_RSA;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRM_KEYPARM_RSA_drvrd (SIE_DRM_KEYPARM_RSA *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRM_KEYPARM_RSA_drvwr (SIE_DRM_KEYPARM_RSA *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRM_KEYPARM_RSA_reset (SIE_DRM_KEYPARM_RSA *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRM_KEYPARM_RSA_check(p,pie,ps8name,hfpErrLOG)		DRM_KEYPARM_RSA_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRM_KEYPARM_RSA_print(p,    ps8name,hfpErrLOG)		DRM_KEYPARM_RSA_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRM_KEYPARM_RSA_cmp   (SIE_DRM_KEYPARM_RSA *p, SIE_DRM_KEYPARM_RSA *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRM_KEYPARM_RSA_import(SIE_DRM_KEYPARM_RSA *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRM_KEYPARM_RSA_export(SIE_DRM_KEYPARM_RSA *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRM_KEYPARM_RSA
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRM_KEYPARM_SYM
*	@
*		%unsigned  16  keyLen
*						*  *
*						*  indicate the length of the key in bits
*		%unsigned  16  blockSize  0
*						*  *
*						*  indicate the block size of the algorithm
*	@
*		%unsigned  16  ivSiz  0
*						*  *
*						*  indicate the size of the IV
*		%unsigned  16  keyMode  0
*						*  *
*						*  indicate the encryption and decryption mode
*	@
*		$UINT128  ivData  0
*						*  *
*						*  The initialization vector
**********************************************************************************************************************/
#ifdef	h_DRM_KEYPARM_SYM
#else
#define	h_DRM_KEYPARM_SYM

#define	\
	AR_DRM_KEYPARM_SYM \
		6
#define	\
	AB_DRM_KEYPARM_SYM \
		5

typedef struct SIE_DRM_KEYPARM_SYM {

	#define	RA_DRM_KEYPARM_SYM_D0th_ 	ISC_USE_ONLY	0x00000
	#define	w32DRM_KEYPARM_SYM_D0th_ 	{										\
					UNSG32				u_keyLen					 : 16;		\
					UNSG32				u_blockSize					 : 16;		\
										}
	/* @'00000 */				struct	w32DRM_KEYPARM_SYM_D0th_;

	/* [15: 0] */	#define	  BA_DRM_KEYPARM_SYM_keyLen				 0x00000
	/* ---:--- */	#define	    bDRM_KEYPARM_SYM_keyLen				   16 /*bit*/
	/* ---:--- */	#define	LSb32DRM_KEYPARM_SYM_keyLen				    0 /*:15*/
	/* ---:--- */	#define	MSK32DRM_KEYPARM_SYM_keyLen				       0x0000FFFF
	/* ---:--- */	#define	GET32DRM_KEYPARM_SYM_keyLen(r32)			 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRM_KEYPARM_SYM_keyLen(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRM_KEYPARM_SYM_keyLen(r32,v)			do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_KEYPARM_SYM_keyLen(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DRM_KEYPARM_SYM_blockSize			 0x00002
	/* ---:--- */	#define	    bDRM_KEYPARM_SYM_blockSize			   16 /*bit*/
	/* ---:--- */	#define	LSb32DRM_KEYPARM_SYM_blockSize			   16 /*:31*/
	/* ---:--- */	#define	MSK32DRM_KEYPARM_SYM_blockSize			       0xFFFF0000
	/* ---:--- */	#define	GET32DRM_KEYPARM_SYM_blockSize(r32)			 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DRM_KEYPARM_SYM_blockSize(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRM_KEYPARM_SYM_blockSize(r32,v)		do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRM_KEYPARM_SYM_blockSize(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DRM_KEYPARM_SYM_D1th_ 	ISC_USE_ONLY	0x00004
	#define	w32DRM_KEYPARM_SYM_D1th_ 	{										\
					UNSG32				u_ivSiz						 : 16;		\
					UNSG32				u_keyMode					 : 16;		\
										}
	/* @'00004 */				struct	w32DRM_KEYPARM_SYM_D1th_;

	/* [15: 0] */	#define	  BA_DRM_KEYPARM_SYM_ivSiz				 0x00004
	/* ---:--- */	#define	    bDRM_KEYPARM_SYM_ivSiz				   16 /*bit*/
	/* ---:--- */	#define	LSb32DRM_KEYPARM_SYM_ivSiz				    0 /*:15*/
	/* ---:--- */	#define	MSK32DRM_KEYPARM_SYM_ivSiz				       0x0000FFFF
	/* ---:--- */	#define	GET32DRM_KEYPARM_SYM_ivSiz(r32)				 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRM_KEYPARM_SYM_ivSiz(r16)				 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRM_KEYPARM_SYM_ivSiz(r32,v)			do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_KEYPARM_SYM_ivSiz(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DRM_KEYPARM_SYM_keyMode			 0x00006
	/* ---:--- */	#define	    bDRM_KEYPARM_SYM_keyMode			   16 /*bit*/
	/* ---:--- */	#define	LSb32DRM_KEYPARM_SYM_keyMode			   16 /*:31*/
	/* ---:--- */	#define	MSK32DRM_KEYPARM_SYM_keyMode			       0xFFFF0000
	/* ---:--- */	#define	GET32DRM_KEYPARM_SYM_keyMode(r32)			 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DRM_KEYPARM_SYM_keyMode(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRM_KEYPARM_SYM_keyMode(r32,v)			do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRM_KEYPARM_SYM_keyMode(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DRM_KEYPARM_SYM_ivData 	0x00008
	/* @'00008 */	SIE_UINT128 				ie_ivData;

} SIE_DRM_KEYPARM_SYM;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRM_KEYPARM_SYM_drvrd (SIE_DRM_KEYPARM_SYM *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRM_KEYPARM_SYM_drvwr (SIE_DRM_KEYPARM_SYM *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRM_KEYPARM_SYM_reset (SIE_DRM_KEYPARM_SYM *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRM_KEYPARM_SYM_check(p,pie,ps8name,hfpErrLOG)		DRM_KEYPARM_SYM_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRM_KEYPARM_SYM_print(p,    ps8name,hfpErrLOG)		DRM_KEYPARM_SYM_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRM_KEYPARM_SYM_cmp   (SIE_DRM_KEYPARM_SYM *p, SIE_DRM_KEYPARM_SYM *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRM_KEYPARM_SYM_import(SIE_DRM_KEYPARM_SYM *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRM_KEYPARM_SYM_export(SIE_DRM_KEYPARM_SYM *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRM_KEYPARM_SYM
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRM_DIGEST
*	@
*		$DRM_CTXID  sigKey
*						*  *
*						*  Signature key
*	@
*		%unsigned  8  sigType
*						*  *
*						*  Signature Type
*		%unsigned  8  sigLen  Signature Length
*		%unsigned  16  reserved  reserved
*	@
*		$UINT32  hashVal  REG  [6]
*						*  *
*						*  Digest value
**********************************************************************************************************************/
#ifdef	h_DRM_DIGEST
#else
#define	h_DRM_DIGEST

#define	\
	AR_DRM_DIGEST \
		8
#define	\
	AB_DRM_DIGEST \
		5

typedef struct SIE_DRM_DIGEST {

	#define	RA_DRM_DIGEST_sigKey 		0x00000
	/* @'00000 */	SIE_DRM_CTXID 				ie_sigKey;

	#define	RA_DRM_DIGEST_D1th_ 		ISC_USE_ONLY	0x00004
	#define	w32DRM_DIGEST_D1th_ 		{										\
					UNSG32				u_sigType					 :  8;		\
					UNSG32				u_sigLen					 :  8;		\
					UNSG32				u_reserved					 : 16;		\
										}
	/* @'00004 */				struct	w32DRM_DIGEST_D1th_;

	/* [ 7: 0] */	#define	  BA_DRM_DIGEST_sigType					 0x00004
	/* ---:--- */	#define	    bDRM_DIGEST_sigType					    8 /*bit*/
	/* ---:--- */	#define	LSb32DRM_DIGEST_sigType					    0 /*: 7*/
	/* ---:--- */	#define	MSK32DRM_DIGEST_sigType					       0x000000FF
	/* ---:--- */	#define	GET32DRM_DIGEST_sigType(r32)				 (((r32)>> 0)&0x00FF)
	/* ---:--- */	#define	GET16DRM_DIGEST_sigType(r16)				 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32DRM_DIGEST_sigType(r32,v)				do{(r32)&=~(0x00FF<< 0);(r32)|=((v)&0x00FF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_DIGEST_sigType(r16,v)				do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	/* [15: 8] */	#define	  BA_DRM_DIGEST_sigLen					 0x00005
	/* ---:--- */	#define	    bDRM_DIGEST_sigLen					    8 /*bit*/
	/* ---:--- */	#define	LSb32DRM_DIGEST_sigLen					    8 /*:15*/
	/* ---:--- */	#define	MSK32DRM_DIGEST_sigLen					       0x0000FF00
	/* ---:--- */	#define	GET32DRM_DIGEST_sigLen(r32)					 (((r32)>> 8)&0x00FF)
	/* ---:--- */	#define	GET16DRM_DIGEST_sigLen(r16)					 (((r16)>> 8)&0x00FF)
	/* ---:--- */	#define	SET32DRM_DIGEST_sigLen(r32,v)				do{(r32)&=~(0x00FF<< 8);(r32)|=((v)&0x00FF)<< 8;}while(0)
	/* ---:--- */	#define	SET16DRM_DIGEST_sigLen(r16,v)				do{(r16)&=~(0x00FF<< 8);(r16)|=((v)&0x00FF)<< 8;}while(0)

	/* [31:16] */	#define	  BA_DRM_DIGEST_reserved				 0x00006
	/* ---:--- */	#define	    bDRM_DIGEST_reserved				   16 /*bit*/
	/* ---:--- */	#define	LSb32DRM_DIGEST_reserved				   16 /*:31*/
	/* ---:--- */	#define	MSK32DRM_DIGEST_reserved				       0xFFFF0000
	/* ---:--- */	#define	GET32DRM_DIGEST_reserved(r32)				 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DRM_DIGEST_reserved(r16)				 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRM_DIGEST_reserved(r32,v)				do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRM_DIGEST_reserved(r16,v)				do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DRM_DIGEST_hashVal 		0x00008
	/* @'00008 */	SIE_UINT32 					ie_hashVal			 [6];
					#define	 arr_DRM_DIGEST_hashVal 				  6

} SIE_DRM_DIGEST;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRM_DIGEST_drvrd (SIE_DRM_DIGEST *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRM_DIGEST_drvwr (SIE_DRM_DIGEST *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRM_DIGEST_reset (SIE_DRM_DIGEST *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRM_DIGEST_check(p,pie,ps8name,hfpErrLOG)		DRM_DIGEST_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRM_DIGEST_print(p,    ps8name,hfpErrLOG)		DRM_DIGEST_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRM_DIGEST_cmp   (SIE_DRM_DIGEST *p, SIE_DRM_DIGEST *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRM_DIGEST_import(SIE_DRM_DIGEST *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRM_DIGEST_export(SIE_DRM_DIGEST *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRM_DIGEST
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRM_SUBKEY_OUT
*	@
*		$DRM_CTXID  parentKeyID
*						*  *
*						*  Parent key ID. It can be RKEK ID or SIGNKEY ID
*	@
*		$UINT32  reserved
*	@
*		$UINT32  keyData  REG  [14]
*						*  *
*						*  Sub key cipher text protected by RKEK
**********************************************************************************************************************/
#ifdef	h_DRM_SUBKEY_OUT
#else
#define	h_DRM_SUBKEY_OUT

#define	\
	AR_DRM_SUBKEY_OUT \
		16
#define	\
	AB_DRM_SUBKEY_OUT \
		6

typedef struct SIE_DRM_SUBKEY_OUT {

	#define	RA_DRM_SUBKEY_OUT_parentKeyID 0x00000
	/* @'00000 */	SIE_DRM_CTXID 				ie_parentKeyID;

	#define	RA_DRM_SUBKEY_OUT_reserved 	0x00004
	/* @'00004 */	SIE_UINT32 					ie_reserved;

	#define	RA_DRM_SUBKEY_OUT_keyData 	0x00008
	/* @'00008 */	SIE_UINT32 					ie_keyData			 [14];
					#define	 arr_DRM_SUBKEY_OUT_keyData 			  14

} SIE_DRM_SUBKEY_OUT;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRM_SUBKEY_OUT_drvrd (SIE_DRM_SUBKEY_OUT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRM_SUBKEY_OUT_drvwr (SIE_DRM_SUBKEY_OUT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRM_SUBKEY_OUT_reset (SIE_DRM_SUBKEY_OUT *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRM_SUBKEY_OUT_check(p,pie,ps8name,hfpErrLOG)		DRM_SUBKEY_OUT_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRM_SUBKEY_OUT_print(p,    ps8name,hfpErrLOG)		DRM_SUBKEY_OUT_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRM_SUBKEY_OUT_cmp   (SIE_DRM_SUBKEY_OUT *p, SIE_DRM_SUBKEY_OUT *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRM_SUBKEY_OUT_import(SIE_DRM_SUBKEY_OUT *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRM_SUBKEY_OUT_export(SIE_DRM_SUBKEY_OUT *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRM_SUBKEY_OUT
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRM_KEYCTX_OUT
*	@
*		%unsigned  16  ctxSize
*						*  *
*						*  Context size
*		%unsigned  8  ctxType
*						*  *
*						*  Context type
*	@
*		%unsigned  32  reserved
*						*  *
*						*  Reserved
*	@
*		$DRM_KEYPARM  keyParm
*						*  *
*						*  Key parameter
*	@
*		$DRM_DIGEST  hashVal
*						*  *
*						*  Cipher text SHA1 hash value
*	@
*		$UINT64  cipherTxt
*						*  *
*						*  Cipher text of the key context
**********************************************************************************************************************/
#ifdef	h_DRM_KEYCTX_OUT
#else
#define	h_DRM_KEYCTX_OUT

#define	\
	AR_DRM_KEYCTX_OUT \
		13
#define	\
	AB_DRM_KEYCTX_OUT \
		6

typedef struct SIE_DRM_KEYCTX_OUT {

	#define	RA_DRM_KEYCTX_OUT_D0th_ 	ISC_USE_ONLY	0x00000
	#define	w32DRM_KEYCTX_OUT_D0th_ 	{										\
					UNSG32				u_ctxSize					 : 16;		\
					UNSG32				u_ctxType					 :  8;		\
					UNSG32				_x00000	:  8;							\
										}
	/* @'00000 */				struct	w32DRM_KEYCTX_OUT_D0th_;

	/* [15: 0] */	#define	  BA_DRM_KEYCTX_OUT_ctxSize				 0x00000
	/* ---:--- */	#define	    bDRM_KEYCTX_OUT_ctxSize				   16 /*bit*/
	/* ---:--- */	#define	LSb32DRM_KEYCTX_OUT_ctxSize				    0 /*:15*/
	/* ---:--- */	#define	MSK32DRM_KEYCTX_OUT_ctxSize				       0x0000FFFF
	/* ---:--- */	#define	GET32DRM_KEYCTX_OUT_ctxSize(r32)			 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRM_KEYCTX_OUT_ctxSize(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRM_KEYCTX_OUT_ctxSize(r32,v)			do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_KEYCTX_OUT_ctxSize(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [23:16] */	#define	  BA_DRM_KEYCTX_OUT_ctxType				 0x00002
	/* ---:--- */	#define	    bDRM_KEYCTX_OUT_ctxType				    8 /*bit*/
	/* ---:--- */	#define	LSb32DRM_KEYCTX_OUT_ctxType				   16 /*:23*/
	/* ---:--- */	#define	MSK32DRM_KEYCTX_OUT_ctxType				       0x00FF0000
	/* ---:--- */	#define	GET32DRM_KEYCTX_OUT_ctxType(r32)			 (((r32)>>16)&0x00FF)
	/* ---:--- */	#define	GET16DRM_KEYCTX_OUT_ctxType(r16)			 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32DRM_KEYCTX_OUT_ctxType(r32,v)			do{(r32)&=~(0x00FF<<16);(r32)|=((v)&0x00FF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRM_KEYCTX_OUT_ctxType(r16,v)			do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	#define	RA_DRM_KEYCTX_OUT_D1th_ 	ISC_USE_ONLY	0x00004
	#define	w32DRM_KEYCTX_OUT_D1th_ 	{										\
					UNSG32				u_reserved					 : 32;		\
										}
	/* @'00004 */				struct	w32DRM_KEYCTX_OUT_D1th_;

	/* [31: 0] */	#define	  BA_DRM_KEYCTX_OUT_reserved			 0x00004
	/* ---:--- */	#define	    bDRM_KEYCTX_OUT_reserved			   32 /*bit*/
	/* ---:--- */	#define	LSb32DRM_KEYCTX_OUT_reserved			    0 /*:31*/
	/* ---:--- */	#define	MSK32DRM_KEYCTX_OUT_reserved			       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRM_KEYCTX_OUT_reserved(r32)			 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRM_KEYCTX_OUT_reserved(r16)			 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRM_KEYCTX_OUT_reserved(r32,v)			do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_KEYCTX_OUT_reserved(r16,v)			do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DRM_KEYCTX_OUT_keyParm 	0x00008
	/* @'00008 */	SIE_DRM_KEYPARM 			ie_keyParm;

	#define	RA_DRM_KEYCTX_OUT_hashVal 	0x0000C
	/* @'0000C */	SIE_DRM_DIGEST 				ie_hashVal;

	#define	RA_DRM_KEYCTX_OUT_cipherTxt 0x0002C
	/* @'0002C */	SIE_UINT64 					ie_cipherTxt;

} SIE_DRM_KEYCTX_OUT;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRM_KEYCTX_OUT_drvrd (SIE_DRM_KEYCTX_OUT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRM_KEYCTX_OUT_drvwr (SIE_DRM_KEYCTX_OUT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRM_KEYCTX_OUT_reset (SIE_DRM_KEYCTX_OUT *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRM_KEYCTX_OUT_check(p,pie,ps8name,hfpErrLOG)		DRM_KEYCTX_OUT_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRM_KEYCTX_OUT_print(p,    ps8name,hfpErrLOG)		DRM_KEYCTX_OUT_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRM_KEYCTX_OUT_cmp   (SIE_DRM_KEYCTX_OUT *p, SIE_DRM_KEYCTX_OUT *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRM_KEYCTX_OUT_import(SIE_DRM_KEYCTX_OUT *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRM_KEYCTX_OUT_export(SIE_DRM_KEYCTX_OUT *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRM_KEYCTX_OUT
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRM_SYMKEYCTX256_IN_B
*	@
*		$DRM_KEYPARM_SYM  keyParm
*						*  *
*						*  Key parameter
*	@
*		$DRM_DIGEST  hashVal
*						*  *
*						*  Cipher text SHA1 hash value
*	@
*		$UINT128  keyData
*						*  *
*						*  Algorithm specific of the key data
**********************************************************************************************************************/
#ifdef	h_DRM_SYMKEYCTX256_IN_B
#else
#define	h_DRM_SYMKEYCTX256_IN_B

#define	\
	AR_DRM_SYMKEYCTX256_IN_B \
		18
#define	\
	AB_DRM_SYMKEYCTX256_IN_B \
		7

typedef struct SIE_DRM_SYMKEYCTX256_IN_B {

	#define	RA_DRM_SYMKEYCTX256_IN_B_keyParm 0x00000
	/* @'00000 */	SIE_DRM_KEYPARM_SYM 		ie_keyParm;

	#define	RA_DRM_SYMKEYCTX256_IN_B_hashVal 0x00018
	/* @'00018 */	SIE_DRM_DIGEST 				ie_hashVal;

	#define	RA_DRM_SYMKEYCTX256_IN_B_keyData 0x00038
	/* @'00038 */	SIE_UINT128 				ie_keyData;

} SIE_DRM_SYMKEYCTX256_IN_B;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRM_SYMKEYCTX256_IN_B_drvrd (SIE_DRM_SYMKEYCTX256_IN_B *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRM_SYMKEYCTX256_IN_B_drvwr (SIE_DRM_SYMKEYCTX256_IN_B *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRM_SYMKEYCTX256_IN_B_reset (SIE_DRM_SYMKEYCTX256_IN_B *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRM_SYMKEYCTX256_IN_B_check(p,pie,ps8name,hfpErrLOG)		DRM_SYMKEYCTX256_IN_B_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRM_SYMKEYCTX256_IN_B_print(p,    ps8name,hfpErrLOG)		DRM_SYMKEYCTX256_IN_B_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRM_SYMKEYCTX256_IN_B_cmp   (SIE_DRM_SYMKEYCTX256_IN_B *p, SIE_DRM_SYMKEYCTX256_IN_B *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRM_SYMKEYCTX256_IN_B_import(SIE_DRM_SYMKEYCTX256_IN_B *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRM_SYMKEYCTX256_IN_B_export(SIE_DRM_SYMKEYCTX256_IN_B *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRM_SYMKEYCTX256_IN_B
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRM_SYMKEYCTX256_IN
*	@
*		%unsigned  16  ctxSize
*						*  *
*						*  Context size
*		%unsigned  8  ctxType
*						*  *
*						*  Context type
*	@
*		%unsigned  32  reserved0
*						*  *
*						*  Reserved
*	@
*		$DRM_KEYPARM_SYM  keyParm
*						*  *
*						*  Key parameter
*	@
*		$DRM_DIGEST  hashVal
*						*  *
*						*  Cipher text SHA1 hash value
*	@
*		%unsigned  8  keyUsageRule
*						*  *
*						*  Context usage rules
*			:  KUL_SIGN  0x01
*						*  *
*						*  a signing key
*			:  KUL_KEK  0x02
*						*  *
*						*  wrap and unwrap other keys
*			:  KUL_ENC  0x04
*						*  *
*						*  Encrypt data
*			:  KUL_DEC  0x04
*						*  *
*						*  Decrypt data
*			:  KUL_EXPORT  0x08
*						*  *
*						*  Exportable keys
*			:  KUL_AUTH  0x10
*						*  *
*						*  Key usage authentication or not
*	@
*		%unsigned  32  reserved1
*						*  *
*						*  Reserved
*	@
*		$UINT64  keyPwd
*						*  *
*						*  Authentication password
*	@
*		$UINT128  keyData
*						*  *
*						*  Algorithm specific of the key data
**********************************************************************************************************************/
#ifdef	h_DRM_SYMKEYCTX256_IN
#else
#define	h_DRM_SYMKEYCTX256_IN

#define	\
	AR_DRM_SYMKEYCTX256_IN \
		24
#define	\
	AB_DRM_SYMKEYCTX256_IN \
		7

typedef struct SIE_DRM_SYMKEYCTX256_IN {

	#define	RA_DRM_SYMKEYCTX256_IN_D0th_ ISC_USE_ONLY	0x00000
	#define	w32DRM_SYMKEYCTX256_IN_D0th_ {										\
					UNSG32				u_ctxSize					 : 16;		\
					UNSG32				u_ctxType					 :  8;		\
					UNSG32				_x00000	:  8;							\
										}
	/* @'00000 */				struct	w32DRM_SYMKEYCTX256_IN_D0th_;

	/* [15: 0] */	#define	  BA_DRM_SYMKEYCTX256_IN_ctxSize		 0x00000
	/* ---:--- */	#define	    bDRM_SYMKEYCTX256_IN_ctxSize		   16 /*bit*/
	/* ---:--- */	#define	LSb32DRM_SYMKEYCTX256_IN_ctxSize		    0 /*:15*/
	/* ---:--- */	#define	MSK32DRM_SYMKEYCTX256_IN_ctxSize		       0x0000FFFF
	/* ---:--- */	#define	GET32DRM_SYMKEYCTX256_IN_ctxSize(r32)		 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRM_SYMKEYCTX256_IN_ctxSize(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRM_SYMKEYCTX256_IN_ctxSize(r32,v)		do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_SYMKEYCTX256_IN_ctxSize(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [23:16] */	#define	  BA_DRM_SYMKEYCTX256_IN_ctxType		 0x00002
	/* ---:--- */	#define	    bDRM_SYMKEYCTX256_IN_ctxType		    8 /*bit*/
	/* ---:--- */	#define	LSb32DRM_SYMKEYCTX256_IN_ctxType		   16 /*:23*/
	/* ---:--- */	#define	MSK32DRM_SYMKEYCTX256_IN_ctxType		       0x00FF0000
	/* ---:--- */	#define	GET32DRM_SYMKEYCTX256_IN_ctxType(r32)		 (((r32)>>16)&0x00FF)
	/* ---:--- */	#define	GET16DRM_SYMKEYCTX256_IN_ctxType(r16)		 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32DRM_SYMKEYCTX256_IN_ctxType(r32,v)		do{(r32)&=~(0x00FF<<16);(r32)|=((v)&0x00FF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRM_SYMKEYCTX256_IN_ctxType(r16,v)		do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	#define	RA_DRM_SYMKEYCTX256_IN_D1th_ ISC_USE_ONLY	0x00004
	#define	w32DRM_SYMKEYCTX256_IN_D1th_ {										\
					UNSG32				u_reserved0					 : 32;		\
										}
	/* @'00004 */				struct	w32DRM_SYMKEYCTX256_IN_D1th_;

	/* [31: 0] */	#define	  BA_DRM_SYMKEYCTX256_IN_reserved0		 0x00004
	/* ---:--- */	#define	    bDRM_SYMKEYCTX256_IN_reserved0		   32 /*bit*/
	/* ---:--- */	#define	LSb32DRM_SYMKEYCTX256_IN_reserved0		    0 /*:31*/
	/* ---:--- */	#define	MSK32DRM_SYMKEYCTX256_IN_reserved0		       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRM_SYMKEYCTX256_IN_reserved0(r32)		 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRM_SYMKEYCTX256_IN_reserved0(r16)		 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRM_SYMKEYCTX256_IN_reserved0(r32,v)	do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_SYMKEYCTX256_IN_reserved0(r16,v)	do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DRM_SYMKEYCTX256_IN_keyParm 0x00008
	/* @'00008 */	SIE_DRM_KEYPARM_SYM 		ie_keyParm;

	#define	RA_DRM_SYMKEYCTX256_IN_hashVal 0x00020
	/* @'00020 */	SIE_DRM_DIGEST 				ie_hashVal;

	#define	RA_DRM_SYMKEYCTX256_IN_D16th_ ISC_USE_ONLY	0x00040
	#define	w32DRM_SYMKEYCTX256_IN_D16th_ {										\
					UNSG32				u_keyUsageRule				 :  8;		\
					UNSG32				_x00040	: 24;							\
										}
	/* @'00040 */				struct	w32DRM_SYMKEYCTX256_IN_D16th_;

	/* [ 7: 0] */	#define	  BA_DRM_SYMKEYCTX256_IN_keyUsageRule	 0x00040
	/* ---:--- */	#define	    bDRM_SYMKEYCTX256_IN_keyUsageRule	    8 /*bit*/
	/* ---:--- */	#define	LSb32DRM_SYMKEYCTX256_IN_keyUsageRule	    0 /*: 7*/
	/* ---:--- */	#define	MSK32DRM_SYMKEYCTX256_IN_keyUsageRule	       0x000000FF
	/* ---:--- */	#define	GET32DRM_SYMKEYCTX256_IN_keyUsageRule(r32)	 (((r32)>> 0)&0x00FF)
	/* ---:--- */	#define	GET16DRM_SYMKEYCTX256_IN_keyUsageRule(r16)	 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32DRM_SYMKEYCTX256_IN_keyUsageRule(r32,v)do{(r32)&=~(0x00FF<< 0);(r32)|=((v)&0x00FF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_SYMKEYCTX256_IN_keyUsageRule(r16,v)do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)
					#define	     DRM_SYMKEYCTX256_IN_keyUsageRule_KUL_SIGN	0x1
					#define	     DRM_SYMKEYCTX256_IN_keyUsageRule_KUL_KEK	0x2
					#define	     DRM_SYMKEYCTX256_IN_keyUsageRule_KUL_ENC	0x4
					#define	     DRM_SYMKEYCTX256_IN_keyUsageRule_KUL_DEC	0x4
					#define	     DRM_SYMKEYCTX256_IN_keyUsageRule_KUL_EXPORT	0x8
					#define	     DRM_SYMKEYCTX256_IN_keyUsageRule_KUL_AUTH	0x10

	#define	RA_DRM_SYMKEYCTX256_IN_D17th_ ISC_USE_ONLY	0x00044
	#define	w32DRM_SYMKEYCTX256_IN_D17th_ {										\
					UNSG32				u_reserved1					 : 32;		\
										}
	/* @'00044 */				struct	w32DRM_SYMKEYCTX256_IN_D17th_;

	/* [31: 0] */	#define	  BA_DRM_SYMKEYCTX256_IN_reserved1		 0x00044
	/* ---:--- */	#define	    bDRM_SYMKEYCTX256_IN_reserved1		   32 /*bit*/
	/* ---:--- */	#define	LSb32DRM_SYMKEYCTX256_IN_reserved1		    0 /*:31*/
	/* ---:--- */	#define	MSK32DRM_SYMKEYCTX256_IN_reserved1		       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRM_SYMKEYCTX256_IN_reserved1(r32)		 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRM_SYMKEYCTX256_IN_reserved1(r16)		 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRM_SYMKEYCTX256_IN_reserved1(r32,v)	do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_SYMKEYCTX256_IN_reserved1(r16,v)	do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DRM_SYMKEYCTX256_IN_keyPwd 0x00048
	/* @'00048 */	SIE_UINT64 					ie_keyPwd;

	#define	RA_DRM_SYMKEYCTX256_IN_keyData 0x00050
	/* @'00050 */	SIE_UINT128 				ie_keyData;

} SIE_DRM_SYMKEYCTX256_IN;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRM_SYMKEYCTX256_IN_drvrd (SIE_DRM_SYMKEYCTX256_IN *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRM_SYMKEYCTX256_IN_drvwr (SIE_DRM_SYMKEYCTX256_IN *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRM_SYMKEYCTX256_IN_reset (SIE_DRM_SYMKEYCTX256_IN *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRM_SYMKEYCTX256_IN_check(p,pie,ps8name,hfpErrLOG)		DRM_SYMKEYCTX256_IN_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRM_SYMKEYCTX256_IN_print(p,    ps8name,hfpErrLOG)		DRM_SYMKEYCTX256_IN_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRM_SYMKEYCTX256_IN_cmp   (SIE_DRM_SYMKEYCTX256_IN *p, SIE_DRM_SYMKEYCTX256_IN *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRM_SYMKEYCTX256_IN_import(SIE_DRM_SYMKEYCTX256_IN *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRM_SYMKEYCTX256_IN_export(SIE_DRM_SYMKEYCTX256_IN *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRM_SYMKEYCTX256_IN
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRM_RSA1024_PUBKEY
*	@
*		$UINT128  rsaMod  REG
*						*  *
*						*  RSA algorithm specific modulus data
*	@
*		$UINT128  keyData  REG  [8]
*						*  *
*						*  Algorithm specific of the public or private key data
**********************************************************************************************************************/
#ifdef	h_DRM_RSA1024_PUBKEY
#else
#define	h_DRM_RSA1024_PUBKEY

#define	\
	AR_DRM_RSA1024_PUBKEY \
		36
#define	\
	AB_DRM_RSA1024_PUBKEY \
		8

typedef struct SIE_DRM_RSA1024_PUBKEY {

	#define	RA_DRM_RSA1024_PUBKEY_rsaMod 0x00000
	/* @'00000 */	SIE_UINT128 				ie_rsaMod;

	#define	RA_DRM_RSA1024_PUBKEY_keyData 0x00010
	/* @'00010 */	SIE_UINT128 				ie_keyData			 [8];
					#define	 arr_DRM_RSA1024_PUBKEY_keyData 		  8

} SIE_DRM_RSA1024_PUBKEY;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRM_RSA1024_PUBKEY_drvrd (SIE_DRM_RSA1024_PUBKEY *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRM_RSA1024_PUBKEY_drvwr (SIE_DRM_RSA1024_PUBKEY *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRM_RSA1024_PUBKEY_reset (SIE_DRM_RSA1024_PUBKEY *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRM_RSA1024_PUBKEY_check(p,pie,ps8name,hfpErrLOG)		DRM_RSA1024_PUBKEY_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRM_RSA1024_PUBKEY_print(p,    ps8name,hfpErrLOG)		DRM_RSA1024_PUBKEY_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRM_RSA1024_PUBKEY_cmp   (SIE_DRM_RSA1024_PUBKEY *p, SIE_DRM_RSA1024_PUBKEY *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRM_RSA1024_PUBKEY_import(SIE_DRM_RSA1024_PUBKEY *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRM_RSA1024_PUBKEY_export(SIE_DRM_RSA1024_PUBKEY *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRM_RSA1024_PUBKEY
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRM_RSAKEYCTX1024_IN
*	@
*		$DRM_DIGEST  hashVal
*						*  *
*						*  Cipher text SHA1 hash value
*	@
*		$DRM_RSA1024_PUBKEY  keyData
*						*  *
*						*  Algorithm specific of the key data
**********************************************************************************************************************/
#ifdef	h_DRM_RSAKEYCTX1024_IN
#else
#define	h_DRM_RSAKEYCTX1024_IN

#define	\
	AR_DRM_RSAKEYCTX1024_IN \
		44
#define	\
	AB_DRM_RSAKEYCTX1024_IN \
		8

typedef struct SIE_DRM_RSAKEYCTX1024_IN {

	#define	RA_DRM_RSAKEYCTX1024_IN_hashVal 0x00000
	/* @'00000 */	SIE_DRM_DIGEST 				ie_hashVal;

	#define	RA_DRM_RSAKEYCTX1024_IN_keyData 0x00020
	/* @'00020 */	SIE_DRM_RSA1024_PUBKEY 		ie_keyData;

} SIE_DRM_RSAKEYCTX1024_IN;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRM_RSAKEYCTX1024_IN_drvrd (SIE_DRM_RSAKEYCTX1024_IN *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRM_RSAKEYCTX1024_IN_drvwr (SIE_DRM_RSAKEYCTX1024_IN *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRM_RSAKEYCTX1024_IN_reset (SIE_DRM_RSAKEYCTX1024_IN *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRM_RSAKEYCTX1024_IN_check(p,pie,ps8name,hfpErrLOG)		DRM_RSAKEYCTX1024_IN_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRM_RSAKEYCTX1024_IN_print(p,    ps8name,hfpErrLOG)		DRM_RSAKEYCTX1024_IN_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRM_RSAKEYCTX1024_IN_cmp   (SIE_DRM_RSAKEYCTX1024_IN *p, SIE_DRM_RSAKEYCTX1024_IN *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRM_RSAKEYCTX1024_IN_import(SIE_DRM_RSAKEYCTX1024_IN *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRM_RSAKEYCTX1024_IN_export(SIE_DRM_RSAKEYCTX1024_IN *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRM_RSAKEYCTX1024_IN
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRM_RSAKEYCTX1024_IN_B
*	@
*		%unsigned  16  ctxSize
*						*  *
*						*  Context size
*		%unsigned  8  ctxType
*						*  *
*						*  Context type
*	@
*		%unsigned  32  reserved0
*						*  *
*						*  Reserved
*	@
*		$DRM_KEYPARM_RSA  keyParm
*						*  *
*						*  Key parameter
*	@
*		$DRM_DIGEST  hashVal
*						*  *
*						*  Cipher text SHA1 hash value
*	@
*		%unsigned  8  keyUsageRule
*						*  *
*						*  Context usage rules
*			:  KUL_SIGN  0x01
*						*  *
*						*  a signing key
*			:  KUL_KEK  0x02
*						*  *
*						*  wrap and unwrap other keys
*			:  KUL_ENC  0x04
*						*  *
*						*  Encrypt data
*			:  KUL_DEC  0x04
*						*  *
*						*  Decrypt data
*			:  KUL_EXPORT  0x08
*						*  *
*						*  Exportable keys
*			:  KUL_AUTH  0x10
*						*  *
*						*  Key usage authentication or not
*	@
*		%unsigned  32  reserved1
*						*  *
*						*  Reserved
*	@
*		$UINT64  keyPwd
*						*  *
*						*  Authentication password
*	@
*		$UINT128  keyData  [16]
*						*  *
*						*  Algorithm specific of the key data
**********************************************************************************************************************/
#ifdef	h_DRM_RSAKEYCTX1024_IN_B
#else
#define	h_DRM_RSAKEYCTX1024_IN_B

#define	\
	AR_DRM_RSAKEYCTX1024_IN_B \
		20
#define	\
	AB_DRM_RSAKEYCTX1024_IN_B \
		7

typedef struct SIE_DRM_RSAKEYCTX1024_IN_B {

	#define	RA_DRM_RSAKEYCTX1024_IN_B_D0th_ ISC_USE_ONLY	0x00000
	#define	w32DRM_RSAKEYCTX1024_IN_B_D0th_ {									\
					UNSG32				u_ctxSize					 : 16;		\
					UNSG32				u_ctxType					 :  8;		\
					UNSG32				_x00000	:  8;							\
										}
	/* @'00000 */				struct	w32DRM_RSAKEYCTX1024_IN_B_D0th_;

	/* [15: 0] */	#define	  BA_DRM_RSAKEYCTX1024_IN_B_ctxSize		 0x00000
	/* ---:--- */	#define	    bDRM_RSAKEYCTX1024_IN_B_ctxSize		   16 /*bit*/
	/* ---:--- */	#define	LSb32DRM_RSAKEYCTX1024_IN_B_ctxSize		    0 /*:15*/
	/* ---:--- */	#define	MSK32DRM_RSAKEYCTX1024_IN_B_ctxSize		       0x0000FFFF
	/* ---:--- */	#define	GET32DRM_RSAKEYCTX1024_IN_B_ctxSize(r32)	 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRM_RSAKEYCTX1024_IN_B_ctxSize(r16)	 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRM_RSAKEYCTX1024_IN_B_ctxSize(r32,v)	do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_RSAKEYCTX1024_IN_B_ctxSize(r16,v)	do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [23:16] */	#define	  BA_DRM_RSAKEYCTX1024_IN_B_ctxType		 0x00002
	/* ---:--- */	#define	    bDRM_RSAKEYCTX1024_IN_B_ctxType		    8 /*bit*/
	/* ---:--- */	#define	LSb32DRM_RSAKEYCTX1024_IN_B_ctxType		   16 /*:23*/
	/* ---:--- */	#define	MSK32DRM_RSAKEYCTX1024_IN_B_ctxType		       0x00FF0000
	/* ---:--- */	#define	GET32DRM_RSAKEYCTX1024_IN_B_ctxType(r32)	 (((r32)>>16)&0x00FF)
	/* ---:--- */	#define	GET16DRM_RSAKEYCTX1024_IN_B_ctxType(r16)	 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32DRM_RSAKEYCTX1024_IN_B_ctxType(r32,v)	do{(r32)&=~(0x00FF<<16);(r32)|=((v)&0x00FF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRM_RSAKEYCTX1024_IN_B_ctxType(r16,v)	do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	#define	RA_DRM_RSAKEYCTX1024_IN_B_D1th_ ISC_USE_ONLY	0x00004
	#define	w32DRM_RSAKEYCTX1024_IN_B_D1th_ {									\
					UNSG32				u_reserved0					 : 32;		\
										}
	/* @'00004 */				struct	w32DRM_RSAKEYCTX1024_IN_B_D1th_;

	/* [31: 0] */	#define	  BA_DRM_RSAKEYCTX1024_IN_B_reserved0	 0x00004
	/* ---:--- */	#define	    bDRM_RSAKEYCTX1024_IN_B_reserved0	   32 /*bit*/
	/* ---:--- */	#define	LSb32DRM_RSAKEYCTX1024_IN_B_reserved0	    0 /*:31*/
	/* ---:--- */	#define	MSK32DRM_RSAKEYCTX1024_IN_B_reserved0	       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRM_RSAKEYCTX1024_IN_B_reserved0(r32)	 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRM_RSAKEYCTX1024_IN_B_reserved0(r16)	 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRM_RSAKEYCTX1024_IN_B_reserved0(r32,v)do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_RSAKEYCTX1024_IN_B_reserved0(r16,v)do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DRM_RSAKEYCTX1024_IN_B_keyParm 0x00008
	/* @'00008 */	SIE_DRM_KEYPARM_RSA 		ie_keyParm;

	#define	RA_DRM_RSAKEYCTX1024_IN_B_hashVal 0x00010
	/* @'00010 */	SIE_DRM_DIGEST 				ie_hashVal;

	#define	RA_DRM_RSAKEYCTX1024_IN_B_D12th_ ISC_USE_ONLY	0x00030
	#define	w32DRM_RSAKEYCTX1024_IN_B_D12th_ {									\
					UNSG32				u_keyUsageRule				 :  8;		\
					UNSG32				_x00030	: 24;							\
										}
	/* @'00030 */				struct	w32DRM_RSAKEYCTX1024_IN_B_D12th_;

	/* [ 7: 0] */	#define	  BA_DRM_RSAKEYCTX1024_IN_B_keyUsageRule 0x00030
	/* ---:--- */	#define	    bDRM_RSAKEYCTX1024_IN_B_keyUsageRule    8 /*bit*/
	/* ---:--- */	#define	LSb32DRM_RSAKEYCTX1024_IN_B_keyUsageRule    0 /*: 7*/
	/* ---:--- */	#define	MSK32DRM_RSAKEYCTX1024_IN_B_keyUsageRule       0x000000FF
	/* ---:--- */	#define	GET32DRM_RSAKEYCTX1024_IN_B_keyUsageRule(r32) (((r32)>> 0)&0x00FF)
	/* ---:--- */	#define	GET16DRM_RSAKEYCTX1024_IN_B_keyUsageRule(r16) (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32DRM_RSAKEYCTX1024_IN_B_keyUsageRule(r32,v)do{(r32)&=~(0x00FF<< 0);(r32)|=((v)&0x00FF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_RSAKEYCTX1024_IN_B_keyUsageRule(r16,v)do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)
					#define	     DRM_RSAKEYCTX1024_IN_B_keyUsageRule_KUL_SIGN	0x1
					#define	     DRM_RSAKEYCTX1024_IN_B_keyUsageRule_KUL_KEK	0x2
					#define	     DRM_RSAKEYCTX1024_IN_B_keyUsageRule_KUL_ENC	0x4
					#define	     DRM_RSAKEYCTX1024_IN_B_keyUsageRule_KUL_DEC	0x4
					#define	     DRM_RSAKEYCTX1024_IN_B_keyUsageRule_KUL_EXPORT	0x8
					#define	     DRM_RSAKEYCTX1024_IN_B_keyUsageRule_KUL_AUTH	0x10

	#define	RA_DRM_RSAKEYCTX1024_IN_B_D13th_ ISC_USE_ONLY	0x00034
	#define	w32DRM_RSAKEYCTX1024_IN_B_D13th_ {									\
					UNSG32				u_reserved1					 : 32;		\
										}
	/* @'00034 */				struct	w32DRM_RSAKEYCTX1024_IN_B_D13th_;

	/* [31: 0] */	#define	  BA_DRM_RSAKEYCTX1024_IN_B_reserved1	 0x00034
	/* ---:--- */	#define	    bDRM_RSAKEYCTX1024_IN_B_reserved1	   32 /*bit*/
	/* ---:--- */	#define	LSb32DRM_RSAKEYCTX1024_IN_B_reserved1	    0 /*:31*/
	/* ---:--- */	#define	MSK32DRM_RSAKEYCTX1024_IN_B_reserved1	       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRM_RSAKEYCTX1024_IN_B_reserved1(r32)	 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRM_RSAKEYCTX1024_IN_B_reserved1(r16)	 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRM_RSAKEYCTX1024_IN_B_reserved1(r32,v)do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_RSAKEYCTX1024_IN_B_reserved1(r16,v)do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DRM_RSAKEYCTX1024_IN_B_keyPwd 0x00038
	/* @'00038 */	SIE_UINT64 					ie_keyPwd;

	#define	RA_DRM_RSAKEYCTX1024_IN_B_keyData 0x00040
	/* @'00040 */	SIE_UINT128 				ie_keyData;

} SIE_DRM_RSAKEYCTX1024_IN_B;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRM_RSAKEYCTX1024_IN_B_drvrd (SIE_DRM_RSAKEYCTX1024_IN_B *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRM_RSAKEYCTX1024_IN_B_drvwr (SIE_DRM_RSAKEYCTX1024_IN_B *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRM_RSAKEYCTX1024_IN_B_reset (SIE_DRM_RSAKEYCTX1024_IN_B *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRM_RSAKEYCTX1024_IN_B_check(p,pie,ps8name,hfpErrLOG)		DRM_RSAKEYCTX1024_IN_B_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRM_RSAKEYCTX1024_IN_B_print(p,    ps8name,hfpErrLOG)		DRM_RSAKEYCTX1024_IN_B_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRM_RSAKEYCTX1024_IN_B_cmp   (SIE_DRM_RSAKEYCTX1024_IN_B *p, SIE_DRM_RSAKEYCTX1024_IN_B *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRM_RSAKEYCTX1024_IN_B_import(SIE_DRM_RSAKEYCTX1024_IN_B *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRM_RSAKEYCTX1024_IN_B_export(SIE_DRM_RSAKEYCTX1024_IN_B *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRM_RSAKEYCTX1024_IN_B
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRM_HASH_CTXIN
*	@
*		%unsigned  16  ctxSize
*						*  *
*						*  Context size
*		%unsigned  8  ctxType
*						*  *
*						*  Context type
*	@
*		%unsigned  32  reserved
*						*  *
*						*  Reserved
*	@
*		%unsigned  32  ctxData
*						*  *
*						*  Reserved
**********************************************************************************************************************/
#ifdef	h_DRM_HASH_CTXIN
#else
#define	h_DRM_HASH_CTXIN

#define	\
	AR_DRM_HASH_CTXIN \
		3
#define	\
	AB_DRM_HASH_CTXIN \
		4

typedef struct SIE_DRM_HASH_CTXIN {

	#define	RA_DRM_HASH_CTXIN_D0th_ 	ISC_USE_ONLY	0x00000
	#define	w32DRM_HASH_CTXIN_D0th_ 	{										\
					UNSG32				u_ctxSize					 : 16;		\
					UNSG32				u_ctxType					 :  8;		\
					UNSG32				_x00000	:  8;							\
										}
	/* @'00000 */				struct	w32DRM_HASH_CTXIN_D0th_;

	/* [15: 0] */	#define	  BA_DRM_HASH_CTXIN_ctxSize				 0x00000
	/* ---:--- */	#define	    bDRM_HASH_CTXIN_ctxSize				   16 /*bit*/
	/* ---:--- */	#define	LSb32DRM_HASH_CTXIN_ctxSize				    0 /*:15*/
	/* ---:--- */	#define	MSK32DRM_HASH_CTXIN_ctxSize				       0x0000FFFF
	/* ---:--- */	#define	GET32DRM_HASH_CTXIN_ctxSize(r32)			 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRM_HASH_CTXIN_ctxSize(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRM_HASH_CTXIN_ctxSize(r32,v)			do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_HASH_CTXIN_ctxSize(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [23:16] */	#define	  BA_DRM_HASH_CTXIN_ctxType				 0x00002
	/* ---:--- */	#define	    bDRM_HASH_CTXIN_ctxType				    8 /*bit*/
	/* ---:--- */	#define	LSb32DRM_HASH_CTXIN_ctxType				   16 /*:23*/
	/* ---:--- */	#define	MSK32DRM_HASH_CTXIN_ctxType				       0x00FF0000
	/* ---:--- */	#define	GET32DRM_HASH_CTXIN_ctxType(r32)			 (((r32)>>16)&0x00FF)
	/* ---:--- */	#define	GET16DRM_HASH_CTXIN_ctxType(r16)			 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32DRM_HASH_CTXIN_ctxType(r32,v)			do{(r32)&=~(0x00FF<<16);(r32)|=((v)&0x00FF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRM_HASH_CTXIN_ctxType(r16,v)			do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	#define	RA_DRM_HASH_CTXIN_D1th_ 	ISC_USE_ONLY	0x00004
	#define	w32DRM_HASH_CTXIN_D1th_ 	{										\
					UNSG32				u_reserved					 : 32;		\
										}
	/* @'00004 */				struct	w32DRM_HASH_CTXIN_D1th_;

	/* [31: 0] */	#define	  BA_DRM_HASH_CTXIN_reserved			 0x00004
	/* ---:--- */	#define	    bDRM_HASH_CTXIN_reserved			   32 /*bit*/
	/* ---:--- */	#define	LSb32DRM_HASH_CTXIN_reserved			    0 /*:31*/
	/* ---:--- */	#define	MSK32DRM_HASH_CTXIN_reserved			       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRM_HASH_CTXIN_reserved(r32)			 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRM_HASH_CTXIN_reserved(r16)			 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRM_HASH_CTXIN_reserved(r32,v)			do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_HASH_CTXIN_reserved(r16,v)			do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DRM_HASH_CTXIN_D2th_ 	ISC_USE_ONLY	0x00008
	#define	w32DRM_HASH_CTXIN_D2th_ 	{										\
					UNSG32				u_ctxData					 : 32;		\
										}
	/* @'00008 */				struct	w32DRM_HASH_CTXIN_D2th_;

	/* [31: 0] */	#define	  BA_DRM_HASH_CTXIN_ctxData				 0x00008
	/* ---:--- */	#define	    bDRM_HASH_CTXIN_ctxData				   32 /*bit*/
	/* ---:--- */	#define	LSb32DRM_HASH_CTXIN_ctxData				    0 /*:31*/
	/* ---:--- */	#define	MSK32DRM_HASH_CTXIN_ctxData				       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRM_HASH_CTXIN_ctxData(r32)			 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRM_HASH_CTXIN_ctxData(r16)			 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRM_HASH_CTXIN_ctxData(r32,v)			do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_HASH_CTXIN_ctxData(r16,v)			do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

} SIE_DRM_HASH_CTXIN;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRM_HASH_CTXIN_drvrd (SIE_DRM_HASH_CTXIN *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRM_HASH_CTXIN_drvwr (SIE_DRM_HASH_CTXIN *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRM_HASH_CTXIN_reset (SIE_DRM_HASH_CTXIN *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRM_HASH_CTXIN_check(p,pie,ps8name,hfpErrLOG)		DRM_HASH_CTXIN_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRM_HASH_CTXIN_print(p,    ps8name,hfpErrLOG)		DRM_HASH_CTXIN_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRM_HASH_CTXIN_cmp   (SIE_DRM_HASH_CTXIN *p, SIE_DRM_HASH_CTXIN *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRM_HASH_CTXIN_import(SIE_DRM_HASH_CTXIN *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRM_HASH_CTXIN_export(SIE_DRM_HASH_CTXIN *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRM_HASH_CTXIN
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRM_FIGOIMG
*	@
*		$DRM_SUBKEY_OUT  encKey
*						*  *
*						*  Image protection Key
*	@
*		$DRM_DIGEST  authData
*						*  *
*						*  Authentication information signed by sigKey
*	@
*		$UINT128  bindInfo
*						*  *
*						*  Platform binding information to indicate what type of underling hardware to run this firmware
*	@  INFO
*		%unsigned  16  insNum  0
*						*  *
*						*  Instructions Number
*		%unsigned  16  insPCoff
*						*  *
*						*  Destination PC
*		%unsigned  16  datCnt
*						*  *
*						*  Static data area size in 64bits entries
*		%unsigned  16  datCntOff
*						*  *
*						*  Destination offset
*	@
*		$UINT32  reserved  REG  [2]
*						*  *
*						*  Reserved bits
*	@
*		$UINT32  imgDat
**********************************************************************************************************************/
#ifdef	h_DRM_FIGOIMG
#else
#define	h_DRM_FIGOIMG

#define	\
	AR_DRM_FIGOIMG \
		33
#define	\
	AB_DRM_FIGOIMG \
		8

typedef struct SIE_DRM_FIGOIMG {

	#define	RA_DRM_FIGOIMG_encKey 		0x00000
	/* @'00000 */	SIE_DRM_SUBKEY_OUT 			ie_encKey;

	#define	RA_DRM_FIGOIMG_authData 	0x00040
	/* @'00040 */	SIE_DRM_DIGEST 				ie_authData;

	#define	RA_DRM_FIGOIMG_bindInfo 	0x00060
	/* @'00060 */	SIE_UINT128 				ie_bindInfo;

	#define	RA_DRM_FIGOIMG_INFO 		0x00070
	#define	w32DRM_FIGOIMG_INFO 		{										\
					UNSG32				uINFO_insNum				 : 16;		\
					UNSG32				uINFO_insPCoff				 : 16;		\
										}
	/* @'00070 */	union {	UNSG32		u32DRM_FIGOIMG_INFO;
								struct	w32DRM_FIGOIMG_INFO;
										};

	/* [15: 0] */	#define	  BA_DRM_FIGOIMG_INFO_insNum			 0x00070
	/* ---:--- */	#define	    bDRM_FIGOIMG_INFO_insNum			   16 /*bit*/
	/* ---:--- */	#define	LSb32DRM_FIGOIMG_INFO_insNum			    0 /*:15*/
	/* ---:--- */	#define	MSK32DRM_FIGOIMG_INFO_insNum			       0x0000FFFF
	/* ---:--- */	#define	GET32DRM_FIGOIMG_INFO_insNum(r32)			 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRM_FIGOIMG_INFO_insNum(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRM_FIGOIMG_INFO_insNum(r32,v)			do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_FIGOIMG_INFO_insNum(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DRM_FIGOIMG_INFO_insPCoff			 0x00072
	/* ---:--- */	#define	    bDRM_FIGOIMG_INFO_insPCoff			   16 /*bit*/
	/* ---:--- */	#define	LSb32DRM_FIGOIMG_INFO_insPCoff			   16 /*:31*/
	/* ---:--- */	#define	MSK32DRM_FIGOIMG_INFO_insPCoff			       0xFFFF0000
	/* ---:--- */	#define	GET32DRM_FIGOIMG_INFO_insPCoff(r32)			 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DRM_FIGOIMG_INFO_insPCoff(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRM_FIGOIMG_INFO_insPCoff(r32,v)		do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRM_FIGOIMG_INFO_insPCoff(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DRM_FIGOIMG_INFO1 		0x00074
	#define	w32DRM_FIGOIMG_INFO1 		{										\
					UNSG32				uINFO_datCnt				 : 16;		\
					UNSG32				uINFO_datCntOff				 : 16;		\
										}
	/* @'00074 */	union {	UNSG32		u32DRM_FIGOIMG_INFO1;
								struct	w32DRM_FIGOIMG_INFO1;
										};

	/* [15: 0] */	#define	  BA_DRM_FIGOIMG_INFO_datCnt			 0x00074
	/* ---:--- */	#define	    bDRM_FIGOIMG_INFO_datCnt			   16 /*bit*/
	/* ---:--- */	#define	LSb32DRM_FIGOIMG_INFO_datCnt			    0 /*:15*/
	/* ---:--- */	#define	MSK32DRM_FIGOIMG_INFO_datCnt			       0x0000FFFF
	/* ---:--- */	#define	GET32DRM_FIGOIMG_INFO_datCnt(r32)			 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRM_FIGOIMG_INFO_datCnt(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRM_FIGOIMG_INFO_datCnt(r32,v)			do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_FIGOIMG_INFO_datCnt(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DRM_FIGOIMG_INFO_datCntOff			 0x00076
	/* ---:--- */	#define	    bDRM_FIGOIMG_INFO_datCntOff			   16 /*bit*/
	/* ---:--- */	#define	LSb32DRM_FIGOIMG_INFO_datCntOff			   16 /*:31*/
	/* ---:--- */	#define	MSK32DRM_FIGOIMG_INFO_datCntOff			       0xFFFF0000
	/* ---:--- */	#define	GET32DRM_FIGOIMG_INFO_datCntOff(r32)		 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DRM_FIGOIMG_INFO_datCntOff(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRM_FIGOIMG_INFO_datCntOff(r32,v)		do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRM_FIGOIMG_INFO_datCntOff(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DRM_FIGOIMG_reserved 	0x00078
	/* @'00078 */	SIE_UINT32 					ie_reserved			 [2];
					#define	 arr_DRM_FIGOIMG_reserved 				  2

	#define	RA_DRM_FIGOIMG_imgDat 		0x00080
	/* @'00080 */	SIE_UINT32 					ie_imgDat;

} SIE_DRM_FIGOIMG;

	#define	dftDRM_FIGOIMG_INFO 		0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DRM_FIGOIMG_INFO;
										} T32DRM_FIGOIMG_INFO;
	#define	dftDRM_FIGOIMG_INFO1 		0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DRM_FIGOIMG_INFO1;
										} T32DRM_FIGOIMG_INFO1;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRM_FIGOIMG_drvrd (SIE_DRM_FIGOIMG *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRM_FIGOIMG_drvwr (SIE_DRM_FIGOIMG *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRM_FIGOIMG_reset (SIE_DRM_FIGOIMG *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRM_FIGOIMG_check(p,pie,ps8name,hfpErrLOG)		DRM_FIGOIMG_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRM_FIGOIMG_print(p,    ps8name,hfpErrLOG)		DRM_FIGOIMG_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRM_FIGOIMG_cmp   (SIE_DRM_FIGOIMG *p, SIE_DRM_FIGOIMG *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRM_FIGOIMG_import(SIE_DRM_FIGOIMG *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRM_FIGOIMG_export(SIE_DRM_FIGOIMG *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRM_FIGOIMG
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRM_ARMIMG
*	@
*		$DRM_SUBKEY_OUT  encKey
*						*  *
*						*  Image protection Key
*	@
*		$DRM_DIGEST  authData
*						*  *
*						*  Authentication information signed by sigKey
*	@
*		$UINT128  bindInfo
*						*  *
*						*  Platform binding information to indicate what type of underling hardware to run this firmware
*	@
*		$UINT32  reserved  REG  [3]
*	@
*		$UINT32  imgSize
*						*  *
*						*  Actual Image size. Total Image size is ALIGN16(imgSize) + 128
*	@
*		$UINT32  imgDat
**********************************************************************************************************************/
#ifdef	h_DRM_ARMIMG
#else
#define	h_DRM_ARMIMG

#define	\
	AR_DRM_ARMIMG \
		33
#define	\
	AB_DRM_ARMIMG \
		8

typedef struct SIE_DRM_ARMIMG {

	#define	RA_DRM_ARMIMG_encKey 		0x00000
	/* @'00000 */	SIE_DRM_SUBKEY_OUT 			ie_encKey;

	#define	RA_DRM_ARMIMG_authData 		0x00040
	/* @'00040 */	SIE_DRM_DIGEST 				ie_authData;

	#define	RA_DRM_ARMIMG_bindInfo 		0x00060
	/* @'00060 */	SIE_UINT128 				ie_bindInfo;

	#define	RA_DRM_ARMIMG_reserved 		0x00070
	/* @'00070 */	SIE_UINT32 					ie_reserved			 [3];
					#define	 arr_DRM_ARMIMG_reserved 				  3

	#define	RA_DRM_ARMIMG_imgSize 		0x0007C
	/* @'0007C */	SIE_UINT32 					ie_imgSize;

	#define	RA_DRM_ARMIMG_imgDat 		0x00080
	/* @'00080 */	SIE_UINT32 					ie_imgDat;

} SIE_DRM_ARMIMG;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRM_ARMIMG_drvrd (SIE_DRM_ARMIMG *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRM_ARMIMG_drvwr (SIE_DRM_ARMIMG *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRM_ARMIMG_reset (SIE_DRM_ARMIMG *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRM_ARMIMG_check(p,pie,ps8name,hfpErrLOG)		DRM_ARMIMG_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRM_ARMIMG_print(p,    ps8name,hfpErrLOG)		DRM_ARMIMG_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRM_ARMIMG_cmp   (SIE_DRM_ARMIMG *p, SIE_DRM_ARMIMG *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRM_ARMIMG_import(SIE_DRM_ARMIMG *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRM_ARMIMG_export(SIE_DRM_ARMIMG *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRM_ARMIMG
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: SHA1_RODAT
*	@
*		$UINT32  a64Blk  REG  [576]
**********************************************************************************************************************/
#ifdef	h_SHA1_RODAT
#else
#define	h_SHA1_RODAT

#define	\
	AR_SHA1_RODAT \
		576
#define	\
	AB_SHA1_RODAT \
		12

typedef struct SIE_SHA1_RODAT {

	#define	RA_SHA1_RODAT_a64Blk 		0x00000
	/* @'00000 */	SIE_UINT32 					ie_a64Blk			 [576];
					#define	 arr_SHA1_RODAT_a64Blk 					  576

} SIE_SHA1_RODAT;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	SHA1_RODAT_drvrd (SIE_SHA1_RODAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	SHA1_RODAT_drvwr (SIE_SHA1_RODAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	SHA1_RODAT_reset (SIE_SHA1_RODAT *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	SHA1_RODAT_check(p,pie,ps8name,hfpErrLOG)		SHA1_RODAT_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	SHA1_RODAT_print(p,    ps8name,hfpErrLOG)		SHA1_RODAT_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	SHA1_RODAT_cmp   (SIE_SHA1_RODAT *p, SIE_SHA1_RODAT *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	SHA1_RODAT_import(SIE_SHA1_RODAT *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	SHA1_RODAT_export(SIE_SHA1_RODAT *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: SHA1_RODAT
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: SHA1_CTXDAT
*	@
*		$UINT64  puCount
*						*  *
*						*  Counter
*	@
*		$UINT32  pbBuf  REG  [16]
*						*  *
*						*  Internal buffer
*	@
*		$UINT32  puState  REG  [6]
*						*  *
*						*  Hash state
**********************************************************************************************************************/
#ifdef	h_SHA1_CTXDAT
#else
#define	h_SHA1_CTXDAT

#define	\
	AR_SHA1_CTXDAT \
		24
#define	\
	AB_SHA1_CTXDAT \
		7

typedef struct SIE_SHA1_CTXDAT {

	#define	RA_SHA1_CTXDAT_puCount 		0x00000
	/* @'00000 */	SIE_UINT64 					ie_puCount;

	#define	RA_SHA1_CTXDAT_pbBuf 		0x00008
	/* @'00008 */	SIE_UINT32 					ie_pbBuf			 [16];
					#define	 arr_SHA1_CTXDAT_pbBuf 					  16

	#define	RA_SHA1_CTXDAT_puState 		0x00048
	/* @'00048 */	SIE_UINT32 					ie_puState			 [6];
					#define	 arr_SHA1_CTXDAT_puState 				  6

} SIE_SHA1_CTXDAT;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	SHA1_CTXDAT_drvrd (SIE_SHA1_CTXDAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	SHA1_CTXDAT_drvwr (SIE_SHA1_CTXDAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	SHA1_CTXDAT_reset (SIE_SHA1_CTXDAT *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	SHA1_CTXDAT_check(p,pie,ps8name,hfpErrLOG)		SHA1_CTXDAT_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	SHA1_CTXDAT_print(p,    ps8name,hfpErrLOG)		SHA1_CTXDAT_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	SHA1_CTXDAT_cmp   (SIE_SHA1_CTXDAT *p, SIE_SHA1_CTXDAT *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	SHA1_CTXDAT_import(SIE_SHA1_CTXDAT *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	SHA1_CTXDAT_export(SIE_SHA1_CTXDAT *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: SHA1_CTXDAT
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: CRC32_RODAT
*	@
*		$UINT32  a64Blk  REG  [80]
**********************************************************************************************************************/
#ifdef	h_CRC32_RODAT
#else
#define	h_CRC32_RODAT

#define	\
	AR_CRC32_RODAT \
		80
#define	\
	AB_CRC32_RODAT \
		9

typedef struct SIE_CRC32_RODAT {

	#define	RA_CRC32_RODAT_a64Blk 		0x00000
	/* @'00000 */	SIE_UINT32 					ie_a64Blk			 [80];
					#define	 arr_CRC32_RODAT_a64Blk 				  80

} SIE_CRC32_RODAT;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	CRC32_RODAT_drvrd (SIE_CRC32_RODAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	CRC32_RODAT_drvwr (SIE_CRC32_RODAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	CRC32_RODAT_reset (SIE_CRC32_RODAT *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	CRC32_RODAT_check(p,pie,ps8name,hfpErrLOG)		CRC32_RODAT_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	CRC32_RODAT_print(p,    ps8name,hfpErrLOG)		CRC32_RODAT_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	CRC32_RODAT_cmp   (SIE_CRC32_RODAT *p, SIE_CRC32_RODAT *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	CRC32_RODAT_import(SIE_CRC32_RODAT *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	CRC32_RODAT_export(SIE_CRC32_RODAT *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: CRC32_RODAT
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: AESWRAP_RODAT
*	@
*		$UINT32  dummy
**********************************************************************************************************************/
#ifdef	h_AESWRAP_RODAT
#else
#define	h_AESWRAP_RODAT

#define	\
	AR_AESWRAP_RODAT \
		1
#define	\
	AB_AESWRAP_RODAT \
		2

typedef struct SIE_AESWRAP_RODAT {

	#define	RA_AESWRAP_RODAT_dummy 		0x00000
	/* @'00000 */	SIE_UINT32 					ie_dummy;

} SIE_AESWRAP_RODAT;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	AESWRAP_RODAT_drvrd (SIE_AESWRAP_RODAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	AESWRAP_RODAT_drvwr (SIE_AESWRAP_RODAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	AESWRAP_RODAT_reset (SIE_AESWRAP_RODAT *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	AESWRAP_RODAT_check(p,pie,ps8name,hfpErrLOG)		AESWRAP_RODAT_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	AESWRAP_RODAT_print(p,    ps8name,hfpErrLOG)		AESWRAP_RODAT_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	AESWRAP_RODAT_cmp   (SIE_AESWRAP_RODAT *p, SIE_AESWRAP_RODAT *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	AESWRAP_RODAT_import(SIE_AESWRAP_RODAT *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	AESWRAP_RODAT_export(SIE_AESWRAP_RODAT *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: AESWRAP_RODAT
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: AESWRAP_CTX
*	@
*		$UINT128  R
*	@
*		$UINT128  A
*	@
*		$UINT128  B
**********************************************************************************************************************/
#ifdef	h_AESWRAP_CTX
#else
#define	h_AESWRAP_CTX

#define	\
	AR_AESWRAP_CTX \
		12
#define	\
	AB_AESWRAP_CTX \
		6

typedef struct SIE_AESWRAP_CTX {

	#define	RA_AESWRAP_CTX_R 			0x00000
	/* @'00000 */	SIE_UINT128 				ie_R;

	#define	RA_AESWRAP_CTX_A 			0x00010
	/* @'00010 */	SIE_UINT128 				ie_A;

	#define	RA_AESWRAP_CTX_B 			0x00020
	/* @'00020 */	SIE_UINT128 				ie_B;

} SIE_AESWRAP_CTX;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	AESWRAP_CTX_drvrd (SIE_AESWRAP_CTX *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	AESWRAP_CTX_drvwr (SIE_AESWRAP_CTX *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	AESWRAP_CTX_reset (SIE_AESWRAP_CTX *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	AESWRAP_CTX_check(p,pie,ps8name,hfpErrLOG)		AESWRAP_CTX_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	AESWRAP_CTX_print(p,    ps8name,hfpErrLOG)		AESWRAP_CTX_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	AESWRAP_CTX_cmp   (SIE_AESWRAP_CTX *p, SIE_AESWRAP_CTX *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	AESWRAP_CTX_import(SIE_AESWRAP_CTX *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	AESWRAP_CTX_export(SIE_AESWRAP_CTX *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: AESWRAP_CTX
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: HMAC_RODAT
*	@
*		$UINT32  dummy
**********************************************************************************************************************/
#ifdef	h_HMAC_RODAT
#else
#define	h_HMAC_RODAT

#define	\
	AR_HMAC_RODAT \
		1
#define	\
	AB_HMAC_RODAT \
		2

typedef struct SIE_HMAC_RODAT {

	#define	RA_HMAC_RODAT_dummy 		0x00000
	/* @'00000 */	SIE_UINT32 					ie_dummy;

} SIE_HMAC_RODAT;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	HMAC_RODAT_drvrd (SIE_HMAC_RODAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	HMAC_RODAT_drvwr (SIE_HMAC_RODAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	HMAC_RODAT_reset (SIE_HMAC_RODAT *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	HMAC_RODAT_check(p,pie,ps8name,hfpErrLOG)		HMAC_RODAT_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	HMAC_RODAT_print(p,    ps8name,hfpErrLOG)		HMAC_RODAT_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	HMAC_RODAT_cmp   (SIE_HMAC_RODAT *p, SIE_HMAC_RODAT *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	HMAC_RODAT_import(SIE_HMAC_RODAT *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	HMAC_RODAT_export(SIE_HMAC_RODAT *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: HMAC_RODAT
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: HMAC_CTXDAT
*	@
*		$UINT32  dummy
**********************************************************************************************************************/
#ifdef	h_HMAC_CTXDAT
#else
#define	h_HMAC_CTXDAT

#define	\
	AR_HMAC_CTXDAT \
		1
#define	\
	AB_HMAC_CTXDAT \
		2

typedef struct SIE_HMAC_CTXDAT {

	#define	RA_HMAC_CTXDAT_dummy 		0x00000
	/* @'00000 */	SIE_UINT32 					ie_dummy;

} SIE_HMAC_CTXDAT;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	HMAC_CTXDAT_drvrd (SIE_HMAC_CTXDAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	HMAC_CTXDAT_drvwr (SIE_HMAC_CTXDAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	HMAC_CTXDAT_reset (SIE_HMAC_CTXDAT *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	HMAC_CTXDAT_check(p,pie,ps8name,hfpErrLOG)		HMAC_CTXDAT_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	HMAC_CTXDAT_print(p,    ps8name,hfpErrLOG)		HMAC_CTXDAT_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	HMAC_CTXDAT_cmp   (SIE_HMAC_CTXDAT *p, SIE_HMAC_CTXDAT *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	HMAC_CTXDAT_import(SIE_HMAC_CTXDAT *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	HMAC_CTXDAT_export(SIE_HMAC_CTXDAT *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: HMAC_CTXDAT
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: CMAC_RODAT
*	@
*		$UINT32  dummy
**********************************************************************************************************************/
#ifdef	h_CMAC_RODAT
#else
#define	h_CMAC_RODAT

#define	\
	AR_CMAC_RODAT \
		1
#define	\
	AB_CMAC_RODAT \
		2

typedef struct SIE_CMAC_RODAT {

	#define	RA_CMAC_RODAT_dummy 		0x00000
	/* @'00000 */	SIE_UINT32 					ie_dummy;

} SIE_CMAC_RODAT;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	CMAC_RODAT_drvrd (SIE_CMAC_RODAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	CMAC_RODAT_drvwr (SIE_CMAC_RODAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	CMAC_RODAT_reset (SIE_CMAC_RODAT *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	CMAC_RODAT_check(p,pie,ps8name,hfpErrLOG)		CMAC_RODAT_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	CMAC_RODAT_print(p,    ps8name,hfpErrLOG)		CMAC_RODAT_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	CMAC_RODAT_cmp   (SIE_CMAC_RODAT *p, SIE_CMAC_RODAT *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	CMAC_RODAT_import(SIE_CMAC_RODAT *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	CMAC_RODAT_export(SIE_CMAC_RODAT *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: CMAC_RODAT
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: CMAC_CTXDAT
*	@
*		$UINT128  k1
*	@
*		$UINT128  k2
**********************************************************************************************************************/
#ifdef	h_CMAC_CTXDAT
#else
#define	h_CMAC_CTXDAT

#define	\
	AR_CMAC_CTXDAT \
		8
#define	\
	AB_CMAC_CTXDAT \
		5

typedef struct SIE_CMAC_CTXDAT {

	#define	RA_CMAC_CTXDAT_k1 			0x00000
	/* @'00000 */	SIE_UINT128 				ie_k1;

	#define	RA_CMAC_CTXDAT_k2 			0x00010
	/* @'00010 */	SIE_UINT128 				ie_k2;

} SIE_CMAC_CTXDAT;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	CMAC_CTXDAT_drvrd (SIE_CMAC_CTXDAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	CMAC_CTXDAT_drvwr (SIE_CMAC_CTXDAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	CMAC_CTXDAT_reset (SIE_CMAC_CTXDAT *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	CMAC_CTXDAT_check(p,pie,ps8name,hfpErrLOG)		CMAC_CTXDAT_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	CMAC_CTXDAT_print(p,    ps8name,hfpErrLOG)		CMAC_CTXDAT_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	CMAC_CTXDAT_cmp   (SIE_CMAC_CTXDAT *p, SIE_CMAC_CTXDAT *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	CMAC_CTXDAT_import(SIE_CMAC_CTXDAT *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	CMAC_CTXDAT_export(SIE_CMAC_CTXDAT *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: CMAC_CTXDAT
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: AES128_RODAT
*	@
*		$UINT32  Sbox  REG  [64]
*						*  *
*						*  S-Box for AES encryption
*	@
*		$UINT32  iSbox  REG  [64]
*						*  *
*						*  Inverse S-Box for AES decryption
*	@
*		$UINT128  Recon  REG  [5]
*	@
*		$UINT32  a64Blk  REG  [368]
**********************************************************************************************************************/
#ifdef	h_AES128_RODAT
#else
#define	h_AES128_RODAT

#define	\
	AR_AES128_RODAT \
		516
#define	\
	AB_AES128_RODAT \
		12

typedef struct SIE_AES128_RODAT {

	#define	RA_AES128_RODAT_Sbox 		0x00000
	/* @'00000 */	SIE_UINT32 					ie_Sbox				 [64];
					#define	 arr_AES128_RODAT_Sbox 					  64

	#define	RA_AES128_RODAT_iSbox 		0x00100
	/* @'00100 */	SIE_UINT32 					ie_iSbox			 [64];
					#define	 arr_AES128_RODAT_iSbox 				  64

	#define	RA_AES128_RODAT_Recon 		0x00200
	/* @'00200 */	SIE_UINT128 				ie_Recon			 [5];
					#define	 arr_AES128_RODAT_Recon 				  5

	#define	RA_AES128_RODAT_a64Blk 		0x00250
	/* @'00250 */	SIE_UINT32 					ie_a64Blk			 [368];
					#define	 arr_AES128_RODAT_a64Blk 				  368

} SIE_AES128_RODAT;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	AES128_RODAT_drvrd (SIE_AES128_RODAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	AES128_RODAT_drvwr (SIE_AES128_RODAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	AES128_RODAT_reset (SIE_AES128_RODAT *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	AES128_RODAT_check(p,pie,ps8name,hfpErrLOG)		AES128_RODAT_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	AES128_RODAT_print(p,    ps8name,hfpErrLOG)		AES128_RODAT_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	AES128_RODAT_cmp   (SIE_AES128_RODAT *p, SIE_AES128_RODAT *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	AES128_RODAT_import(SIE_AES128_RODAT *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	AES128_RODAT_export(SIE_AES128_RODAT *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: AES128_RODAT
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: AES128_CTXDAT
*	@
*		$UINT32  a64Blk  REG  [368]
*	@
*		$UINT128  Recon  REG  [5]
*	@  TB_OFF
*		%unsigned  16  pbSbox  REG
*		%unsigned  16  pbiSbox  REG
*		%unsigned  16  pbRecon  REG
**********************************************************************************************************************/
#ifdef	h_AES128_CTXDAT
#else
#define	h_AES128_CTXDAT

#define	\
	AR_AES128_CTXDAT \
		390
#define	\
	AB_AES128_CTXDAT \
		11

typedef struct SIE_AES128_CTXDAT {

	#define	RA_AES128_CTXDAT_a64Blk 	0x00000
	/* @'00000 */	SIE_UINT32 					ie_a64Blk			 [368];
					#define	 arr_AES128_CTXDAT_a64Blk 				  368

	#define	RA_AES128_CTXDAT_Recon 		0x005C0
	/* @'005C0 */	SIE_UINT128 				ie_Recon			 [5];
					#define	 arr_AES128_CTXDAT_Recon 				  5

	#define	RA_AES128_CTXDAT_TB_OFF 	0x00610
	#define	w32AES128_CTXDAT_TB_OFF 	{										\
					UNSG32				uTB_OFF_pbSbox				 : 16;		\
					UNSG32				uTB_OFF_pbiSbox				 : 16;		\
										}
	/* @'00610 */	union {	UNSG32		u32AES128_CTXDAT_TB_OFF;
								struct	w32AES128_CTXDAT_TB_OFF;
										};

	/* [15: 0] */	#define	  BA_AES128_CTXDAT_TB_OFF_pbSbox		 0x00610
	/* ---:--- */	#define	    bAES128_CTXDAT_TB_OFF_pbSbox		   16 /*bit*/
	/* ---:--- */	#define	LSb32AES128_CTXDAT_TB_OFF_pbSbox		    0 /*:15*/
	/* ---:--- */	#define	MSK32AES128_CTXDAT_TB_OFF_pbSbox		       0x0000FFFF
	/* ---:--- */	#define	GET32AES128_CTXDAT_TB_OFF_pbSbox(r32)		 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16AES128_CTXDAT_TB_OFF_pbSbox(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32AES128_CTXDAT_TB_OFF_pbSbox(r32,v)		do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16AES128_CTXDAT_TB_OFF_pbSbox(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_AES128_CTXDAT_TB_OFF_pbiSbox		 0x00612
	/* ---:--- */	#define	    bAES128_CTXDAT_TB_OFF_pbiSbox		   16 /*bit*/
	/* ---:--- */	#define	LSb32AES128_CTXDAT_TB_OFF_pbiSbox		   16 /*:31*/
	/* ---:--- */	#define	MSK32AES128_CTXDAT_TB_OFF_pbiSbox		       0xFFFF0000
	/* ---:--- */	#define	GET32AES128_CTXDAT_TB_OFF_pbiSbox(r32)		 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16AES128_CTXDAT_TB_OFF_pbiSbox(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32AES128_CTXDAT_TB_OFF_pbiSbox(r32,v)	do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16AES128_CTXDAT_TB_OFF_pbiSbox(r16,v)	do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_AES128_CTXDAT_TB_OFF1 	0x00614
	#define	w32AES128_CTXDAT_TB_OFF1 	{										\
					UNSG32				uTB_OFF_pbRecon				 : 16;		\
					UNSG32				_x00614	: 16;							\
										}
	/* @'00614 */	union {	UNSG32		u32AES128_CTXDAT_TB_OFF1;
								struct	w32AES128_CTXDAT_TB_OFF1;
										};

	/* [15: 0] */	#define	  BA_AES128_CTXDAT_TB_OFF_pbRecon		 0x00614
	/* ---:--- */	#define	    bAES128_CTXDAT_TB_OFF_pbRecon		   16 /*bit*/
	/* ---:--- */	#define	LSb32AES128_CTXDAT_TB_OFF_pbRecon		    0 /*:15*/
	/* ---:--- */	#define	MSK32AES128_CTXDAT_TB_OFF_pbRecon		       0x0000FFFF
	/* ---:--- */	#define	GET32AES128_CTXDAT_TB_OFF_pbRecon(r32)		 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16AES128_CTXDAT_TB_OFF_pbRecon(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32AES128_CTXDAT_TB_OFF_pbRecon(r32,v)	do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16AES128_CTXDAT_TB_OFF_pbRecon(r16,v)	do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

} SIE_AES128_CTXDAT;

	#define	dftAES128_CTXDAT_TB_OFF 	0xCCCCCCCC
			typedef	union {	UNSG32		u32;
								struct	w32AES128_CTXDAT_TB_OFF;
										} T32AES128_CTXDAT_TB_OFF;
	#define	dftAES128_CTXDAT_TB_OFF1 	0x0000CCCC
			typedef	union {	UNSG32		u32;
								struct	w32AES128_CTXDAT_TB_OFF1;
										} T32AES128_CTXDAT_TB_OFF1;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	AES128_CTXDAT_drvrd (SIE_AES128_CTXDAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	AES128_CTXDAT_drvwr (SIE_AES128_CTXDAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	AES128_CTXDAT_reset (SIE_AES128_CTXDAT *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	AES128_CTXDAT_check(p,pie,ps8name,hfpErrLOG)		AES128_CTXDAT_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	AES128_CTXDAT_print(p,    ps8name,hfpErrLOG)		AES128_CTXDAT_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	AES128_CTXDAT_cmp   (SIE_AES128_CTXDAT *p, SIE_AES128_CTXDAT *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	AES128_CTXDAT_import(SIE_AES128_CTXDAT *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	AES128_CTXDAT_export(SIE_AES128_CTXDAT *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: AES128_CTXDAT
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: HAMMING_INVALID_ENTRY
*	@
*			:  VAL  0xff
*						*  *
*						*  Invalid hamming table entry
*	@
*		%unsigned  32  dummy
**********************************************************************************************************************/
#ifdef	h_HAMMING_INVALID_ENTRY
#else
#define	h_HAMMING_INVALID_ENTRY

#define	\
	AR_HAMMING_INVALID_ENTRY \
		1
#define	\
	AB_HAMMING_INVALID_ENTRY \
		2

	#define	HAMMING_INVALID_ENTRY_VAL 	0xFF

typedef struct SIE_HAMMING_INVALID_ENTRY {

	#define	RA_HAMMING_INVALID_ENTRY_D0th_ ISC_USE_ONLY	0x00000
	#define	w32HAMMING_INVALID_ENTRY_D0th_ {									\
					UNSG32				u_dummy						 : 32;		\
										}
	/* @'00000 */				struct	w32HAMMING_INVALID_ENTRY_D0th_;

	/* [31: 0] */	#define	  BA_HAMMING_INVALID_ENTRY_dummy		 0x00000
	/* ---:--- */	#define	    bHAMMING_INVALID_ENTRY_dummy		   32 /*bit*/
	/* ---:--- */	#define	LSb32HAMMING_INVALID_ENTRY_dummy		    0 /*:31*/
	/* ---:--- */	#define	MSK32HAMMING_INVALID_ENTRY_dummy		       0xFFFFFFFF
	/* ---:--- */	#define	GET32HAMMING_INVALID_ENTRY_dummy(r32)		 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16HAMMING_INVALID_ENTRY_dummy(r16)		 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32HAMMING_INVALID_ENTRY_dummy(r32,v)		do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16HAMMING_INVALID_ENTRY_dummy(r16,v)		do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

} SIE_HAMMING_INVALID_ENTRY;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	HAMMING_INVALID_ENTRY_drvrd (SIE_HAMMING_INVALID_ENTRY *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	HAMMING_INVALID_ENTRY_drvwr (SIE_HAMMING_INVALID_ENTRY *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	HAMMING_INVALID_ENTRY_reset (SIE_HAMMING_INVALID_ENTRY *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	HAMMING_INVALID_ENTRY_check(p,pie,ps8name,hfpErrLOG)		HAMMING_INVALID_ENTRY_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	HAMMING_INVALID_ENTRY_print(p,    ps8name,hfpErrLOG)		HAMMING_INVALID_ENTRY_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	HAMMING_INVALID_ENTRY_cmp   (SIE_HAMMING_INVALID_ENTRY *p, SIE_HAMMING_INVALID_ENTRY *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	HAMMING_INVALID_ENTRY_import(SIE_HAMMING_INVALID_ENTRY *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	HAMMING_INVALID_ENTRY_export(SIE_HAMMING_INVALID_ENTRY *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: HAMMING_INVALID_ENTRY
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: OFFTB_ENTRY
*	@
*		%unsigned  8  dat2ham
*						*  *
*						*  Offset mapping from data offset to hamming bit offset
*		%unsigned  8  ham2dat
*						*  *
*						*  Offset mapping from hamming bit offset to data bit offset
**********************************************************************************************************************/
#ifdef	h_OFFTB_ENTRY
#else
#define	h_OFFTB_ENTRY

#define	\
	AR_OFFTB_ENTRY \
		1
#define	\
	AB_OFFTB_ENTRY \
		2

typedef struct SIE_OFFTB_ENTRY {

	#define	RA_OFFTB_ENTRY_D0th_ 		ISC_USE_ONLY	0x00000
	#define	w32OFFTB_ENTRY_D0th_ 		{										\
					UNSG32				u_dat2ham					 :  8;		\
					UNSG32				u_ham2dat					 :  8;		\
					UNSG32				_x00000	: 16;							\
										}
	/* @'00000 */				struct	w32OFFTB_ENTRY_D0th_;

	/* [ 7: 0] */	#define	  BA_OFFTB_ENTRY_dat2ham				 0x00000
	/* ---:--- */	#define	    bOFFTB_ENTRY_dat2ham				    8 /*bit*/
	/* ---:--- */	#define	LSb32OFFTB_ENTRY_dat2ham				    0 /*: 7*/
	/* ---:--- */	#define	MSK32OFFTB_ENTRY_dat2ham				       0x000000FF
	/* ---:--- */	#define	GET32OFFTB_ENTRY_dat2ham(r32)				 (((r32)>> 0)&0x00FF)
	/* ---:--- */	#define	GET16OFFTB_ENTRY_dat2ham(r16)				 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32OFFTB_ENTRY_dat2ham(r32,v)				do{(r32)&=~(0x00FF<< 0);(r32)|=((v)&0x00FF)<< 0;}while(0)
	/* ---:--- */	#define	SET16OFFTB_ENTRY_dat2ham(r16,v)				do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	/* [15: 8] */	#define	  BA_OFFTB_ENTRY_ham2dat				 0x00001
	/* ---:--- */	#define	    bOFFTB_ENTRY_ham2dat				    8 /*bit*/
	/* ---:--- */	#define	LSb32OFFTB_ENTRY_ham2dat				    8 /*:15*/
	/* ---:--- */	#define	MSK32OFFTB_ENTRY_ham2dat				       0x0000FF00
	/* ---:--- */	#define	GET32OFFTB_ENTRY_ham2dat(r32)				 (((r32)>> 8)&0x00FF)
	/* ---:--- */	#define	GET16OFFTB_ENTRY_ham2dat(r16)				 (((r16)>> 8)&0x00FF)
	/* ---:--- */	#define	SET32OFFTB_ENTRY_ham2dat(r32,v)				do{(r32)&=~(0x00FF<< 8);(r32)|=((v)&0x00FF)<< 8;}while(0)
	/* ---:--- */	#define	SET16OFFTB_ENTRY_ham2dat(r16,v)				do{(r16)&=~(0x00FF<< 8);(r16)|=((v)&0x00FF)<< 8;}while(0)

} SIE_OFFTB_ENTRY;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	OFFTB_ENTRY_drvrd (SIE_OFFTB_ENTRY *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	OFFTB_ENTRY_drvwr (SIE_OFFTB_ENTRY *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	OFFTB_ENTRY_reset (SIE_OFFTB_ENTRY *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	OFFTB_ENTRY_check(p,pie,ps8name,hfpErrLOG)		OFFTB_ENTRY_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	OFFTB_ENTRY_print(p,    ps8name,hfpErrLOG)		OFFTB_ENTRY_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	OFFTB_ENTRY_cmp   (SIE_OFFTB_ENTRY *p, SIE_OFFTB_ENTRY *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	OFFTB_ENTRY_import(SIE_OFFTB_ENTRY *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	OFFTB_ENTRY_export(SIE_OFFTB_ENTRY *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: OFFTB_ENTRY
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: HAMMING_RODAT
*	@  OFFSET_TB64
*		$UINT32  offsetTb64  REG  [64]
*						*  *
*						*  Offset mapping table
*	@  MASK_TB64
*		$UINT32  maskTb64  REG  [16]
*						*  *
*						*  mask table
*	@  MOD2SUM_TB64
*		$UINT32  mod2SumTb64  REG  [128]
*						*  *
*						*  Modula 2 sum table
**********************************************************************************************************************/
#ifdef	h_HAMMING_RODAT
#else
#define	h_HAMMING_RODAT

#define	\
	AR_HAMMING_RODAT \
		208
#define	\
	AB_HAMMING_RODAT \
		10

typedef struct SIE_HAMMING_RODAT {

	#define	RA_HAMMING_RODAT_OFFSET_TB64 0x00000
	/* @'00000 */	SIE_UINT32 					ie_offsetTb64		 [64];
					#define	 arr_HAMMING_RODAT_offsetTb64 			  64

	#define	RA_HAMMING_RODAT_MASK_TB64 	0x00100
	/* @'00100 */	SIE_UINT32 					ie_maskTb64			 [16];
					#define	 arr_HAMMING_RODAT_maskTb64 			  16

	#define	RA_HAMMING_RODAT_MOD2SUM_TB64 0x00140
	/* @'00140 */	SIE_UINT32 					ie_mod2SumTb64		 [128];
					#define	 arr_HAMMING_RODAT_mod2SumTb64 			  128

} SIE_HAMMING_RODAT;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	HAMMING_RODAT_drvrd (SIE_HAMMING_RODAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	HAMMING_RODAT_drvwr (SIE_HAMMING_RODAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	HAMMING_RODAT_reset (SIE_HAMMING_RODAT *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	HAMMING_RODAT_check(p,pie,ps8name,hfpErrLOG)		HAMMING_RODAT_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	HAMMING_RODAT_print(p,    ps8name,hfpErrLOG)		HAMMING_RODAT_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	HAMMING_RODAT_cmp   (SIE_HAMMING_RODAT *p, SIE_HAMMING_RODAT *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	HAMMING_RODAT_import(SIE_HAMMING_RODAT *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	HAMMING_RODAT_export(SIE_HAMMING_RODAT *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: HAMMING_RODAT
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DES3_RODAT
*	@
*		$UINT32  dummy
**********************************************************************************************************************/
#ifdef	h_DES3_RODAT
#else
#define	h_DES3_RODAT

#define	\
	AR_DES3_RODAT \
		1
#define	\
	AB_DES3_RODAT \
		2

typedef struct SIE_DES3_RODAT {

	#define	RA_DES3_RODAT_dummy 		0x00000
	/* @'00000 */	SIE_UINT32 					ie_dummy;

} SIE_DES3_RODAT;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DES3_RODAT_drvrd (SIE_DES3_RODAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DES3_RODAT_drvwr (SIE_DES3_RODAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DES3_RODAT_reset (SIE_DES3_RODAT *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DES3_RODAT_check(p,pie,ps8name,hfpErrLOG)		DES3_RODAT_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DES3_RODAT_print(p,    ps8name,hfpErrLOG)		DES3_RODAT_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DES3_RODAT_cmp   (SIE_DES3_RODAT *p, SIE_DES3_RODAT *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DES3_RODAT_import(SIE_DES3_RODAT *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DES3_RODAT_export(SIE_DES3_RODAT *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DES3_RODAT
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DES3_CTXDAT
*	@
*		$UINT32  a64Blk  REG  [190]
**********************************************************************************************************************/
#ifdef	h_DES3_CTXDAT
#else
#define	h_DES3_CTXDAT

#define	\
	AR_DES3_CTXDAT \
		190
#define	\
	AB_DES3_CTXDAT \
		10

typedef struct SIE_DES3_CTXDAT {

	#define	RA_DES3_CTXDAT_a64Blk 		0x00000
	/* @'00000 */	SIE_UINT32 					ie_a64Blk			 [190];
					#define	 arr_DES3_CTXDAT_a64Blk 				  190

} SIE_DES3_CTXDAT;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DES3_CTXDAT_drvrd (SIE_DES3_CTXDAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DES3_CTXDAT_drvwr (SIE_DES3_CTXDAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DES3_CTXDAT_reset (SIE_DES3_CTXDAT *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DES3_CTXDAT_check(p,pie,ps8name,hfpErrLOG)		DES3_CTXDAT_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DES3_CTXDAT_print(p,    ps8name,hfpErrLOG)		DES3_CTXDAT_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DES3_CTXDAT_cmp   (SIE_DES3_CTXDAT *p, SIE_DES3_CTXDAT *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DES3_CTXDAT_import(SIE_DES3_CTXDAT *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DES3_CTXDAT_export(SIE_DES3_CTXDAT *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DES3_CTXDAT
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DES_CTXDAT
*	@
*		$UINT32  a64Blk  REG  [190]
*	@
*		$UINT64  puTd0  REG  [64]
*	@
*		$UINT64  puTd1  REG  [64]
*	@
*		$UINT64  puTd2  REG  [64]
*	@
*		$UINT64  puTd3  REG  [64]
*	@
*		$UINT64  puEncKey  REG  [16]
**********************************************************************************************************************/
#ifdef	h_DES_CTXDAT
#else
#define	h_DES_CTXDAT

#define	\
	AR_DES_CTXDAT \
		734
#define	\
	AB_DES_CTXDAT \
		12

typedef struct SIE_DES_CTXDAT {

	#define	RA_DES_CTXDAT_a64Blk 		0x00000
	/* @'00000 */	SIE_UINT32 					ie_a64Blk			 [190];
					#define	 arr_DES_CTXDAT_a64Blk 					  190

	#define	RA_DES_CTXDAT_puTd0 		0x002F8
	/* @'002F8 */	SIE_UINT64 					ie_puTd0			 [64];
					#define	 arr_DES_CTXDAT_puTd0 					  64

	#define	RA_DES_CTXDAT_puTd1 		0x004F8
	/* @'004F8 */	SIE_UINT64 					ie_puTd1			 [64];
					#define	 arr_DES_CTXDAT_puTd1 					  64

	#define	RA_DES_CTXDAT_puTd2 		0x006F8
	/* @'006F8 */	SIE_UINT64 					ie_puTd2			 [64];
					#define	 arr_DES_CTXDAT_puTd2 					  64

	#define	RA_DES_CTXDAT_puTd3 		0x008F8
	/* @'008F8 */	SIE_UINT64 					ie_puTd3			 [64];
					#define	 arr_DES_CTXDAT_puTd3 					  64

	#define	RA_DES_CTXDAT_puEncKey 		0x00AF8
	/* @'00AF8 */	SIE_UINT64 					ie_puEncKey			 [16];
					#define	 arr_DES_CTXDAT_puEncKey 				  16

} SIE_DES_CTXDAT;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DES_CTXDAT_drvrd (SIE_DES_CTXDAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DES_CTXDAT_drvwr (SIE_DES_CTXDAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DES_CTXDAT_reset (SIE_DES_CTXDAT *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DES_CTXDAT_check(p,pie,ps8name,hfpErrLOG)		DES_CTXDAT_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DES_CTXDAT_print(p,    ps8name,hfpErrLOG)		DES_CTXDAT_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DES_CTXDAT_cmp   (SIE_DES_CTXDAT *p, SIE_DES_CTXDAT *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DES_CTXDAT_import(SIE_DES_CTXDAT *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DES_CTXDAT_export(SIE_DES_CTXDAT *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DES_CTXDAT
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: MULT2_RODAT
*	@
*		$UINT32  dummy
**********************************************************************************************************************/
#ifdef	h_MULT2_RODAT
#else
#define	h_MULT2_RODAT

#define	\
	AR_MULT2_RODAT \
		1
#define	\
	AB_MULT2_RODAT \
		2

typedef struct SIE_MULT2_RODAT {

	#define	RA_MULT2_RODAT_dummy 		0x00000
	/* @'00000 */	SIE_UINT32 					ie_dummy;

} SIE_MULT2_RODAT;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	MULT2_RODAT_drvrd (SIE_MULT2_RODAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	MULT2_RODAT_drvwr (SIE_MULT2_RODAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	MULT2_RODAT_reset (SIE_MULT2_RODAT *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	MULT2_RODAT_check(p,pie,ps8name,hfpErrLOG)		MULT2_RODAT_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	MULT2_RODAT_print(p,    ps8name,hfpErrLOG)		MULT2_RODAT_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	MULT2_RODAT_cmp   (SIE_MULT2_RODAT *p, SIE_MULT2_RODAT *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	MULT2_RODAT_import(SIE_MULT2_RODAT *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	MULT2_RODAT_export(SIE_MULT2_RODAT *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: MULT2_RODAT
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: MULT2_CTXDAT
*	@
*		$UINT32  a64Blk  REG  [640]
*						*  *
*						*  The array size is determined by the round number. For round number 128, 640 is ok.
**********************************************************************************************************************/
#ifdef	h_MULT2_CTXDAT
#else
#define	h_MULT2_CTXDAT

#define	\
	AR_MULT2_CTXDAT \
		640
#define	\
	AB_MULT2_CTXDAT \
		12

typedef struct SIE_MULT2_CTXDAT {

	#define	RA_MULT2_CTXDAT_a64Blk 		0x00000
	/* @'00000 */	SIE_UINT32 					ie_a64Blk			 [640];
					#define	 arr_MULT2_CTXDAT_a64Blk 				  640

} SIE_MULT2_CTXDAT;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	MULT2_CTXDAT_drvrd (SIE_MULT2_CTXDAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	MULT2_CTXDAT_drvwr (SIE_MULT2_CTXDAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	MULT2_CTXDAT_reset (SIE_MULT2_CTXDAT *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	MULT2_CTXDAT_check(p,pie,ps8name,hfpErrLOG)		MULT2_CTXDAT_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	MULT2_CTXDAT_print(p,    ps8name,hfpErrLOG)		MULT2_CTXDAT_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	MULT2_CTXDAT_cmp   (SIE_MULT2_CTXDAT *p, SIE_MULT2_CTXDAT *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	MULT2_CTXDAT_import(SIE_MULT2_CTXDAT *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	MULT2_CTXDAT_export(SIE_MULT2_CTXDAT *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: MULT2_CTXDAT
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: C2_RODAT
*	@
*		$UINT32  dummy
**********************************************************************************************************************/
#ifdef	h_C2_RODAT
#else
#define	h_C2_RODAT

#define	\
	AR_C2_RODAT \
		1
#define	\
	AB_C2_RODAT \
		2

typedef struct SIE_C2_RODAT {

	#define	RA_C2_RODAT_dummy 			0x00000
	/* @'00000 */	SIE_UINT32 					ie_dummy;

} SIE_C2_RODAT;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	C2_RODAT_drvrd (SIE_C2_RODAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	C2_RODAT_drvwr (SIE_C2_RODAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	C2_RODAT_reset (SIE_C2_RODAT *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	C2_RODAT_check(p,pie,ps8name,hfpErrLOG)		C2_RODAT_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	C2_RODAT_print(p,    ps8name,hfpErrLOG)		C2_RODAT_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	C2_RODAT_cmp   (SIE_C2_RODAT *p, SIE_C2_RODAT *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	C2_RODAT_import(SIE_C2_RODAT *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	C2_RODAT_export(SIE_C2_RODAT *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: C2_RODAT
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: C2_CTXDAT
*	@
*		$UINT32  a64Blk  REG  [360]
**********************************************************************************************************************/
#ifdef	h_C2_CTXDAT
#else
#define	h_C2_CTXDAT

#define	\
	AR_C2_CTXDAT \
		360
#define	\
	AB_C2_CTXDAT \
		11

typedef struct SIE_C2_CTXDAT {

	#define	RA_C2_CTXDAT_a64Blk 		0x00000
	/* @'00000 */	SIE_UINT32 					ie_a64Blk			 [360];
					#define	 arr_C2_CTXDAT_a64Blk 					  360

} SIE_C2_CTXDAT;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	C2_CTXDAT_drvrd (SIE_C2_CTXDAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	C2_CTXDAT_drvwr (SIE_C2_CTXDAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	C2_CTXDAT_reset (SIE_C2_CTXDAT *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	C2_CTXDAT_check(p,pie,ps8name,hfpErrLOG)		C2_CTXDAT_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	C2_CTXDAT_print(p,    ps8name,hfpErrLOG)		C2_CTXDAT_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	C2_CTXDAT_cmp   (SIE_C2_CTXDAT *p, SIE_C2_CTXDAT *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	C2_CTXDAT_import(SIE_C2_CTXDAT *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	C2_CTXDAT_export(SIE_C2_CTXDAT *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: C2_CTXDAT
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: PSS_CTXDAT
*	@
*		$UINT64  puSalt  REG  [3]
*						*  *
*						*  Salt Data
*	@
*		$UINT64  puEM  REG  [16]
*						*  *
*						*  RSA PSS encoded Message data
*	@
*		$UINT64  pudbMask  REG  [16]
*						*  *
*						*  Mask data generated by MGF
*	@
*		$UINT64  pumaskDB  REG  [16]
*						*  *
*	@
*		$UINT64  puHash  REG  [3]
*						*  *
*						*  Hash value of the message
*	@
*		$UINT64  puRcvHash  REG  [3]
*						*  *
*						*  Recovered hash value of the message during the verification process
*	@
*		$UINT32  puPssRet
*						*  *
*						*  RSA PSS signature and verification return value
*						*  *
*						*  RSA_PSS_OK
*						*  0xa
*						*  *
*						*  Process is ok
*						*  *
*						*  RSA_PSS_FAILED
*						*  0xb
*	@
*		$UINT32  reseverd
**********************************************************************************************************************/
#ifdef	h_PSS_CTXDAT
#else
#define	h_PSS_CTXDAT

#define	\
	AR_PSS_CTXDAT \
		116
#define	\
	AB_PSS_CTXDAT \
		9

typedef struct SIE_PSS_CTXDAT {

	#define	RA_PSS_CTXDAT_puSalt 		0x00000
	/* @'00000 */	SIE_UINT64 					ie_puSalt			 [3];
					#define	 arr_PSS_CTXDAT_puSalt 					  3

	#define	RA_PSS_CTXDAT_puEM 			0x00018
	/* @'00018 */	SIE_UINT64 					ie_puEM				 [16];
					#define	 arr_PSS_CTXDAT_puEM 					  16

	#define	RA_PSS_CTXDAT_pudbMask 		0x00098
	/* @'00098 */	SIE_UINT64 					ie_pudbMask			 [16];
					#define	 arr_PSS_CTXDAT_pudbMask 				  16

	#define	RA_PSS_CTXDAT_pumaskDB 		0x00118
	/* @'00118 */	SIE_UINT64 					ie_pumaskDB			 [16];
					#define	 arr_PSS_CTXDAT_pumaskDB 				  16

	#define	RA_PSS_CTXDAT_puHash 		0x00198
	/* @'00198 */	SIE_UINT64 					ie_puHash			 [3];
					#define	 arr_PSS_CTXDAT_puHash 					  3

	#define	RA_PSS_CTXDAT_puRcvHash 	0x001B0
	/* @'001B0 */	SIE_UINT64 					ie_puRcvHash		 [3];
					#define	 arr_PSS_CTXDAT_puRcvHash 				  3

	#define	RA_PSS_CTXDAT_puPssRet 		0x001C8
	/* @'001C8 */	SIE_UINT32 					ie_puPssRet;

	#define	RA_PSS_CTXDAT_reseverd 		0x001CC
	/* @'001CC */	SIE_UINT32 					ie_reseverd;

} SIE_PSS_CTXDAT;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	PSS_CTXDAT_drvrd (SIE_PSS_CTXDAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	PSS_CTXDAT_drvwr (SIE_PSS_CTXDAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	PSS_CTXDAT_reset (SIE_PSS_CTXDAT *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	PSS_CTXDAT_check(p,pie,ps8name,hfpErrLOG)		PSS_CTXDAT_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	PSS_CTXDAT_print(p,    ps8name,hfpErrLOG)		PSS_CTXDAT_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	PSS_CTXDAT_cmp   (SIE_PSS_CTXDAT *p, SIE_PSS_CTXDAT *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	PSS_CTXDAT_import(SIE_PSS_CTXDAT *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	PSS_CTXDAT_export(SIE_PSS_CTXDAT *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: PSS_CTXDAT
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: RSA_RODAT
*	@
*		$UINT32  a64Blk  REG  [80]
**********************************************************************************************************************/
#ifdef	h_RSA_RODAT
#else
#define	h_RSA_RODAT

#define	\
	AR_RSA_RODAT \
		80
#define	\
	AB_RSA_RODAT \
		9

typedef struct SIE_RSA_RODAT {

	#define	RA_RSA_RODAT_a64Blk 		0x00000
	/* @'00000 */	SIE_UINT32 					ie_a64Blk			 [80];
					#define	 arr_RSA_RODAT_a64Blk 					  80

} SIE_RSA_RODAT;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	RSA_RODAT_drvrd (SIE_RSA_RODAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	RSA_RODAT_drvwr (SIE_RSA_RODAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	RSA_RODAT_reset (SIE_RSA_RODAT *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	RSA_RODAT_check(p,pie,ps8name,hfpErrLOG)		RSA_RODAT_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	RSA_RODAT_print(p,    ps8name,hfpErrLOG)		RSA_RODAT_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	RSA_RODAT_cmp   (SIE_RSA_RODAT *p, SIE_RSA_RODAT *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	RSA_RODAT_import(SIE_RSA_RODAT *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	RSA_RODAT_export(SIE_RSA_RODAT *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: RSA_RODAT
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: RSA_CTXDAT
*	@
*		$UINT64  pbRsaMod  REG  [16]
*	@
*		$UINT64  pbPwr0  REG  [16]
*						*  *
*	@
*		$UINT64  pbPwr1  REG  [16]
*						*  *
*	@
*		$UINT64  pbPwr2  REG  [16]
*						*  *
*	@
*		$UINT64  pbBufT  REG  [16]
*						*  *
*						*  Temporary buffer store the Expmod result during the MulMod operation
*	@
*		$UINT64  pbBufAdd  REG  [32]
*						*  *
*						*  Addition buffer for the computation of 1024 bits multiply
*	@
*		$UINT32  pbBufDiv  REG  [65]
*						*  *
*						*  Divide or Multiply buffer store the result of multiply of two 1024 bits big numbers
*	@
*		$UINT32  puShift
*						*  *
**********************************************************************************************************************/
#ifdef	h_RSA_CTXDAT
#else
#define	h_RSA_CTXDAT

#define	\
	AR_RSA_CTXDAT \
		290
#define	\
	AB_RSA_CTXDAT \
		11

typedef struct SIE_RSA_CTXDAT {

	#define	RA_RSA_CTXDAT_pbRsaMod 		0x00000
	/* @'00000 */	SIE_UINT64 					ie_pbRsaMod			 [16];
					#define	 arr_RSA_CTXDAT_pbRsaMod 				  16

	#define	RA_RSA_CTXDAT_pbPwr0 		0x00080
	/* @'00080 */	SIE_UINT64 					ie_pbPwr0			 [16];
					#define	 arr_RSA_CTXDAT_pbPwr0 					  16

	#define	RA_RSA_CTXDAT_pbPwr1 		0x00100
	/* @'00100 */	SIE_UINT64 					ie_pbPwr1			 [16];
					#define	 arr_RSA_CTXDAT_pbPwr1 					  16

	#define	RA_RSA_CTXDAT_pbPwr2 		0x00180
	/* @'00180 */	SIE_UINT64 					ie_pbPwr2			 [16];
					#define	 arr_RSA_CTXDAT_pbPwr2 					  16

	#define	RA_RSA_CTXDAT_pbBufT 		0x00200
	/* @'00200 */	SIE_UINT64 					ie_pbBufT			 [16];
					#define	 arr_RSA_CTXDAT_pbBufT 					  16

	#define	RA_RSA_CTXDAT_pbBufAdd 		0x00280
	/* @'00280 */	SIE_UINT64 					ie_pbBufAdd			 [32];
					#define	 arr_RSA_CTXDAT_pbBufAdd 				  32

	#define	RA_RSA_CTXDAT_pbBufDiv 		0x00380
	/* @'00380 */	SIE_UINT32 					ie_pbBufDiv			 [65];
					#define	 arr_RSA_CTXDAT_pbBufDiv 				  65

	#define	RA_RSA_CTXDAT_puShift 		0x00484
	/* @'00484 */	SIE_UINT32 					ie_puShift;

} SIE_RSA_CTXDAT;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	RSA_CTXDAT_drvrd (SIE_RSA_CTXDAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	RSA_CTXDAT_drvwr (SIE_RSA_CTXDAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	RSA_CTXDAT_reset (SIE_RSA_CTXDAT *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	RSA_CTXDAT_check(p,pie,ps8name,hfpErrLOG)		RSA_CTXDAT_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	RSA_CTXDAT_print(p,    ps8name,hfpErrLOG)		RSA_CTXDAT_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	RSA_CTXDAT_cmp   (SIE_RSA_CTXDAT *p, SIE_RSA_CTXDAT *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	RSA_CTXDAT_import(SIE_RSA_CTXDAT *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	RSA_CTXDAT_export(SIE_RSA_CTXDAT *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: RSA_CTXDAT
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: CBCMAC_CTXDAT
*	@
*		$UINT64  sum
*	@
*		$UINT64  t
*	@
*		$UINT32  buf  REG  [2]
*	@
*		$UINT32  bufLen
*	@
*		$UINT32  reserved
*	@
*		$UINT64  pbFullMac
*	@
*		$UINT64  pbPartMac
*	@
*		$UINT64  pbCBCKey  REG  [6]
*	@
*		$UINT64  pbiCBCKey  REG  [6]
*	@
*		$UINT64  a64Blk  REG  [70]
**********************************************************************************************************************/
#ifdef	h_CBCMAC_CTXDAT
#else
#define	h_CBCMAC_CTXDAT

#define	\
	AR_CBCMAC_CTXDAT \
		176
#define	\
	AB_CBCMAC_CTXDAT \
		10

typedef struct SIE_CBCMAC_CTXDAT {

	#define	RA_CBCMAC_CTXDAT_sum 		0x00000
	/* @'00000 */	SIE_UINT64 					ie_sum;

	#define	RA_CBCMAC_CTXDAT_t 			0x00008
	/* @'00008 */	SIE_UINT64 					ie_t;

	#define	RA_CBCMAC_CTXDAT_buf 		0x00010
	/* @'00010 */	SIE_UINT32 					ie_buf				 [2];
					#define	 arr_CBCMAC_CTXDAT_buf 					  2

	#define	RA_CBCMAC_CTXDAT_bufLen 	0x00018
	/* @'00018 */	SIE_UINT32 					ie_bufLen;

	#define	RA_CBCMAC_CTXDAT_reserved 	0x0001C
	/* @'0001C */	SIE_UINT32 					ie_reserved;

	#define	RA_CBCMAC_CTXDAT_pbFullMac 	0x00020
	/* @'00020 */	SIE_UINT64 					ie_pbFullMac;

	#define	RA_CBCMAC_CTXDAT_pbPartMac 	0x00028
	/* @'00028 */	SIE_UINT64 					ie_pbPartMac;

	#define	RA_CBCMAC_CTXDAT_pbCBCKey 	0x00030
	/* @'00030 */	SIE_UINT64 					ie_pbCBCKey			 [6];
					#define	 arr_CBCMAC_CTXDAT_pbCBCKey 			  6

	#define	RA_CBCMAC_CTXDAT_pbiCBCKey 	0x00060
	/* @'00060 */	SIE_UINT64 					ie_pbiCBCKey		 [6];
					#define	 arr_CBCMAC_CTXDAT_pbiCBCKey 			  6

	#define	RA_CBCMAC_CTXDAT_a64Blk 	0x00090
	/* @'00090 */	SIE_UINT64 					ie_a64Blk			 [70];
					#define	 arr_CBCMAC_CTXDAT_a64Blk 				  70

} SIE_CBCMAC_CTXDAT;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	CBCMAC_CTXDAT_drvrd (SIE_CBCMAC_CTXDAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	CBCMAC_CTXDAT_drvwr (SIE_CBCMAC_CTXDAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	CBCMAC_CTXDAT_reset (SIE_CBCMAC_CTXDAT *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	CBCMAC_CTXDAT_check(p,pie,ps8name,hfpErrLOG)		CBCMAC_CTXDAT_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	CBCMAC_CTXDAT_print(p,    ps8name,hfpErrLOG)		CBCMAC_CTXDAT_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	CBCMAC_CTXDAT_cmp   (SIE_CBCMAC_CTXDAT *p, SIE_CBCMAC_CTXDAT *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	CBCMAC_CTXDAT_import(SIE_CBCMAC_CTXDAT *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	CBCMAC_CTXDAT_export(SIE_CBCMAC_CTXDAT *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: CBCMAC_CTXDAT
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: RC4_CTXDAT
*	@
*		$UINT64  puState  REG  [64]
*	@
*		%unsigned  16  x
*		%unsigned  16  y
*	@
*		$UINT32  reserved
**********************************************************************************************************************/
#ifdef	h_RC4_CTXDAT
#else
#define	h_RC4_CTXDAT

#define	\
	AR_RC4_CTXDAT \
		130
#define	\
	AB_RC4_CTXDAT \
		10

typedef struct SIE_RC4_CTXDAT {

	#define	RA_RC4_CTXDAT_puState 		0x00000
	/* @'00000 */	SIE_UINT64 					ie_puState			 [64];
					#define	 arr_RC4_CTXDAT_puState 				  64

	#define	RA_RC4_CTXDAT_D128th_ 		ISC_USE_ONLY	0x00200
	#define	w32RC4_CTXDAT_D128th_ 		{										\
					UNSG32				u_x							 : 16;		\
					UNSG32				u_y							 : 16;		\
										}
	/* @'00200 */				struct	w32RC4_CTXDAT_D128th_;

	/* [15: 0] */	#define	  BA_RC4_CTXDAT_x						 0x00200
	/* ---:--- */	#define	    bRC4_CTXDAT_x						   16 /*bit*/
	/* ---:--- */	#define	LSb32RC4_CTXDAT_x						    0 /*:15*/
	/* ---:--- */	#define	MSK32RC4_CTXDAT_x						       0x0000FFFF
	/* ---:--- */	#define	GET32RC4_CTXDAT_x(r32)						 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16RC4_CTXDAT_x(r16)						 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32RC4_CTXDAT_x(r32,v)					do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16RC4_CTXDAT_x(r16,v)					do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_RC4_CTXDAT_y						 0x00202
	/* ---:--- */	#define	    bRC4_CTXDAT_y						   16 /*bit*/
	/* ---:--- */	#define	LSb32RC4_CTXDAT_y						   16 /*:31*/
	/* ---:--- */	#define	MSK32RC4_CTXDAT_y						       0xFFFF0000
	/* ---:--- */	#define	GET32RC4_CTXDAT_y(r32)						 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16RC4_CTXDAT_y(r16)						 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32RC4_CTXDAT_y(r32,v)					do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16RC4_CTXDAT_y(r16,v)					do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_RC4_CTXDAT_reserved 		0x00204
	/* @'00204 */	SIE_UINT32 					ie_reserved;

} SIE_RC4_CTXDAT;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	RC4_CTXDAT_drvrd (SIE_RC4_CTXDAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	RC4_CTXDAT_drvwr (SIE_RC4_CTXDAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	RC4_CTXDAT_reset (SIE_RC4_CTXDAT *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	RC4_CTXDAT_check(p,pie,ps8name,hfpErrLOG)		RC4_CTXDAT_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	RC4_CTXDAT_print(p,    ps8name,hfpErrLOG)		RC4_CTXDAT_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	RC4_CTXDAT_cmp   (SIE_RC4_CTXDAT *p, SIE_RC4_CTXDAT *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	RC4_CTXDAT_import(SIE_RC4_CTXDAT *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	RC4_CTXDAT_export(SIE_RC4_CTXDAT *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: RC4_CTXDAT
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: MD5_CTXDAT
*	@
*		$UINT64  puCount
*						*  *
*						*  Counter
*	@
*		$UINT32  pbBuf  REG  [16]
*						*  *
*						*  Internal buffer
*	@
*		$UINT32  puState  REG  [6]
*						*  *
*						*  Hash state
*	@
*		$UINT64  a64Blk  REG  [70]
**********************************************************************************************************************/
#ifdef	h_MD5_CTXDAT
#else
#define	h_MD5_CTXDAT

#define	\
	AR_MD5_CTXDAT \
		164
#define	\
	AB_MD5_CTXDAT \
		10

typedef struct SIE_MD5_CTXDAT {

	#define	RA_MD5_CTXDAT_puCount 		0x00000
	/* @'00000 */	SIE_UINT64 					ie_puCount;

	#define	RA_MD5_CTXDAT_pbBuf 		0x00008
	/* @'00008 */	SIE_UINT32 					ie_pbBuf			 [16];
					#define	 arr_MD5_CTXDAT_pbBuf 					  16

	#define	RA_MD5_CTXDAT_puState 		0x00048
	/* @'00048 */	SIE_UINT32 					ie_puState			 [6];
					#define	 arr_MD5_CTXDAT_puState 				  6

	#define	RA_MD5_CTXDAT_a64Blk 		0x00060
	/* @'00060 */	SIE_UINT64 					ie_a64Blk			 [70];
					#define	 arr_MD5_CTXDAT_a64Blk 					  70

} SIE_MD5_CTXDAT;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	MD5_CTXDAT_drvrd (SIE_MD5_CTXDAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	MD5_CTXDAT_drvwr (SIE_MD5_CTXDAT *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	MD5_CTXDAT_reset (SIE_MD5_CTXDAT *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	MD5_CTXDAT_check(p,pie,ps8name,hfpErrLOG)		MD5_CTXDAT_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	MD5_CTXDAT_print(p,    ps8name,hfpErrLOG)		MD5_CTXDAT_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	MD5_CTXDAT_cmp   (SIE_MD5_CTXDAT *p, SIE_MD5_CTXDAT *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	MD5_CTXDAT_import(SIE_MD5_CTXDAT *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	MD5_CTXDAT_export(SIE_MD5_CTXDAT *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: MD5_CTXDAT
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRMROM_CMD_TYPE
*	@
*			:  LD_FIGOIMG  0
*						*  *
*						*  Load and verify FIGO image
*	@
*			:  LD_ARMIMG  1
*						*  *
*						*  Load and verify ARM image
*	@
*			:  MK_ARMIMG  2
*						*  *
*						*  Sign and encrypt ARM image, and sign type is default sign type, CMAC
*	@
*			:  MK_ARMIMG_RSAPSS  4
*						*  *
*						*  Sign and encrypt ARM image,and sign type is RSA
*	@
*		%unsigned  32  dummy
**********************************************************************************************************************/
#ifdef	h_DRMROM_CMD_TYPE
#else
#define	h_DRMROM_CMD_TYPE

#define	\
	AR_DRMROM_CMD_TYPE \
		1
#define	\
	AB_DRMROM_CMD_TYPE \
		2

	#define	DRMROM_CMD_TYPE_LD_FIGOIMG 	0x0
	#define	DRMROM_CMD_TYPE_LD_ARMIMG 	0x1
	#define	DRMROM_CMD_TYPE_MK_ARMIMG 	0x2
	#define	DRMROM_CMD_TYPE_MK_ARMIMG_RSAPSS 0x4

typedef struct SIE_DRMROM_CMD_TYPE {

	#define	RA_DRMROM_CMD_TYPE_D0th_ 	ISC_USE_ONLY	0x00000
	#define	w32DRMROM_CMD_TYPE_D0th_ 	{										\
					UNSG32				u_dummy						 : 32;		\
										}
	/* @'00000 */				struct	w32DRMROM_CMD_TYPE_D0th_;

	/* [31: 0] */	#define	  BA_DRMROM_CMD_TYPE_dummy				 0x00000
	/* ---:--- */	#define	    bDRMROM_CMD_TYPE_dummy				   32 /*bit*/
	/* ---:--- */	#define	LSb32DRMROM_CMD_TYPE_dummy				    0 /*:31*/
	/* ---:--- */	#define	MSK32DRMROM_CMD_TYPE_dummy				       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRMROM_CMD_TYPE_dummy(r32)				 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRMROM_CMD_TYPE_dummy(r16)				 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRMROM_CMD_TYPE_dummy(r32,v)			do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMROM_CMD_TYPE_dummy(r16,v)			do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

} SIE_DRMROM_CMD_TYPE;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRMROM_CMD_TYPE_drvrd (SIE_DRMROM_CMD_TYPE *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRMROM_CMD_TYPE_drvwr (SIE_DRMROM_CMD_TYPE *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRMROM_CMD_TYPE_reset (SIE_DRMROM_CMD_TYPE *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRMROM_CMD_TYPE_check(p,pie,ps8name,hfpErrLOG)		DRMROM_CMD_TYPE_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRMROM_CMD_TYPE_print(p,    ps8name,hfpErrLOG)		DRMROM_CMD_TYPE_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRMROM_CMD_TYPE_cmp   (SIE_DRMROM_CMD_TYPE *p, SIE_DRMROM_CMD_TYPE *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRMROM_CMD_TYPE_import(SIE_DRMROM_CMD_TYPE *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRMROM_CMD_TYPE_export(SIE_DRMROM_CMD_TYPE *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRMROM_CMD_TYPE
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRMROM_CMD
*	@  STAT  (R-W-)  0
*		%unsigned  1  en
*						*  *
*						*  1: Indicate command has been issued by ARM. CMD register contains the command body
*						*  0 : Indicate command has been executed by FIGO . RSP register contains the response body
*	@  CMD_CFG  (W)  0
*		%unsigned  8  tag  0
*						*  *
*						*  Command ordinal, LD_FIGOIMG or LD_ARMIMG
*						*  0
*		%unsigned  8  subKeyID  0
*						*  *
*						*  The ID of key used to encrypt the image
*						*  0
*		%unsigned  16  nonce  0
*						*  *
*						*  Command ID
*						*  0
*	@  CMD_DAT0
*		%unsigned  32  crcCmd32  0
*						*  *
*						*  Command CRC32 value
*	@  CMD_DAT1
*		%unsigned  32  imgSz  0
*						*  *
*						*  Image size of instruction
*						*  0
*	@  CMD_DAT2
*		%unsigned  32  imgSrcAddr  0
*						*  *
*						*  Image source address in DDR. To simplfy the FIGO macrocode design and improve the data transfer performance, imgSrcAddr should be aligned to 32 bytes
*	@  CMD_DAT3
*		%unsigned  32  imgDstAddr  0
*						*  *
*						*  Image destination address aligned to 32 bytes
*	@  RSP_CFG  (R)  0
*		%unsigned  8  tag  0
*						*  *
*						*  Response ordinal, LD_FIGOIMG or LD_ARMIMG
*						*  0
*	@  RSP_DAT0
*		%unsigned  32  crcRsp32  0
*						*  *
*						*  Response CRC32 value calculated with corresponding command nonce value
*						*  0
*	@  RSP_DAT1
*		%unsigned  32  error  0
*						*  *
*						*  Response error code. 0 : Succeed
*						*  0
*	@
*		%unsigned  32  reserved  0
**********************************************************************************************************************/
#ifdef	h_DRMROM_CMD
#else
#define	h_DRMROM_CMD

#define	\
	AR_DRMROM_CMD \
		10
#define	\
	AB_DRMROM_CMD \
		6

typedef struct SIE_DRMROM_CMD {

	#define	RA_DRMROM_CMD_STAT 			0x00000
	#define	w32DRMROM_CMD_STAT 			{										\
					UNSG32				uSTAT_en					 :  1;		\
					UNSG32				_x00000	: 31;							\
										}
	/* @'00000 */	union {	UNSG32		u32DRMROM_CMD_STAT;
								struct	w32DRMROM_CMD_STAT;
										};

	/* [ 0: 0] */	#define	  BA_DRMROM_CMD_STAT_en					 0x00000
	/* ---:--- */	#define	    bDRMROM_CMD_STAT_en					    1 /*bit*/
	/* ---:--- */	#define	LSb32DRMROM_CMD_STAT_en					    0 /*: 0*/
	/* ---:--- */	#define	MSK32DRMROM_CMD_STAT_en					       0x00000001
	/* ---:--- */	#define	GET32DRMROM_CMD_STAT_en(r32)				 (((r32)>> 0)&0x0001)
	/* ---:--- */	#define	GET16DRMROM_CMD_STAT_en(r16)				 (((r16)>> 0)&0x0001)
	/* ---:--- */	#define	SET32DRMROM_CMD_STAT_en(r32,v)				do{(r32)&=~(0x0001<< 0);(r32)|=((v)&0x0001)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMROM_CMD_STAT_en(r16,v)				do{(r16)&=~(0x0001<< 0);(r16)|=((v)&0x0001)<< 0;}while(0)

	#define	RA_DRMROM_CMD_CMD_CFG 		0x00004
	#define	w32DRMROM_CMD_CMD_CFG 		{										\
					UNSG32				uCMD_CFG_tag				 :  8;		\
					UNSG32				uCMD_CFG_subKeyID			 :  8;		\
					UNSG32				uCMD_CFG_nonce				 : 16;		\
										}
	/* @'00004 */	union {	UNSG32		u32DRMROM_CMD_CMD_CFG;
								struct	w32DRMROM_CMD_CMD_CFG;
										};

	/* [ 7: 0] */	#define	  BA_DRMROM_CMD_CMD_CFG_tag				 0x00004
	/* ---:--- */	#define	    bDRMROM_CMD_CMD_CFG_tag				    8 /*bit*/
	/* ---:--- */	#define	LSb32DRMROM_CMD_CMD_CFG_tag				    0 /*: 7*/
	/* ---:--- */	#define	MSK32DRMROM_CMD_CMD_CFG_tag				       0x000000FF
	/* ---:--- */	#define	GET32DRMROM_CMD_CMD_CFG_tag(r32)			 (((r32)>> 0)&0x00FF)
	/* ---:--- */	#define	GET16DRMROM_CMD_CMD_CFG_tag(r16)			 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32DRMROM_CMD_CMD_CFG_tag(r32,v)			do{(r32)&=~(0x00FF<< 0);(r32)|=((v)&0x00FF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMROM_CMD_CMD_CFG_tag(r16,v)			do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	/* [15: 8] */	#define	  BA_DRMROM_CMD_CMD_CFG_subKeyID		 0x00005
	/* ---:--- */	#define	    bDRMROM_CMD_CMD_CFG_subKeyID		    8 /*bit*/
	/* ---:--- */	#define	LSb32DRMROM_CMD_CMD_CFG_subKeyID		    8 /*:15*/
	/* ---:--- */	#define	MSK32DRMROM_CMD_CMD_CFG_subKeyID		       0x0000FF00
	/* ---:--- */	#define	GET32DRMROM_CMD_CMD_CFG_subKeyID(r32)		 (((r32)>> 8)&0x00FF)
	/* ---:--- */	#define	GET16DRMROM_CMD_CMD_CFG_subKeyID(r16)		 (((r16)>> 8)&0x00FF)
	/* ---:--- */	#define	SET32DRMROM_CMD_CMD_CFG_subKeyID(r32,v)		do{(r32)&=~(0x00FF<< 8);(r32)|=((v)&0x00FF)<< 8;}while(0)
	/* ---:--- */	#define	SET16DRMROM_CMD_CMD_CFG_subKeyID(r16,v)		do{(r16)&=~(0x00FF<< 8);(r16)|=((v)&0x00FF)<< 8;}while(0)

	/* [31:16] */	#define	  BA_DRMROM_CMD_CMD_CFG_nonce			 0x00006
	/* ---:--- */	#define	    bDRMROM_CMD_CMD_CFG_nonce			   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMROM_CMD_CMD_CFG_nonce			   16 /*:31*/
	/* ---:--- */	#define	MSK32DRMROM_CMD_CMD_CFG_nonce			       0xFFFF0000
	/* ---:--- */	#define	GET32DRMROM_CMD_CMD_CFG_nonce(r32)			 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DRMROM_CMD_CMD_CFG_nonce(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMROM_CMD_CMD_CFG_nonce(r32,v)		do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRMROM_CMD_CMD_CFG_nonce(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DRMROM_CMD_CMD_DAT0 		0x00008
	#define	w32DRMROM_CMD_CMD_DAT0 		{										\
					UNSG32				uCMD_DAT0_crcCmd32			 : 32;		\
										}
	/* @'00008 */	union {	UNSG32		u32DRMROM_CMD_CMD_DAT0;
								struct	w32DRMROM_CMD_CMD_DAT0;
										};

	/* [31: 0] */	#define	  BA_DRMROM_CMD_CMD_DAT0_crcCmd32		 0x00008
	/* ---:--- */	#define	    bDRMROM_CMD_CMD_DAT0_crcCmd32		   32 /*bit*/
	/* ---:--- */	#define	LSb32DRMROM_CMD_CMD_DAT0_crcCmd32		    0 /*:31*/
	/* ---:--- */	#define	MSK32DRMROM_CMD_CMD_DAT0_crcCmd32		       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRMROM_CMD_CMD_DAT0_crcCmd32(r32)		 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRMROM_CMD_CMD_DAT0_crcCmd32(r16)		 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRMROM_CMD_CMD_DAT0_crcCmd32(r32,v)	do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMROM_CMD_CMD_DAT0_crcCmd32(r16,v)	do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DRMROM_CMD_CMD_DAT1 		0x0000C
	#define	w32DRMROM_CMD_CMD_DAT1 		{										\
					UNSG32				uCMD_DAT1_imgSz				 : 32;		\
										}
	/* @'0000C */	union {	UNSG32		u32DRMROM_CMD_CMD_DAT1;
								struct	w32DRMROM_CMD_CMD_DAT1;
										};

	/* [31: 0] */	#define	  BA_DRMROM_CMD_CMD_DAT1_imgSz			 0x0000C
	/* ---:--- */	#define	    bDRMROM_CMD_CMD_DAT1_imgSz			   32 /*bit*/
	/* ---:--- */	#define	LSb32DRMROM_CMD_CMD_DAT1_imgSz			    0 /*:31*/
	/* ---:--- */	#define	MSK32DRMROM_CMD_CMD_DAT1_imgSz			       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRMROM_CMD_CMD_DAT1_imgSz(r32)			 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRMROM_CMD_CMD_DAT1_imgSz(r16)			 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRMROM_CMD_CMD_DAT1_imgSz(r32,v)		do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMROM_CMD_CMD_DAT1_imgSz(r16,v)		do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DRMROM_CMD_CMD_DAT2 		0x00010
	#define	w32DRMROM_CMD_CMD_DAT2 		{										\
					UNSG32				uCMD_DAT2_imgSrcAddr		 : 32;		\
										}
	/* @'00010 */	union {	UNSG32		u32DRMROM_CMD_CMD_DAT2;
								struct	w32DRMROM_CMD_CMD_DAT2;
										};

	/* [31: 0] */	#define	  BA_DRMROM_CMD_CMD_DAT2_imgSrcAddr		 0x00010
	/* ---:--- */	#define	    bDRMROM_CMD_CMD_DAT2_imgSrcAddr		   32 /*bit*/
	/* ---:--- */	#define	LSb32DRMROM_CMD_CMD_DAT2_imgSrcAddr		    0 /*:31*/
	/* ---:--- */	#define	MSK32DRMROM_CMD_CMD_DAT2_imgSrcAddr		       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRMROM_CMD_CMD_DAT2_imgSrcAddr(r32)	 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRMROM_CMD_CMD_DAT2_imgSrcAddr(r16)	 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRMROM_CMD_CMD_DAT2_imgSrcAddr(r32,v)	do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMROM_CMD_CMD_DAT2_imgSrcAddr(r16,v)	do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DRMROM_CMD_CMD_DAT3 		0x00014
	#define	w32DRMROM_CMD_CMD_DAT3 		{										\
					UNSG32				uCMD_DAT3_imgDstAddr		 : 32;		\
										}
	/* @'00014 */	union {	UNSG32		u32DRMROM_CMD_CMD_DAT3;
								struct	w32DRMROM_CMD_CMD_DAT3;
										};

	/* [31: 0] */	#define	  BA_DRMROM_CMD_CMD_DAT3_imgDstAddr		 0x00014
	/* ---:--- */	#define	    bDRMROM_CMD_CMD_DAT3_imgDstAddr		   32 /*bit*/
	/* ---:--- */	#define	LSb32DRMROM_CMD_CMD_DAT3_imgDstAddr		    0 /*:31*/
	/* ---:--- */	#define	MSK32DRMROM_CMD_CMD_DAT3_imgDstAddr		       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRMROM_CMD_CMD_DAT3_imgDstAddr(r32)	 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRMROM_CMD_CMD_DAT3_imgDstAddr(r16)	 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRMROM_CMD_CMD_DAT3_imgDstAddr(r32,v)	do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMROM_CMD_CMD_DAT3_imgDstAddr(r16,v)	do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DRMROM_CMD_RSP_CFG 		0x00018
	#define	w32DRMROM_CMD_RSP_CFG 		{										\
					UNSG32				uRSP_CFG_tag				 :  8;		\
					UNSG32				_x00018	: 24;							\
										}
	/* @'00018 */	union {	UNSG32		u32DRMROM_CMD_RSP_CFG;
								struct	w32DRMROM_CMD_RSP_CFG;
										};

	/* [ 7: 0] */	#define	  BA_DRMROM_CMD_RSP_CFG_tag				 0x00018
	/* ---:--- */	#define	    bDRMROM_CMD_RSP_CFG_tag				    8 /*bit*/
	/* ---:--- */	#define	LSb32DRMROM_CMD_RSP_CFG_tag				    0 /*: 7*/
	/* ---:--- */	#define	MSK32DRMROM_CMD_RSP_CFG_tag				       0x000000FF
	/* ---:--- */	#define	GET32DRMROM_CMD_RSP_CFG_tag(r32)			 (((r32)>> 0)&0x00FF)
	/* ---:--- */	#define	GET16DRMROM_CMD_RSP_CFG_tag(r16)			 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32DRMROM_CMD_RSP_CFG_tag(r32,v)			do{(r32)&=~(0x00FF<< 0);(r32)|=((v)&0x00FF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMROM_CMD_RSP_CFG_tag(r16,v)			do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	#define	RA_DRMROM_CMD_RSP_DAT0 		0x0001C
	#define	w32DRMROM_CMD_RSP_DAT0 		{										\
					UNSG32				uRSP_DAT0_crcRsp32			 : 32;		\
										}
	/* @'0001C */	union {	UNSG32		u32DRMROM_CMD_RSP_DAT0;
								struct	w32DRMROM_CMD_RSP_DAT0;
										};

	/* [31: 0] */	#define	  BA_DRMROM_CMD_RSP_DAT0_crcRsp32		 0x0001C
	/* ---:--- */	#define	    bDRMROM_CMD_RSP_DAT0_crcRsp32		   32 /*bit*/
	/* ---:--- */	#define	LSb32DRMROM_CMD_RSP_DAT0_crcRsp32		    0 /*:31*/
	/* ---:--- */	#define	MSK32DRMROM_CMD_RSP_DAT0_crcRsp32		       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRMROM_CMD_RSP_DAT0_crcRsp32(r32)		 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRMROM_CMD_RSP_DAT0_crcRsp32(r16)		 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRMROM_CMD_RSP_DAT0_crcRsp32(r32,v)	do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMROM_CMD_RSP_DAT0_crcRsp32(r16,v)	do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DRMROM_CMD_RSP_DAT1 		0x00020
	#define	w32DRMROM_CMD_RSP_DAT1 		{										\
					UNSG32				uRSP_DAT1_error				 : 32;		\
										}
	/* @'00020 */	union {	UNSG32		u32DRMROM_CMD_RSP_DAT1;
								struct	w32DRMROM_CMD_RSP_DAT1;
										};

	/* [31: 0] */	#define	  BA_DRMROM_CMD_RSP_DAT1_error			 0x00020
	/* ---:--- */	#define	    bDRMROM_CMD_RSP_DAT1_error			   32 /*bit*/
	/* ---:--- */	#define	LSb32DRMROM_CMD_RSP_DAT1_error			    0 /*:31*/
	/* ---:--- */	#define	MSK32DRMROM_CMD_RSP_DAT1_error			       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRMROM_CMD_RSP_DAT1_error(r32)			 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRMROM_CMD_RSP_DAT1_error(r16)			 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRMROM_CMD_RSP_DAT1_error(r32,v)		do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMROM_CMD_RSP_DAT1_error(r16,v)		do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DRMROM_CMD_D9th_ 		ISC_USE_ONLY	0x00024
	#define	w32DRMROM_CMD_D9th_ 		{										\
					UNSG32				u_reserved					 : 32;		\
										}
	/* @'00024 */				struct	w32DRMROM_CMD_D9th_;

	/* [31: 0] */	#define	  BA_DRMROM_CMD_reserved				 0x00024
	/* ---:--- */	#define	    bDRMROM_CMD_reserved				   32 /*bit*/
	/* ---:--- */	#define	LSb32DRMROM_CMD_reserved				    0 /*:31*/
	/* ---:--- */	#define	MSK32DRMROM_CMD_reserved				       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRMROM_CMD_reserved(r32)				 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRMROM_CMD_reserved(r16)				 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRMROM_CMD_reserved(r32,v)				do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMROM_CMD_reserved(r16,v)				do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

} SIE_DRMROM_CMD;

	#define	dftDRMROM_CMD_STAT 			0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DRMROM_CMD_STAT;
										} T32DRMROM_CMD_STAT;
	#define	dftDRMROM_CMD_CMD_CFG 		0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DRMROM_CMD_CMD_CFG;
										} T32DRMROM_CMD_CMD_CFG;
	#define	dftDRMROM_CMD_CMD_DAT0 		0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DRMROM_CMD_CMD_DAT0;
										} T32DRMROM_CMD_CMD_DAT0;
	#define	dftDRMROM_CMD_CMD_DAT1 		0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DRMROM_CMD_CMD_DAT1;
										} T32DRMROM_CMD_CMD_DAT1;
	#define	dftDRMROM_CMD_CMD_DAT2 		0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DRMROM_CMD_CMD_DAT2;
										} T32DRMROM_CMD_CMD_DAT2;
	#define	dftDRMROM_CMD_CMD_DAT3 		0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DRMROM_CMD_CMD_DAT3;
										} T32DRMROM_CMD_CMD_DAT3;
	#define	dftDRMROM_CMD_RSP_CFG 		0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DRMROM_CMD_RSP_CFG;
										} T32DRMROM_CMD_RSP_CFG;
	#define	dftDRMROM_CMD_RSP_DAT0 		0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DRMROM_CMD_RSP_DAT0;
										} T32DRMROM_CMD_RSP_DAT0;
	#define	dftDRMROM_CMD_RSP_DAT1 		0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DRMROM_CMD_RSP_DAT1;
										} T32DRMROM_CMD_RSP_DAT1;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRMROM_CMD_drvrd (SIE_DRMROM_CMD *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRMROM_CMD_drvwr (SIE_DRMROM_CMD *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRMROM_CMD_reset (SIE_DRMROM_CMD *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRMROM_CMD_check(p,pie,ps8name,hfpErrLOG)		DRMROM_CMD_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRMROM_CMD_print(p,    ps8name,hfpErrLOG)		DRMROM_CMD_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRMROM_CMD_cmp   (SIE_DRMROM_CMD *p, SIE_DRMROM_CMD *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRMROM_CMD_import(SIE_DRMROM_CMD *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRMROM_CMD_export(SIE_DRMROM_CMD *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRMROM_CMD
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRM_DROM
*	@
*		$AES128_RODAT  aesROData
*						*  *
*						*  AES 128 bits algorithm specific read only data
*	@
*		$HAMMING_RODAT  hamming64RODat
*						*  *
*						*  Hamming 64-7 tables
*	@
*		$CRC32_RODAT  crc32ROData
*						*  *
*						*  CRC32 algorithm specific read only data
*	@
*		$SHA1_RODAT  sha1ROData
*						*  *
*						*  SHA-1 algorithm specific read only data
*	@
*		$RSA_RODAT  rsaROData
*						*  *
*						*  RSA algorithm specific read only data
*	@
*		$UINT128  aesROMKey  REG  [64]
*						*  *
*						*  AES ROM Key data
*	@
*		$UINT128  rsaPrvKey  REG  [8]
*	@
*		$UINT128  rsaPrvMod  REG  [8]
*	@
*		$UINT128  rsaPubKey  REG  [4]
*	@
*		$UINT128  rsaMod  REG  [8]
*						*  *
*						*  RSA Private and Public pair Key Data in ROM
**********************************************************************************************************************/
#ifdef	h_DRM_DROM
#else
#define	h_DRM_DROM

#define	\
	AR_DRM_DROM \
		1828
#define	\
	AB_DRM_DROM \
		13

typedef struct SIE_DRM_DROM {

	#define	RA_DRM_DROM_aesROData 		0x00000
	/* @'00000 */	SIE_AES128_RODAT 			ie_aesROData;

	#define	RA_DRM_DROM_hamming64RODat 	0x00810
	/* @'00810 */	SIE_HAMMING_RODAT 			ie_hamming64RODat;

	#define	RA_DRM_DROM_crc32ROData 	0x00B50
	/* @'00B50 */	SIE_CRC32_RODAT 			ie_crc32ROData;

	#define	RA_DRM_DROM_sha1ROData 		0x00C90
	/* @'00C90 */	SIE_SHA1_RODAT 				ie_sha1ROData;

	#define	RA_DRM_DROM_rsaROData 		0x01590
	/* @'01590 */	SIE_RSA_RODAT 				ie_rsaROData;

	#define	RA_DRM_DROM_aesROMKey 		0x016D0
	/* @'016D0 */	SIE_UINT128 				ie_aesROMKey		 [64];
					#define	 arr_DRM_DROM_aesROMKey 				  64

	#define	RA_DRM_DROM_rsaPrvKey 		0x01AD0
	/* @'01AD0 */	SIE_UINT128 				ie_rsaPrvKey		 [8];
					#define	 arr_DRM_DROM_rsaPrvKey 				  8

	#define	RA_DRM_DROM_rsaPrvMod 		0x01B50
	/* @'01B50 */	SIE_UINT128 				ie_rsaPrvMod		 [8];
					#define	 arr_DRM_DROM_rsaPrvMod 				  8

	#define	RA_DRM_DROM_rsaPubKey 		0x01BD0
	/* @'01BD0 */	SIE_UINT128 				ie_rsaPubKey		 [4];
					#define	 arr_DRM_DROM_rsaPubKey 				  4

	#define	RA_DRM_DROM_rsaMod 			0x01C10
	/* @'01C10 */	SIE_UINT128 				ie_rsaMod			 [8];
					#define	 arr_DRM_DROM_rsaMod 					  8

} SIE_DRM_DROM;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRM_DROM_drvrd (SIE_DRM_DROM *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRM_DROM_drvwr (SIE_DRM_DROM *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRM_DROM_reset (SIE_DRM_DROM *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRM_DROM_check(p,pie,ps8name,hfpErrLOG)		DRM_DROM_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRM_DROM_print(p,    ps8name,hfpErrLOG)		DRM_DROM_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRM_DROM_cmp   (SIE_DRM_DROM *p, SIE_DRM_DROM *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRM_DROM_import(SIE_DRM_DROM *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRM_DROM_export(SIE_DRM_DROM *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRM_DROM
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRMROM_FIFOIDX
*	@
*			:  DS  0
*						*  *
*						*  DS FIFo IDx
*	@
*		%unsigned  32  dummy
**********************************************************************************************************************/
#ifdef	h_DRMROM_FIFOIDX
#else
#define	h_DRMROM_FIFOIDX

#define	\
	AR_DRMROM_FIFOIDX \
		1
#define	\
	AB_DRMROM_FIFOIDX \
		2

	#define	DRMROM_FIFOIDX_DS 			0x0

typedef struct SIE_DRMROM_FIFOIDX {

	#define	RA_DRMROM_FIFOIDX_D0th_ 	ISC_USE_ONLY	0x00000
	#define	w32DRMROM_FIFOIDX_D0th_ 	{										\
					UNSG32				u_dummy						 : 32;		\
										}
	/* @'00000 */				struct	w32DRMROM_FIFOIDX_D0th_;

	/* [31: 0] */	#define	  BA_DRMROM_FIFOIDX_dummy				 0x00000
	/* ---:--- */	#define	    bDRMROM_FIFOIDX_dummy				   32 /*bit*/
	/* ---:--- */	#define	LSb32DRMROM_FIFOIDX_dummy				    0 /*:31*/
	/* ---:--- */	#define	MSK32DRMROM_FIFOIDX_dummy				       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRMROM_FIFOIDX_dummy(r32)				 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRMROM_FIFOIDX_dummy(r16)				 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRMROM_FIFOIDX_dummy(r32,v)			do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMROM_FIFOIDX_dummy(r16,v)			do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

} SIE_DRMROM_FIFOIDX;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRMROM_FIFOIDX_drvrd (SIE_DRMROM_FIFOIDX *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRMROM_FIFOIDX_drvwr (SIE_DRMROM_FIFOIDX *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRMROM_FIFOIDX_reset (SIE_DRMROM_FIFOIDX *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRMROM_FIFOIDX_check(p,pie,ps8name,hfpErrLOG)		DRMROM_FIFOIDX_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRMROM_FIFOIDX_print(p,    ps8name,hfpErrLOG)		DRMROM_FIFOIDX_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRMROM_FIFOIDX_cmp   (SIE_DRMROM_FIFOIDX *p, SIE_DRMROM_FIFOIDX *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRMROM_FIFOIDX_import(SIE_DRMROM_FIFOIDX *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRMROM_FIFOIDX_export(SIE_DRMROM_FIFOIDX *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRMROM_FIFOIDX
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRMROM_SRAM_RESERVED
*	@
*		$UINT128  reserved  REG  [128]
*						*  *
*						*  Reserved ROM SRAM
**********************************************************************************************************************/
#ifdef	h_DRMROM_SRAM_RESERVED
#else
#define	h_DRMROM_SRAM_RESERVED

#define	\
	AR_DRMROM_SRAM_RESERVED \
		512
#define	\
	AB_DRMROM_SRAM_RESERVED \
		11

typedef struct SIE_DRMROM_SRAM_RESERVED {

	#define	RA_DRMROM_SRAM_RESERVED_reserved 0x00000
	/* @'00000 */	SIE_UINT128 				ie_reserved			 [128];
					#define	 arr_DRMROM_SRAM_RESERVED_reserved 		  128

} SIE_DRMROM_SRAM_RESERVED;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRMROM_SRAM_RESERVED_drvrd (SIE_DRMROM_SRAM_RESERVED *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRMROM_SRAM_RESERVED_drvwr (SIE_DRMROM_SRAM_RESERVED *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRMROM_SRAM_RESERVED_reset (SIE_DRMROM_SRAM_RESERVED *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRMROM_SRAM_RESERVED_check(p,pie,ps8name,hfpErrLOG)		DRMROM_SRAM_RESERVED_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRMROM_SRAM_RESERVED_print(p,    ps8name,hfpErrLOG)		DRMROM_SRAM_RESERVED_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRMROM_SRAM_RESERVED_cmp   (SIE_DRMROM_SRAM_RESERVED *p, SIE_DRMROM_SRAM_RESERVED *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRMROM_SRAM_RESERVED_import(SIE_DRMROM_SRAM_RESERVED *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRMROM_SRAM_RESERVED_export(SIE_DRMROM_SRAM_RESERVED *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRMROM_SRAM_RESERVED
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: USERKEY_CTX
*	@
*		$UINT64  magicNum
*	@
*		$UINT128  aesUserKey  REG  [2]
*	@
*		$UINT128  rsaPubKey  REG  [4]
*	@
*		$UINT128  rsaMod  REG  [8]
*	@
*		$UINT128  rsaPrvKey  REG  [8]
*	@
*		$UINT128  rsaPrvMod  REG  [8]
**********************************************************************************************************************/
#ifdef	h_USERKEY_CTX
#else
#define	h_USERKEY_CTX

#define	\
	AR_USERKEY_CTX \
		122
#define	\
	AB_USERKEY_CTX \
		9

typedef struct SIE_USERKEY_CTX {

	#define	RA_USERKEY_CTX_magicNum 	0x00000
	/* @'00000 */	SIE_UINT64 					ie_magicNum;

	#define	RA_USERKEY_CTX_aesUserKey 	0x00008
	/* @'00008 */	SIE_UINT128 				ie_aesUserKey		 [2];
					#define	 arr_USERKEY_CTX_aesUserKey 			  2

	#define	RA_USERKEY_CTX_rsaPubKey 	0x00028
	/* @'00028 */	SIE_UINT128 				ie_rsaPubKey		 [4];
					#define	 arr_USERKEY_CTX_rsaPubKey 				  4

	#define	RA_USERKEY_CTX_rsaMod 		0x00068
	/* @'00068 */	SIE_UINT128 				ie_rsaMod			 [8];
					#define	 arr_USERKEY_CTX_rsaMod 				  8

	#define	RA_USERKEY_CTX_rsaPrvKey 	0x000E8
	/* @'000E8 */	SIE_UINT128 				ie_rsaPrvKey		 [8];
					#define	 arr_USERKEY_CTX_rsaPrvKey 				  8

	#define	RA_USERKEY_CTX_rsaPrvMod 	0x00168
	/* @'00168 */	SIE_UINT128 				ie_rsaPrvMod		 [8];
					#define	 arr_USERKEY_CTX_rsaPrvMod 				  8

} SIE_USERKEY_CTX;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	USERKEY_CTX_drvrd (SIE_USERKEY_CTX *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	USERKEY_CTX_drvwr (SIE_USERKEY_CTX *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	USERKEY_CTX_reset (SIE_USERKEY_CTX *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	USERKEY_CTX_check(p,pie,ps8name,hfpErrLOG)		USERKEY_CTX_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	USERKEY_CTX_print(p,    ps8name,hfpErrLOG)		USERKEY_CTX_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	USERKEY_CTX_cmp   (SIE_USERKEY_CTX *p, SIE_USERKEY_CTX *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	USERKEY_CTX_import(SIE_USERKEY_CTX *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	USERKEY_CTX_export(SIE_USERKEY_CTX *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: USERKEY_CTX
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: USERKEY_MAGICNUM
*	@  DAT
*		%unsigned  16  ID
*			:  magicA  0x06a5
*			:  magicB  0x06a5
*			:  magicC  0x06a5
*			:  magicD  0x06a5
**********************************************************************************************************************/
#ifdef	h_USERKEY_MAGICNUM
#else
#define	h_USERKEY_MAGICNUM

#define	\
	AR_USERKEY_MAGICNUM \
		1
#define	\
	AB_USERKEY_MAGICNUM \
		2

typedef struct SIE_USERKEY_MAGICNUM {

	#define	RA_USERKEY_MAGICNUM_DAT 	0x00000
	#define	w32USERKEY_MAGICNUM_DAT 	{										\
					UNSG32				uDAT_ID						 : 16;		\
					UNSG32				_x00000	: 16;							\
										}
	/* @'00000 */	union {	UNSG32		u32USERKEY_MAGICNUM_DAT;
								struct	w32USERKEY_MAGICNUM_DAT;
										};

	/* [15: 0] */	#define	  BA_USERKEY_MAGICNUM_DAT_ID			 0x00000
	/* ---:--- */	#define	    bUSERKEY_MAGICNUM_DAT_ID			   16 /*bit*/
	/* ---:--- */	#define	LSb32USERKEY_MAGICNUM_DAT_ID			    0 /*:15*/
	/* ---:--- */	#define	MSK32USERKEY_MAGICNUM_DAT_ID			       0x0000FFFF
	/* ---:--- */	#define	GET32USERKEY_MAGICNUM_DAT_ID(r32)			 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16USERKEY_MAGICNUM_DAT_ID(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32USERKEY_MAGICNUM_DAT_ID(r32,v)			do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16USERKEY_MAGICNUM_DAT_ID(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)
					#define	     USERKEY_MAGICNUM_DAT_ID_magicA				0x6A5
					#define	     USERKEY_MAGICNUM_DAT_ID_magicB				0x6A5
					#define	     USERKEY_MAGICNUM_DAT_ID_magicC				0x6A5
					#define	     USERKEY_MAGICNUM_DAT_ID_magicD				0x6A5

} SIE_USERKEY_MAGICNUM;

	#define	dftUSERKEY_MAGICNUM_DAT 	0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32USERKEY_MAGICNUM_DAT;
										} T32USERKEY_MAGICNUM_DAT;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	USERKEY_MAGICNUM_drvrd (SIE_USERKEY_MAGICNUM *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	USERKEY_MAGICNUM_drvwr (SIE_USERKEY_MAGICNUM *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	USERKEY_MAGICNUM_reset (SIE_USERKEY_MAGICNUM *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	USERKEY_MAGICNUM_check(p,pie,ps8name,hfpErrLOG)		USERKEY_MAGICNUM_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	USERKEY_MAGICNUM_print(p,    ps8name,hfpErrLOG)		USERKEY_MAGICNUM_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	USERKEY_MAGICNUM_cmp   (SIE_USERKEY_MAGICNUM *p, SIE_USERKEY_MAGICNUM *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	USERKEY_MAGICNUM_import(SIE_USERKEY_MAGICNUM *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	USERKEY_MAGICNUM_export(SIE_USERKEY_MAGICNUM *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: USERKEY_MAGICNUM
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRMROM_SRAM
*	@
*		$DRMROM_CMD  cmd
*						*  *
*						*  ROM code command and response buffer
*	@
*		$LocalArea  la
*						*  *
*						*  Local data area
*	@
*		$UINT64  dsFifoDat  REG  [16]
*						*  *
*						*  Data streamer fifo data
*	@
*		$DRM_SYMKEYCTX256_IN  symSignKey
*						*  *
*						*  AES128 based symmetric signature key context
*	@
*		$DRM_RSAKEYCTX1024_IN  asymSignKey
*						*  *
*						*  RSA1924 based asymmetric signature key context
*	@
*		$DRM_SYMKEYCTX256_IN  aesRKEK
*						*  *
*						*  AES128 RKEK key context
*	@
*		$DRM_SYMKEYCTX256_IN  aesSubKey
*						*  *
*						*  AES128 sub key context
*	@
*		$UINT128  rndKeyBuf  REG  [16]
*						*  *
*						*  Temporary buffer for round keys
*	@
*		$UINT32  imgHdrInfo  REG  [32]
*						*  *
*						*  Stored image header information
*	@
*		$UINT32  authDatCtx  REG  [32]
*						*  *
*						*  Stored image header information
*	@
*		$UINT64  otpBits  REG  [40]
*						*  *
*						*  All OTP bits
*	@
*		$OTP_CRC32  otpCrc32
*						*  *
*						*  OTP CRC32 value for three regions of OTP data
*	@  SEC_BITS
*		%unsigned  16  prvkSecBits0
*						*  *
*						*  Private key security bits 0
*		%unsigned  16  prvkSecBits1
*						*  *
*						*  Private key security bits 0
*		%unsigned  16  prvkSecBits2
*						*  *
*						*  Private key security bits 0
*		%unsigned  16  rkekSecBits
*						*  *
*						*  RKEK key security bits 0
*		%unsigned  16  aeskSecBits
*						*  *
*						*  AES key security bits
*	@
*		$OTP_STATUS  otpStatus
*						*  *
*						*  All OTP bits
*	@
*		$SHA1_CTXDAT  shaCtx
*						*  *
*						*  SHA1 Context for RSA PSS signature verification
*	@
*		$USERKEY_CTX  userKeyCtx
*						*  *
*						*  AES User Key data
*	@
*		$RSA_CTXDAT  rsaCtx
*						*  *
*						*  RSA Context for RSA PSS signature verification
*	@
*		$UINT128  bufTmp  MEM
*						*  *
*						*  Temporary Buffer
*	@  0x0ff0
*		$UINT128  stack
*						*  *
*						*  Stack
*	@  0x1000
*		$UINT128  dsTransBuf  REG  [256]
*						*  *
*						*  Transfer memory
**********************************************************************************************************************/
#ifdef	h_DRMROM_SRAM
#else
#define	h_DRMROM_SRAM

#define	\
	AR_DRMROM_SRAM \
		2048
#define	\
	AB_DRMROM_SRAM \
		13

typedef struct SIE_DRMROM_SRAM {

	#define	RA_DRMROM_SRAM_cmd 			0x00000
	/* @'00000 */	SIE_DRMROM_CMD 				ie_cmd;

	#define	RA_DRMROM_SRAM_la 			0x00028
	/* @'00028 */	SIE_LocalArea 				ie_la;

	#define	RA_DRMROM_SRAM_dsFifoDat 	0x00250
	/* @'00250 */	SIE_UINT64 					ie_dsFifoDat		 [16];
					#define	 arr_DRMROM_SRAM_dsFifoDat 				  16

	#define	RA_DRMROM_SRAM_symSignKey 	0x002D0
	/* @'002D0 */	SIE_DRM_SYMKEYCTX256_IN 	ie_symSignKey;

	#define	RA_DRMROM_SRAM_asymSignKey 	0x00330
	/* @'00330 */	SIE_DRM_RSAKEYCTX1024_IN 	ie_asymSignKey;

	#define	RA_DRMROM_SRAM_aesRKEK 		0x003E0
	/* @'003E0 */	SIE_DRM_SYMKEYCTX256_IN 	ie_aesRKEK;

	#define	RA_DRMROM_SRAM_aesSubKey 	0x00440
	/* @'00440 */	SIE_DRM_SYMKEYCTX256_IN 	ie_aesSubKey;

	#define	RA_DRMROM_SRAM_rndKeyBuf 	0x004A0
	/* @'004A0 */	SIE_UINT128 				ie_rndKeyBuf		 [16];
					#define	 arr_DRMROM_SRAM_rndKeyBuf 				  16

	#define	RA_DRMROM_SRAM_imgHdrInfo 	0x005A0
	/* @'005A0 */	SIE_UINT32 					ie_imgHdrInfo		 [32];
					#define	 arr_DRMROM_SRAM_imgHdrInfo 			  32

	#define	RA_DRMROM_SRAM_authDatCtx 	0x00620
	/* @'00620 */	SIE_UINT32 					ie_authDatCtx		 [32];
					#define	 arr_DRMROM_SRAM_authDatCtx 			  32

	#define	RA_DRMROM_SRAM_otpBits 		0x006A0
	/* @'006A0 */	SIE_UINT64 					ie_otpBits			 [40];
					#define	 arr_DRMROM_SRAM_otpBits 				  40

	#define	RA_DRMROM_SRAM_otpCrc32 	0x007E0
	/* @'007E0 */	SIE_OTP_CRC32 				ie_otpCrc32;

	#define	RA_DRMROM_SRAM_SEC_BITS 	0x007F0
	#define	w32DRMROM_SRAM_SEC_BITS 	{										\
					UNSG32				uSEC_BITS_prvkSecBits0		 : 16;		\
					UNSG32				uSEC_BITS_prvkSecBits1		 : 16;		\
										}
	/* @'007F0 */	union {	UNSG32		u32DRMROM_SRAM_SEC_BITS;
								struct	w32DRMROM_SRAM_SEC_BITS;
										};

	/* [15: 0] */	#define	  BA_DRMROM_SRAM_SEC_BITS_prvkSecBits0	 0x007F0
	/* ---:--- */	#define	    bDRMROM_SRAM_SEC_BITS_prvkSecBits0	   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMROM_SRAM_SEC_BITS_prvkSecBits0	    0 /*:15*/
	/* ---:--- */	#define	MSK32DRMROM_SRAM_SEC_BITS_prvkSecBits0	       0x0000FFFF
	/* ---:--- */	#define	GET32DRMROM_SRAM_SEC_BITS_prvkSecBits0(r32)	 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRMROM_SRAM_SEC_BITS_prvkSecBits0(r16)	 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMROM_SRAM_SEC_BITS_prvkSecBits0(r32,v)do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMROM_SRAM_SEC_BITS_prvkSecBits0(r16,v)do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DRMROM_SRAM_SEC_BITS_prvkSecBits1	 0x007F2
	/* ---:--- */	#define	    bDRMROM_SRAM_SEC_BITS_prvkSecBits1	   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMROM_SRAM_SEC_BITS_prvkSecBits1	   16 /*:31*/
	/* ---:--- */	#define	MSK32DRMROM_SRAM_SEC_BITS_prvkSecBits1	       0xFFFF0000
	/* ---:--- */	#define	GET32DRMROM_SRAM_SEC_BITS_prvkSecBits1(r32)	 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DRMROM_SRAM_SEC_BITS_prvkSecBits1(r16)	 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMROM_SRAM_SEC_BITS_prvkSecBits1(r32,v)do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRMROM_SRAM_SEC_BITS_prvkSecBits1(r16,v)do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DRMROM_SRAM_SEC_BITS1 	0x007F4
	#define	w32DRMROM_SRAM_SEC_BITS1 	{										\
					UNSG32				uSEC_BITS_prvkSecBits2		 : 16;		\
					UNSG32				uSEC_BITS_rkekSecBits		 : 16;		\
										}
	/* @'007F4 */	union {	UNSG32		u32DRMROM_SRAM_SEC_BITS1;
								struct	w32DRMROM_SRAM_SEC_BITS1;
										};

	/* [15: 0] */	#define	  BA_DRMROM_SRAM_SEC_BITS_prvkSecBits2	 0x007F4
	/* ---:--- */	#define	    bDRMROM_SRAM_SEC_BITS_prvkSecBits2	   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMROM_SRAM_SEC_BITS_prvkSecBits2	    0 /*:15*/
	/* ---:--- */	#define	MSK32DRMROM_SRAM_SEC_BITS_prvkSecBits2	       0x0000FFFF
	/* ---:--- */	#define	GET32DRMROM_SRAM_SEC_BITS_prvkSecBits2(r32)	 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRMROM_SRAM_SEC_BITS_prvkSecBits2(r16)	 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMROM_SRAM_SEC_BITS_prvkSecBits2(r32,v)do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMROM_SRAM_SEC_BITS_prvkSecBits2(r16,v)do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DRMROM_SRAM_SEC_BITS_rkekSecBits	 0x007F6
	/* ---:--- */	#define	    bDRMROM_SRAM_SEC_BITS_rkekSecBits	   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMROM_SRAM_SEC_BITS_rkekSecBits	   16 /*:31*/
	/* ---:--- */	#define	MSK32DRMROM_SRAM_SEC_BITS_rkekSecBits	       0xFFFF0000
	/* ---:--- */	#define	GET32DRMROM_SRAM_SEC_BITS_rkekSecBits(r32)	 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DRMROM_SRAM_SEC_BITS_rkekSecBits(r16)	 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMROM_SRAM_SEC_BITS_rkekSecBits(r32,v)do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRMROM_SRAM_SEC_BITS_rkekSecBits(r16,v)do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DRMROM_SRAM_SEC_BITS2 	0x007F8
	#define	w32DRMROM_SRAM_SEC_BITS2 	{										\
					UNSG32				uSEC_BITS_aeskSecBits		 : 16;		\
					UNSG32				_x007F8	: 16;							\
										}
	/* @'007F8 */	union {	UNSG32		u32DRMROM_SRAM_SEC_BITS2;
								struct	w32DRMROM_SRAM_SEC_BITS2;
										};

	/* [15: 0] */	#define	  BA_DRMROM_SRAM_SEC_BITS_aeskSecBits	 0x007F8
	/* ---:--- */	#define	    bDRMROM_SRAM_SEC_BITS_aeskSecBits	   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMROM_SRAM_SEC_BITS_aeskSecBits	    0 /*:15*/
	/* ---:--- */	#define	MSK32DRMROM_SRAM_SEC_BITS_aeskSecBits	       0x0000FFFF
	/* ---:--- */	#define	GET32DRMROM_SRAM_SEC_BITS_aeskSecBits(r32)	 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRMROM_SRAM_SEC_BITS_aeskSecBits(r16)	 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMROM_SRAM_SEC_BITS_aeskSecBits(r32,v)do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMROM_SRAM_SEC_BITS_aeskSecBits(r16,v)do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DRMROM_SRAM_otpStatus 	0x007FC
	/* @'007FC */	SIE_OTP_STATUS 				ie_otpStatus;

	#define	RA_DRMROM_SRAM_shaCtx 		0x00800
	/* @'00800 */	SIE_SHA1_CTXDAT 			ie_shaCtx;

	#define	RA_DRMROM_SRAM_userKeyCtx 	0x00860
	/* @'00860 */	SIE_USERKEY_CTX 			ie_userKeyCtx;

	#define	RA_DRMROM_SRAM_rsaCtx 		0x00A48
	/* @'00A48 */	SIE_RSA_CTXDAT 				ie_rsaCtx;

	#define	RA_DRMROM_SRAM_bufTmp 		0x00ED0
	/* @'00ED0 */	SIE_UINT128 				ie_bufTmp;

	UNSG32	_PAD_000[(0x00FF0-0x00EE0)/4];
	#define	RA_DRMROM_SRAM_stack 		0x00FF0
	/* @'00FF0 */	SIE_UINT128 				ie_stack;

	#define	RA_DRMROM_SRAM_dsTransBuf 	0x01000
	/* @'01000 */	SIE_UINT128 				ie_dsTransBuf		 [256];
					#define	 arr_DRMROM_SRAM_dsTransBuf 			  256

} SIE_DRMROM_SRAM;

	#define	dftDRMROM_SRAM_SEC_BITS 	0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DRMROM_SRAM_SEC_BITS;
										} T32DRMROM_SRAM_SEC_BITS;
	#define	dftDRMROM_SRAM_SEC_BITS1 	0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DRMROM_SRAM_SEC_BITS1;
										} T32DRMROM_SRAM_SEC_BITS1;
	#define	dftDRMROM_SRAM_SEC_BITS2 	0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DRMROM_SRAM_SEC_BITS2;
										} T32DRMROM_SRAM_SEC_BITS2;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRMROM_SRAM_drvrd (SIE_DRMROM_SRAM *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRMROM_SRAM_drvwr (SIE_DRMROM_SRAM *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRMROM_SRAM_reset (SIE_DRMROM_SRAM *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRMROM_SRAM_check(p,pie,ps8name,hfpErrLOG)		DRMROM_SRAM_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRMROM_SRAM_print(p,    ps8name,hfpErrLOG)		DRMROM_SRAM_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRMROM_SRAM_cmp   (SIE_DRMROM_SRAM *p, SIE_DRMROM_SRAM *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRMROM_SRAM_import(SIE_DRMROM_SRAM *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRMROM_SRAM_export(SIE_DRMROM_SRAM *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRMROM_SRAM
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRM_CMD
*	@  CMD  (W)  0
*		%unsigned  8  tag  0
*						*  *
*						*  Command ordinal, LD_FIGOIMG or LD_ARMIMG
*						*  0
*		%unsigned  24  nonce  0
*						*  *
*						*  Command ID
*						*  0
*	@
*		%unsigned  32  crcCmd32  0
*						*  *
*						*  Command CRC32 value
*	@
*		$UINT32  RET_BODY  [6]
**********************************************************************************************************************/
#ifdef	h_DRM_CMD
#else
#define	h_DRM_CMD

#define	\
	AR_DRM_CMD \
		3
#define	\
	AB_DRM_CMD \
		4

typedef struct SIE_DRM_CMD {

	#define	RA_DRM_CMD_CMD 				0x00000
	#define	w32DRM_CMD_CMD 				{										\
					UNSG32				uCMD_tag					 :  8;		\
					UNSG32				uCMD_nonce					 : 24;		\
										}
	/* @'00000 */	union {	UNSG32		u32DRM_CMD_CMD;
								struct	w32DRM_CMD_CMD;
										};

	/* [ 7: 0] */	#define	  BA_DRM_CMD_CMD_tag					 0x00000
	/* ---:--- */	#define	    bDRM_CMD_CMD_tag					    8 /*bit*/
	/* ---:--- */	#define	LSb32DRM_CMD_CMD_tag					    0 /*: 7*/
	/* ---:--- */	#define	MSK32DRM_CMD_CMD_tag					       0x000000FF
	/* ---:--- */	#define	GET32DRM_CMD_CMD_tag(r32)					 (((r32)>> 0)&0x00FF)
	/* ---:--- */	#define	GET16DRM_CMD_CMD_tag(r16)					 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32DRM_CMD_CMD_tag(r32,v)					do{(r32)&=~(0x00FF<< 0);(r32)|=((v)&0x00FF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_CMD_CMD_tag(r16,v)					do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	/* [31: 8] */	#define	  BA_DRM_CMD_CMD_nonce					 0x00001
	/* ---:--- */	#define	    bDRM_CMD_CMD_nonce					   24 /*bit*/
	/* ---:--- */	#define	LSb32DRM_CMD_CMD_nonce					    8 /*:31*/
	/* ---:--- */	#define	MSK32DRM_CMD_CMD_nonce					       0xFFFFFF00
	/* ---:--- */	#define	GET32DRM_CMD_CMD_nonce(r32)					 (((r32)>> 8)&0xFFFFFF)
	/* ---:--- */	#define	GET16DRM_CMD_CMD_nonce(r16)					 (((r16)>> 8)&0xFFFFFF)
	/* ---:--- */	#define	SET32DRM_CMD_CMD_nonce(r32,v)				do{(r32)&=~(0xFFFFFF<< 8);(r32)|=((v)&0xFFFFFF)<< 8;}while(0)
	/* ---:--- */	#define	SET16DRM_CMD_CMD_nonce(r16,v)				do{(r16)&=~(0xFFFFFF<< 8);(r16)|=((v)&0xFFFFFF)<< 8;}while(0)

	#define	RA_DRM_CMD_D1th_ 			ISC_USE_ONLY	0x00004
	#define	w32DRM_CMD_D1th_ 			{										\
					UNSG32				u_crcCmd32					 : 32;		\
										}
	/* @'00004 */				struct	w32DRM_CMD_D1th_;

	/* [31: 0] */	#define	  BA_DRM_CMD_crcCmd32					 0x00004
	/* ---:--- */	#define	    bDRM_CMD_crcCmd32					   32 /*bit*/
	/* ---:--- */	#define	LSb32DRM_CMD_crcCmd32					    0 /*:31*/
	/* ---:--- */	#define	MSK32DRM_CMD_crcCmd32					       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRM_CMD_crcCmd32(r32)					 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRM_CMD_crcCmd32(r16)					 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRM_CMD_crcCmd32(r32,v)				do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_CMD_crcCmd32(r16,v)				do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DRM_CMD_RET_BODY 		0x00008
	/* @'00008 */	SIE_UINT32 					ie_RET_BODY;

} SIE_DRM_CMD;

	#define	dftDRM_CMD_CMD 				0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DRM_CMD_CMD;
										} T32DRM_CMD_CMD;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRM_CMD_drvrd (SIE_DRM_CMD *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRM_CMD_drvwr (SIE_DRM_CMD *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRM_CMD_reset (SIE_DRM_CMD *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRM_CMD_check(p,pie,ps8name,hfpErrLOG)		DRM_CMD_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRM_CMD_print(p,    ps8name,hfpErrLOG)		DRM_CMD_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRM_CMD_cmp   (SIE_DRM_CMD *p, SIE_DRM_CMD *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRM_CMD_import(SIE_DRM_CMD *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRM_CMD_export(SIE_DRM_CMD *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRM_CMD
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRM_RSP
*	@  RSP  (R)  0
*		%unsigned  8  tag  0
*						*  *
*						*  Response ordinal, LD_FIGOIMG or LD_ARMIMG
*						*  0
*	@
*		%unsigned  32  crcRsp32  0
*						*  *
*						*  Response CRC32 value calculated with corresponding command nonce value
*						*  0
*	@
*		%unsigned  32  error  0
*						*  *
*						*  Response error code. 0 : Succeed
*						*  0
*	@
*		%unsigned  32  reserved  0
*						*  *
*						*  reserved
*						*  0
**********************************************************************************************************************/
#ifdef	h_DRM_RSP
#else
#define	h_DRM_RSP

#define	\
	AR_DRM_RSP \
		4
#define	\
	AB_DRM_RSP \
		4

typedef struct SIE_DRM_RSP {

	#define	RA_DRM_RSP_RSP 				0x00000
	#define	w32DRM_RSP_RSP 				{										\
					UNSG32				uRSP_tag					 :  8;		\
					UNSG32				_x00000	: 24;							\
										}
	/* @'00000 */	union {	UNSG32		u32DRM_RSP_RSP;
								struct	w32DRM_RSP_RSP;
										};

	/* [ 7: 0] */	#define	  BA_DRM_RSP_RSP_tag					 0x00000
	/* ---:--- */	#define	    bDRM_RSP_RSP_tag					    8 /*bit*/
	/* ---:--- */	#define	LSb32DRM_RSP_RSP_tag					    0 /*: 7*/
	/* ---:--- */	#define	MSK32DRM_RSP_RSP_tag					       0x000000FF
	/* ---:--- */	#define	GET32DRM_RSP_RSP_tag(r32)					 (((r32)>> 0)&0x00FF)
	/* ---:--- */	#define	GET16DRM_RSP_RSP_tag(r16)					 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32DRM_RSP_RSP_tag(r32,v)					do{(r32)&=~(0x00FF<< 0);(r32)|=((v)&0x00FF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_RSP_RSP_tag(r16,v)					do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	#define	RA_DRM_RSP_D1th_ 			ISC_USE_ONLY	0x00004
	#define	w32DRM_RSP_D1th_ 			{										\
					UNSG32				u_crcRsp32					 : 32;		\
										}
	/* @'00004 */				struct	w32DRM_RSP_D1th_;

	/* [31: 0] */	#define	  BA_DRM_RSP_crcRsp32					 0x00004
	/* ---:--- */	#define	    bDRM_RSP_crcRsp32					   32 /*bit*/
	/* ---:--- */	#define	LSb32DRM_RSP_crcRsp32					    0 /*:31*/
	/* ---:--- */	#define	MSK32DRM_RSP_crcRsp32					       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRM_RSP_crcRsp32(r32)					 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRM_RSP_crcRsp32(r16)					 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRM_RSP_crcRsp32(r32,v)				do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_RSP_crcRsp32(r16,v)				do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DRM_RSP_D2th_ 			ISC_USE_ONLY	0x00008
	#define	w32DRM_RSP_D2th_ 			{										\
					UNSG32				u_error						 : 32;		\
										}
	/* @'00008 */				struct	w32DRM_RSP_D2th_;

	/* [31: 0] */	#define	  BA_DRM_RSP_error						 0x00008
	/* ---:--- */	#define	    bDRM_RSP_error						   32 /*bit*/
	/* ---:--- */	#define	LSb32DRM_RSP_error						    0 /*:31*/
	/* ---:--- */	#define	MSK32DRM_RSP_error						       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRM_RSP_error(r32)						 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRM_RSP_error(r16)						 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRM_RSP_error(r32,v)					do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_RSP_error(r16,v)					do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DRM_RSP_D3th_ 			ISC_USE_ONLY	0x0000C
	#define	w32DRM_RSP_D3th_ 			{										\
					UNSG32				u_reserved					 : 32;		\
										}
	/* @'0000C */				struct	w32DRM_RSP_D3th_;

	/* [31: 0] */	#define	  BA_DRM_RSP_reserved					 0x0000C
	/* ---:--- */	#define	    bDRM_RSP_reserved					   32 /*bit*/
	/* ---:--- */	#define	LSb32DRM_RSP_reserved					    0 /*:31*/
	/* ---:--- */	#define	MSK32DRM_RSP_reserved					       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRM_RSP_reserved(r32)					 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRM_RSP_reserved(r16)					 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRM_RSP_reserved(r32,v)				do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRM_RSP_reserved(r16,v)				do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

} SIE_DRM_RSP;

	#define	dftDRM_RSP_RSP 				0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DRM_RSP_RSP;
										} T32DRM_RSP_RSP;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRM_RSP_drvrd (SIE_DRM_RSP *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRM_RSP_drvwr (SIE_DRM_RSP *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRM_RSP_reset (SIE_DRM_RSP *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRM_RSP_check(p,pie,ps8name,hfpErrLOG)		DRM_RSP_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRM_RSP_print(p,    ps8name,hfpErrLOG)		DRM_RSP_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRM_RSP_cmp   (SIE_DRM_RSP *p, SIE_DRM_RSP *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRM_RSP_import(SIE_DRM_RSP *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRM_RSP_export(SIE_DRM_RSP *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRM_RSP
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRMCMD_HASH
*	@
*		%unsigned  8  cmdCode  0
*						*  *
*						*  DRMCMD_SHA1_START
*						*  DRMCMD_SHA1_UPDATE
*						*  DRMCMD_SHA1_END.
*						*  DRMCMD_HMAC_START
*						*  DRMCMD_HMAC_UPDATE
*						*  DRMCMD_HMAC_END
*						*  0
*		%unsigned  8  cmdID  0
*						*  *
*						*  Command ID
*						*  0
*	@
*		$DRM_CTXID  hashID  0
*						*  *
*						*  Hash conetxt ID
*						*  0
*	@
*		%unsigned  32  datSz  0
*						*  *
*						*  The number of bytes in DAT_SRCADDR.
*						*  0
*	@
*		%unsigned  32  datSrcAddr  0
*						*  *
*						*  DDR address where the data is stored
*	@
*		%unsigned  32  keyID  0
*						*  *
*						*  Key context ID
*	@
*		%unsigned  32  authDat  0
*						*  *
*						*  Command authentication data
**********************************************************************************************************************/
#ifdef	h_DRMCMD_HASH
#else
#define	h_DRMCMD_HASH

#define	\
	AR_DRMCMD_HASH \
		6
#define	\
	AB_DRMCMD_HASH \
		5

typedef struct SIE_DRMCMD_HASH {

	#define	RA_DRMCMD_HASH_D0th_ 		ISC_USE_ONLY	0x00000
	#define	w32DRMCMD_HASH_D0th_ 		{										\
					UNSG32				u_cmdCode					 :  8;		\
					UNSG32				u_cmdID						 :  8;		\
					UNSG32				_x00000	: 16;							\
										}
	/* @'00000 */				struct	w32DRMCMD_HASH_D0th_;

	/* [ 7: 0] */	#define	  BA_DRMCMD_HASH_cmdCode				 0x00000
	/* ---:--- */	#define	    bDRMCMD_HASH_cmdCode				    8 /*bit*/
	/* ---:--- */	#define	LSb32DRMCMD_HASH_cmdCode				    0 /*: 7*/
	/* ---:--- */	#define	MSK32DRMCMD_HASH_cmdCode				       0x000000FF
	/* ---:--- */	#define	GET32DRMCMD_HASH_cmdCode(r32)				 (((r32)>> 0)&0x00FF)
	/* ---:--- */	#define	GET16DRMCMD_HASH_cmdCode(r16)				 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32DRMCMD_HASH_cmdCode(r32,v)				do{(r32)&=~(0x00FF<< 0);(r32)|=((v)&0x00FF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMCMD_HASH_cmdCode(r16,v)				do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	/* [15: 8] */	#define	  BA_DRMCMD_HASH_cmdID					 0x00001
	/* ---:--- */	#define	    bDRMCMD_HASH_cmdID					    8 /*bit*/
	/* ---:--- */	#define	LSb32DRMCMD_HASH_cmdID					    8 /*:15*/
	/* ---:--- */	#define	MSK32DRMCMD_HASH_cmdID					       0x0000FF00
	/* ---:--- */	#define	GET32DRMCMD_HASH_cmdID(r32)					 (((r32)>> 8)&0x00FF)
	/* ---:--- */	#define	GET16DRMCMD_HASH_cmdID(r16)					 (((r16)>> 8)&0x00FF)
	/* ---:--- */	#define	SET32DRMCMD_HASH_cmdID(r32,v)				do{(r32)&=~(0x00FF<< 8);(r32)|=((v)&0x00FF)<< 8;}while(0)
	/* ---:--- */	#define	SET16DRMCMD_HASH_cmdID(r16,v)				do{(r16)&=~(0x00FF<< 8);(r16)|=((v)&0x00FF)<< 8;}while(0)

	#define	RA_DRMCMD_HASH_hashID 		0x00004
	/* @'00004 */	SIE_DRM_CTXID 				ie_hashID;

	#define	RA_DRMCMD_HASH_D2th_ 		ISC_USE_ONLY	0x00008
	#define	w32DRMCMD_HASH_D2th_ 		{										\
					UNSG32				u_datSz						 : 32;		\
										}
	/* @'00008 */				struct	w32DRMCMD_HASH_D2th_;

	/* [31: 0] */	#define	  BA_DRMCMD_HASH_datSz					 0x00008
	/* ---:--- */	#define	    bDRMCMD_HASH_datSz					   32 /*bit*/
	/* ---:--- */	#define	LSb32DRMCMD_HASH_datSz					    0 /*:31*/
	/* ---:--- */	#define	MSK32DRMCMD_HASH_datSz					       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRMCMD_HASH_datSz(r32)					 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRMCMD_HASH_datSz(r16)					 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRMCMD_HASH_datSz(r32,v)				do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMCMD_HASH_datSz(r16,v)				do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DRMCMD_HASH_D3th_ 		ISC_USE_ONLY	0x0000C
	#define	w32DRMCMD_HASH_D3th_ 		{										\
					UNSG32				u_datSrcAddr				 : 32;		\
										}
	/* @'0000C */				struct	w32DRMCMD_HASH_D3th_;

	/* [31: 0] */	#define	  BA_DRMCMD_HASH_datSrcAddr				 0x0000C
	/* ---:--- */	#define	    bDRMCMD_HASH_datSrcAddr				   32 /*bit*/
	/* ---:--- */	#define	LSb32DRMCMD_HASH_datSrcAddr				    0 /*:31*/
	/* ---:--- */	#define	MSK32DRMCMD_HASH_datSrcAddr				       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRMCMD_HASH_datSrcAddr(r32)			 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRMCMD_HASH_datSrcAddr(r16)			 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRMCMD_HASH_datSrcAddr(r32,v)			do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMCMD_HASH_datSrcAddr(r16,v)			do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DRMCMD_HASH_D4th_ 		ISC_USE_ONLY	0x00010
	#define	w32DRMCMD_HASH_D4th_ 		{										\
					UNSG32				u_keyID						 : 32;		\
										}
	/* @'00010 */				struct	w32DRMCMD_HASH_D4th_;

	/* [31: 0] */	#define	  BA_DRMCMD_HASH_keyID					 0x00010
	/* ---:--- */	#define	    bDRMCMD_HASH_keyID					   32 /*bit*/
	/* ---:--- */	#define	LSb32DRMCMD_HASH_keyID					    0 /*:31*/
	/* ---:--- */	#define	MSK32DRMCMD_HASH_keyID					       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRMCMD_HASH_keyID(r32)					 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRMCMD_HASH_keyID(r16)					 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRMCMD_HASH_keyID(r32,v)				do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMCMD_HASH_keyID(r16,v)				do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DRMCMD_HASH_D5th_ 		ISC_USE_ONLY	0x00014
	#define	w32DRMCMD_HASH_D5th_ 		{										\
					UNSG32				u_authDat					 : 32;		\
										}
	/* @'00014 */				struct	w32DRMCMD_HASH_D5th_;

	/* [31: 0] */	#define	  BA_DRMCMD_HASH_authDat				 0x00014
	/* ---:--- */	#define	    bDRMCMD_HASH_authDat				   32 /*bit*/
	/* ---:--- */	#define	LSb32DRMCMD_HASH_authDat				    0 /*:31*/
	/* ---:--- */	#define	MSK32DRMCMD_HASH_authDat				       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRMCMD_HASH_authDat(r32)				 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRMCMD_HASH_authDat(r16)				 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRMCMD_HASH_authDat(r32,v)				do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMCMD_HASH_authDat(r16,v)				do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

} SIE_DRMCMD_HASH;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRMCMD_HASH_drvrd (SIE_DRMCMD_HASH *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRMCMD_HASH_drvwr (SIE_DRMCMD_HASH *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRMCMD_HASH_reset (SIE_DRMCMD_HASH *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRMCMD_HASH_check(p,pie,ps8name,hfpErrLOG)		DRMCMD_HASH_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRMCMD_HASH_print(p,    ps8name,hfpErrLOG)		DRMCMD_HASH_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRMCMD_HASH_cmp   (SIE_DRMCMD_HASH *p, SIE_DRMCMD_HASH *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRMCMD_HASH_import(SIE_DRMCMD_HASH *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRMCMD_HASH_export(SIE_DRMCMD_HASH *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRMCMD_HASH
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRMCMD_KEY_ENCDEC
*	@
*		%unsigned  8  cmdCode  0
*						*  *
*						*  DRMCMD_AES128_ENC
*						*  DRMCMD_AES128_DEC
*						*  DRMCMD_DES_ENC
*						*  DRMCMD_DES_DEC
*						*  DRMCMD_3xDES_ENC
*						*  DRMCMD_3xDES_DEC
*						*  0
*		%unsigned  8  cmdID  0
*						*  *
*						*  Command ID
*						*  0
*	@
*		$DRM_CTXID  keyID  0
*						*  *
*						*  Key context ID
*						*  0
*	@
*		%unsigned  32  datSz  0
*						*  *
*						*  The number of bytes in DAT_SRCADDR.
*						*  0
*	@
*		%unsigned  32  datSrcAddr  0
*						*  *
*						*  DDR address where the data is stored
*	@
*		%unsigned  1  isSRAMAddr  0
*						*  *
*						*  Flag to indicate whether the destination address belongs to SRAM
*		%unsigned  31  datDstAddr  0
*						*  *
*						*  DDR or SRAM address where the data is stored
*	@
*		%unsigned  32  authDat  0
*						*  *
*						*  Command authentication data
**********************************************************************************************************************/
#ifdef	h_DRMCMD_KEY_ENCDEC
#else
#define	h_DRMCMD_KEY_ENCDEC

#define	\
	AR_DRMCMD_KEY_ENCDEC \
		6
#define	\
	AB_DRMCMD_KEY_ENCDEC \
		5

typedef struct SIE_DRMCMD_KEY_ENCDEC {

	#define	RA_DRMCMD_KEY_ENCDEC_D0th_ 	ISC_USE_ONLY	0x00000
	#define	w32DRMCMD_KEY_ENCDEC_D0th_ 	{										\
					UNSG32				u_cmdCode					 :  8;		\
					UNSG32				u_cmdID						 :  8;		\
					UNSG32				_x00000	: 16;							\
										}
	/* @'00000 */				struct	w32DRMCMD_KEY_ENCDEC_D0th_;

	/* [ 7: 0] */	#define	  BA_DRMCMD_KEY_ENCDEC_cmdCode			 0x00000
	/* ---:--- */	#define	    bDRMCMD_KEY_ENCDEC_cmdCode			    8 /*bit*/
	/* ---:--- */	#define	LSb32DRMCMD_KEY_ENCDEC_cmdCode			    0 /*: 7*/
	/* ---:--- */	#define	MSK32DRMCMD_KEY_ENCDEC_cmdCode			       0x000000FF
	/* ---:--- */	#define	GET32DRMCMD_KEY_ENCDEC_cmdCode(r32)			 (((r32)>> 0)&0x00FF)
	/* ---:--- */	#define	GET16DRMCMD_KEY_ENCDEC_cmdCode(r16)			 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32DRMCMD_KEY_ENCDEC_cmdCode(r32,v)		do{(r32)&=~(0x00FF<< 0);(r32)|=((v)&0x00FF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMCMD_KEY_ENCDEC_cmdCode(r16,v)		do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	/* [15: 8] */	#define	  BA_DRMCMD_KEY_ENCDEC_cmdID			 0x00001
	/* ---:--- */	#define	    bDRMCMD_KEY_ENCDEC_cmdID			    8 /*bit*/
	/* ---:--- */	#define	LSb32DRMCMD_KEY_ENCDEC_cmdID			    8 /*:15*/
	/* ---:--- */	#define	MSK32DRMCMD_KEY_ENCDEC_cmdID			       0x0000FF00
	/* ---:--- */	#define	GET32DRMCMD_KEY_ENCDEC_cmdID(r32)			 (((r32)>> 8)&0x00FF)
	/* ---:--- */	#define	GET16DRMCMD_KEY_ENCDEC_cmdID(r16)			 (((r16)>> 8)&0x00FF)
	/* ---:--- */	#define	SET32DRMCMD_KEY_ENCDEC_cmdID(r32,v)			do{(r32)&=~(0x00FF<< 8);(r32)|=((v)&0x00FF)<< 8;}while(0)
	/* ---:--- */	#define	SET16DRMCMD_KEY_ENCDEC_cmdID(r16,v)			do{(r16)&=~(0x00FF<< 8);(r16)|=((v)&0x00FF)<< 8;}while(0)

	#define	RA_DRMCMD_KEY_ENCDEC_keyID 	0x00004
	/* @'00004 */	SIE_DRM_CTXID 				ie_keyID;

	#define	RA_DRMCMD_KEY_ENCDEC_D2th_ 	ISC_USE_ONLY	0x00008
	#define	w32DRMCMD_KEY_ENCDEC_D2th_ 	{										\
					UNSG32				u_datSz						 : 32;		\
										}
	/* @'00008 */				struct	w32DRMCMD_KEY_ENCDEC_D2th_;

	/* [31: 0] */	#define	  BA_DRMCMD_KEY_ENCDEC_datSz			 0x00008
	/* ---:--- */	#define	    bDRMCMD_KEY_ENCDEC_datSz			   32 /*bit*/
	/* ---:--- */	#define	LSb32DRMCMD_KEY_ENCDEC_datSz			    0 /*:31*/
	/* ---:--- */	#define	MSK32DRMCMD_KEY_ENCDEC_datSz			       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRMCMD_KEY_ENCDEC_datSz(r32)			 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRMCMD_KEY_ENCDEC_datSz(r16)			 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRMCMD_KEY_ENCDEC_datSz(r32,v)			do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMCMD_KEY_ENCDEC_datSz(r16,v)			do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DRMCMD_KEY_ENCDEC_D3th_ 	ISC_USE_ONLY	0x0000C
	#define	w32DRMCMD_KEY_ENCDEC_D3th_ 	{										\
					UNSG32				u_datSrcAddr				 : 32;		\
										}
	/* @'0000C */				struct	w32DRMCMD_KEY_ENCDEC_D3th_;

	/* [31: 0] */	#define	  BA_DRMCMD_KEY_ENCDEC_datSrcAddr		 0x0000C
	/* ---:--- */	#define	    bDRMCMD_KEY_ENCDEC_datSrcAddr		   32 /*bit*/
	/* ---:--- */	#define	LSb32DRMCMD_KEY_ENCDEC_datSrcAddr		    0 /*:31*/
	/* ---:--- */	#define	MSK32DRMCMD_KEY_ENCDEC_datSrcAddr		       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRMCMD_KEY_ENCDEC_datSrcAddr(r32)		 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRMCMD_KEY_ENCDEC_datSrcAddr(r16)		 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRMCMD_KEY_ENCDEC_datSrcAddr(r32,v)	do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMCMD_KEY_ENCDEC_datSrcAddr(r16,v)	do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DRMCMD_KEY_ENCDEC_D4th_ 	ISC_USE_ONLY	0x00010
	#define	w32DRMCMD_KEY_ENCDEC_D4th_ 	{										\
					UNSG32				u_isSRAMAddr				 :  1;		\
					UNSG32				u_datDstAddr				 : 31;		\
										}
	/* @'00010 */				struct	w32DRMCMD_KEY_ENCDEC_D4th_;

	/* [ 0: 0] */	#define	  BA_DRMCMD_KEY_ENCDEC_isSRAMAddr		 0x00010
	/* ---:--- */	#define	    bDRMCMD_KEY_ENCDEC_isSRAMAddr		    1 /*bit*/
	/* ---:--- */	#define	LSb32DRMCMD_KEY_ENCDEC_isSRAMAddr		    0 /*: 0*/
	/* ---:--- */	#define	MSK32DRMCMD_KEY_ENCDEC_isSRAMAddr		       0x00000001
	/* ---:--- */	#define	GET32DRMCMD_KEY_ENCDEC_isSRAMAddr(r32)		 (((r32)>> 0)&0x0001)
	/* ---:--- */	#define	GET16DRMCMD_KEY_ENCDEC_isSRAMAddr(r16)		 (((r16)>> 0)&0x0001)
	/* ---:--- */	#define	SET32DRMCMD_KEY_ENCDEC_isSRAMAddr(r32,v)	do{(r32)&=~(0x0001<< 0);(r32)|=((v)&0x0001)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMCMD_KEY_ENCDEC_isSRAMAddr(r16,v)	do{(r16)&=~(0x0001<< 0);(r16)|=((v)&0x0001)<< 0;}while(0)

	/* [31: 1] */	#define	  BA_DRMCMD_KEY_ENCDEC_datDstAddr		 0x00010
	/* ---:--- */	#define	    bDRMCMD_KEY_ENCDEC_datDstAddr		   31 /*bit*/
	/* ---:--- */	#define	LSb32DRMCMD_KEY_ENCDEC_datDstAddr		    1 /*:31*/
	/* ---:--- */	#define	MSK32DRMCMD_KEY_ENCDEC_datDstAddr		       0xFFFFFFFE
	/* ---:--- */	#define	GET32DRMCMD_KEY_ENCDEC_datDstAddr(r32)		 (((r32)>> 1)&0x7FFFFFFF)
	/* ---:--- */	#define	GET16DRMCMD_KEY_ENCDEC_datDstAddr(r16)		 (((r16)>> 1)&0x7FFFFFFF)
	/* ---:--- */	#define	SET32DRMCMD_KEY_ENCDEC_datDstAddr(r32,v)	do{(r32)&=~(0x7FFFFFFF<< 1);(r32)|=((v)&0x7FFFFFFF)<< 1;}while(0)
	/* ---:--- */	#define	SET16DRMCMD_KEY_ENCDEC_datDstAddr(r16,v)	do{(r16)&=~(0x7FFFFFFF<< 1);(r16)|=((v)&0x7FFFFFFF)<< 1;}while(0)

	#define	RA_DRMCMD_KEY_ENCDEC_D5th_ 	ISC_USE_ONLY	0x00014
	#define	w32DRMCMD_KEY_ENCDEC_D5th_ 	{										\
					UNSG32				u_authDat					 : 32;		\
										}
	/* @'00014 */				struct	w32DRMCMD_KEY_ENCDEC_D5th_;

	/* [31: 0] */	#define	  BA_DRMCMD_KEY_ENCDEC_authDat			 0x00014
	/* ---:--- */	#define	    bDRMCMD_KEY_ENCDEC_authDat			   32 /*bit*/
	/* ---:--- */	#define	LSb32DRMCMD_KEY_ENCDEC_authDat			    0 /*:31*/
	/* ---:--- */	#define	MSK32DRMCMD_KEY_ENCDEC_authDat			       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRMCMD_KEY_ENCDEC_authDat(r32)			 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRMCMD_KEY_ENCDEC_authDat(r16)			 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRMCMD_KEY_ENCDEC_authDat(r32,v)		do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMCMD_KEY_ENCDEC_authDat(r16,v)		do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

} SIE_DRMCMD_KEY_ENCDEC;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRMCMD_KEY_ENCDEC_drvrd (SIE_DRMCMD_KEY_ENCDEC *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRMCMD_KEY_ENCDEC_drvwr (SIE_DRMCMD_KEY_ENCDEC *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRMCMD_KEY_ENCDEC_reset (SIE_DRMCMD_KEY_ENCDEC *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRMCMD_KEY_ENCDEC_check(p,pie,ps8name,hfpErrLOG)		DRMCMD_KEY_ENCDEC_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRMCMD_KEY_ENCDEC_print(p,    ps8name,hfpErrLOG)		DRMCMD_KEY_ENCDEC_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRMCMD_KEY_ENCDEC_cmp   (SIE_DRMCMD_KEY_ENCDEC *p, SIE_DRMCMD_KEY_ENCDEC *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRMCMD_KEY_ENCDEC_import(SIE_DRMCMD_KEY_ENCDEC *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRMCMD_KEY_ENCDEC_export(SIE_DRMCMD_KEY_ENCDEC *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRMCMD_KEY_ENCDEC
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRMCMD_KEY_TRANS
*	@
*		%unsigned  8  cmdCode  0
*						*  *
*						*  DRMCMD_IMPORT_KEY
*						*  DRMCMD_EXPORT_KEY
*						*  0
*		%unsigned  8  cmdID  0
*						*  *
*						*  Command ID
*						*  0
*	@
*		$DRM_CTXID  parentKeyID  0
*						*  *
*						*  Parent key context ID. For export operation, it MUST be valid key
*						*  0
*	@
*		$DRM_CTXID  keyID  0
*						*  *
*						*  Destination key context ID
*						*  0
*	@
*		%unsigned  32  datSz  0
*						*  *
*						*  The number of bytes in DAT_SRCADDR.
*						*  0
*	@
*		%unsigned  32  datSrcAddr  0
*						*  *
*						*  DDR address where the data is stored
*	@
*		%unsigned  32  authDat  0
*						*  *
*						*  Command authentication data
**********************************************************************************************************************/
#ifdef	h_DRMCMD_KEY_TRANS
#else
#define	h_DRMCMD_KEY_TRANS

#define	\
	AR_DRMCMD_KEY_TRANS \
		6
#define	\
	AB_DRMCMD_KEY_TRANS \
		5

typedef struct SIE_DRMCMD_KEY_TRANS {

	#define	RA_DRMCMD_KEY_TRANS_D0th_ 	ISC_USE_ONLY	0x00000
	#define	w32DRMCMD_KEY_TRANS_D0th_ 	{										\
					UNSG32				u_cmdCode					 :  8;		\
					UNSG32				u_cmdID						 :  8;		\
					UNSG32				_x00000	: 16;							\
										}
	/* @'00000 */				struct	w32DRMCMD_KEY_TRANS_D0th_;

	/* [ 7: 0] */	#define	  BA_DRMCMD_KEY_TRANS_cmdCode			 0x00000
	/* ---:--- */	#define	    bDRMCMD_KEY_TRANS_cmdCode			    8 /*bit*/
	/* ---:--- */	#define	LSb32DRMCMD_KEY_TRANS_cmdCode			    0 /*: 7*/
	/* ---:--- */	#define	MSK32DRMCMD_KEY_TRANS_cmdCode			       0x000000FF
	/* ---:--- */	#define	GET32DRMCMD_KEY_TRANS_cmdCode(r32)			 (((r32)>> 0)&0x00FF)
	/* ---:--- */	#define	GET16DRMCMD_KEY_TRANS_cmdCode(r16)			 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32DRMCMD_KEY_TRANS_cmdCode(r32,v)		do{(r32)&=~(0x00FF<< 0);(r32)|=((v)&0x00FF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMCMD_KEY_TRANS_cmdCode(r16,v)		do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	/* [15: 8] */	#define	  BA_DRMCMD_KEY_TRANS_cmdID				 0x00001
	/* ---:--- */	#define	    bDRMCMD_KEY_TRANS_cmdID				    8 /*bit*/
	/* ---:--- */	#define	LSb32DRMCMD_KEY_TRANS_cmdID				    8 /*:15*/
	/* ---:--- */	#define	MSK32DRMCMD_KEY_TRANS_cmdID				       0x0000FF00
	/* ---:--- */	#define	GET32DRMCMD_KEY_TRANS_cmdID(r32)			 (((r32)>> 8)&0x00FF)
	/* ---:--- */	#define	GET16DRMCMD_KEY_TRANS_cmdID(r16)			 (((r16)>> 8)&0x00FF)
	/* ---:--- */	#define	SET32DRMCMD_KEY_TRANS_cmdID(r32,v)			do{(r32)&=~(0x00FF<< 8);(r32)|=((v)&0x00FF)<< 8;}while(0)
	/* ---:--- */	#define	SET16DRMCMD_KEY_TRANS_cmdID(r16,v)			do{(r16)&=~(0x00FF<< 8);(r16)|=((v)&0x00FF)<< 8;}while(0)

	#define	RA_DRMCMD_KEY_TRANS_parentKeyID 0x00004
	/* @'00004 */	SIE_DRM_CTXID 				ie_parentKeyID;

	#define	RA_DRMCMD_KEY_TRANS_keyID 	0x00008
	/* @'00008 */	SIE_DRM_CTXID 				ie_keyID;

	#define	RA_DRMCMD_KEY_TRANS_D3th_ 	ISC_USE_ONLY	0x0000C
	#define	w32DRMCMD_KEY_TRANS_D3th_ 	{										\
					UNSG32				u_datSz						 : 32;		\
										}
	/* @'0000C */				struct	w32DRMCMD_KEY_TRANS_D3th_;

	/* [31: 0] */	#define	  BA_DRMCMD_KEY_TRANS_datSz				 0x0000C
	/* ---:--- */	#define	    bDRMCMD_KEY_TRANS_datSz				   32 /*bit*/
	/* ---:--- */	#define	LSb32DRMCMD_KEY_TRANS_datSz				    0 /*:31*/
	/* ---:--- */	#define	MSK32DRMCMD_KEY_TRANS_datSz				       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRMCMD_KEY_TRANS_datSz(r32)			 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRMCMD_KEY_TRANS_datSz(r16)			 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRMCMD_KEY_TRANS_datSz(r32,v)			do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMCMD_KEY_TRANS_datSz(r16,v)			do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DRMCMD_KEY_TRANS_D4th_ 	ISC_USE_ONLY	0x00010
	#define	w32DRMCMD_KEY_TRANS_D4th_ 	{										\
					UNSG32				u_datSrcAddr				 : 32;		\
										}
	/* @'00010 */				struct	w32DRMCMD_KEY_TRANS_D4th_;

	/* [31: 0] */	#define	  BA_DRMCMD_KEY_TRANS_datSrcAddr		 0x00010
	/* ---:--- */	#define	    bDRMCMD_KEY_TRANS_datSrcAddr		   32 /*bit*/
	/* ---:--- */	#define	LSb32DRMCMD_KEY_TRANS_datSrcAddr		    0 /*:31*/
	/* ---:--- */	#define	MSK32DRMCMD_KEY_TRANS_datSrcAddr		       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRMCMD_KEY_TRANS_datSrcAddr(r32)		 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRMCMD_KEY_TRANS_datSrcAddr(r16)		 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRMCMD_KEY_TRANS_datSrcAddr(r32,v)		do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMCMD_KEY_TRANS_datSrcAddr(r16,v)		do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DRMCMD_KEY_TRANS_D5th_ 	ISC_USE_ONLY	0x00014
	#define	w32DRMCMD_KEY_TRANS_D5th_ 	{										\
					UNSG32				u_authDat					 : 32;		\
										}
	/* @'00014 */				struct	w32DRMCMD_KEY_TRANS_D5th_;

	/* [31: 0] */	#define	  BA_DRMCMD_KEY_TRANS_authDat			 0x00014
	/* ---:--- */	#define	    bDRMCMD_KEY_TRANS_authDat			   32 /*bit*/
	/* ---:--- */	#define	LSb32DRMCMD_KEY_TRANS_authDat			    0 /*:31*/
	/* ---:--- */	#define	MSK32DRMCMD_KEY_TRANS_authDat			       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRMCMD_KEY_TRANS_authDat(r32)			 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRMCMD_KEY_TRANS_authDat(r16)			 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRMCMD_KEY_TRANS_authDat(r32,v)		do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMCMD_KEY_TRANS_authDat(r16,v)		do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

} SIE_DRMCMD_KEY_TRANS;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRMCMD_KEY_TRANS_drvrd (SIE_DRMCMD_KEY_TRANS *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRMCMD_KEY_TRANS_drvwr (SIE_DRMCMD_KEY_TRANS *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRMCMD_KEY_TRANS_reset (SIE_DRMCMD_KEY_TRANS *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRMCMD_KEY_TRANS_check(p,pie,ps8name,hfpErrLOG)		DRMCMD_KEY_TRANS_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRMCMD_KEY_TRANS_print(p,    ps8name,hfpErrLOG)		DRMCMD_KEY_TRANS_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRMCMD_KEY_TRANS_cmp   (SIE_DRMCMD_KEY_TRANS *p, SIE_DRMCMD_KEY_TRANS *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRMCMD_KEY_TRANS_import(SIE_DRMCMD_KEY_TRANS *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRMCMD_KEY_TRANS_export(SIE_DRMCMD_KEY_TRANS *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRMCMD_KEY_TRANS
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: CRYPTO_ENGINE_CONST
*	@  CMD
*		%unsigned  8  CODE
*			:  AES128_ENC  0x0
*			:  AES128_DEC  0x1
*			:  RNG_RDDATA  0x2
*			:  SHA1_INIT  0x3
*			:  SHA1_UPDATE  0x4
*			:  SHA1_FINAL  0x5
*			:  RC4_ENC  0x6
*			:  RC4_DEC  0x7
*			:  RC4_SETKEY  0x8  AES
*		%unsigned  8  MODE
*			:  ECB  0x0
*			:  CBC  0x1
*			:  CTR  0x2
*			:  CTS  0x3  ENGINE
*		%unsigned  8  TYPE
*			:  AES  0x01
*			:  HASH  0x02
*			:  RNG  0x03
*			:  RC4  0x04
*			:  READ_OTP  0x05
**********************************************************************************************************************/
#ifdef	h_CRYPTO_ENGINE_CONST
#else
#define	h_CRYPTO_ENGINE_CONST

#define	\
	AR_CRYPTO_ENGINE_CONST \
		1
#define	\
	AB_CRYPTO_ENGINE_CONST \
		2

typedef struct SIE_CRYPTO_ENGINE_CONST {

	#define	RA_CRYPTO_ENGINE_CONST_CMD 	0x00000
	#define	w32CRYPTO_ENGINE_CONST_CMD 	{										\
					UNSG32				uCMD_CODE					 :  8;		\
					UNSG32				uCMD_MODE					 :  8;		\
					UNSG32				uCMD_TYPE					 :  8;		\
					UNSG32				_x00000	:  8;							\
										}
	/* @'00000 */	union {	UNSG32		u32CRYPTO_ENGINE_CONST_CMD;
								struct	w32CRYPTO_ENGINE_CONST_CMD;
										};

	/* [ 7: 0] */	#define	  BA_CRYPTO_ENGINE_CONST_CMD_CODE		 0x00000
	/* ---:--- */	#define	    bCRYPTO_ENGINE_CONST_CMD_CODE		    8 /*bit*/
	/* ---:--- */	#define	LSb32CRYPTO_ENGINE_CONST_CMD_CODE		    0 /*: 7*/
	/* ---:--- */	#define	MSK32CRYPTO_ENGINE_CONST_CMD_CODE		       0x000000FF
	/* ---:--- */	#define	GET32CRYPTO_ENGINE_CONST_CMD_CODE(r32)		 (((r32)>> 0)&0x00FF)
	/* ---:--- */	#define	GET16CRYPTO_ENGINE_CONST_CMD_CODE(r16)		 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32CRYPTO_ENGINE_CONST_CMD_CODE(r32,v)	do{(r32)&=~(0x00FF<< 0);(r32)|=((v)&0x00FF)<< 0;}while(0)
	/* ---:--- */	#define	SET16CRYPTO_ENGINE_CONST_CMD_CODE(r16,v)	do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)
					#define	     CRYPTO_ENGINE_CONST_CMD_CODE_AES128_ENC	0x0
					#define	     CRYPTO_ENGINE_CONST_CMD_CODE_AES128_DEC	0x1
					#define	     CRYPTO_ENGINE_CONST_CMD_CODE_RNG_RDDATA	0x2
					#define	     CRYPTO_ENGINE_CONST_CMD_CODE_SHA1_INIT		0x3
					#define	     CRYPTO_ENGINE_CONST_CMD_CODE_SHA1_UPDATE	0x4
					#define	     CRYPTO_ENGINE_CONST_CMD_CODE_SHA1_FINAL	0x5
					#define	     CRYPTO_ENGINE_CONST_CMD_CODE_RC4_ENC		0x6
					#define	     CRYPTO_ENGINE_CONST_CMD_CODE_RC4_DEC		0x7
					#define	     CRYPTO_ENGINE_CONST_CMD_CODE_RC4_SETKEY	0x8

	/* [15: 8] */	#define	  BA_CRYPTO_ENGINE_CONST_CMD_MODE		 0x00001
	/* ---:--- */	#define	    bCRYPTO_ENGINE_CONST_CMD_MODE		    8 /*bit*/
	/* ---:--- */	#define	LSb32CRYPTO_ENGINE_CONST_CMD_MODE		    8 /*:15*/
	/* ---:--- */	#define	MSK32CRYPTO_ENGINE_CONST_CMD_MODE		       0x0000FF00
	/* ---:--- */	#define	GET32CRYPTO_ENGINE_CONST_CMD_MODE(r32)		 (((r32)>> 8)&0x00FF)
	/* ---:--- */	#define	GET16CRYPTO_ENGINE_CONST_CMD_MODE(r16)		 (((r16)>> 8)&0x00FF)
	/* ---:--- */	#define	SET32CRYPTO_ENGINE_CONST_CMD_MODE(r32,v)	do{(r32)&=~(0x00FF<< 8);(r32)|=((v)&0x00FF)<< 8;}while(0)
	/* ---:--- */	#define	SET16CRYPTO_ENGINE_CONST_CMD_MODE(r16,v)	do{(r16)&=~(0x00FF<< 8);(r16)|=((v)&0x00FF)<< 8;}while(0)
					#define	     CRYPTO_ENGINE_CONST_CMD_MODE_ECB			0x0
					#define	     CRYPTO_ENGINE_CONST_CMD_MODE_CBC			0x1
					#define	     CRYPTO_ENGINE_CONST_CMD_MODE_CTR			0x2
					#define	     CRYPTO_ENGINE_CONST_CMD_MODE_CTS			0x3

	/* [23:16] */	#define	  BA_CRYPTO_ENGINE_CONST_CMD_TYPE		 0x00002
	/* ---:--- */	#define	    bCRYPTO_ENGINE_CONST_CMD_TYPE		    8 /*bit*/
	/* ---:--- */	#define	LSb32CRYPTO_ENGINE_CONST_CMD_TYPE		   16 /*:23*/
	/* ---:--- */	#define	MSK32CRYPTO_ENGINE_CONST_CMD_TYPE		       0x00FF0000
	/* ---:--- */	#define	GET32CRYPTO_ENGINE_CONST_CMD_TYPE(r32)		 (((r32)>>16)&0x00FF)
	/* ---:--- */	#define	GET16CRYPTO_ENGINE_CONST_CMD_TYPE(r16)		 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32CRYPTO_ENGINE_CONST_CMD_TYPE(r32,v)	do{(r32)&=~(0x00FF<<16);(r32)|=((v)&0x00FF)<<16;}while(0)
	/* ---:--- */	#define	SET16CRYPTO_ENGINE_CONST_CMD_TYPE(r16,v)	do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)
					#define	     CRYPTO_ENGINE_CONST_CMD_TYPE_AES			0x1
					#define	     CRYPTO_ENGINE_CONST_CMD_TYPE_HASH			0x2
					#define	     CRYPTO_ENGINE_CONST_CMD_TYPE_RNG			0x3
					#define	     CRYPTO_ENGINE_CONST_CMD_TYPE_RC4			0x4
					#define	     CRYPTO_ENGINE_CONST_CMD_TYPE_READ_OTP		0x5

} SIE_CRYPTO_ENGINE_CONST;

	#define	dftCRYPTO_ENGINE_CONST_CMD 	0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32CRYPTO_ENGINE_CONST_CMD;
										} T32CRYPTO_ENGINE_CONST_CMD;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	CRYPTO_ENGINE_CONST_drvrd (SIE_CRYPTO_ENGINE_CONST *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	CRYPTO_ENGINE_CONST_drvwr (SIE_CRYPTO_ENGINE_CONST *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	CRYPTO_ENGINE_CONST_reset (SIE_CRYPTO_ENGINE_CONST *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	CRYPTO_ENGINE_CONST_check(p,pie,ps8name,hfpErrLOG)		CRYPTO_ENGINE_CONST_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	CRYPTO_ENGINE_CONST_print(p,    ps8name,hfpErrLOG)		CRYPTO_ENGINE_CONST_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	CRYPTO_ENGINE_CONST_cmp   (SIE_CRYPTO_ENGINE_CONST *p, SIE_CRYPTO_ENGINE_CONST *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	CRYPTO_ENGINE_CONST_import(SIE_CRYPTO_ENGINE_CONST *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	CRYPTO_ENGINE_CONST_export(SIE_CRYPTO_ENGINE_CONST *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: CRYPTO_ENGINE_CONST
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: SPHAL_CMD_HASH
*	@
*		%unsigned  8  cmdCode  0
*						*  *
*						*  DRMCMD_SHA1_START
*						*  DRMCMD_SHA1_UPDATE
*						*  DRMCMD_SHA1_END.
*						*  DRMCMD_HMAC_START
*						*  DRMCMD_HMAC_UPDATE
*						*  DRMCMD_HMAC_END
*						*  0
*		%unsigned  8  cmdID  0
*						*  *
*						*  Command ID
*						*  0
*	@
*		$DRM_CTXID  hashID  0
*						*  *
*						*  Hash conetxt ID
*						*  0
*	@
*		%unsigned  32  datSize  0
*						*  *
*						*  The number of bytes in DAT_SRCADDR.
*						*  0
*	@
*		%unsigned  32  datSrcAddr  0
*						*  *
*						*  DDR address where the data is stored
*	@
*		%unsigned  32  hashValueAddr  0
*						*  *
*						*  Key context ID
*	@
*		%unsigned  32  reserved  0
**********************************************************************************************************************/
#ifdef	h_SPHAL_CMD_HASH
#else
#define	h_SPHAL_CMD_HASH

#define	\
	AR_SPHAL_CMD_HASH \
		6
#define	\
	AB_SPHAL_CMD_HASH \
		5

typedef struct SIE_SPHAL_CMD_HASH {

	#define	RA_SPHAL_CMD_HASH_D0th_ 	ISC_USE_ONLY	0x00000
	#define	w32SPHAL_CMD_HASH_D0th_ 	{										\
					UNSG32				u_cmdCode					 :  8;		\
					UNSG32				u_cmdID						 :  8;		\
					UNSG32				_x00000	: 16;							\
										}
	/* @'00000 */				struct	w32SPHAL_CMD_HASH_D0th_;

	/* [ 7: 0] */	#define	  BA_SPHAL_CMD_HASH_cmdCode				 0x00000
	/* ---:--- */	#define	    bSPHAL_CMD_HASH_cmdCode				    8 /*bit*/
	/* ---:--- */	#define	LSb32SPHAL_CMD_HASH_cmdCode				    0 /*: 7*/
	/* ---:--- */	#define	MSK32SPHAL_CMD_HASH_cmdCode				       0x000000FF
	/* ---:--- */	#define	GET32SPHAL_CMD_HASH_cmdCode(r32)			 (((r32)>> 0)&0x00FF)
	/* ---:--- */	#define	GET16SPHAL_CMD_HASH_cmdCode(r16)			 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32SPHAL_CMD_HASH_cmdCode(r32,v)			do{(r32)&=~(0x00FF<< 0);(r32)|=((v)&0x00FF)<< 0;}while(0)
	/* ---:--- */	#define	SET16SPHAL_CMD_HASH_cmdCode(r16,v)			do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	/* [15: 8] */	#define	  BA_SPHAL_CMD_HASH_cmdID				 0x00001
	/* ---:--- */	#define	    bSPHAL_CMD_HASH_cmdID				    8 /*bit*/
	/* ---:--- */	#define	LSb32SPHAL_CMD_HASH_cmdID				    8 /*:15*/
	/* ---:--- */	#define	MSK32SPHAL_CMD_HASH_cmdID				       0x0000FF00
	/* ---:--- */	#define	GET32SPHAL_CMD_HASH_cmdID(r32)				 (((r32)>> 8)&0x00FF)
	/* ---:--- */	#define	GET16SPHAL_CMD_HASH_cmdID(r16)				 (((r16)>> 8)&0x00FF)
	/* ---:--- */	#define	SET32SPHAL_CMD_HASH_cmdID(r32,v)			do{(r32)&=~(0x00FF<< 8);(r32)|=((v)&0x00FF)<< 8;}while(0)
	/* ---:--- */	#define	SET16SPHAL_CMD_HASH_cmdID(r16,v)			do{(r16)&=~(0x00FF<< 8);(r16)|=((v)&0x00FF)<< 8;}while(0)

	#define	RA_SPHAL_CMD_HASH_hashID 	0x00004
	/* @'00004 */	SIE_DRM_CTXID 				ie_hashID;

	#define	RA_SPHAL_CMD_HASH_D2th_ 	ISC_USE_ONLY	0x00008
	#define	w32SPHAL_CMD_HASH_D2th_ 	{										\
					UNSG32				u_datSize					 : 32;		\
										}
	/* @'00008 */				struct	w32SPHAL_CMD_HASH_D2th_;

	/* [31: 0] */	#define	  BA_SPHAL_CMD_HASH_datSize				 0x00008
	/* ---:--- */	#define	    bSPHAL_CMD_HASH_datSize				   32 /*bit*/
	/* ---:--- */	#define	LSb32SPHAL_CMD_HASH_datSize				    0 /*:31*/
	/* ---:--- */	#define	MSK32SPHAL_CMD_HASH_datSize				       0xFFFFFFFF
	/* ---:--- */	#define	GET32SPHAL_CMD_HASH_datSize(r32)			 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16SPHAL_CMD_HASH_datSize(r16)			 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32SPHAL_CMD_HASH_datSize(r32,v)			do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16SPHAL_CMD_HASH_datSize(r16,v)			do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_SPHAL_CMD_HASH_D3th_ 	ISC_USE_ONLY	0x0000C
	#define	w32SPHAL_CMD_HASH_D3th_ 	{										\
					UNSG32				u_datSrcAddr				 : 32;		\
										}
	/* @'0000C */				struct	w32SPHAL_CMD_HASH_D3th_;

	/* [31: 0] */	#define	  BA_SPHAL_CMD_HASH_datSrcAddr			 0x0000C
	/* ---:--- */	#define	    bSPHAL_CMD_HASH_datSrcAddr			   32 /*bit*/
	/* ---:--- */	#define	LSb32SPHAL_CMD_HASH_datSrcAddr			    0 /*:31*/
	/* ---:--- */	#define	MSK32SPHAL_CMD_HASH_datSrcAddr			       0xFFFFFFFF
	/* ---:--- */	#define	GET32SPHAL_CMD_HASH_datSrcAddr(r32)			 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16SPHAL_CMD_HASH_datSrcAddr(r16)			 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32SPHAL_CMD_HASH_datSrcAddr(r32,v)		do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16SPHAL_CMD_HASH_datSrcAddr(r16,v)		do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_SPHAL_CMD_HASH_D4th_ 	ISC_USE_ONLY	0x00010
	#define	w32SPHAL_CMD_HASH_D4th_ 	{										\
					UNSG32				u_hashValueAddr				 : 32;		\
										}
	/* @'00010 */				struct	w32SPHAL_CMD_HASH_D4th_;

	/* [31: 0] */	#define	  BA_SPHAL_CMD_HASH_hashValueAddr		 0x00010
	/* ---:--- */	#define	    bSPHAL_CMD_HASH_hashValueAddr		   32 /*bit*/
	/* ---:--- */	#define	LSb32SPHAL_CMD_HASH_hashValueAddr		    0 /*:31*/
	/* ---:--- */	#define	MSK32SPHAL_CMD_HASH_hashValueAddr		       0xFFFFFFFF
	/* ---:--- */	#define	GET32SPHAL_CMD_HASH_hashValueAddr(r32)		 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16SPHAL_CMD_HASH_hashValueAddr(r16)		 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32SPHAL_CMD_HASH_hashValueAddr(r32,v)	do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16SPHAL_CMD_HASH_hashValueAddr(r16,v)	do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_SPHAL_CMD_HASH_D5th_ 	ISC_USE_ONLY	0x00014
	#define	w32SPHAL_CMD_HASH_D5th_ 	{										\
					UNSG32				u_reserved					 : 32;		\
										}
	/* @'00014 */				struct	w32SPHAL_CMD_HASH_D5th_;

	/* [31: 0] */	#define	  BA_SPHAL_CMD_HASH_reserved			 0x00014
	/* ---:--- */	#define	    bSPHAL_CMD_HASH_reserved			   32 /*bit*/
	/* ---:--- */	#define	LSb32SPHAL_CMD_HASH_reserved			    0 /*:31*/
	/* ---:--- */	#define	MSK32SPHAL_CMD_HASH_reserved			       0xFFFFFFFF
	/* ---:--- */	#define	GET32SPHAL_CMD_HASH_reserved(r32)			 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16SPHAL_CMD_HASH_reserved(r16)			 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32SPHAL_CMD_HASH_reserved(r32,v)			do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16SPHAL_CMD_HASH_reserved(r16,v)			do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

} SIE_SPHAL_CMD_HASH;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	SPHAL_CMD_HASH_drvrd (SIE_SPHAL_CMD_HASH *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	SPHAL_CMD_HASH_drvwr (SIE_SPHAL_CMD_HASH *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	SPHAL_CMD_HASH_reset (SIE_SPHAL_CMD_HASH *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	SPHAL_CMD_HASH_check(p,pie,ps8name,hfpErrLOG)		SPHAL_CMD_HASH_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	SPHAL_CMD_HASH_print(p,    ps8name,hfpErrLOG)		SPHAL_CMD_HASH_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	SPHAL_CMD_HASH_cmp   (SIE_SPHAL_CMD_HASH *p, SIE_SPHAL_CMD_HASH *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	SPHAL_CMD_HASH_import(SIE_SPHAL_CMD_HASH *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	SPHAL_CMD_HASH_export(SIE_SPHAL_CMD_HASH *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: SPHAL_CMD_HASH
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: SPHAL_CMD_ENCDEC
*	@
*		%unsigned  8  cmdCode  0
*						*  *
*						*  DRMCMD_AES128_ENC
*						*  DRMCMD_AES128_DEC
*						*  DRMCMD_DES_ENC
*						*  DRMCMD_DES_DEC
*						*  DRMCMD_3xDES_ENC
*						*  DRMCMD_3xDES_DEC
*						*  0
*		%unsigned  8  cmdID  0
*						*  *
*						*  Command ID
*						*  0
*	@
*		$DRM_CTXID  keyID  0
*						*  *
*						*  Key context ID
*						*  0
*	@
*		%unsigned  32  datSize  0
*						*  *
*						*  The number of bytes in DAT_SRCADDR.
*						*  0
*	@
*		%unsigned  32  datSrcAddr  0
*						*  *
*						*  DDR address where the data is stored
*	@
*		%unsigned  32  datDstAddr  0
*						*  *
*						*  DDR or SRAM address where the data is stored
*	@
*		%unsigned  32  reserved  0
**********************************************************************************************************************/
#ifdef	h_SPHAL_CMD_ENCDEC
#else
#define	h_SPHAL_CMD_ENCDEC

#define	\
	AR_SPHAL_CMD_ENCDEC \
		6
#define	\
	AB_SPHAL_CMD_ENCDEC \
		5

typedef struct SIE_SPHAL_CMD_ENCDEC {

	#define	RA_SPHAL_CMD_ENCDEC_D0th_ 	ISC_USE_ONLY	0x00000
	#define	w32SPHAL_CMD_ENCDEC_D0th_ 	{										\
					UNSG32				u_cmdCode					 :  8;		\
					UNSG32				u_cmdID						 :  8;		\
					UNSG32				_x00000	: 16;							\
										}
	/* @'00000 */				struct	w32SPHAL_CMD_ENCDEC_D0th_;

	/* [ 7: 0] */	#define	  BA_SPHAL_CMD_ENCDEC_cmdCode			 0x00000
	/* ---:--- */	#define	    bSPHAL_CMD_ENCDEC_cmdCode			    8 /*bit*/
	/* ---:--- */	#define	LSb32SPHAL_CMD_ENCDEC_cmdCode			    0 /*: 7*/
	/* ---:--- */	#define	MSK32SPHAL_CMD_ENCDEC_cmdCode			       0x000000FF
	/* ---:--- */	#define	GET32SPHAL_CMD_ENCDEC_cmdCode(r32)			 (((r32)>> 0)&0x00FF)
	/* ---:--- */	#define	GET16SPHAL_CMD_ENCDEC_cmdCode(r16)			 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32SPHAL_CMD_ENCDEC_cmdCode(r32,v)		do{(r32)&=~(0x00FF<< 0);(r32)|=((v)&0x00FF)<< 0;}while(0)
	/* ---:--- */	#define	SET16SPHAL_CMD_ENCDEC_cmdCode(r16,v)		do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	/* [15: 8] */	#define	  BA_SPHAL_CMD_ENCDEC_cmdID				 0x00001
	/* ---:--- */	#define	    bSPHAL_CMD_ENCDEC_cmdID				    8 /*bit*/
	/* ---:--- */	#define	LSb32SPHAL_CMD_ENCDEC_cmdID				    8 /*:15*/
	/* ---:--- */	#define	MSK32SPHAL_CMD_ENCDEC_cmdID				       0x0000FF00
	/* ---:--- */	#define	GET32SPHAL_CMD_ENCDEC_cmdID(r32)			 (((r32)>> 8)&0x00FF)
	/* ---:--- */	#define	GET16SPHAL_CMD_ENCDEC_cmdID(r16)			 (((r16)>> 8)&0x00FF)
	/* ---:--- */	#define	SET32SPHAL_CMD_ENCDEC_cmdID(r32,v)			do{(r32)&=~(0x00FF<< 8);(r32)|=((v)&0x00FF)<< 8;}while(0)
	/* ---:--- */	#define	SET16SPHAL_CMD_ENCDEC_cmdID(r16,v)			do{(r16)&=~(0x00FF<< 8);(r16)|=((v)&0x00FF)<< 8;}while(0)

	#define	RA_SPHAL_CMD_ENCDEC_keyID 	0x00004
	/* @'00004 */	SIE_DRM_CTXID 				ie_keyID;

	#define	RA_SPHAL_CMD_ENCDEC_D2th_ 	ISC_USE_ONLY	0x00008
	#define	w32SPHAL_CMD_ENCDEC_D2th_ 	{										\
					UNSG32				u_datSize					 : 32;		\
										}
	/* @'00008 */				struct	w32SPHAL_CMD_ENCDEC_D2th_;

	/* [31: 0] */	#define	  BA_SPHAL_CMD_ENCDEC_datSize			 0x00008
	/* ---:--- */	#define	    bSPHAL_CMD_ENCDEC_datSize			   32 /*bit*/
	/* ---:--- */	#define	LSb32SPHAL_CMD_ENCDEC_datSize			    0 /*:31*/
	/* ---:--- */	#define	MSK32SPHAL_CMD_ENCDEC_datSize			       0xFFFFFFFF
	/* ---:--- */	#define	GET32SPHAL_CMD_ENCDEC_datSize(r32)			 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16SPHAL_CMD_ENCDEC_datSize(r16)			 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32SPHAL_CMD_ENCDEC_datSize(r32,v)		do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16SPHAL_CMD_ENCDEC_datSize(r16,v)		do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_SPHAL_CMD_ENCDEC_D3th_ 	ISC_USE_ONLY	0x0000C
	#define	w32SPHAL_CMD_ENCDEC_D3th_ 	{										\
					UNSG32				u_datSrcAddr				 : 32;		\
										}
	/* @'0000C */				struct	w32SPHAL_CMD_ENCDEC_D3th_;

	/* [31: 0] */	#define	  BA_SPHAL_CMD_ENCDEC_datSrcAddr		 0x0000C
	/* ---:--- */	#define	    bSPHAL_CMD_ENCDEC_datSrcAddr		   32 /*bit*/
	/* ---:--- */	#define	LSb32SPHAL_CMD_ENCDEC_datSrcAddr		    0 /*:31*/
	/* ---:--- */	#define	MSK32SPHAL_CMD_ENCDEC_datSrcAddr		       0xFFFFFFFF
	/* ---:--- */	#define	GET32SPHAL_CMD_ENCDEC_datSrcAddr(r32)		 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16SPHAL_CMD_ENCDEC_datSrcAddr(r16)		 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32SPHAL_CMD_ENCDEC_datSrcAddr(r32,v)		do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16SPHAL_CMD_ENCDEC_datSrcAddr(r16,v)		do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_SPHAL_CMD_ENCDEC_D4th_ 	ISC_USE_ONLY	0x00010
	#define	w32SPHAL_CMD_ENCDEC_D4th_ 	{										\
					UNSG32				u_datDstAddr				 : 32;		\
										}
	/* @'00010 */				struct	w32SPHAL_CMD_ENCDEC_D4th_;

	/* [31: 0] */	#define	  BA_SPHAL_CMD_ENCDEC_datDstAddr		 0x00010
	/* ---:--- */	#define	    bSPHAL_CMD_ENCDEC_datDstAddr		   32 /*bit*/
	/* ---:--- */	#define	LSb32SPHAL_CMD_ENCDEC_datDstAddr		    0 /*:31*/
	/* ---:--- */	#define	MSK32SPHAL_CMD_ENCDEC_datDstAddr		       0xFFFFFFFF
	/* ---:--- */	#define	GET32SPHAL_CMD_ENCDEC_datDstAddr(r32)		 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16SPHAL_CMD_ENCDEC_datDstAddr(r16)		 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32SPHAL_CMD_ENCDEC_datDstAddr(r32,v)		do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16SPHAL_CMD_ENCDEC_datDstAddr(r16,v)		do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_SPHAL_CMD_ENCDEC_D5th_ 	ISC_USE_ONLY	0x00014
	#define	w32SPHAL_CMD_ENCDEC_D5th_ 	{										\
					UNSG32				u_reserved					 : 32;		\
										}
	/* @'00014 */				struct	w32SPHAL_CMD_ENCDEC_D5th_;

	/* [31: 0] */	#define	  BA_SPHAL_CMD_ENCDEC_reserved			 0x00014
	/* ---:--- */	#define	    bSPHAL_CMD_ENCDEC_reserved			   32 /*bit*/
	/* ---:--- */	#define	LSb32SPHAL_CMD_ENCDEC_reserved			    0 /*:31*/
	/* ---:--- */	#define	MSK32SPHAL_CMD_ENCDEC_reserved			       0xFFFFFFFF
	/* ---:--- */	#define	GET32SPHAL_CMD_ENCDEC_reserved(r32)			 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16SPHAL_CMD_ENCDEC_reserved(r16)			 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32SPHAL_CMD_ENCDEC_reserved(r32,v)		do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16SPHAL_CMD_ENCDEC_reserved(r16,v)		do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

} SIE_SPHAL_CMD_ENCDEC;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	SPHAL_CMD_ENCDEC_drvrd (SIE_SPHAL_CMD_ENCDEC *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	SPHAL_CMD_ENCDEC_drvwr (SIE_SPHAL_CMD_ENCDEC *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	SPHAL_CMD_ENCDEC_reset (SIE_SPHAL_CMD_ENCDEC *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	SPHAL_CMD_ENCDEC_check(p,pie,ps8name,hfpErrLOG)		SPHAL_CMD_ENCDEC_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	SPHAL_CMD_ENCDEC_print(p,    ps8name,hfpErrLOG)		SPHAL_CMD_ENCDEC_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	SPHAL_CMD_ENCDEC_cmp   (SIE_SPHAL_CMD_ENCDEC *p, SIE_SPHAL_CMD_ENCDEC *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	SPHAL_CMD_ENCDEC_import(SIE_SPHAL_CMD_ENCDEC *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	SPHAL_CMD_ENCDEC_export(SIE_SPHAL_CMD_ENCDEC *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: SPHAL_CMD_ENCDEC
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: SPHAL_CMD_RNG
*	@
*		%unsigned  8  cmdCode  0
*						*  *
*						*  0
*		%unsigned  8  cmdID  0
*						*  *
*						*  Command ID
*						*  0
*	@
*		$DRM_CTXID  keyID  0
*						*  *
*						*  Key context ID
*						*  0
*	@
*		%unsigned  32  datSize  0
*						*  *
*						*  The number of bytes in DAT_SRCADDR.
*						*  0
*	@
*		%unsigned  32  datAddr  0
*						*  *
*						*  DDR address where the data is stored
*	@
*		%unsigned  32  pad  0
*						*  *
*	@
*		%unsigned  32  reserved  0
**********************************************************************************************************************/
#ifdef	h_SPHAL_CMD_RNG
#else
#define	h_SPHAL_CMD_RNG

#define	\
	AR_SPHAL_CMD_RNG \
		6
#define	\
	AB_SPHAL_CMD_RNG \
		5

typedef struct SIE_SPHAL_CMD_RNG {

	#define	RA_SPHAL_CMD_RNG_D0th_ 		ISC_USE_ONLY	0x00000
	#define	w32SPHAL_CMD_RNG_D0th_ 		{										\
					UNSG32				u_cmdCode					 :  8;		\
					UNSG32				u_cmdID						 :  8;		\
					UNSG32				_x00000	: 16;							\
										}
	/* @'00000 */				struct	w32SPHAL_CMD_RNG_D0th_;

	/* [ 7: 0] */	#define	  BA_SPHAL_CMD_RNG_cmdCode				 0x00000
	/* ---:--- */	#define	    bSPHAL_CMD_RNG_cmdCode				    8 /*bit*/
	/* ---:--- */	#define	LSb32SPHAL_CMD_RNG_cmdCode				    0 /*: 7*/
	/* ---:--- */	#define	MSK32SPHAL_CMD_RNG_cmdCode				       0x000000FF
	/* ---:--- */	#define	GET32SPHAL_CMD_RNG_cmdCode(r32)				 (((r32)>> 0)&0x00FF)
	/* ---:--- */	#define	GET16SPHAL_CMD_RNG_cmdCode(r16)				 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32SPHAL_CMD_RNG_cmdCode(r32,v)			do{(r32)&=~(0x00FF<< 0);(r32)|=((v)&0x00FF)<< 0;}while(0)
	/* ---:--- */	#define	SET16SPHAL_CMD_RNG_cmdCode(r16,v)			do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	/* [15: 8] */	#define	  BA_SPHAL_CMD_RNG_cmdID				 0x00001
	/* ---:--- */	#define	    bSPHAL_CMD_RNG_cmdID				    8 /*bit*/
	/* ---:--- */	#define	LSb32SPHAL_CMD_RNG_cmdID				    8 /*:15*/
	/* ---:--- */	#define	MSK32SPHAL_CMD_RNG_cmdID				       0x0000FF00
	/* ---:--- */	#define	GET32SPHAL_CMD_RNG_cmdID(r32)				 (((r32)>> 8)&0x00FF)
	/* ---:--- */	#define	GET16SPHAL_CMD_RNG_cmdID(r16)				 (((r16)>> 8)&0x00FF)
	/* ---:--- */	#define	SET32SPHAL_CMD_RNG_cmdID(r32,v)				do{(r32)&=~(0x00FF<< 8);(r32)|=((v)&0x00FF)<< 8;}while(0)
	/* ---:--- */	#define	SET16SPHAL_CMD_RNG_cmdID(r16,v)				do{(r16)&=~(0x00FF<< 8);(r16)|=((v)&0x00FF)<< 8;}while(0)

	#define	RA_SPHAL_CMD_RNG_keyID 		0x00004
	/* @'00004 */	SIE_DRM_CTXID 				ie_keyID;

	#define	RA_SPHAL_CMD_RNG_D2th_ 		ISC_USE_ONLY	0x00008
	#define	w32SPHAL_CMD_RNG_D2th_ 		{										\
					UNSG32				u_datSize					 : 32;		\
										}
	/* @'00008 */				struct	w32SPHAL_CMD_RNG_D2th_;

	/* [31: 0] */	#define	  BA_SPHAL_CMD_RNG_datSize				 0x00008
	/* ---:--- */	#define	    bSPHAL_CMD_RNG_datSize				   32 /*bit*/
	/* ---:--- */	#define	LSb32SPHAL_CMD_RNG_datSize				    0 /*:31*/
	/* ---:--- */	#define	MSK32SPHAL_CMD_RNG_datSize				       0xFFFFFFFF
	/* ---:--- */	#define	GET32SPHAL_CMD_RNG_datSize(r32)				 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16SPHAL_CMD_RNG_datSize(r16)				 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32SPHAL_CMD_RNG_datSize(r32,v)			do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16SPHAL_CMD_RNG_datSize(r16,v)			do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_SPHAL_CMD_RNG_D3th_ 		ISC_USE_ONLY	0x0000C
	#define	w32SPHAL_CMD_RNG_D3th_ 		{										\
					UNSG32				u_datAddr					 : 32;		\
										}
	/* @'0000C */				struct	w32SPHAL_CMD_RNG_D3th_;

	/* [31: 0] */	#define	  BA_SPHAL_CMD_RNG_datAddr				 0x0000C
	/* ---:--- */	#define	    bSPHAL_CMD_RNG_datAddr				   32 /*bit*/
	/* ---:--- */	#define	LSb32SPHAL_CMD_RNG_datAddr				    0 /*:31*/
	/* ---:--- */	#define	MSK32SPHAL_CMD_RNG_datAddr				       0xFFFFFFFF
	/* ---:--- */	#define	GET32SPHAL_CMD_RNG_datAddr(r32)				 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16SPHAL_CMD_RNG_datAddr(r16)				 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32SPHAL_CMD_RNG_datAddr(r32,v)			do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16SPHAL_CMD_RNG_datAddr(r16,v)			do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_SPHAL_CMD_RNG_D4th_ 		ISC_USE_ONLY	0x00010
	#define	w32SPHAL_CMD_RNG_D4th_ 		{										\
					UNSG32				u_pad						 : 32;		\
										}
	/* @'00010 */				struct	w32SPHAL_CMD_RNG_D4th_;

	/* [31: 0] */	#define	  BA_SPHAL_CMD_RNG_pad					 0x00010
	/* ---:--- */	#define	    bSPHAL_CMD_RNG_pad					   32 /*bit*/
	/* ---:--- */	#define	LSb32SPHAL_CMD_RNG_pad					    0 /*:31*/
	/* ---:--- */	#define	MSK32SPHAL_CMD_RNG_pad					       0xFFFFFFFF
	/* ---:--- */	#define	GET32SPHAL_CMD_RNG_pad(r32)					 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16SPHAL_CMD_RNG_pad(r16)					 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32SPHAL_CMD_RNG_pad(r32,v)				do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16SPHAL_CMD_RNG_pad(r16,v)				do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_SPHAL_CMD_RNG_D5th_ 		ISC_USE_ONLY	0x00014
	#define	w32SPHAL_CMD_RNG_D5th_ 		{										\
					UNSG32				u_reserved					 : 32;		\
										}
	/* @'00014 */				struct	w32SPHAL_CMD_RNG_D5th_;

	/* [31: 0] */	#define	  BA_SPHAL_CMD_RNG_reserved				 0x00014
	/* ---:--- */	#define	    bSPHAL_CMD_RNG_reserved				   32 /*bit*/
	/* ---:--- */	#define	LSb32SPHAL_CMD_RNG_reserved				    0 /*:31*/
	/* ---:--- */	#define	MSK32SPHAL_CMD_RNG_reserved				       0xFFFFFFFF
	/* ---:--- */	#define	GET32SPHAL_CMD_RNG_reserved(r32)			 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16SPHAL_CMD_RNG_reserved(r16)			 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32SPHAL_CMD_RNG_reserved(r32,v)			do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16SPHAL_CMD_RNG_reserved(r16,v)			do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

} SIE_SPHAL_CMD_RNG;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	SPHAL_CMD_RNG_drvrd (SIE_SPHAL_CMD_RNG *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	SPHAL_CMD_RNG_drvwr (SIE_SPHAL_CMD_RNG *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	SPHAL_CMD_RNG_reset (SIE_SPHAL_CMD_RNG *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	SPHAL_CMD_RNG_check(p,pie,ps8name,hfpErrLOG)		SPHAL_CMD_RNG_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	SPHAL_CMD_RNG_print(p,    ps8name,hfpErrLOG)		SPHAL_CMD_RNG_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	SPHAL_CMD_RNG_cmp   (SIE_SPHAL_CMD_RNG *p, SIE_SPHAL_CMD_RNG *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	SPHAL_CMD_RNG_import(SIE_SPHAL_CMD_RNG *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	SPHAL_CMD_RNG_export(SIE_SPHAL_CMD_RNG *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: SPHAL_CMD_RNG
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: SPHAL_CMD_RC4
*	@
*		%unsigned  8  cmdCode  0
*						*  *
*						*  DRMCMD_SHA1_START
*						*  DRMCMD_SHA1_UPDATE
*						*  DRMCMD_SHA1_END.
*						*  DRMCMD_HMAC_START
*						*  DRMCMD_HMAC_UPDATE
*						*  DRMCMD_HMAC_END
*						*  0
*		%unsigned  8  cmdID  0
*						*  *
*						*  Command ID
*						*  0
*	@
*		$DRM_CTXID  keyID  0
*						*  *
*						*  Hash conetxt ID
*						*  0
*	@
*		%unsigned  32  datSize  0
*						*  *
*						*  The number of bytes in DAT_SRCADDR.
*						*  0
*	@
*		%unsigned  32  datSrcAddr  0
*						*  *
*						*  DDR address where the data is stored
*	@
*		%unsigned  32  datDstAddr  0
*						*  *
*						*  Key context ID
*	@
*		%unsigned  32  keyLen  0
*						*  *
*						*  RC4 Key length
**********************************************************************************************************************/
#ifdef	h_SPHAL_CMD_RC4
#else
#define	h_SPHAL_CMD_RC4

#define	\
	AR_SPHAL_CMD_RC4 \
		6
#define	\
	AB_SPHAL_CMD_RC4 \
		5

typedef struct SIE_SPHAL_CMD_RC4 {

	#define	RA_SPHAL_CMD_RC4_D0th_ 		ISC_USE_ONLY	0x00000
	#define	w32SPHAL_CMD_RC4_D0th_ 		{										\
					UNSG32				u_cmdCode					 :  8;		\
					UNSG32				u_cmdID						 :  8;		\
					UNSG32				_x00000	: 16;							\
										}
	/* @'00000 */				struct	w32SPHAL_CMD_RC4_D0th_;

	/* [ 7: 0] */	#define	  BA_SPHAL_CMD_RC4_cmdCode				 0x00000
	/* ---:--- */	#define	    bSPHAL_CMD_RC4_cmdCode				    8 /*bit*/
	/* ---:--- */	#define	LSb32SPHAL_CMD_RC4_cmdCode				    0 /*: 7*/
	/* ---:--- */	#define	MSK32SPHAL_CMD_RC4_cmdCode				       0x000000FF
	/* ---:--- */	#define	GET32SPHAL_CMD_RC4_cmdCode(r32)				 (((r32)>> 0)&0x00FF)
	/* ---:--- */	#define	GET16SPHAL_CMD_RC4_cmdCode(r16)				 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32SPHAL_CMD_RC4_cmdCode(r32,v)			do{(r32)&=~(0x00FF<< 0);(r32)|=((v)&0x00FF)<< 0;}while(0)
	/* ---:--- */	#define	SET16SPHAL_CMD_RC4_cmdCode(r16,v)			do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	/* [15: 8] */	#define	  BA_SPHAL_CMD_RC4_cmdID				 0x00001
	/* ---:--- */	#define	    bSPHAL_CMD_RC4_cmdID				    8 /*bit*/
	/* ---:--- */	#define	LSb32SPHAL_CMD_RC4_cmdID				    8 /*:15*/
	/* ---:--- */	#define	MSK32SPHAL_CMD_RC4_cmdID				       0x0000FF00
	/* ---:--- */	#define	GET32SPHAL_CMD_RC4_cmdID(r32)				 (((r32)>> 8)&0x00FF)
	/* ---:--- */	#define	GET16SPHAL_CMD_RC4_cmdID(r16)				 (((r16)>> 8)&0x00FF)
	/* ---:--- */	#define	SET32SPHAL_CMD_RC4_cmdID(r32,v)				do{(r32)&=~(0x00FF<< 8);(r32)|=((v)&0x00FF)<< 8;}while(0)
	/* ---:--- */	#define	SET16SPHAL_CMD_RC4_cmdID(r16,v)				do{(r16)&=~(0x00FF<< 8);(r16)|=((v)&0x00FF)<< 8;}while(0)

	#define	RA_SPHAL_CMD_RC4_keyID 		0x00004
	/* @'00004 */	SIE_DRM_CTXID 				ie_keyID;

	#define	RA_SPHAL_CMD_RC4_D2th_ 		ISC_USE_ONLY	0x00008
	#define	w32SPHAL_CMD_RC4_D2th_ 		{										\
					UNSG32				u_datSize					 : 32;		\
										}
	/* @'00008 */				struct	w32SPHAL_CMD_RC4_D2th_;

	/* [31: 0] */	#define	  BA_SPHAL_CMD_RC4_datSize				 0x00008
	/* ---:--- */	#define	    bSPHAL_CMD_RC4_datSize				   32 /*bit*/
	/* ---:--- */	#define	LSb32SPHAL_CMD_RC4_datSize				    0 /*:31*/
	/* ---:--- */	#define	MSK32SPHAL_CMD_RC4_datSize				       0xFFFFFFFF
	/* ---:--- */	#define	GET32SPHAL_CMD_RC4_datSize(r32)				 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16SPHAL_CMD_RC4_datSize(r16)				 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32SPHAL_CMD_RC4_datSize(r32,v)			do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16SPHAL_CMD_RC4_datSize(r16,v)			do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_SPHAL_CMD_RC4_D3th_ 		ISC_USE_ONLY	0x0000C
	#define	w32SPHAL_CMD_RC4_D3th_ 		{										\
					UNSG32				u_datSrcAddr				 : 32;		\
										}
	/* @'0000C */				struct	w32SPHAL_CMD_RC4_D3th_;

	/* [31: 0] */	#define	  BA_SPHAL_CMD_RC4_datSrcAddr			 0x0000C
	/* ---:--- */	#define	    bSPHAL_CMD_RC4_datSrcAddr			   32 /*bit*/
	/* ---:--- */	#define	LSb32SPHAL_CMD_RC4_datSrcAddr			    0 /*:31*/
	/* ---:--- */	#define	MSK32SPHAL_CMD_RC4_datSrcAddr			       0xFFFFFFFF
	/* ---:--- */	#define	GET32SPHAL_CMD_RC4_datSrcAddr(r32)			 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16SPHAL_CMD_RC4_datSrcAddr(r16)			 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32SPHAL_CMD_RC4_datSrcAddr(r32,v)		do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16SPHAL_CMD_RC4_datSrcAddr(r16,v)		do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_SPHAL_CMD_RC4_D4th_ 		ISC_USE_ONLY	0x00010
	#define	w32SPHAL_CMD_RC4_D4th_ 		{										\
					UNSG32				u_datDstAddr				 : 32;		\
										}
	/* @'00010 */				struct	w32SPHAL_CMD_RC4_D4th_;

	/* [31: 0] */	#define	  BA_SPHAL_CMD_RC4_datDstAddr			 0x00010
	/* ---:--- */	#define	    bSPHAL_CMD_RC4_datDstAddr			   32 /*bit*/
	/* ---:--- */	#define	LSb32SPHAL_CMD_RC4_datDstAddr			    0 /*:31*/
	/* ---:--- */	#define	MSK32SPHAL_CMD_RC4_datDstAddr			       0xFFFFFFFF
	/* ---:--- */	#define	GET32SPHAL_CMD_RC4_datDstAddr(r32)			 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16SPHAL_CMD_RC4_datDstAddr(r16)			 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32SPHAL_CMD_RC4_datDstAddr(r32,v)		do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16SPHAL_CMD_RC4_datDstAddr(r16,v)		do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_SPHAL_CMD_RC4_D5th_ 		ISC_USE_ONLY	0x00014
	#define	w32SPHAL_CMD_RC4_D5th_ 		{										\
					UNSG32				u_keyLen					 : 32;		\
										}
	/* @'00014 */				struct	w32SPHAL_CMD_RC4_D5th_;

	/* [31: 0] */	#define	  BA_SPHAL_CMD_RC4_keyLen				 0x00014
	/* ---:--- */	#define	    bSPHAL_CMD_RC4_keyLen				   32 /*bit*/
	/* ---:--- */	#define	LSb32SPHAL_CMD_RC4_keyLen				    0 /*:31*/
	/* ---:--- */	#define	MSK32SPHAL_CMD_RC4_keyLen				       0xFFFFFFFF
	/* ---:--- */	#define	GET32SPHAL_CMD_RC4_keyLen(r32)				 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16SPHAL_CMD_RC4_keyLen(r16)				 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32SPHAL_CMD_RC4_keyLen(r32,v)			do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16SPHAL_CMD_RC4_keyLen(r16,v)			do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

} SIE_SPHAL_CMD_RC4;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	SPHAL_CMD_RC4_drvrd (SIE_SPHAL_CMD_RC4 *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	SPHAL_CMD_RC4_drvwr (SIE_SPHAL_CMD_RC4 *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	SPHAL_CMD_RC4_reset (SIE_SPHAL_CMD_RC4 *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	SPHAL_CMD_RC4_check(p,pie,ps8name,hfpErrLOG)		SPHAL_CMD_RC4_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	SPHAL_CMD_RC4_print(p,    ps8name,hfpErrLOG)		SPHAL_CMD_RC4_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	SPHAL_CMD_RC4_cmp   (SIE_SPHAL_CMD_RC4 *p, SIE_SPHAL_CMD_RC4 *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	SPHAL_CMD_RC4_import(SIE_SPHAL_CMD_RC4 *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	SPHAL_CMD_RC4_export(SIE_SPHAL_CMD_RC4 *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: SPHAL_CMD_RC4
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: OTP_INFO_CTX
*	@
*		$UINT64  rkekCRC
*						*  *
*						*  Row 35
*		$UINT64  bindInfo
*						*  *
*						*  Row 36
*	@
*		$UINT64  userInfo0
*						*  *
*						*  Row 37
*	@
*		$UINT64  userInfo1
*						*  *
*						*  Row 38
*	@
*		$UINT64  serialId
*						*  *
*						*  Row 39
*	@
*		$UINT64  userInfo2
*						*  *
*						*  Row 3
*	@
*		$UINT64  userInfo3
*						*  *
*						*  Row 31 (byte 2 to byte 7)
**********************************************************************************************************************/
#ifdef	h_OTP_INFO_CTX
#else
#define	h_OTP_INFO_CTX

#define	\
	AR_OTP_INFO_CTX \
		14
#define	\
	AB_OTP_INFO_CTX \
		6

typedef struct SIE_OTP_INFO_CTX {

	#define	RA_OTP_INFO_CTX_rkekCRC 	0x00000
	/* @'00000 */	SIE_UINT64 					ie_rkekCRC;

	#define	RA_OTP_INFO_CTX_bindInfo 	0x00008
	/* @'00008 */	SIE_UINT64 					ie_bindInfo;

	#define	RA_OTP_INFO_CTX_userInfo0 	0x00010
	/* @'00010 */	SIE_UINT64 					ie_userInfo0;

	#define	RA_OTP_INFO_CTX_userInfo1 	0x00018
	/* @'00018 */	SIE_UINT64 					ie_userInfo1;

	#define	RA_OTP_INFO_CTX_serialId 	0x00020
	/* @'00020 */	SIE_UINT64 					ie_serialId;

	#define	RA_OTP_INFO_CTX_userInfo2 	0x00028
	/* @'00028 */	SIE_UINT64 					ie_userInfo2;

	#define	RA_OTP_INFO_CTX_userInfo3 	0x00030
	/* @'00030 */	SIE_UINT64 					ie_userInfo3;

} SIE_OTP_INFO_CTX;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	OTP_INFO_CTX_drvrd (SIE_OTP_INFO_CTX *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	OTP_INFO_CTX_drvwr (SIE_OTP_INFO_CTX *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	OTP_INFO_CTX_reset (SIE_OTP_INFO_CTX *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	OTP_INFO_CTX_check(p,pie,ps8name,hfpErrLOG)		OTP_INFO_CTX_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	OTP_INFO_CTX_print(p,    ps8name,hfpErrLOG)		OTP_INFO_CTX_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	OTP_INFO_CTX_cmp   (SIE_OTP_INFO_CTX *p, SIE_OTP_INFO_CTX *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	OTP_INFO_CTX_import(SIE_OTP_INFO_CTX *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	OTP_INFO_CTX_export(SIE_OTP_INFO_CTX *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: OTP_INFO_CTX
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: CRYPTO_ENGINE_CTX
*	@
*		%unsigned  16  engineState
*						*  *
*						*  State of Crypto Engine
*						*  00: Engine is idle
*						*  01: Cmd is ready
*		%unsigned  16  padding
*		%unsigned  8  engineType
*		%unsigned  8  mode
*		%unsigned  8  isKeyReady
*						*  *
*						*  0: key is not ready
*						*  1: key data is ready
*						*  2: use internal key, keyId used as index
*		%unsigned  8  keyId
*	@
*		$UINT64  cmdBuf  REG  [3]
*	@
*		$UINT64  keyDat  REG  [4]
*	@
*		$SHA1_CTXDAT  shaCtx
*	@
*		$RC4_CTXDAT  rc4Ctx
*	@
*		$UINT64  IV  REG  [2]
*	@
*		$UINT64  pRndKey  REG  [32]
*	@
*		$UINT64  pRootKey  REG  [4]
**********************************************************************************************************************/
#ifdef	h_CRYPTO_ENGINE_CTX
#else
#define	h_CRYPTO_ENGINE_CTX

#define	\
	AR_CRYPTO_ENGINE_CTX \
		246
#define	\
	AB_CRYPTO_ENGINE_CTX \
		10

typedef struct SIE_CRYPTO_ENGINE_CTX {

	#define	RA_CRYPTO_ENGINE_CTX_D0th_ 	ISC_USE_ONLY	0x00000
	#define	w32CRYPTO_ENGINE_CTX_D0th_ 	{										\
					UNSG32				u_engineState				 : 16;		\
					UNSG32				u_padding					 : 16;		\
										}
	/* @'00000 */				struct	w32CRYPTO_ENGINE_CTX_D0th_;

	/* [15: 0] */	#define	  BA_CRYPTO_ENGINE_CTX_engineState		 0x00000
	/* ---:--- */	#define	    bCRYPTO_ENGINE_CTX_engineState		   16 /*bit*/
	/* ---:--- */	#define	LSb32CRYPTO_ENGINE_CTX_engineState		    0 /*:15*/
	/* ---:--- */	#define	MSK32CRYPTO_ENGINE_CTX_engineState		       0x0000FFFF
	/* ---:--- */	#define	GET32CRYPTO_ENGINE_CTX_engineState(r32)		 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16CRYPTO_ENGINE_CTX_engineState(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32CRYPTO_ENGINE_CTX_engineState(r32,v)	do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16CRYPTO_ENGINE_CTX_engineState(r16,v)	do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_CRYPTO_ENGINE_CTX_padding			 0x00002
	/* ---:--- */	#define	    bCRYPTO_ENGINE_CTX_padding			   16 /*bit*/
	/* ---:--- */	#define	LSb32CRYPTO_ENGINE_CTX_padding			   16 /*:31*/
	/* ---:--- */	#define	MSK32CRYPTO_ENGINE_CTX_padding			       0xFFFF0000
	/* ---:--- */	#define	GET32CRYPTO_ENGINE_CTX_padding(r32)			 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16CRYPTO_ENGINE_CTX_padding(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32CRYPTO_ENGINE_CTX_padding(r32,v)		do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16CRYPTO_ENGINE_CTX_padding(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_CRYPTO_ENGINE_CTX_D1th_ 	ISC_USE_ONLY	0x00004
	#define	w32CRYPTO_ENGINE_CTX_D1th_ 	{										\
					UNSG32				u_engineType				 :  8;		\
					UNSG32				u_mode						 :  8;		\
					UNSG32				u_isKeyReady				 :  8;		\
					UNSG32				u_keyId						 :  8;		\
										}
	/* @'00004 */				struct	w32CRYPTO_ENGINE_CTX_D1th_;

	/* [ 7: 0] */	#define	  BA_CRYPTO_ENGINE_CTX_engineType		 0x00004
	/* ---:--- */	#define	    bCRYPTO_ENGINE_CTX_engineType		    8 /*bit*/
	/* ---:--- */	#define	LSb32CRYPTO_ENGINE_CTX_engineType		    0 /*: 7*/
	/* ---:--- */	#define	MSK32CRYPTO_ENGINE_CTX_engineType		       0x000000FF
	/* ---:--- */	#define	GET32CRYPTO_ENGINE_CTX_engineType(r32)		 (((r32)>> 0)&0x00FF)
	/* ---:--- */	#define	GET16CRYPTO_ENGINE_CTX_engineType(r16)		 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32CRYPTO_ENGINE_CTX_engineType(r32,v)	do{(r32)&=~(0x00FF<< 0);(r32)|=((v)&0x00FF)<< 0;}while(0)
	/* ---:--- */	#define	SET16CRYPTO_ENGINE_CTX_engineType(r16,v)	do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	/* [15: 8] */	#define	  BA_CRYPTO_ENGINE_CTX_mode				 0x00005
	/* ---:--- */	#define	    bCRYPTO_ENGINE_CTX_mode				    8 /*bit*/
	/* ---:--- */	#define	LSb32CRYPTO_ENGINE_CTX_mode				    8 /*:15*/
	/* ---:--- */	#define	MSK32CRYPTO_ENGINE_CTX_mode				       0x0000FF00
	/* ---:--- */	#define	GET32CRYPTO_ENGINE_CTX_mode(r32)			 (((r32)>> 8)&0x00FF)
	/* ---:--- */	#define	GET16CRYPTO_ENGINE_CTX_mode(r16)			 (((r16)>> 8)&0x00FF)
	/* ---:--- */	#define	SET32CRYPTO_ENGINE_CTX_mode(r32,v)			do{(r32)&=~(0x00FF<< 8);(r32)|=((v)&0x00FF)<< 8;}while(0)
	/* ---:--- */	#define	SET16CRYPTO_ENGINE_CTX_mode(r16,v)			do{(r16)&=~(0x00FF<< 8);(r16)|=((v)&0x00FF)<< 8;}while(0)

	/* [23:16] */	#define	  BA_CRYPTO_ENGINE_CTX_isKeyReady		 0x00006
	/* ---:--- */	#define	    bCRYPTO_ENGINE_CTX_isKeyReady		    8 /*bit*/
	/* ---:--- */	#define	LSb32CRYPTO_ENGINE_CTX_isKeyReady		   16 /*:23*/
	/* ---:--- */	#define	MSK32CRYPTO_ENGINE_CTX_isKeyReady		       0x00FF0000
	/* ---:--- */	#define	GET32CRYPTO_ENGINE_CTX_isKeyReady(r32)		 (((r32)>>16)&0x00FF)
	/* ---:--- */	#define	GET16CRYPTO_ENGINE_CTX_isKeyReady(r16)		 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32CRYPTO_ENGINE_CTX_isKeyReady(r32,v)	do{(r32)&=~(0x00FF<<16);(r32)|=((v)&0x00FF)<<16;}while(0)
	/* ---:--- */	#define	SET16CRYPTO_ENGINE_CTX_isKeyReady(r16,v)	do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)

	/* [31:24] */	#define	  BA_CRYPTO_ENGINE_CTX_keyId			 0x00007
	/* ---:--- */	#define	    bCRYPTO_ENGINE_CTX_keyId			    8 /*bit*/
	/* ---:--- */	#define	LSb32CRYPTO_ENGINE_CTX_keyId			   24 /*:31*/
	/* ---:--- */	#define	MSK32CRYPTO_ENGINE_CTX_keyId			       0xFF000000
	/* ---:--- */	#define	GET32CRYPTO_ENGINE_CTX_keyId(r32)			 (((r32)>>24)&0x00FF)
	/* ---:--- */	#define	GET16CRYPTO_ENGINE_CTX_keyId(r16)			 (((r16)>> 8)&0x00FF)
	/* ---:--- */	#define	SET32CRYPTO_ENGINE_CTX_keyId(r32,v)			do{(r32)&=~(0x00FF<<24);(r32)|=((v)&0x00FF)<<24;}while(0)
	/* ---:--- */	#define	SET16CRYPTO_ENGINE_CTX_keyId(r16,v)			do{(r16)&=~(0x00FF<< 8);(r16)|=((v)&0x00FF)<< 8;}while(0)

	#define	RA_CRYPTO_ENGINE_CTX_cmdBuf 0x00008
	/* @'00008 */	SIE_UINT64 					ie_cmdBuf			 [3];
					#define	 arr_CRYPTO_ENGINE_CTX_cmdBuf 			  3

	#define	RA_CRYPTO_ENGINE_CTX_keyDat 0x00020
	/* @'00020 */	SIE_UINT64 					ie_keyDat			 [4];
					#define	 arr_CRYPTO_ENGINE_CTX_keyDat 			  4

	#define	RA_CRYPTO_ENGINE_CTX_shaCtx 0x00040
	/* @'00040 */	SIE_SHA1_CTXDAT 			ie_shaCtx;

	#define	RA_CRYPTO_ENGINE_CTX_rc4Ctx 0x000A0
	/* @'000A0 */	SIE_RC4_CTXDAT 				ie_rc4Ctx;

	#define	RA_CRYPTO_ENGINE_CTX_IV 	0x002A8
	/* @'002A8 */	SIE_UINT64 					ie_IV				 [2];
					#define	 arr_CRYPTO_ENGINE_CTX_IV 				  2

	#define	RA_CRYPTO_ENGINE_CTX_pRndKey 0x002B8
	/* @'002B8 */	SIE_UINT64 					ie_pRndKey			 [32];
					#define	 arr_CRYPTO_ENGINE_CTX_pRndKey 			  32

	#define	RA_CRYPTO_ENGINE_CTX_pRootKey 0x003B8
	/* @'003B8 */	SIE_UINT64 					ie_pRootKey			 [4];
					#define	 arr_CRYPTO_ENGINE_CTX_pRootKey 		  4

} SIE_CRYPTO_ENGINE_CTX;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	CRYPTO_ENGINE_CTX_drvrd (SIE_CRYPTO_ENGINE_CTX *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	CRYPTO_ENGINE_CTX_drvwr (SIE_CRYPTO_ENGINE_CTX *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	CRYPTO_ENGINE_CTX_reset (SIE_CRYPTO_ENGINE_CTX *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	CRYPTO_ENGINE_CTX_check(p,pie,ps8name,hfpErrLOG)		CRYPTO_ENGINE_CTX_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	CRYPTO_ENGINE_CTX_print(p,    ps8name,hfpErrLOG)		CRYPTO_ENGINE_CTX_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	CRYPTO_ENGINE_CTX_cmp   (SIE_CRYPTO_ENGINE_CTX *p, SIE_CRYPTO_ENGINE_CTX *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	CRYPTO_ENGINE_CTX_import(SIE_CRYPTO_ENGINE_CTX *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	CRYPTO_ENGINE_CTX_export(SIE_CRYPTO_ENGINE_CTX *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: CRYPTO_ENGINE_CTX
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRMDiagCryptoEngineCtx
*	@
*		$DRMROM_CMD  cmd
*						*  *
*						*  ROM code command and response buffer
*	@  LA_START
*		$LocalArea  la
*						*  *
*						*  Local data area
*	@
*		$UINT64  dsCmdFifo  REG  [16]
*						*  *
*						*  Data streamer fifo data
*	@  0x1000
*		$CRYPTO_ENGINE_CTX  engineCtx
*						*  *
*	@
*		$UINT64  datBuf  REG  [256]
*	@  DTCMSIZE
*		$UINT64  uTotalSize  REG
*	@  IMG_END
*		$UINT128  resserved  REG
**********************************************************************************************************************/
#ifdef	h_DRMDiagCryptoEngineCtx
#else
#define	h_DRMDiagCryptoEngineCtx

#define	\
	AR_DRMDiagCryptoEngineCtx \
		1788
#define	\
	AB_DRMDiagCryptoEngineCtx \
		13

typedef struct SIE_DRMDiagCryptoEngineCtx {

	#define	RA_DRMDiagCryptoEngineCtx_cmd 0x00000
	/* @'00000 */	SIE_DRMROM_CMD 				ie_cmd;

	#define	RA_DRMDiagCryptoEngineCtx_LA_START 0x00028
	/* @'00028 */	SIE_LocalArea 				ie_la;

	#define	RA_DRMDiagCryptoEngineCtx_dsCmdFifo 0x00250
	/* @'00250 */	SIE_UINT64 					ie_dsCmdFifo		 [16];
					#define	 arr_DRMDiagCryptoEngineCtx_dsCmdFifo 	  16

	UNSG32	_PAD_000[(0x01000-0x002D0)/4];
	#define	RA_DRMDiagCryptoEngineCtx_engineCtx 0x01000
	/* @'01000 */	SIE_CRYPTO_ENGINE_CTX 		ie_engineCtx;

	#define	RA_DRMDiagCryptoEngineCtx_datBuf 0x013D8
	/* @'013D8 */	SIE_UINT64 					ie_datBuf			 [256];
					#define	 arr_DRMDiagCryptoEngineCtx_datBuf 		  256

	#define	RA_DRMDiagCryptoEngineCtx_DTCMSIZE 0x01BD8
	/* @'01BD8 */	SIE_UINT64 					ie_uTotalSize;

	#define	RA_DRMDiagCryptoEngineCtx_IMG_END 0x01BE0
	/* @'01BE0 */	SIE_UINT128 				ie_resserved;

} SIE_DRMDiagCryptoEngineCtx;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRMDiagCryptoEngineCtx_drvrd (SIE_DRMDiagCryptoEngineCtx *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRMDiagCryptoEngineCtx_drvwr (SIE_DRMDiagCryptoEngineCtx *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRMDiagCryptoEngineCtx_reset (SIE_DRMDiagCryptoEngineCtx *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRMDiagCryptoEngineCtx_check(p,pie,ps8name,hfpErrLOG)		DRMDiagCryptoEngineCtx_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRMDiagCryptoEngineCtx_print(p,    ps8name,hfpErrLOG)		DRMDiagCryptoEngineCtx_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRMDiagCryptoEngineCtx_cmp   (SIE_DRMDiagCryptoEngineCtx *p, SIE_DRMDiagCryptoEngineCtx *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRMDiagCryptoEngineCtx_import(SIE_DRMDiagCryptoEngineCtx *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRMDiagCryptoEngineCtx_export(SIE_DRMDiagCryptoEngineCtx *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRMDiagCryptoEngineCtx
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRMCONST
*	@
*			:  BD_PACKET_SIZE  6144
*						*  *
*						*  Blu-ray DVD packet size
*	@
*			:  BD_TSPACKET_SIZE  192
*						*  *
*						*  Blu-ray DVD packet size
*	@
*		%unsigned  32  dummy
*						*  *
**********************************************************************************************************************/
#ifdef	h_DRMCONST
#else
#define	h_DRMCONST

#define	\
	AR_DRMCONST \
		1
#define	\
	AB_DRMCONST \
		2

	#define	DRMCONST_BD_PACKET_SIZE 	0x1800
	#define	DRMCONST_BD_TSPACKET_SIZE 	0xC0

typedef struct SIE_DRMCONST {

	#define	RA_DRMCONST_D0th_ 			ISC_USE_ONLY	0x00000
	#define	w32DRMCONST_D0th_ 			{										\
					UNSG32				u_dummy						 : 32;		\
										}
	/* @'00000 */				struct	w32DRMCONST_D0th_;

	/* [31: 0] */	#define	  BA_DRMCONST_dummy						 0x00000
	/* ---:--- */	#define	    bDRMCONST_dummy						   32 /*bit*/
	/* ---:--- */	#define	LSb32DRMCONST_dummy						    0 /*:31*/
	/* ---:--- */	#define	MSK32DRMCONST_dummy						       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRMCONST_dummy(r32)					 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRMCONST_dummy(r16)					 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRMCONST_dummy(r32,v)					do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMCONST_dummy(r16,v)					do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

} SIE_DRMCONST;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRMCONST_drvrd (SIE_DRMCONST *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRMCONST_drvwr (SIE_DRMCONST *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRMCONST_reset (SIE_DRMCONST *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRMCONST_check(p,pie,ps8name,hfpErrLOG)		DRMCONST_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRMCONST_print(p,    ps8name,hfpErrLOG)		DRMCONST_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRMCONST_cmp   (SIE_DRMCONST *p, SIE_DRMCONST *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRMCONST_import(SIE_DRMCONST *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRMCONST_export(SIE_DRMCONST *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRMCONST
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: WrapperTK
*	@
*		$UINT64  TKHeader
*	@
*		$UINT64  tk  REG  [3]
**********************************************************************************************************************/
#ifdef	h_WrapperTK
#else
#define	h_WrapperTK

#define	\
	AR_WrapperTK \
		8
#define	\
	AB_WrapperTK \
		5

typedef struct SIE_WrapperTK {

	#define	RA_WrapperTK_TKHeader 		0x00000
	/* @'00000 */	SIE_UINT64 					ie_TKHeader;

	#define	RA_WrapperTK_tk 			0x00008
	/* @'00008 */	SIE_UINT64 					ie_tk				 [3];
					#define	 arr_WrapperTK_tk 						  3

} SIE_WrapperTK;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	WrapperTK_drvrd (SIE_WrapperTK *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	WrapperTK_drvwr (SIE_WrapperTK *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	WrapperTK_reset (SIE_WrapperTK *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	WrapperTK_check(p,pie,ps8name,hfpErrLOG)		WrapperTK_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	WrapperTK_print(p,    ps8name,hfpErrLOG)		WrapperTK_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	WrapperTK_cmp   (SIE_WrapperTK *p, SIE_WrapperTK *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	WrapperTK_import(SIE_WrapperTK *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	WrapperTK_export(SIE_WrapperTK *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: WrapperTK
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: FIGOCTRLUpdateTK
*	@
*		$FIGOCtrl  figoCtrl
*	@
*		$UINT128  tk  REG  [2]
**********************************************************************************************************************/
#ifdef	h_FIGOCTRLUpdateTK
#else
#define	h_FIGOCTRLUpdateTK

#define	\
	AR_FIGOCTRLUpdateTK \
		10
#define	\
	AB_FIGOCTRLUpdateTK \
		6

typedef struct SIE_FIGOCTRLUpdateTK {

	#define	RA_FIGOCTRLUpdateTK_figoCtrl 0x00000
	/* @'00000 */	SIE_FIGOCtrl 				ie_figoCtrl;

	#define	RA_FIGOCTRLUpdateTK_tk 		0x00008
	/* @'00008 */	SIE_UINT128 				ie_tk				 [2];
					#define	 arr_FIGOCTRLUpdateTK_tk 				  2

} SIE_FIGOCTRLUpdateTK;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	FIGOCTRLUpdateTK_drvrd (SIE_FIGOCTRLUpdateTK *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	FIGOCTRLUpdateTK_drvwr (SIE_FIGOCTRLUpdateTK *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	FIGOCTRLUpdateTK_reset (SIE_FIGOCTRLUpdateTK *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	FIGOCTRLUpdateTK_check(p,pie,ps8name,hfpErrLOG)		FIGOCTRLUpdateTK_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	FIGOCTRLUpdateTK_print(p,    ps8name,hfpErrLOG)		FIGOCTRLUpdateTK_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	FIGOCTRLUpdateTK_cmp   (SIE_FIGOCTRLUpdateTK *p, SIE_FIGOCTRLUpdateTK *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	FIGOCTRLUpdateTK_import(SIE_FIGOCTRLUpdateTK *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	FIGOCTRLUpdateTK_export(SIE_FIGOCTRLUpdateTK *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: FIGOCTRLUpdateTK
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: KeySeed
*	@
*		%unsigned  32  syncPoint
*		%unsigned  32  reserved
*	@
*		$UINT64  ksDat
**********************************************************************************************************************/
#ifdef	h_KeySeed
#else
#define	h_KeySeed

#define	\
	AR_KeySeed \
		4
#define	\
	AB_KeySeed \
		4

typedef struct SIE_KeySeed {

	#define	RA_KeySeed_D0th_ 			ISC_USE_ONLY	0x00000
	#define	w32KeySeed_D0th_ 			{										\
					UNSG32				u_syncPoint					 : 32;		\
										}
	/* @'00000 */				struct	w32KeySeed_D0th_;

	/* [31: 0] */	#define	  BA_KeySeed_syncPoint					 0x00000
	/* ---:--- */	#define	    bKeySeed_syncPoint					   32 /*bit*/
	/* ---:--- */	#define	LSb32KeySeed_syncPoint					    0 /*:31*/
	/* ---:--- */	#define	MSK32KeySeed_syncPoint					       0xFFFFFFFF
	/* ---:--- */	#define	GET32KeySeed_syncPoint(r32)					 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16KeySeed_syncPoint(r16)					 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32KeySeed_syncPoint(r32,v)				do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16KeySeed_syncPoint(r16,v)				do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_KeySeed_D1th_ 			ISC_USE_ONLY	0x00004
	#define	w32KeySeed_D1th_ 			{										\
					UNSG32				u_reserved					 : 32;		\
										}
	/* @'00004 */				struct	w32KeySeed_D1th_;

	/* [31: 0] */	#define	  BA_KeySeed_reserved					 0x00004
	/* ---:--- */	#define	    bKeySeed_reserved					   32 /*bit*/
	/* ---:--- */	#define	LSb32KeySeed_reserved					    0 /*:31*/
	/* ---:--- */	#define	MSK32KeySeed_reserved					       0xFFFFFFFF
	/* ---:--- */	#define	GET32KeySeed_reserved(r32)					 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16KeySeed_reserved(r16)					 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32KeySeed_reserved(r32,v)				do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16KeySeed_reserved(r16,v)				do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_KeySeed_ksDat 			0x00008
	/* @'00008 */	SIE_UINT64 					ie_ksDat;

} SIE_KeySeed;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	KeySeed_drvrd (SIE_KeySeed *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	KeySeed_drvwr (SIE_KeySeed *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	KeySeed_reset (SIE_KeySeed *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	KeySeed_check(p,pie,ps8name,hfpErrLOG)		KeySeed_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	KeySeed_print(p,    ps8name,hfpErrLOG)		KeySeed_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	KeySeed_cmp   (SIE_KeySeed *p, SIE_KeySeed *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	KeySeed_import(SIE_KeySeed *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	KeySeed_export(SIE_KeySeed *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: KeySeed
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRMBDFilter
*	@  HDR
*		%unsigned  16  filterFunc
*		%unsigned  8  filterState
*			:  INACTIVE  0
*			:  STOPPED  1
*			:  STOPPING  2
*			:  RUNNING  3
*			:  FLUSHING  4
*			:  PAUSING  5
*			:  PAUSED  6
*		%unsigned  1  isByPassMode
*		%unsigned  1  isEncrypted
*	@  IO
*		%unsigned  16  strmInPtr
*						*  *
*						*  Address of the input data FIFO pointer
*						*  *
*						*  Size to read next time
*		%unsigned  16  strmOutPtr
*						*  *
*						*  Address of the output data FIFO pointer
*	@
*		%unsigned  16  datBase
*						*  *
*						*  Internal data buffer
*		%unsigned  16  ctrlBase
*						*  *
*						*  Internal control buffer
*	@
*		%unsigned  16  datMaxSize
*						*  *
*						*  Size of the internal data buffer
*		%unsigned  16  ctrlMaxSize
*						*  *
*						*  Size of the internal control buffer
*	@
*		%unsigned  16  packStartOffset
*						*  *
*						*  Bytes left in the current BD packet
*		%unsigned  16  packSizeToRd
*	@  CTR
*		%unsigned  32  strmCtrIn
*						*  *
*						*  Input stream counter
*	@
*		$UINT128  tkIn  REG
*						*  *
*						*  Title Key plain text
*	@
*		$UINT128  rndKey  REG  [16]
*						*  *
*						*  Packet round keys
*	@
*		$UINT128  pbIV  MEM
*						*  *
*						*  Packet decryption Initial Vector
*		$UINT128  pbAACSConstIV  MEM
*						*  *
*						*  AACS Constant IV
*	@
**********************************************************************************************************************/
#ifdef	h_DRMBDFilter
#else
#define	h_DRMBDFilter

#define	\
	AR_DRMBDFilter \
		84
#define	\
	AB_DRMBDFilter \
		9

typedef struct SIE_DRMBDFilter {

	#define	RA_DRMBDFilter_HDR 			0x00000
	#define	w32DRMBDFilter_HDR 			{										\
					UNSG32				uHDR_filterFunc				 : 16;		\
					UNSG32				uHDR_filterState			 :  8;		\
					UNSG32				uHDR_isByPassMode			 :  1;		\
					UNSG32				uHDR_isEncrypted			 :  1;		\
					UNSG32				_x00000	:  6;							\
										}
	/* @'00000 */	union {	UNSG32		u32DRMBDFilter_HDR;
								struct	w32DRMBDFilter_HDR;
										};

	/* [15: 0] */	#define	  BA_DRMBDFilter_HDR_filterFunc			 0x00000
	/* ---:--- */	#define	    bDRMBDFilter_HDR_filterFunc			   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMBDFilter_HDR_filterFunc			    0 /*:15*/
	/* ---:--- */	#define	MSK32DRMBDFilter_HDR_filterFunc			       0x0000FFFF
	/* ---:--- */	#define	GET32DRMBDFilter_HDR_filterFunc(r32)		 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRMBDFilter_HDR_filterFunc(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMBDFilter_HDR_filterFunc(r32,v)		do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMBDFilter_HDR_filterFunc(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [23:16] */	#define	  BA_DRMBDFilter_HDR_filterState		 0x00002
	/* ---:--- */	#define	    bDRMBDFilter_HDR_filterState		    8 /*bit*/
	/* ---:--- */	#define	LSb32DRMBDFilter_HDR_filterState		   16 /*:23*/
	/* ---:--- */	#define	MSK32DRMBDFilter_HDR_filterState		       0x00FF0000
	/* ---:--- */	#define	GET32DRMBDFilter_HDR_filterState(r32)		 (((r32)>>16)&0x00FF)
	/* ---:--- */	#define	GET16DRMBDFilter_HDR_filterState(r16)		 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32DRMBDFilter_HDR_filterState(r32,v)		do{(r32)&=~(0x00FF<<16);(r32)|=((v)&0x00FF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRMBDFilter_HDR_filterState(r16,v)		do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)
					#define	     DRMBDFilter_HDR_filterState_INACTIVE		0x0
					#define	     DRMBDFilter_HDR_filterState_STOPPED		0x1
					#define	     DRMBDFilter_HDR_filterState_STOPPING		0x2
					#define	     DRMBDFilter_HDR_filterState_RUNNING		0x3
					#define	     DRMBDFilter_HDR_filterState_FLUSHING		0x4
					#define	     DRMBDFilter_HDR_filterState_PAUSING		0x5
					#define	     DRMBDFilter_HDR_filterState_PAUSED			0x6

	/* [24:24] */	#define	  BA_DRMBDFilter_HDR_isByPassMode		 0x00003
	/* ---:--- */	#define	    bDRMBDFilter_HDR_isByPassMode		    1 /*bit*/
	/* ---:--- */	#define	LSb32DRMBDFilter_HDR_isByPassMode		   24 /*:24*/
	/* ---:--- */	#define	MSK32DRMBDFilter_HDR_isByPassMode		       0x01000000
	/* ---:--- */	#define	GET32DRMBDFilter_HDR_isByPassMode(r32)		 (((r32)>>24)&0x0001)
	/* ---:--- */	#define	GET16DRMBDFilter_HDR_isByPassMode(r16)		 (((r16)>> 8)&0x0001)
	/* ---:--- */	#define	SET32DRMBDFilter_HDR_isByPassMode(r32,v)	do{(r32)&=~(0x0001<<24);(r32)|=((v)&0x0001)<<24;}while(0)
	/* ---:--- */	#define	SET16DRMBDFilter_HDR_isByPassMode(r16,v)	do{(r16)&=~(0x0001<< 8);(r16)|=((v)&0x0001)<< 8;}while(0)

	/* [25:25] */	#define	  BA_DRMBDFilter_HDR_isEncrypted		 0x00003
	/* ---:--- */	#define	    bDRMBDFilter_HDR_isEncrypted		    1 /*bit*/
	/* ---:--- */	#define	LSb32DRMBDFilter_HDR_isEncrypted		   25 /*:25*/
	/* ---:--- */	#define	MSK32DRMBDFilter_HDR_isEncrypted		       0x02000000
	/* ---:--- */	#define	GET32DRMBDFilter_HDR_isEncrypted(r32)		 (((r32)>>25)&0x0001)
	/* ---:--- */	#define	GET16DRMBDFilter_HDR_isEncrypted(r16)		 (((r16)>> 9)&0x0001)
	/* ---:--- */	#define	SET32DRMBDFilter_HDR_isEncrypted(r32,v)		do{(r32)&=~(0x0001<<25);(r32)|=((v)&0x0001)<<25;}while(0)
	/* ---:--- */	#define	SET16DRMBDFilter_HDR_isEncrypted(r16,v)		do{(r16)&=~(0x0001<< 9);(r16)|=((v)&0x0001)<< 9;}while(0)

	#define	RA_DRMBDFilter_IO 			0x00004
	#define	w32DRMBDFilter_IO 			{										\
					UNSG32				uIO_strmInPtr				 : 16;		\
					UNSG32				uIO_strmOutPtr				 : 16;		\
										}
	/* @'00004 */	union {	UNSG32		u32DRMBDFilter_IO;
								struct	w32DRMBDFilter_IO;
										};

	/* [15: 0] */	#define	  BA_DRMBDFilter_IO_strmInPtr			 0x00004
	/* ---:--- */	#define	    bDRMBDFilter_IO_strmInPtr			   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMBDFilter_IO_strmInPtr			    0 /*:15*/
	/* ---:--- */	#define	MSK32DRMBDFilter_IO_strmInPtr			       0x0000FFFF
	/* ---:--- */	#define	GET32DRMBDFilter_IO_strmInPtr(r32)			 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRMBDFilter_IO_strmInPtr(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMBDFilter_IO_strmInPtr(r32,v)		do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMBDFilter_IO_strmInPtr(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DRMBDFilter_IO_strmOutPtr			 0x00006
	/* ---:--- */	#define	    bDRMBDFilter_IO_strmOutPtr			   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMBDFilter_IO_strmOutPtr			   16 /*:31*/
	/* ---:--- */	#define	MSK32DRMBDFilter_IO_strmOutPtr			       0xFFFF0000
	/* ---:--- */	#define	GET32DRMBDFilter_IO_strmOutPtr(r32)			 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DRMBDFilter_IO_strmOutPtr(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMBDFilter_IO_strmOutPtr(r32,v)		do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRMBDFilter_IO_strmOutPtr(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DRMBDFilter_D2th_ 		ISC_USE_ONLY	0x00008
	#define	w32DRMBDFilter_D2th_ 		{										\
					UNSG32				u_datBase					 : 16;		\
					UNSG32				u_ctrlBase					 : 16;		\
										}
	/* @'00008 */				struct	w32DRMBDFilter_D2th_;

	/* [15: 0] */	#define	  BA_DRMBDFilter_datBase				 0x00008
	/* ---:--- */	#define	    bDRMBDFilter_datBase				   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMBDFilter_datBase				    0 /*:15*/
	/* ---:--- */	#define	MSK32DRMBDFilter_datBase				       0x0000FFFF
	/* ---:--- */	#define	GET32DRMBDFilter_datBase(r32)				 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRMBDFilter_datBase(r16)				 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMBDFilter_datBase(r32,v)				do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMBDFilter_datBase(r16,v)				do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DRMBDFilter_ctrlBase				 0x0000A
	/* ---:--- */	#define	    bDRMBDFilter_ctrlBase				   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMBDFilter_ctrlBase				   16 /*:31*/
	/* ---:--- */	#define	MSK32DRMBDFilter_ctrlBase				       0xFFFF0000
	/* ---:--- */	#define	GET32DRMBDFilter_ctrlBase(r32)				 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DRMBDFilter_ctrlBase(r16)				 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMBDFilter_ctrlBase(r32,v)			do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRMBDFilter_ctrlBase(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DRMBDFilter_D3th_ 		ISC_USE_ONLY	0x0000C
	#define	w32DRMBDFilter_D3th_ 		{										\
					UNSG32				u_datMaxSize				 : 16;		\
					UNSG32				u_ctrlMaxSize				 : 16;		\
										}
	/* @'0000C */				struct	w32DRMBDFilter_D3th_;

	/* [15: 0] */	#define	  BA_DRMBDFilter_datMaxSize				 0x0000C
	/* ---:--- */	#define	    bDRMBDFilter_datMaxSize				   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMBDFilter_datMaxSize				    0 /*:15*/
	/* ---:--- */	#define	MSK32DRMBDFilter_datMaxSize				       0x0000FFFF
	/* ---:--- */	#define	GET32DRMBDFilter_datMaxSize(r32)			 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRMBDFilter_datMaxSize(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMBDFilter_datMaxSize(r32,v)			do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMBDFilter_datMaxSize(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DRMBDFilter_ctrlMaxSize			 0x0000E
	/* ---:--- */	#define	    bDRMBDFilter_ctrlMaxSize			   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMBDFilter_ctrlMaxSize			   16 /*:31*/
	/* ---:--- */	#define	MSK32DRMBDFilter_ctrlMaxSize			       0xFFFF0000
	/* ---:--- */	#define	GET32DRMBDFilter_ctrlMaxSize(r32)			 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DRMBDFilter_ctrlMaxSize(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMBDFilter_ctrlMaxSize(r32,v)			do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRMBDFilter_ctrlMaxSize(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DRMBDFilter_D4th_ 		ISC_USE_ONLY	0x00010
	#define	w32DRMBDFilter_D4th_ 		{										\
					UNSG32				u_packStartOffset			 : 16;		\
					UNSG32				u_packSizeToRd				 : 16;		\
										}
	/* @'00010 */				struct	w32DRMBDFilter_D4th_;

	/* [15: 0] */	#define	  BA_DRMBDFilter_packStartOffset		 0x00010
	/* ---:--- */	#define	    bDRMBDFilter_packStartOffset		   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMBDFilter_packStartOffset		    0 /*:15*/
	/* ---:--- */	#define	MSK32DRMBDFilter_packStartOffset		       0x0000FFFF
	/* ---:--- */	#define	GET32DRMBDFilter_packStartOffset(r32)		 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRMBDFilter_packStartOffset(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMBDFilter_packStartOffset(r32,v)		do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMBDFilter_packStartOffset(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DRMBDFilter_packSizeToRd			 0x00012
	/* ---:--- */	#define	    bDRMBDFilter_packSizeToRd			   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMBDFilter_packSizeToRd			   16 /*:31*/
	/* ---:--- */	#define	MSK32DRMBDFilter_packSizeToRd			       0xFFFF0000
	/* ---:--- */	#define	GET32DRMBDFilter_packSizeToRd(r32)			 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DRMBDFilter_packSizeToRd(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMBDFilter_packSizeToRd(r32,v)		do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRMBDFilter_packSizeToRd(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DRMBDFilter_CTR 			0x00014
	#define	w32DRMBDFilter_CTR 			{										\
					UNSG32				uCTR_strmCtrIn				 : 32;		\
										}
	/* @'00014 */	union {	UNSG32		u32DRMBDFilter_CTR;
								struct	w32DRMBDFilter_CTR;
										};

	/* [31: 0] */	#define	  BA_DRMBDFilter_CTR_strmCtrIn			 0x00014
	/* ---:--- */	#define	    bDRMBDFilter_CTR_strmCtrIn			   32 /*bit*/
	/* ---:--- */	#define	LSb32DRMBDFilter_CTR_strmCtrIn			    0 /*:31*/
	/* ---:--- */	#define	MSK32DRMBDFilter_CTR_strmCtrIn			       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRMBDFilter_CTR_strmCtrIn(r32)			 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRMBDFilter_CTR_strmCtrIn(r16)			 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRMBDFilter_CTR_strmCtrIn(r32,v)		do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMBDFilter_CTR_strmCtrIn(r16,v)		do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DRMBDFilter_tkIn 		0x00018
	/* @'00018 */	SIE_UINT128 				ie_tkIn;

	#define	RA_DRMBDFilter_rndKey 		0x00028
	/* @'00028 */	SIE_UINT128 				ie_rndKey			 [16];
					#define	 arr_DRMBDFilter_rndKey 				  16

	UNSG32	_PAD_000[(0x00130-0x00128)/4];
	#define	RA_DRMBDFilter_pbIV 		0x00130
	/* @'00130 */	SIE_UINT128 				ie_pbIV;

	#define	RA_DRMBDFilter_pbAACSConstIV 0x00140
	/* @'00140 */	SIE_UINT128 				ie_pbAACSConstIV;

} SIE_DRMBDFilter;

	#define	dftDRMBDFilter_HDR 			0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DRMBDFilter_HDR;
										} T32DRMBDFilter_HDR;
	#define	dftDRMBDFilter_IO 			0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DRMBDFilter_IO;
										} T32DRMBDFilter_IO;
	#define	dftDRMBDFilter_CTR 			0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DRMBDFilter_CTR;
										} T32DRMBDFilter_CTR;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRMBDFilter_drvrd (SIE_DRMBDFilter *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRMBDFilter_drvwr (SIE_DRMBDFilter *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRMBDFilter_reset (SIE_DRMBDFilter *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRMBDFilter_check(p,pie,ps8name,hfpErrLOG)		DRMBDFilter_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRMBDFilter_print(p,    ps8name,hfpErrLOG)		DRMBDFilter_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRMBDFilter_cmp   (SIE_DRMBDFilter *p, SIE_DRMBDFilter *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRMBDFilter_import(SIE_DRMBDFilter *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRMBDFilter_export(SIE_DRMBDFilter *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRMBDFilter
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: CtrlFIFOData
*	@
*		$UINT64  uData  REG  [8]
*						*  *
**********************************************************************************************************************/
#ifdef	h_CtrlFIFOData
#else
#define	h_CtrlFIFOData

#define	\
	AR_CtrlFIFOData \
		16
#define	\
	AB_CtrlFIFOData \
		6

typedef struct SIE_CtrlFIFOData {

	#define	RA_CtrlFIFOData_uData 		0x00000
	/* @'00000 */	SIE_UINT64 					ie_uData			 [8];
					#define	 arr_CtrlFIFOData_uData 				  8

} SIE_CtrlFIFOData;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	CtrlFIFOData_drvrd (SIE_CtrlFIFOData *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	CtrlFIFOData_drvwr (SIE_CtrlFIFOData *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	CtrlFIFOData_reset (SIE_CtrlFIFOData *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	CtrlFIFOData_check(p,pie,ps8name,hfpErrLOG)		CtrlFIFOData_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	CtrlFIFOData_print(p,    ps8name,hfpErrLOG)		CtrlFIFOData_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	CtrlFIFOData_cmp   (SIE_CtrlFIFOData *p, SIE_CtrlFIFOData *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	CtrlFIFOData_import(SIE_CtrlFIFOData *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	CtrlFIFOData_export(SIE_CtrlFIFOData *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: CtrlFIFOData
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: KeySeedData
*	@
*		$UINT64  uData  REG  [8]
*						*  *
**********************************************************************************************************************/
#ifdef	h_KeySeedData
#else
#define	h_KeySeedData

#define	\
	AR_KeySeedData \
		16
#define	\
	AB_KeySeedData \
		6

typedef struct SIE_KeySeedData {

	#define	RA_KeySeedData_uData 		0x00000
	/* @'00000 */	SIE_UINT64 					ie_uData			 [8];
					#define	 arr_KeySeedData_uData 					  8

} SIE_KeySeedData;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	KeySeedData_drvrd (SIE_KeySeedData *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	KeySeedData_drvwr (SIE_KeySeedData *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	KeySeedData_reset (SIE_KeySeedData *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	KeySeedData_check(p,pie,ps8name,hfpErrLOG)		KeySeedData_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	KeySeedData_print(p,    ps8name,hfpErrLOG)		KeySeedData_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	KeySeedData_cmp   (SIE_KeySeedData *p, SIE_KeySeedData *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	KeySeedData_import(SIE_KeySeedData *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	KeySeedData_export(SIE_KeySeedData *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: KeySeedData
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: UpTKCtrlFIFO
*	@
*		$UINT128  uData  REG  [2]
*						*  *
*	@
*		$UINT128  RKEK
*						*  *
*	@
*		$UINT128  A
*						*  *
*	@
*		$UINT128  B
*						*  *
*	@
*		$UINT128  R
*						*  *
*	@
*		$UINT128  Reserved  REG  [2]
**********************************************************************************************************************/
#ifdef	h_UpTKCtrlFIFO
#else
#define	h_UpTKCtrlFIFO

#define	\
	AR_UpTKCtrlFIFO \
		32
#define	\
	AB_UpTKCtrlFIFO \
		7

typedef struct SIE_UpTKCtrlFIFO {

	#define	RA_UpTKCtrlFIFO_uData 		0x00000
	/* @'00000 */	SIE_UINT128 				ie_uData			 [2];
					#define	 arr_UpTKCtrlFIFO_uData 				  2

	#define	RA_UpTKCtrlFIFO_RKEK 		0x00020
	/* @'00020 */	SIE_UINT128 				ie_RKEK;

	#define	RA_UpTKCtrlFIFO_A 			0x00030
	/* @'00030 */	SIE_UINT128 				ie_A;

	#define	RA_UpTKCtrlFIFO_B 			0x00040
	/* @'00040 */	SIE_UINT128 				ie_B;

	#define	RA_UpTKCtrlFIFO_R 			0x00050
	/* @'00050 */	SIE_UINT128 				ie_R;

	#define	RA_UpTKCtrlFIFO_Reserved 	0x00060
	/* @'00060 */	SIE_UINT128 				ie_Reserved			 [2];
					#define	 arr_UpTKCtrlFIFO_Reserved 				  2

} SIE_UpTKCtrlFIFO;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	UpTKCtrlFIFO_drvrd (SIE_UpTKCtrlFIFO *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	UpTKCtrlFIFO_drvwr (SIE_UpTKCtrlFIFO *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	UpTKCtrlFIFO_reset (SIE_UpTKCtrlFIFO *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	UpTKCtrlFIFO_check(p,pie,ps8name,hfpErrLOG)		UpTKCtrlFIFO_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	UpTKCtrlFIFO_print(p,    ps8name,hfpErrLOG)		UpTKCtrlFIFO_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	UpTKCtrlFIFO_cmp   (SIE_UpTKCtrlFIFO *p, SIE_UpTKCtrlFIFO *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	UpTKCtrlFIFO_import(SIE_UpTKCtrlFIFO *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	UpTKCtrlFIFO_export(SIE_UpTKCtrlFIFO *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: UpTKCtrlFIFO
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRMDiagMultiBDCtx
*	@
*		$AES128_CTXDAT  aesCtx  REG
*	@  0x800  DAT_START
*		$UINT128  datStart  REG
*		$UINT64  dsCmdFifo  REG  [16]
*						*  *
*						*  Data streamer command FIFO
*		$UINT128  blkStart  REG
*						*  *
*						*  Transfer Data Area
*	@  0x2C00  LA_START
*		$LocalArea  la
*						*  *
*						*  Local area
*	@  CTX_START
*		$DTCMBlkPool  datInMemPool
*						*  *
*						*  Data memory pool
*		$DTCMBlkPool  datOutMemPool
*						*  *
*						*  Data memory pool
*	@  STREAMS
*		$DSStreamIn  datStrmIn  REG  [4]
*						*  *
*						*  DS Input stream
*		$CtrlFIFOData  datCtrlFifo  REG  [4]
*						*  *
*						*  Control FIFO data
*		$DSStreamOut  datStrmOut  REG  [4]
*						*  *
*						*  DS Ouput stream
*		$DSStreamOutModule  datStrmOutModule
*	@  FILTERS
*		$DRMBDFilter  bdFilterList  REG  [4]
*						*  *
*						*  Blue Ray DVD Context
*		$UINT128  datFilterBuf  REG  [96]
*						*  *
*						*  Temp buffer for Filter data
*		$UINT128  ctrlFilterBuf  REG  [8]
*						*  *
*						*  Temp buffer for Filter Control
*	@  DTCMSIZE
*		%unsigned  16  uTotalSize  REG
*	@  IMG_END
*		$UINT128  resserved  REG
**********************************************************************************************************************/
#ifdef	h_DRMDiagMultiBDCtx
#else
#define	h_DRMDiagMultiBDCtx

#define	\
	AR_DRMDiagMultiBDCtx \
		4028
#define	\
	AB_DRMDiagMultiBDCtx \
		14

typedef struct SIE_DRMDiagMultiBDCtx {

	#define	RA_DRMDiagMultiBDCtx_aesCtx 0x00000
	/* @'00000 */	SIE_AES128_CTXDAT 			ie_aesCtx;

	UNSG32	_PAD_000[(0x00800-0x00618)/4];
	#define	RA_DRMDiagMultiBDCtx_DAT_START 0x00800
	/* @'00800 */	SIE_UINT128 				ie_datStart;

	#define	RA_DRMDiagMultiBDCtx_dsCmdFifo 0x00810
	/* @'00810 */	SIE_UINT64 					ie_dsCmdFifo		 [16];
					#define	 arr_DRMDiagMultiBDCtx_dsCmdFifo 		  16

	#define	RA_DRMDiagMultiBDCtx_blkStart 0x00890
	/* @'00890 */	SIE_UINT128 				ie_blkStart;

	UNSG32	_PAD_001[(0x02C00-0x008A0)/4];
	#define	RA_DRMDiagMultiBDCtx_LA_START 0x02C00
	/* @'02C00 */	SIE_LocalArea 				ie_la;

	#define	RA_DRMDiagMultiBDCtx_CTX_START 0x02E28
	/* @'02E28 */	SIE_DTCMBlkPool 			ie_datInMemPool;

	#define	RA_DRMDiagMultiBDCtx_datOutMemPool 0x02F50
	/* @'02F50 */	SIE_DTCMBlkPool 			ie_datOutMemPool;

	#define	RA_DRMDiagMultiBDCtx_STREAMS 0x03078
	/* @'03078 */	SIE_DSStreamIn 				ie_datStrmIn		 [4];
					#define	 arr_DRMDiagMultiBDCtx_datStrmIn 		  4

	#define	RA_DRMDiagMultiBDCtx_datCtrlFifo 0x03198
	/* @'03198 */	SIE_CtrlFIFOData 			ie_datCtrlFifo		 [4];
					#define	 arr_DRMDiagMultiBDCtx_datCtrlFifo 		  4

	#define	RA_DRMDiagMultiBDCtx_datStrmOut 0x03298
	/* @'03298 */	SIE_DSStreamOut 			ie_datStrmOut		 [4];
					#define	 arr_DRMDiagMultiBDCtx_datStrmOut 		  4

	#define	RA_DRMDiagMultiBDCtx_datStrmOutModule 0x032F8
	/* @'032F8 */	SIE_DSStreamOutModule 		ie_datStrmOutModule;

	#define	RA_DRMDiagMultiBDCtx_FILTERS 0x03310
	/* @'03310 */	SIE_DRMBDFilter 			ie_bdFilterList		 [4];
					#define	 arr_DRMDiagMultiBDCtx_bdFilterList 	  4

	#define	RA_DRMDiagMultiBDCtx_datFilterBuf 0x03850
	/* @'03850 */	SIE_UINT128 				ie_datFilterBuf		 [96];
					#define	 arr_DRMDiagMultiBDCtx_datFilterBuf 	  96

	#define	RA_DRMDiagMultiBDCtx_ctrlFilterBuf 0x03E50
	/* @'03E50 */	SIE_UINT128 				ie_ctrlFilterBuf	 [8];
					#define	 arr_DRMDiagMultiBDCtx_ctrlFilterBuf 	  8

	#define	RA_DRMDiagMultiBDCtx_DTCMSIZE 0x03ED0
	#define	w32DRMDiagMultiBDCtx_DTCMSIZE {										\
					UNSG32				uDTCMSIZE_uTotalSize		 : 16;		\
					UNSG32				_x03ED0	: 16;							\
										}
	/* @'03ED0 */	union {	UNSG32		u32DRMDiagMultiBDCtx_DTCMSIZE;
								struct	w32DRMDiagMultiBDCtx_DTCMSIZE;
										};

	/* [15: 0] */	#define	  BA_DRMDiagMultiBDCtx_DTCMSIZE_uTotalSize 0x03ED0
	/* ---:--- */	#define	    bDRMDiagMultiBDCtx_DTCMSIZE_uTotalSize   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMDiagMultiBDCtx_DTCMSIZE_uTotalSize    0 /*:15*/
	/* ---:--- */	#define	MSK32DRMDiagMultiBDCtx_DTCMSIZE_uTotalSize       0x0000FFFF
	/* ---:--- */	#define	GET32DRMDiagMultiBDCtx_DTCMSIZE_uTotalSize(r32) (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRMDiagMultiBDCtx_DTCMSIZE_uTotalSize(r16) (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMDiagMultiBDCtx_DTCMSIZE_uTotalSize(r32,v)do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMDiagMultiBDCtx_DTCMSIZE_uTotalSize(r16,v)do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DRMDiagMultiBDCtx_IMG_END 0x03ED4
	/* @'03ED4 */	SIE_UINT128 				ie_resserved;

	UNSG32	_PAD_002[(0x03EF0-0x03EE4)/4];
} SIE_DRMDiagMultiBDCtx;

	#define	dftDRMDiagMultiBDCtx_DTCMSIZE 0x0000CCCC
			typedef	union {	UNSG32		u32;
								struct	w32DRMDiagMultiBDCtx_DTCMSIZE;
										} T32DRMDiagMultiBDCtx_DTCMSIZE;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRMDiagMultiBDCtx_drvrd (SIE_DRMDiagMultiBDCtx *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRMDiagMultiBDCtx_drvwr (SIE_DRMDiagMultiBDCtx *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRMDiagMultiBDCtx_reset (SIE_DRMDiagMultiBDCtx *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRMDiagMultiBDCtx_check(p,pie,ps8name,hfpErrLOG)		DRMDiagMultiBDCtx_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRMDiagMultiBDCtx_print(p,    ps8name,hfpErrLOG)		DRMDiagMultiBDCtx_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRMDiagMultiBDCtx_cmp   (SIE_DRMDiagMultiBDCtx *p, SIE_DRMDiagMultiBDCtx *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRMDiagMultiBDCtx_import(SIE_DRMDiagMultiBDCtx *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRMDiagMultiBDCtx_export(SIE_DRMDiagMultiBDCtx *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRMDiagMultiBDCtx
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRMWMFilter
*	@  HDR
*		%unsigned  16  filterFunc
*		%unsigned  8  filterState
*			:  INACTIVE  0
*			:  STOPPED  1
*			:  STOPPING  2
*			:  RUNNING  3
*			:  FLUSHING  4
*			:  PAUSING  5
*			:  PAUSED  6
*		%unsigned  1  isByPassMode
*	@  IO
*		%unsigned  16  strmInPtr
*						*  *
*						*  Address of the input data FIFO pointer
*						*  *
*						*  Size to read next time
*		%unsigned  16  strmOutPtr
*						*  *
*						*  Address of the output data FIFO pointer
*	@
*		%unsigned  16  datBase
*						*  *
*						*  Internal data buffer
*		%unsigned  16  ctrlBase
*						*  *
*						*  Internal control buffer
*	@
*		%unsigned  16  datMaxSize
*						*  *
*						*  Size of the internal data buffer
*		%unsigned  16  ctrlMaxSize
*						*  *
*						*  Size of the internal control buffer
*	@
*		%unsigned  16  payLoadSize
*						*  *
*						*  Bytes left in the current BD packet
*		%unsigned  16  payLoadToRead
*						*  *
*						*  Bytes left in the current payLoad packet
*	@  CTR
*		%unsigned  32  strmCtrIn
*						*  *
*						*  Input stream counter
*	@
*		$DTCMFifo  keySeedFifo
*						*  *
*						*  DTCM FIFO Context for key seed, the depth of the FIFO is depend on Input Buffer Size
*	@
*		$UINT64  pbKeySeed
*	@
*		$UINT64  pbDESKey
*						*  *
*						*  DES key which is the last 8 byte of HASH value of Content Key
*	@
*		$UINT64  pbRC4Key  REG  [2]
*						*  *
*						*  RC4 Key which is generated during process the payload of WM DRM
*	@
*		$UINT64  pbFilterKey  REG  [8]
*						*  *
*						*  Filter Key data including CBC MAC key, next8byte and last8byte
*	@
*		%unsigned  16  isKeySet
*		%unsigned  16  isKSeedOK
*	@
*		%unsigned  16  pbDESCtx
*		%unsigned  16  reserved
**********************************************************************************************************************/
#ifdef	h_DRMWMFilter
#else
#define	h_DRMWMFilter

#define	\
	AR_DRMWMFilter \
		34
#define	\
	AB_DRMWMFilter \
		8

typedef struct SIE_DRMWMFilter {

	#define	RA_DRMWMFilter_HDR 			0x00000
	#define	w32DRMWMFilter_HDR 			{										\
					UNSG32				uHDR_filterFunc				 : 16;		\
					UNSG32				uHDR_filterState			 :  8;		\
					UNSG32				uHDR_isByPassMode			 :  1;		\
					UNSG32				_x00000	:  7;							\
										}
	/* @'00000 */	union {	UNSG32		u32DRMWMFilter_HDR;
								struct	w32DRMWMFilter_HDR;
										};

	/* [15: 0] */	#define	  BA_DRMWMFilter_HDR_filterFunc			 0x00000
	/* ---:--- */	#define	    bDRMWMFilter_HDR_filterFunc			   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMWMFilter_HDR_filterFunc			    0 /*:15*/
	/* ---:--- */	#define	MSK32DRMWMFilter_HDR_filterFunc			       0x0000FFFF
	/* ---:--- */	#define	GET32DRMWMFilter_HDR_filterFunc(r32)		 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRMWMFilter_HDR_filterFunc(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMWMFilter_HDR_filterFunc(r32,v)		do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMWMFilter_HDR_filterFunc(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [23:16] */	#define	  BA_DRMWMFilter_HDR_filterState		 0x00002
	/* ---:--- */	#define	    bDRMWMFilter_HDR_filterState		    8 /*bit*/
	/* ---:--- */	#define	LSb32DRMWMFilter_HDR_filterState		   16 /*:23*/
	/* ---:--- */	#define	MSK32DRMWMFilter_HDR_filterState		       0x00FF0000
	/* ---:--- */	#define	GET32DRMWMFilter_HDR_filterState(r32)		 (((r32)>>16)&0x00FF)
	/* ---:--- */	#define	GET16DRMWMFilter_HDR_filterState(r16)		 (((r16)>> 0)&0x00FF)
	/* ---:--- */	#define	SET32DRMWMFilter_HDR_filterState(r32,v)		do{(r32)&=~(0x00FF<<16);(r32)|=((v)&0x00FF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRMWMFilter_HDR_filterState(r16,v)		do{(r16)&=~(0x00FF<< 0);(r16)|=((v)&0x00FF)<< 0;}while(0)
					#define	     DRMWMFilter_HDR_filterState_INACTIVE		0x0
					#define	     DRMWMFilter_HDR_filterState_STOPPED		0x1
					#define	     DRMWMFilter_HDR_filterState_STOPPING		0x2
					#define	     DRMWMFilter_HDR_filterState_RUNNING		0x3
					#define	     DRMWMFilter_HDR_filterState_FLUSHING		0x4
					#define	     DRMWMFilter_HDR_filterState_PAUSING		0x5
					#define	     DRMWMFilter_HDR_filterState_PAUSED			0x6

	/* [24:24] */	#define	  BA_DRMWMFilter_HDR_isByPassMode		 0x00003
	/* ---:--- */	#define	    bDRMWMFilter_HDR_isByPassMode		    1 /*bit*/
	/* ---:--- */	#define	LSb32DRMWMFilter_HDR_isByPassMode		   24 /*:24*/
	/* ---:--- */	#define	MSK32DRMWMFilter_HDR_isByPassMode		       0x01000000
	/* ---:--- */	#define	GET32DRMWMFilter_HDR_isByPassMode(r32)		 (((r32)>>24)&0x0001)
	/* ---:--- */	#define	GET16DRMWMFilter_HDR_isByPassMode(r16)		 (((r16)>> 8)&0x0001)
	/* ---:--- */	#define	SET32DRMWMFilter_HDR_isByPassMode(r32,v)	do{(r32)&=~(0x0001<<24);(r32)|=((v)&0x0001)<<24;}while(0)
	/* ---:--- */	#define	SET16DRMWMFilter_HDR_isByPassMode(r16,v)	do{(r16)&=~(0x0001<< 8);(r16)|=((v)&0x0001)<< 8;}while(0)

	#define	RA_DRMWMFilter_IO 			0x00004
	#define	w32DRMWMFilter_IO 			{										\
					UNSG32				uIO_strmInPtr				 : 16;		\
					UNSG32				uIO_strmOutPtr				 : 16;		\
										}
	/* @'00004 */	union {	UNSG32		u32DRMWMFilter_IO;
								struct	w32DRMWMFilter_IO;
										};

	/* [15: 0] */	#define	  BA_DRMWMFilter_IO_strmInPtr			 0x00004
	/* ---:--- */	#define	    bDRMWMFilter_IO_strmInPtr			   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMWMFilter_IO_strmInPtr			    0 /*:15*/
	/* ---:--- */	#define	MSK32DRMWMFilter_IO_strmInPtr			       0x0000FFFF
	/* ---:--- */	#define	GET32DRMWMFilter_IO_strmInPtr(r32)			 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRMWMFilter_IO_strmInPtr(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMWMFilter_IO_strmInPtr(r32,v)		do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMWMFilter_IO_strmInPtr(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DRMWMFilter_IO_strmOutPtr			 0x00006
	/* ---:--- */	#define	    bDRMWMFilter_IO_strmOutPtr			   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMWMFilter_IO_strmOutPtr			   16 /*:31*/
	/* ---:--- */	#define	MSK32DRMWMFilter_IO_strmOutPtr			       0xFFFF0000
	/* ---:--- */	#define	GET32DRMWMFilter_IO_strmOutPtr(r32)			 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DRMWMFilter_IO_strmOutPtr(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMWMFilter_IO_strmOutPtr(r32,v)		do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRMWMFilter_IO_strmOutPtr(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DRMWMFilter_D2th_ 		ISC_USE_ONLY	0x00008
	#define	w32DRMWMFilter_D2th_ 		{										\
					UNSG32				u_datBase					 : 16;		\
					UNSG32				u_ctrlBase					 : 16;		\
										}
	/* @'00008 */				struct	w32DRMWMFilter_D2th_;

	/* [15: 0] */	#define	  BA_DRMWMFilter_datBase				 0x00008
	/* ---:--- */	#define	    bDRMWMFilter_datBase				   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMWMFilter_datBase				    0 /*:15*/
	/* ---:--- */	#define	MSK32DRMWMFilter_datBase				       0x0000FFFF
	/* ---:--- */	#define	GET32DRMWMFilter_datBase(r32)				 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRMWMFilter_datBase(r16)				 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMWMFilter_datBase(r32,v)				do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMWMFilter_datBase(r16,v)				do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DRMWMFilter_ctrlBase				 0x0000A
	/* ---:--- */	#define	    bDRMWMFilter_ctrlBase				   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMWMFilter_ctrlBase				   16 /*:31*/
	/* ---:--- */	#define	MSK32DRMWMFilter_ctrlBase				       0xFFFF0000
	/* ---:--- */	#define	GET32DRMWMFilter_ctrlBase(r32)				 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DRMWMFilter_ctrlBase(r16)				 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMWMFilter_ctrlBase(r32,v)			do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRMWMFilter_ctrlBase(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DRMWMFilter_D3th_ 		ISC_USE_ONLY	0x0000C
	#define	w32DRMWMFilter_D3th_ 		{										\
					UNSG32				u_datMaxSize				 : 16;		\
					UNSG32				u_ctrlMaxSize				 : 16;		\
										}
	/* @'0000C */				struct	w32DRMWMFilter_D3th_;

	/* [15: 0] */	#define	  BA_DRMWMFilter_datMaxSize				 0x0000C
	/* ---:--- */	#define	    bDRMWMFilter_datMaxSize				   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMWMFilter_datMaxSize				    0 /*:15*/
	/* ---:--- */	#define	MSK32DRMWMFilter_datMaxSize				       0x0000FFFF
	/* ---:--- */	#define	GET32DRMWMFilter_datMaxSize(r32)			 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRMWMFilter_datMaxSize(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMWMFilter_datMaxSize(r32,v)			do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMWMFilter_datMaxSize(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DRMWMFilter_ctrlMaxSize			 0x0000E
	/* ---:--- */	#define	    bDRMWMFilter_ctrlMaxSize			   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMWMFilter_ctrlMaxSize			   16 /*:31*/
	/* ---:--- */	#define	MSK32DRMWMFilter_ctrlMaxSize			       0xFFFF0000
	/* ---:--- */	#define	GET32DRMWMFilter_ctrlMaxSize(r32)			 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DRMWMFilter_ctrlMaxSize(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMWMFilter_ctrlMaxSize(r32,v)			do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRMWMFilter_ctrlMaxSize(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DRMWMFilter_D4th_ 		ISC_USE_ONLY	0x00010
	#define	w32DRMWMFilter_D4th_ 		{										\
					UNSG32				u_payLoadSize				 : 16;		\
					UNSG32				u_payLoadToRead				 : 16;		\
										}
	/* @'00010 */				struct	w32DRMWMFilter_D4th_;

	/* [15: 0] */	#define	  BA_DRMWMFilter_payLoadSize			 0x00010
	/* ---:--- */	#define	    bDRMWMFilter_payLoadSize			   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMWMFilter_payLoadSize			    0 /*:15*/
	/* ---:--- */	#define	MSK32DRMWMFilter_payLoadSize			       0x0000FFFF
	/* ---:--- */	#define	GET32DRMWMFilter_payLoadSize(r32)			 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRMWMFilter_payLoadSize(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMWMFilter_payLoadSize(r32,v)			do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMWMFilter_payLoadSize(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DRMWMFilter_payLoadToRead			 0x00012
	/* ---:--- */	#define	    bDRMWMFilter_payLoadToRead			   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMWMFilter_payLoadToRead			   16 /*:31*/
	/* ---:--- */	#define	MSK32DRMWMFilter_payLoadToRead			       0xFFFF0000
	/* ---:--- */	#define	GET32DRMWMFilter_payLoadToRead(r32)			 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DRMWMFilter_payLoadToRead(r16)			 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMWMFilter_payLoadToRead(r32,v)		do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRMWMFilter_payLoadToRead(r16,v)		do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DRMWMFilter_CTR 			0x00014
	#define	w32DRMWMFilter_CTR 			{										\
					UNSG32				uCTR_strmCtrIn				 : 32;		\
										}
	/* @'00014 */	union {	UNSG32		u32DRMWMFilter_CTR;
								struct	w32DRMWMFilter_CTR;
										};

	/* [31: 0] */	#define	  BA_DRMWMFilter_CTR_strmCtrIn			 0x00014
	/* ---:--- */	#define	    bDRMWMFilter_CTR_strmCtrIn			   32 /*bit*/
	/* ---:--- */	#define	LSb32DRMWMFilter_CTR_strmCtrIn			    0 /*:31*/
	/* ---:--- */	#define	MSK32DRMWMFilter_CTR_strmCtrIn			       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRMWMFilter_CTR_strmCtrIn(r32)			 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRMWMFilter_CTR_strmCtrIn(r16)			 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRMWMFilter_CTR_strmCtrIn(r32,v)		do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMWMFilter_CTR_strmCtrIn(r16,v)		do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_DRMWMFilter_keySeedFifo 	0x00018
	/* @'00018 */	SIE_DTCMFifo 				ie_keySeedFifo;

	#define	RA_DRMWMFilter_pbKeySeed 	0x00020
	/* @'00020 */	SIE_UINT64 					ie_pbKeySeed;

	#define	RA_DRMWMFilter_pbDESKey 	0x00028
	/* @'00028 */	SIE_UINT64 					ie_pbDESKey;

	#define	RA_DRMWMFilter_pbRC4Key 	0x00030
	/* @'00030 */	SIE_UINT64 					ie_pbRC4Key			 [2];
					#define	 arr_DRMWMFilter_pbRC4Key 				  2

	#define	RA_DRMWMFilter_pbFilterKey 	0x00040
	/* @'00040 */	SIE_UINT64 					ie_pbFilterKey		 [8];
					#define	 arr_DRMWMFilter_pbFilterKey 			  8

	#define	RA_DRMWMFilter_D32th_ 		ISC_USE_ONLY	0x00080
	#define	w32DRMWMFilter_D32th_ 		{										\
					UNSG32				u_isKeySet					 : 16;		\
					UNSG32				u_isKSeedOK					 : 16;		\
										}
	/* @'00080 */				struct	w32DRMWMFilter_D32th_;

	/* [15: 0] */	#define	  BA_DRMWMFilter_isKeySet				 0x00080
	/* ---:--- */	#define	    bDRMWMFilter_isKeySet				   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMWMFilter_isKeySet				    0 /*:15*/
	/* ---:--- */	#define	MSK32DRMWMFilter_isKeySet				       0x0000FFFF
	/* ---:--- */	#define	GET32DRMWMFilter_isKeySet(r32)				 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRMWMFilter_isKeySet(r16)				 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMWMFilter_isKeySet(r32,v)			do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMWMFilter_isKeySet(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DRMWMFilter_isKSeedOK				 0x00082
	/* ---:--- */	#define	    bDRMWMFilter_isKSeedOK				   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMWMFilter_isKSeedOK				   16 /*:31*/
	/* ---:--- */	#define	MSK32DRMWMFilter_isKSeedOK				       0xFFFF0000
	/* ---:--- */	#define	GET32DRMWMFilter_isKSeedOK(r32)				 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DRMWMFilter_isKSeedOK(r16)				 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMWMFilter_isKSeedOK(r32,v)			do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRMWMFilter_isKSeedOK(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DRMWMFilter_D33th_ 		ISC_USE_ONLY	0x00084
	#define	w32DRMWMFilter_D33th_ 		{										\
					UNSG32				u_pbDESCtx					 : 16;		\
					UNSG32				u_reserved					 : 16;		\
										}
	/* @'00084 */				struct	w32DRMWMFilter_D33th_;

	/* [15: 0] */	#define	  BA_DRMWMFilter_pbDESCtx				 0x00084
	/* ---:--- */	#define	    bDRMWMFilter_pbDESCtx				   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMWMFilter_pbDESCtx				    0 /*:15*/
	/* ---:--- */	#define	MSK32DRMWMFilter_pbDESCtx				       0x0000FFFF
	/* ---:--- */	#define	GET32DRMWMFilter_pbDESCtx(r32)				 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRMWMFilter_pbDESCtx(r16)				 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMWMFilter_pbDESCtx(r32,v)			do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMWMFilter_pbDESCtx(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DRMWMFilter_reserved				 0x00086
	/* ---:--- */	#define	    bDRMWMFilter_reserved				   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMWMFilter_reserved				   16 /*:31*/
	/* ---:--- */	#define	MSK32DRMWMFilter_reserved				       0xFFFF0000
	/* ---:--- */	#define	GET32DRMWMFilter_reserved(r32)				 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DRMWMFilter_reserved(r16)				 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMWMFilter_reserved(r32,v)			do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRMWMFilter_reserved(r16,v)			do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

} SIE_DRMWMFilter;

	#define	dftDRMWMFilter_HDR 			0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DRMWMFilter_HDR;
										} T32DRMWMFilter_HDR;
	#define	dftDRMWMFilter_IO 			0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DRMWMFilter_IO;
										} T32DRMWMFilter_IO;
	#define	dftDRMWMFilter_CTR 			0x00000000
			typedef	union {	UNSG32		u32;
								struct	w32DRMWMFilter_CTR;
										} T32DRMWMFilter_CTR;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRMWMFilter_drvrd (SIE_DRMWMFilter *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRMWMFilter_drvwr (SIE_DRMWMFilter *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRMWMFilter_reset (SIE_DRMWMFilter *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRMWMFilter_check(p,pie,ps8name,hfpErrLOG)		DRMWMFilter_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRMWMFilter_print(p,    ps8name,hfpErrLOG)		DRMWMFilter_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRMWMFilter_cmp   (SIE_DRMWMFilter *p, SIE_DRMWMFilter *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRMWMFilter_import(SIE_DRMWMFilter *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRMWMFilter_export(SIE_DRMWMFilter *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRMWMFilter
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRMDiagWMFilterCtx
*	@  DAT_START
*		$UINT128  datStart  REG
*		$UINT64  dsCmdFifo  REG  [16]
*						*  *
*						*  Data streamer command FIFO
*		$UINT128  blkStart  REG
*						*  *
*						*  Transfer Data Area
*	@  0x2000  LA_START
*		$LocalArea  la
*						*  *
*						*  Local area
*	@  CTX_START
*		$DTCMBlkPool  datInMemPool
*						*  *
*						*  Data memory pool
*		$DTCMBlkPool  datOutMemPool
*						*  *
*						*  Data memory pool
*	@  STREAMS
*		$DSStreamIn  datStrmIn  REG  [2]
*						*  *
*						*  DS Input stream
*		$CtrlFIFOData  datCtrlFifo  REG  [2]
*						*  *
*						*  Control FIFO data
*		$KeySeedData  keySeedFifo  REG  [2]
*						*  *
*						*  Key Seed FIFO data
*		$DSStreamOut  datStrmOut  REG  [2]
*						*  *
*						*  DS Ouput stream
*		$DSStreamOutModule  datStrmOutModule
*	@  FILTERS
*		$DRMWMFilter  wmFilterList  REG  [1]
*						*  *
*						*  Blue Ray DVD Context
*		$UINT128  datFilterBuf  REG  [16]
*						*  *
*						*  Temp buffer for Filter data
*		$UINT128  ctrlFilterBuf  REG  [8]
*						*  *
*						*  Temp buffer for Filter Control
*	@
*		$RC4_CTXDAT  rc4Ctx
*						*  *
*						*  RC4 Context
*	@
*		$DES_CTXDAT  desCtx
*						*  *
*						*  DES Context
*	@
*		$CBCMAC_CTXDAT  cbcCtx
*						*  *
*						*  CBC MAC Context
*	@  DTCMSIZE
*		%unsigned  16  uTotalSize  REG
*	@
*		%unsigned  16  padding  REG  [5]
*	@  IMG_END
*		$UINT128  resserved  REG
**********************************************************************************************************************/
#ifdef	h_DRMDiagWMFilterCtx
#else
#define	h_DRMDiagWMFilterCtx

#define	\
	AR_DRMDiagWMFilterCtx \
		3630
#define	\
	AB_DRMDiagWMFilterCtx \
		14

typedef struct SIE_DRMDiagWMFilterCtx {

	#define	RA_DRMDiagWMFilterCtx_DAT_START 0x00000
	/* @'00000 */	SIE_UINT128 				ie_datStart;

	#define	RA_DRMDiagWMFilterCtx_dsCmdFifo 0x00010
	/* @'00010 */	SIE_UINT64 					ie_dsCmdFifo		 [16];
					#define	 arr_DRMDiagWMFilterCtx_dsCmdFifo 		  16

	#define	RA_DRMDiagWMFilterCtx_blkStart 0x00090
	/* @'00090 */	SIE_UINT128 				ie_blkStart;

	UNSG32	_PAD_000[(0x02000-0x000A0)/4];
	#define	RA_DRMDiagWMFilterCtx_LA_START 0x02000
	/* @'02000 */	SIE_LocalArea 				ie_la;

	#define	RA_DRMDiagWMFilterCtx_CTX_START 0x02228
	/* @'02228 */	SIE_DTCMBlkPool 			ie_datInMemPool;

	#define	RA_DRMDiagWMFilterCtx_datOutMemPool 0x02350
	/* @'02350 */	SIE_DTCMBlkPool 			ie_datOutMemPool;

	#define	RA_DRMDiagWMFilterCtx_STREAMS 0x02478
	/* @'02478 */	SIE_DSStreamIn 				ie_datStrmIn		 [2];
					#define	 arr_DRMDiagWMFilterCtx_datStrmIn 		  2

	#define	RA_DRMDiagWMFilterCtx_datCtrlFifo 0x02508
	/* @'02508 */	SIE_CtrlFIFOData 			ie_datCtrlFifo		 [2];
					#define	 arr_DRMDiagWMFilterCtx_datCtrlFifo 	  2

	#define	RA_DRMDiagWMFilterCtx_keySeedFifo 0x02588
	/* @'02588 */	SIE_KeySeedData 			ie_keySeedFifo		 [2];
					#define	 arr_DRMDiagWMFilterCtx_keySeedFifo 	  2

	#define	RA_DRMDiagWMFilterCtx_datStrmOut 0x02608
	/* @'02608 */	SIE_DSStreamOut 			ie_datStrmOut		 [2];
					#define	 arr_DRMDiagWMFilterCtx_datStrmOut 		  2

	#define	RA_DRMDiagWMFilterCtx_datStrmOutModule 0x02638
	/* @'02638 */	SIE_DSStreamOutModule 		ie_datStrmOutModule;

	#define	RA_DRMDiagWMFilterCtx_FILTERS 0x02650
	/* @'02650 */	SIE_DRMWMFilter 			ie_wmFilterList;

	#define	RA_DRMDiagWMFilterCtx_datFilterBuf 0x026D8
	/* @'026D8 */	SIE_UINT128 				ie_datFilterBuf		 [16];
					#define	 arr_DRMDiagWMFilterCtx_datFilterBuf 	  16

	#define	RA_DRMDiagWMFilterCtx_ctrlFilterBuf 0x027D8
	/* @'027D8 */	SIE_UINT128 				ie_ctrlFilterBuf	 [8];
					#define	 arr_DRMDiagWMFilterCtx_ctrlFilterBuf 	  8

	#define	RA_DRMDiagWMFilterCtx_rc4Ctx 0x02858
	/* @'02858 */	SIE_RC4_CTXDAT 				ie_rc4Ctx;

	#define	RA_DRMDiagWMFilterCtx_desCtx 0x02A60
	/* @'02A60 */	SIE_DES_CTXDAT 				ie_desCtx;

	#define	RA_DRMDiagWMFilterCtx_cbcCtx 0x035D8
	/* @'035D8 */	SIE_CBCMAC_CTXDAT 			ie_cbcCtx;

	#define	RA_DRMDiagWMFilterCtx_DTCMSIZE 0x03898
	#define	w32DRMDiagWMFilterCtx_DTCMSIZE {									\
					UNSG32				uDTCMSIZE_uTotalSize		 : 16;		\
					UNSG32				_x03898	: 16;							\
										}
	/* @'03898 */	union {	UNSG32		u32DRMDiagWMFilterCtx_DTCMSIZE;
								struct	w32DRMDiagWMFilterCtx_DTCMSIZE;
										};

	/* [15: 0] */	#define	  BA_DRMDiagWMFilterCtx_DTCMSIZE_uTotalSize 0x03898
	/* ---:--- */	#define	    bDRMDiagWMFilterCtx_DTCMSIZE_uTotalSize   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMDiagWMFilterCtx_DTCMSIZE_uTotalSize    0 /*:15*/
	/* ---:--- */	#define	MSK32DRMDiagWMFilterCtx_DTCMSIZE_uTotalSize       0x0000FFFF
	/* ---:--- */	#define	GET32DRMDiagWMFilterCtx_DTCMSIZE_uTotalSize(r32) (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRMDiagWMFilterCtx_DTCMSIZE_uTotalSize(r16) (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMDiagWMFilterCtx_DTCMSIZE_uTotalSize(r32,v)do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMDiagWMFilterCtx_DTCMSIZE_uTotalSize(r16,v)do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DRMDiagWMFilterCtx_D3623th_ ISC_USE_ONLY	0x0389C
	#define	w32DRMDiagWMFilterCtx_D3623th_ {									\
					UNSG32				u_padding_0i				 : 16;		\
					UNSG32				u_padding_1i				 : 16;		\
										}
	/* @'0389C */				struct	w32DRMDiagWMFilterCtx_D3623th_;

	/* [15: 0] */	#define	  BA_DRMDiagWMFilterCtx_padding_0i		 0x0389C
	/* ---:--- */	#define	    bDRMDiagWMFilterCtx_padding_0i		   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMDiagWMFilterCtx_padding_0i		    0 /*:15*/
	/* ---:--- */	#define	MSK32DRMDiagWMFilterCtx_padding_0i		       0x0000FFFF
	/* ---:--- */	#define	GET32DRMDiagWMFilterCtx_padding_0i(r32)		 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRMDiagWMFilterCtx_padding_0i(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMDiagWMFilterCtx_padding_0i(r32,v)	do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMDiagWMFilterCtx_padding_0i(r16,v)	do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DRMDiagWMFilterCtx_padding_1i		 0x0389E
	/* ---:--- */	#define	    bDRMDiagWMFilterCtx_padding_1i		   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMDiagWMFilterCtx_padding_1i		   16 /*:31*/
	/* ---:--- */	#define	MSK32DRMDiagWMFilterCtx_padding_1i		       0xFFFF0000
	/* ---:--- */	#define	GET32DRMDiagWMFilterCtx_padding_1i(r32)		 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DRMDiagWMFilterCtx_padding_1i(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMDiagWMFilterCtx_padding_1i(r32,v)	do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRMDiagWMFilterCtx_padding_1i(r16,v)	do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DRMDiagWMFilterCtx_D3624th_ ISC_USE_ONLY	0x038A0
	#define	w32DRMDiagWMFilterCtx_D3624th_ {									\
					UNSG32				u_padding_2i				 : 16;		\
					UNSG32				u_padding_3i				 : 16;		\
										}
	/* @'038A0 */				struct	w32DRMDiagWMFilterCtx_D3624th_;

	/* [15: 0] */	#define	  BA_DRMDiagWMFilterCtx_padding_2i		 0x038A0
	/* ---:--- */	#define	    bDRMDiagWMFilterCtx_padding_2i		   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMDiagWMFilterCtx_padding_2i		    0 /*:15*/
	/* ---:--- */	#define	MSK32DRMDiagWMFilterCtx_padding_2i		       0x0000FFFF
	/* ---:--- */	#define	GET32DRMDiagWMFilterCtx_padding_2i(r32)		 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRMDiagWMFilterCtx_padding_2i(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMDiagWMFilterCtx_padding_2i(r32,v)	do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMDiagWMFilterCtx_padding_2i(r16,v)	do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_DRMDiagWMFilterCtx_padding_3i		 0x038A2
	/* ---:--- */	#define	    bDRMDiagWMFilterCtx_padding_3i		   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMDiagWMFilterCtx_padding_3i		   16 /*:31*/
	/* ---:--- */	#define	MSK32DRMDiagWMFilterCtx_padding_3i		       0xFFFF0000
	/* ---:--- */	#define	GET32DRMDiagWMFilterCtx_padding_3i(r32)		 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16DRMDiagWMFilterCtx_padding_3i(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMDiagWMFilterCtx_padding_3i(r32,v)	do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16DRMDiagWMFilterCtx_padding_3i(r16,v)	do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DRMDiagWMFilterCtx_D3625th_ ISC_USE_ONLY	0x038A4
	#define	w32DRMDiagWMFilterCtx_D3625th_ {									\
					UNSG32				u_padding_4i				 : 16;		\
					UNSG32				_x038A4	: 16;							\
										}
	/* @'038A4 */				struct	w32DRMDiagWMFilterCtx_D3625th_;

	/* [15: 0] */	#define	  BA_DRMDiagWMFilterCtx_padding_4i		 0x038A4
	/* ---:--- */	#define	    bDRMDiagWMFilterCtx_padding_4i		   16 /*bit*/
	/* ---:--- */	#define	LSb32DRMDiagWMFilterCtx_padding_4i		    0 /*:15*/
	/* ---:--- */	#define	MSK32DRMDiagWMFilterCtx_padding_4i		       0x0000FFFF
	/* ---:--- */	#define	GET32DRMDiagWMFilterCtx_padding_4i(r32)		 (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16DRMDiagWMFilterCtx_padding_4i(r16)		 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32DRMDiagWMFilterCtx_padding_4i(r32,v)	do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMDiagWMFilterCtx_padding_4i(r16,v)	do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_DRMDiagWMFilterCtx_IMG_END 0x038A8
	/* @'038A8 */	SIE_UINT128 				ie_resserved;

} SIE_DRMDiagWMFilterCtx;

	#define	dftDRMDiagWMFilterCtx_DTCMSIZE 0x0000CCCC
			typedef	union {	UNSG32		u32;
								struct	w32DRMDiagWMFilterCtx_DTCMSIZE;
										} T32DRMDiagWMFilterCtx_DTCMSIZE;

/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRMDiagWMFilterCtx_drvrd (SIE_DRMDiagWMFilterCtx *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRMDiagWMFilterCtx_drvwr (SIE_DRMDiagWMFilterCtx *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRMDiagWMFilterCtx_reset (SIE_DRMDiagWMFilterCtx *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRMDiagWMFilterCtx_check(p,pie,ps8name,hfpErrLOG)		DRMDiagWMFilterCtx_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRMDiagWMFilterCtx_print(p,    ps8name,hfpErrLOG)		DRMDiagWMFilterCtx_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRMDiagWMFilterCtx_cmp   (SIE_DRMDiagWMFilterCtx *p, SIE_DRMDiagWMFilterCtx *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRMDiagWMFilterCtx_import(SIE_DRMDiagWMFilterCtx *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRMDiagWMFilterCtx_export(SIE_DRMDiagWMFilterCtx *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRMDiagWMFilterCtx
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: CUSTOMER_KEYSTORE_HEADER
*	@
*		$DRM_SUBKEY_OUT  encKey
*						*  *
*						*  The key used to protect the content
*	@
*		%unsigned  16  uDOBSubType
*						*  *
*						*  The Sub Type of content
*		%unsigned  16  uDOBType
*						*  *
*						*  The major type of content, it's Key, Msg or Certificate
*	@
*		%unsigned  32  reserve
*						*  *
*						*  Reserver to align-8bytes
*	@
*		$DRM_DIGEST  authData
*						*  *
*						*  Authentication information signed by sigKey
*	@
*		$UINT32  reserver  REG  [5]
*	@
*		$UINT32  uDataSize
*						*  *
*						*  Size of the plaintext of content
*	@
*		$UINT32  storeData
**********************************************************************************************************************/
#ifdef	h_CUSTOMER_KEYSTORE_HEADER
#else
#define	h_CUSTOMER_KEYSTORE_HEADER

#define	\
	AR_CUSTOMER_KEYSTORE_HEADER \
		33
#define	\
	AB_CUSTOMER_KEYSTORE_HEADER \
		8

typedef struct SIE_CUSTOMER_KEYSTORE_HEADER {

	#define	RA_CUSTOMER_KEYSTORE_HEADER_encKey 0x00000
	/* @'00000 */	SIE_DRM_SUBKEY_OUT 			ie_encKey;

	#define	RA_CUSTOMER_KEYSTORE_HEADER_D16th_ ISC_USE_ONLY	0x00040
	#define	w32CUSTOMER_KEYSTORE_HEADER_D16th_ {								\
					UNSG32				u_uDOBSubType				 : 16;		\
					UNSG32				u_uDOBType					 : 16;		\
										}
	/* @'00040 */				struct	w32CUSTOMER_KEYSTORE_HEADER_D16th_;

	/* [15: 0] */	#define	  BA_CUSTOMER_KEYSTORE_HEADER_uDOBSubType 0x00040
	/* ---:--- */	#define	    bCUSTOMER_KEYSTORE_HEADER_uDOBSubType   16 /*bit*/
	/* ---:--- */	#define	LSb32CUSTOMER_KEYSTORE_HEADER_uDOBSubType    0 /*:15*/
	/* ---:--- */	#define	MSK32CUSTOMER_KEYSTORE_HEADER_uDOBSubType       0x0000FFFF
	/* ---:--- */	#define	GET32CUSTOMER_KEYSTORE_HEADER_uDOBSubType(r32) (((r32)>> 0)&0xFFFF)
	/* ---:--- */	#define	GET16CUSTOMER_KEYSTORE_HEADER_uDOBSubType(r16) (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32CUSTOMER_KEYSTORE_HEADER_uDOBSubType(r32,v)do{(r32)&=~(0xFFFF<< 0);(r32)|=((v)&0xFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16CUSTOMER_KEYSTORE_HEADER_uDOBSubType(r16,v)do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	/* [31:16] */	#define	  BA_CUSTOMER_KEYSTORE_HEADER_uDOBType	 0x00042
	/* ---:--- */	#define	    bCUSTOMER_KEYSTORE_HEADER_uDOBType	   16 /*bit*/
	/* ---:--- */	#define	LSb32CUSTOMER_KEYSTORE_HEADER_uDOBType	   16 /*:31*/
	/* ---:--- */	#define	MSK32CUSTOMER_KEYSTORE_HEADER_uDOBType	       0xFFFF0000
	/* ---:--- */	#define	GET32CUSTOMER_KEYSTORE_HEADER_uDOBType(r32)	 (((r32)>>16)&0xFFFF)
	/* ---:--- */	#define	GET16CUSTOMER_KEYSTORE_HEADER_uDOBType(r16)	 (((r16)>> 0)&0xFFFF)
	/* ---:--- */	#define	SET32CUSTOMER_KEYSTORE_HEADER_uDOBType(r32,v)do{(r32)&=~(0xFFFF<<16);(r32)|=((v)&0xFFFF)<<16;}while(0)
	/* ---:--- */	#define	SET16CUSTOMER_KEYSTORE_HEADER_uDOBType(r16,v)do{(r16)&=~(0xFFFF<< 0);(r16)|=((v)&0xFFFF)<< 0;}while(0)

	#define	RA_CUSTOMER_KEYSTORE_HEADER_D17th_ ISC_USE_ONLY	0x00044
	#define	w32CUSTOMER_KEYSTORE_HEADER_D17th_ {								\
					UNSG32				u_reserve					 : 32;		\
										}
	/* @'00044 */				struct	w32CUSTOMER_KEYSTORE_HEADER_D17th_;

	/* [31: 0] */	#define	  BA_CUSTOMER_KEYSTORE_HEADER_reserve	 0x00044
	/* ---:--- */	#define	    bCUSTOMER_KEYSTORE_HEADER_reserve	   32 /*bit*/
	/* ---:--- */	#define	LSb32CUSTOMER_KEYSTORE_HEADER_reserve	    0 /*:31*/
	/* ---:--- */	#define	MSK32CUSTOMER_KEYSTORE_HEADER_reserve	       0xFFFFFFFF
	/* ---:--- */	#define	GET32CUSTOMER_KEYSTORE_HEADER_reserve(r32)	 (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16CUSTOMER_KEYSTORE_HEADER_reserve(r16)	 (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32CUSTOMER_KEYSTORE_HEADER_reserve(r32,v)do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16CUSTOMER_KEYSTORE_HEADER_reserve(r16,v)do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)

	#define	RA_CUSTOMER_KEYSTORE_HEADER_authData 0x00048
	/* @'00048 */	SIE_DRM_DIGEST 				ie_authData;

	#define	RA_CUSTOMER_KEYSTORE_HEADER_reserver 0x00068
	/* @'00068 */	SIE_UINT32 					ie_reserver			 [5];
					#define	 arr_CUSTOMER_KEYSTORE_HEADER_reserver 	  5

	#define	RA_CUSTOMER_KEYSTORE_HEADER_uDataSize 0x0007C
	/* @'0007C */	SIE_UINT32 					ie_uDataSize;

	#define	RA_CUSTOMER_KEYSTORE_HEADER_storeData 0x00080
	/* @'00080 */	SIE_UINT32 					ie_storeData;

} SIE_CUSTOMER_KEYSTORE_HEADER;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	CUSTOMER_KEYSTORE_HEADER_drvrd (SIE_CUSTOMER_KEYSTORE_HEADER *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	CUSTOMER_KEYSTORE_HEADER_drvwr (SIE_CUSTOMER_KEYSTORE_HEADER *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	CUSTOMER_KEYSTORE_HEADER_reset (SIE_CUSTOMER_KEYSTORE_HEADER *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	CUSTOMER_KEYSTORE_HEADER_check(p,pie,ps8name,hfpErrLOG)		CUSTOMER_KEYSTORE_HEADER_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	CUSTOMER_KEYSTORE_HEADER_print(p,    ps8name,hfpErrLOG)		CUSTOMER_KEYSTORE_HEADER_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	CUSTOMER_KEYSTORE_HEADER_cmp   (SIE_CUSTOMER_KEYSTORE_HEADER *p, SIE_CUSTOMER_KEYSTORE_HEADER *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	CUSTOMER_KEYSTORE_HEADER_import(SIE_CUSTOMER_KEYSTORE_HEADER *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	CUSTOMER_KEYSTORE_HEADER_export(SIE_CUSTOMER_KEYSTORE_HEADER *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: CUSTOMER_KEYSTORE_HEADER
**********************************************************************************************************************/



/**********************************************************************************************************************
*	INTERFACE: DRMDiag_CUSTOMER_KEYSTORE_CTX
*	@
*		$DRMROM_CMD  cmd
*						*  *
*						*  ROM code command and response buffer
*	@
*		$LocalArea  la
*						*  *
*						*  Local data area
*	@
*		$UINT64  dsFifoDat  REG  [16]
*						*  *
*						*  Data streamer fifo data
*	@  0x2000
*		$UINT32  cmdFlag
*						*  *
*						*  Command flag used by ARM to notice its status
*						*  *
*						*  0xa5, to load customer key
*						*  *
*						*  0xde,       to jump to figo rom code
*	@
*		$UINT32  rspFlag
*						*  *
*						*  Response flag used by FIGO to notice ARM its status
*	@
*		%unsigned  32  uErrorCode
*			:  RETURN_OK  0
*			:  INVALID_ENC_KEYID  1
*			:  INVALID_SIGN_KEYID  2
*			:  AESUNWRAP_FAILED  3
*			:  CMAC_VERIFY_FAILED  4
*	@
*		$UINT32  uKeyId
*						*  *
*						*  Customer Key index to indicate the location in USER key area
*	@
*		$UINT64  custKeystore  REG  [50]
*						*  *
*						*  Customer key store
*	@
*		$UINT64  CustKeyData  REG  [40]
*						*  *
*						*  Buffer to contain the plain text key data
*	@
*		$UINT32  aesSubKey  REG  [4]
*						*  *
*						*  AES128 sub key context
*	@
*		$UINT32  signKey  REG  [4]
*						*  *
*						*  CMAC signature verification key
*	@
*		$UINT128  rndKeyBuf  REG  [16]
*						*  *
*						*  Temporary buffer for round keys
*	@
*		$UINT32  TmpBuffer  REG  [100]
*						*  *
*						*  Temporary buffer for data encryption
*	@
*		$UINT32  pbMac  REG  [10]
*						*  *
*						*  MAC value calcuated on the fly
*	@
*		$UINT32  pbIV  REG  [4]
*						*  *
*						*  IV vector for AES CBC mode
*	@
*		$UINT128  stack
*						*  *
*						*  Transfer memory
**********************************************************************************************************************/
#ifdef	h_DRMDiag_CUSTOMER_KEYSTORE_CTX
#else
#define	h_DRMDiag_CUSTOMER_KEYSTORE_CTX

#define	\
	AR_DRMDiag_CUSTOMER_KEYSTORE_CTX \
		2422
#define	\
	AB_DRMDiag_CUSTOMER_KEYSTORE_CTX \
		14

typedef struct SIE_DRMDiag_CUSTOMER_KEYSTORE_CTX {

	#define	RA_DRMDiag_CUSTOMER_KEYSTORE_CTX_cmd 0x00000
	/* @'00000 */	SIE_DRMROM_CMD 				ie_cmd;

	#define	RA_DRMDiag_CUSTOMER_KEYSTORE_CTX_la 0x00028
	/* @'00028 */	SIE_LocalArea 				ie_la;

	#define	RA_DRMDiag_CUSTOMER_KEYSTORE_CTX_dsFifoDat 0x00250
	/* @'00250 */	SIE_UINT64 					ie_dsFifoDat		 [16];
					#define	 arr_DRMDiag_CUSTOMER_KEYSTORE_CTX_dsFifoDat   16

	UNSG32	_PAD_000[(0x02000-0x002D0)/4];
	#define	RA_DRMDiag_CUSTOMER_KEYSTORE_CTX_cmdFlag 0x02000
	/* @'02000 */	SIE_UINT32 					ie_cmdFlag;

	#define	RA_DRMDiag_CUSTOMER_KEYSTORE_CTX_rspFlag 0x02004
	/* @'02004 */	SIE_UINT32 					ie_rspFlag;

	#define	RA_DRMDiag_CUSTOMER_KEYSTORE_CTX_D2050th_ ISC_USE_ONLY	0x02008
	#define	w32DRMDiag_CUSTOMER_KEYSTORE_CTX_D2050th_ {							\
					UNSG32				u_uErrorCode				 : 32;		\
										}
	/* @'02008 */				struct	w32DRMDiag_CUSTOMER_KEYSTORE_CTX_D2050th_;

	/* [31: 0] */	#define	  BA_DRMDiag_CUSTOMER_KEYSTORE_CTX_uErrorCode 0x02008
	/* ---:--- */	#define	    bDRMDiag_CUSTOMER_KEYSTORE_CTX_uErrorCode   32 /*bit*/
	/* ---:--- */	#define	LSb32DRMDiag_CUSTOMER_KEYSTORE_CTX_uErrorCode    0 /*:31*/
	/* ---:--- */	#define	MSK32DRMDiag_CUSTOMER_KEYSTORE_CTX_uErrorCode       0xFFFFFFFF
	/* ---:--- */	#define	GET32DRMDiag_CUSTOMER_KEYSTORE_CTX_uErrorCode(r32) (((r32)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	GET16DRMDiag_CUSTOMER_KEYSTORE_CTX_uErrorCode(r16) (((r16)>> 0)&0xFFFFFFFF)
	/* ---:--- */	#define	SET32DRMDiag_CUSTOMER_KEYSTORE_CTX_uErrorCode(r32,v)do{(r32)&=~(0xFFFFFFFF<< 0);(r32)|=((v)&0xFFFFFFFF)<< 0;}while(0)
	/* ---:--- */	#define	SET16DRMDiag_CUSTOMER_KEYSTORE_CTX_uErrorCode(r16,v)do{(r16)&=~(0xFFFFFFFF<< 0);(r16)|=((v)&0xFFFFFFFF)<< 0;}while(0)
					#define	     DRMDiag_CUSTOMER_KEYSTORE_CTX_uErrorCode_RETURN_OK	0x0
					#define	     DRMDiag_CUSTOMER_KEYSTORE_CTX_uErrorCode_INVALID_ENC_KEYID	0x1
					#define	     DRMDiag_CUSTOMER_KEYSTORE_CTX_uErrorCode_INVALID_SIGN_KEYID	0x2
					#define	     DRMDiag_CUSTOMER_KEYSTORE_CTX_uErrorCode_AESUNWRAP_FAILED	0x3
					#define	     DRMDiag_CUSTOMER_KEYSTORE_CTX_uErrorCode_CMAC_VERIFY_FAILED	0x4

	#define	RA_DRMDiag_CUSTOMER_KEYSTORE_CTX_uKeyId 0x0200C
	/* @'0200C */	SIE_UINT32 					ie_uKeyId;

	#define	RA_DRMDiag_CUSTOMER_KEYSTORE_CTX_custKeystore 0x02010
	/* @'02010 */	SIE_UINT64 					ie_custKeystore		 [50];
					#define	 arr_DRMDiag_CUSTOMER_KEYSTORE_CTX_custKeystore   50

	#define	RA_DRMDiag_CUSTOMER_KEYSTORE_CTX_CustKeyData 0x021A0
	/* @'021A0 */	SIE_UINT64 					ie_CustKeyData		 [40];
					#define	 arr_DRMDiag_CUSTOMER_KEYSTORE_CTX_CustKeyData   40

	#define	RA_DRMDiag_CUSTOMER_KEYSTORE_CTX_aesSubKey 0x022E0
	/* @'022E0 */	SIE_UINT32 					ie_aesSubKey		 [4];
					#define	 arr_DRMDiag_CUSTOMER_KEYSTORE_CTX_aesSubKey   4

	#define	RA_DRMDiag_CUSTOMER_KEYSTORE_CTX_signKey 0x022F0
	/* @'022F0 */	SIE_UINT32 					ie_signKey			 [4];
					#define	 arr_DRMDiag_CUSTOMER_KEYSTORE_CTX_signKey   4

	#define	RA_DRMDiag_CUSTOMER_KEYSTORE_CTX_rndKeyBuf 0x02300
	/* @'02300 */	SIE_UINT128 				ie_rndKeyBuf		 [16];
					#define	 arr_DRMDiag_CUSTOMER_KEYSTORE_CTX_rndKeyBuf   16

	#define	RA_DRMDiag_CUSTOMER_KEYSTORE_CTX_TmpBuffer 0x02400
	/* @'02400 */	SIE_UINT32 					ie_TmpBuffer		 [100];
					#define	 arr_DRMDiag_CUSTOMER_KEYSTORE_CTX_TmpBuffer   100

	#define	RA_DRMDiag_CUSTOMER_KEYSTORE_CTX_pbMac 0x02590
	/* @'02590 */	SIE_UINT32 					ie_pbMac			 [10];
					#define	 arr_DRMDiag_CUSTOMER_KEYSTORE_CTX_pbMac   10

	#define	RA_DRMDiag_CUSTOMER_KEYSTORE_CTX_pbIV 0x025B8
	/* @'025B8 */	SIE_UINT32 					ie_pbIV				 [4];
					#define	 arr_DRMDiag_CUSTOMER_KEYSTORE_CTX_pbIV   4

	#define	RA_DRMDiag_CUSTOMER_KEYSTORE_CTX_stack 0x025C8
	/* @'025C8 */	SIE_UINT128 				ie_stack;

} SIE_DRMDiag_CUSTOMER_KEYSTORE_CTX;


/* Member function: read (or self test read) from SRAM or flat register interface and return words read */
SIGN32	DRMDiag_CUSTOMER_KEYSTORE_CTX_drvrd (SIE_DRMDiag_CUSTOMER_KEYSTORE_CTX *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST);

/* Member function: generate write-commands or direct-write (or self test write) and return write count */
SIGN32	DRMDiag_CUSTOMER_KEYSTORE_CTX_drvwr (SIE_DRMDiag_CUSTOMER_KEYSTORE_CTX *p, UNSG32 u32base, SIGN32 bMEM, SIGN32 bST, UNSG32 *pu32cmd);

/* Member function: element reset */
void	DRMDiag_CUSTOMER_KEYSTORE_CTX_reset (SIE_DRMDiag_CUSTOMER_KEYSTORE_CTX *p);

/* Member function: check elements, return SUCCESS if identical or ERR_MISMATCH */
#define	DRMDiag_CUSTOMER_KEYSTORE_CTX_check(p,pie,ps8name,hfpErrLOG)		DRMDiag_CUSTOMER_KEYSTORE_CTX_cmp(p,pie, ps8name,hfpErrLOG,0,0)
#define	DRMDiag_CUSTOMER_KEYSTORE_CTX_print(p,    ps8name,hfpErrLOG)		DRMDiag_CUSTOMER_KEYSTORE_CTX_cmp(p,NULL,ps8name,hfpErrLOG,0,0)
SIGN32	DRMDiag_CUSTOMER_KEYSTORE_CTX_cmp   (SIE_DRMDiag_CUSTOMER_KEYSTORE_CTX *p, SIE_DRMDiag_CUSTOMER_KEYSTORE_CTX *pie, char *ps8name, UNSG32 hfpErrLOG, SIGN32 bMEM, SIGN32 bST);

/* Member function: import interface values from a text string of compact all bits */
SIGN32	DRMDiag_CUSTOMER_KEYSTORE_CTX_import(SIE_DRMDiag_CUSTOMER_KEYSTORE_CTX *p, char *regs);

/* Member function: export interface values to a text string of compact all bits */
SIGN32	DRMDiag_CUSTOMER_KEYSTORE_CTX_export(SIE_DRMDiag_CUSTOMER_KEYSTORE_CTX *p, char *regs);

#endif
/**********************************************************************************************************************
*	ENDOFINTERFACE: DRMDiag_CUSTOMER_KEYSTORE_CTX
**********************************************************************************************************************/



#pragma	pack()

#ifdef	__cplusplus
	}
#endif

#endif	/* _customer_keystore_spec_h */
/**********************************************************************************************************************
*	ENDOFFILE (by "Interface Specification Compiler" ver-1.0): customer_keystore_spec.h
**********************************************************************************************************************/

