File indexing completed on 2025-05-11 08:23:43
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032 #ifndef __SPWTDP_H__
0033 #define __SPWTDP_H__
0034
0035 #ifdef __cplusplus
0036 extern "C" {
0037 #endif
0038
0039 #define SPWTDP_ERR_OK 0
0040 #define SPWTDP_ERR_EINVAL -1
0041 #define SPWTDP_ERR_ERROR -2
0042 #define SPWTDP_ERR_NOINIT -3
0043
0044
0045 #define SPWTDP_MAX 2
0046
0047
0048 struct spwtdp_regs {
0049 volatile unsigned int conf[4];
0050 volatile unsigned int stat[4];
0051 volatile unsigned int cmd_ctrl;
0052 volatile unsigned int cmd_et[5];
0053 volatile unsigned int resv1[2];
0054 volatile unsigned int dat_ctrl;
0055 volatile unsigned int dat_et[5];
0056 volatile unsigned int resv2[2];
0057 volatile unsigned int ts_rx_ctrl;
0058 volatile unsigned int ts_rx_et[5];
0059 volatile unsigned int resv3[2];
0060 volatile unsigned int ts_tx_ctrl;
0061 volatile unsigned int ts_tx_et[5];
0062 volatile unsigned int resv4[2];
0063 volatile unsigned int lat_ctrl;
0064 volatile unsigned int lat_et[5];
0065 volatile unsigned int resv5[2];
0066 volatile unsigned int ien;
0067 volatile unsigned int ists;
0068 volatile unsigned int dlycnt;
0069 volatile unsigned int dissync;
0070 volatile unsigned int resv6[12];
0071 volatile unsigned int edmask[4];
0072 struct {
0073 volatile unsigned int ctrl;
0074 volatile unsigned int et[5];
0075 volatile unsigned int resv0[2];
0076 } edat[4];
0077 volatile unsigned int resv7[4];
0078 volatile unsigned int pulse[8];
0079 volatile unsigned int resv8[16];
0080 };
0081
0082
0083
0084
0085 #define CONF0_JE (0x1 << CONF0_JE_BIT)
0086 #define CONF0_ST (0x1 << CONF0_ST_BIT)
0087 #define CONF0_EP (0x1 << CONF0_EP_BIT)
0088 #define CONF0_ET (0x1 << CONF0_ET_BIT)
0089 #define CONF0_SP (0x1 << CONF0_SP_BIT)
0090 #define CONF0_SE (0x1 << CONF0_SE_BIT)
0091 #define CONF0_LE (0x1 << CONF0_LE_BIT)
0092 #define CONF0_AE (0x1 << CONF0_AE_BIT)
0093 #define CONF0_MAP (0x1f << CONF0_MAP_BIT)
0094 #define CONF0_TD (0x1 << CONF0_TD_BIT)
0095 #define CONF0_MU (0x1 << CONF0_MU_BIT)
0096 #define CONF0_SEL (0x3 << CONF0_SEL_BIT)
0097 #define CONF0_ME (0x1 << CONF0_ME_BIT)
0098 #define CONF0_RE (0x1 << CONF0_RE_BIT)
0099 #define CONF0_TE (0x1 << CONF0_TE_BIT)
0100 #define CONF0_RS (0x1 << CONF0_RS_BIT)
0101
0102 #define CONF0_JE_BIT 24
0103 #define CONF0_ST_BIT 21
0104 #define CONF0_EP_BIT 20
0105 #define CONF0_ET_BIT 19
0106 #define CONF0_SP_BIT 18
0107 #define CONF0_SE_BIT 17
0108 #define CONF0_LE_BIT 16
0109 #define CONF0_AE_BIT 15
0110 #define CONF0_MAP_BIT 8
0111 #define CONF0_TD_BIT 7
0112 #define CONF0_MU_BIT 6
0113 #define CONF0_SEL_BIT 4
0114 #define CONF0_ME_BIT 3
0115 #define CONF0_RE_BIT 2
0116 #define CONF0_TE_BIT 1
0117 #define CONF0_RS_BIT 0
0118
0119 #define CONF1_FSINC (0x3fffffff << CONF1_FSINC_BIT)
0120
0121 #define CONF1_FSINC_BIT 0
0122
0123 #define CONF2_CV (0xffffff << CONF2_CV_BIT)
0124 #define CONF2_ETINC (0xff << CONF2_ETINC_BIT)
0125
0126 #define CONF2_CV_BIT 8
0127 #define CONF2_ETINC_BIT 0
0128
0129 #define CONF3_OUTPORT (0xf << CONF3_OUTPORT_BIT)
0130 #define CONF3_INPORT (0xf << CONF3_INPORT_BIT)
0131 #define CONF3_STM (0x3f << CONF3_STM_BIT)
0132 #define CONF3_DI64R (0x1 << CONF3_DI64R_BIT)
0133 #define CONF3_DI64T (0x1 << CONF3_DI64T_BIT)
0134 #define CONF3_DI64 (0x1 << CONF3_DI64_BIT)
0135 #define CONF3_DI (0x1 << CONF3_DI_BIT)
0136 #define CONF3_INRX (0x1f << CONF3_INRX_BIT)
0137 #define CONF3_INTX (0x1f << CONF3_INTX_BIT)
0138
0139 #define CONF3_OUTPORT_BIT 28
0140 #define CONF3_INPORT_BIT 24
0141 #define CONF3_STM_BIT 16
0142 #define CONF3_DI64R_BIT 13
0143 #define CONF3_DI64T_BIT 12
0144 #define CONF3_DI64_BIT 11
0145 #define CONF3_DI_BIT 10
0146 #define CONF3_INRX_BIT 5
0147 #define CONF3_INTX_BIT 0
0148
0149
0150
0151
0152 #define CTRL_NC (0x1 << CTRL_NC_BIT)
0153 #define CTRL_IS (0x1 << CTRL_IS_BIT)
0154 #define CTRL_SPWTC (0xff << CTRL_SPWTC_BIT)
0155 #define CTRL_CPF (0xffff << CTRL_CPF_BIT)
0156
0157 #define CTRL_NC_BIT 31
0158 #define CTRL_IS_BIT 30
0159 #define CTRL_SPWTC_BIT 16
0160 #define CTRL_CPF_BIT 0
0161
0162
0163
0164
0165 #define SPWTDP_IRQ_S (0x1 << SPWTDP_IRQ_S_BIT)
0166 #define SPWTDP_IRQ_TR (0x1 << SPWTDP_IRQ_TR_BIT)
0167 #define SPWTDP_IRQ_TM (0x1 << SPWTDP_IRQ_TM_BIT)
0168 #define SPWTDP_IRQ_TT (0x1 << SPWTDP_IRQ_TT_BIT)
0169 #define SPWTDP_IRQ_DIR (0x1 << SPWTDP_IRQ_DIR_BIT)
0170 #define SPWTDP_IRQ_DIT (0x1 << SPWTDP_IRQ_DIT_BIT)
0171 #define SPWTDP_IRQ_EDI0 (0x1 << SPWTDP_IRQ_EDI0_BIT)
0172 #define SPWTDP_IRQ_EDI1 (0x1 << SPWTDP_IRQ_EDI1_BIT)
0173 #define SPWTDP_IRQ_EDI2 (0x1 << SPWTDP_IRQ_EDI2_BIT)
0174 #define SPWTDP_IRQ_EDI3 (0x1 << SPWTDP_IRQ_EDI3_BIT)
0175 #define SPWTDP_IRQ_SET (0x1 << SPWTDP_IRQ_SET_BIT)
0176 #define SPWTDP_IRQ_P0 (0x1 << SPWTDP_IRQ_P0_BIT)
0177 #define SPWTDP_IRQ_P1 (0x1 << SPWTDP_IRQ_P1_BIT)
0178 #define SPWTDP_IRQ_P2 (0x1 << SPWTDP_IRQ_P2_BIT)
0179 #define SPWTDP_IRQ_P3 (0x1 << SPWTDP_IRQ_P3_BIT)
0180 #define SPWTDP_IRQ_P4 (0x1 << SPWTDP_IRQ_P4_BIT)
0181 #define SPWTDP_IRQ_P5 (0x1 << SPWTDP_IRQ_P5_BIT)
0182 #define SPWTDP_IRQ_P6 (0x1 << SPWTDP_IRQ_P6_BIT)
0183 #define SPWTDP_IRQ_P7 (0x1 << SPWTDP_IRQ_P7_BIT)
0184 #define SPWTDP_IRQ_NCTC (0x1 << SPWTDP_IRQ_NCTC_BIT)
0185 #define SPWTDP_IRQ_WCLEAR \
0186 (SPWTDP_IRQ_S | SPWTDP_IRQ_TR | SPWTDP_IRQ_TM | \
0187 SPWTDP_IRQ_TT | SPWTDP_IRQ_DIR | SPWTDP_IRQ_DIT | SPWTDP_IRQ_EDI0 | \
0188 SPWTDP_IRQ_EDI1 | SPWTDP_IRQ_EDI2 | SPWTDP_IRQ_EDI3 | SPWTDP_IRQ_SET |\
0189 SPWTDP_IRQ_P0 | SPWTDP_IRQ_P1 | SPWTDP_IRQ_P2 | SPWTDP_IRQ_P3 | \
0190 SPWTDP_IRQ_P4 | SPWTDP_IRQ_P5 | SPWTDP_IRQ_P6 | SPWTDP_IRQ_P7 | \
0191 SPWTDP_IRQ_NCTC)
0192 #define SPWTDP_IRQ_ALL (SPWTDP_IRQ_WCLEAR)
0193
0194 #define SPWTDP_IRQ_S_BIT 0
0195 #define SPWTDP_IRQ_TR_BIT 1
0196 #define SPWTDP_IRQ_TM_BIT 2
0197 #define SPWTDP_IRQ_TT_BIT 3
0198 #define SPWTDP_IRQ_DIR_BIT 4
0199 #define SPWTDP_IRQ_DIT_BIT 5
0200 #define SPWTDP_IRQ_EDI0_BIT 6
0201 #define SPWTDP_IRQ_EDI1_BIT 7
0202 #define SPWTDP_IRQ_EDI2_BIT 8
0203 #define SPWTDP_IRQ_EDI3_BIT 9
0204 #define SPWTDP_IRQ_SET_BIT 10
0205 #define SPWTDP_IRQ_P0_BIT 11
0206 #define SPWTDP_IRQ_P1_BIT 12
0207 #define SPWTDP_IRQ_P2_BIT 13
0208 #define SPWTDP_IRQ_P3_BIT 14
0209 #define SPWTDP_IRQ_P4_BIT 15
0210 #define SPWTDP_IRQ_P5_BIT 16
0211 #define SPWTDP_IRQ_P6_BIT 17
0212 #define SPWTDP_IRQ_P7_BIT 18
0213 #define SPWTDP_IRQ_NCTC_BIT 19
0214
0215
0216 void spwtdp_register_drv(void);
0217
0218
0219
0220
0221
0222 extern void *spwtdp_open(int dev_no);
0223
0224
0225 extern int spwtdp_close(void *spwtdp);
0226
0227
0228 extern int spwtdp_reset(void *spwtdp);
0229
0230
0231 extern int spwtdp_freq_setup(void *spwtdp, uint32_t fsinc, uint32_t cv,
0232 uint8_t etinc);
0233
0234
0235 extern int spwtdp_interrupt_unmask(void *spwtdp, uint32_t irqmask);
0236
0237
0238 extern int spwtdp_interrupt_mask(void *spwtdp, uint32_t irqmask);
0239
0240
0241
0242
0243
0244
0245 typedef void (*spwtdp_isr_t)(unsigned int ists, void *data);
0246
0247
0248
0249
0250 extern int spwtdp_isr_register(void *spwtdp, spwtdp_isr_t isr, void *data);
0251
0252
0253 extern int spwtdp_isr_unregister(void *spwtdp);
0254
0255
0256 extern int spwtdp_interrupt_status(void *spwtdp, uint32_t *sts,
0257 uint32_t clrmask);
0258
0259
0260 #define SPWTDP_TDP_ENABLE CONF0_TD
0261 #define SPWTDP_TDP_DISABLE 0
0262 #define SPWTDP_LATENCY_ENABLE CONF0_LE
0263 #define SPWTDP_LATENCY_DISABLE 0
0264 #define SPWTDP_EXTET_INC_POLARITY_RISING CONF0_EP
0265 #define SPWTDP_EXTET_INC_POLARITY_FALLING 0
0266 #define SPWTDP_EXTET_INC_ENABLE CONF0_ET
0267 #define SPWTDP_EXTET_INC_DISABLE 0
0268 #define SPWTDP_EXTET_POLARITY_RISING CONF0_SP
0269 #define SPWTDP_EXTET_POLARITY_FALLING 0
0270 #define SPWTDP_EXTET_ENABLE CONF0_SE
0271 #define SPWTDP_EXTET_DISABLE 0
0272 #define SPWTDP_TARGET_SPWSYNC_ENABLE CONF0_ST
0273 #define SPWTDP_TARGET_SPWSYNC_DISABLE 0
0274 #define SPWTDP_TARGET_JITTERC_ENABLE CONF0_JE
0275 #define SPWTDP_TARGET_JITTERC_DISABLE 0
0276 #define SPWTDP_TARGET_MITIGATION_ENABLE CONF0_ME
0277 #define SPWTDP_TARGET_MITIGATION_DISABLE 0
0278 extern int spwtdp_initiator_conf(void *spwtdp, uint8_t mapping,
0279 uint32_t options);
0280 extern int spwtdp_target_conf(void *spwtdp, uint8_t mapping, uint32_t options);
0281
0282
0283 extern int spwtdp_initiator_int_conf(void *spwtdp, uint8_t stm, uint8_t inrx,
0284 uint8_t intx);
0285 #define SPWTDP_TARGET_DISTINT_INTACK CONF3_DI
0286 #define SPWTDP_TARGET_DISTINT_INT 0
0287 extern int spwtdp_target_int_conf(void *spwtdp, uint8_t inrx, uint8_t intx,
0288 uint32_t options);
0289
0290
0291 extern int spwtdp_initiator_enable(void *spwtdp);
0292 extern int spwtdp_target_enable(void *spwtdp);
0293
0294
0295 extern int spwtdp_initiator_disable(void *spwtdp);
0296 extern int spwtdp_target_disable(void *spwtdp);
0297
0298
0299 extern int spwtdp_status(void *spwtdp, uint32_t *sts, uint32_t clrmask);
0300
0301
0302
0303
0304
0305 #define SPWTDP_TIME_DATA_LENGTH 20
0306 struct spwtdp_time_t {
0307 uint8_t data[SPWTDP_TIME_DATA_LENGTH];
0308 uint32_t preamble;
0309 };
0310 typedef struct spwtdp_time_t spwtdp_time_t;
0311
0312
0313 extern int spwtdp_dat_et_get(void *spwtdp, spwtdp_time_t * val);
0314 extern int spwtdp_tsrx_et_get(void *spwtdp, spwtdp_time_t * val);
0315 extern int spwtdp_tstx_et_get(void *spwtdp, spwtdp_time_t * val);
0316 extern int spwtdp_lat_et_get(void *spwtdp, spwtdp_time_t * val);
0317 extern int spwtdp_cmd_et_get(void *spwtdp, spwtdp_time_t * val);
0318
0319
0320 extern int spwtdp_initiator_tstx_conf(void *spwtdp, uint8_t tstc);
0321
0322
0323 extern int spwtdp_initiator_cmd_et_set(void *spwtdp, spwtdp_time_t val);
0324 extern int spwtdp_initiator_cmd_spwtc_set(void *spwtdp, uint8_t spwtc);
0325 #define SPWTDP_TARGET_CTRL_NEWCOMMAND_ENABLE CTRL_NC
0326 #define SPWTDP_TARGET_CTRL_NEWCOMMAND_DISABLE 0
0327 #define SPWTDP_TARGET_CTRL_INIT CTRL_IS
0328 #define SPWTDP_TARGET_CTRL_SYNC 0
0329 extern int spwtdp_target_cmd_conf(void *spwtdp, uint8_t spwtc, uint16_t cpf,
0330 uint32_t options);
0331
0332
0333 extern int spwtdp_precision_get(void *spwtdp, uint8_t *fine, uint8_t *coarse);
0334
0335 #ifdef __cplusplus
0336 }
0337 #endif
0338
0339 #endif