summaryrefslogtreecommitdiffstats
path: root/contrib/ntp/kernel/sys/tt560_api.h
blob: c87a7b13a429535e8da9a333a0c2b53429270f0b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
/***********************************************************************
 *
 *  Module:  ttime_api.h
 *
 *  Author:  SIS  1998
 *           LM NE&SS 2001
 *
 *  Description
 *
 *      This header file contains data necessary for the API to the
 *      True Time board. This contains all of the structure definitions
 *      for the individual registers.
 *
 ***********************************************************************/
#ifndef TTIME_API_H
#define TTIME_API_H

#ifdef CPP
extern "C" {
#endif

#include <time.h>

typedef struct
{
    unsigned int	micro_sec;
    unsigned int	milli_sec;
    struct tm		gps_tm;
} gps_time_t;

typedef struct 
{
    unsigned char reserved_1;
    unsigned unit_ms		: 4;
    unsigned filler_0		: 4;
    unsigned hun_ms		: 4;
    unsigned tens_ms		: 4;
    unsigned tens_sec		: 4;
    unsigned unit_sec		: 4;

    unsigned tens_min		: 4;
    unsigned unit_min		: 4;
    unsigned tens_hour		: 4;
    unsigned unit_hour		: 4;
    unsigned tens_day		: 4;
    unsigned unit_day		: 4;
    unsigned filler_1		: 4;
    unsigned hun_day		: 4;

    unsigned tens_year		: 4;
    unsigned unit_year		: 4;
    unsigned thou_year		: 4;
    unsigned hun_year		: 4;
    unsigned char reserved_2[2];
} preset_time_reg_t;

typedef struct
{
    unsigned n_d0			: 2;
    unsigned antenna_short_stat		: 1; /* 0 = fault */
    unsigned antenna_open_stat		: 1; /* 0 = fault */
    unsigned n_d1			: 1;
    unsigned rate_gen_pulse_stat	: 1;
    unsigned time_cmp_pulse_stat	: 1;
    unsigned ext_event_stat		: 1;

} hw_stat_reg_t;

typedef struct 
{
    unsigned tens_us		: 4;
    unsigned unit_us		: 4;
    unsigned unit_ms		: 4;
    unsigned hun_us		: 4;
    unsigned char hw_stat;	/* hw_stat_reg_t hw_stat; */
    unsigned char reserved_3;

    unsigned hun_ms		: 4;
    unsigned tens_ms		: 4;
    unsigned tens_sec		: 4;
    unsigned unit_sec		: 4;
    unsigned tens_min		: 4;
    unsigned unit_min		: 4;
    unsigned tens_hour		: 4;
    unsigned unit_hour		: 4;

    unsigned tens_day		: 4;
    unsigned unit_day		: 4;
    unsigned status		: 4;
    unsigned hun_day		: 4;
    unsigned tens_year		: 4;
    unsigned unit_year		: 4;
    unsigned thou_year		: 4;
    unsigned hun_year		: 4;
} time_freeze_reg_t;

typedef struct
{
    unsigned char off_low;
    unsigned char off_high;
    unsigned char reserved_4[2];
} sync_gen_off_reg_t;

typedef struct
{
    unsigned tens_min		: 4;
    unsigned unit_min		: 4;
    unsigned tens_hour		: 4;
    unsigned unit_hour		: 4;
    unsigned char sign_ascii;	/* '+' or '-' */
    unsigned char reserved_5;
} local_off_t;

/*
 *  This structure can be used for both the position freeze
 *  and position preset registers.
 */
typedef struct
{
    unsigned lat_tens_degee		: 4;
    unsigned lat_unit_degee		: 4;
    unsigned filler_0			: 4;
    unsigned lat_hun_degree		: 4;
    unsigned lat_tens_min		: 4;
    unsigned lat_unit_min		: 4;
    unsigned char lat_north_south;	/* 'N' or 'S' */

    unsigned filler_1			: 4;
    unsigned lat_tenth_sec		: 4;
    unsigned lat_tens_sec		: 4;
    unsigned lat_unit_sec		: 4;
    unsigned long_tens_degree		: 4;
    unsigned long_unit_degree		: 4;
    unsigned filler_2			: 4;
    unsigned long_hun_degree		: 4;

    unsigned long_tens_min		: 4;
    unsigned long_unit_min		: 4;
    unsigned char long_east_west;	/* 'E' or 'W' */
    unsigned filler_3			: 4;
    unsigned long_tenth_sec		: 4;
    unsigned long_tens_sec		: 4;
    unsigned long_unit_sec		: 4;

    unsigned elv_tens_km		: 4;
    unsigned elv_unit_km		: 4;
    unsigned char elv_sign;		/* '+' or '-' */
    unsigned elv_unit_m			: 4;
    unsigned elv_tenth_m		: 4;
    unsigned elv_hun_m			: 4;
    unsigned elv_tens_m			: 4;
} pos_reg_t;

typedef struct
{
    unsigned char prn1_tens_units;
    unsigned char prn1_reserved;
    unsigned char lvl1_tenths_hundredths;
    unsigned char lvl1_tens_units;

    unsigned char prn2_tens_units;
    unsigned char prn2_reserved;
    unsigned char lvl2_tenths_hundredths;
    unsigned char lvl2_tens_units;

    unsigned char prn3_tens_units;
    unsigned char prn3_reserved;
    unsigned char lvl3_tenths_hundredths;
    unsigned char lvl3_tens_units;

    unsigned char prn4_tens_units;
    unsigned char prn4_reserved;
    unsigned char lvl4_tenths_hundredths;
    unsigned char lvl4_tens_units;

    unsigned char prn5_tens_units;
    unsigned char prn5_reserved;
    unsigned char lvl5_tenths_hundredths;
    unsigned char lvl5_tens_units;

    unsigned char prn6_tens_units;
    unsigned char prn6_reserved;
    unsigned char lvl6_tenths_hundredths;
    unsigned char lvl6_tens_units;

    unsigned char flag;
    unsigned char reserved[3];
} sig_levels_t;

typedef struct
{
    unsigned tens_us		: 4;
    unsigned unit_us		: 4;
    unsigned unit_ms		: 4;
    unsigned hun_us		: 4;
    unsigned hun_ms		: 4;
    unsigned tens_ms		: 4;
    unsigned tens_sec		: 4;
    unsigned unit_sec		: 4;

    unsigned tens_min		: 4;
    unsigned unit_min		: 4;
    unsigned tens_hour		: 4;
    unsigned unit_hour		: 4;
    unsigned tens_day		: 4;
    unsigned unit_day		: 4;
    unsigned stat		: 4;
    unsigned hun_day		: 4;

    unsigned tens_year		: 4;
    unsigned unit_year		: 4;
    unsigned thou_year		: 4;
    unsigned hun_year		: 4;
    unsigned char reserved_5[2]; 
} ext_time_event_reg_t;

typedef struct
{
    unsigned tens_us	: 4;
    unsigned unit_us	: 4;
    unsigned unit_ms	: 4;
    unsigned hun_us	: 4;
    unsigned hun_ms	: 4;
    unsigned tens_ms	: 4;
    unsigned tens_sec	: 4;
    unsigned unit_sec	: 4;

    unsigned tens_min	: 4;
    unsigned unit_min	: 4;
    unsigned tens_hour	: 4;
    unsigned unit_hour	: 4;
    unsigned tens_day	: 4;
    unsigned unit_day	: 4;
    unsigned mask	: 4;
    unsigned hun_day	: 4;
} time_cmp_reg_t;

typedef struct
{
    unsigned char err_stat;
    unsigned char no_def;
    unsigned char oscillator_stat[2];
} diag_reg_t;

typedef struct
{
    unsigned res		:2;
    unsigned rate_int_mask	:1;
    unsigned cmp_int_mask	:1;
    unsigned ext_int_mask	:1;
    unsigned rate_stat_clr	:1;
    unsigned cmp_stat_clr	:1;
    unsigned ext_stat_clr	:1;
    unsigned char reserved[3];
} hw_ctl_reg_t;

typedef struct
{
    unsigned  preset_pos_rdy	:1;
    unsigned  sel_pps_ref	:1;
    unsigned  sel_gps_ref	:1;
    unsigned  sel_time_code	:1;
    unsigned  gen_stp_run	:1;
    unsigned  preset_time_rdy	:1;
    unsigned  dst		:1;
    unsigned  mode_sel		:1;

    unsigned  ctl_am_dc		:1;
    unsigned  reserved		:3;
    unsigned  input_code	:4;

    unsigned char rate_reserved;

    unsigned  rate_flag		:4;
    unsigned  rate_reserved1	:4;
} conf_reg_t;

typedef struct
{
     unsigned char	mem_reserved[0xf8];

     hw_ctl_reg_t	hw_ctl_reg;

     time_freeze_reg_t  time_freeze_reg;

     pos_reg_t		pos_freeze_reg;

     conf_reg_t		conf_reg;

     diag_reg_t		diag_reg;

     local_off_t	local_offset;

     sync_gen_off_reg_t sync_gen_offset;

     unsigned char 	reserved[4];

     unsigned char 	config_reg2_ctl;

     unsigned char      reserved2[11];

     time_cmp_reg_t	time_compare_reg;

     unsigned char 	reserved3[24];

     preset_time_reg_t	preset_time_reg;

     pos_reg_t		preset_pos_reg;

     ext_time_event_reg_t extern_time_event_reg;

     unsigned char 	reserved4[24];

     sig_levels_t	signal_levels_reg;

     unsigned char	reserved5[12];
} tt_mem_space_t;

#define TTIME_MEMORY_SIZE 0x200

/*
 *  Defines for register offsets
 */
#define HW_CTL_REG		0x0f8
#define TIME_FREEZE_REG		0x0fc
#define HW_STAT_REG		0x0fe
#define POS_FREEZE_REG		0x108
#define CONFIG_REG_1		0x118
#define DIAG_REG		0x11c
#define LOCAL_OFF_REG		0x120
#define SYNC_GEN_OFF_REG	0x124
#define CONFIG_REG_2		0x12c
#define TIME_CMP_REG		0x138
#define PRESET_TIME_REG		0x158
#define PRESET_POS_REG		0x164
#define EXT_EVENT_REG		0x174
#define SIG_LVL_PRN1		0x198
#define SIG_LVL_PRN2		0x19c
#define SIG_LVL_PRN3		0x1a0
#define SIG_LVL_PRN4		0x1a4
#define SIG_LVL_PRN5		0x1a8
#define SIG_LVL_PRN6		0x1ac
#define SIG_LVL_FLAG		0x1b0

/*
 *  Defines for accessing the hardware status register.
 */
#define HW_STAT_ANTENNA_SHORT		0	/* access the antenna short bit */
#define HW_STAT_ANTENNA_OPEN		1	/* access the antenna open bit */
#define HW_STAT_RATE_GEN_PULSE_STAT	2	/* access the rate gen pulse bit */
#define HW_STAT_TIME_CMP_PULSE_STAT	3	/* access the time cmp bit */
#define HW_STAT_EXT_EVENT_STAT		4	/* access the external event bit */

/*
 *  Defines for accessing the hardware control register
 */

#define HW_CTL_RATE_INT_MASK		0	/* access rate generator int mask */
#define HW_CTL_CMP_INT_MASK		1	/* access compare interrupt mask */
#define HW_CTL_EXT_INT_MASK		2	/* access external event interrupt mask */
#define HW_CTL_RATE_GEN_INT_CLEAR	3	/* access rate gen. interrupt clear field */
#define HW_CTL_TIME_CMP_INT_CLEAR	4	/* access time cmp interrupt clear field */
#define HW_CTL_EXT_EVENT_INT_CLEAR	5	/* access external event int clear field */

/*
 *  Defines for configuration register bit fields.
 */
#define PRESET_POS_RDY_BIT		0	/* access the preset pos. rdy. bit */
#define SEL_1_PPS_REF_BIT		1	/* access the select 1 pps reference bit */
#define SEL_GPS_REF_BIT			2	/* access the select gps reference bit */
#define SEL_TIME_CODE_REF_BIT		3	/* access the select time code reference bit */
#define GEN_STOP_BIT			4	/* access the generator start/stop bit */
#define PRESET_TIME_RDY_BIT		5	/* access the preset time ready bit */
#define DST_BIT				6	/* access the DST bit */
#define MODE_SEL_BIT			7	/* access the mode select bit */
#define AM_DC_BIT			8	/* access the code bits AM/DC bit */
#define IN_CODE_SEL_BIT			9	/* access the input code select bit */
#define FLAG_BIT			10	/* access the flag bit */

/*
 * The following defines are used to set modes in the 
 * configuration register.
 */

#define CONF_SET_AM			0	/* Set code to AM   */
#define CONF_SET_DC			1	/* Set code to DC   */
#define CONF_SET_IRIG_B			0	/* Set code IRIG B  */
#define CONF_SET_IRIG_A			1	/* Set code IRIG A  */

#define CONF_FLAG_DISABLE		0	/* Disable pulse        */
#define CONF_FLAG_10K_PPS		1	/* Set rate to 10k PPS  */
#define CONF_FLAG_1K_PPS		2	/* Set rate to 1k PPS   */
#define CONF_FLAG_100_PPS		3	/* Set rate to 100 PPS  */
#define CONF_FLAG_10_PPS		4	/* Set rate to 10 PPS   */
#define CONF_FLAG_1_PPS			5	/* Set rate to 1 PPS    */

/*
 *  Defines for read commands
 */

#define TT_RD_FREEZE_REG	0x01
#define TT_RD_HW_CTL_REG	0x02
#define TT_RD_CNFG_REG		0x03
#define TT_RD_DIAG_REG		0x04
#define TT_RD_LCL_OFFSET	0x05
#define TT_RD_SYNC_GEN_OFF	0x06
#define TT_RD_CNFG_REG_2	0x07
#define TT_RD_TIME_CMP_REG	0x08
#define TT_RD_PRESET_REG	0x09
#define TT_RD_EXT_EVNT_REG	0x0a
#define TT_RD_SIG_LVL_REG	0x0b

/*
 *  Defines for write commands
 */
#define TT_WRT_FREEZE_REG	0x0c
#define TT_WRT_HW_CTL_REG	0x0d
#define TT_WRT_CNFG_REG		0x0e
#define TT_WRT_DIAG_REG		0x0f
#define TT_WRT_LCL_OFFSET	0x10
#define TT_WRT_SYNC_GEN_OFF	0x11
#define TT_WRT_CNFG_REG_2	0x12
#define TT_WRT_TIME_CMP_REG	0x13
#define TT_WRT_PRESET_REG	0x14
#define TT_WRT_EXT_EVNT_REG	0x15
#define TT_WRT_SIG_LVL_REG	0x16

/*
 *  Define the length of the buffers to move (in 32 bit words).
 */

#define HW_CTL_REG_LEN		1
#define CNFG_REG_1_LEN		1
#define DIAG_REG_LEN		1
#define LCL_OFFSET_LEN		1
#define SYNC_GEN_OFF_LEN	1
#define CNFG_REG_2_LEN		1

#define TIME_CMP_REG_LEN	2
#define PRESET_TIME_REG_LEN	3
#define PRESET_POS_REG_LEN	4
#define PRESET_REG_LEN		(PRESET_TIME_REG_LEN+PRESET_POS_REG_LEN)
#define TIME_FREEZE_REG_LEN	3
#define POSN_FREEZE_REG_LEN	4
#define FREEZE_REG_LEN		(TIME_FREEZE_REG_LEN+POSN_FREEZE_REG_LEN)
#define EXT_EVNT_REG_LEN	3
#define	SIG_LVL_REG_LEN		7
#define	GPS_TIME_LEN		7

/*
 * Define BCD - INT - BCD macros.
 */

#define BCDTOI(a)	( ( ( ( (a) & 0xf0 ) >> 4 ) * 10 )  + ( (a) & 0x0f ) )
#define ITOBCD(a)	( ( ( (           (a) ) / 10) << 4 ) + ( (           (a) ) % 10) )
#define LTOBCD(a)	( ( ( ( (uint64_t)(a) ) / 10) << 4 ) + ( ( (uint64_t)(a) ) % 10) )

extern int  init_560                  (                      );
extern void close_560                 (                      );
extern int  write_hw_ctl_reg          (hw_ctl_reg_t         *);
extern int  write_hw_ctl_reg_bitfield (int, int              );
extern int  read_conf_reg             (conf_reg_t           *);
extern int  read_conf_reg_bitfield    (int                   );
extern int  write_conf_reg            (conf_reg_t           *);
extern int  write_conf_reg_bitfield   (int, unsigned char    );
extern int  read_hw_stat_reg_bitfield (int                   );
extern int  read_local_offset_reg     (local_off_t          *);
extern int  write_local_offset_reg    (local_off_t          *);
extern int  read_sync_offset_reg      (sync_gen_off_reg_t   *);
extern int  write_sync_offset_reg     (sync_gen_off_reg_t   *);
extern int  read_time_cmp_reg         (time_cmp_reg_t       *);
extern int  write_time_cmp_reg        (time_cmp_reg_t       *);
extern int  read_preset_time_reg      (preset_time_reg_t    *);
extern int  write_preset_time_reg     (preset_time_reg_t    *);
extern int  reset_time                (                      );
extern int  set_new_time              (preset_time_reg_t    *);
extern int  read_preset_position_reg  (pos_reg_t            *);
extern int  write_preset_position_reg (pos_reg_t            *);
extern int  read_external_event_reg   (ext_time_event_reg_t *);
extern int  read_signal_level_reg     (sig_levels_t         *);
extern int  freeze_time               (                      );
extern int  snapshot_time             (time_freeze_reg_t    *);
extern int  read_position_freeze_reg  (pos_reg_t            *);
extern int  read_diag_reg             (diag_reg_t           *);

#ifdef CPP
}
#endif
#endif
OpenPOWER on IntegriCloud