/contrib/ntp/kernel/sys/tt560_api.h

https://bitbucket.org/freebsd/freebsd-head/ · C++ Header · 489 lines · 370 code · 73 blank · 46 comment · 0 complexity · 0b71077d3fa11e8089588fbd14ac6a07 MD5 · raw file

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