205 unsigned int dw_Dummy;
210 ret =
inl(
devpriv->s_BoardInfos.ui_Address + 60);
211 devpriv->s_BoardInfos.dw_MolduleConfiguration[0] =
ret;
213 ret =
inl(
devpriv->s_BoardInfos.ui_Address + 124);
214 devpriv->s_BoardInfos.dw_MolduleConfiguration[1] =
ret;
216 ret =
inl(
devpriv->s_BoardInfos.ui_Address + 188);
217 devpriv->s_BoardInfos.dw_MolduleConfiguration[2] =
ret;
219 ret =
inl(
devpriv->s_BoardInfos.ui_Address + 252);
220 devpriv->s_BoardInfos.dw_MolduleConfiguration[3] =
ret;
223 outl(0x83838383,
devpriv->s_BoardInfos.ui_Address + 0x60);
225 devpriv->s_BoardInfos.b_BoardVersion = 1;
228 dw_Dummy =
inl(
devpriv->s_BoardInfos.ui_Address + 0x38);
229 outl(dw_Dummy | 0x2000,
devpriv->s_BoardInfos.ui_Address + 0x38);
253 unsigned char b_ModuleCpt = 0;
254 unsigned char b_InterruptFlag = 0;
255 unsigned char b_PWMCpt = 0;
256 unsigned char b_TorCounterCpt = 0;
257 unsigned char b_PulseIncoderCpt = 0;
258 unsigned int ui_16BitValue;
259 unsigned int ul_InterruptLatchReg = 0;
260 unsigned int ul_LatchRegisterValue = 0;
261 unsigned int ul_82X54InterruptStatus;
262 unsigned int ul_StatusRegister;
266 printk(
"APCI1710 Interrupt\n");
267 for (b_ModuleCpt = 0; b_ModuleCpt < 4; b_ModuleCpt++, ps_ModuleInfo++) {
272 ps_ModuleInfo = &
devpriv->s_ModuleInfo[b_ModuleCpt];
279 dw_MolduleConfiguration[b_ModuleCpt] &
283 ul_82X54InterruptStatus =
inl(
devpriv->s_BoardInfos.
284 ui_Address + 12 + (64 * b_ModuleCpt));
290 if ((ul_82X54InterruptStatus & ps_ModuleInfo->
294 s_InterruptParameters.
295 s_FIFOInterruptParameters[
devpriv->
296 s_InterruptParameters.
298 ul_OldInterruptMask =
299 (ul_82X54InterruptStatus &
304 s_InterruptParameters.
305 s_FIFOInterruptParameters[
devpriv->
306 s_InterruptParameters.
308 b_OldModuleMask = 1 << b_ModuleCpt;
311 s_InterruptParameters.
312 s_FIFOInterruptParameters[
devpriv->
313 s_InterruptParameters.
314 ui_Write].ul_OldCounterLatchValue = 0;
317 s_InterruptParameters.
325 s_InterruptParameters.
327 s_InterruptParameters.
346 dw_MolduleConfiguration[b_ModuleCpt] &
349 ul_InterruptLatchReg =
inl(
devpriv->s_BoardInfos.
350 ui_Address + (64 * b_ModuleCpt));
356 if ((ul_InterruptLatchReg & 0x22) && (ps_ModuleInfo->
365 if (ul_InterruptLatchReg & 2) {
366 ul_LatchRegisterValue =
372 s_InterruptParameters.
373 s_FIFOInterruptParameters
374 [
devpriv->s_InterruptParameters.
375 ui_Write].ul_OldInterruptMask =
379 s_InterruptParameters.
380 s_FIFOInterruptParameters
381 [
devpriv->s_InterruptParameters.
382 ui_Write].b_OldModuleMask =
386 s_InterruptParameters.
387 s_FIFOInterruptParameters
388 [
devpriv->s_InterruptParameters.
390 ul_OldCounterLatchValue =
391 ul_LatchRegisterValue;
394 s_InterruptParameters.
404 s_InterruptParameters.
406 s_InterruptParameters.
425 if (ul_InterruptLatchReg & 0x20) {
427 ul_LatchRegisterValue =
433 s_InterruptParameters.
434 s_FIFOInterruptParameters
435 [
devpriv->s_InterruptParameters.
436 ui_Write].ul_OldInterruptMask =
440 s_InterruptParameters.
441 s_FIFOInterruptParameters
442 [
devpriv->s_InterruptParameters.
443 ui_Write].b_OldModuleMask =
447 s_InterruptParameters.
448 s_FIFOInterruptParameters
449 [
devpriv->s_InterruptParameters.
451 ul_OldCounterLatchValue =
452 ul_LatchRegisterValue;
455 s_InterruptParameters.
465 s_InterruptParameters.
467 s_InterruptParameters.
483 ul_InterruptLatchReg =
inl(
devpriv->s_BoardInfos.
484 ui_Address + 24 + (64 * b_ModuleCpt));
490 if (ul_InterruptLatchReg & 0x8) {
521 APCI1710_ENABLE_INDEX_INT) {
522 devpriv->s_InterruptParameters.
523 s_FIFOInterruptParameters
524 [
devpriv->s_InterruptParameters.
525 ui_Write].ul_OldInterruptMask =
529 s_InterruptParameters.
530 s_FIFOInterruptParameters
531 [
devpriv->s_InterruptParameters.
532 ui_Write].b_OldModuleMask =
536 s_InterruptParameters.
537 s_FIFOInterruptParameters
538 [
devpriv->s_InterruptParameters.
540 ul_OldCounterLatchValue =
541 ul_LatchRegisterValue;
544 s_InterruptParameters.
554 s_InterruptParameters.
556 s_InterruptParameters.
576 if (ul_InterruptLatchReg & 0x10) {
587 APCI1710_ENABLE_COMPARE_INT) {
588 devpriv->s_InterruptParameters.
589 s_FIFOInterruptParameters
590 [
devpriv->s_InterruptParameters.
591 ui_Write].ul_OldInterruptMask =
595 s_InterruptParameters.
596 s_FIFOInterruptParameters
597 [
devpriv->s_InterruptParameters.
598 ui_Write].b_OldModuleMask =
602 s_InterruptParameters.
603 s_FIFOInterruptParameters
604 [
devpriv->s_InterruptParameters.
606 ul_OldCounterLatchValue =
607 ul_LatchRegisterValue;
610 s_InterruptParameters.
620 s_InterruptParameters.
622 s_InterruptParameters.
642 if (ul_InterruptLatchReg & 0x20) {
647 ul_StatusRegister =
inl(
devpriv->s_BoardInfos.
648 ui_Address + 32 + (64 * b_ModuleCpt));
654 ul_LatchRegisterValue =
656 28 + (64 * b_ModuleCpt));
658 switch ((ul_StatusRegister >> 1) & 3) {
664 if ((
devpriv->s_ModuleInfo[b_ModuleCpt].
670 == APCI1710_16BIT_COUNTER) {
675 if ((ul_LatchRegisterValue &
679 ul_LatchRegisterValue
681 ul_LatchRegisterValue =
682 (ul_LatchRegisterValue
692 if ((ul_LatchRegisterValue &
697 (ul_LatchRegisterValue
700 ul_LatchRegisterValue =
701 (ul_LatchRegisterValue
708 if (ul_LatchRegisterValue != 0) {
709 ul_LatchRegisterValue =
711 ul_LatchRegisterValue;
721 if ((ul_LatchRegisterValue &
722 0xFFFF0000UL) != 0) {
725 (ul_LatchRegisterValue
728 ul_LatchRegisterValue =
729 (ul_LatchRegisterValue &
730 0xFFFF
UL) | ((0xFFFFU -
741 if ((ul_LatchRegisterValue & 0xFFFFU) !=
745 ul_LatchRegisterValue &
747 ul_LatchRegisterValue =
748 (ul_LatchRegisterValue &
749 0xFFFF0000
UL) | (0xFFFFU
756 s_InterruptParameters.
757 s_FIFOInterruptParameters[
devpriv->
758 s_InterruptParameters.
760 ul_OldInterruptMask = 0x10000
UL;
763 s_InterruptParameters.
764 s_FIFOInterruptParameters[
devpriv->
765 s_InterruptParameters.
767 b_OldModuleMask = 1 << b_ModuleCpt;
770 s_InterruptParameters.
771 s_FIFOInterruptParameters[
devpriv->
772 s_InterruptParameters.
774 ul_OldCounterLatchValue =
775 ul_LatchRegisterValue;
778 s_InterruptParameters.
788 s_InterruptParameters.
790 s_InterruptParameters.
809 dw_MolduleConfiguration[b_ModuleCpt] &
815 if ((
devpriv->s_ModuleInfo[b_ModuleCpt].
818 && (
devpriv->s_ModuleInfo[b_ModuleCpt].
824 ul_StatusRegister =
inl(
devpriv->s_BoardInfos.
825 ui_Address + 16 + (64 * b_ModuleCpt));
830 if (ul_StatusRegister & 1) {
832 s_InterruptParameters.
833 s_FIFOInterruptParameters
834 [
devpriv->s_InterruptParameters.
835 ui_Write].ul_OldInterruptMask =
839 s_InterruptParameters.
840 s_FIFOInterruptParameters
841 [
devpriv->s_InterruptParameters.
842 ui_Write].b_OldModuleMask =
846 s_InterruptParameters.
847 s_FIFOInterruptParameters
848 [
devpriv->s_InterruptParameters.
850 ul_OldCounterLatchValue = 0;
853 s_InterruptParameters.
861 s_InterruptParameters.
863 s_InterruptParameters.
887 dw_MolduleConfiguration[b_ModuleCpt] &
889 for (b_PWMCpt = 0; b_PWMCpt < 2; b_PWMCpt++) {
895 s_ModuleInfo[b_ModuleCpt].
913 if (ul_StatusRegister & 0x1) {
915 s_InterruptParameters.
916 s_FIFOInterruptParameters
918 s_InterruptParameters.
920 ul_OldInterruptMask =
921 0x4000
UL << b_PWMCpt;
924 s_InterruptParameters.
925 s_FIFOInterruptParameters
927 s_InterruptParameters.
933 s_InterruptParameters.
941 s_InterruptParameters.
943 s_InterruptParameters.
968 dw_MolduleConfiguration[b_ModuleCpt] &
970 for (b_TorCounterCpt = 0; b_TorCounterCpt < 2;
977 s_ModuleInfo[b_ModuleCpt].
988 (16 * b_TorCounterCpt) +
995 if (ul_StatusRegister & 0x1) {
1000 ul_LatchRegisterValue =
1004 (16 * b_TorCounterCpt) +
1005 (64 * b_ModuleCpt));
1008 s_InterruptParameters.
1009 s_FIFOInterruptParameters
1011 s_InterruptParameters.
1013 ul_OldInterruptMask =
1018 s_InterruptParameters.
1019 s_FIFOInterruptParameters
1021 s_InterruptParameters.
1027 s_InterruptParameters.
1028 s_FIFOInterruptParameters
1030 s_InterruptParameters.
1032 ul_OldCounterLatchValue
1033 = ul_LatchRegisterValue;
1036 s_InterruptParameters.
1037 ul_InterruptOccur++;
1044 s_InterruptParameters.
1046 s_InterruptParameters.
1051 b_InterruptFlag = 1;
1071 dw_MolduleConfiguration[b_ModuleCpt] &
1079 ul_InterruptLatchReg =
inl(
devpriv->s_BoardInfos.
1080 ui_Address + 12 + (64 * b_ModuleCpt));
1086 if ((ul_InterruptLatchReg & 0x8) == 0x8) {
1092 ui_Address + 32 + (64 * b_ModuleCpt));
1107 (64 * b_ModuleCpt));
1114 ul_LatchRegisterValue =
1116 4 + (64 * b_ModuleCpt));
1125 s_InterruptParameters.
1126 s_FIFOInterruptParameters
1127 [
devpriv->s_InterruptParameters.
1128 ui_Write].ul_OldInterruptMask =
1132 s_InterruptParameters.
1133 s_FIFOInterruptParameters
1134 [
devpriv->s_InterruptParameters.
1135 ui_Write].b_OldModuleMask =
1139 s_InterruptParameters.
1140 s_FIFOInterruptParameters
1141 [
devpriv->s_InterruptParameters.
1143 ul_OldCounterLatchValue =
1144 ul_LatchRegisterValue;
1147 s_InterruptParameters.
1148 ul_InterruptOccur++;
1155 s_InterruptParameters.
1157 s_InterruptParameters.
1161 b_InterruptFlag = 1;
1179 dw_MolduleConfiguration[b_ModuleCpt] &
1185 ul_StatusRegister =
inl(
devpriv->s_BoardInfos.
1186 ui_Address + 20 + (64 * b_ModuleCpt));
1188 if (ul_StatusRegister & 0xF) {
1189 for (b_PulseIncoderCpt = 0;
1190 b_PulseIncoderCpt < 4;
1191 b_PulseIncoderCpt++) {
1196 if ((ps_ModuleInfo->
1199 [b_PulseIncoderCpt].
1201 && (((ps_ModuleInfo->
s_PulseEncoderModuleInfo.dw_SetRegister >> b_PulseIncoderCpt) & 1) == 1) && (((ul_StatusRegister >> (b_PulseIncoderCpt)) & 1) == 1)) {
1202 devpriv->s_InterruptParameters.
1203 s_FIFOInterruptParameters
1205 s_InterruptParameters.
1207 ul_OldInterruptMask =
1212 s_InterruptParameters.
1213 s_FIFOInterruptParameters
1215 s_InterruptParameters.
1221 s_InterruptParameters.
1222 s_FIFOInterruptParameters
1224 s_InterruptParameters.
1226 ul_OldCounterLatchValue
1227 = ul_LatchRegisterValue;
1230 s_InterruptParameters.
1231 ul_InterruptOccur++;
1240 s_InterruptParameters.
1242 s_InterruptParameters.
1247 b_InterruptFlag = 1;