1c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/** 2c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH@verbatim 3c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 4c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHCopyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module. 5c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 6356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton ADDI-DATA GmbH 7356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton Dieselstrasse 3 8356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton D-77833 Ottersweier 9356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton Tel: +19(0)7223/9493-0 10356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton Fax: +49(0)7223/9493-92 1125417922694e60f04cd4dc8448ada9236f18c532Justin P. Mattock http://www.addi-data.com 12356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton info@addi-data.com 13c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 14c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHThis 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. 15c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 16c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHThis 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. 17c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 18c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHYou 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 19c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2039cfb97b0d89a99c8e50782b17e65114b89c2e59Adam BuchbinderYou should also find the complete GPL in the COPYING file accompanying this source code. 21c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 22c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH@endverbatim 23c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 24c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 25c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +-----------------------------------------------------------------------+ 26c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | (C) ADDI-DATA GmbH Dieselstrasse 3 D-77833 Ottersweier | 27c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +-----------------------------------------------------------------------+ 28c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | Tel : +49 (0) 7223/9493-0 | email : info@addi-data.com | 29c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | Fax : +49 (0) 7223/9493-92 | Internet : http://www.addi-data.com | 30c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +-----------------------------------------------------------------------+ 31c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | Project : APCI-3120 | Compiler : GCC | 32c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | Module name : hwdrv_apci3120.c| Version : 2.96 | 33c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +-------------------------------+---------------------------------------+ 34c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | Project manager: Eric Stolz | Date : 02/12/2002 | 35c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +-----------------------------------------------------------------------+ 36c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | Description :APCI3120 Module. Hardware abstraction Layer for APCI3120| 37c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +-----------------------------------------------------------------------+ 38c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | UPDATE'S | 39c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +-----------------------------------------------------------------------+ 40c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | Date | Author | Description of updates | 41c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +----------+-----------+------------------------------------------------+ 42c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | | | | 43c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | | | | 44c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +----------+-----------+------------------------------------------------+ 45c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 46c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 47c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#include "hwdrv_apci3120.h" 48dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelministatic unsigned int ui_Temp; 49c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 501efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* FUNCTION DEFINITIONS */ 51c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 52c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 53c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 54c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| ANALOG INPUT SUBDEVICE | 55c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 56c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 57c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 58c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 59c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 6071b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Function name :int i_APCI3120_InsnConfigAnalogInput(struct comedi_device *dev,| 6190035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton| struct comedi_subdevice *s,struct comedi_insn *insn,unsigned int *data) | 62c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 63c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 64c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : Calls card specific function | 65c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 66c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 6771b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters : struct comedi_device *dev | 6834c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice *s | 6990035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton| struct comedi_insn *insn | 70790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton| unsigned int *data | 71c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 72c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : | 73c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 74c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 75c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 76c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 77da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI3120_InsnConfigAnalogInput(struct comedi_device *dev, struct comedi_subdevice *s, 78da91b2692e0939b307f9047192d2b9fe07793e7aBill Pemberton struct comedi_insn *insn, unsigned int *data) 79c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 80117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton unsigned int i; 81c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 82c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((data[0] != APCI3120_EOC_MODE) && (data[0] != APCI3120_EOS_MODE)) 83c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return -1; 84c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 851efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Check for Conversion time to be added ?? */ 86c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_EocEosConversionTime = data[2]; 87c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 88c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (data[0] == APCI3120_EOS_MODE) { 89c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 901efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Test the number of the channel */ 91c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH for (i = 0; i < data[3]; i++) { 92c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 9357517878df4e5769885e80aba895f4e69b1ddbe9Ian Abbott if (CR_CHAN(data[4 + i]) >= 9457517878df4e5769885e80aba895f4e69b1ddbe9Ian Abbott devpriv->s_EeParameters.i_NbrAiChannel) { 95c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("bad channel list\n"); 96c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return -2; 97c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 98c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 99c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 100c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_InterruptMode = APCI3120_EOS_MODE; 101c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 102dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini if (data[1]) 103c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_EocEosInterrupt = APCI3120_ENABLE; 104dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini else 105c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_EocEosInterrupt = APCI3120_DISABLE; 1061efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Copy channel list and Range List to devpriv */ 107c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 108c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_AiNbrofChannels = data[3]; 109dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini for (i = 0; i < devpriv->ui_AiNbrofChannels; i++) 110c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_AiChannelList[i] = data[4 + i]; 111c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 112dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini } else { /* EOC */ 113c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_InterruptMode = APCI3120_EOC_MODE; 114dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini if (data[1]) 115c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_EocEosInterrupt = APCI3120_ENABLE; 116dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini else 117c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_EocEosInterrupt = APCI3120_DISABLE; 118c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 119c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 120c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return insn->n; 121c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 122c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 123c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 124c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 12571b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Function name :int i_APCI3120_InsnReadAnalogInput(struct comedi_device *dev, | 12690035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton| struct comedi_subdevice *s,struct comedi_insn *insn, unsigned int *data) | 127c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 128c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 129c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : card specific function | 130c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Reads analog input in synchronous mode | 131c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| EOC and EOS is selected as per configured | 132c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| if no conversion time is set uses default conversion | 133c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| time 10 microsec. | 134c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 135c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 13671b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters : struct comedi_device *dev | 13734c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice *s | 13890035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton| struct comedi_insn *insn | 139790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton| unsigned int *data | 140c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 141c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : | 142c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 143c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 144c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 145c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 146da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI3120_InsnReadAnalogInput(struct comedi_device *dev, struct comedi_subdevice *s, 147da91b2692e0939b307f9047192d2b9fe07793e7aBill Pemberton struct comedi_insn *insn, unsigned int *data) 148c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 149a9fce7c9a3b796334916b216a618fd7586f10d76Bill Pemberton unsigned short us_ConvertTiming, us_TmpValue, i; 1501783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton unsigned char b_Tmp; 151c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 15225985edcedea6396277003854657b5f3cb31a628Lucas De Marchi /* fix conversion time to 10 us */ 153c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (!devpriv->ui_EocEosConversionTime) { 154c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("No timer0 Value using 10 us\n"); 155c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH us_ConvertTiming = 10; 156c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else 1571efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton us_ConvertTiming = (unsigned short) (devpriv->ui_EocEosConversionTime / 1000); /* nano to useconds */ 158c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1591efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* this_board->i_hwdrv_InsnReadAnalogInput(dev,us_ConvertTiming,insn->n,&insn->chanspec,data,insn->unused[0]); */ 160c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1611efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Clear software registers */ 162c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_TimerSelectMode = 0; 163c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 0; 164c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister = 0; 1651efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* devpriv->b_DigitalOutputRegister=0; */ 166c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 167dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini if (insn->unused[0] == 222) { /* second insn read */ 168dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini for (i = 0; i < insn->n; i++) 169c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[i] = devpriv->ui_AiReadData[i]; 170c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 1711efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton devpriv->tsk_Current = current; /* Save the current process task structure */ 1721efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* 1731efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * Testing if board have the new Quartz and calculate the time value 1741efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * to set in the timer 1751efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton */ 176c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 177c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH us_TmpValue = 178a9fce7c9a3b796334916b216a618fd7586f10d76Bill Pemberton (unsigned short) inw(devpriv->iobase + APCI3120_RD_STATUS); 179c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1801efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* EL250804: Testing if board APCI3120 have the new Quartz or if it is an APCI3001 */ 181c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((us_TmpValue & 0x00B0) == 0x00B0 182c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH || !strcmp(this_board->pc_DriverName, "apci3001")) { 183c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH us_ConvertTiming = (us_ConvertTiming * 2) - 2; 184c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 185c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH us_ConvertTiming = 186c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ((us_ConvertTiming * 12926) / 10000) - 1; 187c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 188c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 189a9fce7c9a3b796334916b216a618fd7586f10d76Bill Pemberton us_TmpValue = (unsigned short) devpriv->b_InterruptMode; 190c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 191c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH switch (us_TmpValue) { 192c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 193c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case APCI3120_EOC_MODE: 194c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1951efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* 1961efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * Testing the interrupt flag and set the EOC bit Clears the FIFO 1971efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton */ 198c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH inw(devpriv->iobase + APCI3120_RESET_FIFO); 199c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2001efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Initialize the sequence array */ 201c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2021efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* if (!i_APCI3120_SetupChannelList(dev,s,1,chanlist,0)) return -EINVAL; */ 203c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 204c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (!i_APCI3120_SetupChannelList(dev, s, 1, 205c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH &insn->chanspec, 0)) 206c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return -EINVAL; 207c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2081efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Initialize Timer 0 mode 4 */ 209c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_TimerSelectMode = 210c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (devpriv-> 211c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_TimerSelectMode & 0xFC) | 212c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_TIMER_0_MODE_4; 213c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(devpriv->b_TimerSelectMode, 214c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI3120_TIMER_CRT1); 215c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2161efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Reset the scan bit and Disables the EOS, DMA, EOC interrupt */ 217c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 218c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv-> 219c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_ModeSelectRegister & APCI3120_DISABLE_SCAN; 220c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 221c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (devpriv->b_EocEosInterrupt == APCI3120_ENABLE) { 222c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2231efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Disables the EOS,DMA and enables the EOC interrupt */ 224c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 225c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (devpriv-> 226c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_ModeSelectRegister & 227c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_DISABLE_EOS_INT) | 228c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_ENABLE_EOC_INT; 229c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH inw(devpriv->iobase); 230c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 231c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 232c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 233c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv-> 234c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_ModeSelectRegister & 235c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_DISABLE_ALL_INTERRUPT_WITHOUT_TIMER; 236c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 237c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 238c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(devpriv->b_ModeSelectRegister, 239c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI3120_WRITE_MODE_SELECT); 240c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2411efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Sets gate 0 */ 242c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister = 243c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (devpriv-> 244c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH us_OutputRegister & APCI3120_CLEAR_PA_PR) | 245c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_ENABLE_TIMER0; 246c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(devpriv->us_OutputRegister, 247c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI3120_WR_ADDRESS); 248c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2491efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Select Timer 0 */ 250c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_Tmp = ((devpriv-> 251c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_DigitalOutputRegister) & 0xF0) | 252c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_SELECT_TIMER_0_WORD; 253c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(b_Tmp, devpriv->iobase + APCI3120_TIMER_CRT0); 254c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 25525985edcedea6396277003854657b5f3cb31a628Lucas De Marchi /* Set the conversion time */ 256c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(us_ConvertTiming, 257c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI3120_TIMER_VALUE); 258c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 259c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH us_TmpValue = 260a9fce7c9a3b796334916b216a618fd7586f10d76Bill Pemberton (unsigned short) inw(dev->iobase + APCI3120_RD_STATUS); 261c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 262c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (devpriv->b_EocEosInterrupt == APCI3120_DISABLE) { 263c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 264c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH do { 2651efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Waiting for the end of conversion */ 266c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH us_TmpValue = 267c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH inw(devpriv->iobase + 268c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_RD_STATUS); 269c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } while ((us_TmpValue & APCI3120_EOC) == 270c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_EOC); 271c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2721efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Read the result in FIFO and put it in insn data pointer */ 273c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH us_TmpValue = inw(devpriv->iobase + 0); 274c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH *data = us_TmpValue; 275c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 276c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH inw(devpriv->iobase + APCI3120_RESET_FIFO); 277c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 278c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 279c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 280c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 281c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case APCI3120_EOS_MODE: 282c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 283c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH inw(devpriv->iobase); 2841efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Clears the FIFO */ 285c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH inw(devpriv->iobase + APCI3120_RESET_FIFO); 2861efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* clear PA PR and disable timer 0 */ 287c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 288c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister = 289c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (devpriv-> 290c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH us_OutputRegister & APCI3120_CLEAR_PA_PR) | 291c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_DISABLE_TIMER0; 292c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 293c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(devpriv->us_OutputRegister, 294c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI3120_WR_ADDRESS); 295c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 296c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (!i_APCI3120_SetupChannelList(dev, s, 297c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_AiNbrofChannels, 298c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_AiChannelList, 0)) 299c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return -EINVAL; 300c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 3011efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Initialize Timer 0 mode 2 */ 302c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_TimerSelectMode = 303c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (devpriv-> 304c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_TimerSelectMode & 0xFC) | 305c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_TIMER_0_MODE_2; 306c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(devpriv->b_TimerSelectMode, 307c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI3120_TIMER_CRT1); 308c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 3091efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Select Timer 0 */ 310c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_Tmp = ((devpriv-> 311c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_DigitalOutputRegister) & 0xF0) | 312c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_SELECT_TIMER_0_WORD; 313c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(b_Tmp, devpriv->iobase + APCI3120_TIMER_CRT0); 314c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 31525985edcedea6396277003854657b5f3cb31a628Lucas De Marchi /* Set the conversion time */ 316c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(us_ConvertTiming, 317c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI3120_TIMER_VALUE); 318c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 3191efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Set the scan bit */ 320c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 321c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv-> 322c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_ModeSelectRegister | APCI3120_ENABLE_SCAN; 323c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(devpriv->b_ModeSelectRegister, 324c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI3120_WRITE_MODE_SELECT); 325c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 3261efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* If Interrupt function is loaded */ 327c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (devpriv->b_EocEosInterrupt == APCI3120_ENABLE) { 3281efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Disables the EOC,DMA and enables the EOS interrupt */ 329c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 330c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (devpriv-> 331c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_ModeSelectRegister & 332c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_DISABLE_EOC_INT) | 333c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_ENABLE_EOS_INT; 334c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH inw(devpriv->iobase); 335c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 336c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else 337c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 338c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv-> 339c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_ModeSelectRegister & 340c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_DISABLE_ALL_INTERRUPT_WITHOUT_TIMER; 341c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 342c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(devpriv->b_ModeSelectRegister, 343c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI3120_WRITE_MODE_SELECT); 344c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 345c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH inw(devpriv->iobase + APCI3120_RD_STATUS); 346c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 3471efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Sets gate 0 */ 348c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 349c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister = 350c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv-> 351c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH us_OutputRegister | APCI3120_ENABLE_TIMER0; 352c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(devpriv->us_OutputRegister, 353c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI3120_WR_ADDRESS); 354c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 3551efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Start conversion */ 356c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(0, devpriv->iobase + APCI3120_START_CONVERSION); 357c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 35825985edcedea6396277003854657b5f3cb31a628Lucas De Marchi /* Waiting of end of conversion if interrupt is not installed */ 359c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (devpriv->b_EocEosInterrupt == APCI3120_DISABLE) { 36025985edcedea6396277003854657b5f3cb31a628Lucas De Marchi /* Waiting the end of conversion */ 361c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH do { 362c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH us_TmpValue = 363c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH inw(devpriv->iobase + 364c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_RD_STATUS); 365ff89514f8d46f470ffafeda129138ce73efd4c60Bill Pemberton } while ((us_TmpValue & APCI3120_EOS) != 366ff89514f8d46f470ffafeda129138ce73efd4c60Bill Pemberton APCI3120_EOS); 367c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 368c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH for (i = 0; i < devpriv->ui_AiNbrofChannels; 369c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH i++) { 3701efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Read the result in FIFO and write them in shared memory */ 371c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH us_TmpValue = inw(devpriv->iobase); 372117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton data[i] = (unsigned int) us_TmpValue; 373c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 374c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 3751efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton devpriv->b_InterruptMode = APCI3120_EOC_MODE; /* Restore defaults. */ 376c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 377c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 378c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 379c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH default: 380c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("inputs wrong\n"); 381c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 382c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 3831efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton devpriv->ui_EocEosConversionTime = 0; /* re initializing the variable; */ 384c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 385c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 386c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return insn->n; 387c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 388c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 389c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 390c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 391c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 39271b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Function name :int i_APCI3120_StopCyclicAcquisition(struct comedi_device *dev,| 39334c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice *s)| 394c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 395c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 396c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : Stops Cyclic acquisition | 397c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 398c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 39971b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters : struct comedi_device *dev | 40034c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice *s | 401c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 402c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 403c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value :0 | 404c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 405c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 406c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 407c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 408da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI3120_StopCyclicAcquisition(struct comedi_device *dev, struct comedi_subdevice *s) 409c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 4101efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Disable A2P Fifo write and AMWEN signal */ 411c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(0, devpriv->i_IobaseAddon + 4); 412c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 4131efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Disable Bus Master ADD ON */ 414c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(APCI3120_ADD_ON_AGCSTS_LOW, devpriv->i_IobaseAddon + 0); 415c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(0, devpriv->i_IobaseAddon + 2); 416c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(APCI3120_ADD_ON_AGCSTS_HIGH, devpriv->i_IobaseAddon + 0); 417c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(0, devpriv->i_IobaseAddon + 2); 418c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 4191efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Disable BUS Master PCI */ 420c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outl(0, devpriv->i_IobaseAmcc + AMCC_OP_REG_MCSR); 421c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 4221efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* outl(inl(devpriv->i_IobaseAmcc+AMCC_OP_REG_INTCSR)&(~AINT_WRITE_COMPL), 4231efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * devpriv->i_IobaseAmcc+AMCC_OP_REG_INTCSR); stop amcc irqs */ 4241efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton 4251efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* outl(inl(devpriv->i_IobaseAmcc+AMCC_OP_REG_MCSR)&(~EN_A2P_TRANSFERS), 4261efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * devpriv->i_IobaseAmcc+AMCC_OP_REG_MCSR); stop DMA */ 427c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 4281efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Disable ext trigger */ 429c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH i_APCI3120_ExttrigDisable(dev); 430c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 431c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister = 0; 4321efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* stop counters */ 433c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(devpriv-> 434c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH us_OutputRegister & APCI3120_DISABLE_TIMER0 & 435c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_DISABLE_TIMER1, dev->iobase + APCI3120_WR_ADDRESS); 436c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 437c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(APCI3120_DISABLE_ALL_TIMER, dev->iobase + APCI3120_WR_ADDRESS); 438c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 4391efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* DISABLE_ALL_INTERRUPT */ 440c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(APCI3120_DISABLE_ALL_INTERRUPT, 441c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dev->iobase + APCI3120_WRITE_MODE_SELECT); 4421efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Flush FIFO */ 443c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH inb(dev->iobase + APCI3120_RESET_FIFO); 444c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH inw(dev->iobase + APCI3120_RD_STATUS); 445c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_AiActualScan = 0; 446c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_AiActualScanPosition = 0; 447c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH s->async->cur_chan = 0; 448c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_AiBufferPtr = 0; 449c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_AiContinuous = 0; 450c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_DmaActualBuffer = 0; 451c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 452c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_AiCyclicAcquisition = APCI3120_DISABLE; 453c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_InterruptMode = APCI3120_EOC_MODE; 454c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_EocEosInterrupt = APCI3120_DISABLE; 455c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH i_APCI3120_Reset(dev); 456c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return 0; 457c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 458c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 459c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 460c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 46171b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Function name :int i_APCI3120_CommandTestAnalogInput(struct comedi_device *dev| 462ea6d0d4cab4f4f2d6a88f3bce4707fe92696fd3fBill Pemberton| ,struct comedi_subdevice *s,struct comedi_cmd *cmd) | 463c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 464c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 465c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : Test validity for a command for cyclic anlog input | 466c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| acquisition | 467c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 468c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 46971b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters : struct comedi_device *dev | 47034c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice *s | 471ea6d0d4cab4f4f2d6a88f3bce4707fe92696fd3fBill Pemberton| struct comedi_cmd *cmd | 472c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 473c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value :0 | 474c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 475c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 476c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 477c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 478da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI3120_CommandTestAnalogInput(struct comedi_device *dev, struct comedi_subdevice *s, 479da91b2692e0939b307f9047192d2b9fe07793e7aBill Pemberton struct comedi_cmd *cmd) 480c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 481c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH int err = 0; 4821efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton int tmp; /* divisor1,divisor2; */ 483c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 4841efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* step 1: make sure trigger sources are trivially valid */ 485c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 486c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH tmp = cmd->start_src; 487c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH cmd->start_src &= TRIG_NOW | TRIG_EXT; 488c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (!cmd->start_src || tmp != cmd->start_src) 489c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH err++; 490c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 491c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH tmp = cmd->scan_begin_src; 492c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH cmd->scan_begin_src &= TRIG_TIMER | TRIG_FOLLOW; 493c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (!cmd->scan_begin_src || tmp != cmd->scan_begin_src) 494c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH err++; 495c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 496c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH tmp = cmd->convert_src; 497c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH cmd->convert_src &= TRIG_TIMER; 498c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (!cmd->convert_src || tmp != cmd->convert_src) 499c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH err++; 500c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 501c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH tmp = cmd->scan_end_src; 502c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH cmd->scan_end_src &= TRIG_COUNT; 503c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (!cmd->scan_end_src || tmp != cmd->scan_end_src) 504c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH err++; 505c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 506c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH tmp = cmd->stop_src; 507c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH cmd->stop_src &= TRIG_COUNT | TRIG_NONE; 508c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (!cmd->stop_src || tmp != cmd->stop_src) 509c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH err++; 510c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 511c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (err) 512c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return 1; 513c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 5141efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* step 2: make sure trigger sources are unique and mutually compatible */ 515c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 516dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini if (cmd->start_src != TRIG_NOW && cmd->start_src != TRIG_EXT) 517c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH err++; 518c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 519c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (cmd->scan_begin_src != TRIG_TIMER && 520c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH cmd->scan_begin_src != TRIG_FOLLOW) 521c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH err++; 522c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 523c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (cmd->convert_src != TRIG_TIMER) 524c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH err++; 525c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 526c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (cmd->scan_end_src != TRIG_COUNT) { 527c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH cmd->scan_end_src = TRIG_COUNT; 528c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH err++; 529c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 530c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 531c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (cmd->stop_src != TRIG_NONE && cmd->stop_src != TRIG_COUNT) 532c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH err++; 533c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 534c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (err) 535c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return 2; 536c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 5371efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* step 3: make sure arguments are trivially compatible */ 538c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 539c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (cmd->start_arg != 0) { 540c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH cmd->start_arg = 0; 541c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH err++; 542c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 543c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 544dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini if (cmd->scan_begin_src == TRIG_TIMER) { /* Test Delay timing */ 54557517878df4e5769885e80aba895f4e69b1ddbe9Ian Abbott if (cmd->scan_begin_arg < 54657517878df4e5769885e80aba895f4e69b1ddbe9Ian Abbott devpriv->s_EeParameters.ui_MinDelaytimeNs) { 54757517878df4e5769885e80aba895f4e69b1ddbe9Ian Abbott cmd->scan_begin_arg = 54857517878df4e5769885e80aba895f4e69b1ddbe9Ian Abbott devpriv->s_EeParameters.ui_MinDelaytimeNs; 549c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH err++; 550c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 551c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 552c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 553dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini if (cmd->convert_src == TRIG_TIMER) { /* Test Acquisition timing */ 554c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (cmd->scan_begin_src == TRIG_TIMER) { 555c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((cmd->convert_arg) 556c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH && (cmd->convert_arg < 55757517878df4e5769885e80aba895f4e69b1ddbe9Ian Abbott devpriv->s_EeParameters. 55857517878df4e5769885e80aba895f4e69b1ddbe9Ian Abbott ui_MinAcquisitiontimeNs)) { 55957517878df4e5769885e80aba895f4e69b1ddbe9Ian Abbott cmd->convert_arg = devpriv->s_EeParameters. 56057517878df4e5769885e80aba895f4e69b1ddbe9Ian Abbott ui_MinAcquisitiontimeNs; 561c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH err++; 562c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 563c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 564c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (cmd->convert_arg < 56557517878df4e5769885e80aba895f4e69b1ddbe9Ian Abbott devpriv->s_EeParameters.ui_MinAcquisitiontimeNs 56657517878df4e5769885e80aba895f4e69b1ddbe9Ian Abbott ) { 56757517878df4e5769885e80aba895f4e69b1ddbe9Ian Abbott cmd->convert_arg = devpriv->s_EeParameters. 56857517878df4e5769885e80aba895f4e69b1ddbe9Ian Abbott ui_MinAcquisitiontimeNs; 569c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH err++; 570c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 571c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 572c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 573c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 574c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 575c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (!cmd->chanlist_len) { 576c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH cmd->chanlist_len = 1; 577c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH err++; 578c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 579c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (cmd->chanlist_len > this_board->i_AiChannelList) { 580c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH cmd->chanlist_len = this_board->i_AiChannelList; 581c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH err++; 582c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 583c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (cmd->stop_src == TRIG_COUNT) { 584c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (!cmd->stop_arg) { 585c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH cmd->stop_arg = 1; 586c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH err++; 587c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 5881efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton } else { /* TRIG_NONE */ 589c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (cmd->stop_arg != 0) { 590c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH cmd->stop_arg = 0; 591c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH err++; 592c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 593c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 594c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 595c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (err) 596c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return 3; 597c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 5981efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* step 4: fix up any arguments */ 599c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 600c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (cmd->convert_src == TRIG_TIMER) { 601c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 602c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (cmd->scan_begin_src == TRIG_TIMER && 603c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH cmd->scan_begin_arg < 604c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH cmd->convert_arg * cmd->scan_end_arg) { 605c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH cmd->scan_begin_arg = 606c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH cmd->convert_arg * cmd->scan_end_arg; 607c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH err++; 608c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 609c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 610c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 611c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (err) 612c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return 4; 613c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 614c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return 0; 615c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 616c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 617c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 618c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 61971b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Function name : int i_APCI3120_CommandAnalogInput(struct comedi_device *dev, | 62034c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice *s) | 621c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 622c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 623c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : Does asynchronous acquisition | 624c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Determines the mode 1 or 2. | 625c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 626c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 62771b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters : struct comedi_device *dev | 62834c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice *s | 629c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 630c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 631c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : | 632c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 633c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 634c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 635c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 636da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI3120_CommandAnalogInput(struct comedi_device *dev, struct comedi_subdevice *s) 637c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 638ea6d0d4cab4f4f2d6a88f3bce4707fe92696fd3fBill Pemberton struct comedi_cmd *cmd = &s->async->cmd; 639c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 6401efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* loading private structure with cmd structure inputs */ 641c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_AiFlags = cmd->flags; 642c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_AiNbrofChannels = cmd->chanlist_len; 643c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_AiScanLength = cmd->scan_end_arg; 644c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->pui_AiChannelList = cmd->chanlist; 645c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 6461efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* UPDATE-0.7.57->0.7.68devpriv->AiData=s->async->data; */ 647c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->AiData = s->async->prealloc_buf; 6481efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* UPDATE-0.7.57->0.7.68devpriv->ui_AiDataLength=s->async->data_len; */ 649c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_AiDataLength = s->async->prealloc_bufsz; 650c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 651dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini if (cmd->stop_src == TRIG_COUNT) 652c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_AiNbrofScans = cmd->stop_arg; 653dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini else 654c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_AiNbrofScans = 0; 655c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 6561efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton devpriv->ui_AiTimer0 = 0; /* variables changed to timer0,timer1 */ 657c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_AiTimer1 = 0; 658c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((devpriv->ui_AiNbrofScans == 0) || (devpriv->ui_AiNbrofScans == -1)) 6591efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton devpriv->b_AiContinuous = 1; /* user want neverending analog acquisition */ 6601efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* stopped using cancel */ 661c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 662c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (cmd->start_src == TRIG_EXT) 663c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ExttrigEnable = APCI3120_ENABLE; 664c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH else 665c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ExttrigEnable = APCI3120_DISABLE; 666c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 667c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (cmd->scan_begin_src == TRIG_FOLLOW) { 6681efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* mode 1 or 3 */ 669c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (cmd->convert_src == TRIG_TIMER) { 6701efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* mode 1 */ 671c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 6721efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton devpriv->ui_AiTimer0 = cmd->convert_arg; /* timer constant in nano seconds */ 6731efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* return this_board->i_hwdrv_CommandAnalogInput(1,dev,s); */ 674c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return i_APCI3120_CyclicAnalogInput(1, dev, s); 675c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 676c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 677c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 678c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((cmd->scan_begin_src == TRIG_TIMER) 679c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH && (cmd->convert_src == TRIG_TIMER)) { 6801efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* mode 2 */ 681c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_AiTimer1 = cmd->scan_begin_arg; 6821efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton devpriv->ui_AiTimer0 = cmd->convert_arg; /* variable changed timer2 to timer0 */ 6831efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* return this_board->i_hwdrv_CommandAnalogInput(2,dev,s); */ 684c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return i_APCI3120_CyclicAnalogInput(2, dev, s); 685c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 686c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return -1; 687c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 688c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 689c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 690c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 691c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Function name : int i_APCI3120_CyclicAnalogInput(int mode, | 69234c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_device * dev,struct comedi_subdevice * s) | 693c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 694c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : This is used for analog input cyclic acquisition | 695c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Performs the command operations. | 696c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| If DMA is configured does DMA initialization | 697c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| otherwise does the acquisition with EOS interrupt. | 698c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 699c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 700c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Input Parameters : | 701c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 702c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 703c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 704c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : | 705c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 706c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 707c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 708c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 709da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI3120_CyclicAnalogInput(int mode, struct comedi_device *dev, 710da91b2692e0939b307f9047192d2b9fe07793e7aBill Pemberton struct comedi_subdevice *s) 711c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 7121783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton unsigned char b_Tmp; 713117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton unsigned int ui_Tmp, ui_DelayTiming = 0, ui_TimerValue1 = 0, dmalen0 = 714c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 0, dmalen1 = 0, ui_TimerValue2 = 715c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 0, ui_TimerValue0, ui_ConvertTiming; 716a9fce7c9a3b796334916b216a618fd7586f10d76Bill Pemberton unsigned short us_TmpValue; 717c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 7181efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* BEGIN JK 07.05.04: Comparison between WIN32 and Linux driver */ 7191efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* devpriv->b_AiCyclicAcquisition=APCI3120_ENABLE; */ 7201efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* END JK 07.05.04: Comparison between WIN32 and Linux driver */ 721c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 722c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*******************/ 723c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Resets the FIFO */ 724c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*******************/ 725c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH inb(dev->iobase + APCI3120_RESET_FIFO); 726c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 7271efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* BEGIN JK 07.05.04: Comparison between WIN32 and Linux driver */ 7281efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* inw(dev->iobase+APCI3120_RD_STATUS); */ 7291efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* END JK 07.05.04: Comparison between WIN32 and Linux driver */ 730c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 731c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /***************************/ 732c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Acquisition initialized */ 733c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /***************************/ 7341efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* BEGIN JK 07.05.04: Comparison between WIN32 and Linux driver */ 735c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_AiCyclicAcquisition = APCI3120_ENABLE; 7361efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* END JK 07.05.04: Comparison between WIN32 and Linux driver */ 737c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 7381efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* clear software registers */ 739c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_TimerSelectMode = 0; 740c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister = 0; 741c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 0; 7421efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* devpriv->b_DigitalOutputRegister=0; */ 743c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 7441efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* COMMENT JK 07.05.04: Followings calls are in i_APCI3120_StartAnalogInputAcquisition */ 745c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 7461efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /****************************/ 74774b894e56abcb2403894b268100773f4aabe1999Bill Pemberton /* Clear Timer Write TC int */ 7481efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /****************************/ 749c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outl(APCI3120_CLEAR_WRITE_TC_INT, 750c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->i_IobaseAmcc + APCI3120_AMCC_OP_REG_INTCSR); 751c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 7521efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /************************************/ 753c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Clears the timer status register */ 7541efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /************************************/ 755c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 7561efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* BEGIN JK 07.05.04: Comparison between WIN32 and Linux driver */ 7571efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* inw(dev->iobase+APCI3120_TIMER_STATUS_REGISTER); */ 7581efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* inb(dev->iobase + APCI3120_TIMER_STATUS_REGISTER); */ 7591efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* END JK 07.05.04: Comparison between WIN32 and Linux driver */ 7601efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton 7611efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /**************************/ 762c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Disables All Timer */ 763c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Sets PR and PA to 0 */ 7641efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /**************************/ 765c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister = devpriv->us_OutputRegister & 766c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_DISABLE_TIMER0 & 767c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_DISABLE_TIMER1 & APCI3120_CLEAR_PA_PR; 768c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 769c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(devpriv->us_OutputRegister, dev->iobase + APCI3120_WR_ADDRESS); 770c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 7711efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /*******************/ 772c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Resets the FIFO */ 7731efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /*******************/ 7741efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* BEGIN JK 07.05.04: Comparison between WIN32 and Linux driver */ 775c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH inb(devpriv->iobase + APCI3120_RESET_FIFO); 7761efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* END JK 07.05.04: Comparison between WIN32 and Linux driver */ 777c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 778c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_AiActualScan = 0; 779c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_AiActualScanPosition = 0; 780c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH s->async->cur_chan = 0; 781c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_AiBufferPtr = 0; 782c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_DmaActualBuffer = 0; 783c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 7841efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* value for timer2 minus -2 has to be done .....dunno y?? */ 785c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_TimerValue2 = devpriv->ui_AiNbrofScans - 2; 786c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_ConvertTiming = devpriv->ui_AiTimer0; 787c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 788c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (mode == 2) 789c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_DelayTiming = devpriv->ui_AiTimer1; 790c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 791c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**********************************/ 792c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Initializes the sequence array */ 793c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**********************************/ 794c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (!i_APCI3120_SetupChannelList(dev, s, devpriv->ui_AiNbrofChannels, 795c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->pui_AiChannelList, 0)) 796c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return -EINVAL; 797c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 798a9fce7c9a3b796334916b216a618fd7586f10d76Bill Pemberton us_TmpValue = (unsigned short) inw(dev->iobase + APCI3120_RD_STATUS); 799c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/*** EL241003 : add this section in comment because floats must not be used 800356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton if((us_TmpValue & 0x00B0)==0x00B0) 801c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH { 802356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton f_ConvertValue=(((float)ui_ConvertTiming * 0.002) - 2); 803117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton ui_TimerValue0=(unsigned int)f_ConvertValue; 804c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (mode==2) 805c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH { 806c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH f_DelayValue = (((float)ui_DelayTiming * 0.00002) - 2); 807117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton ui_TimerValue1 = (unsigned int) f_DelayValue; 808c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 809c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 810356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton else 811c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH { 812c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH f_ConvertValue=(((float)ui_ConvertTiming * 0.0012926) - 1); 813117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton ui_TimerValue0=(unsigned int)f_ConvertValue; 814c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (mode == 2) 815c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH { 816c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH f_DelayValue = (((float)ui_DelayTiming * 0.000012926) - 1); 817117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton ui_TimerValue1 = (unsigned int) f_DelayValue; 818c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 819c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 820c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH***********************************************************************************************/ 821c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/*** EL241003 Begin : add this section to replace floats calculation by integer calculations **/ 8221efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* EL250804: Testing if board APCI3120 have the new Quartz or if it is an APCI3001 */ 823c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((us_TmpValue & 0x00B0) == 0x00B0 824c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH || !strcmp(this_board->pc_DriverName, "apci3001")) { 825c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_TimerValue0 = ui_ConvertTiming * 2 - 2000; 826c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_TimerValue0 = ui_TimerValue0 / 1000; 827c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 828c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (mode == 2) { 829c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_DelayTiming = ui_DelayTiming / 1000; 830c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_TimerValue1 = ui_DelayTiming * 2 - 200; 831c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_TimerValue1 = ui_TimerValue1 / 100; 832c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 833c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 834c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_ConvertTiming = ui_ConvertTiming / 1000; 835c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_TimerValue0 = ui_ConvertTiming * 12926 - 10000; 836c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_TimerValue0 = ui_TimerValue0 / 10000; 837c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 838c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (mode == 2) { 839c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_DelayTiming = ui_DelayTiming / 1000; 840c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_TimerValue1 = ui_DelayTiming * 12926 - 1; 841c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_TimerValue1 = ui_TimerValue1 / 1000000; 842c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 843c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 844c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/*** EL241003 End ******************************************************************************/ 845c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 846dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini if (devpriv->b_ExttrigEnable == APCI3120_ENABLE) 8471efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton i_APCI3120_ExttrigEnable(dev); /* activate EXT trigger */ 848c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH switch (mode) { 849c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case 1: 8501efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* init timer0 in mode 2 */ 851c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_TimerSelectMode = 852c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (devpriv-> 853c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_TimerSelectMode & 0xFC) | APCI3120_TIMER_0_MODE_2; 854c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(devpriv->b_TimerSelectMode, 855c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dev->iobase + APCI3120_TIMER_CRT1); 856c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 8571efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Select Timer 0 */ 858c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_Tmp = ((devpriv-> 859c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_DigitalOutputRegister) & 0xF0) | 860c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_SELECT_TIMER_0_WORD; 861c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(b_Tmp, dev->iobase + APCI3120_TIMER_CRT0); 86225985edcedea6396277003854657b5f3cb31a628Lucas De Marchi /* Set the conversion time */ 863a9fce7c9a3b796334916b216a618fd7586f10d76Bill Pemberton outw(((unsigned short) ui_TimerValue0), 864c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dev->iobase + APCI3120_TIMER_VALUE); 865c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 866c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 867c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case 2: 8681efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* init timer1 in mode 2 */ 869c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_TimerSelectMode = 870c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (devpriv-> 871c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_TimerSelectMode & 0xF3) | APCI3120_TIMER_1_MODE_2; 872c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(devpriv->b_TimerSelectMode, 873c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dev->iobase + APCI3120_TIMER_CRT1); 874c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 8751efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Select Timer 1 */ 876c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_Tmp = ((devpriv-> 877c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_DigitalOutputRegister) & 0xF0) | 878c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_SELECT_TIMER_1_WORD; 879c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(b_Tmp, dev->iobase + APCI3120_TIMER_CRT0); 88025985edcedea6396277003854657b5f3cb31a628Lucas De Marchi /* Set the conversion time */ 881a9fce7c9a3b796334916b216a618fd7586f10d76Bill Pemberton outw(((unsigned short) ui_TimerValue1), 882c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dev->iobase + APCI3120_TIMER_VALUE); 883c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 8841efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* init timer0 in mode 2 */ 885c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_TimerSelectMode = 886c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (devpriv-> 887c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_TimerSelectMode & 0xFC) | APCI3120_TIMER_0_MODE_2; 888c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(devpriv->b_TimerSelectMode, 889c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dev->iobase + APCI3120_TIMER_CRT1); 890c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 8911efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Select Timer 0 */ 892c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_Tmp = ((devpriv-> 893c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_DigitalOutputRegister) & 0xF0) | 894c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_SELECT_TIMER_0_WORD; 895c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(b_Tmp, dev->iobase + APCI3120_TIMER_CRT0); 896c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 89725985edcedea6396277003854657b5f3cb31a628Lucas De Marchi /* Set the conversion time */ 898a9fce7c9a3b796334916b216a618fd7586f10d76Bill Pemberton outw(((unsigned short) ui_TimerValue0), 899c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dev->iobase + APCI3120_TIMER_VALUE); 900c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 901c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 902c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 9031efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* ##########common for all modes################# */ 904c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 905c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /***********************/ 906c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Clears the SCAN bit */ 907c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /***********************/ 9081efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton 9091efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* BEGIN JK 07.05.04: Comparison between WIN32 and Linux driver */ 9101efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* devpriv->b_ModeSelectRegister=devpriv->b_ModeSelectRegister | APCI3120_DISABLE_SCAN; */ 9111efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton 912c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = devpriv->b_ModeSelectRegister & 913c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_DISABLE_SCAN; 9141efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* END JK 07.05.04: Comparison between WIN32 and Linux driver */ 9151efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton 916c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(devpriv->b_ModeSelectRegister, 917c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dev->iobase + APCI3120_WRITE_MODE_SELECT); 918c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 9191efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* If DMA is disabled */ 920c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (devpriv->us_UseDma == APCI3120_DISABLE) { 9211efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* disable EOC and enable EOS */ 922c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_InterruptMode = APCI3120_EOS_MODE; 923c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_EocEosInterrupt = APCI3120_ENABLE; 924c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 925c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 926c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (devpriv-> 927c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_ModeSelectRegister & APCI3120_DISABLE_EOC_INT) | 928c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_ENABLE_EOS_INT; 929c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(devpriv->b_ModeSelectRegister, 930c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dev->iobase + APCI3120_WRITE_MODE_SELECT); 931c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 932c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (!devpriv->b_AiContinuous) { 9331efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* 9341efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * configure Timer2 For counting EOS Reset gate 2 of Timer 2 to 9351efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * disable it (Set Bit D14 to 0) 9361efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton */ 937c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister = 938c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv-> 939c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH us_OutputRegister & APCI3120_DISABLE_TIMER2; 940c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(devpriv->us_OutputRegister, 941c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dev->iobase + APCI3120_WR_ADDRESS); 942c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 9431efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* DISABLE TIMER intERRUPT */ 944c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 945c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv-> 946c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_ModeSelectRegister & 947c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_DISABLE_TIMER_INT & 0xEF; 948c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(devpriv->b_ModeSelectRegister, 949c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dev->iobase + APCI3120_WRITE_MODE_SELECT); 950c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 9511efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* (1) Init timer 2 in mode 0 and write timer value */ 952c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_TimerSelectMode = 953c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (devpriv-> 954c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_TimerSelectMode & 0x0F) | 955c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_TIMER_2_MODE_0; 956c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(devpriv->b_TimerSelectMode, 957c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dev->iobase + APCI3120_TIMER_CRT1); 958c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 9591efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Writing LOW unsigned short */ 960c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_Tmp = ((devpriv-> 961c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_DigitalOutputRegister) & 0xF0) | 962c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_SELECT_TIMER_2_LOW_WORD; 963c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(b_Tmp, dev->iobase + APCI3120_TIMER_CRT0); 964c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(LOWORD(ui_TimerValue2), 965c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dev->iobase + APCI3120_TIMER_VALUE); 966c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 9671efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Writing HIGH unsigned short */ 968c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_Tmp = ((devpriv-> 969c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_DigitalOutputRegister) & 0xF0) | 970c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_SELECT_TIMER_2_HIGH_WORD; 971c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(b_Tmp, dev->iobase + APCI3120_TIMER_CRT0); 972c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(HIWORD(ui_TimerValue2), 973c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dev->iobase + APCI3120_TIMER_VALUE); 974c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 9751efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* (2) Reset FC_TIMER BIT Clearing timer status register */ 976c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH inb(dev->iobase + APCI3120_TIMER_STATUS_REGISTER); 9771efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* enable timer counter and disable watch dog */ 978c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 979c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (devpriv-> 980c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_ModeSelectRegister | 981c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_ENABLE_TIMER_COUNTER) & 982c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_DISABLE_WATCHDOG; 9831efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* select EOS clock input for timer 2 */ 984c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 985c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv-> 986c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_ModeSelectRegister | 987c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_TIMER2_SELECT_EOS; 9881efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Enable timer2 interrupt */ 989c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 990c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv-> 991c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_ModeSelectRegister | 992c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_ENABLE_TIMER_INT; 993c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(devpriv->b_ModeSelectRegister, 994c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dev->iobase + APCI3120_WRITE_MODE_SELECT); 995c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_Timer2Mode = APCI3120_COUNTER; 996c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_Timer2Interrupt = APCI3120_ENABLE; 997c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 998c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 9991efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* If DMA Enabled */ 10001efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton 10011efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* BEGIN JK 07.05.04: Comparison between WIN32 and Linux driver */ 10021efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* inw(dev->iobase+0); reset EOC bit */ 10031efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* END JK 07.05.04: Comparison between WIN32 and Linux driver */ 1004c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_InterruptMode = APCI3120_DMA_MODE; 1005c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 10061efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /************************************/ 1007c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Disables the EOC, EOS interrupt */ 10081efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /************************************/ 1009c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = devpriv->b_ModeSelectRegister & 1010c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_DISABLE_EOC_INT & APCI3120_DISABLE_EOS_INT; 1011c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1012c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(devpriv->b_ModeSelectRegister, 1013c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dev->iobase + APCI3120_WRITE_MODE_SELECT); 1014c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1015c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dmalen0 = devpriv->ui_DmaBufferSize[0]; 1016c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dmalen1 = devpriv->ui_DmaBufferSize[1]; 1017c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1018c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (!devpriv->b_AiContinuous) { 1019c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 10201efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton if (dmalen0 > (devpriv->ui_AiNbrofScans * devpriv->ui_AiScanLength * 2)) { /* must we fill full first buffer? */ 1021c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dmalen0 = 1022c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_AiNbrofScans * 1023c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_AiScanLength * 2; 10241efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton } else if (dmalen1 > (devpriv->ui_AiNbrofScans * devpriv->ui_AiScanLength * 2 - dmalen0)) /* and must we fill full second buffer when first is once filled? */ 1025c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dmalen1 = 1026c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_AiNbrofScans * 1027c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_AiScanLength * 2 - dmalen0; 1028c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 1029c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1030c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (devpriv->ui_AiFlags & TRIG_WAKE_EOS) { 10311efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* don't we want wake up every scan? */ 1032c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (dmalen0 > (devpriv->ui_AiScanLength * 2)) { 1033c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dmalen0 = devpriv->ui_AiScanLength * 2; 1034c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (devpriv->ui_AiScanLength & 1) 1035c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dmalen0 += 2; 1036c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 1037c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (dmalen1 > (devpriv->ui_AiScanLength * 2)) { 1038c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dmalen1 = devpriv->ui_AiScanLength * 2; 1039c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (devpriv->ui_AiScanLength & 1) 1040c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dmalen1 -= 2; 1041c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (dmalen1 < 4) 1042c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dmalen1 = 4; 1043c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 10441efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton } else { /* isn't output buff smaller that our DMA buff? */ 1045dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini if (dmalen0 > (devpriv->ui_AiDataLength)) 1046c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dmalen0 = devpriv->ui_AiDataLength; 1047dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini if (dmalen1 > (devpriv->ui_AiDataLength)) 1048c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dmalen1 = devpriv->ui_AiDataLength; 1049c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 1050c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_DmaBufferUsesize[0] = dmalen0; 1051c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_DmaBufferUsesize[1] = dmalen1; 1052c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 10531efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Initialize DMA */ 1054c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 10551efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* 10561efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * Set Transfer count enable bit and A2P_fifo reset bit in AGCSTS 10571efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * register 1 10581efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton */ 1059c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Tmp = AGCSTS_TC_ENABLE | AGCSTS_RESET_A2P_FIFO; 1060c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outl(ui_Tmp, devpriv->i_IobaseAmcc + AMCC_OP_REG_AGCSTS); 1061c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 10621efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* changed since 16 bit interface for add on */ 1063c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*********************/ 1064c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* ENABLE BUS MASTER */ 1065c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*********************/ 1066c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(APCI3120_ADD_ON_AGCSTS_LOW, devpriv->i_IobaseAddon + 0); 1067c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(APCI3120_ENABLE_TRANSFER_ADD_ON_LOW, 1068c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->i_IobaseAddon + 2); 1069c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1070c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(APCI3120_ADD_ON_AGCSTS_HIGH, devpriv->i_IobaseAddon + 0); 1071c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(APCI3120_ENABLE_TRANSFER_ADD_ON_HIGH, 1072c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->i_IobaseAddon + 2); 1073c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 10741efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* 10751efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * TO VERIFIED BEGIN JK 07.05.04: Comparison between WIN32 and Linux 10761efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * driver 10771efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton */ 1078c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(0x1000, devpriv->i_IobaseAddon + 2); 10791efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* END JK 07.05.04: Comparison between WIN32 and Linux driver */ 1080c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 10811efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* 2 No change */ 1082c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* A2P FIFO MANAGEMENT */ 10831efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* A2P fifo reset & transfer control enable */ 10841efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton 10851efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /***********************/ 10861efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* A2P FIFO MANAGEMENT */ 10871efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /***********************/ 1088c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outl(APCI3120_A2P_FIFO_MANAGEMENT, devpriv->i_IobaseAmcc + 1089c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_AMCC_OP_MCSR); 1090c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 10911efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* 10921efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * 3 10931efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * beginning address of dma buf The 32 bit address of dma buffer 10941efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * is converted into two 16 bit addresses Can done by using _attach 10951efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * and put into into an array array used may be for differnet pages 10961efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton */ 1097c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1098f69b0d6451679f1466381a46ac7ab671a7b5668cUwe Kleine-König /* DMA Start Address Low */ 1099c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(APCI3120_ADD_ON_MWAR_LOW, devpriv->i_IobaseAddon + 0); 1100c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw((devpriv->ul_DmaBufferHw[0] & 0xFFFF), 1101c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->i_IobaseAddon + 2); 1102c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 11031efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /*************************/ 1104f69b0d6451679f1466381a46ac7ab671a7b5668cUwe Kleine-König /* DMA Start Address High */ 11051efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /*************************/ 1106c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(APCI3120_ADD_ON_MWAR_HIGH, devpriv->i_IobaseAddon + 0); 1107c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw((devpriv->ul_DmaBufferHw[0] / 65536), 1108c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->i_IobaseAddon + 2); 1109c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 11101efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* 11111efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * 4 111225985edcedea6396277003854657b5f3cb31a628Lucas De Marchi * amount of bytes to be transferred set transfer count used ADDON 11131efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * MWTC register commented testing 11141efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * outl(devpriv->ui_DmaBufferUsesize[0], 11151efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * devpriv->i_IobaseAddon+AMCC_OP_REG_AMWTC); 11161efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton */ 11171efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton 11181efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /**************************/ 1119c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Nbr of acquisition LOW */ 11201efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /**************************/ 1121c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(APCI3120_ADD_ON_MWTC_LOW, devpriv->i_IobaseAddon + 0); 1122c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw((devpriv->ui_DmaBufferUsesize[0] & 0xFFFF), 1123c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->i_IobaseAddon + 2); 1124c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 11251efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /***************************/ 1126c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Nbr of acquisition HIGH */ 11271efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /***************************/ 1128c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(APCI3120_ADD_ON_MWTC_HIGH, devpriv->i_IobaseAddon + 0); 1129c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw((devpriv->ui_DmaBufferUsesize[0] / 65536), 1130c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->i_IobaseAddon + 2); 1131c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 11321efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* 11331efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * 5 11341efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * To configure A2P FIFO testing outl( 11351efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * FIFO_ADVANCE_ON_BYTE_2,devpriv->i_IobaseAmcc+AMCC_OP_REG_INTCSR); 11361efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton */ 1137c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1138c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /******************/ 1139c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* A2P FIFO RESET */ 1140c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /******************/ 11411efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* 11421efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * TO VERIFY BEGIN JK 07.05.04: Comparison between WIN32 and Linux 11431efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * driver 11441efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton */ 1145c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outl(0x04000000UL, devpriv->i_IobaseAmcc + AMCC_OP_REG_MCSR); 11461efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* END JK 07.05.04: Comparison between WIN32 and Linux driver */ 11471efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton 11481efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* 11491efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * 6 11501efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * ENABLE A2P FIFO WRITE AND ENABLE AMWEN AMWEN_ENABLE | 11511efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * A2P_FIFO_WRITE_ENABLE (0x01|0x02)=0x03 11521efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton */ 1153c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 11541efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* BEGIN JK 07.05.04: Comparison between WIN32 and Linux driver */ 11551efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* outw(3,devpriv->i_IobaseAddon + 4); */ 11561efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* END JK 07.05.04: Comparison between WIN32 and Linux driver */ 1157c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 11581efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* 11591efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * 7 11601efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * initialise end of dma interrupt AINT_WRITE_COMPL = 11611efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * ENABLE_WRITE_TC_INT(ADDI) 11621efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton */ 1163c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /***************************************************/ 116474b894e56abcb2403894b268100773f4aabe1999Bill Pemberton /* A2P FIFO CONFIGURATE, END OF DMA intERRUPT INIT */ 1165c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /***************************************************/ 1166c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outl((APCI3120_FIFO_ADVANCE_ON_BYTE_2 | 1167c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_ENABLE_WRITE_TC_INT), 1168c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->i_IobaseAmcc + AMCC_OP_REG_INTCSR); 1169c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 11701efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* BEGIN JK 07.05.04: Comparison between WIN32 and Linux driver */ 1171c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /******************************************/ 1172c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* ENABLE A2P FIFO WRITE AND ENABLE AMWEN */ 1173c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /******************************************/ 1174c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(3, devpriv->i_IobaseAddon + 4); 11751efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* END JK 07.05.04: Comparison between WIN32 and Linux driver */ 1176c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1177c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /******************/ 1178c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* A2P FIFO RESET */ 1179c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /******************/ 11801efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* BEGIN JK 07.05.04: Comparison between WIN32 and Linux driver */ 1181c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outl(0x04000000UL, 1182c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->i_IobaseAmcc + APCI3120_AMCC_OP_MCSR); 11831efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* END JK 07.05.04: Comparison between WIN32 and Linux driver */ 1184c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 1185c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1186c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((devpriv->us_UseDma == APCI3120_DISABLE) 1187c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH && !devpriv->b_AiContinuous) { 11881efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* set gate 2 to start conversion */ 1189c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister = 1190c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister | APCI3120_ENABLE_TIMER2; 1191c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(devpriv->us_OutputRegister, 1192c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dev->iobase + APCI3120_WR_ADDRESS); 1193c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 1194c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1195c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH switch (mode) { 1196c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case 1: 11971efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* set gate 0 to start conversion */ 1198c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister = 1199c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister | APCI3120_ENABLE_TIMER0; 1200c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(devpriv->us_OutputRegister, 1201c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dev->iobase + APCI3120_WR_ADDRESS); 1202c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 1203c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case 2: 12041efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* set gate 0 and gate 1 */ 1205c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister = 1206c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister | APCI3120_ENABLE_TIMER1; 1207c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister = 1208c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister | APCI3120_ENABLE_TIMER0; 1209c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(devpriv->us_OutputRegister, 1210c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dev->iobase + APCI3120_WR_ADDRESS); 1211c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 1212c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1213c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 1214c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1215c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return 0; 1216c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1217c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 1218c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1219c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 1220c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 122174b894e56abcb2403894b268100773f4aabe1999Bill Pemberton| intERNAL FUNCTIONS | 1222c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1223c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 1224c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1225c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 1226c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 122771b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Function name : int i_APCI3120_Reset(struct comedi_device *dev) | 1228c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1229c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1230c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1231c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : Hardware reset function | 1232c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1233c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 123471b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters : struct comedi_device *dev | 1235c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1236c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1237c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1238c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : | 1239c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1240c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1241c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 1242c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1243da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI3120_Reset(struct comedi_device *dev) 1244c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 1245c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH unsigned int i; 1246c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH unsigned short us_TmpValue; 1247c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1248c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_AiCyclicAcquisition = APCI3120_DISABLE; 1249c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_EocEosInterrupt = APCI3120_DISABLE; 1250c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_InterruptMode = APCI3120_EOC_MODE; 12511efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton devpriv->ui_EocEosConversionTime = 0; /* set eoc eos conv time to 0 */ 1252c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_OutputMemoryStatus = 0; 1253c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 12541efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* variables used in timer subdevice */ 1255c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_Timer2Mode = 0; 1256c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_Timer2Interrupt = 0; 12571efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton devpriv->b_ExttrigEnable = 0; /* Disable ext trigger */ 1258c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1259c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Disable all interrupts, watchdog for the anolog output */ 1260c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 0; 1261c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(devpriv->b_ModeSelectRegister, 1262c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dev->iobase + APCI3120_WRITE_MODE_SELECT); 1263c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 12641efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Disables all counters, ext trigger and clears PA, PR */ 1265c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister = 0; 1266c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(devpriv->us_OutputRegister, dev->iobase + APCI3120_WR_ADDRESS); 1267c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 12681efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* 12691efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * Code to set the all anolog o/p channel to 0v 8191 is decimal 12701efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * value for zero(0 v)volt in bipolar mode(default) 12711efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton */ 12721efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton outw(8191 | APCI3120_ANALOG_OP_CHANNEL_1, dev->iobase + APCI3120_ANALOG_OUTPUT_1); /* channel 1 */ 12731efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton outw(8191 | APCI3120_ANALOG_OP_CHANNEL_2, dev->iobase + APCI3120_ANALOG_OUTPUT_1); /* channel 2 */ 12741efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton outw(8191 | APCI3120_ANALOG_OP_CHANNEL_3, dev->iobase + APCI3120_ANALOG_OUTPUT_1); /* channel 3 */ 12751efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton outw(8191 | APCI3120_ANALOG_OP_CHANNEL_4, dev->iobase + APCI3120_ANALOG_OUTPUT_1); /* channel 4 */ 12761efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton 12771efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton outw(8191 | APCI3120_ANALOG_OP_CHANNEL_5, dev->iobase + APCI3120_ANALOG_OUTPUT_2); /* channel 5 */ 12781efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton outw(8191 | APCI3120_ANALOG_OP_CHANNEL_6, dev->iobase + APCI3120_ANALOG_OUTPUT_2); /* channel 6 */ 12791efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton outw(8191 | APCI3120_ANALOG_OP_CHANNEL_7, dev->iobase + APCI3120_ANALOG_OUTPUT_2); /* channel 7 */ 12801efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton outw(8191 | APCI3120_ANALOG_OP_CHANNEL_8, dev->iobase + APCI3120_ANALOG_OUTPUT_2); /* channel 8 */ 12811efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton 12821efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Reset digital output to L0W */ 12831efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton 12841efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* ES05 outb(0x0,dev->iobase+APCI3120_DIGITAL_OUTPUT); */ 1285c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH udelay(10); 1286c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 12871efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton inw(dev->iobase + 0); /* make a dummy read */ 12881efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton inb(dev->iobase + APCI3120_RESET_FIFO); /* flush FIFO */ 12891efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton inw(dev->iobase + APCI3120_RD_STATUS); /* flush A/D status register */ 1290c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 12911efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* code to reset the RAM sequence */ 1292c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH for (i = 0; i < 16; i++) { 12931efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton us_TmpValue = i << 8; /* select the location */ 1294c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(us_TmpValue, dev->iobase + APCI3120_SEQ_RAM_ADDRESS); 1295c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 1296c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return 0; 1297c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 1298c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1299c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 1300c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 130171b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Function name : int i_APCI3120_SetupChannelList(struct comedi_device * dev, | 130234c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice * s, int n_chan,unsigned int *chanlist| 1303c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| ,char check) | 1304c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1305c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1306c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task :This function will first check channel list is ok or not| 1307c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH|and then initialize the sequence RAM with the polarity, Gain,Channel number | 1308c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH|If the last argument of function "check"is 1 then it only checks the channel| 1309c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH|list is ok or not. | 1310c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1311c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 131271b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters : struct comedi_device * dev | 131334c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice * s | 1314c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| int n_chan | 1315c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH unsigned int *chanlist 1316c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH char check 1317c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1318c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : | 1319c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1320c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1321c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 1322c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1323da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI3120_SetupChannelList(struct comedi_device *dev, struct comedi_subdevice *s, 1324c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH int n_chan, unsigned int *chanlist, char check) 1325c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 13261efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton unsigned int i; /* , differencial=0, bipolar=0; */ 1327c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH unsigned int gain; 1328c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH unsigned short us_TmpValue; 1329c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1330c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* correct channel and range number check itself comedi/range.c */ 1331c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (n_chan < 1) { 1332c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (!check) 1333c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH comedi_error(dev, "range/channel list is empty!"); 1334c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return 0; 1335c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 13361efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* All is ok, so we can setup channel/range list */ 1337c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (check) 1338c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return 1; 1339c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 13401efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Code to set the PA and PR...Here it set PA to 0.. */ 1341c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister = 1342c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister & APCI3120_CLEAR_PA_PR; 1343c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister = ((n_chan - 1) & 0xf) << 8; 1344c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(devpriv->us_OutputRegister, dev->iobase + APCI3120_WR_ADDRESS); 1345c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1346c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH for (i = 0; i < n_chan; i++) { 13471efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* store range list to card */ 13481efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton us_TmpValue = CR_CHAN(chanlist[i]); /* get channel number; */ 1349c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1350dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini if (CR_RANGE(chanlist[i]) < APCI3120_BIPOLAR_RANGES) 13511efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton us_TmpValue &= ((~APCI3120_UNIPOLAR) & 0xff); /* set bipolar */ 1352dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini else 13531efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton us_TmpValue |= APCI3120_UNIPOLAR; /* enable unipolar...... */ 1354c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 13551efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton gain = CR_RANGE(chanlist[i]); /* get gain number */ 13561efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton us_TmpValue |= ((gain & 0x03) << 4); /* <<4 for G0 and G1 bit in RAM */ 13571efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton us_TmpValue |= i << 8; /* To select the RAM LOCATION.... */ 1358c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(us_TmpValue, dev->iobase + APCI3120_SEQ_RAM_ADDRESS); 1359c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1360c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\n Gain = %i", 1361c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (((unsigned char)CR_RANGE(chanlist[i]) & 0x03) << 2)); 1362c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\n Channel = %i", CR_CHAN(chanlist[i])); 1363c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\n Polarity = %i", us_TmpValue & APCI3120_UNIPOLAR); 1364c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 13651efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton return 1; /* we can serve this with scan logic */ 1366c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 1367c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1368c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 1369c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 137071b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Function name : int i_APCI3120_ExttrigEnable(struct comedi_device * dev) | 1371c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1372c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1373c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1374c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : Enable the external trigger | 1375c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1376c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 137771b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters : struct comedi_device * dev | 1378c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1379c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1380c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1381c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : 0 | 1382c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1383c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1384c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 1385c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1386da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI3120_ExttrigEnable(struct comedi_device *dev) 1387c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 1388c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1389c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister |= APCI3120_ENABLE_EXT_TRIGGER; 1390c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(devpriv->us_OutputRegister, dev->iobase + APCI3120_WR_ADDRESS); 1391c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return 0; 1392c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 1393c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1394c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 1395c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 139671b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Function name : int i_APCI3120_ExttrigDisable(struct comedi_device * dev) | 1397c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1398c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1399c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : Disables the external trigger | 1400c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1401c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 140271b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters : struct comedi_device * dev | 1403c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1404c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1405c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1406c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : 0 | 1407c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1408c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1409c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 1410c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1411da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI3120_ExttrigDisable(struct comedi_device *dev) 1412c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 1413c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister &= ~APCI3120_ENABLE_EXT_TRIGGER; 1414c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(devpriv->us_OutputRegister, dev->iobase + APCI3120_WR_ADDRESS); 1415c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return 0; 1416c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 1417c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1418c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 1419c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 142074b894e56abcb2403894b268100773f4aabe1999Bill Pemberton| intERRUPT FUNCTIONS | 1421c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1422c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 1423c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1424c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 1425c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1426c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Function name : void v_APCI3120_Interrupt(int irq, void *d) | 1427c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1428c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1429c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1430c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task :Interrupt handler for APCI3120 | 1431c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| When interrupt occurs this gets called. | 1432c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| First it finds which interrupt has been generated and | 1433c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| handles corresponding interrupt | 1434c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1435c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1436c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Input Parameters : int irq | 1437c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| void *d | 1438c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1439c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1440c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : void | 1441c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1442c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1443c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 1444c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1445c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHvoid v_APCI3120_Interrupt(int irq, void *d) 1446c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 144771b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton struct comedi_device *dev = d; 1448a9fce7c9a3b796334916b216a618fd7586f10d76Bill Pemberton unsigned short int_daq; 1449c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1450c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH unsigned int int_amcc, ui_Check, i; 1451a9fce7c9a3b796334916b216a618fd7586f10d76Bill Pemberton unsigned short us_TmpValue; 14521783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton unsigned char b_DummyRead; 1453c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 145434c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton struct comedi_subdevice *s = dev->subdevices + 0; 1455c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Check = 1; 1456c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 14571efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton int_daq = inw(dev->iobase + APCI3120_RD_STATUS) & 0xf000; /* get IRQ reasons */ 14581efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton int_amcc = inl(devpriv->i_IobaseAmcc + AMCC_OP_REG_INTCSR); /* get AMCC int register */ 1459c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1460c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((!int_daq) && (!(int_amcc & ANY_S593X_INT))) { 1461bbc9a9916bc1cd997f3bf303e7930d5f3c804d37André Goddard Rosa comedi_error(dev, "IRQ from unknown source"); 1462c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return; 1463c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 1464c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 14651efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton outl(int_amcc | 0x00ff0000, devpriv->i_IobaseAmcc + AMCC_OP_REG_INTCSR); /* shutdown IRQ reasons in AMCC */ 1466c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1467c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH int_daq = (int_daq >> 12) & 0xF; 1468c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1469c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (devpriv->b_ExttrigEnable == APCI3120_ENABLE) { 14701efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Disable ext trigger */ 1471c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH i_APCI3120_ExttrigDisable(dev); 1472c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ExttrigEnable = APCI3120_DISABLE; 1473c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 14741efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* clear the timer 2 interrupt */ 1475c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH inb(devpriv->i_IobaseAmcc + APCI3120_TIMER_STATUS_REGISTER); 1476c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1477c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (int_amcc & MASTER_ABORT_INT) 1478c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH comedi_error(dev, "AMCC IRQ - MASTER DMA ABORT!"); 1479c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (int_amcc & TARGET_ABORT_INT) 1480c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH comedi_error(dev, "AMCC IRQ - TARGET DMA ABORT!"); 1481c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 14821efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Ckeck if EOC interrupt */ 1483c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (((int_daq & 0x8) == 0) 1484c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH && (devpriv->b_InterruptMode == APCI3120_EOC_MODE)) { 1485c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (devpriv->b_EocEosInterrupt == APCI3120_ENABLE) { 1486c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 14871efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Read the AI Value */ 1488c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1489c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_AiReadData[0] = 1490117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton (unsigned int) inw(devpriv->iobase + 0); 1491c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_EocEosInterrupt = APCI3120_DISABLE; 14921efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton send_sig(SIGIO, devpriv->tsk_Current, 0); /* send signal to the sample */ 1493c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 14941efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Disable EOC Interrupt */ 1495c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 1496c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv-> 1497c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_ModeSelectRegister & APCI3120_DISABLE_EOC_INT; 1498c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(devpriv->b_ModeSelectRegister, 1499c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI3120_WRITE_MODE_SELECT); 1500c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1501c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 1502c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 1503c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 15041efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Check If EOS interrupt */ 1505c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((int_daq & 0x2) && (devpriv->b_InterruptMode == APCI3120_EOS_MODE)) { 1506c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1507dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini if (devpriv->b_EocEosInterrupt == APCI3120_ENABLE) { /* enable this in without DMA ??? */ 1508c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1509c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (devpriv->b_AiCyclicAcquisition == APCI3120_ENABLE) { 1510c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Check = 0; 1511c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH i_APCI3120_InterruptHandleEos(dev); 1512c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_AiActualScan++; 1513c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 1514c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv-> 1515c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_ModeSelectRegister | 1516c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_ENABLE_EOS_INT; 1517c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(devpriv->b_ModeSelectRegister, 1518c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dev->iobase + 1519c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_WRITE_MODE_SELECT); 1520c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 1521c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Check = 0; 1522c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH for (i = 0; i < devpriv->ui_AiNbrofChannels; 1523c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH i++) { 1524c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH us_TmpValue = inw(devpriv->iobase + 0); 1525c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_AiReadData[i] = 1526117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton (unsigned int) us_TmpValue; 1527c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 1528c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_EocEosInterrupt = APCI3120_DISABLE; 1529c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_InterruptMode = APCI3120_EOC_MODE; 1530c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 15311efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton send_sig(SIGIO, devpriv->tsk_Current, 0); /* send signal to the sample */ 1532c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1533c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 1534c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1535c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 1536c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 1537c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv-> 1538c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_ModeSelectRegister & APCI3120_DISABLE_EOS_INT; 1539c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(devpriv->b_ModeSelectRegister, 1540c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dev->iobase + APCI3120_WRITE_MODE_SELECT); 15411efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton devpriv->b_EocEosInterrupt = APCI3120_DISABLE; /* Default settings */ 1542c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_InterruptMode = APCI3120_EOC_MODE; 1543c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 1544c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1545c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 15461efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Timer2 interrupt */ 1547c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (int_daq & 0x1) { 1548c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1549c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH switch (devpriv->b_Timer2Mode) { 1550c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case APCI3120_COUNTER: 1551c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1552c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_AiCyclicAcquisition = APCI3120_DISABLE; 1553c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 1554c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv-> 1555c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_ModeSelectRegister & APCI3120_DISABLE_EOS_INT; 1556c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(devpriv->b_ModeSelectRegister, 1557c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dev->iobase + APCI3120_WRITE_MODE_SELECT); 1558c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 15591efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* stop timer 2 */ 1560c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister = 1561c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv-> 1562c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH us_OutputRegister & APCI3120_DISABLE_ALL_TIMER; 1563c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(devpriv->us_OutputRegister, 1564c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dev->iobase + APCI3120_WR_ADDRESS); 1565c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 15661efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* stop timer 0 and timer 1 */ 1567c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH i_APCI3120_StopCyclicAcquisition(dev, s); 1568c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_AiCyclicAcquisition = APCI3120_DISABLE; 1569c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 15701efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* UPDATE-0.7.57->0.7.68comedi_done(dev,s); */ 1571c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH s->async->events |= COMEDI_CB_EOA; 1572c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH comedi_event(dev, s); 1573c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1574c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 1575c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1576c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case APCI3120_TIMER: 1577c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 15781efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Send a signal to from kernel to user space */ 1579c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH send_sig(SIGIO, devpriv->tsk_Current, 0); 1580c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 1581c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1582c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case APCI3120_WATCHDOG: 1583c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 15841efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Send a signal to from kernel to user space */ 1585c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH send_sig(SIGIO, devpriv->tsk_Current, 0); 1586c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 1587c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1588c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH default: 1589c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 15901efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* disable Timer Interrupt */ 1591c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1592c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 1593c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv-> 1594c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_ModeSelectRegister & 1595c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_DISABLE_TIMER_INT; 1596c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1597c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(devpriv->b_ModeSelectRegister, 1598c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dev->iobase + APCI3120_WRITE_MODE_SELECT); 1599c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1600c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 1601c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1602c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_DummyRead = inb(dev->iobase + APCI3120_TIMER_STATUS_REGISTER); 1603c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1604c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 1605c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1606c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((int_daq & 0x4) && (devpriv->b_InterruptMode == APCI3120_DMA_MODE)) { 1607c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (devpriv->b_AiCyclicAcquisition == APCI3120_ENABLE) { 1608c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1609c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /****************************/ 161074b894e56abcb2403894b268100773f4aabe1999Bill Pemberton /* Clear Timer Write TC int */ 1611c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /****************************/ 1612c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1613c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outl(APCI3120_CLEAR_WRITE_TC_INT, 1614c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->i_IobaseAmcc + 1615c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_AMCC_OP_REG_INTCSR); 1616c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1617c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /************************************/ 1618c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Clears the timer status register */ 1619c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /************************************/ 1620c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH inw(dev->iobase + APCI3120_TIMER_STATUS_REGISTER); 16211efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton v_APCI3120_InterruptDma(irq, d); /* do some data transfer */ 1622c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 1623c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Stops the Timer */ 1624c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(devpriv-> 1625c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH us_OutputRegister & APCI3120_DISABLE_TIMER0 & 1626c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_DISABLE_TIMER1, 1627c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dev->iobase + APCI3120_WR_ADDRESS); 1628c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 1629c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1630c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 1631c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1632c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return; 1633c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 1634c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1635c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 1636c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 163771b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Function name :int i_APCI3120_InterruptHandleEos(struct comedi_device *dev) | 1638c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1639c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1640c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1641c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : This function handles EOS interrupt. | 1642c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| This function copies the acquired data(from FIFO) | 1643c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| to Comedi buffer. | 1644c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1645c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 164671b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters : struct comedi_device *dev | 1647c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1648c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1649c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1650c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : 0 | 1651c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1652c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1653c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 1654c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 16551efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton 1656da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI3120_InterruptHandleEos(struct comedi_device *dev) 1657c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 1658c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH int n_chan, i; 165934c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton struct comedi_subdevice *s = dev->subdevices + 0; 1660c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH int err = 1; 1661c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1662c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH n_chan = devpriv->ui_AiNbrofChannels; 1663c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1664c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH s->async->events = 0; 1665c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1666c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH for (i = 0; i < n_chan; i++) 1667c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH err &= comedi_buf_put(s->async, inw(dev->iobase + 0)); 1668c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1669c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH s->async->events |= COMEDI_CB_EOS; 1670c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1671c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (err == 0) 1672c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH s->async->events |= COMEDI_CB_OVERFLOW; 1673c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1674c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH comedi_event(dev, s); 1675c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1676c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return 0; 1677c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 1678c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1679c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 1680c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1681c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Function name : void v_APCI3120_InterruptDma(int irq, void *d) | 1682c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1683c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1684c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : This is a handler for the DMA interrupt | 1685c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| This function copies the data to Comedi Buffer. | 1686c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| For continuous DMA it reinitializes the DMA operation. | 1687c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| For single mode DMA it stop the acquisition. | 1688c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1689c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1690c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Input Parameters : int irq, void *d | 1691c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1692c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1693c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : void | 1694c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1695c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1696c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 1697c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1698c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHvoid v_APCI3120_InterruptDma(int irq, void *d) 1699c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 170071b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton struct comedi_device *dev = d; 170134c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton struct comedi_subdevice *s = dev->subdevices + 0; 1702c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH unsigned int next_dma_buf, samplesinbuf; 1703c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH unsigned long low_word, high_word, var; 1704c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1705117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton unsigned int ui_Tmp; 1706c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH samplesinbuf = 1707c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_DmaBufferUsesize[devpriv->ui_DmaActualBuffer] - 1708c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH inl(devpriv->i_IobaseAmcc + AMCC_OP_REG_MWTC); 1709c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1710c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (samplesinbuf < 1711c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_DmaBufferUsesize[devpriv->ui_DmaActualBuffer]) { 1712c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH comedi_error(dev, "Interrupted DMA transfer!"); 1713c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 1714c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (samplesinbuf & 1) { 1715c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH comedi_error(dev, "Odd count of bytes in DMA ring!"); 1716c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH i_APCI3120_StopCyclicAcquisition(dev, s); 1717c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_AiCyclicAcquisition = APCI3120_DISABLE; 1718c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1719c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return; 1720c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 17211efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton samplesinbuf = samplesinbuf >> 1; /* number of received samples */ 1722c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (devpriv->b_DmaDoubleBuffer) { 17231efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* switch DMA buffers if is used double buffering */ 1724c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH next_dma_buf = 1 - devpriv->ui_DmaActualBuffer; 1725c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1726c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Tmp = AGCSTS_TC_ENABLE | AGCSTS_RESET_A2P_FIFO; 1727c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outl(ui_Tmp, devpriv->i_IobaseAddon + AMCC_OP_REG_AGCSTS); 1728c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 17291efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* changed since 16 bit interface for add on */ 1730c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(APCI3120_ADD_ON_AGCSTS_LOW, devpriv->i_IobaseAddon + 0); 1731c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(APCI3120_ENABLE_TRANSFER_ADD_ON_LOW, 1732c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->i_IobaseAddon + 2); 1733c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(APCI3120_ADD_ON_AGCSTS_HIGH, devpriv->i_IobaseAddon + 0); 17341efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton outw(APCI3120_ENABLE_TRANSFER_ADD_ON_HIGH, devpriv->i_IobaseAddon + 2); /* 0x1000 is out putted in windows driver */ 1735c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1736c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH var = devpriv->ul_DmaBufferHw[next_dma_buf]; 1737c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH low_word = var & 0xffff; 1738c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH var = devpriv->ul_DmaBufferHw[next_dma_buf]; 1739c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH high_word = var / 65536; 1740c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1741f69b0d6451679f1466381a46ac7ab671a7b5668cUwe Kleine-König /* DMA Start Address Low */ 1742c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(APCI3120_ADD_ON_MWAR_LOW, devpriv->i_IobaseAddon + 0); 1743c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(low_word, devpriv->i_IobaseAddon + 2); 1744c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1745f69b0d6451679f1466381a46ac7ab671a7b5668cUwe Kleine-König /* DMA Start Address High */ 1746c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(APCI3120_ADD_ON_MWAR_HIGH, devpriv->i_IobaseAddon + 0); 1747c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(high_word, devpriv->i_IobaseAddon + 2); 1748c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1749c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH var = devpriv->ui_DmaBufferUsesize[next_dma_buf]; 1750c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH low_word = var & 0xffff; 1751c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH var = devpriv->ui_DmaBufferUsesize[next_dma_buf]; 1752c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH high_word = var / 65536; 1753c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1754c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Nbr of acquisition LOW */ 1755c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(APCI3120_ADD_ON_MWTC_LOW, devpriv->i_IobaseAddon + 0); 1756c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(low_word, devpriv->i_IobaseAddon + 2); 1757c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1758c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Nbr of acquisition HIGH */ 1759c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(APCI3120_ADD_ON_MWTC_HIGH, devpriv->i_IobaseAddon + 0); 1760c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(high_word, devpriv->i_IobaseAddon + 2); 1761c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 17621efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* 17631efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * To configure A2P FIFO 17641efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * ENABLE A2P FIFO WRITE AND ENABLE AMWEN 17651efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * AMWEN_ENABLE | A2P_FIFO_WRITE_ENABLE (0x01|0x02)=0x03 17661efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton */ 1767c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(3, devpriv->i_IobaseAddon + 4); 17681efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* initialise end of dma interrupt AINT_WRITE_COMPL = ENABLE_WRITE_TC_INT(ADDI) */ 1769c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outl((APCI3120_FIFO_ADVANCE_ON_BYTE_2 | 1770c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_ENABLE_WRITE_TC_INT), 1771c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->i_IobaseAmcc + AMCC_OP_REG_INTCSR); 1772c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1773c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 1774c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (samplesinbuf) { 1775c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH v_APCI3120_InterruptDmaMoveBlock16bit(dev, s, 1776c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ul_DmaBufferVirtual[devpriv-> 1777c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_DmaActualBuffer], samplesinbuf); 1778c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1779c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (!(devpriv->ui_AiFlags & TRIG_WAKE_EOS)) { 1780c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH s->async->events |= COMEDI_CB_EOS; 1781c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH comedi_event(dev, s); 1782c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 1783c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 1784c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (!devpriv->b_AiContinuous) 1785c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (devpriv->ui_AiActualScan >= devpriv->ui_AiNbrofScans) { 17861efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* all data sampled */ 1787c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH i_APCI3120_StopCyclicAcquisition(dev, s); 1788c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_AiCyclicAcquisition = APCI3120_DISABLE; 1789c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH s->async->events |= COMEDI_CB_EOA; 1790c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH comedi_event(dev, s); 1791c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return; 1792c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 1793c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 17941efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton if (devpriv->b_DmaDoubleBuffer) { /* switch dma buffers */ 1795c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_DmaActualBuffer = 1 - devpriv->ui_DmaActualBuffer; 1796c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 17971efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* 17981efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * restart DMA if is not used double buffering 17991efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * ADDED REINITIALISE THE DMA 18001efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton */ 1801c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Tmp = AGCSTS_TC_ENABLE | AGCSTS_RESET_A2P_FIFO; 1802c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outl(ui_Tmp, devpriv->i_IobaseAddon + AMCC_OP_REG_AGCSTS); 1803c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 18041efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* changed since 16 bit interface for add on */ 1805c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(APCI3120_ADD_ON_AGCSTS_LOW, devpriv->i_IobaseAddon + 0); 1806c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(APCI3120_ENABLE_TRANSFER_ADD_ON_LOW, 1807c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->i_IobaseAddon + 2); 1808c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(APCI3120_ADD_ON_AGCSTS_HIGH, devpriv->i_IobaseAddon + 0); 18091efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton outw(APCI3120_ENABLE_TRANSFER_ADD_ON_HIGH, devpriv->i_IobaseAddon + 2); /* */ 18101efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* 18111efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * A2P FIFO MANAGEMENT 18121efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * A2P fifo reset & transfer control enable 18131efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton */ 1814c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outl(APCI3120_A2P_FIFO_MANAGEMENT, 1815c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->i_IobaseAmcc + AMCC_OP_REG_MCSR); 1816c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1817c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH var = devpriv->ul_DmaBufferHw[0]; 1818c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH low_word = var & 0xffff; 1819c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH var = devpriv->ul_DmaBufferHw[0]; 1820c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH high_word = var / 65536; 1821c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(APCI3120_ADD_ON_MWAR_LOW, devpriv->i_IobaseAddon + 0); 1822c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(low_word, devpriv->i_IobaseAddon + 2); 1823c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(APCI3120_ADD_ON_MWAR_HIGH, devpriv->i_IobaseAddon + 0); 1824c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(high_word, devpriv->i_IobaseAddon + 2); 1825c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1826c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH var = devpriv->ui_DmaBufferUsesize[0]; 18271efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton low_word = var & 0xffff; /* changed */ 1828c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH var = devpriv->ui_DmaBufferUsesize[0]; 1829c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH high_word = var / 65536; 1830c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(APCI3120_ADD_ON_MWTC_LOW, devpriv->i_IobaseAddon + 0); 1831c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(low_word, devpriv->i_IobaseAddon + 2); 1832c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(APCI3120_ADD_ON_MWTC_HIGH, devpriv->i_IobaseAddon + 0); 1833c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(high_word, devpriv->i_IobaseAddon + 2); 1834c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 18351efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* 18361efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * To configure A2P FIFO 18371efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * ENABLE A2P FIFO WRITE AND ENABLE AMWEN 18381efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * AMWEN_ENABLE | A2P_FIFO_WRITE_ENABLE (0x01|0x02)=0x03 18391efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton */ 1840c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(3, devpriv->i_IobaseAddon + 4); 18411efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* initialise end of dma interrupt AINT_WRITE_COMPL = ENABLE_WRITE_TC_INT(ADDI) */ 1842c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outl((APCI3120_FIFO_ADVANCE_ON_BYTE_2 | 1843c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_ENABLE_WRITE_TC_INT), 1844c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->i_IobaseAmcc + AMCC_OP_REG_INTCSR); 1845c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 1846c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 1847c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1848c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 1849c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1850c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Function name :void v_APCI3120_InterruptDmaMoveBlock16bit(comedi_device| 185134c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton|*dev,struct comedi_subdevice *s,short *dma,short *data,int n) | 1852c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1853c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1854c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : This function copies the data from DMA buffer to the | 1855c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Comedi buffer | 1856c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1857c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 185871b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters : struct comedi_device *dev | 185934c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice *s | 1860790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton| short *dma | 1861790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton| short *data,int n | 1862c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1863c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : void | 1864c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1865c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1866c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 1867c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1868da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonvoid v_APCI3120_InterruptDmaMoveBlock16bit(struct comedi_device *dev, 1869da91b2692e0939b307f9047192d2b9fe07793e7aBill Pemberton struct comedi_subdevice *s, short *dma_buffer, unsigned int num_samples) 1870c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 1871c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ui_AiActualScan += 1872c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (s->async->cur_chan + num_samples) / devpriv->ui_AiScanLength; 1873c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH s->async->cur_chan += num_samples; 1874c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH s->async->cur_chan %= devpriv->ui_AiScanLength; 1875c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1876790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton cfc_write_array_to_buffer(s, dma_buffer, num_samples * sizeof(short)); 1877c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 1878c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1879c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 1880c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1881c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| TIMER SUBDEVICE | 1882c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1883c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 1884c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1885c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 1886c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 188771b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Function name :int i_APCI3120_InsnConfigTimer(struct comedi_device *dev, | 188890035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton| struct comedi_subdevice *s,struct comedi_insn *insn,unsigned int *data) | 1889c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1890c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1891c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task :Configure Timer 2 | 1892c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1893c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 189471b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters : struct comedi_device *dev | 189534c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice *s | 189690035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton| struct comedi_insn *insn | 1897790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton| unsigned int *data | 1898c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1899c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| data[0]= TIMER configure as timer | 1900c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| = WATCHDOG configure as watchdog | 1901c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| data[1] = Timer constant | 1902c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| data[2] = Timer2 interrupt (1)enable or(0) disable | 1903c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1904c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1905c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : | 1906c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 1907c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 1908c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 1909c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1910da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI3120_InsnConfigTimer(struct comedi_device *dev, struct comedi_subdevice *s, 1911da91b2692e0939b307f9047192d2b9fe07793e7aBill Pemberton struct comedi_insn *insn, unsigned int *data) 1912c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 1913c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1914117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton unsigned int ui_Timervalue2; 1915a9fce7c9a3b796334916b216a618fd7586f10d76Bill Pemberton unsigned short us_TmpValue; 19161783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton unsigned char b_Tmp; 1917c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1918c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (!data[1]) 1919c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH comedi_error(dev, "config:No timer constant !"); 1920c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 19211efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton devpriv->b_Timer2Interrupt = (unsigned char) data[2]; /* save info whether to enable or disable interrupt */ 1922c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 19231efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton ui_Timervalue2 = data[1] / 1000; /* convert nano seconds to u seconds */ 1924c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 19251efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* this_board->i_hwdrv_InsnConfigTimer(dev, ui_Timervalue2,(unsigned char)data[0]); */ 1926a9fce7c9a3b796334916b216a618fd7586f10d76Bill Pemberton us_TmpValue = (unsigned short) inw(devpriv->iobase + APCI3120_RD_STATUS); 1927c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 19281efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* 19291efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * EL250804: Testing if board APCI3120 have the new Quartz or if it 19301efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * is an APCI3001 and calculate the time value to set in the timer 19311efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton */ 1932c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((us_TmpValue & 0x00B0) == 0x00B0 1933c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH || !strcmp(this_board->pc_DriverName, "apci3001")) { 19341efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Calculate the time value to set in the timer */ 1935c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Timervalue2 = ui_Timervalue2 / 50; 1936c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 19371efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Calculate the time value to set in the timer */ 1938c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Timervalue2 = ui_Timervalue2 / 70; 1939c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 1940c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 19411efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Reset gate 2 of Timer 2 to disable it (Set Bit D14 to 0) */ 1942c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister = 1943c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister & APCI3120_DISABLE_TIMER2; 1944c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(devpriv->us_OutputRegister, devpriv->iobase + APCI3120_WR_ADDRESS); 1945c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 19461efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Disable TIMER Interrupt */ 1947c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 1948c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv-> 1949c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_ModeSelectRegister & APCI3120_DISABLE_TIMER_INT & 0xEF; 1950c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 19511efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Disable Eoc and Eos Interrupts */ 1952c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 1953c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv-> 1954c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_ModeSelectRegister & APCI3120_DISABLE_EOC_INT & 1955c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_DISABLE_EOS_INT; 1956c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(devpriv->b_ModeSelectRegister, 1957c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI3120_WRITE_MODE_SELECT); 1958dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini if (data[0] == APCI3120_TIMER) { /* initialize timer */ 19591efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* devpriv->b_ModeSelectRegister=devpriv->b_ModeSelectRegister | 19601efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * APCI3120_ENABLE_TIMER_INT; */ 1961c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 19621efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* outb(devpriv->b_ModeSelectRegister,devpriv->iobase+APCI3120_WRITE_MODE_SELECT); */ 1963c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 19641efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Set the Timer 2 in mode 2(Timer) */ 1965c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_TimerSelectMode = 1966c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (devpriv-> 1967c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_TimerSelectMode & 0x0F) | APCI3120_TIMER_2_MODE_2; 1968c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(devpriv->b_TimerSelectMode, 1969c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI3120_TIMER_CRT1); 1970c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 19711efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* 19721efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * Configure the timer 2 for writing the LOW unsigned short of timer 19731efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * is Delay value You must make a b_tmp variable with 19741efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * DigitalOutPutRegister because at Address_1+APCI3120_TIMER_CRT0 19751efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * you can set the digital output and configure the timer 2,and if 19761efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * you don't make this, digital output are erase (Set to 0) 19771efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton */ 19781efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton 19791efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Writing LOW unsigned short */ 1980c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_Tmp = ((devpriv-> 1981c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_DigitalOutputRegister) & 0xF0) | 1982c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_SELECT_TIMER_2_LOW_WORD; 1983c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(b_Tmp, devpriv->iobase + APCI3120_TIMER_CRT0); 1984c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(LOWORD(ui_Timervalue2), 1985c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI3120_TIMER_VALUE); 1986c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 19871efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Writing HIGH unsigned short */ 1988c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_Tmp = ((devpriv-> 1989c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_DigitalOutputRegister) & 0xF0) | 1990c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_SELECT_TIMER_2_HIGH_WORD; 1991c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(b_Tmp, devpriv->iobase + APCI3120_TIMER_CRT0); 1992c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(HIWORD(ui_Timervalue2), 1993c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI3120_TIMER_VALUE); 19941efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* timer2 in Timer mode enabled */ 1995c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_Timer2Mode = APCI3120_TIMER; 1996c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1997dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini } else { /* Initialize Watch dog */ 1998c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 19991efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Set the Timer 2 in mode 5(Watchdog) */ 2000c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2001c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_TimerSelectMode = 2002c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (devpriv-> 2003c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_TimerSelectMode & 0x0F) | APCI3120_TIMER_2_MODE_5; 2004c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(devpriv->b_TimerSelectMode, 2005c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI3120_TIMER_CRT1); 2006c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 20071efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* 20081efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * Configure the timer 2 for writing the LOW unsigned short of timer 20091efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * is Delay value You must make a b_tmp variable with 20101efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * DigitalOutPutRegister because at Address_1+APCI3120_TIMER_CRT0 20111efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * you can set the digital output and configure the timer 2,and if 20121efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * you don't make this, digital output are erase (Set to 0) 20131efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton */ 20141efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton 20151efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Writing LOW unsigned short */ 2016c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_Tmp = ((devpriv-> 2017c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_DigitalOutputRegister) & 0xF0) | 2018c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_SELECT_TIMER_2_LOW_WORD; 2019c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(b_Tmp, devpriv->iobase + APCI3120_TIMER_CRT0); 2020c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(LOWORD(ui_Timervalue2), 2021c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI3120_TIMER_VALUE); 2022c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 20231efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Writing HIGH unsigned short */ 2024c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_Tmp = ((devpriv-> 2025c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_DigitalOutputRegister) & 0xF0) | 2026c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_SELECT_TIMER_2_HIGH_WORD; 2027c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(b_Tmp, devpriv->iobase + APCI3120_TIMER_CRT0); 2028c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2029c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(HIWORD(ui_Timervalue2), 2030c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI3120_TIMER_VALUE); 20311efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* watchdog enabled */ 2032c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_Timer2Mode = APCI3120_WATCHDOG; 2033c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2034c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 2035c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2036c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return insn->n; 2037c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2038c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 2039c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2040c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 2041c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 204271b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Function name :int i_APCI3120_InsnWriteTimer(struct comedi_device *dev, | 204390035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton| struct comedi_subdevice *s, struct comedi_insn *insn,unsigned int *data) | 2044c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 2045c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2046c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : To start and stop the timer | 2047c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 204871b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters : struct comedi_device *dev | 204934c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice *s | 205090035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton| struct comedi_insn *insn | 2051790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton| unsigned int *data | 2052c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 2053c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| data[0] = 1 (start) | 2054c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| data[0] = 0 (stop ) | 2055c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| data[0] = 2 (write new value) | 2056c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| data[1]= new value | 2057c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 2058c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| devpriv->b_Timer2Mode = 0 DISABLE | 2059c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| 1 Timer | 2060c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| 2 Watch dog | 2061c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 2062c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2063c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : | 2064c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 2065c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2066c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 2067c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2068da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI3120_InsnWriteTimer(struct comedi_device *dev, struct comedi_subdevice *s, 2069da91b2692e0939b307f9047192d2b9fe07793e7aBill Pemberton struct comedi_insn *insn, unsigned int *data) 2070c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 2071c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2072117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton unsigned int ui_Timervalue2 = 0; 2073a9fce7c9a3b796334916b216a618fd7586f10d76Bill Pemberton unsigned short us_TmpValue; 20741783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton unsigned char b_Tmp; 2075c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2076c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((devpriv->b_Timer2Mode != APCI3120_WATCHDOG) 2077c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH && (devpriv->b_Timer2Mode != APCI3120_TIMER)) { 2078c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH comedi_error(dev, "\nwrite:timer2 not configured "); 2079c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return -EINVAL; 2080c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 2081c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2082dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini if (data[0] == 2) { /* write new value */ 2083c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (devpriv->b_Timer2Mode != APCI3120_TIMER) { 2084c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH comedi_error(dev, 2085c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH "write :timer2 not configured in TIMER MODE"); 2086c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return -EINVAL; 2087c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 2088c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2089c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (data[1]) 2090c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Timervalue2 = data[1]; 2091c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH else 2092c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Timervalue2 = 0; 2093c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 2094c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 20951efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* this_board->i_hwdrv_InsnWriteTimer(dev,data[0],ui_Timervalue2); */ 2096c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2097c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH switch (data[0]) { 2098c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case APCI3120_START: 2099c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 21001efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Reset FC_TIMER BIT */ 2101c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH inb(devpriv->iobase + APCI3120_TIMER_STATUS_REGISTER); 2102dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini if (devpriv->b_Timer2Mode == APCI3120_TIMER) { /* start timer */ 21031efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Enable Timer */ 2104c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 2105c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister & 0x0B; 2106dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini } else { /* start watch dog */ 21071efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Enable WatchDog */ 2108c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 2109c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (devpriv-> 2110c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_ModeSelectRegister & 0x0B) | 2111c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_ENABLE_WATCHDOG; 2112c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 2113c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 21141efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* enable disable interrupt */ 2115c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((devpriv->b_Timer2Interrupt) == APCI3120_ENABLE) { 2116c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2117c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 2118c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv-> 2119c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_ModeSelectRegister | 2120c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_ENABLE_TIMER_INT; 21211efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* save the task structure to pass info to user */ 2122c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->tsk_Current = current; 2123c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 2124c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2125c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 2126c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv-> 2127c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_ModeSelectRegister & 2128c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_DISABLE_TIMER_INT; 2129c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 2130c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(devpriv->b_ModeSelectRegister, 2131c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI3120_WRITE_MODE_SELECT); 2132c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2133dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini if (devpriv->b_Timer2Mode == APCI3120_TIMER) { /* start timer */ 21341efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* For Timer mode is Gate2 must be activated **timer started */ 2135c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister = 2136c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv-> 2137c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH us_OutputRegister | APCI3120_ENABLE_TIMER2; 2138c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(devpriv->us_OutputRegister, 2139c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI3120_WR_ADDRESS); 2140c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 2141c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2142c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 2143c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2144c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case APCI3120_STOP: 2145c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (devpriv->b_Timer2Mode == APCI3120_TIMER) { 21461efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Disable timer */ 2147c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 2148c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv-> 2149c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_ModeSelectRegister & 2150c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_DISABLE_TIMER_COUNTER; 2151c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 21521efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Disable WatchDog */ 2153c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 2154c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv-> 2155c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_ModeSelectRegister & 2156c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_DISABLE_WATCHDOG; 2157c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 21581efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Disable timer interrupt */ 2159c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_ModeSelectRegister = 2160c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv-> 2161c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_ModeSelectRegister & APCI3120_DISABLE_TIMER_INT; 2162c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 21631efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Write above states to register */ 2164c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(devpriv->b_ModeSelectRegister, 2165c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI3120_WRITE_MODE_SELECT); 2166c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 21671efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Reset Gate 2 */ 2168c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister = 2169c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->us_OutputRegister & APCI3120_DISABLE_TIMER_INT; 2170c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(devpriv->us_OutputRegister, 2171c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI3120_WR_ADDRESS); 2172c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 21731efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Reset FC_TIMER BIT */ 2174c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH inb(devpriv->iobase + APCI3120_TIMER_STATUS_REGISTER); 2175c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 21761efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Disable timer */ 21771efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* devpriv->b_Timer2Mode=APCI3120_DISABLE; */ 2178c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2179c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 2180c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 21811efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton case 2: /* write new value to Timer */ 2182c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (devpriv->b_Timer2Mode != APCI3120_TIMER) { 2183c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH comedi_error(dev, 2184c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH "write :timer2 not configured in TIMER MODE"); 2185c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return -EINVAL; 2186c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 21871efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* ui_Timervalue2=data[1]; // passed as argument */ 2188c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH us_TmpValue = 2189a9fce7c9a3b796334916b216a618fd7586f10d76Bill Pemberton (unsigned short) inw(devpriv->iobase + APCI3120_RD_STATUS); 2190c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 21911efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* 21921efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * EL250804: Testing if board APCI3120 have the new Quartz or if it 21931efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * is an APCI3001 and calculate the time value to set in the timer 21941efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton */ 2195c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((us_TmpValue & 0x00B0) == 0x00B0 2196c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH || !strcmp(this_board->pc_DriverName, "apci3001")) { 21971efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Calculate the time value to set in the timer */ 2198c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Timervalue2 = ui_Timervalue2 / 50; 2199c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 22001efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Calculate the time value to set in the timer */ 2201c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Timervalue2 = ui_Timervalue2 / 70; 2202c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 22031efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Writing LOW unsigned short */ 2204c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_Tmp = ((devpriv-> 2205c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_DigitalOutputRegister) & 0xF0) | 2206c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_SELECT_TIMER_2_LOW_WORD; 2207c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(b_Tmp, devpriv->iobase + APCI3120_TIMER_CRT0); 2208c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2209c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(LOWORD(ui_Timervalue2), 2210c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI3120_TIMER_VALUE); 2211c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 22121efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Writing HIGH unsigned short */ 2213c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_Tmp = ((devpriv-> 2214c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_DigitalOutputRegister) & 0xF0) | 2215c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_SELECT_TIMER_2_HIGH_WORD; 2216c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(b_Tmp, devpriv->iobase + APCI3120_TIMER_CRT0); 2217c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2218c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(HIWORD(ui_Timervalue2), 2219c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI3120_TIMER_VALUE); 2220c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2221c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 2222c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH default: 22231efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton return -EINVAL; /* Not a valid input */ 2224c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 2225c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2226c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return insn->n; 2227c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 2228c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2229c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 2230c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 223171b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Function name : int i_APCI3120_InsnReadTimer(struct comedi_device *dev, | 223290035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton| struct comedi_subdevice *s,struct comedi_insn *insn, unsigned int *data) | 2233c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 2234c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 2235c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2236c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : read the Timer value | 2237c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 223871b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters : struct comedi_device *dev | 223934c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice *s | 224090035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton| struct comedi_insn *insn | 2241790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton| unsigned int *data | 2242c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 2243c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2244c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : | 2245c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| for Timer: data[0]= Timer constant | 2246c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 2247c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| for watchdog: data[0]=0 (still running) | 2248c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| data[0]=1 (run down) | 2249c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 2250c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2251c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 2252da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI3120_InsnReadTimer(struct comedi_device *dev, struct comedi_subdevice *s, 2253da91b2692e0939b307f9047192d2b9fe07793e7aBill Pemberton struct comedi_insn *insn, unsigned int *data) 2254c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 22551783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton unsigned char b_Tmp; 2256a9fce7c9a3b796334916b216a618fd7586f10d76Bill Pemberton unsigned short us_TmpValue, us_TmpValue_2, us_StatusValue; 2257c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2258c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((devpriv->b_Timer2Mode != APCI3120_WATCHDOG) 2259c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH && (devpriv->b_Timer2Mode != APCI3120_TIMER)) { 2260c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH comedi_error(dev, "\nread:timer2 not configured "); 2261c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 2262c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 22631efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* this_board->i_hwdrv_InsnReadTimer(dev,data); */ 2264c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (devpriv->b_Timer2Mode == APCI3120_TIMER) { 2265c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 22661efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Read the LOW unsigned short of Timer 2 register */ 2267c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_Tmp = ((devpriv-> 2268c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_DigitalOutputRegister) & 0xF0) | 2269c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_SELECT_TIMER_2_LOW_WORD; 2270c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(b_Tmp, devpriv->iobase + APCI3120_TIMER_CRT0); 2271c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2272c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH us_TmpValue = inw(devpriv->iobase + APCI3120_TIMER_VALUE); 2273c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 22741efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* Read the HIGH unsigned short of Timer 2 register */ 2275c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_Tmp = ((devpriv-> 2276c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_DigitalOutputRegister) & 0xF0) | 2277c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_SELECT_TIMER_2_HIGH_WORD; 2278c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(b_Tmp, devpriv->iobase + APCI3120_TIMER_CRT0); 2279c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2280c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH us_TmpValue_2 = inw(devpriv->iobase + APCI3120_TIMER_VALUE); 2281c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 22821efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* combining both words */ 2283117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton data[0] = (unsigned int) ((us_TmpValue) | ((us_TmpValue_2) << 16)); 2284c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2285dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini } else { /* Read watch dog status */ 2286c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2287c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH us_StatusValue = inw(devpriv->iobase + APCI3120_RD_STATUS); 2288c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH us_StatusValue = 2289c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ((us_StatusValue & APCI3120_FC_TIMER) >> 12) & 1; 2290c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (us_StatusValue == 1) { 22911efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* RESET FC_TIMER BIT */ 2292c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH inb(devpriv->iobase + APCI3120_TIMER_STATUS_REGISTER); 2293c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 22941efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton data[0] = us_StatusValue; /* when data[0] = 1 then the watch dog has rundown */ 2295c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 2296c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return insn->n; 2297c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 2298c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2299c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 2300c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2301c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| DIGITAL INPUT SUBDEVICE | 2302c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2303c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 2304c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2305c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 2306c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 230771b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Function name :int i_APCI3120_InsnReadDigitalInput(struct comedi_device *dev, | 230890035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton| struct comedi_subdevice *s, struct comedi_insn *insn,unsigned int *data) | 2309c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 2310c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 2311c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2312c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : Reads the value of the specified Digital input channel| 2313c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 2314c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 231571b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters : struct comedi_device *dev | 231634c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice *s | 231790035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton| struct comedi_insn *insn | 2318790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton| unsigned int *data | 2319c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2320c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : | 2321c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 2322c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2323c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 2324c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 232534c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pembertonint i_APCI3120_InsnReadDigitalInput(struct comedi_device *dev, 232634c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton struct comedi_subdevice *s, 232790035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton struct comedi_insn *insn, 232834c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton unsigned int *data) 2329c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 2330117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton unsigned int ui_Chan, ui_TmpValue; 2331c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 23321efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton ui_Chan = CR_CHAN(insn->chanspec); /* channel specified */ 2333c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 23341efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* this_board->i_hwdrv_InsnReadDigitalInput(dev,ui_Chan,data); */ 2335dc8af06898c4326cee1739e2bc100bed2b601721Roel Kluin if (ui_Chan <= 3) { 2336117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton ui_TmpValue = (unsigned int) inw(devpriv->iobase + APCI3120_RD_STATUS); 2337c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 23381efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* 23391efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * since only 1 channel reqd to bring it to last bit it is rotated 8 23401efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * +(chan - 1) times then ANDed with 1 for last bit. 23411efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton */ 2342c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH *data = (ui_TmpValue >> (ui_Chan + 8)) & 1; 23431efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* return 0; */ 2344c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 23451efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* comedi_error(dev," chan spec wrong"); */ 23461efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton return -EINVAL; /* "sorry channel spec wrong " */ 2347c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 2348c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return insn->n; 2349c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2350c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 2351c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2352c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 2353c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 235471b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Function name :int i_APCI3120_InsnBitsDigitalInput(struct comedi_device *dev, | 235590035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton|struct comedi_subdevice *s, struct comedi_insn *insn,unsigned int *data) | 2356c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 2357c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2358c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : Reads the value of the Digital input Port i.e.4channels| 2359c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| value is returned in data[0] | 2360c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 2361c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 236271b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters : struct comedi_device *dev | 236334c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice *s | 236490035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton| struct comedi_insn *insn | 2365790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton| unsigned int *data | 2366c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2367c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : | 2368c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 2369c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2370c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 2371da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI3120_InsnBitsDigitalInput(struct comedi_device *dev, struct comedi_subdevice *s, 2372da91b2692e0939b307f9047192d2b9fe07793e7aBill Pemberton struct comedi_insn *insn, unsigned int *data) 2373c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 2374117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton unsigned int ui_TmpValue; 2375117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton ui_TmpValue = (unsigned int) inw(devpriv->iobase + APCI3120_RD_STATUS); 2376c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /***** state of 4 channels in the 11, 10, 9, 8 bits of status reg 2377c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH rotated right 8 times to bring them to last four bits 2378c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ANDed with oxf for value. 2379c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH *****/ 2380c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2381c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH *data = (ui_TmpValue >> 8) & 0xf; 23821efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* this_board->i_hwdrv_InsnBitsDigitalInput(dev,data); */ 2383c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return insn->n; 2384c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 2385c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2386c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 2387c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2388c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| DIGITAL OUTPUT SUBDEVICE | 2389c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2390c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 2391c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 2392c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 239371b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Function name :int i_APCI3120_InsnConfigDigitalOutput(struct comedi_device | 239490035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton| *dev,struct comedi_subdevice *s,struct comedi_insn *insn,unsigned int *data) | 2395c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 2396c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2397c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task :Configure the output memory ON or OFF | 2398c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 2399c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 240071b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters :struct comedi_device *dev | 240134c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice *s | 240290035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton| struct comedi_insn *insn | 2403790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton| unsigned int *data | 2404c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2405c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : | 2406c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 2407c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2408c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 2409c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2410da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI3120_InsnConfigDigitalOutput(struct comedi_device *dev, 2411da91b2692e0939b307f9047192d2b9fe07793e7aBill Pemberton struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) 2412c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 2413c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2414c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((data[0] != 0) && (data[0] != 1)) { 2415c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH comedi_error(dev, 2416c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH "Not a valid Data !!! ,Data should be 1 or 0\n"); 2417c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return -EINVAL; 2418c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 2419c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (data[0]) { 2420c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_OutputMemoryStatus = APCI3120_ENABLE; 2421c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2422c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 2423c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_OutputMemoryStatus = APCI3120_DISABLE; 2424c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_DigitalOutputRegister = 0; 2425c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 2426dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini if (!devpriv->b_OutputMemoryStatus) 2427c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Temp = 0; 2428dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini /* if(!devpriv->b_OutputMemoryStatus ) */ 2429c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2430c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return insn->n; 2431c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 2432c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2433c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 2434c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 243571b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Function name :int i_APCI3120_InsnBitsDigitalOutput(struct comedi_device *dev, | 243690035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton| struct comedi_subdevice *s, struct comedi_insn *insn,unsigned int *data) | 2437c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 2438c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2439c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : write diatal output port | 2440c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 2441c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 244271b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters : struct comedi_device *dev | 244334c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice *s | 244490035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton| struct comedi_insn *insn | 2445790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton| unsigned int *data | 2446356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton| data[0] Value to be written 2447356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton| data[1] :1 Set digital o/p ON 2448356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton| data[1] 2 Set digital o/p OFF with memory ON 2449c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2450c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : | 2451c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 2452c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2453c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 2454c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2455da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI3120_InsnBitsDigitalOutput(struct comedi_device *dev, 245634c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton struct comedi_subdevice *s, 245790035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton struct comedi_insn *insn, 245834c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton unsigned int *data) 2459c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 246057517878df4e5769885e80aba895f4e69b1ddbe9Ian Abbott if ((data[0] > devpriv->s_EeParameters.i_DoMaxdata) || (data[0] < 0)) { 2461c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2462c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH comedi_error(dev, "Data is not valid !!! \n"); 2463c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return -EINVAL; 2464c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 2465c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2466c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH switch (data[1]) { 2467c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case 1: 2468c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[0] = (data[0] << 4) | devpriv->b_DigitalOutputRegister; 2469c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 2470c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2471c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case 2: 2472c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[0] = data[0]; 2473c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 2474c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH default: 2475c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nThe parameter passed is in error \n"); 2476c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return -EINVAL; 24771efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton } /* switch(data[1]) */ 2478c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(data[0], devpriv->iobase + APCI3120_DIGITAL_OUTPUT); 2479c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2480c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_DigitalOutputRegister = data[0] & 0xF0; 2481c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2482c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return insn->n; 2483c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2484c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 2485c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2486c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 2487c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2488dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini| Function name :int i_APCI3120_InsnWriteDigitalOutput(struct comedi_device *dev,| 2489dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini|struct comedi_subdevice *s,struct comedi_insn *insn,unsigned int *data) | 2490dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini| | 2491c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2492dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini| Task : Write digiatl output | 2493dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini| | 2494c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2495dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini| Input Parameters : struct comedi_device *dev | 2496dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini| struct comedi_subdevice *s | 2497dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini| struct comedi_insn *insn | 2498dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini| unsigned int *data | 2499dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini data[0] Value to be written 2500dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini data[1] :1 Set digital o/p ON 2501dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini data[1] 2 Set digital o/p OFF with memory ON 2502c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2503dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini| Return Value : | 2504dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini| | 2505c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2506c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 2507c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 250834c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pembertonint i_APCI3120_InsnWriteDigitalOutput(struct comedi_device *dev, 250934c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton struct comedi_subdevice *s, 251090035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton struct comedi_insn *insn, 251134c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton unsigned int *data) 2512c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 2513c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2514117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton unsigned int ui_Temp1; 2515c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 25161efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton unsigned int ui_NoOfChannel = CR_CHAN(insn->chanspec); /* get the channel */ 2517c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2518c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((data[0] != 0) && (data[0] != 1)) { 2519c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH comedi_error(dev, 2520c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH "Not a valid Data !!! ,Data should be 1 or 0\n"); 2521c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return -EINVAL; 2522c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 252357517878df4e5769885e80aba895f4e69b1ddbe9Ian Abbott if (ui_NoOfChannel > devpriv->s_EeParameters.i_NbrDoChannel - 1) { 2524c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH comedi_error(dev, 2525c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH "This board doesn't have specified channel !!! \n"); 2526c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return -EINVAL; 2527c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 2528c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2529c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH switch (data[1]) { 2530c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case 1: 2531c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[0] = (data[0] << ui_NoOfChannel); 25321efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* ES05 data[0]=(data[0]<<4)|ui_Temp; */ 2533c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[0] = (data[0] << 4) | devpriv->b_DigitalOutputRegister; 2534c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 2535c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2536c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case 2: 2537c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[0] = ~data[0] & 0x1; 2538c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Temp1 = 1; 2539c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Temp1 = ui_Temp1 << ui_NoOfChannel; 2540c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Temp1 = ui_Temp1 << 4; 25411efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* ES05 ui_Temp=ui_Temp|ui_Temp1; */ 2542c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_DigitalOutputRegister = 2543c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_DigitalOutputRegister | ui_Temp1; 2544c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2545c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[0] = (data[0] << ui_NoOfChannel) ^ 0xf; 2546c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[0] = data[0] << 4; 25471efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* ES05 data[0]=data[0]& ui_Temp; */ 2548c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[0] = data[0] & devpriv->b_DigitalOutputRegister; 2549c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 2550c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH default: 2551c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nThe parameter passed is in error \n"); 2552c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return -EINVAL; 25531efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton } /* switch(data[1]) */ 2554c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outb(data[0], devpriv->iobase + APCI3120_DIGITAL_OUTPUT); 2555c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 25561efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* ES05 ui_Temp=data[0] & 0xf0; */ 2557c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_DigitalOutputRegister = data[0] & 0xf0; 2558dae0dc30be7fa21b15a9d9534589286c6c3e68a3Bill Pemberton return insn->n; 2559c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2560c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 2561c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2562c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 2563c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2564c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| ANALOG OUTPUT SUBDEVICE | 2565c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2566c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 2567c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2568c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 2569c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 257071b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Function name :int i_APCI3120_InsnWriteAnalogOutput(struct comedi_device *dev,| 257190035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton|struct comedi_subdevice *s, struct comedi_insn *insn,unsigned int *data) | 2572c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 2573c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2574c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : Write analog output | 2575c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 2576c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 257771b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters : struct comedi_device *dev | 257834c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice *s | 257990035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton| struct comedi_insn *insn | 2580790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton| unsigned int *data | 2581c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2582c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : | 2583c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 2584c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 2585c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 2586c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 258734c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pembertonint i_APCI3120_InsnWriteAnalogOutput(struct comedi_device *dev, 258834c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton struct comedi_subdevice *s, 258990035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton struct comedi_insn *insn, 259034c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton unsigned int *data) 2591c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 2592117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton unsigned int ui_Range, ui_Channel; 2593a9fce7c9a3b796334916b216a618fd7586f10d76Bill Pemberton unsigned short us_TmpValue; 2594c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2595c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Range = CR_RANGE(insn->chanspec); 2596c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Channel = CR_CHAN(insn->chanspec); 2597c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 25981efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton /* this_board->i_hwdrv_InsnWriteAnalogOutput(dev, ui_Range, ui_Channel,data[0]); */ 2599dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini if (ui_Range) { /* if 1 then unipolar */ 2600c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2601c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (data[0] != 0) 2602c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[0] = 2603c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ((((ui_Channel & 0x03) << 14) & 0xC000) | (1 << 2604c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 13) | (data[0] + 8191)); 2605c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH else 2606c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[0] = 2607c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ((((ui_Channel & 0x03) << 14) & 0xC000) | (1 << 2608c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 13) | 8192); 2609c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2610dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini } else { /* if 0 then bipolar */ 2611c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[0] = 2612c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ((((ui_Channel & 0x03) << 14) & 0xC000) | (0 << 13) | 2613c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[0]); 2614c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2615c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 2616c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 26171efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* 26185f74ea14c07fee91d3bdbaad88bff6264c6200e6Greg Kroah-Hartman * out put n values at the given channel. printk("\nwaiting for 26191efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * DA_READY BIT"); 26201efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton */ 2621dd105f08c0e9d4081629f96b09abadc0bb51e0d8Andrea Gelmini do { /* Waiting of DA_READY BIT */ 2622c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH us_TmpValue = 2623a9fce7c9a3b796334916b216a618fd7586f10d76Bill Pemberton ((unsigned short) inw(devpriv->iobase + 2624c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI3120_RD_STATUS)) & 0x0001; 2625c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } while (us_TmpValue != 0x0001); 2626c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2627c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (ui_Channel <= 3) 26281efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* 26291efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * for channel 0-3 out at the register 1 (wrDac1-8) data[i] 26301efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * typecasted to ushort since word write is to be done 26311efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton */ 2632a9fce7c9a3b796334916b216a618fd7586f10d76Bill Pemberton outw((unsigned short) data[0], 2633c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI3120_ANALOG_OUTPUT_1); 2634c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH else 26351efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton/* 26361efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * for channel 4-7 out at the register 2 (wrDac5-8) data[i] 26371efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton * typecasted to ushort since word write is to be done 26381efd18f0cca7251a283625e07dbb4ec8e95a4b6bBill Pemberton */ 2639a9fce7c9a3b796334916b216a618fd7586f10d76Bill Pemberton outw((unsigned short) data[0], 2640c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI3120_ANALOG_OUTPUT_2); 2641c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2642c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return insn->n; 2643c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 2644