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 <fmhess@users.sourceforge.net>
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 
19 #ifndef _NI_LABPC_H
20 #define _NI_LABPC_H
21 
22 #define EEPROM_SIZE	256	/*  256 byte eeprom */
23 #define NUM_AO_CHAN	2	/*  boards have two analog output channels */
24 
25 enum transfer_type { fifo_not_empty_transfer, fifo_half_full_transfer,
26 	isa_dma_transfer
27 };
28 
29 struct labpc_boardinfo {
30 	const char *name;
31 	int ai_speed;			/* maximum input speed in ns */
32 	unsigned ai_scan_up:1;		/* can auto scan up in ai channels */
33 	unsigned has_ao:1;		/* has analog outputs */
34 	unsigned is_labpc1200:1;	/* has extra regs compared to pc+ */
35 };
36 
37 struct labpc_private {
38 	struct comedi_isadma *dma;
39 	struct comedi_8254 *counter;
40 
41 	/*  number of data points left to be taken */
42 	unsigned long long count;
43 	/*  software copys of bits written to command registers */
44 	unsigned int cmd1;
45 	unsigned int cmd2;
46 	unsigned int cmd3;
47 	unsigned int cmd4;
48 	unsigned int cmd5;
49 	unsigned int cmd6;
50 	/*  store last read of board status registers */
51 	unsigned int stat1;
52 	unsigned int stat2;
53 
54 	/* we are using dma/fifo-half-full/etc. */
55 	enum transfer_type current_transfer;
56 	/*
57 	 * function pointers so we can use inb/outb or readb/writeb as
58 	 * appropriate
59 	 */
60 	unsigned int (*read_byte)(struct comedi_device *, unsigned long reg);
61 	void (*write_byte)(struct comedi_device *,
62 			   unsigned int byte, unsigned long reg);
63 };
64 
65 int labpc_common_attach(struct comedi_device *dev,
66 			unsigned int irq, unsigned long isr_flags);
67 void labpc_common_detach(struct comedi_device *dev);
68 
69 #endif /* _NI_LABPC_H */
70