Enscript Output

extractedLnx/linux-2.6.38/drivers/staging/comedi/drivers/addi-data/APCI1710_Tor.c_i_APCI1710_InsnConfigInitTorCounter.c

int i_APCI1710_InsnConfigInitTorCounter(struct comedi_device *dev,
	struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data)
{
	int i_ReturnValue = 0;
	unsigned int ul_TimerValue = 0;
	unsigned int dw_Command;
	double d_RealTimingInterval = 0;
	unsigned char b_ModulNbr;
	unsigned char b_TorCounter;
	unsigned char b_PCIInputClock;
	unsigned char b_TimingUnit;
	unsigned int ul_TimingInterval;
	unsigned int ul_RealTimingInterval = 0;

	i_ReturnValue = insn->n;
	b_ModulNbr = (unsigned char) CR_AREF(insn->chanspec);

	b_TorCounter = (unsigned char) data[0];
	b_PCIInputClock = (unsigned char) data[1];
	b_TimingUnit = (unsigned char) data[2];
	ul_TimingInterval = (unsigned int) data[3];
	printk("INPUT clock %d\n", b_PCIInputClock);

		/**************************/
	/* Test the module number */
		/**************************/

	if (b_ModulNbr < 4) {
		/***********************/
		/* Test if tor counter */
		/***********************/

		if ((devpriv->s_BoardInfos.
				dw_MolduleConfiguration[b_ModulNbr] &
				0xFFFF0000UL) == APCI1710_TOR_COUNTER) {
	      /**********************************/
			/* Test the tor counter selection */
	      /**********************************/

			if (b_TorCounter <= 1) {
		 /**************************/
				/* Test the PCI bus clock */
		 /**************************/

				if ((b_PCIInputClock == APCI1710_30MHZ) ||
					(b_PCIInputClock == APCI1710_33MHZ) ||
					(b_PCIInputClock == APCI1710_40MHZ) ||
					(b_PCIInputClock ==
						APCI1710_GATE_INPUT)) {
		    /************************/
					/* Test the timing unit */
		    /************************/

					if ((b_TimingUnit <= 4)
						|| (b_PCIInputClock ==
							APCI1710_GATE_INPUT)) {
		       /**********************************/
						/* Test the base timing selection */
		       /**********************************/

						if (((b_PCIInputClock == APCI1710_30MHZ) && (b_TimingUnit == 0) && (ul_TimingInterval >= 133) && (ul_TimingInterval <= 0xFFFFFFFFUL)) || ((b_PCIInputClock == APCI1710_30MHZ) && (b_TimingUnit == 1) && (ul_TimingInterval >= 1) && (ul_TimingInterval <= 571230650UL)) || ((b_PCIInputClock == APCI1710_30MHZ) && (b_TimingUnit == 2) && (ul_TimingInterval >= 1) && (ul_TimingInterval <= 571230UL)) || ((b_PCIInputClock == APCI1710_30MHZ) && (b_TimingUnit == 3) && (ul_TimingInterval >= 1) && (ul_TimingInterval <= 571UL)) || ((b_PCIInputClock == APCI1710_30MHZ) && (b_TimingUnit == 4) && (ul_TimingInterval >= 1) && (ul_TimingInterval <= 9UL)) || ((b_PCIInputClock == APCI1710_33MHZ) && (b_TimingUnit == 0) && (ul_TimingInterval >= 121) && (ul_TimingInterval <= 0xFFFFFFFFUL)) || ((b_PCIInputClock == APCI1710_33MHZ) && (b_TimingUnit == 1) && (ul_TimingInterval >= 1) && (ul_TimingInterval <= 519691043UL)) || ((b_PCIInputClock == APCI1710_33MHZ) && (b_TimingUnit == 2) && (ul_TimingInterval >= 1) && (ul_TimingInterval <= 519691UL)) || ((b_PCIInputClock == APCI1710_33MHZ) && (b_TimingUnit == 3) && (ul_TimingInterval >= 1) && (ul_TimingInterval <= 520UL)) || ((b_PCIInputClock == APCI1710_33MHZ) && (b_TimingUnit == 4) && (ul_TimingInterval >= 1) && (ul_TimingInterval <= 8UL)) || ((b_PCIInputClock == APCI1710_40MHZ) && (b_TimingUnit == 0) && (ul_TimingInterval >= 100) && (ul_TimingInterval <= 0xFFFFFFFFUL)) || ((b_PCIInputClock == APCI1710_40MHZ) && (b_TimingUnit == 1) && (ul_TimingInterval >= 1) && (ul_TimingInterval <= 429496729UL)) || ((b_PCIInputClock == APCI1710_40MHZ) && (b_TimingUnit == 2) && (ul_TimingInterval >= 1) && (ul_TimingInterval <= 429496UL)) || ((b_PCIInputClock == APCI1710_40MHZ) && (b_TimingUnit == 3) && (ul_TimingInterval >= 1) && (ul_TimingInterval <= 429UL)) || ((b_PCIInputClock == APCI1710_40MHZ) && (b_TimingUnit == 4) && (ul_TimingInterval >= 1) && (ul_TimingInterval <= 7UL)) || ((b_PCIInputClock == APCI1710_GATE_INPUT) && (ul_TimingInterval >= 2))) {
				/**************************/
							/* Test the board version */
				/**************************/

							if (((b_PCIInputClock == APCI1710_40MHZ) && (devpriv->s_BoardInfos.b_BoardVersion > 0)) || (b_PCIInputClock != APCI1710_40MHZ)) {
			     /************************/
								/* Test the TOR version */
			     /************************/

								if (((b_PCIInputClock == APCI1710_40MHZ) && ((devpriv->s_BoardInfos.dw_MolduleConfiguration[b_ModulNbr] & 0xFFFF) >= 0x3131)) || ((b_PCIInputClock == APCI1710_GATE_INPUT) && ((devpriv->s_BoardInfos.dw_MolduleConfiguration[b_ModulNbr] & 0xFFFF) >= 0x3132)) || (b_PCIInputClock == APCI1710_30MHZ) || (b_PCIInputClock == APCI1710_33MHZ)) {
				/*********************************/
									/* Test if not extern clock used */
				/*********************************/

									if (b_PCIInputClock != APCI1710_GATE_INPUT) {
										fpu_begin
											();
				   /****************************************/
										/* Calculate the timer 0 division fator */
				   /****************************************/

										switch (b_TimingUnit) {
				      /******/
											/* ns */
				      /******/

										case 0:

					      /******************/
											/* Timer 0 factor */
					      /******************/

											ul_TimerValue
												=
												(unsigned int)
												(ul_TimingInterval
												*
												(0.00025 * b_PCIInputClock));

					      /*******************/
											/* Round the value */
					      /*******************/

											if ((double)((double)ul_TimingInterval * (0.00025 * (double)b_PCIInputClock)) >= ((double)((double)ul_TimerValue + 0.5))) {
												ul_TimerValue
													=
													ul_TimerValue
													+
													1;
											}

					      /*****************************/
											/* Calculate the real timing */
					      /*****************************/

											ul_RealTimingInterval
												=
												(unsigned int)
												(ul_TimerValue
												/
												(0.00025 * (double)b_PCIInputClock));
											d_RealTimingInterval
												=
												(double)
												ul_TimerValue
												/
												(0.00025
												*
												(double)
												b_PCIInputClock);

											if ((double)((double)ul_TimerValue / (0.00025 * (double)b_PCIInputClock)) >= (double)((double)ul_RealTimingInterval + 0.5)) {
												ul_RealTimingInterval
													=
													ul_RealTimingInterval
													+
													1;
											}

											ul_TimingInterval
												=
												ul_TimingInterval
												-
												1;
											ul_TimerValue
												=
												ul_TimerValue
												-
												2;

											if (b_PCIInputClock != APCI1710_40MHZ) {
												ul_TimerValue
													=
													(unsigned int)
													(
													(double)
													(ul_TimerValue)
													*
													1.007752288);
											}

											break;

				      /******/
											/* æs */
				      /******/

										case 1:

					      /******************/
											/* Timer 0 factor */
					      /******************/

											ul_TimerValue
												=
												(unsigned int)
												(ul_TimingInterval
												*
												(0.25 * b_PCIInputClock));

					      /*******************/
											/* Round the value */
					      /*******************/

											if ((double)((double)ul_TimingInterval * (0.25 * (double)b_PCIInputClock)) >= ((double)((double)ul_TimerValue + 0.5))) {
												ul_TimerValue
													=
													ul_TimerValue
													+
													1;
											}

					      /*****************************/
											/* Calculate the real timing */
					      /*****************************/

											ul_RealTimingInterval
												=
												(unsigned int)
												(ul_TimerValue
												/
												(0.25 * (double)b_PCIInputClock));
											d_RealTimingInterval
												=
												(double)
												ul_TimerValue
												/
												(
												(double)
												0.25
												*
												(double)
												b_PCIInputClock);

											if ((double)((double)ul_TimerValue / (0.25 * (double)b_PCIInputClock)) >= (double)((double)ul_RealTimingInterval + 0.5)) {
												ul_RealTimingInterval
													=
													ul_RealTimingInterval
													+
													1;
											}

											ul_TimingInterval
												=
												ul_TimingInterval
												-
												1;
											ul_TimerValue
												=
												ul_TimerValue
												-
												2;

											if (b_PCIInputClock != APCI1710_40MHZ) {
												ul_TimerValue
													=
													(unsigned int)
													(
													(double)
													(ul_TimerValue)
													*
													1.007752288);
											}

											break;

				      /******/
											/* ms */
				      /******/

										case 2:

					      /******************/
											/* Timer 0 factor */
					      /******************/

											ul_TimerValue
												=
												ul_TimingInterval
												*
												(250.0
												*
												b_PCIInputClock);

					      /*******************/
											/* Round the value */
					      /*******************/

											if ((double)((double)ul_TimingInterval * (250.0 * (double)b_PCIInputClock)) >= ((double)((double)ul_TimerValue + 0.5))) {
												ul_TimerValue
													=
													ul_TimerValue
													+
													1;
											}

					      /*****************************/
											/* Calculate the real timing */
					      /*****************************/

											ul_RealTimingInterval
												=
												(unsigned int)
												(ul_TimerValue
												/
												(250.0 * (double)b_PCIInputClock));
											d_RealTimingInterval
												=
												(double)
												ul_TimerValue
												/
												(250.0
												*
												(double)
												b_PCIInputClock);

											if ((double)((double)ul_TimerValue / (250.0 * (double)b_PCIInputClock)) >= (double)((double)ul_RealTimingInterval + 0.5)) {
												ul_RealTimingInterval
													=
													ul_RealTimingInterval
													+
													1;
											}

											ul_TimingInterval
												=
												ul_TimingInterval
												-
												1;
											ul_TimerValue
												=
												ul_TimerValue
												-
												2;

											if (b_PCIInputClock != APCI1710_40MHZ) {
												ul_TimerValue
													=
													(unsigned int)
													(
													(double)
													(ul_TimerValue)
													*
													1.007752288);
											}

											break;

				      /*****/
											/* s */
				      /*****/

										case 3:

					      /******************/
											/* Timer 0 factor */
					      /******************/

											ul_TimerValue
												=
												(unsigned int)
												(ul_TimingInterval
												*
												(250000.0
													*
													b_PCIInputClock));

					      /*******************/
											/* Round the value */
					      /*******************/

											if ((double)((double)ul_TimingInterval * (250000.0 * (double)b_PCIInputClock)) >= ((double)((double)ul_TimerValue + 0.5))) {
												ul_TimerValue
													=
													ul_TimerValue
													+
													1;
											}

					      /*****************************/
											/* Calculate the real timing */
					      /*****************************/

											ul_RealTimingInterval
												=
												(unsigned int)
												(ul_TimerValue
												/
												(250000.0
													*
													(double)
													b_PCIInputClock));
											d_RealTimingInterval
												=
												(double)
												ul_TimerValue
												/
												(250000.0
												*
												(double)
												b_PCIInputClock);

											if ((double)((double)ul_TimerValue / (250000.0 * (double)b_PCIInputClock)) >= (double)((double)ul_RealTimingInterval + 0.5)) {
												ul_RealTimingInterval
													=
													ul_RealTimingInterval
													+
													1;
											}

											ul_TimingInterval
												=
												ul_TimingInterval
												-
												1;
											ul_TimerValue
												=
												ul_TimerValue
												-
												2;

											if (b_PCIInputClock != APCI1710_40MHZ) {
												ul_TimerValue
													=
													(unsigned int)
													(
													(double)
													(ul_TimerValue)
													*
													1.007752288);
											}

											break;

				      /******/
											/* mn */
				      /******/

										case 4:

					      /******************/
											/* Timer 0 factor */
					      /******************/

											ul_TimerValue
												=
												(unsigned int)
												(
												(ul_TimingInterval
													*
													60)
												*
												(250000.0
													*
													b_PCIInputClock));

					      /*******************/
											/* Round the value */
					      /*******************/

											if ((double)((double)(ul_TimingInterval * 60.0) * (250000.0 * (double)b_PCIInputClock)) >= ((double)((double)ul_TimerValue + 0.5))) {
												ul_TimerValue
													=
													ul_TimerValue
													+
													1;
											}

					      /*****************************/
											/* Calculate the real timing */
					      /*****************************/

											ul_RealTimingInterval
												=
												(unsigned int)
												(ul_TimerValue
												/
												(250000.0
													*
													(double)
													b_PCIInputClock))
												/
												60;
											d_RealTimingInterval
												=
												(
												(double)
												ul_TimerValue
												/
												(250000.0
													*
													(double)
													b_PCIInputClock))
												/
												60.0;

											if ((double)(((double)ul_TimerValue / (250000.0 * (double)b_PCIInputClock)) / 60.0) >= (double)((double)ul_RealTimingInterval + 0.5)) {
												ul_RealTimingInterval
													=
													ul_RealTimingInterval
													+
													1;
											}

											ul_TimingInterval
												=
												ul_TimingInterval
												-
												1;
											ul_TimerValue
												=
												ul_TimerValue
												-
												2;

											if (b_PCIInputClock != APCI1710_40MHZ) {
												ul_TimerValue
													=
													(unsigned int)
													(
													(double)
													(ul_TimerValue)
													*
													1.007752288);
											}

											break;
										}

										fpu_end();
									}	/*  if (b_PCIInputClock != APCI1710_GATE_INPUT) */
									else {
				   /*************************************************************/
										/* 2 Clock used for the overflow and the reload from counter */
				   /*************************************************************/

										ul_TimerValue
											=
											ul_TimingInterval
											-
											2;
									}	/*  if (b_PCIInputClock != APCI1710_GATE_INPUT) */

				/****************************/
									/* Save the PCI input clock */
				/****************************/
									devpriv->
										s_ModuleInfo
										[b_ModulNbr].
										s_TorCounterModuleInfo.
										b_PCIInputClock
										=
										b_PCIInputClock;

				/************************/
									/* Save the timing unit */
				/************************/

									devpriv->
										s_ModuleInfo
										[b_ModulNbr].
										s_TorCounterModuleInfo.
										s_TorCounterInfo
										[b_TorCounter].
										b_TimingUnit
										=
										b_TimingUnit;

				/************************/
									/* Save the base timing */
				/************************/
									devpriv->
										s_ModuleInfo
										[b_ModulNbr].
										s_TorCounterModuleInfo.
										s_TorCounterInfo
										[b_TorCounter].
										d_TimingInterval
										=
										d_RealTimingInterval;

									devpriv->
										s_ModuleInfo
										[b_ModulNbr].
										s_TorCounterModuleInfo.
										s_TorCounterInfo
										[b_TorCounter].
										ul_RealTimingInterval
										=
										ul_RealTimingInterval;

				/*******************/
									/* Get the command */
				/*******************/

									dw_Command
										=
										inl
										(devpriv->
										s_BoardInfos.
										ui_Address
										+
										4
										+
										(16 * b_TorCounter) + (64 * b_ModulNbr));

									dw_Command
										=
										(dw_Command
										>>
										4)
										&
										0xF;

				/******************/
									/* Test if 40 MHz */
				/******************/

									if (b_PCIInputClock == APCI1710_40MHZ) {
				   /****************************/
										/* Set the 40 MHz selection */
				   /****************************/

										dw_Command
											=
											dw_Command
											|
											0x10;
									}

				/*****************************/
									/* Test if extern clock used */
				/*****************************/

									if (b_PCIInputClock == APCI1710_GATE_INPUT) {
				   /****************************/
										/* Set the 40 MHz selection */
				   /****************************/

										dw_Command
											=
											dw_Command
											|
											0x20;
									}

				/*************************/
									/* Write the new command */
				/*************************/

									outl(dw_Command, devpriv->s_BoardInfos.ui_Address + 4 + (16 * b_TorCounter) + (64 * b_ModulNbr));

				/*******************/
									/* Disable the tor */
				/*******************/

									outl(0, devpriv->s_BoardInfos.ui_Address + 8 + (16 * b_TorCounter) + (64 * b_ModulNbr));
				/*************************/
									/* Set the timer 1 value */
				/*************************/

									outl(ul_TimerValue, devpriv->s_BoardInfos.ui_Address + 0 + (16 * b_TorCounter) + (64 * b_ModulNbr));

				/*********************/
									/* Tor counter init. */
				/*********************/

									devpriv->
										s_ModuleInfo
										[b_ModulNbr].
										s_TorCounterModuleInfo.
										s_TorCounterInfo
										[b_TorCounter].
										b_TorCounterInit
										=
										1;
								} else {
				/***********************************************/
									/* TOR version error for 40MHz clock selection */
				/***********************************************/

									DPRINTK("TOR version error for 40MHz clock selection\n");
									i_ReturnValue
										=
										-9;
								}
							} else {
			     /**************************************************************/
								/* You can not used the 40MHz clock selection wich this board */
			     /**************************************************************/

								DPRINTK("You can not used the 40MHz clock selection wich this board\n");
								i_ReturnValue =
									-8;
							}
						} else {
			  /**********************************/
							/* Base timing selection is wrong */
			  /**********************************/

							DPRINTK("Base timing selection is wrong\n");
							i_ReturnValue = -7;
						}
					}	/*  if ((b_TimingUnit >= 0) && (b_TimingUnit <= 4)) */
					else {
		       /**********************************/
						/* Timing unit selection is wrong */
		       /**********************************/

						DPRINTK("Timing unit selection is wrong\n");
						i_ReturnValue = -6;
					}	/*  if ((b_TimingUnit >= 0) && (b_TimingUnit <= 4)) */
				}	/*  if ((b_PCIInputClock == APCI1710_30MHZ) || (b_PCIInputClock == APCI1710_33MHZ)) */
				else {
		    /*****************************************/
					/* The selected PCI input clock is wrong */
		    /*****************************************/

					DPRINTK("The selected PCI input clock is wrong\n");
					i_ReturnValue = -5;
				}	/*  if ((b_PCIInputClock == APCI1710_30MHZ) || (b_PCIInputClock == APCI1710_33MHZ)) */
			}	/*  if (b_TorCounterMode >= 0 && b_TorCounterMode <= 7) */
			else {
		 /**********************************/
				/* Tor Counter selection is wrong */
		 /**********************************/

				DPRINTK("Tor Counter selection is wrong\n");
				i_ReturnValue = -4;
			}	/*  if (b_TorCounterMode >= 0 && b_TorCounterMode <= 7) */
		} else {
	      /******************************************/
			/* The module is not a tor counter module */
	      /******************************************/

			DPRINTK("The module is not a tor counter module\n");
			i_ReturnValue = -3;
		}
	} else {
	   /***********************/
		/* Module number error */
	   /***********************/

		DPRINTK("Module number error\n");
		i_ReturnValue = -2;
	}
	data[0] = (unsigned int) ul_RealTimingInterval;
	return i_ReturnValue;
}

Generated by GNU enscript 1.6.4.