Annotation of embedaddon/ntp/kernel/sys/tt560_api.h, revision 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>