/*- * Copyright (c) 1991, 1993 * The Regents of the University of California. All rights reserved. * * This code is derived from software contributed to Berkeley by * The Mach Operating System project at Carnegie-Mellon University * and Ralph Campbell. * * %sccs.include.redist.c% * * @(#)turbochannel.h 8.1 (Berkeley) 06/10/93 */ /* * Mach Operating System * Copyright (c) 1991,1990,1989 Carnegie Mellon University * All Rights Reserved. * * Permission to use, copy, modify and distribute this software and * its documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. * * Carnegie Mellon requests users of this software to return to * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 * * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. */ /* * Created, from the DEC specs: * "TURBOchannel Hardware Specification" * EK-369AA-OD-005, Version 005, July 1990 * * File: tc.h * Author: Alessandro Forin, Carnegie Mellon University * Date: 9/90 * * Definitions for the TURBOchannel BUS. */ /* * Max conceivable number of slots on the TC */ #define TC_MAX_SLOTS 8 #define TC_MAX_LOGICAL_SLOTS 12 /* * Address map specifications for any TC option * These are offset from the option's base address */ #define TC_OFF_ROM 0x000003e0 /* required ROM info */ #define TC_OFF_PROTO_ROM 0x003c03e0 /* 'obsolete' alternate */ #define TC_ROM_TEST_DATA_SIZE 16 #define TC_ROM_SLEN 4 #define TC_ROM_LLEN 8 typedef struct { unsigned char value; char pad[3]; } tc_padded_char_t; typedef struct { tc_padded_char_t rom_width; /* legal: 1 2 4 */ tc_padded_char_t rom_stride; /* legal: 4 */ tc_padded_char_t rom_size; /* legal: 0-255, unit: 8kb */ tc_padded_char_t slot_size; /* legal: 1-128, unit: 4Mb */ unsigned char test_data[TC_ROM_TEST_DATA_SIZE]; /* must always contain: /* x55 x00 xaa xff /* (each byte is repeated /* rom_stride times) */ tc_padded_char_t firmware_rev[TC_ROM_LLEN]; tc_padded_char_t vendor_name[TC_ROM_LLEN]; tc_padded_char_t module_name[TC_ROM_LLEN]; tc_padded_char_t host_firmware_type[TC_ROM_SLEN]; } tc_rommap_t; typedef struct { u_char present; /* and do we handle it */ u_char slot_size; /* how many TC slots */ u_char rom_width; /* bytewide or.. */ u_char unit; /* Device unit number */ char module_name[TC_ROM_LLEN+1]; /* ROM name */ char module_id[TC_ROM_LLEN * 2+1]; /* vendor and rev */ u_long k1seg_address; /* TC starting address */ char *driver_name; /* software name */ void (*intr)(); /* interrupt routine */ } tc_option_t; #ifdef KERNEL extern tc_option_t tc_slot_info[]; extern void (*tc_slot_hand_fill) __P((tc_option_t *)); #endif /* KERNEL */