#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