Home | History | Annotate | Line # | Download | only in sys
      1 /*	$NetBSD: tt560_api.h,v 1.5 2020/05/25 20:47:20 christos Exp $	*/
      2 
      3 /***********************************************************************
      4  *
      5  *  Module:  ttime_api.h
      6  *
      7  *  Author:  SIS  1998
      8  *           LM NE&SS 2001
      9  *
     10  *  Description
     11  *
     12  *      This header file contains data necessary for the API to the
     13  *      True Time board. This contains all of the structure definitions
     14  *      for the individual registers.
     15  *
     16  ***********************************************************************/
     17 #ifndef TTIME_API_H
     18 #define TTIME_API_H
     19 
     20 #ifdef CPP
     21 extern "C" {
     22 #endif
     23 
     24 #include <time.h>
     25 
     26 typedef struct
     27 {
     28     unsigned int	micro_sec;
     29     unsigned int	milli_sec;
     30     struct tm		gps_tm;
     31 } gps_time_t;
     32 
     33 typedef struct
     34 {
     35     unsigned char reserved_1;
     36     unsigned unit_ms		: 4;
     37     unsigned filler_0		: 4;
     38     unsigned hun_ms		: 4;
     39     unsigned tens_ms		: 4;
     40     unsigned tens_sec		: 4;
     41     unsigned unit_sec		: 4;
     42 
     43     unsigned tens_min		: 4;
     44     unsigned unit_min		: 4;
     45     unsigned tens_hour		: 4;
     46     unsigned unit_hour		: 4;
     47     unsigned tens_day		: 4;
     48     unsigned unit_day		: 4;
     49     unsigned filler_1		: 4;
     50     unsigned hun_day		: 4;
     51 
     52     unsigned tens_year		: 4;
     53     unsigned unit_year		: 4;
     54     unsigned thou_year		: 4;
     55     unsigned hun_year		: 4;
     56     unsigned char reserved_2[2];
     57 } preset_time_reg_t;
     58 
     59 typedef struct
     60 {
     61     unsigned n_d0			: 2;
     62     unsigned antenna_short_stat		: 1; /* 0 = fault */
     63     unsigned antenna_open_stat		: 1; /* 0 = fault */
     64     unsigned n_d1			: 1;
     65     unsigned rate_gen_pulse_stat	: 1;
     66     unsigned time_cmp_pulse_stat	: 1;
     67     unsigned ext_event_stat		: 1;
     68 
     69 } hw_stat_reg_t;
     70 
     71 typedef struct
     72 {
     73     unsigned tens_us		: 4;
     74     unsigned unit_us		: 4;
     75     unsigned unit_ms		: 4;
     76     unsigned hun_us		: 4;
     77     unsigned char hw_stat;	/* hw_stat_reg_t hw_stat; */
     78     unsigned char reserved_3;
     79 
     80     unsigned hun_ms		: 4;
     81     unsigned tens_ms		: 4;
     82     unsigned tens_sec		: 4;
     83     unsigned unit_sec		: 4;
     84     unsigned tens_min		: 4;
     85     unsigned unit_min		: 4;
     86     unsigned tens_hour		: 4;
     87     unsigned unit_hour		: 4;
     88 
     89     unsigned tens_day		: 4;
     90     unsigned unit_day		: 4;
     91     unsigned status		: 4;
     92     unsigned hun_day		: 4;
     93     unsigned tens_year		: 4;
     94     unsigned unit_year		: 4;
     95     unsigned thou_year		: 4;
     96     unsigned hun_year		: 4;
     97 } time_freeze_reg_t;
     98 
     99 typedef struct
    100 {
    101     unsigned char off_low;
    102     unsigned char off_high;
    103     unsigned char reserved_4[2];
    104 } sync_gen_off_reg_t;
    105 
    106 typedef struct
    107 {
    108     unsigned tens_min		: 4;
    109     unsigned unit_min		: 4;
    110     unsigned tens_hour		: 4;
    111     unsigned unit_hour		: 4;
    112     unsigned char sign_ascii;	/* '+' or '-' */
    113     unsigned char reserved_5;
    114 } local_off_t;
    115 
    116 /*
    117  *  This structure can be used for both the position freeze
    118  *  and position preset registers.
    119  */
    120 typedef struct
    121 {
    122     unsigned lat_tens_degee		: 4;
    123     unsigned lat_unit_degee		: 4;
    124     unsigned filler_0			: 4;
    125     unsigned lat_hun_degree		: 4;
    126     unsigned lat_tens_min		: 4;
    127     unsigned lat_unit_min		: 4;
    128     unsigned char lat_north_south;	/* 'N' or 'S' */
    129 
    130     unsigned filler_1			: 4;
    131     unsigned lat_tenth_sec		: 4;
    132     unsigned lat_tens_sec		: 4;
    133     unsigned lat_unit_sec		: 4;
    134     unsigned long_tens_degree		: 4;
    135     unsigned long_unit_degree		: 4;
    136     unsigned filler_2			: 4;
    137     unsigned long_hun_degree		: 4;
    138 
    139     unsigned long_tens_min		: 4;
    140     unsigned long_unit_min		: 4;
    141     unsigned char long_east_west;	/* 'E' or 'W' */
    142     unsigned filler_3			: 4;
    143     unsigned long_tenth_sec		: 4;
    144     unsigned long_tens_sec		: 4;
    145     unsigned long_unit_sec		: 4;
    146 
    147     unsigned elv_tens_km		: 4;
    148     unsigned elv_unit_km		: 4;
    149     unsigned char elv_sign;		/* '+' or '-' */
    150     unsigned elv_unit_m			: 4;
    151     unsigned elv_tenth_m		: 4;
    152     unsigned elv_hun_m			: 4;
    153     unsigned elv_tens_m			: 4;
    154 } pos_reg_t;
    155 
    156 typedef struct
    157 {
    158     unsigned char prn1_tens_units;
    159     unsigned char prn1_reserved;
    160     unsigned char lvl1_tenths_hundredths;
    161     unsigned char lvl1_tens_units;
    162 
    163     unsigned char prn2_tens_units;
    164     unsigned char prn2_reserved;
    165     unsigned char lvl2_tenths_hundredths;
    166     unsigned char lvl2_tens_units;
    167 
    168     unsigned char prn3_tens_units;
    169     unsigned char prn3_reserved;
    170     unsigned char lvl3_tenths_hundredths;
    171     unsigned char lvl3_tens_units;
    172 
    173     unsigned char prn4_tens_units;
    174     unsigned char prn4_reserved;
    175     unsigned char lvl4_tenths_hundredths;
    176     unsigned char lvl4_tens_units;
    177 
    178     unsigned char prn5_tens_units;
    179     unsigned char prn5_reserved;
    180     unsigned char lvl5_tenths_hundredths;
    181     unsigned char lvl5_tens_units;
    182 
    183     unsigned char prn6_tens_units;
    184     unsigned char prn6_reserved;
    185     unsigned char lvl6_tenths_hundredths;
    186     unsigned char lvl6_tens_units;
    187 
    188     unsigned char flag;
    189     unsigned char reserved[3];
    190 } sig_levels_t;
    191 
    192 typedef struct
    193 {
    194     unsigned tens_us		: 4;
    195     unsigned unit_us		: 4;
    196     unsigned unit_ms		: 4;
    197     unsigned hun_us		: 4;
    198     unsigned hun_ms		: 4;
    199     unsigned tens_ms		: 4;
    200     unsigned tens_sec		: 4;
    201     unsigned unit_sec		: 4;
    202 
    203     unsigned tens_min		: 4;
    204     unsigned unit_min		: 4;
    205     unsigned tens_hour		: 4;
    206     unsigned unit_hour		: 4;
    207     unsigned tens_day		: 4;
    208     unsigned unit_day		: 4;
    209     unsigned stat		: 4;
    210     unsigned hun_day		: 4;
    211 
    212     unsigned tens_year		: 4;
    213     unsigned unit_year		: 4;
    214     unsigned thou_year		: 4;
    215     unsigned hun_year		: 4;
    216     unsigned char reserved_5[2];
    217 } ext_time_event_reg_t;
    218 
    219 typedef struct
    220 {
    221     unsigned tens_us	: 4;
    222     unsigned unit_us	: 4;
    223     unsigned unit_ms	: 4;
    224     unsigned hun_us	: 4;
    225     unsigned hun_ms	: 4;
    226     unsigned tens_ms	: 4;
    227     unsigned tens_sec	: 4;
    228     unsigned unit_sec	: 4;
    229 
    230     unsigned tens_min	: 4;
    231     unsigned unit_min	: 4;
    232     unsigned tens_hour	: 4;
    233     unsigned unit_hour	: 4;
    234     unsigned tens_day	: 4;
    235     unsigned unit_day	: 4;
    236     unsigned mask	: 4;
    237     unsigned hun_day	: 4;
    238 } time_cmp_reg_t;
    239 
    240 typedef struct
    241 {
    242     unsigned char err_stat;
    243     unsigned char no_def;
    244     unsigned char oscillator_stat[2];
    245 } diag_reg_t;
    246 
    247 typedef struct
    248 {
    249     unsigned res		:2;
    250     unsigned rate_int_mask	:1;
    251     unsigned cmp_int_mask	:1;
    252     unsigned ext_int_mask	:1;
    253     unsigned rate_stat_clr	:1;
    254     unsigned cmp_stat_clr	:1;
    255     unsigned ext_stat_clr	:1;
    256     unsigned char reserved[3];
    257 } hw_ctl_reg_t;
    258 
    259 typedef struct
    260 {
    261     unsigned  preset_pos_rdy	:1;
    262     unsigned  sel_pps_ref	:1;
    263     unsigned  sel_gps_ref	:1;
    264     unsigned  sel_time_code	:1;
    265     unsigned  gen_stp_run	:1;
    266     unsigned  preset_time_rdy	:1;
    267     unsigned  dst		:1;
    268     unsigned  mode_sel		:1;
    269 
    270     unsigned  ctl_am_dc		:1;
    271     unsigned  reserved		:3;
    272     unsigned  input_code	:4;
    273 
    274     unsigned char rate_reserved;
    275 
    276     unsigned  rate_flag		:4;
    277     unsigned  rate_reserved1	:4;
    278 } conf_reg_t;
    279 
    280 typedef struct
    281 {
    282      unsigned char	mem_reserved[0xf8];
    283 
    284      hw_ctl_reg_t	hw_ctl_reg;
    285 
    286      time_freeze_reg_t  time_freeze_reg;
    287 
    288      pos_reg_t		pos_freeze_reg;
    289 
    290      conf_reg_t		conf_reg;
    291 
    292      diag_reg_t		diag_reg;
    293 
    294      local_off_t	local_offset;
    295 
    296      sync_gen_off_reg_t sync_gen_offset;
    297 
    298      unsigned char 	reserved[4];
    299 
    300      unsigned char 	config_reg2_ctl;
    301 
    302      unsigned char      reserved2[11];
    303 
    304      time_cmp_reg_t	time_compare_reg;
    305 
    306      unsigned char 	reserved3[24];
    307 
    308      preset_time_reg_t	preset_time_reg;
    309 
    310      pos_reg_t		preset_pos_reg;
    311 
    312      ext_time_event_reg_t extern_time_event_reg;
    313 
    314      unsigned char 	reserved4[24];
    315 
    316      sig_levels_t	signal_levels_reg;
    317 
    318      unsigned char	reserved5[12];
    319 } tt_mem_space_t;
    320 
    321 #define TTIME_MEMORY_SIZE 0x200
    322 
    323 /*
    324  *  Defines for register offsets
    325  */
    326 #define HW_CTL_REG		0x0f8
    327 #define TIME_FREEZE_REG		0x0fc
    328 #define HW_STAT_REG		0x0fe
    329 #define POS_FREEZE_REG		0x108
    330 #define CONFIG_REG_1		0x118
    331 #define DIAG_REG		0x11c
    332 #define LOCAL_OFF_REG		0x120
    333 #define SYNC_GEN_OFF_REG	0x124
    334 #define CONFIG_REG_2		0x12c
    335 #define TIME_CMP_REG		0x138
    336 #define PRESET_TIME_REG		0x158
    337 #define PRESET_POS_REG		0x164
    338 #define EXT_EVENT_REG		0x174
    339 #define SIG_LVL_PRN1		0x198
    340 #define SIG_LVL_PRN2		0x19c
    341 #define SIG_LVL_PRN3		0x1a0
    342 #define SIG_LVL_PRN4		0x1a4
    343 #define SIG_LVL_PRN5		0x1a8
    344 #define SIG_LVL_PRN6		0x1ac
    345 #define SIG_LVL_FLAG		0x1b0
    346 
    347 /*
    348  *  Defines for accessing the hardware status register.
    349  */
    350 #define HW_STAT_ANTENNA_SHORT		0	/* access the antenna short bit */
    351 #define HW_STAT_ANTENNA_OPEN		1	/* access the antenna open bit */
    352 #define HW_STAT_RATE_GEN_PULSE_STAT	2	/* access the rate gen pulse bit */
    353 #define HW_STAT_TIME_CMP_PULSE_STAT	3	/* access the time cmp bit */
    354 #define HW_STAT_EXT_EVENT_STAT		4	/* access the external event bit */
    355 
    356 /*
    357  *  Defines for accessing the hardware control register
    358  */
    359 
    360 #define HW_CTL_RATE_INT_MASK		0	/* access rate generator int mask */
    361 #define HW_CTL_CMP_INT_MASK		1	/* access compare interrupt mask */
    362 #define HW_CTL_EXT_INT_MASK		2	/* access external event interrupt mask */
    363 #define HW_CTL_RATE_GEN_INT_CLEAR	3	/* access rate gen. interrupt clear field */
    364 #define HW_CTL_TIME_CMP_INT_CLEAR	4	/* access time cmp interrupt clear field */
    365 #define HW_CTL_EXT_EVENT_INT_CLEAR	5	/* access external event int clear field */
    366 
    367 /*
    368  *  Defines for configuration register bit fields.
    369  */
    370 #define PRESET_POS_RDY_BIT		0	/* access the preset pos. rdy. bit */
    371 #define SEL_1_PPS_REF_BIT		1	/* access the select 1 pps reference bit */
    372 #define SEL_GPS_REF_BIT			2	/* access the select gps reference bit */
    373 #define SEL_TIME_CODE_REF_BIT		3	/* access the select time code reference bit */
    374 #define GEN_STOP_BIT			4	/* access the generator start/stop bit */
    375 #define PRESET_TIME_RDY_BIT		5	/* access the preset time ready bit */
    376 #define DST_BIT				6	/* access the DST bit */
    377 #define MODE_SEL_BIT			7	/* access the mode select bit */
    378 #define AM_DC_BIT			8	/* access the code bits AM/DC bit */
    379 #define IN_CODE_SEL_BIT			9	/* access the input code select bit */
    380 #define FLAG_BIT			10	/* access the flag bit */
    381 
    382 /*
    383  * The following defines are used to set modes in the
    384  * configuration register.
    385  */
    386 
    387 #define CONF_SET_AM			0	/* Set code to AM   */
    388 #define CONF_SET_DC			1	/* Set code to DC   */
    389 #define CONF_SET_IRIG_B			0	/* Set code IRIG B  */
    390 #define CONF_SET_IRIG_A			1	/* Set code IRIG A  */
    391 
    392 #define CONF_FLAG_DISABLE		0	/* Disable pulse        */
    393 #define CONF_FLAG_10K_PPS		1	/* Set rate to 10k PPS  */
    394 #define CONF_FLAG_1K_PPS		2	/* Set rate to 1k PPS   */
    395 #define CONF_FLAG_100_PPS		3	/* Set rate to 100 PPS  */
    396 #define CONF_FLAG_10_PPS		4	/* Set rate to 10 PPS   */
    397 #define CONF_FLAG_1_PPS			5	/* Set rate to 1 PPS    */
    398 
    399 /*
    400  *  Defines for read commands
    401  */
    402 
    403 #define TT_RD_FREEZE_REG	0x01
    404 #define TT_RD_HW_CTL_REG	0x02
    405 #define TT_RD_CNFG_REG		0x03
    406 #define TT_RD_DIAG_REG		0x04
    407 #define TT_RD_LCL_OFFSET	0x05
    408 #define TT_RD_SYNC_GEN_OFF	0x06
    409 #define TT_RD_CNFG_REG_2	0x07
    410 #define TT_RD_TIME_CMP_REG	0x08
    411 #define TT_RD_PRESET_REG	0x09
    412 #define TT_RD_EXT_EVNT_REG	0x0a
    413 #define TT_RD_SIG_LVL_REG	0x0b
    414 
    415 /*
    416  *  Defines for write commands
    417  */
    418 #define TT_WRT_FREEZE_REG	0x0c
    419 #define TT_WRT_HW_CTL_REG	0x0d
    420 #define TT_WRT_CNFG_REG		0x0e
    421 #define TT_WRT_DIAG_REG		0x0f
    422 #define TT_WRT_LCL_OFFSET	0x10
    423 #define TT_WRT_SYNC_GEN_OFF	0x11
    424 #define TT_WRT_CNFG_REG_2	0x12
    425 #define TT_WRT_TIME_CMP_REG	0x13
    426 #define TT_WRT_PRESET_REG	0x14
    427 #define TT_WRT_EXT_EVNT_REG	0x15
    428 #define TT_WRT_SIG_LVL_REG	0x16
    429 
    430 /*
    431  *  Define the length of the buffers to move (in 32 bit words).
    432  */
    433 
    434 #define HW_CTL_REG_LEN		1
    435 #define CNFG_REG_1_LEN		1
    436 #define DIAG_REG_LEN		1
    437 #define LCL_OFFSET_LEN		1
    438 #define SYNC_GEN_OFF_LEN	1
    439 #define CNFG_REG_2_LEN		1
    440 
    441 #define TIME_CMP_REG_LEN	2
    442 #define PRESET_TIME_REG_LEN	3
    443 #define PRESET_POS_REG_LEN	4
    444 #define PRESET_REG_LEN		(PRESET_TIME_REG_LEN+PRESET_POS_REG_LEN)
    445 #define TIME_FREEZE_REG_LEN	3
    446 #define POSN_FREEZE_REG_LEN	4
    447 #define FREEZE_REG_LEN		(TIME_FREEZE_REG_LEN+POSN_FREEZE_REG_LEN)
    448 #define EXT_EVNT_REG_LEN	3
    449 #define	SIG_LVL_REG_LEN		7
    450 #define	GPS_TIME_LEN		7
    451 
    452 /*
    453  * Define BCD - INT - BCD macros.
    454  */
    455 
    456 #define BCDTOI(a)	( ( ( ( (a) & 0xf0 ) >> 4 ) * 10 )  + ( (a) & 0x0f ) )
    457 #define ITOBCD(a)	( ( ( (           (a) ) / 10) << 4 ) + ( (           (a) ) % 10) )
    458 #define LTOBCD(a)	( ( ( ( (uint64_t)(a) ) / 10) << 4 ) + ( ( (uint64_t)(a) ) % 10) )
    459 
    460 extern int  init_560                  (                      );
    461 extern void close_560                 (                      );
    462 extern int  write_hw_ctl_reg          (hw_ctl_reg_t         *);
    463 extern int  write_hw_ctl_reg_bitfield (int, int              );
    464 extern int  read_conf_reg             (conf_reg_t           *);
    465 extern int  read_conf_reg_bitfield    (int                   );
    466 extern int  write_conf_reg            (conf_reg_t           *);
    467 extern int  write_conf_reg_bitfield   (int, unsigned char    );
    468 extern int  read_hw_stat_reg_bitfield (int                   );
    469 extern int  read_local_offset_reg     (local_off_t          *);
    470 extern int  write_local_offset_reg    (local_off_t          *);
    471 extern int  read_sync_offset_reg      (sync_gen_off_reg_t   *);
    472 extern int  write_sync_offset_reg     (sync_gen_off_reg_t   *);
    473 extern int  read_time_cmp_reg         (time_cmp_reg_t       *);
    474 extern int  write_time_cmp_reg        (time_cmp_reg_t       *);
    475 extern int  read_preset_time_reg      (preset_time_reg_t    *);
    476 extern int  write_preset_time_reg     (preset_time_reg_t    *);
    477 extern int  reset_time                (                      );
    478 extern int  set_new_time              (preset_time_reg_t    *);
    479 extern int  read_preset_position_reg  (pos_reg_t            *);
    480 extern int  write_preset_position_reg (pos_reg_t            *);
    481 extern int  read_external_event_reg   (ext_time_event_reg_t *);
    482 extern int  read_signal_level_reg     (sig_levels_t         *);
    483 extern int  freeze_time               (                      );
    484 extern int  snapshot_time             (time_freeze_reg_t    *);
    485 extern int  read_position_freeze_reg  (pos_reg_t            *);
    486 extern int  read_diag_reg             (diag_reg_t           *);
    487 
    488 #ifdef CPP
    489 }
    490 #endif
    491 #endif
    492