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