Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
ni_labpc.h
Go to the documentation of this file.
1 /*
2  ni_labpc.h
3 
4  Header for ni_labpc.c and ni_labpc_cs.c
5 
6  Copyright (C) 2003 Frank Mori Hess <[email protected]>
7 
8  This program is free software; you can redistribute it and/or modify
9  it under the terms of the GNU General Public License as published by
10  the Free Software Foundation; either version 2 of the License, or
11  (at your option) any later version.
12 
13  This program is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  GNU General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with this program; if not, write to the Free Software
20  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 
22 */
23 
24 #ifndef _NI_LABPC_H
25 #define _NI_LABPC_H
26 
27 #define EEPROM_SIZE 256 /* 256 byte eeprom */
28 #define NUM_AO_CHAN 2 /* boards have two analog output channels */
29 
34 };
35 
37  const char *name;
38  int device_id; /* device id for pci and pcmcia boards */
39  int ai_speed; /* maximum input speed in nanoseconds */
40  enum labpc_bustype bustype; /* ISA/PCI/etc. */
41 
42  /* 1200 has extra registers compared to pc+ */
44  int has_ao; /* has analog output true/false */
46  const int *ai_range_code;
48 
49  /* board can auto scan up in ai channels, not just down */
50  unsigned ai_scan_up:1;
51 
52  /* uses memory mapped io instead of ioports */
53  unsigned memory_mapped_io:1;
54 };
55 
56 struct labpc_private {
57  struct mite_struct *mite; /* for mite chip on pci-1200 */
58  /* number of data points left to be taken */
59  volatile unsigned long long count;
60  /* software copy of analog output values */
61  unsigned int ao_value[NUM_AO_CHAN];
62  /* software copys of bits written to command registers */
63  volatile unsigned int command1_bits;
64  volatile unsigned int command2_bits;
65  volatile unsigned int command3_bits;
66  volatile unsigned int command4_bits;
67  volatile unsigned int command5_bits;
68  volatile unsigned int command6_bits;
69  /* store last read of board status registers */
70  volatile unsigned int status1_bits;
71  volatile unsigned int status2_bits;
72  /*
73  * value to load into board's counter a0 (conversion pacing) for timed
74  * conversions
75  */
76  unsigned int divisor_a0;
77  /*
78  * value to load into board's counter b0 (master) for timed conversions
79  */
80  unsigned int divisor_b0;
81  /*
82  * value to load into board's counter b1 (scan pacing) for timed
83  * conversions
84  */
85  unsigned int divisor_b1;
86  unsigned int dma_chan; /* dma channel to use */
87  u16 *dma_buffer; /* buffer ai will dma into */
88  /* transfer size in bytes for current transfer */
89  unsigned int dma_transfer_size;
90  /* we are using dma/fifo-half-full/etc. */
92  /* stores contents of board's eeprom */
93  unsigned int eeprom_data[EEPROM_SIZE];
94  /* stores settings of calibration dacs */
95  unsigned int caldac[16];
96  /*
97  * function pointers so we can use inb/outb or readb/writeb as
98  * appropriate
99  */
100  unsigned int (*read_byte) (unsigned long address);
101  void (*write_byte) (unsigned int byte, unsigned long address);
102 };
103 
104 int labpc_common_attach(struct comedi_device *dev, unsigned long iobase,
105  unsigned int irq, unsigned int dma);
107 
108 extern const int labpc_1200_is_unipolar[];
109 extern const int labpc_1200_ai_gain_bits[];
110 extern const struct comedi_lrange range_labpc_1200_ai;
111 
112 #endif /* _NI_LABPC_H */