00001
00021 #ifndef __ANALOGY_NI_TIO_H__
00022 #define __ANALOGY_NI_TIO_H__
00023
00024 #include <analogy/analogy_driver.h>
00025
00026 #ifdef CONFIG_PCI
00027 #include "mite.h"
00028 #endif
00029
00030 enum ni_gpct_register {
00031 NITIO_G0_Autoincrement_Reg,
00032 NITIO_G1_Autoincrement_Reg,
00033 NITIO_G2_Autoincrement_Reg,
00034 NITIO_G3_Autoincrement_Reg,
00035 NITIO_G0_Command_Reg,
00036 NITIO_G1_Command_Reg,
00037 NITIO_G2_Command_Reg,
00038 NITIO_G3_Command_Reg,
00039 NITIO_G0_HW_Save_Reg,
00040 NITIO_G1_HW_Save_Reg,
00041 NITIO_G2_HW_Save_Reg,
00042 NITIO_G3_HW_Save_Reg,
00043 NITIO_G0_SW_Save_Reg,
00044 NITIO_G1_SW_Save_Reg,
00045 NITIO_G2_SW_Save_Reg,
00046 NITIO_G3_SW_Save_Reg,
00047 NITIO_G0_Mode_Reg,
00048 NITIO_G1_Mode_Reg,
00049 NITIO_G2_Mode_Reg,
00050 NITIO_G3_Mode_Reg,
00051 NITIO_G0_LoadA_Reg,
00052 NITIO_G1_LoadA_Reg,
00053 NITIO_G2_LoadA_Reg,
00054 NITIO_G3_LoadA_Reg,
00055 NITIO_G0_LoadB_Reg,
00056 NITIO_G1_LoadB_Reg,
00057 NITIO_G2_LoadB_Reg,
00058 NITIO_G3_LoadB_Reg,
00059 NITIO_G0_Input_Select_Reg,
00060 NITIO_G1_Input_Select_Reg,
00061 NITIO_G2_Input_Select_Reg,
00062 NITIO_G3_Input_Select_Reg,
00063 NITIO_G0_Counting_Mode_Reg,
00064 NITIO_G1_Counting_Mode_Reg,
00065 NITIO_G2_Counting_Mode_Reg,
00066 NITIO_G3_Counting_Mode_Reg,
00067 NITIO_G0_Second_Gate_Reg,
00068 NITIO_G1_Second_Gate_Reg,
00069 NITIO_G2_Second_Gate_Reg,
00070 NITIO_G3_Second_Gate_Reg,
00071 NITIO_G01_Status_Reg,
00072 NITIO_G23_Status_Reg,
00073 NITIO_G01_Joint_Reset_Reg,
00074 NITIO_G23_Joint_Reset_Reg,
00075 NITIO_G01_Joint_Status1_Reg,
00076 NITIO_G23_Joint_Status1_Reg,
00077 NITIO_G01_Joint_Status2_Reg,
00078 NITIO_G23_Joint_Status2_Reg,
00079 NITIO_G0_DMA_Config_Reg,
00080 NITIO_G1_DMA_Config_Reg,
00081 NITIO_G2_DMA_Config_Reg,
00082 NITIO_G3_DMA_Config_Reg,
00083 NITIO_G0_DMA_Status_Reg,
00084 NITIO_G1_DMA_Status_Reg,
00085 NITIO_G2_DMA_Status_Reg,
00086 NITIO_G3_DMA_Status_Reg,
00087 NITIO_G0_ABZ_Reg,
00088 NITIO_G1_ABZ_Reg,
00089 NITIO_G0_Interrupt_Acknowledge_Reg,
00090 NITIO_G1_Interrupt_Acknowledge_Reg,
00091 NITIO_G2_Interrupt_Acknowledge_Reg,
00092 NITIO_G3_Interrupt_Acknowledge_Reg,
00093 NITIO_G0_Status_Reg,
00094 NITIO_G1_Status_Reg,
00095 NITIO_G2_Status_Reg,
00096 NITIO_G3_Status_Reg,
00097 NITIO_G0_Interrupt_Enable_Reg,
00098 NITIO_G1_Interrupt_Enable_Reg,
00099 NITIO_G2_Interrupt_Enable_Reg,
00100 NITIO_G3_Interrupt_Enable_Reg,
00101 NITIO_Num_Registers,
00102 };
00103
00104 static inline enum ni_gpct_register NITIO_Gi_Autoincrement_Reg(unsigned
00105 counter_index)
00106 {
00107 switch (counter_index) {
00108 case 0:
00109 return NITIO_G0_Autoincrement_Reg;
00110 break;
00111 case 1:
00112 return NITIO_G1_Autoincrement_Reg;
00113 break;
00114 case 2:
00115 return NITIO_G2_Autoincrement_Reg;
00116 break;
00117 case 3:
00118 return NITIO_G3_Autoincrement_Reg;
00119 break;
00120 default:
00121 BUG();
00122 break;
00123 }
00124 return 0;
00125 }
00126
00127 static inline enum ni_gpct_register NITIO_Gi_Command_Reg(unsigned counter_index)
00128 {
00129 switch (counter_index) {
00130 case 0:
00131 return NITIO_G0_Command_Reg;
00132 break;
00133 case 1:
00134 return NITIO_G1_Command_Reg;
00135 break;
00136 case 2:
00137 return NITIO_G2_Command_Reg;
00138 break;
00139 case 3:
00140 return NITIO_G3_Command_Reg;
00141 break;
00142 default:
00143 BUG();
00144 break;
00145 }
00146 return 0;
00147 }
00148
00149 static inline enum ni_gpct_register NITIO_Gi_Counting_Mode_Reg(unsigned
00150 counter_index)
00151 {
00152 switch (counter_index) {
00153 case 0:
00154 return NITIO_G0_Counting_Mode_Reg;
00155 break;
00156 case 1:
00157 return NITIO_G1_Counting_Mode_Reg;
00158 break;
00159 case 2:
00160 return NITIO_G2_Counting_Mode_Reg;
00161 break;
00162 case 3:
00163 return NITIO_G3_Counting_Mode_Reg;
00164 break;
00165 default:
00166 BUG();
00167 break;
00168 }
00169 return 0;
00170 }
00171
00172 static inline enum ni_gpct_register NITIO_Gi_Input_Select_Reg(unsigned
00173 counter_index)
00174 {
00175 switch (counter_index) {
00176 case 0:
00177 return NITIO_G0_Input_Select_Reg;
00178 break;
00179 case 1:
00180 return NITIO_G1_Input_Select_Reg;
00181 break;
00182 case 2:
00183 return NITIO_G2_Input_Select_Reg;
00184 break;
00185 case 3:
00186 return NITIO_G3_Input_Select_Reg;
00187 break;
00188 default:
00189 BUG();
00190 break;
00191 }
00192 return 0;
00193 }
00194
00195 static inline enum ni_gpct_register NITIO_Gxx_Joint_Reset_Reg(unsigned
00196 counter_index)
00197 {
00198 switch (counter_index) {
00199 case 0:
00200 case 1:
00201 return NITIO_G01_Joint_Reset_Reg;
00202 break;
00203 case 2:
00204 case 3:
00205 return NITIO_G23_Joint_Reset_Reg;
00206 break;
00207 default:
00208 BUG();
00209 break;
00210 }
00211 return 0;
00212 }
00213
00214 static inline enum ni_gpct_register NITIO_Gxx_Joint_Status1_Reg(unsigned
00215 counter_index)
00216 {
00217 switch (counter_index) {
00218 case 0:
00219 case 1:
00220 return NITIO_G01_Joint_Status1_Reg;
00221 break;
00222 case 2:
00223 case 3:
00224 return NITIO_G23_Joint_Status1_Reg;
00225 break;
00226 default:
00227 BUG();
00228 break;
00229 }
00230 return 0;
00231 }
00232
00233 static inline enum ni_gpct_register NITIO_Gxx_Joint_Status2_Reg(unsigned
00234 counter_index)
00235 {
00236 switch (counter_index) {
00237 case 0:
00238 case 1:
00239 return NITIO_G01_Joint_Status2_Reg;
00240 break;
00241 case 2:
00242 case 3:
00243 return NITIO_G23_Joint_Status2_Reg;
00244 break;
00245 default:
00246 BUG();
00247 break;
00248 }
00249 return 0;
00250 }
00251
00252 static inline enum ni_gpct_register NITIO_Gxx_Status_Reg(unsigned counter_index)
00253 {
00254 switch (counter_index) {
00255 case 0:
00256 case 1:
00257 return NITIO_G01_Status_Reg;
00258 break;
00259 case 2:
00260 case 3:
00261 return NITIO_G23_Status_Reg;
00262 break;
00263 default:
00264 BUG();
00265 break;
00266 }
00267 return 0;
00268 }
00269
00270 static inline enum ni_gpct_register NITIO_Gi_LoadA_Reg(unsigned counter_index)
00271 {
00272 switch (counter_index) {
00273 case 0:
00274 return NITIO_G0_LoadA_Reg;
00275 break;
00276 case 1:
00277 return NITIO_G1_LoadA_Reg;
00278 break;
00279 case 2:
00280 return NITIO_G2_LoadA_Reg;
00281 break;
00282 case 3:
00283 return NITIO_G3_LoadA_Reg;
00284 break;
00285 default:
00286 BUG();
00287 break;
00288 }
00289 return 0;
00290 }
00291
00292 static inline enum ni_gpct_register NITIO_Gi_LoadB_Reg(unsigned counter_index)
00293 {
00294 switch (counter_index) {
00295 case 0:
00296 return NITIO_G0_LoadB_Reg;
00297 break;
00298 case 1:
00299 return NITIO_G1_LoadB_Reg;
00300 break;
00301 case 2:
00302 return NITIO_G2_LoadB_Reg;
00303 break;
00304 case 3:
00305 return NITIO_G3_LoadB_Reg;
00306 break;
00307 default:
00308 BUG();
00309 break;
00310 }
00311 return 0;
00312 }
00313
00314 static inline enum ni_gpct_register NITIO_Gi_Mode_Reg(unsigned counter_index)
00315 {
00316 switch (counter_index) {
00317 case 0:
00318 return NITIO_G0_Mode_Reg;
00319 break;
00320 case 1:
00321 return NITIO_G1_Mode_Reg;
00322 break;
00323 case 2:
00324 return NITIO_G2_Mode_Reg;
00325 break;
00326 case 3:
00327 return NITIO_G3_Mode_Reg;
00328 break;
00329 default:
00330 BUG();
00331 break;
00332 }
00333 return 0;
00334 }
00335
00336 static inline enum ni_gpct_register NITIO_Gi_SW_Save_Reg(int counter_index)
00337 {
00338 switch (counter_index) {
00339 case 0:
00340 return NITIO_G0_SW_Save_Reg;
00341 break;
00342 case 1:
00343 return NITIO_G1_SW_Save_Reg;
00344 break;
00345 case 2:
00346 return NITIO_G2_SW_Save_Reg;
00347 break;
00348 case 3:
00349 return NITIO_G3_SW_Save_Reg;
00350 break;
00351 default:
00352 BUG();
00353 break;
00354 }
00355 return 0;
00356 }
00357
00358 static inline enum ni_gpct_register NITIO_Gi_Second_Gate_Reg(int counter_index)
00359 {
00360 switch (counter_index) {
00361 case 0:
00362 return NITIO_G0_Second_Gate_Reg;
00363 break;
00364 case 1:
00365 return NITIO_G1_Second_Gate_Reg;
00366 break;
00367 case 2:
00368 return NITIO_G2_Second_Gate_Reg;
00369 break;
00370 case 3:
00371 return NITIO_G3_Second_Gate_Reg;
00372 break;
00373 default:
00374 BUG();
00375 break;
00376 }
00377 return 0;
00378 }
00379
00380 static inline enum ni_gpct_register NITIO_Gi_DMA_Config_Reg(int counter_index)
00381 {
00382 switch (counter_index) {
00383 case 0:
00384 return NITIO_G0_DMA_Config_Reg;
00385 break;
00386 case 1:
00387 return NITIO_G1_DMA_Config_Reg;
00388 break;
00389 case 2:
00390 return NITIO_G2_DMA_Config_Reg;
00391 break;
00392 case 3:
00393 return NITIO_G3_DMA_Config_Reg;
00394 break;
00395 default:
00396 BUG();
00397 break;
00398 }
00399 return 0;
00400 }
00401
00402 static inline enum ni_gpct_register NITIO_Gi_DMA_Status_Reg(int counter_index)
00403 {
00404 switch (counter_index) {
00405 case 0:
00406 return NITIO_G0_DMA_Status_Reg;
00407 break;
00408 case 1:
00409 return NITIO_G1_DMA_Status_Reg;
00410 break;
00411 case 2:
00412 return NITIO_G2_DMA_Status_Reg;
00413 break;
00414 case 3:
00415 return NITIO_G3_DMA_Status_Reg;
00416 break;
00417 default:
00418 BUG();
00419 break;
00420 }
00421 return 0;
00422 }
00423
00424 static inline enum ni_gpct_register NITIO_Gi_ABZ_Reg(int counter_index)
00425 {
00426 switch (counter_index) {
00427 case 0:
00428 return NITIO_G0_ABZ_Reg;
00429 break;
00430 case 1:
00431 return NITIO_G1_ABZ_Reg;
00432 break;
00433 default:
00434 BUG();
00435 break;
00436 }
00437 return 0;
00438 }
00439
00440 static inline enum ni_gpct_register NITIO_Gi_Interrupt_Acknowledge_Reg(int
00441 counter_index)
00442 {
00443 switch (counter_index) {
00444 case 0:
00445 return NITIO_G0_Interrupt_Acknowledge_Reg;
00446 break;
00447 case 1:
00448 return NITIO_G1_Interrupt_Acknowledge_Reg;
00449 break;
00450 case 2:
00451 return NITIO_G2_Interrupt_Acknowledge_Reg;
00452 break;
00453 case 3:
00454 return NITIO_G3_Interrupt_Acknowledge_Reg;
00455 break;
00456 default:
00457 BUG();
00458 break;
00459 }
00460 return 0;
00461 }
00462
00463 static inline enum ni_gpct_register NITIO_Gi_Status_Reg(int counter_index)
00464 {
00465 switch (counter_index) {
00466 case 0:
00467 return NITIO_G0_Status_Reg;
00468 break;
00469 case 1:
00470 return NITIO_G1_Status_Reg;
00471 break;
00472 case 2:
00473 return NITIO_G2_Status_Reg;
00474 break;
00475 case 3:
00476 return NITIO_G3_Status_Reg;
00477 break;
00478 default:
00479 BUG();
00480 break;
00481 }
00482 return 0;
00483 }
00484
00485 static inline enum ni_gpct_register NITIO_Gi_Interrupt_Enable_Reg(int
00486 counter_index)
00487 {
00488 switch (counter_index) {
00489 case 0:
00490 return NITIO_G0_Interrupt_Enable_Reg;
00491 break;
00492 case 1:
00493 return NITIO_G1_Interrupt_Enable_Reg;
00494 break;
00495 case 2:
00496 return NITIO_G2_Interrupt_Enable_Reg;
00497 break;
00498 case 3:
00499 return NITIO_G3_Interrupt_Enable_Reg;
00500 break;
00501 default:
00502 BUG();
00503 break;
00504 }
00505 return 0;
00506 }
00507
00508 enum ni_gpct_variant {
00509 ni_gpct_variant_e_series,
00510 ni_gpct_variant_m_series,
00511 ni_gpct_variant_660x
00512 };
00513
00514 struct ni_gpct {
00515 struct ni_gpct_device *counter_dev;
00516 unsigned counter_index;
00517 unsigned chip_index;
00518 uint64_t clock_period_ps;
00519 struct mite_channel *mite_chan;
00520 a4l_lock_t lock;
00521 };
00522
00523 struct ni_gpct_device {
00524 a4l_dev_t *dev;
00525 void (*write_register)(struct ni_gpct * counter,
00526 unsigned int bits, enum ni_gpct_register reg);
00527 unsigned (*read_register)(struct ni_gpct * counter,
00528 enum ni_gpct_register reg);
00529 enum ni_gpct_variant variant;
00530 struct ni_gpct **counters;
00531 unsigned num_counters;
00532 unsigned regs[NITIO_Num_Registers];
00533 a4l_lock_t regs_lock;
00534 };
00535
00536 #define Gi_Auto_Increment_Mask 0xff
00537 #define Gi_Up_Down_Shift 5
00538
00539 #define Gi_Arm_Bit 0x1
00540 #define Gi_Save_Trace_Bit 0x2
00541 #define Gi_Load_Bit 0x4
00542 #define Gi_Disarm_Bit 0x10
00543 #define Gi_Up_Down_Mask (0x3 << Gi_Up_Down_Shift)
00544 #define Gi_Always_Down_Bits (0x0 << Gi_Up_Down_Shift)
00545 #define Gi_Always_Up_Bits (0x1 << Gi_Up_Down_Shift)
00546 #define Gi_Up_Down_Hardware_IO_Bits (0x2 << Gi_Up_Down_Shift)
00547 #define Gi_Up_Down_Hardware_Gate_Bits (0x3 << Gi_Up_Down_Shift)
00548 #define Gi_Write_Switch_Bit 0x80
00549 #define Gi_Synchronize_Gate_Bit 0x100
00550 #define Gi_Little_Big_Endian_Bit 0x200
00551 #define Gi_Bank_Switch_Start_Bit 0x400
00552 #define Gi_Bank_Switch_Mode_Bit 0x800
00553 #define Gi_Bank_Switch_Enable_Bit 0x1000
00554 #define Gi_Arm_Copy_Bit 0x2000
00555 #define Gi_Save_Trace_Copy_Bit 0x4000
00556 #define Gi_Disarm_Copy_Bit 0x8000
00557
00558 #define Gi_Index_Phase_Bitshift 5
00559 #define Gi_HW_Arm_Select_Shift 8
00560
00561 #define Gi_Counting_Mode_Mask 0x7
00562 #define Gi_Counting_Mode_Normal_Bits 0x0
00563 #define Gi_Counting_Mode_QuadratureX1_Bits 0x1
00564 #define Gi_Counting_Mode_QuadratureX2_Bits 0x2
00565 #define Gi_Counting_Mode_QuadratureX4_Bits 0x3
00566 #define Gi_Counting_Mode_Two_Pulse_Bits 0x4
00567 #define Gi_Counting_Mode_Sync_Source_Bits 0x6
00568 #define Gi_Index_Mode_Bit 0x10
00569 #define Gi_Index_Phase_Mask (0x3 << Gi_Index_Phase_Bitshift)
00570 #define Gi_Index_Phase_LowA_LowB (0x0 << Gi_Index_Phase_Bitshift)
00571 #define Gi_Index_Phase_LowA_HighB (0x1 << Gi_Index_Phase_Bitshift)
00572 #define Gi_Index_Phase_HighA_LowB (0x2 << Gi_Index_Phase_Bitshift)
00573 #define Gi_Index_Phase_HighA_HighB (0x3 << Gi_Index_Phase_Bitshift)
00574
00575
00576
00577 #define Gi_HW_Arm_Enable_Bit 0x80
00578
00579
00580 #define Gi_660x_HW_Arm_Select_Mask (0x7 << Gi_HW_Arm_Select_Shift)
00581 #define Gi_660x_Prescale_X8_Bit 0x1000
00582 #define Gi_M_Series_Prescale_X8_Bit 0x2000
00583 #define Gi_M_Series_HW_Arm_Select_Mask (0x1f << Gi_HW_Arm_Select_Shift)
00584
00585
00586 #define Gi_660x_Alternate_Sync_Bit 0x2000
00587 #define Gi_M_Series_Alternate_Sync_Bit 0x4000
00588
00589
00590 #define Gi_660x_Prescale_X2_Bit 0x4000
00591 #define Gi_M_Series_Prescale_X2_Bit 0x8000
00592
00593 static inline unsigned int Gi_Alternate_Sync_Bit(enum ni_gpct_variant variant)
00594 {
00595 switch (variant) {
00596 case ni_gpct_variant_e_series:
00597 return 0;
00598 break;
00599 case ni_gpct_variant_m_series:
00600 return Gi_M_Series_Alternate_Sync_Bit;
00601 break;
00602 case ni_gpct_variant_660x:
00603 return Gi_660x_Alternate_Sync_Bit;
00604 break;
00605 default:
00606 BUG();
00607 break;
00608 }
00609 return 0;
00610 }
00611
00612 static inline unsigned int Gi_Prescale_X2_Bit(enum ni_gpct_variant variant)
00613 {
00614 switch (variant) {
00615 case ni_gpct_variant_e_series:
00616 return 0;
00617 break;
00618 case ni_gpct_variant_m_series:
00619 return Gi_M_Series_Prescale_X2_Bit;
00620 break;
00621 case ni_gpct_variant_660x:
00622 return Gi_660x_Prescale_X2_Bit;
00623 break;
00624 default:
00625 BUG();
00626 break;
00627 }
00628 return 0;
00629 }
00630
00631 static inline unsigned int Gi_Prescale_X8_Bit(enum ni_gpct_variant variant)
00632 {
00633 switch (variant) {
00634 case ni_gpct_variant_e_series:
00635 return 0;
00636 break;
00637 case ni_gpct_variant_m_series:
00638 return Gi_M_Series_Prescale_X8_Bit;
00639 break;
00640 case ni_gpct_variant_660x:
00641 return Gi_660x_Prescale_X8_Bit;
00642 break;
00643 default:
00644 BUG();
00645 break;
00646 }
00647 return 0;
00648 }
00649
00650 static inline unsigned int Gi_HW_Arm_Select_Mask(enum ni_gpct_variant variant)
00651 {
00652 switch (variant) {
00653 case ni_gpct_variant_e_series:
00654 return 0;
00655 break;
00656 case ni_gpct_variant_m_series:
00657 return Gi_M_Series_HW_Arm_Select_Mask;
00658 break;
00659 case ni_gpct_variant_660x:
00660 return Gi_660x_HW_Arm_Select_Mask;
00661 break;
00662 default:
00663 BUG();
00664 break;
00665 }
00666 return 0;
00667 }
00668
00669 #define NI_660x_Timebase_1_Clock 0x0
00670 #define NI_660x_Source_Pin_i_Clock 0x1
00671 #define NI_660x_Next_Gate_Clock 0xa
00672 #define NI_660x_Timebase_2_Clock 0x12
00673 #define NI_660x_Next_TC_Clock 0x13
00674 #define NI_660x_Timebase_3_Clock 0x1e
00675 #define NI_660x_Logic_Low_Clock 0x1f
00676
00677 #define ni_660x_max_rtsi_channel 6
00678 #define ni_660x_max_source_pin 7
00679
00680 static inline unsigned int NI_660x_RTSI_Clock(unsigned int n)
00681 {
00682 BUG_ON(n > ni_660x_max_rtsi_channel);
00683 return (0xb + n);
00684 }
00685
00686 static inline unsigned int NI_660x_Source_Pin_Clock(unsigned int n)
00687 {
00688 BUG_ON(n > ni_660x_max_source_pin);
00689 return (0x2 + n);
00690 }
00691
00692
00693
00694 #define NI_M_Series_Timebase_1_Clock 0x0
00695 #define NI_M_Series_Timebase_2_Clock 0x12
00696 #define NI_M_Series_Next_TC_Clock 0x13
00697 #define NI_M_Series_Next_Gate_Clock 0x14
00698 #define NI_M_Series_PXI_Star_Trigger_Clock 0x14
00699 #define NI_M_Series_PXI10_Clock 0x1d
00700 #define NI_M_Series_Timebase_3_Clock 0x1e
00701 #define NI_M_Series_Analog_Trigger_Out_Clock 0x1e
00702 #define NI_M_Series_Logic_Low_Clock 0x1f
00703
00704 #define ni_m_series_max_pfi_channel 15
00705 #define ni_m_series_max_rtsi_channel 7
00706
00707 static inline unsigned int NI_M_Series_PFI_Clock(unsigned int n)
00708 {
00709 BUG_ON(n > ni_m_series_max_pfi_channel);
00710 if (n < 10)
00711 return 1 + n;
00712 else
00713 return 0xb + n;
00714 }
00715
00716 static inline unsigned int NI_M_Series_RTSI_Clock(unsigned int n)
00717 {
00718 BUG_ON(n > ni_m_series_max_rtsi_channel);
00719 if (n == 7)
00720 return 0x1b;
00721 else
00722 return 0xb + n;
00723 }
00724
00725 #define NI_660x_Source_Pin_i_Gate_Select 0x0
00726 #define NI_660x_Gate_Pin_i_Gate_Select 0x1
00727 #define NI_660x_Next_SRC_Gate_Select 0xa
00728 #define NI_660x_Next_Out_Gate_Select 0x14
00729 #define NI_660x_Logic_Low_Gate_Select 0x1f
00730 #define ni_660x_max_gate_pin 7
00731
00732 static inline unsigned int NI_660x_Gate_Pin_Gate_Select(unsigned int n)
00733 {
00734 BUG_ON(n > ni_660x_max_gate_pin);
00735 return 0x2 + n;
00736 }
00737
00738 static inline unsigned int NI_660x_RTSI_Gate_Select(unsigned int n)
00739 {
00740 BUG_ON(n > ni_660x_max_rtsi_channel);
00741 return 0xb + n;
00742 }
00743
00744
00745 #define NI_M_Series_Timestamp_Mux_Gate_Select 0x0
00746 #define NI_M_Series_AI_START2_Gate_Select 0x12
00747 #define NI_M_Series_PXI_Star_Trigger_Gate_Select 0x13
00748 #define NI_M_Series_Next_Out_Gate_Select 0x14
00749 #define NI_M_Series_AI_START1_Gate_Select 0x1c
00750 #define NI_M_Series_Next_SRC_Gate_Select 0x1d
00751 #define NI_M_Series_Analog_Trigger_Out_Gate_Select 0x1e
00752 #define NI_M_Series_Logic_Low_Gate_Select 0x1f
00753
00754 static inline unsigned int NI_M_Series_RTSI_Gate_Select(unsigned int n)
00755 {
00756 BUG_ON(n > ni_m_series_max_rtsi_channel);
00757 if (n == 7)
00758 return 0x1b;
00759 return 0xb + n;
00760 }
00761
00762 static inline unsigned int NI_M_Series_PFI_Gate_Select(unsigned int n)
00763 {
00764 BUG_ON(n > ni_m_series_max_pfi_channel);
00765 if (n < 10)
00766 return 1 + n;
00767 return 0xb + n;
00768 }
00769
00770
00771 #define Gi_Source_Select_Shift 2
00772 #define Gi_Gate_Select_Shift 7
00773
00774 #define Gi_Read_Acknowledges_Irq 0x1
00775 #define Gi_Write_Acknowledges_Irq 0x2
00776 #define Gi_Source_Select_Mask 0x7c
00777 #define Gi_Gate_Select_Mask (0x1f << Gi_Gate_Select_Shift)
00778 #define Gi_Gate_Select_Load_Source_Bit 0x1000
00779 #define Gi_Or_Gate_Bit 0x2000
00780 #define Gi_Output_Polarity_Bit 0x4000
00781 #define Gi_Source_Polarity_Bit 0x8000
00782
00783 #define Gi_Source_Select_Bits(x) ((x << Gi_Source_Select_Shift) & \
00784 Gi_Source_Select_Mask)
00785 #define Gi_Gate_Select_Bits(x) ((x << Gi_Gate_Select_Shift) & \
00786 Gi_Gate_Select_Mask)
00787
00788 #define Gi_Gating_Mode_Mask 0x3
00789 #define Gi_Gating_Disabled_Bits 0x0
00790 #define Gi_Level_Gating_Bits 0x1
00791 #define Gi_Rising_Edge_Gating_Bits 0x2
00792 #define Gi_Falling_Edge_Gating_Bits 0x3
00793 #define Gi_Gate_On_Both_Edges_Bit 0x4
00794
00795 #define Gi_Trigger_Mode_for_Edge_Gate_Mask 0x18
00796 #define Gi_Edge_Gate_Starts_Stops_Bits 0x0
00797 #define Gi_Edge_Gate_Stops_Starts_Bits 0x8
00798 #define Gi_Edge_Gate_Starts_Bits 0x10
00799 #define Gi_Edge_Gate_No_Starts_or_Stops_Bits 0x18
00800 #define Gi_Stop_Mode_Mask 0x60
00801 #define Gi_Stop_on_Gate_Bits 0x00
00802 #define Gi_Stop_on_Gate_or_TC_Bits 0x20
00803 #define Gi_Stop_on_Gate_or_Second_TC_Bits 0x40
00804 #define Gi_Load_Source_Select_Bit 0x80
00805 #define Gi_Output_Mode_Mask 0x300
00806 #define Gi_Output_TC_Pulse_Bits 0x100
00807 #define Gi_Output_TC_Toggle_Bits 0x200
00808 #define Gi_Output_TC_or_Gate_Toggle_Bits 0x300
00809 #define Gi_Counting_Once_Mask 0xc00
00810 #define Gi_No_Hardware_Disarm_Bits 0x000
00811 #define Gi_Disarm_at_TC_Bits 0x400
00812 #define Gi_Disarm_at_Gate_Bits 0x800
00813 #define Gi_Disarm_at_TC_or_Gate_Bits 0xc00
00814 #define Gi_Loading_On_TC_Bit 0x1000
00815 #define Gi_Gate_Polarity_Bit 0x2000
00816 #define Gi_Loading_On_Gate_Bit 0x4000
00817 #define Gi_Reload_Source_Switching_Bit 0x8000
00818
00819 #define NI_660x_Source_Pin_i_Second_Gate_Select 0x0
00820 #define NI_660x_Up_Down_Pin_i_Second_Gate_Select 0x1
00821 #define NI_660x_Next_SRC_Second_Gate_Select 0xa
00822 #define NI_660x_Next_Out_Second_Gate_Select 0x14
00823 #define NI_660x_Selected_Gate_Second_Gate_Select 0x1e
00824 #define NI_660x_Logic_Low_Second_Gate_Select 0x1f
00825
00826 #define ni_660x_max_up_down_pin 7
00827
00828 static inline
00829 unsigned int NI_660x_Up_Down_Pin_Second_Gate_Select(unsigned int n)
00830 {
00831 BUG_ON(n > ni_660x_max_up_down_pin);
00832 return 0x2 + n;
00833 }
00834 static inline
00835 unsigned int NI_660x_RTSI_Second_Gate_Select(unsigned int n)
00836 {
00837 BUG_ON(n > ni_660x_max_rtsi_channel);
00838 return 0xb + n;
00839 }
00840
00841 #define Gi_Second_Gate_Select_Shift 7
00842
00843
00844
00845 #define Gi_Second_Gate_Mode_Bit 0x1
00846 #define Gi_Second_Gate_Select_Mask (0x1f << Gi_Second_Gate_Select_Shift)
00847 #define Gi_Second_Gate_Polarity_Bit 0x2000
00848 #define Gi_Second_Gate_Subselect_Bit 0x4000
00849 #define Gi_Source_Subselect_Bit 0x8000
00850
00851 static inline
00852 unsigned int Gi_Second_Gate_Select_Bits(unsigned int second_gate_select)
00853 {
00854 return (second_gate_select << Gi_Second_Gate_Select_Shift) &
00855 Gi_Second_Gate_Select_Mask;
00856 }
00857
00858 #define G0_Save_Bit 0x1
00859 #define G1_Save_Bit 0x2
00860 #define G0_Counting_Bit 0x4
00861 #define G1_Counting_Bit 0x8
00862 #define G0_Next_Load_Source_Bit 0x10
00863 #define G1_Next_Load_Source_Bit 0x20
00864 #define G0_Stale_Data_Bit 0x40
00865 #define G1_Stale_Data_Bit 0x80
00866 #define G0_Armed_Bit 0x100
00867 #define G1_Armed_Bit 0x200
00868 #define G0_No_Load_Between_Gates_Bit 0x400
00869 #define G1_No_Load_Between_Gates_Bit 0x800
00870 #define G0_TC_Error_Bit 0x1000
00871 #define G1_TC_Error_Bit 0x2000
00872 #define G0_Gate_Error_Bit 0x4000
00873 #define G1_Gate_Error_Bit 0x8000
00874
00875 static inline unsigned int Gi_Counting_Bit(unsigned int counter_index)
00876 {
00877 if (counter_index % 2)
00878 return G1_Counting_Bit;
00879 return G0_Counting_Bit;
00880 }
00881
00882 static inline unsigned int Gi_Armed_Bit(unsigned int counter_index)
00883 {
00884 if (counter_index % 2)
00885 return G1_Armed_Bit;
00886 return G0_Armed_Bit;
00887 }
00888
00889 static inline unsigned int Gi_Next_Load_Source_Bit(unsigned counter_index)
00890 {
00891 if (counter_index % 2)
00892 return G1_Next_Load_Source_Bit;
00893 return G0_Next_Load_Source_Bit;
00894 }
00895
00896 static inline unsigned int Gi_Stale_Data_Bit(unsigned int counter_index)
00897 {
00898 if (counter_index % 2)
00899 return G1_Stale_Data_Bit;
00900 return G0_Stale_Data_Bit;
00901 }
00902
00903 static inline unsigned int Gi_TC_Error_Bit(unsigned int counter_index)
00904 {
00905 if (counter_index % 2)
00906 return G1_TC_Error_Bit;
00907 return G0_TC_Error_Bit;
00908 }
00909
00910 static inline unsigned int Gi_Gate_Error_Bit(unsigned int counter_index)
00911 {
00912 if (counter_index % 2)
00913 return G1_Gate_Error_Bit;
00914 return G0_Gate_Error_Bit;
00915 }
00916
00917
00918 static inline unsigned Gi_Reset_Bit(unsigned int counter_index)
00919 {
00920 return 0x1 << (2 + (counter_index % 2));
00921 }
00922
00923 #define G0_Output_Bit 0x1
00924 #define G1_Output_Bit 0x2
00925 #define G0_HW_Save_Bit 0x1000
00926 #define G1_HW_Save_Bit 0x2000
00927 #define G0_Permanent_Stale_Bit 0x4000
00928 #define G1_Permanent_Stale_Bit 0x8000
00929
00930 static inline unsigned int Gi_Permanent_Stale_Bit(unsigned
00931 counter_index)
00932 {
00933 if (counter_index % 2)
00934 return G1_Permanent_Stale_Bit;
00935 return G0_Permanent_Stale_Bit;
00936 }
00937
00938 #define Gi_DMA_Enable_Bit 0x1
00939 #define Gi_DMA_Write_Bit 0x2
00940 #define Gi_DMA_Int_Bit 0x4
00941
00942 #define Gi_DMA_Readbank_Bit 0x2000
00943 #define Gi_DRQ_Error_Bit 0x4000
00944 #define Gi_DRQ_Status_Bit 0x8000
00945
00946 #define G0_Gate_Error_Confirm_Bit 0x20
00947 #define G0_TC_Error_Confirm_Bit 0x40
00948
00949 #define G1_Gate_Error_Confirm_Bit 0x2
00950 #define G1_TC_Error_Confirm_Bit 0x4
00951
00952 static inline unsigned int Gi_Gate_Error_Confirm_Bit(unsigned int counter_index)
00953 {
00954 if (counter_index % 2)
00955 return G1_Gate_Error_Confirm_Bit;
00956 return G0_Gate_Error_Confirm_Bit;
00957 }
00958
00959 static inline unsigned int Gi_TC_Error_Confirm_Bit(unsigned int counter_index)
00960 {
00961 if (counter_index % 2)
00962 return G1_TC_Error_Confirm_Bit;
00963 return G0_TC_Error_Confirm_Bit;
00964 }
00965
00966
00967 #define Gi_TC_Interrupt_Ack_Bit 0x4000
00968 #define Gi_Gate_Interrupt_Ack_Bit 0x8000
00969
00970 #define Gi_Gate_Interrupt_Bit 0x4
00971 #define Gi_TC_Bit 0x8
00972 #define Gi_Interrupt_Bit 0x8000
00973
00974 #define G0_TC_Interrupt_Enable_Bit 0x40
00975 #define G0_Gate_Interrupt_Enable_Bit 0x100
00976
00977 #define G1_TC_Interrupt_Enable_Bit 0x200
00978 #define G1_Gate_Interrupt_Enable_Bit 0x400
00979
00980 static inline unsigned int Gi_Gate_Interrupt_Enable_Bit(unsigned int counter_index)
00981 {
00982 unsigned int bit;
00983
00984 if (counter_index % 2) {
00985 bit = G1_Gate_Interrupt_Enable_Bit;
00986 } else {
00987 bit = G0_Gate_Interrupt_Enable_Bit;
00988 }
00989 return bit;
00990 }
00991
00992 #define counter_status_mask (A4L_COUNTER_ARMED | A4L_COUNTER_COUNTING)
00993
00994 #define NI_USUAL_PFI_SELECT(x) ((x < 10) ? (0x1 + x) : (0xb + x))
00995 #define NI_USUAL_RTSI_SELECT(x) ((x < 7 ) ? (0xb + x) : (0x1b + x))
00996
00997
00998
00999 #define NI_GPCT_COUNTING_MODE_SHIFT 16
01000 #define NI_GPCT_INDEX_PHASE_BITSHIFT 20
01001 #define NI_GPCT_COUNTING_DIRECTION_SHIFT 24
01002
01003 #define NI_GPCT_GATE_ON_BOTH_EDGES_BIT 0x4
01004 #define NI_GPCT_EDGE_GATE_MODE_MASK 0x18
01005 #define NI_GPCT_EDGE_GATE_STARTS_STOPS_BITS 0x0
01006 #define NI_GPCT_EDGE_GATE_STOPS_STARTS_BITS 0x8
01007 #define NI_GPCT_EDGE_GATE_STARTS_BITS 0x10
01008 #define NI_GPCT_EDGE_GATE_NO_STARTS_NO_STOPS_BITS 0x18
01009 #define NI_GPCT_STOP_MODE_MASK 0x60
01010 #define NI_GPCT_STOP_ON_GATE_BITS 0x00
01011 #define NI_GPCT_STOP_ON_GATE_OR_TC_BITS 0x20
01012 #define NI_GPCT_STOP_ON_GATE_OR_SECOND_TC_BITS 0x40
01013 #define NI_GPCT_LOAD_B_SELECT_BIT 0x80
01014 #define NI_GPCT_OUTPUT_MODE_MASK 0x300
01015 #define NI_GPCT_OUTPUT_TC_PULSE_BITS 0x100
01016 #define NI_GPCT_OUTPUT_TC_TOGGLE_BITS 0x200
01017 #define NI_GPCT_OUTPUT_TC_OR_GATE_TOGGLE_BITS 0x300
01018 #define NI_GPCT_HARDWARE_DISARM_MASK 0xc00
01019 #define NI_GPCT_NO_HARDWARE_DISARM_BITS 0x000
01020 #define NI_GPCT_DISARM_AT_TC_BITS 0x400
01021 #define NI_GPCT_DISARM_AT_GATE_BITS 0x800
01022 #define NI_GPCT_DISARM_AT_TC_OR_GATE_BITS 0xc00
01023 #define NI_GPCT_LOADING_ON_TC_BIT 0x1000
01024 #define NI_GPCT_LOADING_ON_GATE_BIT 0x4000
01025 #define NI_GPCT_COUNTING_MODE_MASK 0x7 << NI_GPCT_COUNTING_MODE_SHIFT
01026 #define NI_GPCT_COUNTING_MODE_NORMAL_BITS 0x0 << NI_GPCT_COUNTING_MODE_SHIFT
01027 #define NI_GPCT_COUNTING_MODE_QUADRATURE_X1_BITS 0x1 << NI_GPCT_COUNTING_MODE_SHIFT
01028 #define NI_GPCT_COUNTING_MODE_QUADRATURE_X2_BITS 0x2 << NI_GPCT_COUNTING_MODE_SHIFT
01029 #define NI_GPCT_COUNTING_MODE_QUADRATURE_X4_BITS 0x3 << NI_GPCT_COUNTING_MODE_SHIFT
01030 #define NI_GPCT_COUNTING_MODE_TWO_PULSE_BITS 0x4 << NI_GPCT_COUNTING_MODE_SHIFT
01031 #define NI_GPCT_COUNTING_MODE_SYNC_SOURCE_BITS 0x6 << NI_GPCT_COUNTING_MODE_SHIFT
01032 #define NI_GPCT_INDEX_PHASE_MASK 0x3 << NI_GPCT_INDEX_PHASE_BITSHIFT
01033 #define NI_GPCT_INDEX_PHASE_LOW_A_LOW_B_BITS 0x0 << NI_GPCT_INDEX_PHASE_BITSHIFT
01034 #define NI_GPCT_INDEX_PHASE_LOW_A_HIGH_B_BITS 0x1 << NI_GPCT_INDEX_PHASE_BITSHIFT
01035 #define NI_GPCT_INDEX_PHASE_HIGH_A_LOW_B_BITS 0x2 << NI_GPCT_INDEX_PHASE_BITSHIFT
01036 #define NI_GPCT_INDEX_PHASE_HIGH_A_HIGH_B_BITS 0x3 << NI_GPCT_INDEX_PHASE_BITSHIFT
01037 #define NI_GPCT_INDEX_ENABLE_BIT 0x400000
01038 #define NI_GPCT_COUNTING_DIRECTION_MASK 0x3 << NI_GPCT_COUNTING_DIRECTION_SHIFT
01039 #define NI_GPCT_COUNTING_DIRECTION_DOWN_BITS 0x00 << NI_GPCT_COUNTING_DIRECTION_SHIFT
01040 #define NI_GPCT_COUNTING_DIRECTION_UP_BITS 0x1 << NI_GPCT_COUNTING_DIRECTION_SHIFT
01041 #define NI_GPCT_COUNTING_DIRECTION_HW_UP_DOWN_BITS 0x2 << NI_GPCT_COUNTING_DIRECTION_SHIFT
01042 #define NI_GPCT_COUNTING_DIRECTION_HW_GATE_BITS 0x3 << NI_GPCT_COUNTING_DIRECTION_SHIFT
01043 #define NI_GPCT_RELOAD_SOURCE_MASK 0xc000000
01044 #define NI_GPCT_RELOAD_SOURCE_FIXED_BITS 0x0
01045 #define NI_GPCT_RELOAD_SOURCE_SWITCHING_BITS 0x4000000
01046 #define NI_GPCT_RELOAD_SOURCE_GATE_SELECT_BITS 0x8000000
01047 #define NI_GPCT_OR_GATE_BIT 0x10000000
01048 #define NI_GPCT_INVERT_OUTPUT_BIT 0x20000000
01049
01050
01051
01052 #define NI_GPCT_CLOCK_SRC_SELECT_MASK 0x3f
01053 #define NI_GPCT_TIMEBASE_1_CLOCK_SRC_BITS 0x0
01054 #define NI_GPCT_TIMEBASE_2_CLOCK_SRC_BITS 0x1
01055 #define NI_GPCT_TIMEBASE_3_CLOCK_SRC_BITS 0x2
01056 #define NI_GPCT_LOGIC_LOW_CLOCK_SRC_BITS 0x3
01057 #define NI_GPCT_NEXT_GATE_CLOCK_SRC_BITS 0x4
01058 #define NI_GPCT_NEXT_TC_CLOCK_SRC_BITS 0x5
01059 #define NI_GPCT_SOURCE_PIN_i_CLOCK_SRC_BITS 0x6
01060 #define NI_GPCT_PXI10_CLOCK_SRC_BITS 0x7
01061 #define NI_GPCT_PXI_STAR_TRIGGER_CLOCK_SRC_BITS 0x8
01062 #define NI_GPCT_ANALOG_TRIGGER_OUT_CLOCK_SRC_BITS 0x9
01063 #define NI_GPCT_PRESCALE_MODE_CLOCK_SRC_MASK 0x30000000
01064 #define NI_GPCT_NO_PRESCALE_CLOCK_SRC_BITS 0x0
01065 #define NI_GPCT_PRESCALE_X2_CLOCK_SRC_BITS 0x10000000
01066 #define NI_GPCT_PRESCALE_X8_CLOCK_SRC_BITS 0x20000000
01067 #define NI_GPCT_INVERT_CLOCK_SRC_BIT 0x80000000
01068 #define NI_GPCT_SOURCE_PIN_CLOCK_SRC_BITS(x) (0x10 + x)
01069 #define NI_GPCT_RTSI_CLOCK_SRC_BITS(x) (0x18 + x)
01070 #define NI_GPCT_PFI_CLOCK_SRC_BITS(x) (0x20 + x)
01071
01072
01073
01074
01075
01076 #define NI_GPCT_TIMESTAMP_MUX_GATE_SELECT 0x0
01077 #define NI_GPCT_AI_START2_GATE_SELECT 0x12
01078 #define NI_GPCT_PXI_STAR_TRIGGER_GATE_SELECT 0x13
01079 #define NI_GPCT_NEXT_OUT_GATE_SELECT 0x14
01080 #define NI_GPCT_AI_START1_GATE_SELECT 0x1c
01081 #define NI_GPCT_NEXT_SOURCE_GATE_SELECT 0x1d
01082 #define NI_GPCT_ANALOG_TRIGGER_OUT_GATE_SELECT 0x1e
01083 #define NI_GPCT_LOGIC_LOW_GATE_SELECT 0x1f
01084
01085 #define NI_GPCT_SOURCE_PIN_i_GATE_SELECT 0x100
01086 #define NI_GPCT_GATE_PIN_i_GATE_SELECT 0x101
01087
01088 #define NI_GPCT_UP_DOWN_PIN_i_GATE_SELECT 0x201
01089 #define NI_GPCT_SELECTED_GATE_GATE_SELECT 0x21e
01090
01091
01092 #define NI_GPCT_DISABLED_GATE_SELECT 0x8000
01093 #define NI_GPCT_GATE_PIN_GATE_SELECT(x) (0x102 + x)
01094 #define NI_GPCT_RTSI_GATE_SELECT(x) NI_USUAL_RTSI_SELECT(x)
01095 #define NI_GPCT_PFI_GATE_SELECT(x) NI_USUAL_PFI_SELECT(x)
01096 #define NI_GPCT_UP_DOWN_PIN_GATE_SELECT(x) (0x202 + x)
01097
01098
01099
01100 #define NI_GPCT_SOURCE_ENCODER_A 0
01101 #define NI_GPCT_SOURCE_ENCODER_B 1
01102 #define NI_GPCT_SOURCE_ENCODER_Z 2
01103
01104
01105 #define NI_GPCT_DISABLED_OTHER_SELECT 0x8000
01106 #define NI_GPCT_PFI_OTHER_SELECT(x) NI_USUAL_PFI_SELECT(x)
01107
01108
01109
01110 #define NI_GPCT_ARM_IMMEDIATE 0x0
01111
01112
01113 #define NI_GPCT_ARM_PAIRED_IMMEDIATE 0x1
01114
01115
01116
01117
01118
01119 #define NI_GPCT_ARM_UNKNOWN 0x1000
01120
01121
01122
01123 #define NI_GPCT_FILTER_OFF 0x0
01124 #define NI_GPCT_FILTER_TIMEBASE_3_SYNC 0x1
01125 #define NI_GPCT_FILTER_100x_TIMEBASE_1 0x2
01126 #define NI_GPCT_FILTER_20x_TIMEBASE_1 0x3
01127 #define NI_GPCT_FILTER_10x_TIMEBASE_1 0x4
01128 #define NI_GPCT_FILTER_2x_TIMEBASE_1 0x5
01129 #define NI_GPCT_FILTER_2x_TIMEBASE_3 0x6
01130
01131
01132
01133 #define NI_MIO_INTERNAL_CLOCK 0
01134 #define NI_MIO_RTSI_CLOCK 1
01135
01136
01137 #define NI_MIO_PLL_PXI_STAR_TRIGGER_CLOCK 2
01138 #define NI_MIO_PLL_PXI10_CLOCK 3
01139 #define NI_MIO_PLL_RTSI0_CLOCK 4
01140
01141 #define NI_MIO_PLL_RTSI_CLOCK(x) (NI_MIO_PLL_RTSI0_CLOCK + (x))
01142
01143
01144
01145
01146 #define NI_RTSI_OUTPUT_ADR_START1 0
01147 #define NI_RTSI_OUTPUT_ADR_START2 1
01148 #define NI_RTSI_OUTPUT_SCLKG 2
01149 #define NI_RTSI_OUTPUT_DACUPDN 3
01150 #define NI_RTSI_OUTPUT_DA_START1 4
01151 #define NI_RTSI_OUTPUT_G_SRC0 5
01152 #define NI_RTSI_OUTPUT_G_GATE0 6
01153 #define NI_RTSI_OUTPUT_RGOUT0 7
01154 #define NI_RTSI_OUTPUT_RTSI_BRD_0 8
01155
01156 #define NI_RTSI_OUTPUT_RTSI_OSC 12
01157
01158 #define NI_RTSI_OUTPUT_RTSI_BRD(x) (NI_RTSI_OUTPUT_RTSI_BRD_0 + (x))
01159
01160
01161 int ni_tio_rinsn(struct ni_gpct *counter, a4l_kinsn_t *insn);
01162 int ni_tio_winsn(struct ni_gpct *counter, a4l_kinsn_t *insn);
01163 int ni_tio_insn_config(struct ni_gpct *counter, a4l_kinsn_t *insn);
01164 void ni_tio_init_counter(struct ni_gpct *counter);
01165
01166 struct ni_gpct_device *ni_gpct_device_construct(a4l_dev_t * dev,
01167 void (*write_register) (struct ni_gpct * counter, unsigned int bits,
01168 enum ni_gpct_register reg),
01169 unsigned int (*read_register) (struct ni_gpct * counter,
01170 enum ni_gpct_register reg), enum ni_gpct_variant variant,
01171 unsigned int num_counters);
01172 void ni_gpct_device_destroy(struct ni_gpct_device *counter_dev);
01173
01174 #if (defined(CONFIG_XENO_DRIVERS_ANALOGY_NI_MITE) || \
01175 defined(CONFIG_XENO_DRIVERS_ANALOGY_NI_MITE_MODULE))
01176
01177 extern a4l_cmd_t ni_tio_cmd_mask;
01178
01179 int ni_tio_input_inttrig(struct ni_gpct *counter, lsampl_t trignum);
01180 int ni_tio_cmd(struct ni_gpct *counter, a4l_cmd_t *cmd);
01181 int ni_tio_cmdtest(struct ni_gpct *counter, a4l_cmd_t *cmd);
01182 int ni_tio_cancel(struct ni_gpct *counter);
01183
01184 void ni_tio_handle_interrupt(struct ni_gpct *counter, a4l_dev_t *dev);
01185 void ni_tio_set_mite_channel(struct ni_gpct *counter,
01186 struct mite_channel *mite_chan);
01187 void ni_tio_acknowledge_and_confirm(struct ni_gpct *counter,
01188 int *gate_error,
01189 int *tc_error,
01190 int *perm_stale_data, int *stale_data);
01191
01192 #endif
01193
01194 #endif