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
|
#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 */
};
/*
* 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
|