Commit 15d8826a authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

Staging: comedi: addi-data header file cleanups

Clean up lots of coding style issues in the addi-data header
files.

Cc: David Schleef <ds@schleef.org>
Cc: Ian Abbott <abbotti@mev.co.uk>
Cc: Frank Mori Hess <fmhess@users.sourceforge.net>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 851a2c10
/** /*
@verbatim * Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
*
Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module. * ADDI-DATA GmbH
* Dieselstrasse 3
ADDI-DATA GmbH * D-77833 Ottersweier
Dieselstrasse 3 * Tel: +19(0)7223/9493-0
D-77833 Ottersweier * Fax: +49(0)7223/9493-92
Tel: +19(0)7223/9493-0 * http://www.addi-data-com
Fax: +49(0)7223/9493-92 * info@addi-data.com
http://www.addi-data-com *
info@addi-data.com * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. * Software Foundation; either version 2 of the License, or (at your option)
* any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #define APCI1710_PCI_BUS_CLOCK 0
#define APCI1710_FRONT_CONNECTOR_INPUT 1
You shoud also find the complete GPL in the COPYING file accompanying this source code. #define APCI1710_TIMER_READVALUE 0
#define APCI1710_TIMER_GETOUTPUTLEVEL 1
@endverbatim #define APCI1710_TIMER_GETPROGRESSSTATUS 2
*/ #define APCI1710_TIMER_WRITEVALUE 3
#define APCI1710_PCI_BUS_CLOCK 0 #define APCI1710_TIMER_READINTERRUPT 1
#define APCI1710_FRONT_CONNECTOR_INPUT 1 #define APCI1710_TIMER_READALLTIMER 2
#define APCI1710_TIMER_READVALUE 0
#define APCI1710_TIMER_GETOUTPUTLEVEL 1 /* BEGIN JK 27.10.03 : Add the possibility to use a 40 Mhz quartz */
#define APCI1710_TIMER_GETPROGRESSSTATUS 2
#define APCI1710_TIMER_WRITEVALUE 3
#define APCI1710_TIMER_READINTERRUPT 1
#define APCI1710_TIMER_READALLTIMER 2
// BEGIN JK 27.10.03 : Add the possibility to use a 40 Mhz quartz
#ifndef APCI1710_10MHZ #ifndef APCI1710_10MHZ
#define APCI1710_10MHZ 10 #define APCI1710_10MHZ 10
#endif #endif
// END JK 27.10.03 : Add the possibility to use a 40 Mhz quartz /* END JK 27.10.03 : Add the possibility to use a 40 Mhz quartz */
/* /*
+----------------------------------------------------------------------------+ * 82X54 TIMER INISIALISATION FUNCTION
| 82X54 TIMER INISIALISATION FUNCTION | */
+----------------------------------------------------------------------------+ INT i_APCI1710_InsnConfigInitTimer(comedi_device *dev, comedi_subdevice *s,
*/ comedi_insn *insn, lsampl_t *data);
INT i_APCI1710_InsnConfigInitTimer(comedi_device * dev, comedi_subdevice * s, INT i_APCI1710_InsnWriteEnableDisableTimer(comedi_device *dev,
comedi_insn * insn, lsampl_t * data); comedi_subdevice *s,
comedi_insn *insn, lsampl_t *data);
INT i_APCI1710_InsnWriteEnableDisableTimer(comedi_device * dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data);
/* /*
+----------------------------------------------------------------------------+ * 82X54 READ FUNCTION
| 82X54 READ FUNCTION | */
+----------------------------------------------------------------------------+ INT i_APCI1710_InsnReadAllTimerValue(comedi_device *dev, comedi_subdevice *s,
*/ comedi_insn *insn, lsampl_t *data);
INT i_APCI1710_InsnReadAllTimerValue(comedi_device * dev, comedi_subdevice * s,
comedi_insn * insn, lsampl_t * data);
INT i_APCI1710_InsnBitsTimer(comedi_device * dev, comedi_subdevice * s, INT i_APCI1710_InsnBitsTimer(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
/* /*
+----------------------------------------------------------------------------+ * 82X54 READ & WRITE FUNCTION
| 82X54 READ & WRITE FUNCTION | */
+----------------------------------------------------------------------------+ INT i_APCI1710_ReadTimerValue(comedi_device *dev,
*/ BYTE b_ModulNbr, BYTE b_TimerNbr,
INT i_APCI1710_ReadTimerValue(comedi_device * dev, PULONG pul_TimerValue);
BYTE b_ModulNbr, BYTE b_TimerNbr, PULONG pul_TimerValue);
INT i_APCI1710_GetTimerOutputLevel(comedi_device * dev, INT i_APCI1710_GetTimerOutputLevel(comedi_device *dev,
BYTE b_ModulNbr, BYTE b_TimerNbr, PBYTE pb_OutputLevel); BYTE b_ModulNbr, BYTE b_TimerNbr,
PBYTE pb_OutputLevel);
INT i_APCI1710_GetTimerProgressStatus(comedi_device * dev, INT i_APCI1710_GetTimerProgressStatus(comedi_device *dev,
BYTE b_ModulNbr, BYTE b_TimerNbr, PBYTE pb_TimerStatus); BYTE b_ModulNbr, BYTE b_TimerNbr,
PBYTE pb_TimerStatus);
/* /*
+----------------------------------------------------------------------------+ * 82X54 WRITE FUNCTION
| 82X54 WRITE FUNCTION | */
+----------------------------------------------------------------------------+ INT i_APCI1710_WriteTimerValue(comedi_device *dev,
*/ BYTE b_ModulNbr, BYTE b_TimerNbr,
INT i_APCI1710_WriteTimerValue(comedi_device * dev, ULONG ul_WriteValue);
BYTE b_ModulNbr, BYTE b_TimerNbr, ULONG ul_WriteValue);
/** /*
@verbatim * Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
*
Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module. * ADDI-DATA GmbH
* Dieselstrasse 3
ADDI-DATA GmbH * D-77833 Ottersweier
Dieselstrasse 3 * Tel: +19(0)7223/9493-0
D-77833 Ottersweier * Fax: +49(0)7223/9493-92
Tel: +19(0)7223/9493-0 * http://www.addi-data-com
Fax: +49(0)7223/9493-92 * info@addi-data.com
http://www.addi-data-com *
info@addi-data.com * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. * Software Foundation; either version 2 of the License, or (at your option)
* any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
You shoud also find the complete GPL in the COPYING file accompanying this source code.
@endverbatim
*/
#define APCI1710_30MHZ 30 #define APCI1710_30MHZ 30
#define APCI1710_33MHZ 33 #define APCI1710_33MHZ 33
#define APCI1710_40MHZ 40 #define APCI1710_40MHZ 40
#define APCI1710_SINGLE 0 #define APCI1710_SINGLE 0
#define APCI1710_CONTINUOUS 1 #define APCI1710_CONTINUOUS 1
#define APCI1710_CHRONO_PROGRESS_STATUS 0 #define APCI1710_CHRONO_PROGRESS_STATUS 0
#define APCI1710_CHRONO_READVALUE 1 #define APCI1710_CHRONO_READVALUE 1
#define APCI1710_CHRONO_CONVERTVALUE 2 #define APCI1710_CHRONO_CONVERTVALUE 2
#define APCI1710_CHRONO_READINTERRUPT 3 #define APCI1710_CHRONO_READINTERRUPT 3
#define APCI1710_CHRONO_SET_CHANNELON 0 #define APCI1710_CHRONO_SET_CHANNELON 0
#define APCI1710_CHRONO_SET_CHANNELOFF 1 #define APCI1710_CHRONO_SET_CHANNELOFF 1
#define APCI1710_CHRONO_READ_CHANNEL 2 #define APCI1710_CHRONO_READ_CHANNEL 2
#define APCI1710_CHRONO_READ_PORT 3 #define APCI1710_CHRONO_READ_PORT 3
/* /*
+----------------------------------------------------------------------------+ * CHRONOMETER INISIALISATION FUNCTION
| CHRONOMETER INISIALISATION FUNCTION |
+----------------------------------------------------------------------------+
*/ */
INT i_APCI1710_InsnConfigInitChrono(comedi_device *dev, comedi_subdevice *s,
comedi_insn *insn, lsampl_t *data);
INT i_APCI1710_InsnConfigInitChrono(comedi_device * dev, comedi_subdevice * s, INT i_APCI1710_InsnWriteEnableDisableChrono(comedi_device *dev,
comedi_insn * insn, lsampl_t * data); comedi_subdevice *s,
comedi_insn *insn,
INT i_APCI1710_InsnWriteEnableDisableChrono(comedi_device * dev, lsampl_t *data);
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data);
/* /*
+----------------------------------------------------------------------------+ * CHRONOMETER READ FUNCTION
| CHRONOMETER READ FUNCTION | */
+----------------------------------------------------------------------------+ INT i_APCI1710_InsnReadChrono(comedi_device *dev, comedi_subdevice *s,
*/ comedi_insn *insn, lsampl_t *data);
INT i_APCI1710_InsnReadChrono(comedi_device * dev, comedi_subdevice * s, INT i_APCI1710_GetChronoProgressStatus(comedi_device *dev,
comedi_insn * insn, lsampl_t * data); BYTE b_ModulNbr, PBYTE pb_ChronoStatus);
INT i_APCI1710_GetChronoProgressStatus(comedi_device * dev, INT i_APCI1710_ReadChronoValue(comedi_device *dev,
BYTE b_ModulNbr, PBYTE pb_ChronoStatus); BYTE b_ModulNbr,
UINT ui_TimeOut, PBYTE pb_ChronoStatus,
INT i_APCI1710_ReadChronoValue(comedi_device * dev, PULONG pul_ChronoValue);
BYTE b_ModulNbr,
UINT ui_TimeOut, PBYTE pb_ChronoStatus, PULONG pul_ChronoValue); INT i_APCI1710_ConvertChronoValue(comedi_device *dev,
BYTE b_ModulNbr,
INT i_APCI1710_ConvertChronoValue(comedi_device * dev, ULONG ul_ChronoValue,
BYTE b_ModulNbr, PULONG pul_Hour,
ULONG ul_ChronoValue, PBYTE pb_Minute,
PULONG pul_Hour, PBYTE pb_Second,
PBYTE pb_Minute, PUINT pui_MilliSecond, PUINT pui_MicroSecond,
PBYTE pb_Second, PUINT pui_NanoSecond);
PUINT pui_MilliSecond, PUINT pui_MicroSecond, PUINT pui_NanoSecond);
/* /*
+----------------------------------------------------------------------------+ * CHRONOMETER DIGITAL INPUT OUTPUT FUNCTION
| CHRONOMETER DIGITAL INPUT OUTPUT FUNCTION | */
+----------------------------------------------------------------------------+ INT i_APCI1710_InsnBitsChronoDigitalIO(comedi_device *dev,
*/ comedi_subdevice *s, comedi_insn *insn,
lsampl_t *data);
INT i_APCI1710_InsnBitsChronoDigitalIO(comedi_device * dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data);
/**
@verbatim
Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
ADDI-DATA GmbH
Dieselstrasse 3
D-77833 Ottersweier
Tel: +19(0)7223/9493-0
Fax: +49(0)7223/9493-92
http://www.addi-data-com
info@addi-data.com
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
You shoud also find the complete GPL in the COPYING file accompanying this source code.
@endverbatim
*/
#define APCI1710_ON 1 // Digital Output ON or OFF
#define APCI1710_OFF 0
#define APCI1710_INPUT 0 // Digital I/O
#define APCI1710_OUTPUT 1
#define APCI1710_DIGIO_MEMORYONOFF 0x10 //
#define APCI1710_DIGIO_INIT 0x11
/* /*
+----------------------------------------------------------------------------+ * Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
| DIGITAL I/O INISIALISATION FUNCTION | *
+----------------------------------------------------------------------------+ * ADDI-DATA GmbH
*/ * Dieselstrasse 3
* D-77833 Ottersweier
INT i_APCI1710_InsnConfigDigitalIO(comedi_device * dev, comedi_subdevice * s, * Tel: +19(0)7223/9493-0
comedi_insn * insn, lsampl_t * data); * Fax: +49(0)7223/9493-92
* http://www.addi-data-com
* info@addi-data.com
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*/
#define APCI1710_ON 1 /* Digital Output ON or OFF */
#define APCI1710_OFF 0
#define APCI1710_INPUT 0 /* Digital I/O */
#define APCI1710_OUTPUT 1
#define APCI1710_DIGIO_MEMORYONOFF 0x10
#define APCI1710_DIGIO_INIT 0x11
/* /*
+----------------------------------------------------------------------------+ * DIGITAL I/O INISIALISATION FUNCTION
| INPUT OUTPUT FUNCTIONS | */
+----------------------------------------------------------------------------+ INT i_APCI1710_InsnConfigDigitalIO(comedi_device *dev, comedi_subdevice *s,
*/ comedi_insn *insn, lsampl_t *data);
INT i_APCI1710_InsnReadDigitalIOChlValue(comedi_device * dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data);
INT i_APCI1710_InsnWriteDigitalIOChlOnOff(comedi_device * dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data);
INT i_APCI1710_InsnBitsDigitalIOPortOnOff(comedi_device * dev, /*
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); * INPUT OUTPUT FUNCTIONS
*/
INT i_APCI1710_InsnReadDigitalIOChlValue(comedi_device *dev,
comedi_subdevice *s,
comedi_insn *insn, lsampl_t *data);
INT i_APCI1710_InsnWriteDigitalIOChlOnOff(comedi_device *dev,
comedi_subdevice *s,
comedi_insn *insn, lsampl_t *data);
INT i_APCI1710_InsnBitsDigitalIOPortOnOff(comedi_device *dev,
comedi_subdevice *s,
comedi_insn *insn, lsampl_t *data);
/** /*
@verbatim * Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
*
Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module. * ADDI-DATA GmbH
* Dieselstrasse 3
ADDI-DATA GmbH * D-77833 Ottersweier
Dieselstrasse 3 * Tel: +19(0)7223/9493-0
D-77833 Ottersweier * Fax: +49(0)7223/9493-92
Tel: +19(0)7223/9493-0 * http://www.addi-data-com
Fax: +49(0)7223/9493-92 * info@addi-data.com
http://www.addi-data-com *
info@addi-data.com * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. * Software Foundation; either version 2 of the License, or (at your option)
* any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #define APCI1710_16BIT_COUNTER 0x10
#define APCI1710_32BIT_COUNTER 0x0
You shoud also find the complete GPL in the COPYING file accompanying this source code. #define APCI1710_QUADRUPLE_MODE 0x0
#define APCI1710_DOUBLE_MODE 0x3
@endverbatim #define APCI1710_SIMPLE_MODE 0xF
*/ #define APCI1710_DIRECT_MODE 0x80
#define APCI1710_HYSTERESIS_ON 0x60
#define APCI1710_16BIT_COUNTER 0x10 #define APCI1710_HYSTERESIS_OFF 0x0
#define APCI1710_32BIT_COUNTER 0x0 #define APCI1710_INCREMENT 0x60
#define APCI1710_QUADRUPLE_MODE 0x0 #define APCI1710_DECREMENT 0x0
#define APCI1710_DOUBLE_MODE 0x3 #define APCI1710_LATCH_COUNTER 0x1
#define APCI1710_SIMPLE_MODE 0xF #define APCI1710_CLEAR_COUNTER 0x0
#define APCI1710_DIRECT_MODE 0x80 #define APCI1710_LOW 0x0
#define APCI1710_HYSTERESIS_ON 0x60 #define APCI1710_HIGH 0x1
#define APCI1710_HYSTERESIS_OFF 0x0
#define APCI1710_INCREMENT 0x60
#define APCI1710_DECREMENT 0x0
#define APCI1710_LATCH_COUNTER 0x1
#define APCI1710_CLEAR_COUNTER 0x0
#define APCI1710_LOW 0x0
#define APCI1710_HIGH 0x1
/*********************/ /*********************/
/* Version 0600-0229 */ /* Version 0600-0229 */
/*********************/ /*********************/
#define APCI1710_HIGH_EDGE_CLEAR_COUNTER 0x0
#define APCI1710_HIGH_EDGE_CLEAR_COUNTER 0x0 #define APCI1710_HIGH_EDGE_LATCH_COUNTER 0x1
#define APCI1710_HIGH_EDGE_LATCH_COUNTER 0x1 #define APCI1710_LOW_EDGE_CLEAR_COUNTER 0x2
#define APCI1710_LOW_EDGE_CLEAR_COUNTER 0x2 #define APCI1710_LOW_EDGE_LATCH_COUNTER 0x3
#define APCI1710_LOW_EDGE_LATCH_COUNTER 0x3 #define APCI1710_HIGH_EDGE_LATCH_AND_CLEAR_COUNTER 0x4
#define APCI1710_HIGH_EDGE_LATCH_AND_CLEAR_COUNTER 0x4 #define APCI1710_LOW_EDGE_LATCH_AND_CLEAR_COUNTER 0x5
#define APCI1710_LOW_EDGE_LATCH_AND_CLEAR_COUNTER 0x5
#define APCI1710_SOURCE_0 0x0 #define APCI1710_SOURCE_0 0x0
#define APCI1710_SOURCE_1 0x1 #define APCI1710_SOURCE_1 0x1
#define APCI1710_30MHZ 30 #define APCI1710_30MHZ 30
#define APCI1710_33MHZ 33 #define APCI1710_33MHZ 33
#define APCI1710_40MHZ 40 #define APCI1710_40MHZ 40
#define APCI1710_ENABLE_LATCH_INT 0x80 #define APCI1710_ENABLE_LATCH_INT 0x80
#define APCI1710_DISABLE_LATCH_INT (~APCI1710_ENABLE_LATCH_INT) #define APCI1710_DISABLE_LATCH_INT (~APCI1710_ENABLE_LATCH_INT)
#define APCI1710_INDEX_LATCH_COUNTER 0x10 #define APCI1710_INDEX_LATCH_COUNTER 0x10
#define APCI1710_INDEX_AUTO_MODE 0x8 #define APCI1710_INDEX_AUTO_MODE 0x8
#define APCI1710_ENABLE_INDEX 0x4 #define APCI1710_ENABLE_INDEX 0x4
#define APCI1710_DISABLE_INDEX (~APCI1710_ENABLE_INDEX) #define APCI1710_DISABLE_INDEX (~APCI1710_ENABLE_INDEX)
#define APCI1710_ENABLE_LATCH_AND_CLEAR 0x8 #define APCI1710_ENABLE_LATCH_AND_CLEAR 0x8
#define APCI1710_DISABLE_LATCH_AND_CLEAR (~APCI1710_ENABLE_LATCH_AND_CLEAR) #define APCI1710_DISABLE_LATCH_AND_CLEAR (~APCI1710_ENABLE_LATCH_AND_CLEAR)
#define APCI1710_SET_LOW_INDEX_LEVEL 0x4 #define APCI1710_SET_LOW_INDEX_LEVEL 0x4
#define APCI1710_SET_HIGH_INDEX_LEVEL (~APCI1710_SET_LOW_INDEX_LEVEL) #define APCI1710_SET_HIGH_INDEX_LEVEL (~APCI1710_SET_LOW_INDEX_LEVEL)
#define APCI1710_INVERT_INDEX_RFERENCE 0x2 #define APCI1710_INVERT_INDEX_RFERENCE 0x2
#define APCI1710_DEFAULT_INDEX_RFERENCE (~APCI1710_INVERT_INDEX_RFERENCE) #define APCI1710_DEFAULT_INDEX_RFERENCE (~APCI1710_INVERT_INDEX_RFERENCE)
#define APCI1710_ENABLE_INDEX_INT 0x1 #define APCI1710_ENABLE_INDEX_INT 0x1
#define APCI1710_DISABLE_INDEX_INT (~APCI1710_ENABLE_INDEX_INT) #define APCI1710_DISABLE_INDEX_INT (~APCI1710_ENABLE_INDEX_INT)
#define APCI1710_ENABLE_FREQUENCY 0x4 #define APCI1710_ENABLE_FREQUENCY 0x4
#define APCI1710_DISABLE_FREQUENCY (~APCI1710_ENABLE_FREQUENCY) #define APCI1710_DISABLE_FREQUENCY (~APCI1710_ENABLE_FREQUENCY)
#define APCI1710_ENABLE_FREQUENCY_INT 0x8 #define APCI1710_ENABLE_FREQUENCY_INT 0x8
#define APCI1710_DISABLE_FREQUENCY_INT (~APCI1710_ENABLE_FREQUENCY_INT) #define APCI1710_DISABLE_FREQUENCY_INT (~APCI1710_ENABLE_FREQUENCY_INT)
#define APCI1710_ENABLE_40MHZ_FREQUENCY 0x40 #define APCI1710_ENABLE_40MHZ_FREQUENCY 0x40
#define APCI1710_DISABLE_40MHZ_FREQUENCY (~APCI1710_ENABLE_40MHZ_FREQUENCY) #define APCI1710_DISABLE_40MHZ_FREQUENCY (~APCI1710_ENABLE_40MHZ_FREQUENCY)
...@@ -83,187 +75,197 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc ...@@ -83,187 +75,197 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc
#define APCI1710_ENABLE_40MHZ_FILTER 0x80 #define APCI1710_ENABLE_40MHZ_FILTER 0x80
#define APCI1710_DISABLE_40MHZ_FILTER (~APCI1710_ENABLE_40MHZ_FILTER) #define APCI1710_DISABLE_40MHZ_FILTER (~APCI1710_ENABLE_40MHZ_FILTER)
#define APCI1710_ENABLE_COMPARE_INT 0x2 #define APCI1710_ENABLE_COMPARE_INT 0x2
#define APCI1710_DISABLE_COMPARE_INT (~APCI1710_ENABLE_COMPARE_INT) #define APCI1710_DISABLE_COMPARE_INT (~APCI1710_ENABLE_COMPARE_INT)
#define APCI1710_ENABLE_INDEX_ACTION 0x20 #define APCI1710_ENABLE_INDEX_ACTION 0x20
#define APCI1710_DISABLE_INDEX_ACTION (~APCI1710_ENABLE_INDEX_ACTION) #define APCI1710_DISABLE_INDEX_ACTION (~APCI1710_ENABLE_INDEX_ACTION)
#define APCI1710_REFERENCE_HIGH 0x40 #define APCI1710_REFERENCE_HIGH 0x40
#define APCI1710_REFERENCE_LOW (~APCI1710_REFERENCE_HIGH) #define APCI1710_REFERENCE_LOW (~APCI1710_REFERENCE_HIGH)
#define APCI1710_TOR_GATE_LOW 0x40 #define APCI1710_TOR_GATE_LOW 0x40
#define APCI1710_TOR_GATE_HIGH (~APCI1710_TOR_GATE_LOW) #define APCI1710_TOR_GATE_HIGH (~APCI1710_TOR_GATE_LOW)
// INSN CONFIG /* INSN CONFIG */
#define APCI1710_INCCPT_INITCOUNTER 100 #define APCI1710_INCCPT_INITCOUNTER 100
#define APCI1710_INCCPT_COUNTERAUTOTEST 101 #define APCI1710_INCCPT_COUNTERAUTOTEST 101
#define APCI1710_INCCPT_INITINDEX 102 #define APCI1710_INCCPT_INITINDEX 102
#define APCI1710_INCCPT_INITREFERENCE 103 #define APCI1710_INCCPT_INITREFERENCE 103
#define APCI1710_INCCPT_INITEXTERNALSTROBE 104 #define APCI1710_INCCPT_INITEXTERNALSTROBE 104
#define APCI1710_INCCPT_INITCOMPARELOGIC 105 #define APCI1710_INCCPT_INITCOMPARELOGIC 105
#define APCI1710_INCCPT_INITFREQUENCYMEASUREMENT 106 #define APCI1710_INCCPT_INITFREQUENCYMEASUREMENT 106
// INSN READ /* INSN READ */
#define APCI1710_INCCPT_READLATCHREGISTERSTATUS 200 #define APCI1710_INCCPT_READLATCHREGISTERSTATUS 200
#define APCI1710_INCCPT_READLATCHREGISTERVALUE 201 #define APCI1710_INCCPT_READLATCHREGISTERVALUE 201
#define APCI1710_INCCPT_READ16BITCOUNTERVALUE 202 #define APCI1710_INCCPT_READ16BITCOUNTERVALUE 202
#define APCI1710_INCCPT_READ32BITCOUNTERVALUE 203 #define APCI1710_INCCPT_READ32BITCOUNTERVALUE 203
#define APCI1710_INCCPT_GETINDEXSTATUS 204 #define APCI1710_INCCPT_GETINDEXSTATUS 204
#define APCI1710_INCCPT_GETREFERENCESTATUS 205 #define APCI1710_INCCPT_GETREFERENCESTATUS 205
#define APCI1710_INCCPT_GETUASSTATUS 206 #define APCI1710_INCCPT_GETUASSTATUS 206
#define APCI1710_INCCPT_GETCBSTATUS 207 #define APCI1710_INCCPT_GETCBSTATUS 207
#define APCI1710_INCCPT_GET16BITCBSTATUS 208 #define APCI1710_INCCPT_GET16BITCBSTATUS 208
#define APCI1710_INCCPT_GETUDSTATUS 209 #define APCI1710_INCCPT_GETUDSTATUS 209
#define APCI1710_INCCPT_GETINTERRUPTUDLATCHEDSTATUS 210 #define APCI1710_INCCPT_GETINTERRUPTUDLATCHEDSTATUS 210
#define APCI1710_INCCPT_READFREQUENCYMEASUREMENT 211 #define APCI1710_INCCPT_READFREQUENCYMEASUREMENT 211
#define APCI1710_INCCPT_READINTERRUPT 212 #define APCI1710_INCCPT_READINTERRUPT 212
//INSN BITS /* INSN BITS */
#define APCI1710_INCCPT_CLEARCOUNTERVALUE 300 #define APCI1710_INCCPT_CLEARCOUNTERVALUE 300
#define APCI1710_INCCPT_CLEARALLCOUNTERVALUE 301 #define APCI1710_INCCPT_CLEARALLCOUNTERVALUE 301
#define APCI1710_INCCPT_SETINPUTFILTER 302 #define APCI1710_INCCPT_SETINPUTFILTER 302
#define APCI1710_INCCPT_LATCHCOUNTER 303 #define APCI1710_INCCPT_LATCHCOUNTER 303
#define APCI1710_INCCPT_SETINDEXANDREFERENCESOURCE 304 #define APCI1710_INCCPT_SETINDEXANDREFERENCESOURCE 304
#define APCI1710_INCCPT_SETDIGITALCHLON 305 #define APCI1710_INCCPT_SETDIGITALCHLON 305
#define APCI1710_INCCPT_SETDIGITALCHLOFF 306 #define APCI1710_INCCPT_SETDIGITALCHLOFF 306
// INSN WRITE /* INSN WRITE */
#define APCI1710_INCCPT_ENABLELATCHINTERRUPT 400 #define APCI1710_INCCPT_ENABLELATCHINTERRUPT 400
#define APCI1710_INCCPT_DISABLELATCHINTERRUPT 401 #define APCI1710_INCCPT_DISABLELATCHINTERRUPT 401
#define APCI1710_INCCPT_WRITE16BITCOUNTERVALUE 402 #define APCI1710_INCCPT_WRITE16BITCOUNTERVALUE 402
#define APCI1710_INCCPT_WRITE32BITCOUNTERVALUE 403 #define APCI1710_INCCPT_WRITE32BITCOUNTERVALUE 403
#define APCI1710_INCCPT_ENABLEINDEX 404 #define APCI1710_INCCPT_ENABLEINDEX 404
#define APCI1710_INCCPT_DISABLEINDEX 405 #define APCI1710_INCCPT_DISABLEINDEX 405
#define APCI1710_INCCPT_ENABLECOMPARELOGIC 406 #define APCI1710_INCCPT_ENABLECOMPARELOGIC 406
#define APCI1710_INCCPT_DISABLECOMPARELOGIC 407 #define APCI1710_INCCPT_DISABLECOMPARELOGIC 407
#define APCI1710_INCCPT_ENABLEFREQUENCYMEASUREMENT 408 #define APCI1710_INCCPT_ENABLEFREQUENCYMEASUREMENT 408
#define APCI1710_INCCPT_DISABLEFREQUENCYMEASUREMENT 409 #define APCI1710_INCCPT_DISABLEFREQUENCYMEASUREMENT 409
/************ Main Functions *************/ /************ Main Functions *************/
INT i_APCI1710_InsnConfigINCCPT(comedi_device * dev, comedi_subdevice * s, INT i_APCI1710_InsnConfigINCCPT(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t * data);
INT i_APCI1710_InsnBitsINCCPT(comedi_device * dev, comedi_subdevice * s, INT i_APCI1710_InsnBitsINCCPT(comedi_device *dev, comedi_subdevice * s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t * data);
INT i_APCI1710_InsnWriteINCCPT(comedi_device * dev, comedi_subdevice * s, INT i_APCI1710_InsnWriteINCCPT(comedi_device *dev, comedi_subdevice * s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t * data);
INT i_APCI1710_InsnReadINCCPT(comedi_device * dev, comedi_subdevice * s, INT i_APCI1710_InsnReadINCCPT(comedi_device *dev, comedi_subdevice * s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t * data);
/*********** Supplementary Functions********/ /*********** Supplementary Functions********/
// INSN CONFIG /* INSN CONFIG */
INT i_APCI1710_InitCounter(comedi_device *dev,
INT i_APCI1710_InitCounter(comedi_device * dev, BYTE b_ModulNbr,
BYTE b_ModulNbr, BYTE b_CounterRange,
BYTE b_CounterRange, BYTE b_FirstCounterModus,
BYTE b_FirstCounterModus, BYTE b_FirstCounterOption,
BYTE b_FirstCounterOption, BYTE b_SecondCounterModus,
BYTE b_SecondCounterModus, BYTE b_SecondCounterOption); BYTE b_SecondCounterOption);
INT i_APCI1710_CounterAutoTest(comedi_device * dev, PBYTE pb_TestStatus);
INT i_APCI1710_InitIndex(comedi_device * dev,
BYTE b_ModulNbr,
BYTE b_ReferenceAction,
BYTE b_IndexOperation, BYTE b_AutoMode, BYTE b_InterruptEnable);
INT i_APCI1710_InitReference(comedi_device * dev, INT i_APCI1710_CounterAutoTest(comedi_device *dev, PBYTE pb_TestStatus);
BYTE b_ModulNbr, BYTE b_ReferenceLevel);
INT i_APCI1710_InitExternalStrobe(comedi_device * dev, INT i_APCI1710_InitIndex(comedi_device *dev,
BYTE b_ModulNbr, BYTE b_ExternalStrobe, BYTE b_ExternalStrobeLevel); BYTE b_ModulNbr,
BYTE b_ReferenceAction,
BYTE b_IndexOperation, BYTE b_AutoMode,
BYTE b_InterruptEnable);
INT i_APCI1710_InitCompareLogic(comedi_device * dev, INT i_APCI1710_InitReference(comedi_device *dev,
BYTE b_ModulNbr, UINT ui_CompareValue); BYTE b_ModulNbr, BYTE b_ReferenceLevel);
INT i_APCI1710_InitFrequencyMeasurement(comedi_device * dev, INT i_APCI1710_InitExternalStrobe(comedi_device *dev,
BYTE b_ModulNbr, BYTE b_ModulNbr, BYTE b_ExternalStrobe,
BYTE b_PCIInputClock, BYTE b_ExternalStrobeLevel);
BYTE b_TimingUnity,
ULONG ul_TimingInterval, PULONG pul_RealTimingInterval);
//INSN BITS INT i_APCI1710_InitCompareLogic(comedi_device *dev,
BYTE b_ModulNbr, UINT ui_CompareValue);
INT i_APCI1710_ClearCounterValue(comedi_device * dev, BYTE b_ModulNbr); INT i_APCI1710_InitFrequencyMeasurement(comedi_device *dev,
BYTE b_ModulNbr,
BYTE b_PCIInputClock,
BYTE b_TimingUnity,
ULONG ul_TimingInterval,
PULONG pul_RealTimingInterval);
INT i_APCI1710_ClearAllCounterValue(comedi_device * dev); /* INSN BITS */
INT i_APCI1710_ClearCounterValue(comedi_device *dev, BYTE b_ModulNbr);
INT i_APCI1710_SetInputFilter(comedi_device * dev, INT i_APCI1710_ClearAllCounterValue(comedi_device *dev);
BYTE b_ModulNbr, BYTE b_PCIInputClock, BYTE b_Filter);
INT i_APCI1710_LatchCounter(comedi_device * dev, INT i_APCI1710_SetInputFilter(comedi_device *dev,
BYTE b_ModulNbr, BYTE b_LatchReg); BYTE b_ModulNbr, BYTE b_PCIInputClock,
BYTE b_Filter);
INT i_APCI1710_SetIndexAndReferenceSource(comedi_device * dev, INT i_APCI1710_LatchCounter(comedi_device *dev,
BYTE b_ModulNbr, BYTE b_SourceSelection); BYTE b_ModulNbr, BYTE b_LatchReg);
INT i_APCI1710_SetDigitalChlOn(comedi_device * dev, BYTE b_ModulNbr); INT i_APCI1710_SetIndexAndReferenceSource(comedi_device *dev,
BYTE b_ModulNbr,
BYTE b_SourceSelection);
INT i_APCI1710_SetDigitalChlOff(comedi_device * dev, BYTE b_ModulNbr); INT i_APCI1710_SetDigitalChlOn(comedi_device *dev, BYTE b_ModulNbr);
// INSN WRITE INT i_APCI1710_SetDigitalChlOff(comedi_device *dev, BYTE b_ModulNbr);
INT i_APCI1710_EnableLatchInterrupt(comedi_device * dev, BYTE b_ModulNbr);
INT i_APCI1710_DisableLatchInterrupt(comedi_device * dev, BYTE b_ModulNbr); /* INSN WRITE */
INT i_APCI1710_EnableLatchInterrupt(comedi_device *dev, BYTE b_ModulNbr);
INT i_APCI1710_Write16BitCounterValue(comedi_device * dev, INT i_APCI1710_DisableLatchInterrupt(comedi_device *dev, BYTE b_ModulNbr);
BYTE b_ModulNbr, BYTE b_SelectedCounter, UINT ui_WriteValue);
INT i_APCI1710_Write32BitCounterValue(comedi_device * dev, INT i_APCI1710_Write16BitCounterValue(comedi_device *dev,
BYTE b_ModulNbr, ULONG ul_WriteValue); BYTE b_ModulNbr, BYTE b_SelectedCounter,
UINT ui_WriteValue);
INT i_APCI1710_EnableIndex(comedi_device * dev, BYTE b_ModulNbr); INT i_APCI1710_Write32BitCounterValue(comedi_device *dev,
BYTE b_ModulNbr, ULONG ul_WriteValue);
INT i_APCI1710_DisableIndex(comedi_device * dev, BYTE b_ModulNbr); INT i_APCI1710_EnableIndex(comedi_device *dev, BYTE b_ModulNbr);
INT i_APCI1710_EnableCompareLogic(comedi_device * dev, BYTE b_ModulNbr); INT i_APCI1710_DisableIndex(comedi_device *dev, BYTE b_ModulNbr);
INT i_APCI1710_DisableCompareLogic(comedi_device * dev, BYTE b_ModulNbr); INT i_APCI1710_EnableCompareLogic(comedi_device *dev, BYTE b_ModulNbr);
INT i_APCI1710_EnableFrequencyMeasurement(comedi_device * dev, INT i_APCI1710_DisableCompareLogic(comedi_device *dev, BYTE b_ModulNbr);
BYTE b_ModulNbr, BYTE b_InterruptEnable);
INT i_APCI1710_DisableFrequencyMeasurement(comedi_device * dev, INT i_APCI1710_EnableFrequencyMeasurement(comedi_device *dev,
BYTE b_ModulNbr); BYTE b_ModulNbr,
BYTE b_InterruptEnable);
// INSN READ INT i_APCI1710_DisableFrequencyMeasurement(comedi_device *dev,
BYTE b_ModulNbr);
INT i_APCI1710_ReadLatchRegisterStatus(comedi_device * dev, /* INSN READ */
BYTE b_ModulNbr, BYTE b_LatchReg, PBYTE pb_LatchStatus); INT i_APCI1710_ReadLatchRegisterStatus(comedi_device *dev,
BYTE b_ModulNbr, BYTE b_LatchReg,
PBYTE pb_LatchStatus);
INT i_APCI1710_ReadLatchRegisterValue(comedi_device * dev, INT i_APCI1710_ReadLatchRegisterValue(comedi_device *dev,
BYTE b_ModulNbr, BYTE b_LatchReg, PULONG pul_LatchValue); BYTE b_ModulNbr, BYTE b_LatchReg,
PULONG pul_LatchValue);
INT i_APCI1710_Read16BitCounterValue(comedi_device * dev, INT i_APCI1710_Read16BitCounterValue(comedi_device *dev,
BYTE b_ModulNbr, BYTE b_SelectedCounter, PUINT pui_CounterValue); BYTE b_ModulNbr, BYTE b_SelectedCounter,
PUINT pui_CounterValue);
INT i_APCI1710_Read32BitCounterValue(comedi_device * dev, INT i_APCI1710_Read32BitCounterValue(comedi_device *dev,
BYTE b_ModulNbr, PULONG pul_CounterValue); BYTE b_ModulNbr, PULONG pul_CounterValue);
INT i_APCI1710_GetIndexStatus(comedi_device * dev, INT i_APCI1710_GetIndexStatus(comedi_device *dev,
BYTE b_ModulNbr, PBYTE pb_IndexStatus); BYTE b_ModulNbr, PBYTE pb_IndexStatus);
INT i_APCI1710_GetReferenceStatus(comedi_device * dev, INT i_APCI1710_GetReferenceStatus(comedi_device *dev,
BYTE b_ModulNbr, PBYTE pb_ReferenceStatus); BYTE b_ModulNbr, PBYTE pb_ReferenceStatus);
INT i_APCI1710_GetUASStatus(comedi_device * dev, INT i_APCI1710_GetUASStatus(comedi_device *dev,
BYTE b_ModulNbr, PBYTE pb_UASStatus); BYTE b_ModulNbr, PBYTE pb_UASStatus);
INT i_APCI1710_GetCBStatus(comedi_device * dev, INT i_APCI1710_GetCBStatus(comedi_device *dev,
BYTE b_ModulNbr, PBYTE pb_CBStatus); BYTE b_ModulNbr, PBYTE pb_CBStatus);
INT i_APCI1710_Get16BitCBStatus(comedi_device * dev, INT i_APCI1710_Get16BitCBStatus(comedi_device *dev,
BYTE b_ModulNbr, PBYTE pb_CBStatusCounter0, PBYTE pb_CBStatusCounter1); BYTE b_ModulNbr, PBYTE pb_CBStatusCounter0,
PBYTE pb_CBStatusCounter1);
INT i_APCI1710_GetUDStatus(comedi_device * dev, INT i_APCI1710_GetUDStatus(comedi_device *dev,
BYTE b_ModulNbr, PBYTE pb_UDStatus); BYTE b_ModulNbr, PBYTE pb_UDStatus);
INT i_APCI1710_GetInterruptUDLatchedStatus(comedi_device * dev, INT i_APCI1710_GetInterruptUDLatchedStatus(comedi_device *dev,
BYTE b_ModulNbr, PBYTE pb_UDStatus); BYTE b_ModulNbr, PBYTE pb_UDStatus);
INT i_APCI1710_ReadFrequencyMeasurement(comedi_device * dev, INT i_APCI1710_ReadFrequencyMeasurement(comedi_device *dev,
BYTE b_ModulNbr, BYTE b_ModulNbr,
PBYTE pb_Status, PBYTE pb_UDStatus, PULONG pul_ReadValue); PBYTE pb_Status, PBYTE pb_UDStatus,
PULONG pul_ReadValue);
/**
@verbatim
Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
ADDI-DATA GmbH
Dieselstrasse 3
D-77833 Ottersweier
Tel: +19(0)7223/9493-0
Fax: +49(0)7223/9493-92
http://www.addi-data-com
info@addi-data.com
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
You shoud also find the complete GPL in the COPYING file accompanying this source code.
@endverbatim
*/
#define APCI1710_SINGLE 0
#define APCI1710_CONTINUOUS 1
#define APCI1710_PULSEENCODER_READ 0
#define APCI1710_PULSEENCODER_WRITE 1
INT i_APCI1710_InsnConfigInitPulseEncoder(comedi_device * dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data);
INT i_APCI1710_InsnWriteEnableDisablePulseEncoder(comedi_device * dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data);
/* /*
+----------------------------------------------------------------------------+ * Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
| READ PULSE ENCODER FUNCTIONS | *
+----------------------------------------------------------------------------+ * ADDI-DATA GmbH
*/ * Dieselstrasse 3
* D-77833 Ottersweier
INT i_APCI1710_InsnReadInterruptPulseEncoder(comedi_device * dev, * Tel: +19(0)7223/9493-0
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); * Fax: +49(0)7223/9493-92
* http://www.addi-data-com
* info@addi-data.com
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*/
#define APCI1710_SINGLE 0
#define APCI1710_CONTINUOUS 1
#define APCI1710_PULSEENCODER_READ 0
#define APCI1710_PULSEENCODER_WRITE 1
INT i_APCI1710_InsnConfigInitPulseEncoder(comedi_device *dev,
comedi_subdevice *s,
comedi_insn *insn, lsampl_t *data);
INT i_APCI1710_InsnWriteEnableDisablePulseEncoder(comedi_device *dev,
comedi_subdevice *s,
comedi_insn *insn,
lsampl_t *data);
/* /*
+----------------------------------------------------------------------------+ * READ PULSE ENCODER FUNCTIONS
| WRITE PULSE ENCODER FUNCTIONS | */
+----------------------------------------------------------------------------+ INT i_APCI1710_InsnReadInterruptPulseEncoder(comedi_device *dev,
*/ comedi_subdevice *s,
comedi_insn *insn,
lsampl_t *data);
INT i_APCI1710_InsnBitsReadWritePulseEncoder(comedi_device * dev, /*
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); * WRITE PULSE ENCODER FUNCTIONS
*/
INT i_APCI1710_InsnBitsReadWritePulseEncoder(comedi_device *dev,
comedi_subdevice *s,
comedi_insn *insn,
lsampl_t *data);
/** /*
@verbatim * Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
*
Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module. * ADDI-DATA GmbH
* Dieselstrasse 3
ADDI-DATA GmbH * D-77833 Ottersweier
Dieselstrasse 3 * Tel: +19(0)7223/9493-0
D-77833 Ottersweier * Fax: +49(0)7223/9493-92
Tel: +19(0)7223/9493-0 * http://www.addi-data-com
Fax: +49(0)7223/9493-92 * info@addi-data.com
http://www.addi-data-com *
info@addi-data.com * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. * Software Foundation; either version 2 of the License, or (at your option)
* any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #define APCI1710_30MHZ 30
#define APCI1710_33MHZ 33
You shoud also find the complete GPL in the COPYING file accompanying this source code. #define APCI1710_40MHZ 40
@endverbatim #define APCI1710_PWM_INIT 0
*/
#define APCI1710_30MHZ 30
#define APCI1710_33MHZ 33
#define APCI1710_40MHZ 40
#define APCI1710_PWM_INIT 0
#define APCI1710_PWM_GETINITDATA 1 #define APCI1710_PWM_GETINITDATA 1
#define APCI1710_PWM_DISABLE 0 #define APCI1710_PWM_DISABLE 0
#define APCI1710_PWM_ENABLE 1 #define APCI1710_PWM_ENABLE 1
#define APCI1710_PWM_NEWTIMING 2 #define APCI1710_PWM_NEWTIMING 2
INT i_APCI1710_InsnConfigPWM(comedi_device * dev, comedi_subdevice * s, INT i_APCI1710_InsnConfigPWM(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
INT i_APCI1710_InitPWM(comedi_device * dev, INT i_APCI1710_InitPWM(comedi_device *dev,
BYTE b_ModulNbr, BYTE b_ModulNbr,
BYTE b_PWM, BYTE b_PWM,
BYTE b_ClockSelection, BYTE b_ClockSelection,
BYTE b_TimingUnit, BYTE b_TimingUnit,
ULONG ul_LowTiming, ULONG ul_LowTiming,
ULONG ul_HighTiming, ULONG ul_HighTiming,
PULONG pul_RealLowTiming, PULONG pul_RealHighTiming); PULONG pul_RealLowTiming, PULONG pul_RealHighTiming);
INT i_APCI1710_GetPWMInitialisation(comedi_device * dev, INT i_APCI1710_GetPWMInitialisation(comedi_device *dev,
BYTE b_ModulNbr, BYTE b_ModulNbr,
BYTE b_PWM, BYTE b_PWM,
PBYTE pb_TimingUnit, PBYTE pb_TimingUnit,
PULONG pul_LowTiming, PULONG pul_LowTiming,
PULONG pul_HighTiming, PULONG pul_HighTiming,
PBYTE pb_StartLevel, PBYTE pb_StartLevel,
PBYTE pb_StopMode, PBYTE pb_StopMode,
PBYTE pb_StopLevel, PBYTE pb_StopLevel,
PBYTE pb_ExternGate, PBYTE pb_InterruptEnable, PBYTE pb_Enable); PBYTE pb_ExternGate,
PBYTE pb_InterruptEnable, PBYTE pb_Enable);
INT i_APCI1710_InsnWritePWM(comedi_device * dev, comedi_subdevice * s,
comedi_insn * insn, lsampl_t * data); INT i_APCI1710_InsnWritePWM(comedi_device *dev, comedi_subdevice *s,
comedi_insn *insn, lsampl_t *data);
INT i_APCI1710_EnablePWM(comedi_device * dev,
BYTE b_ModulNbr, INT i_APCI1710_EnablePWM(comedi_device *dev,
BYTE b_PWM, BYTE b_ModulNbr,
BYTE b_StartLevel, BYTE b_PWM,
BYTE b_StopMode, BYTE b_StartLevel,
BYTE b_StopLevel, BYTE b_ExternGate, BYTE b_InterruptEnable); BYTE b_StopMode,
BYTE b_StopLevel, BYTE b_ExternGate,
INT i_APCI1710_SetNewPWMTiming(comedi_device * dev, BYTE b_InterruptEnable);
BYTE b_ModulNbr,
BYTE b_PWM, BYTE b_TimingUnit, ULONG ul_LowTiming, ULONG ul_HighTiming); INT i_APCI1710_SetNewPWMTiming(comedi_device *dev,
BYTE b_ModulNbr,
INT i_APCI1710_DisablePWM(comedi_device * dev, BYTE b_ModulNbr, BYTE b_PWM); BYTE b_PWM, BYTE b_TimingUnit,
ULONG ul_LowTiming, ULONG ul_HighTiming);
INT i_APCI1710_InsnReadGetPWMStatus(comedi_device * dev, comedi_subdevice * s,
comedi_insn * insn, lsampl_t * data); INT i_APCI1710_DisablePWM(comedi_device *dev, BYTE b_ModulNbr, BYTE b_PWM);
INT i_APCI1710_InsnBitsReadPWMInterrupt(comedi_device * dev, INT i_APCI1710_InsnReadGetPWMStatus(comedi_device *dev, comedi_subdevice *s,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
INT i_APCI1710_InsnBitsReadPWMInterrupt(comedi_device *dev,
comedi_subdevice *s,
comedi_insn *insn, lsampl_t *data);
/** /*
@verbatim * Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
*
Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module. * ADDI-DATA GmbH
* Dieselstrasse 3
ADDI-DATA GmbH * D-77833 Ottersweier
Dieselstrasse 3 * Tel: +19(0)7223/9493-0
D-77833 Ottersweier * Fax: +49(0)7223/9493-92
Tel: +19(0)7223/9493-0 * http://www.addi-data-com
Fax: +49(0)7223/9493-92 * info@addi-data.com
http://www.addi-data-com *
info@addi-data.com * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. * Software Foundation; either version 2 of the License, or (at your option)
* any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #define APCI1710_30MHZ 30
#define APCI1710_33MHZ 33
You shoud also find the complete GPL in the COPYING file accompanying this source code. #define APCI1710_40MHZ 40
@endverbatim #define APCI1710_BINARY_MODE 0x1
*/ #define APCI1710_GRAY_MODE 0x0
#define APCI1710_30MHZ 30 #define APCI1710_SSI_READ1VALUE 1
#define APCI1710_33MHZ 33 #define APCI1710_SSI_READALLVALUE 2
#define APCI1710_40MHZ 40
#define APCI1710_SSI_SET_CHANNELON 0
#define APCI1710_BINARY_MODE 0x1 #define APCI1710_SSI_SET_CHANNELOFF 1
#define APCI1710_GRAY_MODE 0x0 #define APCI1710_SSI_READ_1CHANNEL 2
#define APCI1710_SSI_READ_ALLCHANNEL 3
#define APCI1710_SSI_READ1VALUE 1
#define APCI1710_SSI_READALLVALUE 2
#define APCI1710_SSI_SET_CHANNELON 0
#define APCI1710_SSI_SET_CHANNELOFF 1
#define APCI1710_SSI_READ_1CHANNEL 2
#define APCI1710_SSI_READ_ALLCHANNEL 3
/* /*
+----------------------------------------------------------------------------+ * SSI INISIALISATION FUNCTION
| SSI INISIALISATION FUNCTION | */
+----------------------------------------------------------------------------+ INT i_APCI1710_InsnConfigInitSSI(comedi_device *dev, comedi_subdevice *s,
*/ comedi_insn *insn, lsampl_t *data);
INT i_APCI1710_InsnConfigInitSSI(comedi_device * dev, comedi_subdevice * s,
comedi_insn * insn, lsampl_t * data);
INT i_APCI1710_InsnReadSSIValue(comedi_device * dev, comedi_subdevice * s, INT i_APCI1710_InsnReadSSIValue(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
INT i_APCI1710_InsnBitsSSIDigitalIO(comedi_device * dev, comedi_subdevice * s, INT i_APCI1710_InsnBitsSSIDigitalIO(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
/** /*
@verbatim * Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
*
Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module. * ADDI-DATA GmbH
* Dieselstrasse 3
ADDI-DATA GmbH * D-77833 Ottersweier
Dieselstrasse 3 * Tel: +19(0)7223/9493-0
D-77833 Ottersweier * Fax: +49(0)7223/9493-92
Tel: +19(0)7223/9493-0 * http://www.addi-data-com
Fax: +49(0)7223/9493-92 * info@addi-data.com
http://www.addi-data-com *
info@addi-data.com * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. * Software Foundation; either version 2 of the License, or (at your option)
* any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #define APCI1710_30MHZ 30
#define APCI1710_33MHZ 33
You shoud also find the complete GPL in the COPYING file accompanying this source code. #define APCI1710_40MHZ 40
@endverbatim #define APCI1710_GATE_INPUT 10
*/
#define APCI1710_TOR_SIMPLE_MODE 2
#define APCI1710_30MHZ 30 #define APCI1710_TOR_DOUBLE_MODE 3
#define APCI1710_33MHZ 33 #define APCI1710_TOR_QUADRUPLE_MODE 4
#define APCI1710_40MHZ 40
#define APCI1710_SINGLE 0
#define APCI1710_GATE_INPUT 10 #define APCI1710_CONTINUOUS 1
#define APCI1710_TOR_SIMPLE_MODE 2
#define APCI1710_TOR_DOUBLE_MODE 3
#define APCI1710_TOR_QUADRUPLE_MODE 4
#define APCI1710_SINGLE 0
#define APCI1710_CONTINUOUS 1
#define APCI1710_TOR_GETPROGRESSSTATUS 0 #define APCI1710_TOR_GETPROGRESSSTATUS 0
#define APCI1710_TOR_GETCOUNTERVALUE 1 #define APCI1710_TOR_GETCOUNTERVALUE 1
#define APCI1710_TOR_READINTERRUPT 2 #define APCI1710_TOR_READINTERRUPT 2
/* /*
+----------------------------------------------------------------------------+ * TOR_COUNTER INISIALISATION FUNCTION
| TOR_COUNTER INISIALISATION FUNCTION | */
+----------------------------------------------------------------------------+ INT i_APCI1710_InsnConfigInitTorCounter(comedi_device *dev,
*/ comedi_subdevice *s,
comedi_insn *insn, lsampl_t *data);
INT i_APCI1710_InsnConfigInitTorCounter(comedi_device * dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); INT i_APCI1710_InsnWriteEnableDisableTorCounter(comedi_device *dev,
comedi_subdevice *s,
INT i_APCI1710_InsnWriteEnableDisableTorCounter(comedi_device * dev, comedi_insn *insn,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); lsampl_t *data);
INT i_APCI1710_InsnReadGetTorCounterInitialisation(comedi_device * dev, INT i_APCI1710_InsnReadGetTorCounterInitialisation(comedi_device *dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_subdevice *s,
comedi_insn *insn,
lsampl_t *data);
/* /*
+----------------------------------------------------------------------------+ * TOR_COUNTER READ FUNCTION
| TOR_COUNTER READ FUNCTION | */
+----------------------------------------------------------------------------+ INT i_APCI1710_InsnBitsGetTorCounterProgressStatusAndValue(comedi_device *dev,
*/ comedi_subdevice *s,
comedi_insn *insn,
INT i_APCI1710_InsnBitsGetTorCounterProgressStatusAndValue(comedi_device * dev, lsampl_t *data);
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data);
/** /*
@verbatim * Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
*
Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module. * ADDI-DATA GmbH
* Dieselstrasse 3
ADDI-DATA GmbH * D-77833 Ottersweier
Dieselstrasse 3 * Tel: +19(0)7223/9493-0
D-77833 Ottersweier * Fax: +49(0)7223/9493-92
Tel: +19(0)7223/9493-0 * http://www.addi-data-com
Fax: +49(0)7223/9493-92 * info@addi-data.com
http://www.addi-data-com *
info@addi-data.com * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. * Software Foundation; either version 2 of the License, or (at your option)
* any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #define APCI1710_TTL_INIT 0
#define APCI1710_TTL_INITDIRECTION 1
You shoud also find the complete GPL in the COPYING file accompanying this source code.
@endverbatim
*/
#define APCI1710_TTL_INIT 0
#define APCI1710_TTL_INITDIRECTION 1
#define APCI1710_TTL_READCHANNEL 0 #define APCI1710_TTL_READCHANNEL 0
#define APCI1710_TTL_READPORT 1 #define APCI1710_TTL_READPORT 1
/* /*
+----------------------------------------------------------------------------+ * TTL INISIALISATION FUNCTION
| TTL INISIALISATION FUNCTION | */
+----------------------------------------------------------------------------+ INT i_APCI1710_InsnConfigInitTTLIO(comedi_device *dev, comedi_subdevice *s,
*/ comedi_insn *insn, lsampl_t *data);
INT i_APCI1710_InsnConfigInitTTLIO(comedi_device * dev, comedi_subdevice * s,
comedi_insn * insn, lsampl_t * data);
/* /*
+----------------------------------------------------------------------------+ * TTL INPUT FUNCTION
| TTL INPUT FUNCTION | */
+----------------------------------------------------------------------------+ INT i_APCI1710_InsnBitsReadTTLIO(comedi_device *dev, comedi_subdevice *s,
*/ comedi_insn *insn, lsampl_t *data);
INT i_APCI1710_InsnReadTTLIOAllPortValue(comedi_device *dev,
comedi_subdevice *s,
comedi_insn *insn, lsampl_t *data);
INT i_APCI1710_InsnBitsReadTTLIO(comedi_device * dev, comedi_subdevice * s,
comedi_insn * insn, lsampl_t * data);
INT i_APCI1710_InsnReadTTLIOAllPortValue(comedi_device * dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data);
/* /*
+----------------------------------------------------------------------------+ * TTL OUTPUT FUNCTIONS
| TTL OUTPUT FUNCTIONS | */
+----------------------------------------------------------------------------+ INT i_APCI1710_InsnWriteSetTTLIOChlOnOff(comedi_device *dev,
*/ comedi_subdevice *s,
comedi_insn *insn, lsampl_t *data);
INT i_APCI1710_InsnWriteSetTTLIOChlOnOff(comedi_device * dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data);
/**
@verbatim
Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
ADDI-DATA GmbH
Dieselstrasse 3
D-77833 Ottersweier
Tel: +19(0)7223/9493-0
Fax: +49(0)7223/9493-92
http://www.addi-data-com
info@addi-data.com
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
You shoud also find the complete GPL in the COPYING file accompanying this source code.
@endverbatim
*/
/* /*
#define VOID void * Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
#define INT int *
#define UINT unsigned int * ADDI-DATA GmbH
#define SHORT short * Dieselstrasse 3
#define USHORT unsigned short * D-77833 Ottersweier
#define CHAR char * Tel: +19(0)7223/9493-0
#define BYTE unsigned char * Fax: +49(0)7223/9493-92
#define WORD unsigned int * http://www.addi-data-com
#define LONG long * info@addi-data.com
#define ULONG unsigned long *
#define DWORD unsigned long * This program is free software; you can redistribute it and/or modify it
#define DOUBLE double * under the terms of the GNU General Public License as published by the Free
#define PINT int * * Software Foundation; either version 2 of the License, or (at your option)
#define PUINT unsigned int * * any later version.
#define PSHORT short * */
#define PUSHORT unsigned short *
#define PCHAR char * #define AMCC_OP_REG_MCSR 0x3c
#define PBYTE unsigned char * #define EEPROM_BUSY 0x80000000
#define PWORD unsigned int * #define NVCMD_LOAD_LOW (0x4 << 5) /* nvRam load low command */
#define PLONG long * #define NVCMD_LOAD_HIGH (0x5 << 5) /* nvRam load high command */
#define PULONG unsigned long * #define NVCMD_BEGIN_READ (0x7 << 5) /* nvRam begin read command */
#define PDWORD unsigned long * #define NVCMD_BEGIN_WRITE (0x6 << 5) /* EEPROM begin write command */
#define PDOUBLE double *
*/
#define AMCC_OP_REG_MCSR 0x3c
#define EEPROM_BUSY 0x80000000
#define NVCMD_LOAD_LOW (0x4 << 5 ) // nvRam load low command
#define NVCMD_LOAD_HIGH (0x5 << 5 ) // nvRam load high command
#define NVCMD_BEGIN_READ (0x7 << 5 ) // nvRam begin read command
#define NVCMD_BEGIN_WRITE (0x6 << 5) //EEPROM begin write command
INT i_AddiHeaderRW_ReadEeprom(INT i_NbOfWordsToRead, INT i_AddiHeaderRW_ReadEeprom(INT i_NbOfWordsToRead,
DWORD dw_PCIBoardEepromAddress, DWORD dw_PCIBoardEepromAddress,
WORD w_EepromStartAddress, PWORD pw_DataRead); WORD w_EepromStartAddress, PWORD pw_DataRead);
/**
@verbatim
Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
ADDI-DATA GmbH
Dieselstrasse 3
D-77833 Ottersweier
Tel: +19(0)7223/9493-0
Fax: +49(0)7223/9493-92
http://www.addi-data-com
info@addi-data.com
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
You shoud also find the complete GPL in the COPYING file accompanying this source code.
@endverbatim
*/
/* /*
* Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
+-----------------------------------------------------------------------+ *
| (C) ADDI-DATA GmbH Dieselstrasse 3 D-77833 Ottersweier | * ADDI-DATA GmbH
+-----------------------------------------------------------------------+ * Dieselstrasse 3
| Tel : +49 (0) 7223/9493-0 | email : info@addi-data.com | * D-77833 Ottersweier
| Fax : +49 (0) 7223/9493-92 | Internet : http://www.addi-data.com | * Tel: +19(0)7223/9493-0
+-----------------------------------------------------------------------+ * Fax: +49(0)7223/9493-92
| Project : ADDI DATA | Compiler : GCC | * http://www.addi-data-com
| Modulname : addi_amcc_s5933.h | Version : 2.96 Redhat Linux | * info@addi-data.com
| | kernel-2.4.2 | *
+-------------------------------+---------------------------------------+ * This program is free software; you can redistribute it and/or modify it
| Author : | Date : | * under the terms of the GNU General Public License as published by the Free
+-----------------------------------------------------------------------+ * Software Foundation; either version 2 of the License, or (at your option)
| Description :|Header file for AMCC s 5933 | * any later version.
+-----------------------------------------------------------------------+ */
| UPDATE'S |
+-----------------------------------------------------------------------+ /* Header file for AMCC s 5933 */
| Date | Author | Description of updates |
+----------+-----------+------------------------------------------------+
| | | |
| | | |
| | | |
| | | |
| | | |
+----------+-----------+------------------------------------------------+
| | | |
| | | |
| | | |
+----------+-----------+------------------------------------------------+
*/
#ifndef _AMCC_S5933_H_ #ifndef _AMCC_S5933_H_
#define _AMCC_S5933_H_ #define _AMCC_S5933_H_
...@@ -64,100 +28,106 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc ...@@ -64,100 +28,106 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc
#error No support for 2.1.55 and older #error No support for 2.1.55 and older
#endif #endif
#define FIFO_ADVANCE_ON_BYTE_2 0x20000000 // written on base0 /* written on base0 */
#define FIFO_ADVANCE_ON_BYTE_2 0x20000000
#define AMWEN_ENABLE 0x02 // added for step 6 dma written on base2
#define A2P_FIFO_WRITE_ENABLE 0x01
#define AGCSTS_TC_ENABLE 0x10000000 // for transfer count enable bit
// ADDON RELATED ADDITIONS
// Constant
#define APCI3120_ENABLE_TRANSFER_ADD_ON_LOW 0x00
#define APCI3120_ENABLE_TRANSFER_ADD_ON_HIGH 0x1200
#define APCI3120_A2P_FIFO_MANAGEMENT 0x04000400L
#define APCI3120_AMWEN_ENABLE 0x02
#define APCI3120_A2P_FIFO_WRITE_ENABLE 0x01
#define APCI3120_FIFO_ADVANCE_ON_BYTE_2 0x20000000L
#define APCI3120_ENABLE_WRITE_TC_INT 0x00004000L
#define APCI3120_CLEAR_WRITE_TC_INT 0x00040000L
#define APCI3120_DISABLE_AMWEN_AND_A2P_FIFO_WRITE 0x0
#define APCI3120_DISABLE_BUS_MASTER_ADD_ON 0x0
#define APCI3120_DISABLE_BUS_MASTER_PCI 0x0
// ADD_ON ::: this needed since apci supports 16 bit interface to add on
#define APCI3120_ADD_ON_AGCSTS_LOW 0x3C
#define APCI3120_ADD_ON_AGCSTS_HIGH APCI3120_ADD_ON_AGCSTS_LOW + 2
#define APCI3120_ADD_ON_MWAR_LOW 0x24
#define APCI3120_ADD_ON_MWAR_HIGH APCI3120_ADD_ON_MWAR_LOW + 2
#define APCI3120_ADD_ON_MWTC_LOW 0x058
#define APCI3120_ADD_ON_MWTC_HIGH APCI3120_ADD_ON_MWTC_LOW + 2
// AMCC
#define APCI3120_AMCC_OP_MCSR 0x3C
#define APCI3120_AMCC_OP_REG_INTCSR 0x38
/****************************************************************************/ /* added for step 6 dma written on base2 */
/* AMCC Operation Register Offsets - PCI */ #define AMWEN_ENABLE 0x02
/****************************************************************************/
#define AMCC_OP_REG_OMB1 0x00 #define A2P_FIFO_WRITE_ENABLE 0x01
#define AMCC_OP_REG_OMB2 0x04
#define AMCC_OP_REG_OMB3 0x08
#define AMCC_OP_REG_OMB4 0x0c
#define AMCC_OP_REG_IMB1 0x10
#define AMCC_OP_REG_IMB2 0x14
#define AMCC_OP_REG_IMB3 0x18
#define AMCC_OP_REG_IMB4 0x1c
#define AMCC_OP_REG_FIFO 0x20
#define AMCC_OP_REG_MWAR 0x24
#define AMCC_OP_REG_MWTC 0x28
#define AMCC_OP_REG_MRAR 0x2c
#define AMCC_OP_REG_MRTC 0x30
#define AMCC_OP_REG_MBEF 0x34
#define AMCC_OP_REG_INTCSR 0x38
#define AMCC_OP_REG_INTCSR_SRC (AMCC_OP_REG_INTCSR + 2) /* INT source */
#define AMCC_OP_REG_INTCSR_FEC (AMCC_OP_REG_INTCSR + 3) /* FIFO ctrl */
#define AMCC_OP_REG_MCSR 0x3c
#define AMCC_OP_REG_MCSR_NVDATA (AMCC_OP_REG_MCSR + 2) /* Data in byte 2 */
#define AMCC_OP_REG_MCSR_NVCMD (AMCC_OP_REG_MCSR + 3) /* Command in byte 3 */
#define AMCC_FIFO_DEPTH_DWORD 8 /* for transfer count enable bit */
#define AMCC_FIFO_DEPTH_BYTES (8 * sizeof (u32)) #define AGCSTS_TC_ENABLE 0x10000000
/****************************************************************************/ /*
/* AMCC Operation Registers Size - PCI */ * ADDON RELATED ADDITIONS
/****************************************************************************/ */
/* Constant */
#define APCI3120_ENABLE_TRANSFER_ADD_ON_LOW 0x00
#define APCI3120_ENABLE_TRANSFER_ADD_ON_HIGH 0x1200
#define APCI3120_A2P_FIFO_MANAGEMENT 0x04000400L
#define APCI3120_AMWEN_ENABLE 0x02
#define APCI3120_A2P_FIFO_WRITE_ENABLE 0x01
#define APCI3120_FIFO_ADVANCE_ON_BYTE_2 0x20000000L
#define APCI3120_ENABLE_WRITE_TC_INT 0x00004000L
#define APCI3120_CLEAR_WRITE_TC_INT 0x00040000L
#define APCI3120_DISABLE_AMWEN_AND_A2P_FIFO_WRITE 0x0
#define APCI3120_DISABLE_BUS_MASTER_ADD_ON 0x0
#define APCI3120_DISABLE_BUS_MASTER_PCI 0x0
/* ADD_ON ::: this needed since apci supports 16 bit interface to add on */
#define APCI3120_ADD_ON_AGCSTS_LOW 0x3C
#define APCI3120_ADD_ON_AGCSTS_HIGH (APCI3120_ADD_ON_AGCSTS_LOW + 2)
#define APCI3120_ADD_ON_MWAR_LOW 0x24
#define APCI3120_ADD_ON_MWAR_HIGH (APCI3120_ADD_ON_MWAR_LOW + 2)
#define APCI3120_ADD_ON_MWTC_LOW 0x058
#define APCI3120_ADD_ON_MWTC_HIGH (APCI3120_ADD_ON_MWTC_LOW + 2)
/* AMCC */
#define APCI3120_AMCC_OP_MCSR 0x3C
#define APCI3120_AMCC_OP_REG_INTCSR 0x38
#define AMCC_OP_REG_SIZE 64 /* in bytes */ /*
* AMCC Operation Register Offsets - PCI
*/
#define AMCC_OP_REG_OMB1 0x00
#define AMCC_OP_REG_OMB2 0x04
#define AMCC_OP_REG_OMB3 0x08
#define AMCC_OP_REG_OMB4 0x0c
#define AMCC_OP_REG_IMB1 0x10
#define AMCC_OP_REG_IMB2 0x14
#define AMCC_OP_REG_IMB3 0x18
#define AMCC_OP_REG_IMB4 0x1c
#define AMCC_OP_REG_FIFO 0x20
#define AMCC_OP_REG_MWAR 0x24
#define AMCC_OP_REG_MWTC 0x28
#define AMCC_OP_REG_MRAR 0x2c
#define AMCC_OP_REG_MRTC 0x30
#define AMCC_OP_REG_MBEF 0x34
#define AMCC_OP_REG_INTCSR 0x38
/* INT source */
#define AMCC_OP_REG_INTCSR_SRC (AMCC_OP_REG_INTCSR + 2)
/* FIFO ctrl */
#define AMCC_OP_REG_INTCSR_FEC (AMCC_OP_REG_INTCSR + 3)
#define AMCC_OP_REG_MCSR 0x3c
/* Data in byte 2 */
#define AMCC_OP_REG_MCSR_NVDATA (AMCC_OP_REG_MCSR + 2)
/* Command in byte 3 */
#define AMCC_OP_REG_MCSR_NVCMD (AMCC_OP_REG_MCSR + 3)
/****************************************************************************/ #define AMCC_FIFO_DEPTH_DWORD 8
/* AMCC Operation Register Offsets - Add-on */ #define AMCC_FIFO_DEPTH_BYTES (8 * sizeof(u32))
/****************************************************************************/
#define AMCC_OP_REG_AIMB1 0x00 /*
#define AMCC_OP_REG_AIMB2 0x04 * AMCC Operation Registers Size - PCI
#define AMCC_OP_REG_AIMB3 0x08 */
#define AMCC_OP_REG_AIMB4 0x0c #define AMCC_OP_REG_SIZE 64 /* in bytes */
#define AMCC_OP_REG_AOMB1 0x10
#define AMCC_OP_REG_AOMB2 0x14
#define AMCC_OP_REG_AOMB3 0x18
#define AMCC_OP_REG_AOMB4 0x1c
#define AMCC_OP_REG_AFIFO 0x20
#define AMCC_OP_REG_AMWAR 0x24
#define AMCC_OP_REG_APTA 0x28
#define AMCC_OP_REG_APTD 0x2c
#define AMCC_OP_REG_AMRAR 0x30
#define AMCC_OP_REG_AMBEF 0x34
#define AMCC_OP_REG_AINT 0x38
#define AMCC_OP_REG_AGCSTS 0x3c
#define AMCC_OP_REG_AMWTC 0x58
#define AMCC_OP_REG_AMRTC 0x5c
/****************************************************************************/ /*
/* AMCC - Add-on General Control/Status Register */ * AMCC Operation Register Offsets - Add-on
/****************************************************************************/ */
#define AMCC_OP_REG_AIMB1 0x00
#define AMCC_OP_REG_AIMB2 0x04
#define AMCC_OP_REG_AIMB3 0x08
#define AMCC_OP_REG_AIMB4 0x0c
#define AMCC_OP_REG_AOMB1 0x10
#define AMCC_OP_REG_AOMB2 0x14
#define AMCC_OP_REG_AOMB3 0x18
#define AMCC_OP_REG_AOMB4 0x1c
#define AMCC_OP_REG_AFIFO 0x20
#define AMCC_OP_REG_AMWAR 0x24
#define AMCC_OP_REG_APTA 0x28
#define AMCC_OP_REG_APTD 0x2c
#define AMCC_OP_REG_AMRAR 0x30
#define AMCC_OP_REG_AMBEF 0x34
#define AMCC_OP_REG_AINT 0x38
#define AMCC_OP_REG_AGCSTS 0x3c
#define AMCC_OP_REG_AMWTC 0x58
#define AMCC_OP_REG_AMRTC 0x5c
/*
* AMCC - Add-on General Control/Status Register
*/
#define AGCSTS_CONTROL_MASK 0xfffff000 #define AGCSTS_CONTROL_MASK 0xfffff000
#define AGCSTS_NV_ACC_MASK 0xe0000000 #define AGCSTS_NV_ACC_MASK 0xe0000000
#define AGCSTS_RESET_MASK 0x0e000000 #define AGCSTS_RESET_MASK 0x0e000000
...@@ -183,10 +153,9 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc ...@@ -183,10 +153,9 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc
#define AGCSTS_FS_A2P_HALF 0x00000002 #define AGCSTS_FS_A2P_HALF 0x00000002
#define AGCSTS_FS_A2P_FULL 0x00000001 #define AGCSTS_FS_A2P_FULL 0x00000001
/****************************************************************************/ /*
/* AMCC - Add-on Interrupt Control/Status Register */ * AMCC - Add-on Interrupt Control/Status Register
/****************************************************************************/ */
#define AINT_INT_MASK 0x00ff0000 #define AINT_INT_MASK 0x00ff0000
#define AINT_SEL_MASK 0x0000ffff #define AINT_SEL_MASK 0x0000ffff
#define AINT_IS_ENSEL_MASK 0x00001f1f #define AINT_IS_ENSEL_MASK 0x00001f1f
...@@ -242,7 +211,8 @@ struct pcilst_struct { ...@@ -242,7 +211,8 @@ struct pcilst_struct {
unsigned int irq; unsigned int irq;
}; };
struct pcilst_struct *amcc_devices; // ptr to root list of all amcc devices /* ptr to root list of all amcc devices */
struct pcilst_struct *amcc_devices;
static const int i_ADDIDATADeviceID[] = { 0x15B8, 0x10E8 }; static const int i_ADDIDATADeviceID[] = { 0x15B8, 0x10E8 };
...@@ -251,20 +221,26 @@ static const int i_ADDIDATADeviceID[] = { 0x15B8, 0x10E8 }; ...@@ -251,20 +221,26 @@ static const int i_ADDIDATADeviceID[] = { 0x15B8, 0x10E8 };
void v_pci_card_list_init(unsigned short pci_vendor, char display); void v_pci_card_list_init(unsigned short pci_vendor, char display);
void v_pci_card_list_cleanup(unsigned short pci_vendor); void v_pci_card_list_cleanup(unsigned short pci_vendor);
struct pcilst_struct *ptr_find_free_pci_card_by_device(unsigned short vendor_id, struct pcilst_struct *ptr_find_free_pci_card_by_device(unsigned short vendor_id,
unsigned short device_id); unsigned short
device_id);
int i_find_free_pci_card_by_position(unsigned short vendor_id, int i_find_free_pci_card_by_position(unsigned short vendor_id,
unsigned short device_id, unsigned short pci_bus, unsigned short device_id,
unsigned short pci_slot, struct pcilst_struct **card); unsigned short pci_bus,
unsigned short pci_slot,
struct pcilst_struct **card);
struct pcilst_struct *ptr_select_and_alloc_pci_card(unsigned short vendor_id, struct pcilst_struct *ptr_select_and_alloc_pci_card(unsigned short vendor_id,
unsigned short device_id, unsigned short pci_bus, unsigned short device_id,
unsigned short pci_slot, int i_Master); unsigned short pci_bus,
unsigned short pci_slot,
int i_Master);
int pci_card_alloc(struct pcilst_struct *amcc, int master); int pci_card_alloc(struct pcilst_struct *amcc, int master);
int i_pci_card_free(struct pcilst_struct *amcc); int i_pci_card_free(struct pcilst_struct *amcc);
void v_pci_card_list_display(void); void v_pci_card_list_display(void);
int i_pci_card_data(struct pcilst_struct *amcc, int i_pci_card_data(struct pcilst_struct *amcc,
unsigned char *pci_bus, unsigned char *pci_slot, unsigned char *pci_bus, unsigned char *pci_slot,
unsigned char *pci_func, resource_size_t * io_addr, unsigned int *irq); unsigned char *pci_func, resource_size_t * io_addr,
unsigned int *irq);
/****************************************************************************/ /****************************************************************************/
...@@ -279,8 +255,8 @@ void v_pci_card_list_init(unsigned short pci_vendor, char display) ...@@ -279,8 +255,8 @@ void v_pci_card_list_init(unsigned short pci_vendor, char display)
last = NULL; last = NULL;
for (pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL); for (pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL);
pcidev != NULL; pcidev != NULL;
pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pcidev)) { pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pcidev)) {
for (i_Count = 0; i_Count < 2; i_Count++) { for (i_Count = 0; i_Count < 2; i_Count++) {
pci_vendor = i_ADDIDATADeviceID[i_Count]; pci_vendor = i_ADDIDATADeviceID[i_Count];
if (pcidev->vendor == pci_vendor) { if (pcidev->vendor == pci_vendor) {
...@@ -288,11 +264,10 @@ void v_pci_card_list_init(unsigned short pci_vendor, char display) ...@@ -288,11 +264,10 @@ void v_pci_card_list_init(unsigned short pci_vendor, char display)
memset(amcc, 0, sizeof(*amcc)); memset(amcc, 0, sizeof(*amcc));
amcc->pcidev = pcidev; amcc->pcidev = pcidev;
if (last) { if (last)
last->next = amcc; last->next = amcc;
} else { else
amcc_devices = amcc; amcc_devices = amcc;
}
last = amcc; last = amcc;
amcc->vendor = pcidev->vendor; amcc->vendor = pcidev->vendor;
...@@ -305,7 +280,7 @@ void v_pci_card_list_init(unsigned short pci_vendor, char display) ...@@ -305,7 +280,7 @@ void v_pci_card_list_init(unsigned short pci_vendor, char display)
* pci_card_alloc. */ * pci_card_alloc. */
for (i = 0; i < 5; i++) for (i = 0; i < 5; i++)
amcc->io_addr[i] = amcc->io_addr[i] =
pci_resource_start(pcidev, i); pci_resource_start(pcidev, i);
amcc->irq = pcidev->irq; amcc->irq = pcidev->irq;
} }
...@@ -333,14 +308,14 @@ void v_pci_card_list_cleanup(unsigned short pci_vendor) ...@@ -333,14 +308,14 @@ void v_pci_card_list_cleanup(unsigned short pci_vendor)
/****************************************************************************/ /****************************************************************************/
/* find first unused card with this device_id */ /* find first unused card with this device_id */
struct pcilst_struct *ptr_find_free_pci_card_by_device(unsigned short vendor_id, struct pcilst_struct *ptr_find_free_pci_card_by_device(unsigned short vendor_id,
unsigned short device_id) unsigned short device_id)
{ {
struct pcilst_struct *amcc, *next; struct pcilst_struct *amcc, *next;
for (amcc = amcc_devices; amcc; amcc = next) { for (amcc = amcc_devices; amcc; amcc = next) {
next = amcc->next; next = amcc->next;
if ((!amcc->used) && (amcc->device == device_id) if ((!amcc->used) && (amcc->device == device_id)
&& (amcc->vendor == vendor_id)) && (amcc->vendor == vendor_id))
return amcc; return amcc;
} }
...@@ -351,8 +326,10 @@ struct pcilst_struct *ptr_find_free_pci_card_by_device(unsigned short vendor_id, ...@@ -351,8 +326,10 @@ struct pcilst_struct *ptr_find_free_pci_card_by_device(unsigned short vendor_id,
/****************************************************************************/ /****************************************************************************/
/* find card on requested position */ /* find card on requested position */
int i_find_free_pci_card_by_position(unsigned short vendor_id, int i_find_free_pci_card_by_position(unsigned short vendor_id,
unsigned short device_id, unsigned short pci_bus, unsigned short device_id,
unsigned short pci_slot, struct pcilst_struct **card) unsigned short pci_bus,
unsigned short pci_slot,
struct pcilst_struct **card)
{ {
struct pcilst_struct *amcc, *next; struct pcilst_struct *amcc, *next;
...@@ -360,21 +337,21 @@ int i_find_free_pci_card_by_position(unsigned short vendor_id, ...@@ -360,21 +337,21 @@ int i_find_free_pci_card_by_position(unsigned short vendor_id,
for (amcc = amcc_devices; amcc; amcc = next) { for (amcc = amcc_devices; amcc; amcc = next) {
next = amcc->next; next = amcc->next;
if ((amcc->vendor == vendor_id) && (amcc->device == device_id) if ((amcc->vendor == vendor_id) && (amcc->device == device_id)
&& (amcc->pci_bus == pci_bus) && (amcc->pci_bus == pci_bus)
&& (amcc->pci_slot == pci_slot)) { && (amcc->pci_slot == pci_slot)) {
if (!(amcc->used)) { if (!(amcc->used)) {
*card = amcc; *card = amcc;
return 0; // ok, card is found return 0; /* ok, card is found */
} else { } else {
rt_printk rt_printk(" - \nCard on requested position is used b:s %d:%d!\n",
(" - \nCard on requested position is used b:s %d:%d!\n", pci_bus, pci_slot);
pci_bus, pci_slot); return 2; /* card exist but is used */
return 2; // card exist but is used
} }
} }
} }
return 1; // no card found /* no card found */
return 1;
} }
/****************************************************************************/ /****************************************************************************/
...@@ -420,12 +397,18 @@ void v_pci_card_list_display(void) ...@@ -420,12 +397,18 @@ void v_pci_card_list_display(void)
{ {
struct pcilst_struct *amcc, *next; struct pcilst_struct *amcc, *next;
printk("List of pci cards\n"); printk(KERN_DEBUG "List of pci cards\n");
printk("bus:slot:func vendor device io_amcc io_daq irq used\n"); printk(KERN_DEBUG "bus:slot:func vendor device io_amcc io_daq irq used\n");
for (amcc = amcc_devices; amcc; amcc = next) { for (amcc = amcc_devices; amcc; amcc = next) {
next = amcc->next; next = amcc->next;
printk("%2d %2d %2d 0x%4x 0x%4x 0x%8llx 0x%8llx %2u %2d\n", amcc->pci_bus, amcc->pci_slot, amcc->pci_func, amcc->vendor, amcc->device, (unsigned long long)amcc->io_addr[0], (unsigned long long)amcc->io_addr[2], amcc->irq, amcc->used); printk
("%2d %2d %2d 0x%4x 0x%4x 0x%8llx 0x%8llx %2u %2d\n",
amcc->pci_bus, amcc->pci_slot, amcc->pci_func,
amcc->vendor, amcc->device,
(unsigned long long)amcc->io_addr[0],
(unsigned long long)amcc->io_addr[2], amcc->irq,
amcc->used);
} }
} }
...@@ -433,8 +416,9 @@ void v_pci_card_list_display(void) ...@@ -433,8 +416,9 @@ void v_pci_card_list_display(void)
/****************************************************************************/ /****************************************************************************/
/* return all card information for driver */ /* return all card information for driver */
int i_pci_card_data(struct pcilst_struct *amcc, int i_pci_card_data(struct pcilst_struct *amcc,
unsigned char *pci_bus, unsigned char *pci_slot, unsigned char *pci_bus, unsigned char *pci_slot,
unsigned char *pci_func, resource_size_t * io_addr, unsigned int *irq) unsigned char *pci_func, resource_size_t * io_addr,
unsigned int *irq)
{ {
int i; int i;
...@@ -452,29 +436,31 @@ int i_pci_card_data(struct pcilst_struct *amcc, ...@@ -452,29 +436,31 @@ int i_pci_card_data(struct pcilst_struct *amcc,
/****************************************************************************/ /****************************************************************************/
/* select and alloc card */ /* select and alloc card */
struct pcilst_struct *ptr_select_and_alloc_pci_card(unsigned short vendor_id, struct pcilst_struct *ptr_select_and_alloc_pci_card(unsigned short vendor_id,
unsigned short device_id, unsigned short pci_bus, unsigned short device_id,
unsigned short pci_slot, int i_Master) unsigned short pci_bus,
unsigned short pci_slot,
int i_Master)
{ {
struct pcilst_struct *card; struct pcilst_struct *card;
if ((pci_bus < 1) & (pci_slot < 1)) { // use autodetection if ((pci_bus < 1) & (pci_slot < 1)) {
if ((card = ptr_find_free_pci_card_by_device(vendor_id, /* use autodetection */
device_id)) == NULL) { card = ptr_find_free_pci_card_by_device(vendor_id, device_id);
if (card == NULL) {
rt_printk(" - Unused card not found in system!\n"); rt_printk(" - Unused card not found in system!\n");
return NULL; return NULL;
} }
} else { } else {
switch (i_find_free_pci_card_by_position(vendor_id, device_id, switch (i_find_free_pci_card_by_position(vendor_id, device_id,
pci_bus, pci_slot, &card)) { pci_bus, pci_slot,
&card)) {
case 1: case 1:
rt_printk rt_printk(" - Card not found on requested position b:s %d:%d!\n",
(" - Card not found on requested position b:s %d:%d!\n", pci_bus, pci_slot);
pci_bus, pci_slot);
return NULL; return NULL;
case 2: case 2:
rt_printk rt_printk(" - Card on requested position is used b:s %d:%d!\n",
(" - Card on requested position is used b:s %d:%d!\n", pci_bus, pci_slot);
pci_bus, pci_slot);
return NULL; return NULL;
} }
} }
......
/**
@verbatim
Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
ADDI-DATA GmbH
Dieselstrasse 3
D-77833 Ottersweier
Tel: +19(0)7223/9493-0
Fax: +49(0)7223/9493-92
http://www.addi-data-com
info@addi-data.com
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
You shoud also find the complete GPL in the COPYING file accompanying this source code.
@endverbatim
*/
/* /*
* Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
+-----------------------------------------------------------------------+ *
| (C) ADDI-DATA GmbH Dieselstrasse 3 D-77833 Ottersweier | * ADDI-DATA GmbH
+-----------------------------------------------------------------------+ * Dieselstrasse 3
| Tel : +49 (0) 7223/9493-0 | email : info@addi-data.com | * D-77833 Ottersweier
| Fax : +49 (0) 7223/9493-92 | Internet : http://www.addi-data.com | * Tel: +19(0)7223/9493-0
+-----------------------------------------------------------------------+ * Fax: +49(0)7223/9493-92
| Project : ADDI-DATA | Compiler : GCC | * http://www.addi-data-com
| Modulname : addi_common.h | Version : 2.96 | * info@addi-data.com
+-------------------------------+---------------------------------------+ *
| Project manager: Eric Stolz | Date : 02/12/2002 | * This program is free software; you can redistribute it and/or modify it
+-----------------------------------------------------------------------+ * under the terms of the GNU General Public License as published by the Free
| Description : ADDI COMMON Header File | * Software Foundation; either version 2 of the License, or (at your option)
+-----------------------------------------------------------------------+ * any later version.
*/ */
//including header files
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/mm.h> #include <linux/mm.h>
//#include <linux/malloc.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/ioport.h> #include <linux/ioport.h>
...@@ -53,17 +27,16 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc ...@@ -53,17 +27,16 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc
#include <linux/timex.h> #include <linux/timex.h>
#include <linux/timer.h> #include <linux/timer.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <asm/io.h> #include <linux/io.h>
#include <linux/kmod.h>
#include <linux/uaccess.h>
#include "../../comedidev.h" #include "../../comedidev.h"
#include "addi_amcc_s5933.h" #include "addi_amcc_s5933.h"
#include <linux/kmod.h>
#include <asm/uaccess.h>
#define ERROR -1 #define ERROR -1
#define SUCCESS 1 #define SUCCESS 1
// variable type definition
/* variable type definition */
typedef void VOID, *PVOID; typedef void VOID, *PVOID;
typedef char CHAR, *PCHAR; typedef char CHAR, *PCHAR;
typedef const CHAR *PCSTR; typedef const CHAR *PCSTR;
...@@ -73,38 +46,39 @@ typedef unsigned short USHORT, *PUSHORT; ...@@ -73,38 +46,39 @@ typedef unsigned short USHORT, *PUSHORT;
typedef unsigned short WORD, *PWORD; typedef unsigned short WORD, *PWORD;
typedef int INT, *PINT;; typedef int INT, *PINT;;
typedef unsigned int UINT, *PUINT; typedef unsigned int UINT, *PUINT;
typedef int LONG, *PLONG; /* 32-bit */ typedef int LONG, *PLONG; /* 32-bit */
typedef unsigned int ULONG, *PULONG; /* 32-bit */ typedef unsigned int ULONG, *PULONG; /* 32-bit */
typedef unsigned int DWORD, *PDWORD; /* 32-bit */ typedef unsigned int DWORD, *PDWORD; /* 32-bit */
typedef unsigned long ULONG_PTR; typedef unsigned long ULONG_PTR;
typedef const comedi_lrange *PCRANGE; typedef const comedi_lrange *PCRANGE;
#define LOBYTE(W) (BYTE )((W)&0xFF)
#define HIBYTE(W) (BYTE )(((W)>>8)&0xFF)
#define MAKEWORD(H,L) (USHORT )((L)|( (H)<<8) )
#define LOWORD(W) (USHORT )((W)&0xFFFF)
#define HIWORD(W) (USHORT )(((W)>>16)&0xFFFF)
#define MAKEDWORD(H,L) (UINT )((L)|( (H)<<16) )
#define ADDI_ENABLE 1
#define ADDI_DISABLE 0
#define APCI1710_SAVE_INTERRUPT 1
#define ADDIDATA_EEPROM 1
#define ADDIDATA_NO_EEPROM 0
#define ADDIDATA_93C76 "93C76"
#define ADDIDATA_S5920 "S5920"
#define ADDIDATA_S5933 "S5933"
#define ADDIDATA_9054 "9054"
//ADDIDATA Enable Disable
#define ADDIDATA_ENABLE 1
#define ADDIDATA_DISABLE 0
// Structures
// structure for the boardtype
typedef struct {
#define LOBYTE(W) (BYTE)((W) & 0xFF)
#define HIBYTE(W) (BYTE)(((W) >> 8) & 0xFF)
#define MAKEWORD(H, L) (USHORT)((L) | ((H) << 8))
#define LOWORD(W) (USHORT)((W) & 0xFFFF)
#define HIWORD(W) (USHORT)(((W) >> 16) & 0xFFFF)
#define MAKEDWORD(H, L) (UINT)((L) | ((H) << 16))
#define ADDI_ENABLE 1
#define ADDI_DISABLE 0
#define APCI1710_SAVE_INTERRUPT 1
#define ADDIDATA_EEPROM 1
#define ADDIDATA_NO_EEPROM 0
#define ADDIDATA_93C76 "93C76"
#define ADDIDATA_S5920 "S5920"
#define ADDIDATA_S5933 "S5933"
#define ADDIDATA_9054 "9054"
/* ADDIDATA Enable Disable */
#define ADDIDATA_ENABLE 1
#define ADDIDATA_DISABLE 0
/* Structures */
/* structure for the boardtype */
typedef struct {
PCSTR pc_DriverName; // driver name PCSTR pc_DriverName; // driver name
INT i_VendorId; //PCI vendor a device ID of card INT i_VendorId; //PCI vendor a device ID of card
INT i_DeviceId; INT i_DeviceId;
...@@ -136,84 +110,118 @@ typedef struct { ...@@ -136,84 +110,118 @@ typedef struct {
UINT ui_MinAcquisitiontimeNs; // Minimum Acquisition in Nano secs UINT ui_MinAcquisitiontimeNs; // Minimum Acquisition in Nano secs
UINT ui_MinDelaytimeNs; // Minimum Delay in Nano secs UINT ui_MinDelaytimeNs; // Minimum Delay in Nano secs
// interrupt and reset /* interrupt and reset */
void (*v_hwdrv_Interrupt) (int irq, void *d); void (*v_hwdrv_Interrupt)(int irq, void *d);
int (*i_hwdrv_Reset) (comedi_device * dev); int (*i_hwdrv_Reset)(comedi_device *dev);
//Subdevice functions /* Subdevice functions */
//ANALOG INPUT
/* ANALOG INPUT */
int (*i_hwdrv_InsnConfigAnalogInput) (comedi_device * dev, int (*i_hwdrv_InsnConfigAnalogInput)(comedi_device *dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_subdevice *s,
int (*i_hwdrv_InsnReadAnalogInput) (comedi_device * dev, comedi_insn *insn,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); lsampl_t *data);
int (*i_hwdrv_InsnWriteAnalogInput) (comedi_device * dev, int (*i_hwdrv_InsnReadAnalogInput)(comedi_device *dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_subdevice *s,
int (*i_hwdrv_InsnBitsAnalogInput) (comedi_device * dev, comedi_insn *insn,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); lsampl_t *data);
int (*i_hwdrv_CommandTestAnalogInput) (comedi_device * dev, int (*i_hwdrv_InsnWriteAnalogInput)(comedi_device *dev,
comedi_subdevice * s, comedi_cmd * cmd); comedi_subdevice *s,
int (*i_hwdrv_CommandAnalogInput) (comedi_device * dev, comedi_insn *insn,
comedi_subdevice * s); lsampl_t *data);
int (*i_hwdrv_CancelAnalogInput) (comedi_device * dev, int (*i_hwdrv_InsnBitsAnalogInput)(comedi_device *dev,
comedi_subdevice * s); comedi_subdevice *s,
comedi_insn *insn,
//Analog Output lsampl_t *data);
int (*i_hwdrv_InsnConfigAnalogOutput) (comedi_device * dev, int (*i_hwdrv_CommandTestAnalogInput)(comedi_device *dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_subdevice *s,
int (*i_hwdrv_InsnWriteAnalogOutput) (comedi_device * dev, comedi_cmd *cmd);
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); int (*i_hwdrv_CommandAnalogInput)(comedi_device *dev,
int (*i_hwdrv_InsnBitsAnalogOutput) (comedi_device * dev, comedi_subdevice *s);
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); int (*i_hwdrv_CancelAnalogInput)(comedi_device *dev,
comedi_subdevice *s);
//Digital Input
int (*i_hwdrv_InsnConfigDigitalInput) (comedi_device * dev, /* Analog Output */
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); int (*i_hwdrv_InsnConfigAnalogOutput)(comedi_device *dev,
int (*i_hwdrv_InsnReadDigitalInput) (comedi_device * dev, comedi_subdevice *s,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_insn *insn,
int (*i_hwdrv_InsnWriteDigitalInput) (comedi_device * dev, lsampl_t *data);
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); int (*i_hwdrv_InsnWriteAnalogOutput)(comedi_device *dev,
int (*i_hwdrv_InsnBitsDigitalInput) (comedi_device * dev, comedi_subdevice *s,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_insn *insn,
lsampl_t *data);
//Digital Output int (*i_hwdrv_InsnBitsAnalogOutput)(comedi_device *dev,
int (*i_hwdrv_InsnConfigDigitalOutput) (comedi_device * dev, comedi_subdevice *s,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_insn *insn,
int (*i_hwdrv_InsnWriteDigitalOutput) (comedi_device * dev, lsampl_t *data);
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data);
int (*i_hwdrv_InsnBitsDigitalOutput) (comedi_device * dev, /* Digital Input */
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); int (*i_hwdrv_InsnConfigDigitalInput) (comedi_device *dev,
int (*i_hwdrv_InsnReadDigitalOutput) (comedi_device * dev, comedi_subdevice *s,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_insn *insn,
lsampl_t *data);
//TIMER int (*i_hwdrv_InsnReadDigitalInput) (comedi_device *dev,
int (*i_hwdrv_InsnConfigTimer) (comedi_device * dev, comedi_subdevice *s,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_insn *insn,
int (*i_hwdrv_InsnWriteTimer) (comedi_device * dev, lsampl_t *data);
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); int (*i_hwdrv_InsnWriteDigitalInput) (comedi_device *dev,
int (*i_hwdrv_InsnReadTimer) (comedi_device * dev, comedi_subdevice * s, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn,
int (*i_hwdrv_InsnBitsTimer) (comedi_device * dev, comedi_subdevice * s, lsampl_t *data);
comedi_insn * insn, lsampl_t * data); int (*i_hwdrv_InsnBitsDigitalInput) (comedi_device *dev,
comedi_subdevice *s,
//TTL IO comedi_insn *insn,
int (*i_hwdr_ConfigInitTTLIO) (comedi_device * dev, lsampl_t *data);
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data);
int (*i_hwdr_ReadTTLIOBits) (comedi_device * dev, comedi_subdevice * s, /* Digital Output */
comedi_insn * insn, lsampl_t * data); int (*i_hwdrv_InsnConfigDigitalOutput)(comedi_device *dev,
int (*i_hwdr_ReadTTLIOAllPortValue) (comedi_device * dev, comedi_subdevice *s,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_insn *insn,
int (*i_hwdr_WriteTTLIOChlOnOff) (comedi_device * dev, lsampl_t *data);
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); int (*i_hwdrv_InsnWriteDigitalOutput)(comedi_device *dev,
comedi_subdevice *s,
comedi_insn *insn,
lsampl_t *data);
int (*i_hwdrv_InsnBitsDigitalOutput)(comedi_device *dev,
comedi_subdevice *s,
comedi_insn *insn,
lsampl_t *data);
int (*i_hwdrv_InsnReadDigitalOutput)(comedi_device *dev,
comedi_subdevice *s,
comedi_insn *insn,
lsampl_t *data);
/* TIMER */
int (*i_hwdrv_InsnConfigTimer)(comedi_device *dev,
comedi_subdevice *s,
comedi_insn *insn, lsampl_t *data);
int (*i_hwdrv_InsnWriteTimer)(comedi_device *dev,
comedi_subdevice *s, comedi_insn *insn,
lsampl_t *data);
int (*i_hwdrv_InsnReadTimer)(comedi_device *dev, comedi_subdevice *s,
comedi_insn *insn, lsampl_t *data);
int (*i_hwdrv_InsnBitsTimer)(comedi_device *dev, comedi_subdevice *s,
comedi_insn *insn, lsampl_t *data);
/* TTL IO */
int (*i_hwdr_ConfigInitTTLIO)(comedi_device *dev,
comedi_subdevice *s, comedi_insn *insn,
lsampl_t *data);
int (*i_hwdr_ReadTTLIOBits)(comedi_device *dev, comedi_subdevice *s,
comedi_insn *insn, lsampl_t *data);
int (*i_hwdr_ReadTTLIOAllPortValue)(comedi_device *dev,
comedi_subdevice *s,
comedi_insn *insn,
lsampl_t *data);
int (*i_hwdr_WriteTTLIOChlOnOff)(comedi_device *dev,
comedi_subdevice *s,
comedi_insn *insn, lsampl_t *data);
} boardtype; } boardtype;
//MODULE INFO STRUCTURE //MODULE INFO STRUCTURE
typedef union { typedef union {
/*****************************/
/* Incremental counter infos */ /* Incremental counter infos */
/*****************************/
struct { struct {
union { union {
struct { struct {
...@@ -237,10 +245,7 @@ typedef union { ...@@ -237,10 +245,7 @@ typedef union {
} s_SiemensCounterInfo; } s_SiemensCounterInfo;
/*************/
/* SSI infos */ /* SSI infos */
/*************/
struct { struct {
BYTE b_SSIProfile; BYTE b_SSIProfile;
BYTE b_PositionTurnLength; BYTE b_PositionTurnLength;
...@@ -248,19 +253,13 @@ typedef union { ...@@ -248,19 +253,13 @@ typedef union {
BYTE b_SSIInit; BYTE b_SSIInit;
} s_SSICounterInfo; } s_SSICounterInfo;
/*****************/
/* TTL I/O infos */ /* TTL I/O infos */
/*****************/
struct { struct {
BYTE b_TTLInit; BYTE b_TTLInit;
BYTE b_PortConfiguration[4]; BYTE b_PortConfiguration[4];
} s_TTLIOInfo; } s_TTLIOInfo;
/*********************/
/* Digital I/O infos */ /* Digital I/O infos */
/*********************/
struct { struct {
BYTE b_DigitalInit; BYTE b_DigitalInit;
BYTE b_ChannelAMode; BYTE b_ChannelAMode;
...@@ -312,10 +311,7 @@ typedef union { ...@@ -312,10 +311,7 @@ typedef union {
DWORD dw_StatusRegister; DWORD dw_StatusRegister;
} s_PulseEncoderModuleInfo; } s_PulseEncoderModuleInfo;
/********************/
/* Tor conter infos */ /* Tor conter infos */
/********************/
struct { struct {
struct { struct {
BYTE b_TorCounterInit; BYTE b_TorCounterInit;
...@@ -327,10 +323,7 @@ typedef union { ...@@ -327,10 +323,7 @@ typedef union {
BYTE b_PCIInputClock; BYTE b_PCIInputClock;
} s_TorCounterModuleInfo; } s_TorCounterModuleInfo;
/*************/
/* PWM infos */ /* PWM infos */
/*************/
struct { struct {
struct { struct {
BYTE b_PWMInit; BYTE b_PWMInit;
...@@ -344,10 +337,7 @@ typedef union { ...@@ -344,10 +337,7 @@ typedef union {
BYTE b_ClockSelection; BYTE b_ClockSelection;
} s_PWMModuleInfo; } s_PWMModuleInfo;
/*************/
/* ETM infos */ /* ETM infos */
/*************/
struct { struct {
struct { struct {
BYTE b_ETMEnable; BYTE b_ETMEnable;
...@@ -360,10 +350,7 @@ typedef union { ...@@ -360,10 +350,7 @@ typedef union {
ULONG ul_Timing; ULONG ul_Timing;
} s_ETMModuleInfo; } s_ETMModuleInfo;
/*************/
/* CDA infos */ /* CDA infos */
/*************/
struct { struct {
BYTE b_CDAEnable; BYTE b_CDAEnable;
BYTE b_CDAInterrupt; BYTE b_CDAInterrupt;
...@@ -373,8 +360,8 @@ typedef union { ...@@ -373,8 +360,8 @@ typedef union {
} s_CDAModuleInfo; } s_CDAModuleInfo;
} str_ModuleInfo; } str_ModuleInfo;
// Private structure for the addi_apci3120 driver
/* Private structure for the addi_apci3120 driver */
typedef struct { typedef struct {
INT iobase; INT iobase;
...@@ -432,34 +419,31 @@ typedef struct { ...@@ -432,34 +419,31 @@ typedef struct {
UINT ui_EocEosConversionTime; UINT ui_EocEosConversionTime;
BYTE b_EocEosConversionTimeBase; BYTE b_EocEosConversionTimeBase;
BYTE b_SingelDiff; BYTE b_SingelDiff;
BYTE b_ExttrigEnable; // To enable or disable external trigger BYTE b_ExttrigEnable; /* To enable or disable external trigger */
struct task_struct *tsk_Current; // Pointer to the current process /* Pointer to the current process */
struct task_struct *tsk_Current;
boardtype *ps_BoardInfo; boardtype *ps_BoardInfo;
// Hardware board infos for 1710 /* Hardware board infos for 1710 */
struct { struct {
UINT ui_Address; // Board address UINT ui_Address; /* Board address */
UINT ui_FlashAddress; UINT ui_FlashAddress;
BYTE b_InterruptNbr; // Board interrupt number BYTE b_InterruptNbr; /* Board interrupt number */
BYTE b_SlotNumber; // PCI slot number BYTE b_SlotNumber; /* PCI slot number */
BYTE b_BoardVersion; BYTE b_BoardVersion;
DWORD dw_MolduleConfiguration[4]; // Module configuration DWORD dw_MolduleConfiguration[4]; /* Module config */
} s_BoardInfos; } s_BoardInfos;
/*******************/
/* Interrupt infos */ /* Interrupt infos */
/*******************/
struct { struct {
ULONG ul_InterruptOccur; /* 0 : No interrupt occur */ ULONG ul_InterruptOccur; /* 0 : No interrupt occur */
/* > 0 : Interrupt occur */ /* > 0 : Interrupt occur */
UINT ui_Read; /* Read FIFO */ UINT ui_Read; /* Read FIFO */
UINT ui_Write; /* Write FIFO */ UINT ui_Write; /* Write FIFO */
struct { struct {
BYTE b_OldModuleMask; BYTE b_OldModuleMask;
ULONG ul_OldInterruptMask; /* Interrupt mask */ ULONG ul_OldInterruptMask; /* Interrupt mask */
ULONG ul_OldCounterLatchValue; /* Interrupt counter value */ ULONG ul_OldCounterLatchValue; /* Interrupt counter value */
} s_FIFOInterruptParameters[APCI1710_SAVE_INTERRUPT]; } s_FIFOInterruptParameters[APCI1710_SAVE_INTERRUPT];
} s_InterruptParameters; } s_InterruptParameters;
...@@ -469,14 +453,13 @@ typedef struct { ...@@ -469,14 +453,13 @@ typedef struct {
} addi_private; } addi_private;
static unsigned short pci_list_builded = 0; /* set to 1 when list of card is known */ static unsigned short pci_list_builded; /* set to 1 when list of card is known */
//Function declarations
static int i_ADDI_Attach(comedi_device * dev, comedi_devconfig * it); /* Function declarations */
static int i_ADDI_Detach(comedi_device * dev); static int i_ADDI_Attach(comedi_device *dev, comedi_devconfig *it);
static int i_ADDI_Reset(comedi_device * dev); static int i_ADDI_Detach(comedi_device *dev);
static int i_ADDI_Reset(comedi_device *dev);
static irqreturn_t v_ADDI_Interrupt(int irq, void *d PT_REGS_ARG); static irqreturn_t v_ADDI_Interrupt(int irq, void *d PT_REGS_ARG);
static int i_ADDIDATA_InsnReadEeprom(comedi_device * dev, comedi_subdevice * s, static int i_ADDIDATA_InsnReadEeprom(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
...@@ -219,21 +219,25 @@ struct pcilst_struct *amcc_devices; // ptr to root list of all amcc devices ...@@ -219,21 +219,25 @@ struct pcilst_struct *amcc_devices; // ptr to root list of all amcc devices
void v_pci_card_list_init(unsigned short pci_vendor, char display); void v_pci_card_list_init(unsigned short pci_vendor, char display);
void v_pci_card_list_cleanup(unsigned short pci_vendor); void v_pci_card_list_cleanup(unsigned short pci_vendor);
struct pcilst_struct *ptr_find_free_pci_card_by_device(unsigned short vendor_id, struct pcilst_struct *ptr_find_free_pci_card_by_device(unsigned short vendor_id,
unsigned short device_id); unsigned short
device_id);
int i_find_free_pci_card_by_position(unsigned short vendor_id, int i_find_free_pci_card_by_position(unsigned short vendor_id,
unsigned short device_id, unsigned short pci_bus, unsigned short device_id,
unsigned short pci_slot, struct pcilst_struct **card); unsigned short pci_bus,
unsigned short pci_slot,
struct pcilst_struct **card);
struct pcilst_struct *ptr_select_and_alloc_pci_card(unsigned short vendor_id, struct pcilst_struct *ptr_select_and_alloc_pci_card(unsigned short vendor_id,
unsigned short device_id, unsigned short pci_bus, unsigned short device_id,
unsigned short pci_slot); unsigned short pci_bus,
unsigned short pci_slot);
int i_pci_card_alloc(struct pcilst_struct *amcc); int i_pci_card_alloc(struct pcilst_struct *amcc);
int i_pci_card_free(struct pcilst_struct *amcc); int i_pci_card_free(struct pcilst_struct *amcc);
void v_pci_card_list_display(void); void v_pci_card_list_display(void);
int i_pci_card_data(struct pcilst_struct *amcc, int i_pci_card_data(struct pcilst_struct *amcc,
unsigned char *pci_bus, unsigned char *pci_slot, unsigned char *pci_bus, unsigned char *pci_slot,
unsigned char *pci_func, unsigned short *io_addr, unsigned short *irq, unsigned char *pci_func, unsigned short *io_addr,
unsigned short *master); unsigned short *irq, unsigned short *master);
/****************************************************************************/ /****************************************************************************/
...@@ -273,7 +277,7 @@ void v_pci_card_list_init(unsigned short pci_vendor, char display) ...@@ -273,7 +277,7 @@ void v_pci_card_list_init(unsigned short pci_vendor, char display)
amcc->pci_func = PCI_FUNC(pcidev->devfn); amcc->pci_func = PCI_FUNC(pcidev->devfn);
for (i = 0; i < 5; i++) for (i = 0; i < 5; i++)
amcc->io_addr[i] = amcc->io_addr[i] =
pcidev->base_address[i] & ~3UL; pcidev->base_address[i] & ~3UL;
amcc->irq = pcidev->irq; amcc->irq = pcidev->irq;
#else #else
amcc->vendor = pcidev->vendor; amcc->vendor = pcidev->vendor;
...@@ -286,7 +290,7 @@ void v_pci_card_list_init(unsigned short pci_vendor, char display) ...@@ -286,7 +290,7 @@ void v_pci_card_list_init(unsigned short pci_vendor, char display)
amcc->pci_func = PCI_FUNC(pcidev->devfn); amcc->pci_func = PCI_FUNC(pcidev->devfn);
for (i = 0; i < 5; i++) for (i = 0; i < 5; i++)
amcc->io_addr[i] = amcc->io_addr[i] =
pcidev->resource[i].start & ~3UL; pcidev->resource[i].start & ~3UL;
amcc->irq = pcidev->irq; amcc->irq = pcidev->irq;
#endif #endif
...@@ -314,14 +318,14 @@ void v_pci_card_list_cleanup(unsigned short pci_vendor) ...@@ -314,14 +318,14 @@ void v_pci_card_list_cleanup(unsigned short pci_vendor)
/****************************************************************************/ /****************************************************************************/
/* find first unused card with this device_id */ /* find first unused card with this device_id */
struct pcilst_struct *ptr_find_free_pci_card_by_device(unsigned short vendor_id, struct pcilst_struct *ptr_find_free_pci_card_by_device(unsigned short vendor_id,
unsigned short device_id) unsigned short device_id)
{ {
struct pcilst_struct *amcc, *next; struct pcilst_struct *amcc, *next;
for (amcc = amcc_devices; amcc; amcc = next) { for (amcc = amcc_devices; amcc; amcc = next) {
next = amcc->next; next = amcc->next;
if ((!amcc->used) && (amcc->device == device_id) if ((!amcc->used) && (amcc->device == device_id)
&& (amcc->vendor == vendor_id)) && (amcc->vendor == vendor_id))
return amcc; return amcc;
} }
...@@ -332,8 +336,10 @@ struct pcilst_struct *ptr_find_free_pci_card_by_device(unsigned short vendor_id, ...@@ -332,8 +336,10 @@ struct pcilst_struct *ptr_find_free_pci_card_by_device(unsigned short vendor_id,
/****************************************************************************/ /****************************************************************************/
/* find card on requested position */ /* find card on requested position */
int i_find_free_pci_card_by_position(unsigned short vendor_id, int i_find_free_pci_card_by_position(unsigned short vendor_id,
unsigned short device_id, unsigned short pci_bus, unsigned short device_id,
unsigned short pci_slot, struct pcilst_struct **card) unsigned short pci_bus,
unsigned short pci_slot,
struct pcilst_struct **card)
{ {
struct pcilst_struct *amcc, *next; struct pcilst_struct *amcc, *next;
...@@ -341,15 +347,15 @@ int i_find_free_pci_card_by_position(unsigned short vendor_id, ...@@ -341,15 +347,15 @@ int i_find_free_pci_card_by_position(unsigned short vendor_id,
for (amcc = amcc_devices; amcc; amcc = next) { for (amcc = amcc_devices; amcc; amcc = next) {
next = amcc->next; next = amcc->next;
if ((amcc->vendor == vendor_id) && (amcc->device == device_id) if ((amcc->vendor == vendor_id) && (amcc->device == device_id)
&& (amcc->pci_bus == pci_bus) && (amcc->pci_bus == pci_bus)
&& (amcc->pci_slot == pci_slot)) { && (amcc->pci_slot == pci_slot)) {
if (!(amcc->used)) { if (!(amcc->used)) {
*card = amcc; *card = amcc;
return 0; // ok, card is found return 0; // ok, card is found
} else { } else {
rt_printk rt_printk
(" - \nCard on requested position is used b:s %d:%d!\n", (" - \nCard on requested position is used b:s %d:%d!\n",
pci_bus, pci_slot); pci_bus, pci_slot);
return 2; // card exist but is used return 2; // card exist but is used
} }
} }
...@@ -395,7 +401,11 @@ void v_pci_card_list_display(void) ...@@ -395,7 +401,11 @@ void v_pci_card_list_display(void)
for (amcc = amcc_devices; amcc; amcc = next) { for (amcc = amcc_devices; amcc; amcc = next) {
next = amcc->next; next = amcc->next;
printk("%2d %2d %2d 0x%4x 0x%4x %3s 0x%4x 0x%4x %2d %2d\n", amcc->pci_bus, amcc->pci_slot, amcc->pci_func, amcc->vendor, amcc->device, amcc->master ? "yes" : "no", amcc->io_addr[0], amcc->io_addr[2], amcc->irq, amcc->used); printk
("%2d %2d %2d 0x%4x 0x%4x %3s 0x%4x 0x%4x %2d %2d\n",
amcc->pci_bus, amcc->pci_slot, amcc->pci_func,
amcc->vendor, amcc->device, amcc->master ? "yes" : "no",
amcc->io_addr[0], amcc->io_addr[2], amcc->irq, amcc->used);
} }
} }
...@@ -403,9 +413,9 @@ void v_pci_card_list_display(void) ...@@ -403,9 +413,9 @@ void v_pci_card_list_display(void)
/****************************************************************************/ /****************************************************************************/
/* return all card information for driver */ /* return all card information for driver */
int i_pci_card_data(struct pcilst_struct *amcc, int i_pci_card_data(struct pcilst_struct *amcc,
unsigned char *pci_bus, unsigned char *pci_slot, unsigned char *pci_bus, unsigned char *pci_slot,
unsigned char *pci_func, unsigned short *io_addr, unsigned short *irq, unsigned char *pci_func, unsigned short *io_addr,
unsigned short *master) unsigned short *irq, unsigned short *master)
{ {
int i; int i;
...@@ -424,29 +434,32 @@ int i_pci_card_data(struct pcilst_struct *amcc, ...@@ -424,29 +434,32 @@ int i_pci_card_data(struct pcilst_struct *amcc,
/****************************************************************************/ /****************************************************************************/
/* select and alloc card */ /* select and alloc card */
struct pcilst_struct *ptr_select_and_alloc_pci_card(unsigned short vendor_id, struct pcilst_struct *ptr_select_and_alloc_pci_card(unsigned short vendor_id,
unsigned short device_id, unsigned short pci_bus, unsigned short device_id,
unsigned short pci_slot) unsigned short pci_bus,
unsigned short pci_slot)
{ {
struct pcilst_struct *card; struct pcilst_struct *card;
if ((pci_bus < 1) & (pci_slot < 1)) { // use autodetection if ((pci_bus < 1) & (pci_slot < 1)) { // use autodetection
if ((card = ptr_find_free_pci_card_by_device(vendor_id, if ((card = ptr_find_free_pci_card_by_device(vendor_id,
device_id)) == NULL) { device_id)) ==
NULL) {
rt_printk(" - Unused card not found in system!\n"); rt_printk(" - Unused card not found in system!\n");
return NULL; return NULL;
} }
} else { } else {
switch (i_find_free_pci_card_by_position(vendor_id, device_id, switch (i_find_free_pci_card_by_position(vendor_id, device_id,
pci_bus, pci_slot, &card)) { pci_bus, pci_slot,
&card)) {
case 1: case 1:
rt_printk rt_printk
(" - Card not found on requested position b:s %d:%d!\n", (" - Card not found on requested position b:s %d:%d!\n",
pci_bus, pci_slot); pci_bus, pci_slot);
return NULL; return NULL;
case 2: case 2:
rt_printk rt_printk
(" - Card on requested position is used b:s %d:%d!\n", (" - Card on requested position is used b:s %d:%d!\n",
pci_bus, pci_slot); pci_bus, pci_slot);
return NULL; return NULL;
} }
} }
......
/** /*
@verbatim * Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
*
* ADDI-DATA GmbH
* Dieselstrasse 3
* D-77833 Ottersweier
* Tel: +19(0)7223/9493-0
* Fax: +49(0)7223/9493-92
* http://www.addi-data-com
* info@addi-data.com
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*/
Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module. #define COMEDI_SUBD_TTLIO 11 /* Digital Input Output But TTL */
#define COMEDI_SUBD_PWM 12 /* Pulse width Measurement */
#define COMEDI_SUBD_SSI 13 /* Synchronous serial interface */
#define COMEDI_SUBD_TOR 14 /* Tor counter */
#define COMEDI_SUBD_CHRONO 15 /* Chrono meter */
#define COMEDI_SUBD_PULSEENCODER 16 /* Pulse Encoder INP CPT */
#define COMEDI_SUBD_INCREMENTALCOUNTER 17 /* Incremental Counter */
ADDI-DATA GmbH #define APCI1710_BOARD_NAME "apci1710"
Dieselstrasse 3 #define APCI1710_BOARD_VENDOR_ID 0x10E8
D-77833 Ottersweier #define APCI1710_BOARD_DEVICE_ID 0x818F
Tel: +19(0)7223/9493-0 #define APCI1710_ADDRESS_RANGE 256
Fax: +49(0)7223/9493-92 #define APCI1710_CONFIG_ADDRESS_RANGE 8
http://www.addi-data-com #define APCI1710_INCREMENTAL_COUNTER 0x53430000UL
info@addi-data.com #define APCI1710_SSI_COUNTER 0x53490000UL
#define APCI1710_TTL_IO 0x544C0000UL
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. #define APCI1710_DIGITAL_IO 0x44490000UL
#define APCI1710_82X54_TIMER 0x49430000UL
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. #define APCI1710_CHRONOMETER 0x43480000UL
#define APCI1710_PULSE_ENCODER 0x495A0000UL
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #define APCI1710_TOR_COUNTER 0x544F0000UL
#define APCI1710_PWM 0x50570000UL
You shoud also find the complete GPL in the COPYING file accompanying this source code. #define APCI1710_ETM 0x45540000UL
#define APCI1710_CDA 0x43440000UL
@endverbatim #define APCI1710_DISABLE 0
*/ #define APCI1710_ENABLE 1
#define APCI1710_SYNCHRONOUS_MODE 1
#define COMEDI_SUBD_TTLIO 11 /* Digital Input Output But TTL */ #define APCI1710_ASYNCHRONOUS_MODE 0
#define COMEDI_SUBD_PWM 12 /* Pulse width Measurement */
#define COMEDI_SUBD_SSI 13 /* Synchronous serial interface */
#define COMEDI_SUBD_TOR 14 /* Tor counter */
#define COMEDI_SUBD_CHRONO 15 /* Chrono meter */
#define COMEDI_SUBD_PULSEENCODER 16 /* Pulse Encoder INP CPT */
#define COMEDI_SUBD_INCREMENTALCOUNTER 17 /* Incremental Counter */
#define APCI1710_BOARD_NAME "apci1710"
#define APCI1710_BOARD_VENDOR_ID 0x10E8
#define APCI1710_BOARD_DEVICE_ID 0x818F
#define APCI1710_ADDRESS_RANGE 256
#define APCI1710_CONFIG_ADDRESS_RANGE 8
#define APCI1710_INCREMENTAL_COUNTER 0x53430000UL
#define APCI1710_SSI_COUNTER 0x53490000UL
#define APCI1710_TTL_IO 0x544C0000UL
#define APCI1710_DIGITAL_IO 0x44490000UL
#define APCI1710_82X54_TIMER 0x49430000UL
#define APCI1710_CHRONOMETER 0x43480000UL
#define APCI1710_PULSE_ENCODER 0x495A0000UL
#define APCI1710_TOR_COUNTER 0x544F0000UL
#define APCI1710_PWM 0x50570000UL
#define APCI1710_ETM 0x45540000UL
#define APCI1710_CDA 0x43440000UL
#define APCI1710_DISABLE 0
#define APCI1710_ENABLE 1
#define APCI1710_SYNCHRONOUS_MODE 1
#define APCI1710_ASYNCHRONOUS_MODE 0
//MODULE INFO STRUCTURE //MODULE INFO STRUCTURE
static const comedi_lrange range_apci1710_ttl = { 4, { static const comedi_lrange range_apci1710_ttl = { 4, {
BIP_RANGE(10), BIP_RANGE(10),
BIP_RANGE(5), BIP_RANGE(5),
BIP_RANGE(2), BIP_RANGE(2),
BIP_RANGE(1) BIP_RANGE(1)
} }
}; };
static const comedi_lrange range_apci1710_ssi = { 4, { static const comedi_lrange range_apci1710_ssi = { 4, {
BIP_RANGE(10), BIP_RANGE(10),
BIP_RANGE(5), BIP_RANGE(5),
BIP_RANGE(2), BIP_RANGE(2),
BIP_RANGE(1) BIP_RANGE(1)
} }
}; };
static const comedi_lrange range_apci1710_inccpt = { 4, { static const comedi_lrange range_apci1710_inccpt = { 4, {
BIP_RANGE(10), BIP_RANGE(10),
BIP_RANGE(5), BIP_RANGE(5),
BIP_RANGE(2), BIP_RANGE(2),
BIP_RANGE(1) BIP_RANGE(1)
} }
}; };
/** /*
@verbatim * Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
*
Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module. * ADDI-DATA GmbH
* Dieselstrasse 3
ADDI-DATA GmbH * D-77833 Ottersweier
Dieselstrasse 3 * Tel: +19(0)7223/9493-0
D-77833 Ottersweier * Fax: +49(0)7223/9493-92
Tel: +19(0)7223/9493-0 * http://www.addi-data-com
Fax: +49(0)7223/9493-92 * info@addi-data.com
http://www.addi-data-com *
info@addi-data.com * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. * Software Foundation; either version 2 of the License, or (at your option)
* any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA /* Card Specific information */
#define APCI035_BOARD_VENDOR_ID 0x15B8
You shoud also find the complete GPL in the COPYING file accompanying this source code. #define APCI035_ADDRESS_RANGE 255
@endverbatim
*/
// Card Specific information
#define APCI035_BOARD_VENDOR_ID 0x15B8
#define APCI035_ADDRESS_RANGE 255
INT i_TW_Number; INT i_TW_Number;
struct { struct {
...@@ -39,32 +33,31 @@ struct { ...@@ -39,32 +33,31 @@ struct {
INT i_ModuleSelection; INT i_ModuleSelection;
} Config_Parameters_Main; } Config_Parameters_Main;
//ANALOG INPUT RANGE /* ANALOG INPUT RANGE */
comedi_lrange range_apci035_ai = { 8, { comedi_lrange range_apci035_ai = { 8, {
BIP_RANGE(10), BIP_RANGE(10),
BIP_RANGE(5), BIP_RANGE(5),
BIP_RANGE(2), BIP_RANGE(2),
BIP_RANGE(1), BIP_RANGE(1),
UNI_RANGE(10), UNI_RANGE(10),
UNI_RANGE(5), UNI_RANGE(5),
UNI_RANGE(2), UNI_RANGE(2),
UNI_RANGE(1) UNI_RANGE(1)
} }
}; };
// Timer / Watchdog Related Defines /* Timer / Watchdog Related Defines */
#define APCI035_TCW_SYNC_ENABLEDISABLE 0
#define APCI035_TCW_SYNC_ENABLEDISABLE 0 #define APCI035_TCW_RELOAD_VALUE 4
#define APCI035_TCW_RELOAD_VALUE 4 #define APCI035_TCW_TIMEBASE 8
#define APCI035_TCW_TIMEBASE 8 #define APCI035_TCW_PROG 12
#define APCI035_TCW_PROG 12 #define APCI035_TCW_TRIG_STATUS 16
#define APCI035_TCW_TRIG_STATUS 16 #define APCI035_TCW_IRQ 20
#define APCI035_TCW_IRQ 20 #define APCI035_TCW_WARN_TIMEVAL 24
#define APCI035_TCW_WARN_TIMEVAL 24 #define APCI035_TCW_WARN_TIMEBASE 28
#define APCI035_TCW_WARN_TIMEBASE 28
#define ADDIDATA_TIMER 0 #define ADDIDATA_TIMER 0
//#define ADDIDATA_WATCHDOG 1 /* #define ADDIDATA_WATCHDOG 1 */
#define APCI035_TW1 0 #define APCI035_TW1 0
#define APCI035_TW2 32 #define APCI035_TW2 32
...@@ -80,50 +73,51 @@ comedi_lrange range_apci035_ai = { 8, { ...@@ -80,50 +73,51 @@ comedi_lrange range_apci035_ai = { 8, {
#define APCI035_EOS 20 #define APCI035_EOS 20
#define APCI035_CHAN_NO 24 #define APCI035_CHAN_NO 24
#define APCI035_CHAN_VAL 28 #define APCI035_CHAN_VAL 28
#define APCI035_CONV_TIME_TIME_BASE 36 #define APCI035_CONV_TIME_TIME_BASE 36
#define APCI035_RELOAD_CONV_TIME_VAL 32 #define APCI035_RELOAD_CONV_TIME_VAL 32
#define APCI035_DELAY_TIME_TIME_BASE 44 #define APCI035_DELAY_TIME_TIME_BASE 44
#define APCI035_RELOAD_DELAY_TIME_VAL 40 #define APCI035_RELOAD_DELAY_TIME_VAL 40
#define ENABLE_EXT_TRIG 1 #define ENABLE_EXT_TRIG 1
#define ENABLE_EXT_GATE 2 #define ENABLE_EXT_GATE 2
#define ENABLE_EXT_TRIG_GATE 3 #define ENABLE_EXT_TRIG_GATE 3
#define ANALOG_INPUT 0 #define ANALOG_INPUT 0
#define TEMPERATURE 1 #define TEMPERATURE 1
#define RESISTANCE 2 #define RESISTANCE 2
#define ADDIDATA_GREATER_THAN_TEST 0 #define ADDIDATA_GREATER_THAN_TEST 0
#define ADDIDATA_LESS_THAN_TEST 1 #define ADDIDATA_LESS_THAN_TEST 1
#define APCI035_MAXVOLT 2.5 #define APCI035_MAXVOLT 2.5
#define ADDIDATA_UNIPOLAR 1 #define ADDIDATA_UNIPOLAR 1
#define ADDIDATA_BIPOLAR 2 #define ADDIDATA_BIPOLAR 2
//ADDIDATA Enable Disable /* ADDIDATA Enable Disable */
#define ADDIDATA_ENABLE 1 #define ADDIDATA_ENABLE 1
#define ADDIDATA_DISABLE 0 #define ADDIDATA_DISABLE 0
// Hardware Layer functions for Apci035 /* Hardware Layer functions for Apci035 */
// TIMER /* TIMER */
// timer value is passed as u seconds /* timer value is passed as u seconds */
INT i_APCI035_ConfigTimerWatchdog(comedi_device * dev, comedi_subdevice * s, INT i_APCI035_ConfigTimerWatchdog(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
INT i_APCI035_StartStopWriteTimerWatchdog(comedi_device * dev, INT i_APCI035_StartStopWriteTimerWatchdog(comedi_device *dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_subdevice *s,
INT i_APCI035_ReadTimerWatchdog(comedi_device * dev, comedi_subdevice * s, comedi_insn *insn, lsampl_t *data);
comedi_insn * insn, lsampl_t * data); INT i_APCI035_ReadTimerWatchdog(comedi_device *dev, comedi_subdevice *s,
comedi_insn *insn, lsampl_t *data);
//Temperature Related Defines (Analog Input Subdevice) /* Temperature Related Defines (Analog Input Subdevice) */
INT i_APCI035_ConfigAnalogInput(comedi_device * dev, comedi_subdevice * s, INT i_APCI035_ConfigAnalogInput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
INT i_APCI035_ReadAnalogInput(comedi_device * dev, comedi_subdevice * s, INT i_APCI035_ReadAnalogInput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
//Interrupt /* Interrupt */
static void v_APCI035_Interrupt(int irq, void *d); static void v_APCI035_Interrupt(int irq, void *d);
//Reset functions /* Reset functions */
INT i_APCI035_Reset(comedi_device * dev); INT i_APCI035_Reset(comedi_device *dev);
/** /*
@verbatim * Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
*
Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module. * ADDI-DATA GmbH
* Dieselstrasse 3
ADDI-DATA GmbH * D-77833 Ottersweier
Dieselstrasse 3 * Tel: +19(0)7223/9493-0
D-77833 Ottersweier * Fax: +49(0)7223/9493-92
Tel: +19(0)7223/9493-0 * http://www.addi-data-com
Fax: +49(0)7223/9493-92 * info@addi-data.com
http://www.addi-data-com *
info@addi-data.com * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. * Software Foundation; either version 2 of the License, or (at your option)
* any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
You shoud also find the complete GPL in the COPYING file accompanying this source code.
@endverbatim
*/
/********* Definitions for APCI-1032 card *****/ /********* Definitions for APCI-1032 card *****/
...@@ -54,17 +47,17 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc ...@@ -54,17 +47,17 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc
//DI //DI
// for di read // for di read
INT i_APCI1032_ConfigDigitalInput(comedi_device * dev, comedi_subdevice * s, INT i_APCI1032_ConfigDigitalInput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
INT i_APCI1032_Read1DigitalInput(comedi_device * dev, comedi_subdevice * s, INT i_APCI1032_Read1DigitalInput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
INT i_APCI1032_ReadMoreDigitalInput(comedi_device * dev, comedi_subdevice * s, INT i_APCI1032_ReadMoreDigitalInput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
// Interrupt functions..... // Interrupt functions.....
static VOID v_APCI1032_Interrupt(int irq, void *d); static VOID v_APCI1032_Interrupt(int irq, void *d);
//Reset //Reset
INT i_APCI1032_Reset(comedi_device * dev); INT i_APCI1032_Reset(comedi_device *dev);
/** /*
@verbatim * Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
*
Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module. * ADDI-DATA GmbH
* Dieselstrasse 3
ADDI-DATA GmbH * D-77833 Ottersweier
Dieselstrasse 3 * Tel: +19(0)7223/9493-0
D-77833 Ottersweier * Fax: +49(0)7223/9493-92
Tel: +19(0)7223/9493-0 * http://www.addi-data-com
Fax: +49(0)7223/9493-92 * info@addi-data.com
http://www.addi-data-com *
info@addi-data.com * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. * Software Foundation; either version 2 of the License, or (at your option)
* any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
You shoud also find the complete GPL in the COPYING file accompanying this source code.
@endverbatim
*/
/********* Definitions for APCI-1500 card *****/ /********* Definitions for APCI-1500 card *****/
...@@ -53,9 +46,10 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc ...@@ -53,9 +46,10 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc
#define START 0 #define START 0
#define STOP 1 #define STOP 1
#define TRIGGER 2 #define TRIGGER 2
/**************************/
/* Zillog I/O enumeration */ /*
/**************************/ * Zillog I/O enumeration
*/
enum { enum {
APCI1500_Z8536_PORT_C, APCI1500_Z8536_PORT_C,
APCI1500_Z8536_PORT_B, APCI1500_Z8536_PORT_B,
...@@ -63,10 +57,9 @@ enum { ...@@ -63,10 +57,9 @@ enum {
APCI1500_Z8536_CONTROL_REGISTER APCI1500_Z8536_CONTROL_REGISTER
}; };
/******************************/ /*
/* Z8536 CIO Internal Address */ * Z8536 CIO Internal Address
/******************************/ */
enum { enum {
APCI1500_RW_MASTER_INTERRUPT_CONTROL, APCI1500_RW_MASTER_INTERRUPT_CONTROL,
APCI1500_RW_MASTER_CONFIGURATION_CONTROL, APCI1500_RW_MASTER_CONFIGURATION_CONTROL,
...@@ -123,35 +116,50 @@ enum { ...@@ -123,35 +116,50 @@ enum {
}; };
/*----------DIGITAL INPUT----------------*/ /*----------DIGITAL INPUT----------------*/
static int i_APCI1500_Initialisation(comedi_device * dev, comedi_subdevice * s, static int i_APCI1500_Initialisation(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
static int i_APCI1500_ConfigDigitalInputEvent(comedi_device * dev, static int i_APCI1500_ConfigDigitalInputEvent(comedi_device *dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_subdevice *s,
comedi_insn *insn,
static int i_APCI1500_StartStopInputEvent(comedi_device * dev, lsampl_t *data);
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data);
static int i_APCI1500_ReadMoreDigitalInput(comedi_device * dev, static int i_APCI1500_StartStopInputEvent(comedi_device *dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_subdevice *s,
comedi_insn *insn, lsampl_t *data);
static int i_APCI1500_ReadMoreDigitalInput(comedi_device *dev,
comedi_subdevice *s,
comedi_insn *insn, lsampl_t *data);
/*---------- DIGITAL OUTPUT------------*/ /*---------- DIGITAL OUTPUT------------*/
static int i_APCI1500_ConfigDigitalOutputErrorInterrupt(comedi_device * dev, static int i_APCI1500_ConfigDigitalOutputErrorInterrupt(comedi_device *dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_subdevice *s,
static int i_APCI1500_WriteDigitalOutput(comedi_device * dev, comedi_insn *insn,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); lsampl_t *data);
static int i_APCI1500_WriteDigitalOutput(comedi_device *dev,
comedi_subdevice *s,
comedi_insn *insn, lsampl_t *data);
/*----------TIMER----------------*/ /*----------TIMER----------------*/
static int i_APCI1500_ConfigCounterTimerWatchdog(comedi_device * dev, static int i_APCI1500_ConfigCounterTimerWatchdog(comedi_device *dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_subdevice *s,
static int i_APCI1500_StartStopTriggerTimerCounterWatchdog(comedi_device * dev, comedi_insn *insn,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); lsampl_t *data);
static int i_APCI1500_ReadCounterTimerWatchdog(comedi_device * dev, static int i_APCI1500_StartStopTriggerTimerCounterWatchdog(comedi_device *dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_subdevice *s,
static int i_APCI1500_ReadInterruptMask(comedi_device * dev, comedi_insn *insn,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); lsampl_t *data);
static int i_APCI1500_ReadCounterTimerWatchdog(comedi_device *dev,
comedi_subdevice *s,
comedi_insn *insn,
lsampl_t *data);
static int i_APCI1500_ReadInterruptMask(comedi_device *dev,
comedi_subdevice *s,
comedi_insn *insn, lsampl_t *data);
/*----------INTERRUPT HANDLER------*/ /*----------INTERRUPT HANDLER------*/
static void v_APCI1500_Interrupt(int irq, void *d); static void v_APCI1500_Interrupt(int irq, void *d);
static int i_APCI1500_ConfigureInterrupt(comedi_device * dev, static int i_APCI1500_ConfigureInterrupt(comedi_device *dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_subdevice *s,
comedi_insn *insn, lsampl_t *data);
/*----------RESET---------------*/ /*----------RESET---------------*/
static int i_APCI1500_Reset(comedi_device * dev); static int i_APCI1500_Reset(comedi_device *dev);
/** /*
@verbatim * Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
*
Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module. * ADDI-DATA GmbH
* Dieselstrasse 3
ADDI-DATA GmbH * D-77833 Ottersweier
Dieselstrasse 3 * Tel: +19(0)7223/9493-0
D-77833 Ottersweier * Fax: +49(0)7223/9493-92
Tel: +19(0)7223/9493-0 * http://www.addi-data-com
Fax: +49(0)7223/9493-92 * info@addi-data.com
http://www.addi-data-com *
info@addi-data.com * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. * Software Foundation; either version 2 of the License, or (at your option)
* any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
You shoud also find the complete GPL in the COPYING file accompanying this source code.
@endverbatim
*/
/********* Definitions for APCI-1516 card *****/ /********* Definitions for APCI-1516 card *****/
...@@ -45,27 +38,27 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc ...@@ -45,27 +38,27 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc
// Hardware Layer functions for Apci1516 // Hardware Layer functions for Apci1516
//Digital Input //Digital Input
INT i_APCI1516_ReadMoreDigitalInput(comedi_device * dev, comedi_subdevice * s, INT i_APCI1516_ReadMoreDigitalInput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
INT i_APCI1516_Read1DigitalInput(comedi_device * dev, comedi_subdevice * s, INT i_APCI1516_Read1DigitalInput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
//Digital Output //Digital Output
int i_APCI1516_ConfigDigitalOutput(comedi_device * dev, comedi_subdevice * s, int i_APCI1516_ConfigDigitalOutput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
INT i_APCI1516_WriteDigitalOutput(comedi_device * dev, comedi_subdevice * s, INT i_APCI1516_WriteDigitalOutput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
INT i_APCI1516_ReadDigitalOutput(comedi_device * dev, comedi_subdevice * s, INT i_APCI1516_ReadDigitalOutput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
// TIMER // TIMER
// timer value is passed as u seconds // timer value is passed as u seconds
int i_APCI1516_ConfigWatchdog(comedi_device * dev, comedi_subdevice * s, int i_APCI1516_ConfigWatchdog(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
int i_APCI1516_StartStopWriteWatchdog(comedi_device * dev, comedi_subdevice * s, int i_APCI1516_StartStopWriteWatchdog(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
int i_APCI1516_ReadWatchdog(comedi_device * dev, comedi_subdevice * s, int i_APCI1516_ReadWatchdog(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
//reset //reset
INT i_APCI1516_Reset(comedi_device * dev); INT i_APCI1516_Reset(comedi_device *dev);
/** /*
@verbatim * Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
*
Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module. * ADDI-DATA GmbH
* Dieselstrasse 3
ADDI-DATA GmbH * D-77833 Ottersweier
Dieselstrasse 3 * Tel: +19(0)7223/9493-0
D-77833 Ottersweier * Fax: +49(0)7223/9493-92
Tel: +19(0)7223/9493-0 * http://www.addi-data-com
Fax: +49(0)7223/9493-92 * info@addi-data.com
http://www.addi-data-com *
info@addi-data.com * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. * Software Foundation; either version 2 of the License, or (at your option)
* any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
You shoud also find the complete GPL in the COPYING file accompanying this source code.
@endverbatim
*/
/********* Definitions for APCI-1564 card *****/ /********* Definitions for APCI-1564 card *****/
...@@ -89,34 +82,38 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc ...@@ -89,34 +82,38 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc
//DI //DI
// for di read // for di read
INT i_APCI1564_ConfigDigitalInput(comedi_device * dev, comedi_subdevice * s, INT i_APCI1564_ConfigDigitalInput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
INT i_APCI1564_Read1DigitalInput(comedi_device * dev, comedi_subdevice * s, INT i_APCI1564_Read1DigitalInput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
INT i_APCI1564_ReadMoreDigitalInput(comedi_device * dev, comedi_subdevice * s, INT i_APCI1564_ReadMoreDigitalInput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
//DO //DO
int i_APCI1564_ConfigDigitalOutput(comedi_device * dev, comedi_subdevice * s, int i_APCI1564_ConfigDigitalOutput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
INT i_APCI1564_WriteDigitalOutput(comedi_device * dev, comedi_subdevice * s, INT i_APCI1564_WriteDigitalOutput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
INT i_APCI1564_ReadDigitalOutput(comedi_device * dev, comedi_subdevice * s, INT i_APCI1564_ReadDigitalOutput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
int i_APCI1564_ReadInterruptStatus(comedi_device * dev, comedi_subdevice * s, int i_APCI1564_ReadInterruptStatus(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
// TIMER // TIMER
// timer value is passed as u seconds // timer value is passed as u seconds
INT i_APCI1564_ConfigTimerCounterWatchdog(comedi_device * dev, INT i_APCI1564_ConfigTimerCounterWatchdog(comedi_device *dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_subdevice *s,
int i_APCI1564_StartStopWriteTimerCounterWatchdog(comedi_device * dev, comedi_insn *insn, lsampl_t *data);
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); int i_APCI1564_StartStopWriteTimerCounterWatchdog(comedi_device *dev,
int i_APCI1564_ReadTimerCounterWatchdog(comedi_device * dev, comedi_subdevice *s,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_insn *insn,
lsampl_t *data);
int i_APCI1564_ReadTimerCounterWatchdog(comedi_device *dev,
comedi_subdevice *s,
comedi_insn *insn, lsampl_t *data);
// INTERRUPT // INTERRUPT
static VOID v_APCI1564_Interrupt(int irq, void *d); static VOID v_APCI1564_Interrupt(int irq, void *d);
// RESET // RESET
INT i_APCI1564_Reset(comedi_device * dev); INT i_APCI1564_Reset(comedi_device *dev);
/** /*
@verbatim * Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
*
Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module. * ADDI-DATA GmbH
* Dieselstrasse 3
ADDI-DATA GmbH * D-77833 Ottersweier
Dieselstrasse 3 * Tel: +19(0)7223/9493-0
D-77833 Ottersweier * Fax: +49(0)7223/9493-92
Tel: +19(0)7223/9493-0 * http://www.addi-data-com
Fax: +49(0)7223/9493-92 * info@addi-data.com
http://www.addi-data-com *
info@addi-data.com * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. * Software Foundation; either version 2 of the License, or (at your option)
* any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
You shoud also find the complete GPL in the COPYING file accompanying this source code.
@endverbatim
*/
#ifndef COMEDI_SUBD_TTLIO #ifndef COMEDI_SUBD_TTLIO
#define COMEDI_SUBD_TTLIO 11 /* Digital Input Output But TTL */ #define COMEDI_SUBD_TTLIO 11 /* Digital Input Output But TTL */
...@@ -50,17 +43,17 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc ...@@ -50,17 +43,17 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc
static const comedi_lrange range_apci16xx_ttl = { 12, static const comedi_lrange range_apci16xx_ttl = { 12,
{BIP_RANGE(1), {BIP_RANGE(1),
BIP_RANGE(1), BIP_RANGE(1),
BIP_RANGE(1), BIP_RANGE(1),
BIP_RANGE(1), BIP_RANGE(1),
BIP_RANGE(1), BIP_RANGE(1),
BIP_RANGE(1), BIP_RANGE(1),
BIP_RANGE(1), BIP_RANGE(1),
BIP_RANGE(1), BIP_RANGE(1),
BIP_RANGE(1), BIP_RANGE(1),
BIP_RANGE(1), BIP_RANGE(1),
BIP_RANGE(1), BIP_RANGE(1),
BIP_RANGE(1)} BIP_RANGE(1)}
}; };
/* /*
...@@ -69,8 +62,9 @@ static const comedi_lrange range_apci16xx_ttl = { 12, ...@@ -69,8 +62,9 @@ static const comedi_lrange range_apci16xx_ttl = { 12,
+----------------------------------------------------------------------------+ +----------------------------------------------------------------------------+
*/ */
int i_APCI16XX_InsnConfigInitTTLIO(comedi_device * dev, int i_APCI16XX_InsnConfigInitTTLIO(comedi_device *dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_subdevice *s, comedi_insn *insn,
lsampl_t *data);
/* /*
+----------------------------------------------------------------------------+ +----------------------------------------------------------------------------+
...@@ -78,11 +72,13 @@ int i_APCI16XX_InsnConfigInitTTLIO(comedi_device * dev, ...@@ -78,11 +72,13 @@ int i_APCI16XX_InsnConfigInitTTLIO(comedi_device * dev,
+----------------------------------------------------------------------------+ +----------------------------------------------------------------------------+
*/ */
int i_APCI16XX_InsnBitsReadTTLIO(comedi_device * dev, int i_APCI16XX_InsnBitsReadTTLIO(comedi_device *dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_subdevice *s, comedi_insn *insn,
lsampl_t *data);
int i_APCI16XX_InsnReadTTLIOAllPortValue(comedi_device * dev, int i_APCI16XX_InsnReadTTLIOAllPortValue(comedi_device *dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_subdevice *s,
comedi_insn *insn, lsampl_t *data);
/* /*
+----------------------------------------------------------------------------+ +----------------------------------------------------------------------------+
...@@ -90,8 +86,9 @@ int i_APCI16XX_InsnReadTTLIOAllPortValue(comedi_device * dev, ...@@ -90,8 +86,9 @@ int i_APCI16XX_InsnReadTTLIOAllPortValue(comedi_device * dev,
+----------------------------------------------------------------------------+ +----------------------------------------------------------------------------+
*/ */
int i_APCI16XX_InsnBitsWriteTTLIO(comedi_device * dev, int i_APCI16XX_InsnBitsWriteTTLIO(comedi_device *dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_subdevice *s, comedi_insn *insn,
lsampl_t *data);
int i_APCI16XX_Reset(comedi_device * dev); int i_APCI16XX_Reset(comedi_device *dev);
#endif #endif
/** /*
@verbatim * Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
*
Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module. * ADDI-DATA GmbH
* Dieselstrasse 3
ADDI-DATA GmbH * D-77833 Ottersweier
Dieselstrasse 3 * Tel: +19(0)7223/9493-0
D-77833 Ottersweier * Fax: +49(0)7223/9493-92
Tel: +19(0)7223/9493-0 * http://www.addi-data-com
Fax: +49(0)7223/9493-92 * info@addi-data.com
http://www.addi-data-com *
info@addi-data.com * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. * Software Foundation; either version 2 of the License, or (at your option)
* any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
You shoud also find the complete GPL in the COPYING file accompanying this source code.
@endverbatim
*/
/********* Definitions for APCI-2016 card *****/ /********* Definitions for APCI-2016 card *****/
#define APCI2016_BOARD_VENDOR_ID 0x15B8 #define APCI2016_BOARD_VENDOR_ID 0x15B8
...@@ -47,26 +40,26 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc ...@@ -47,26 +40,26 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc
// Hardware Layer functions for Apci2016 // Hardware Layer functions for Apci2016
//DO //DO
int i_APCI2016_ConfigDigitalOutput(comedi_device * dev, comedi_subdevice * s, int i_APCI2016_ConfigDigitalOutput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
int i_APCI2016_WriteDigitalOutput(comedi_device * dev, comedi_subdevice * s, int i_APCI2016_WriteDigitalOutput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
int i_APCI2016_BitsDigitalOutput(comedi_device * dev, comedi_subdevice * s, int i_APCI2016_BitsDigitalOutput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
// TIMER // TIMER
// timer value is passed as u seconds // timer value is passed as u seconds
int i_APCI2016_ConfigWatchdog(comedi_device * dev, comedi_subdevice * s, int i_APCI2016_ConfigWatchdog(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
int i_APCI2016_StartStopWriteWatchdog(comedi_device * dev, comedi_subdevice * s, int i_APCI2016_StartStopWriteWatchdog(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
int i_APCI2016_ReadWatchdog(comedi_device * dev, comedi_subdevice * s, int i_APCI2016_ReadWatchdog(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
// Interrupt functions..... // Interrupt functions.....
...@@ -74,4 +67,4 @@ int i_APCI2016_ReadWatchdog(comedi_device * dev, comedi_subdevice * s, ...@@ -74,4 +67,4 @@ int i_APCI2016_ReadWatchdog(comedi_device * dev, comedi_subdevice * s,
//VOID v_APCI2016_Interrupt(int irq, void *d); //VOID v_APCI2016_Interrupt(int irq, void *d);
// RESET // RESET
INT i_APCI2016_Reset(comedi_device * dev); INT i_APCI2016_Reset(comedi_device *dev);
/** /*
@verbatim * Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
*
* ADDI-DATA GmbH
* Dieselstrasse 3
* D-77833 Ottersweier
* Tel: +19(0)7223/9493-0
* Fax: +49(0)7223/9493-92
* http://www.addi-data-com
* info@addi-data.com
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*/
Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
ADDI-DATA GmbH
Dieselstrasse 3
D-77833 Ottersweier
Tel: +19(0)7223/9493-0
Fax: +49(0)7223/9493-92
http://www.addi-data-com
info@addi-data.com
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
You shoud also find the complete GPL in the COPYING file accompanying this source code.
@endverbatim
*/
/********* Definitions for APCI-2032 card *****/ /********* Definitions for APCI-2032 card *****/
// Card Specific information // Card Specific information
...@@ -61,27 +55,27 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc ...@@ -61,27 +55,27 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc
// Hardware Layer functions for Apci2032 // Hardware Layer functions for Apci2032
//DO //DO
int i_APCI2032_ConfigDigitalOutput(comedi_device * dev, comedi_subdevice * s, int i_APCI2032_ConfigDigitalOutput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
INT i_APCI2032_WriteDigitalOutput(comedi_device * dev, comedi_subdevice * s, INT i_APCI2032_WriteDigitalOutput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
INT i_APCI2032_ReadDigitalOutput(comedi_device * dev, comedi_subdevice * s, INT i_APCI2032_ReadDigitalOutput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
int i_APCI2032_ReadInterruptStatus(comedi_device * dev, comedi_subdevice * s, int i_APCI2032_ReadInterruptStatus(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
// TIMER // TIMER
// timer value is passed as u seconds // timer value is passed as u seconds
INT i_APCI2032_ConfigWatchdog(comedi_device * dev, comedi_subdevice * s, INT i_APCI2032_ConfigWatchdog(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
int i_APCI2032_StartStopWriteWatchdog(comedi_device * dev, comedi_subdevice * s, int i_APCI2032_StartStopWriteWatchdog(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
int i_APCI2032_ReadWatchdog(comedi_device * dev, comedi_subdevice * s, int i_APCI2032_ReadWatchdog(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
// Interrupt functions..... // Interrupt functions.....
void v_APCI2032_Interrupt(int irq, void *d); void v_APCI2032_Interrupt(int irq, void *d);
//Reset functions //Reset functions
int i_APCI2032_Reset(comedi_device * dev); int i_APCI2032_Reset(comedi_device *dev);
/** /*
@verbatim * Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
*
* ADDI-DATA GmbH
* Dieselstrasse 3
* D-77833 Ottersweier
* Tel: +19(0)7223/9493-0
* Fax: +49(0)7223/9493-92
* http://www.addi-data-com
* info@addi-data.com
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*/
Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
ADDI-DATA GmbH
Dieselstrasse 3
D-77833 Ottersweier
Tel: +19(0)7223/9493-0
Fax: +49(0)7223/9493-92
http://www.addi-data-com
info@addi-data.com
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
You shoud also find the complete GPL in the COPYING file accompanying this source code.
@endverbatim
*/
/********* Definitions for APCI-2200 card *****/ /********* Definitions for APCI-2200 card *****/
// Card Specific information // Card Specific information
...@@ -42,26 +36,26 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc ...@@ -42,26 +36,26 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc
// Hardware Layer functions for Apci2200 // Hardware Layer functions for Apci2200
//Digital Input //Digital Input
INT i_APCI2200_ReadMoreDigitalInput(comedi_device * dev, comedi_subdevice * s, INT i_APCI2200_ReadMoreDigitalInput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
INT i_APCI2200_Read1DigitalInput(comedi_device * dev, comedi_subdevice * s, INT i_APCI2200_Read1DigitalInput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
//Digital Output //Digital Output
int i_APCI2200_ConfigDigitalOutput(comedi_device * dev, comedi_subdevice * s, int i_APCI2200_ConfigDigitalOutput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
INT i_APCI2200_WriteDigitalOutput(comedi_device * dev, comedi_subdevice * s, INT i_APCI2200_WriteDigitalOutput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
INT i_APCI2200_ReadDigitalOutput(comedi_device * dev, comedi_subdevice * s, INT i_APCI2200_ReadDigitalOutput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
// TIMER // TIMER
int i_APCI2200_ConfigWatchdog(comedi_device * dev, comedi_subdevice * s, int i_APCI2200_ConfigWatchdog(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
int i_APCI2200_StartStopWriteWatchdog(comedi_device * dev, comedi_subdevice * s, int i_APCI2200_StartStopWriteWatchdog(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
int i_APCI2200_ReadWatchdog(comedi_device * dev, comedi_subdevice * s, int i_APCI2200_ReadWatchdog(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
//reset //reset
INT i_APCI2200_Reset(comedi_device * dev); INT i_APCI2200_Reset(comedi_device *dev);
// hwdrv_apci3120.h // hwdrv_apci3120.h
/**
@verbatim
Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
ADDI-DATA GmbH
Dieselstrasse 3
D-77833 Ottersweier
Tel: +19(0)7223/9493-0
Fax: +49(0)7223/9493-92
http://www.addi-data-com
info@addi-data.com
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
You shoud also find the complete GPL in the COPYING file accompanying this source code.
@endverbatim
*/
/* /*
* Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
+-----------------------------------------------------------------------+ *
| (C) ADDI-DATA GmbH Dieselstrasse 3 D-77833 Ottersweier | * ADDI-DATA GmbH
+-----------------------------------------------------------------------+ * Dieselstrasse 3
| Tel : +49 (0) 7223/9493-0 | email : info@addi-data.com | * D-77833 Ottersweier
| Fax : +49 (0) 7223/9493-92 | Internet : http://www.addi-data.com | * Tel: +19(0)7223/9493-0
+-----------------------------------------------------------------------+ * Fax: +49(0)7223/9493-92
| Project : ADDI DATA | Compiler : GCC | * http://www.addi-data-com
| Modulname : hwdrv_apci3120.h | Version : 2.96 Redhat Linux | * info@addi-data.com
| | kernel-2.4.2 | *
+-------------------------------+---------------------------------------+ * This program is free software; you can redistribute it and/or modify it
| Author : | Date : | * under the terms of the GNU General Public License as published by the Free
+-----------------------------------------------------------------------+ * Software Foundation; either version 2 of the License, or (at your option)
| Description :Header file for apci3120 hardware abstraction layer | * any later version.
+-----------------------------------------------------------------------+ */
| UPDATE'S |
+-----------------------------------------------------------------------+
| Date | Author | Description of updates |
+----------+-----------+------------------------------------------------+
| | | |
| | | |
| | | |
| | | |
| | | |
+----------+-----------+------------------------------------------------+
| | | |
| | | |
| | | |
+----------+-----------+------------------------------------------------+
*/
// comedi related defines // comedi related defines
//ANALOG INPUT RANGE //ANALOG INPUT RANGE
static const comedi_lrange range_apci3120_ai = { 8, { static const comedi_lrange range_apci3120_ai = { 8, {
BIP_RANGE(10), BIP_RANGE(10),
BIP_RANGE(5), BIP_RANGE(5),
BIP_RANGE(2), BIP_RANGE(2),
BIP_RANGE(1), BIP_RANGE(1),
UNI_RANGE(10), UNI_RANGE(10),
UNI_RANGE(5), UNI_RANGE(5),
UNI_RANGE(2), UNI_RANGE(2),
UNI_RANGE(1) UNI_RANGE(1)
} }
}; };
// ANALOG OUTPUT RANGE // ANALOG OUTPUT RANGE
static const comedi_lrange range_apci3120_ao = { 2, { static const comedi_lrange range_apci3120_ao = { 2, {
BIP_RANGE(10), BIP_RANGE(10),
UNI_RANGE(10) UNI_RANGE(10)
} }
}; };
#define APCI3120_BIPOLAR_RANGES 4 // used for test on mixture of BIP/UNI ranges #define APCI3120_BIPOLAR_RANGES 4 // used for test on mixture of BIP/UNI ranges
...@@ -216,61 +178,64 @@ typedef struct { ...@@ -216,61 +178,64 @@ typedef struct {
// Function Declaration For APCI-3120 // Function Declaration For APCI-3120
// Internal functions // Internal functions
int i_APCI3120_SetupChannelList(comedi_device * dev, comedi_subdevice * s, int i_APCI3120_SetupChannelList(comedi_device *dev, comedi_subdevice *s,
int n_chan, unsigned int *chanlist, char check); int n_chan, unsigned int *chanlist, char check);
int i_APCI3120_ExttrigEnable(comedi_device * dev); int i_APCI3120_ExttrigEnable(comedi_device *dev);
int i_APCI3120_ExttrigDisable(comedi_device * dev); int i_APCI3120_ExttrigDisable(comedi_device *dev);
int i_APCI3120_StopCyclicAcquisition(comedi_device * dev, comedi_subdevice * s); int i_APCI3120_StopCyclicAcquisition(comedi_device *dev, comedi_subdevice *s);
int i_APCI3120_Reset(comedi_device * dev); int i_APCI3120_Reset(comedi_device *dev);
int i_APCI3120_CyclicAnalogInput(int mode, comedi_device * dev, int i_APCI3120_CyclicAnalogInput(int mode, comedi_device *dev,
comedi_subdevice * s); comedi_subdevice *s);
// Interrupt functions // Interrupt functions
void v_APCI3120_Interrupt(int irq, void *d); void v_APCI3120_Interrupt(int irq, void *d);
//UPDATE-0.7.57->0.7.68 void v_APCI3120_InterruptDmaMoveBlock16bit(comedi_device *dev,comedi_subdevice *s,sampl_t *dma,sampl_t *data,int n); //UPDATE-0.7.57->0.7.68 void v_APCI3120_InterruptDmaMoveBlock16bit(comedi_device *dev,comedi_subdevice *s,sampl_t *dma,sampl_t *data,int n);
void v_APCI3120_InterruptDmaMoveBlock16bit(comedi_device * dev, void v_APCI3120_InterruptDmaMoveBlock16bit(comedi_device *dev,
comedi_subdevice * s, sampl_t * dma_buffer, unsigned int num_samples); comedi_subdevice *s,
int i_APCI3120_InterruptHandleEos(comedi_device * dev); sampl_t *dma_buffer,
unsigned int num_samples);
int i_APCI3120_InterruptHandleEos(comedi_device *dev);
void v_APCI3120_InterruptDma(int irq, void *d); void v_APCI3120_InterruptDma(int irq, void *d);
// TIMER // TIMER
int i_APCI3120_InsnConfigTimer(comedi_device * dev, comedi_subdevice * s, int i_APCI3120_InsnConfigTimer(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
int i_APCI3120_InsnWriteTimer(comedi_device * dev, comedi_subdevice * s, int i_APCI3120_InsnWriteTimer(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
int i_APCI3120_InsnReadTimer(comedi_device * dev, comedi_subdevice * s, int i_APCI3120_InsnReadTimer(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
//DI //DI
// for di read // for di read
int i_APCI3120_InsnBitsDigitalInput(comedi_device * dev, comedi_subdevice * s, int i_APCI3120_InsnBitsDigitalInput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
int i_APCI3120_InsnReadDigitalInput(comedi_device * dev, comedi_subdevice * s, int i_APCI3120_InsnReadDigitalInput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
//DO //DO
//int i_APCI3120_WriteDigitalOutput(comedi_device *dev, BYTE data); //int i_APCI3120_WriteDigitalOutput(comedi_device *dev, BYTE data);
int i_APCI3120_InsnConfigDigitalOutput(comedi_device * dev, int i_APCI3120_InsnConfigDigitalOutput(comedi_device *dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_subdevice *s, comedi_insn *insn,
int i_APCI3120_InsnBitsDigitalOutput(comedi_device * dev, comedi_subdevice * s, lsampl_t *data);
comedi_insn * insn, lsampl_t * data); int i_APCI3120_InsnBitsDigitalOutput(comedi_device *dev, comedi_subdevice *s,
int i_APCI3120_InsnWriteDigitalOutput(comedi_device * dev, comedi_subdevice * s, comedi_insn *insn, lsampl_t *data);
comedi_insn * insn, lsampl_t * data); int i_APCI3120_InsnWriteDigitalOutput(comedi_device *dev, comedi_subdevice *s,
comedi_insn *insn, lsampl_t *data);
//AO //AO
//int i_APCI3120_Write1AnalogValue(comedi_device *dev,UINT ui_Range,UINT ui_Channel,UINT data ); //int i_APCI3120_Write1AnalogValue(comedi_device *dev,UINT ui_Range,UINT ui_Channel,UINT data );
int i_APCI3120_InsnWriteAnalogOutput(comedi_device * dev, comedi_subdevice * s, int i_APCI3120_InsnWriteAnalogOutput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
//AI HArdware layer //AI HArdware layer
int i_APCI3120_InsnConfigAnalogInput(comedi_device * dev, comedi_subdevice * s, int i_APCI3120_InsnConfigAnalogInput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
int i_APCI3120_InsnReadAnalogInput(comedi_device * dev, comedi_subdevice * s, int i_APCI3120_InsnReadAnalogInput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
int i_APCI3120_CommandTestAnalogInput(comedi_device * dev, comedi_subdevice * s, int i_APCI3120_CommandTestAnalogInput(comedi_device *dev, comedi_subdevice *s,
comedi_cmd * cmd); comedi_cmd *cmd);
int i_APCI3120_CommandAnalogInput(comedi_device * dev, comedi_subdevice * s); int i_APCI3120_CommandAnalogInput(comedi_device *dev, comedi_subdevice *s);
//int i_APCI3120_CancelAnalogInput(comedi_device * dev, comedi_subdevice * s); //int i_APCI3120_CancelAnalogInput(comedi_device *dev, comedi_subdevice *s);
int i_APCI3120_StopCyclicAcquisition(comedi_device * dev, comedi_subdevice * s); int i_APCI3120_StopCyclicAcquisition(comedi_device *dev, comedi_subdevice *s);
/** /*
@verbatim * Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
*
Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module. * ADDI-DATA GmbH
* Dieselstrasse 3
ADDI-DATA GmbH * D-77833 Ottersweier
Dieselstrasse 3 * Tel: +19(0)7223/9493-0
D-77833 Ottersweier * Fax: +49(0)7223/9493-92
Tel: +19(0)7223/9493-0 * http://www.addi-data-com
Fax: +49(0)7223/9493-92 * info@addi-data.com
http://www.addi-data-com *
info@addi-data.com * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. * Software Foundation; either version 2 of the License, or (at your option)
* any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
You shoud also find the complete GPL in the COPYING file accompanying this source code.
@endverbatim
*/
// Card Specific information // Card Specific information
#define APCI3200_BOARD_VENDOR_ID 0x15B8 #define APCI3200_BOARD_VENDOR_ID 0x15B8
...@@ -39,27 +32,27 @@ struct { ...@@ -39,27 +32,27 @@ struct {
INT i_Interrupt; INT i_Interrupt;
INT i_ModuleSelection; INT i_ModuleSelection;
} Config_Parameters_Module1, Config_Parameters_Module2, } Config_Parameters_Module1, Config_Parameters_Module2,
Config_Parameters_Module3, Config_Parameters_Module4; Config_Parameters_Module3, Config_Parameters_Module4;
//ANALOG INPUT RANGE //ANALOG INPUT RANGE
static const comedi_lrange range_apci3200_ai = { 8, { static const comedi_lrange range_apci3200_ai = { 8, {
BIP_RANGE(10), BIP_RANGE(10),
BIP_RANGE(5), BIP_RANGE(5),
BIP_RANGE(2), BIP_RANGE(2),
BIP_RANGE(1), BIP_RANGE(1),
UNI_RANGE(10), UNI_RANGE(10),
UNI_RANGE(5), UNI_RANGE(5),
UNI_RANGE(2), UNI_RANGE(2),
UNI_RANGE(1) UNI_RANGE(1)
} }
}; };
static const comedi_lrange range_apci3300_ai = { 4, { static const comedi_lrange range_apci3300_ai = { 4, {
UNI_RANGE(10), UNI_RANGE(10),
UNI_RANGE(5), UNI_RANGE(5),
UNI_RANGE(2), UNI_RANGE(2),
UNI_RANGE(1) UNI_RANGE(1)
} }
}; };
//Analog Input related Defines //Analog Input related Defines
...@@ -161,31 +154,34 @@ typedef struct { ...@@ -161,31 +154,34 @@ typedef struct {
//AI //AI
INT i_APCI3200_ConfigAnalogInput(comedi_device * dev, comedi_subdevice * s, INT i_APCI3200_ConfigAnalogInput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
INT i_APCI3200_ReadAnalogInput(comedi_device * dev, comedi_subdevice * s, INT i_APCI3200_ReadAnalogInput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
INT i_APCI3200_InsnWriteReleaseAnalogInput(comedi_device * dev, INT i_APCI3200_InsnWriteReleaseAnalogInput(comedi_device *dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_subdevice *s,
INT i_APCI3200_InsnBits_AnalogInput_Test(comedi_device * dev, comedi_insn *insn, lsampl_t *data);
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); INT i_APCI3200_InsnBits_AnalogInput_Test(comedi_device *dev,
INT i_APCI3200_StopCyclicAcquisition(comedi_device * dev, comedi_subdevice * s); comedi_subdevice *s,
INT i_APCI3200_InterruptHandleEos(comedi_device * dev); comedi_insn *insn, lsampl_t *data);
INT i_APCI3200_CommandTestAnalogInput(comedi_device * dev, comedi_subdevice * s, INT i_APCI3200_StopCyclicAcquisition(comedi_device *dev, comedi_subdevice *s);
comedi_cmd * cmd); INT i_APCI3200_InterruptHandleEos(comedi_device *dev);
INT i_APCI3200_CommandAnalogInput(comedi_device * dev, comedi_subdevice * s); INT i_APCI3200_CommandTestAnalogInput(comedi_device *dev, comedi_subdevice *s,
INT i_APCI3200_ReadDigitalInput(comedi_device * dev, comedi_subdevice * s, comedi_cmd *cmd);
comedi_insn * insn, lsampl_t * data); INT i_APCI3200_CommandAnalogInput(comedi_device *dev, comedi_subdevice *s);
INT i_APCI3200_ReadDigitalInput(comedi_device *dev, comedi_subdevice *s,
comedi_insn *insn, lsampl_t *data);
//Interrupt //Interrupt
void v_APCI3200_Interrupt(int irq, void *d); void v_APCI3200_Interrupt(int irq, void *d);
int i_APCI3200_InterruptHandleEos(comedi_device * dev); int i_APCI3200_InterruptHandleEos(comedi_device *dev);
//Reset functions //Reset functions
INT i_APCI3200_Reset(comedi_device * dev); INT i_APCI3200_Reset(comedi_device *dev);
int i_APCI3200_ReadCJCCalOffset(comedi_device * dev, lsampl_t * data); int i_APCI3200_ReadCJCCalOffset(comedi_device *dev, lsampl_t *data);
int i_APCI3200_ReadCJCValue(comedi_device * dev, lsampl_t * data); int i_APCI3200_ReadCJCValue(comedi_device *dev, lsampl_t *data);
int i_APCI3200_ReadCalibrationGainValue(comedi_device * dev, UINT * data); int i_APCI3200_ReadCalibrationGainValue(comedi_device *dev, UINT *data);
int i_APCI3200_ReadCalibrationOffsetValue(comedi_device * dev, UINT * data); int i_APCI3200_ReadCalibrationOffsetValue(comedi_device *dev, UINT *data);
int i_APCI3200_Read1AnalogInputChannel(comedi_device * dev, int i_APCI3200_Read1AnalogInputChannel(comedi_device *dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_subdevice *s, comedi_insn *insn,
int i_APCI3200_ReadCJCCalGain(comedi_device * dev, lsampl_t * data); lsampl_t *data);
int i_APCI3200_ReadCJCCalGain(comedi_device *dev, lsampl_t *data);
/** /*
@verbatim * Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
*
* ADDI-DATA GmbH
* Dieselstrasse 3
* D-77833 Ottersweier
* Tel: +19(0)7223/9493-0
* Fax: +49(0)7223/9493-92
* http://www.addi-data-com
* info@addi-data.com
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at your option)
* any later version.
*/
Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
ADDI-DATA GmbH
Dieselstrasse 3
D-77833 Ottersweier
Tel: +19(0)7223/9493-0
Fax: +49(0)7223/9493-92
http://www.addi-data-com
info@addi-data.com
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
You shoud also find the complete GPL in the COPYING file accompanying this source code.
@endverbatim
*/
// Card Specific information // Card Specific information
#define APCI3501_BOARD_VENDOR_ID 0x15B8 #define APCI3501_BOARD_VENDOR_ID 0x15B8
#define APCI3501_ADDRESS_RANGE 255 #define APCI3501_ADDRESS_RANGE 255
...@@ -39,9 +33,9 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc ...@@ -39,9 +33,9 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc
#define MODE1 1 #define MODE1 1
// ANALOG OUTPUT RANGE // ANALOG OUTPUT RANGE
comedi_lrange range_apci3501_ao = { 2, { comedi_lrange range_apci3501_ao = { 2, {
BIP_RANGE(10), BIP_RANGE(10),
UNI_RANGE(10) UNI_RANGE(10)
} }
}; };
//Watchdog Related Defines //Watchdog Related Defines
...@@ -61,36 +55,40 @@ comedi_lrange range_apci3501_ao = { 2, { ...@@ -61,36 +55,40 @@ comedi_lrange range_apci3501_ao = { 2, {
// Hardware Layer functions for Apci3501 // Hardware Layer functions for Apci3501
//AO //AO
INT i_APCI3501_ConfigAnalogOutput(comedi_device * dev, comedi_subdevice * s, INT i_APCI3501_ConfigAnalogOutput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
INT i_APCI3501_WriteAnalogOutput(comedi_device * dev, comedi_subdevice * s, INT i_APCI3501_WriteAnalogOutput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
//DI //DI
// for di read // for di read
//INT i_APCI3501_ReadDigitalInput(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data); //INT i_APCI3501_ReadDigitalInput(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data);
INT i_APCI3501_ReadDigitalInput(comedi_device * dev, comedi_subdevice * s, INT i_APCI3501_ReadDigitalInput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
//DO //DO
int i_APCI3501_ConfigDigitalOutput(comedi_device * dev, comedi_subdevice * s, int i_APCI3501_ConfigDigitalOutput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
INT i_APCI3501_WriteDigitalOutput(comedi_device * dev, comedi_subdevice * s, INT i_APCI3501_WriteDigitalOutput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
INT i_APCI3501_ReadDigitalOutput(comedi_device * dev, comedi_subdevice * s, INT i_APCI3501_ReadDigitalOutput(comedi_device *dev, comedi_subdevice *s,
comedi_insn * insn, lsampl_t * data); comedi_insn *insn, lsampl_t *data);
// TIMER // TIMER
// timer value is passed as u seconds // timer value is passed as u seconds
INT i_APCI3501_ConfigTimerCounterWatchdog(comedi_device * dev, INT i_APCI3501_ConfigTimerCounterWatchdog(comedi_device *dev,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_subdevice *s,
int i_APCI3501_StartStopWriteTimerCounterWatchdog(comedi_device * dev, comedi_insn *insn, lsampl_t *data);
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); int i_APCI3501_StartStopWriteTimerCounterWatchdog(comedi_device *dev,
int i_APCI3501_ReadTimerCounterWatchdog(comedi_device * dev, comedi_subdevice *s,
comedi_subdevice * s, comedi_insn * insn, lsampl_t * data); comedi_insn *insn,
lsampl_t *data);
int i_APCI3501_ReadTimerCounterWatchdog(comedi_device *dev,
comedi_subdevice *s,
comedi_insn *insn, lsampl_t *data);
//Interrupt //Interrupt
void v_APCI3501_Interrupt(int irq, void *d); void v_APCI3501_Interrupt(int irq, void *d);
//Reset functions //Reset functions
int i_APCI3501_Reset(comedi_device * dev); int i_APCI3501_Reset(comedi_device *dev);
/** /*
@verbatim * Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module.
*
Copyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module. * ADDI-DATA GmbH
* Dieselstrasse 3
ADDI-DATA GmbH * D-77833 Ottersweier
Dieselstrasse 3 * Tel: +19(0)7223/9493-0
D-77833 Ottersweier * Fax: +49(0)7223/9493-92
Tel: +19(0)7223/9493-0 * http://www.addi-data-com
Fax: +49(0)7223/9493-92 * info@addi-data.com
http://www.addi-data-com *
info@addi-data.com * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. * Software Foundation; either version 2 of the License, or (at your option)
* any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */
You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
You shoud also find the complete GPL in the COPYING file accompanying this source code.
@endverbatim
*/
#ifndef COMEDI_SUBD_TTLIO #ifndef COMEDI_SUBD_TTLIO
#define COMEDI_SUBD_TTLIO 11 /* Digital Input Output But TTL */ #define COMEDI_SUBD_TTLIO 11 /* Digital Input Output But TTL */
...@@ -40,30 +33,30 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc ...@@ -40,30 +33,30 @@ You shoud also find the complete GPL in the COPYING file accompanying this sourc
#ifdef __KERNEL__ #ifdef __KERNEL__
static const comedi_lrange range_apci3XXX_ai = { 8, {BIP_RANGE(10), static const comedi_lrange range_apci3XXX_ai = { 8, {BIP_RANGE(10),
BIP_RANGE(5), BIP_RANGE(5),
BIP_RANGE(2), BIP_RANGE(2),
BIP_RANGE(1), BIP_RANGE(1),
UNI_RANGE(10), UNI_RANGE(10),
UNI_RANGE(5), UNI_RANGE(5),
UNI_RANGE(2), UNI_RANGE(2),
UNI_RANGE(1)} UNI_RANGE(1)}
}; };
static const comedi_lrange range_apci3XXX_ttl = { 12, {BIP_RANGE(1), static const comedi_lrange range_apci3XXX_ttl = { 12, {BIP_RANGE(1),
BIP_RANGE(1), BIP_RANGE(1),
BIP_RANGE(1), BIP_RANGE(1),
BIP_RANGE(1), BIP_RANGE(1),
BIP_RANGE(1), BIP_RANGE(1),
BIP_RANGE(1), BIP_RANGE(1),
BIP_RANGE(1), BIP_RANGE(1),
BIP_RANGE(1), BIP_RANGE(1),
BIP_RANGE(1), BIP_RANGE(1),
BIP_RANGE(1), BIP_RANGE(1),
BIP_RANGE(1), BIP_RANGE(1),
BIP_RANGE(1)} BIP_RANGE(1)}
}; };
static const comedi_lrange range_apci3XXX_ao = { 2, {BIP_RANGE(10), static const comedi_lrange range_apci3XXX_ao = { 2, {BIP_RANGE(10),
UNI_RANGE(10)} UNI_RANGE(10)}
}; };
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment