summaryrefslogtreecommitdiffstats
path: root/sys/i386/isa/b004.h
blob: 9c5576c8f945f1e017511751e6b7c063b4c7d22b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#ifndef _B004_H
#define _B004_H

/*
 * b004.h
 *
 * Based on the Linux driver, by
 * Christoph Niemann (niemann@swt.ruhr-uni-bochum.de)
 *
 * Ported to FreeBSD by Luigi Rizzo (luigi@iet.unipi.it)
 * and Lorenzo Vicisano (l.vicisano@iet.unipi.it)
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. All advertising materials mentioning features or use of this software
 *    must display the following acknowledgement:
 *      This product includes software developed by Christoph Niemann,
 *      Luigi Rizzo and Lorenzo Vicisano - Dipartimento di Ingegneria
 *              dell'Informazione
 * 4. The names of these contributors may not be used to endorse or promote
 *  products derived from this software without specific prior written
 *  permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * Works for FreeBSD 1.1.5
 */

#include <sys/ioctl.h>

/*
 * device status FLAGS
 */
#define B004_EXIST 		0x0001	/* Is a B004-Board with at least one
					   Transputer present ? */
#define B004_BUSY  		0x0002	/* Is the B004-board in use ? */

/*
 * IOCTL numbers
 */
#define B004RESET		_IO  ('Q', 0)
				/* Reset transputer(s) */
#define B004WRITEABLE		_IOR ('Q', 1, int)
				/* Return C012 Output Ready */
#define B004READABLE		_IOR ('Q', 2, int)
				/* Return C012 Data Present */
#define B004ANALYSE		_IO  ('Q', 3)
				/* Switch transputer(s) to ANALYSE mode */
#define B004ERROR		_IOR ('Q', 4, int)
				/* Return 1 on ERROR set */
#define B004TIMEOUT		_IOW ('Q', 5, int)
				/* Set TIMEOUT for subsequent writing or
				   reading call, value in ticks, initial
				   0 = no timeout (read/write blocking)
				   "open" sets timeout to 0 */


#define B004_INIT_TIMEOUT	0  /* No timeout yet */

/*
 * Registers DISPLACEMENT
 */
#define B004_IDR_OFFSET		0		/* Input Data Register */
#define B004_ODR_OFFSET		1		/* Output Data Register */
#define B004_ISR_OFFSET		2		/* Input Status Register */
#define B004_OSR_OFFSET		3		/* Output Status Register */
#define B004_RESET_OFFSET	16		/* Reset/Error Register */
#define B004_ERROR_OFFSET	B004_RESET_OFFSET
#define B004_ANALYSE_OFFSET	17		/* Analyse Register */
#define B008_DMA_OFFSET		18		/* B008: DMA request register */
#define B008_INT_OFFSET		19		/* B008: Interrupt control reg */

struct b004_struct {
	int flags;		/* various flags */
	int idr;		/* address of the input data register */
	int odr;		/* address if the output data register */
	int isr;		/* address of the input status register */
	int osr;		/* address of the output status register */
	unsigned int timeout;	/* timeout for writing/reading the link */
	int boardtype;		/* what kind of board is installed */
	void *devfs_token[8][4]; /* tokens for 4 types for 8 ports */
};

/*
 * Id's for the supported boards
 */
#define B004 1
#define B008 2

/*
 * Defines for easier access to the b004_table.
 */
#define B004_F(minor)			b004_table[minor].flags
#define B004_TIMEOUT(minor)		b004_table[minor].timeout
#define B004_BASE(minor)		B004_IDR(minor)
#define B004_IDR(minor)			b004_table[minor].idr
#define B004_ODR(minor)			b004_table[minor].odr
#define B004_ISR(minor)			b004_table[minor].isr
#define B004_OSR(minor)			b004_table[minor].osr
#define B004_WAIT(minor)		b004_table[minor].wait
#define B004_BOARDTYPE(minor)		b004_table[minor].boardtype

/*
 * Additonal defines for B008-boards
 */
#define B008_DMA(minor)			b004_table[minor].int
#define B008_INT(minor)			b004_table[minor].dma

/*
 * Number of tries to access isr or osr before reading or writing sleeps
 */
#define B004_MAXTRY 			200

/*
 * Maximum number of bytes to transfer at once
 */
#define B004_MAX_BYTES			2048

/*
 * bit defines for C012 status ports at base + 2/3
 * accessed with B004_IS, B004_OS, which gets the byte...
 */
#define B004_READBYTE	1
#define B004_WRITEBYTE	1

/*
 * bit defines for C012 reset/error port at base + 16
 */
#define B004_ASSERT_RESET	0x01	/* resetting the transputer */
#define B004_DEASSERT_RESET	0x00
#define B004_TEST_ERROR		0x01	/* for testing the transputer's error flag */

/*
 * bit defines for C012 analyse port at base + 17
 */
#define B004_ASSERT_ANALYSE	0x01	/* switch transputer to analyse-mode */
#define B004_DEASSERT_ANALYSE	0x00

#endif
OpenPOWER on IntegriCloud