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>