# include  "cdm.h" 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "stddef.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								int  write_dmi ( uint8_t  * dst ,  uint64_t  * addr ,  uint32_t  length ,  uint32_t  dmi_addr ,  uint8_t  sel )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  struct  cdm_dmi_cmd  * cmd  =  ( struct  cdm_dmi_cmd * ) dst ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  cmd - > cmd  =  CAM_CDM_CMD_DMI_32 ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  cmd - > length  =  length  -  1 ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  cmd - > reserved  =  0 ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  cmd - > addr  =  0 ;  // gets patched in
   
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  cmd - > DMIAddr  =  dmi_addr ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  cmd - > DMISel  =  sel ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  * addr  =  ( uint64_t ) ( dst  +  offsetof ( struct  cdm_dmi_cmd ,  addr ) ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  sizeof ( struct  cdm_dmi_cmd ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								int  write_cont ( uint8_t  * dst ,  uint32_t  reg ,  const  std : : vector < uint32_t >  & vals )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  struct  cdm_regcontinuous_cmd  * cmd  =  ( struct  cdm_regcontinuous_cmd * ) dst ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  cmd - > cmd  =  CAM_CDM_CMD_REG_CONT ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  cmd - > count  =  vals . size ( ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  cmd - > offset  =  reg ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  cmd - > reserved0  =  0 ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  cmd - > reserved1  =  0 ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  uint32_t  * vd  =  ( uint32_t * ) ( dst  +  sizeof ( struct  cdm_regcontinuous_cmd ) ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  for  ( int  i  =  0 ;  i  <  vals . size ( ) ;  i + + )  { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    * vd  =  vals [ i ] ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    vd + + ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  sizeof ( struct  cdm_regcontinuous_cmd )  +  vals . size ( ) * sizeof ( uint32_t ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								int  write_random ( uint8_t  * dst ,  const  std : : vector < uint32_t >  & vals )  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  struct  cdm_regrandom_cmd  * cmd  =  ( struct  cdm_regrandom_cmd * ) dst ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  cmd - > cmd  =  CAM_CDM_CMD_REG_RANDOM ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  cmd - > count  =  vals . size ( )  /  2 ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  cmd - > reserved  =  0 ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  uint32_t  * vd  =  ( uint32_t * ) ( dst  +  sizeof ( struct  cdm_regrandom_cmd ) ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  for  ( int  i  =  0 ;  i  <  vals . size ( ) ;  i + + )  { 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    * vd  =  vals [ i ] ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    vd + + ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  sizeof ( struct  cdm_regrandom_cmd )  +  vals . size ( ) * sizeof ( uint32_t ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}