11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * in2000.h - Linux device driver definitions for the 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Always IN2000 ISA SCSI card. 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * IMPORTANT: This file is for version 1.33 - 26/Aug/1998 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (c) 1996 John Shifflett, GeoLog Consulting 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * john@geolog.com 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * jshiffle@netcom.com 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is free software; you can redistribute it and/or modify 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * it under the terms of the GNU General Public License as published by 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * the Free Software Foundation; either version 2, or (at your option) 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * any later version. 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is distributed in the hope that it will be useful, 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * but WITHOUT ANY WARRANTY; without even the implied warranty of 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * GNU General Public License for more details. 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef IN2000_H 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IN2000_H 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/io.h> 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PROC_INTERFACE /* add code for /proc/scsi/in2000/xxx interface */ 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef PROC_INTERFACE 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PROC_STATISTICS /* add code for keeping various real time stats */ 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SYNC_DEBUG /* extra info on sync negotiation printed */ 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DEBUGGING_ON /* enable command-line debugging bitmask */ 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DEBUG_DEFAULTS 0 /* default bitmask - change from command-line */ 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef __i386__ 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FAST_READ_IO /* No problems with these on my machine */ 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FAST_WRITE_IO 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef DEBUGGING_ON 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DB(f,a) if (hostdata->args & (f)) a; 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CHECK_NULL(p,s) /* if (!(p)) {printk("\n"); while (1) printk("NP:%s\r",(s));} */ 451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DB(f,a) 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CHECK_NULL(p,s) 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define uchar unsigned char 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define read1_io(a) (inb(hostdata->io_base+(a))) 531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define read2_io(a) (inw(hostdata->io_base+(a))) 541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define write1_io(b,a) (outb((b),hostdata->io_base+(a))) 551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define write2_io(w,a) (outw((w),hostdata->io_base+(a))) 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef __i386__ 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* These inline assembly defines are derived from a patch 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * sent to me by Bill Earnest. He's done a lot of very 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * valuable thinking, testing, and coding during his effort 611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * to squeeze more speed out of this driver. I really think 621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * that we are doing IO at close to the maximum now with 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * the fifo. (And yes, insw uses 'edi' while outsw uses 641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 'esi'. Thanks Bill!) 651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FAST_READ2_IO() \ 681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds({ \ 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsint __dummy_1,__dummy_2; \ 701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __asm__ __volatile__ ("\n \ 711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds cld \n \ 721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds orl %%ecx, %%ecx \n \ 731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds jz 1f \n \ 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds rep \n \ 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds insw (%%dx),%%es:(%%edi) \n \ 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds1: " \ 771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds : "=D" (sp) ,"=c" (__dummy_1) ,"=d" (__dummy_2) /* output */ \ 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds : "2" (f), "0" (sp), "1" (i) /* input */ \ 791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ); /* trashed */ \ 801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}) 811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FAST_WRITE2_IO() \ 831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds({ \ 841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsint __dummy_1,__dummy_2; \ 851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds __asm__ __volatile__ ("\n \ 861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds cld \n \ 871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds orl %%ecx, %%ecx \n \ 881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds jz 1f \n \ 891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds rep \n \ 901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds outsw %%ds:(%%esi),(%%dx) \n \ 911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds1: " \ 921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds : "=S" (sp) ,"=c" (__dummy_1) ,"=d" (__dummy_2)/* output */ \ 931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds : "2" (f), "0" (sp), "1" (i) /* input */ \ 941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ); /* trashed */ \ 951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}) 961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* IN2000 io_port offsets */ 991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_WD_ASR 0x00 /* R - 3393 auxstat reg */ 1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ASR_INT 0x80 1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ASR_LCI 0x40 1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ASR_BSY 0x20 1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ASR_CIP 0x10 1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ASR_PE 0x02 1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ASR_DBR 0x01 1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_WD_ADDR 0x00 /* W - 3393 address reg */ 1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_WD_DATA 0x01 /* R/W - rest of 3393 regs */ 1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_FIFO 0x02 /* R/W - in2000 dual-port fifo (16 bits) */ 1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IN2000_FIFO_SIZE 2048 /* fifo capacity in bytes */ 1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_CARD_RESET 0x03 /* W - in2000 start master reset */ 1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_FIFO_COUNT 0x04 /* R - in2000 fifo counter */ 1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_FIFO_WRITE 0x05 /* W - clear fifo counter, start write */ 1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_FIFO_READ 0x07 /* W - start fifo read */ 1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_LED_OFF 0x08 /* W - turn off in2000 activity LED */ 1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_SWITCHES 0x08 /* R - read in2000 dip switch */ 1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SW_ADDR0 0x01 /* bit 0 = bit 0 of index to io addr */ 1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SW_ADDR1 0x02 /* bit 1 = bit 1 of index io addr */ 1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SW_DISINT 0x04 /* bit 2 true if ints disabled */ 1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SW_INT0 0x08 /* bit 3 = bit 0 of index to interrupt */ 1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SW_INT1 0x10 /* bit 4 = bit 1 of index to interrupt */ 1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SW_INT_SHIFT 3 /* shift right this amount to right justify int bits */ 1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SW_SYNC_DOS5 0x20 /* bit 5 used by Always BIOS */ 1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SW_FLOPPY 0x40 /* bit 6 true if floppy enabled */ 1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SW_BIT7 0x80 /* bit 7 hardwired true (ground) */ 1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_LED_ON 0x09 /* W - turn on in2000 activity LED */ 1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_HARDWARE 0x0a /* R - read in2000 hardware rev, stop reset */ 1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IO_INTR_MASK 0x0c /* W - in2000 interrupt mask reg */ 1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IMASK_WD 0x01 /* WD33c93 interrupt mask */ 1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IMASK_FIFO 0x02 /* FIFO interrupt mask */ 1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* wd register names */ 1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_OWN_ID 0x00 1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CONTROL 0x01 1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_TIMEOUT_PERIOD 0x02 1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CDB_1 0x03 1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CDB_2 0x04 1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CDB_3 0x05 1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CDB_4 0x06 1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CDB_5 0x07 1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CDB_6 0x08 1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CDB_7 0x09 1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CDB_8 0x0a 1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CDB_9 0x0b 1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CDB_10 0x0c 1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CDB_11 0x0d 1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CDB_12 0x0e 1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_TARGET_LUN 0x0f 1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_COMMAND_PHASE 0x10 1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_SYNCHRONOUS_TRANSFER 0x11 1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_TRANSFER_COUNT_MSB 0x12 1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_TRANSFER_COUNT 0x13 1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_TRANSFER_COUNT_LSB 0x14 1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_DESTINATION_ID 0x15 1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_SOURCE_ID 0x16 1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_SCSI_STATUS 0x17 1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_COMMAND 0x18 1571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_DATA 0x19 1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_QUEUE_TAG 0x1a 1591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_AUXILIARY_STATUS 0x1f 1601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* WD commands */ 1621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CMD_RESET 0x00 1631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CMD_ABORT 0x01 1641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CMD_ASSERT_ATN 0x02 1651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CMD_NEGATE_ACK 0x03 1661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CMD_DISCONNECT 0x04 1671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CMD_RESELECT 0x05 1681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CMD_SEL_ATN 0x06 1691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CMD_SEL 0x07 1701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CMD_SEL_ATN_XFER 0x08 1711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CMD_SEL_XFER 0x09 1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CMD_RESEL_RECEIVE 0x0a 1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CMD_RESEL_SEND 0x0b 1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CMD_WAIT_SEL_RECEIVE 0x0c 1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CMD_TRANS_ADDR 0x18 1761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CMD_TRANS_INFO 0x20 1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CMD_TRANSFER_PAD 0x21 1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_CMD_SBT_MODE 0x80 1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* SCSI Bus Phases */ 1811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PHS_DATA_OUT 0x00 1821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PHS_DATA_IN 0x01 1831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PHS_COMMAND 0x02 1841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PHS_STATUS 0x03 1851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PHS_MESS_OUT 0x06 1861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PHS_MESS_IN 0x07 1871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Command Status Register definitions */ 1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* reset state interrupts */ 1911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CSR_RESET 0x00 1921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CSR_RESET_AF 0x01 1931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* successful completion interrupts */ 1951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CSR_RESELECT 0x10 1961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CSR_SELECT 0x11 1971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CSR_SEL_XFER_DONE 0x16 1981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CSR_XFER_DONE 0x18 1991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* paused or aborted interrupts */ 2011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CSR_MSGIN 0x20 2021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CSR_SDP 0x21 2031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CSR_SEL_ABORT 0x22 2041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CSR_RESEL_ABORT 0x25 2051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CSR_RESEL_ABORT_AM 0x27 2061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CSR_ABORT 0x28 2071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* terminated interrupts */ 2091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CSR_INVALID 0x40 2101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CSR_UNEXP_DISC 0x41 2111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CSR_TIMEOUT 0x42 2121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CSR_PARITY 0x43 2131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CSR_PARITY_ATN 0x44 2141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CSR_BAD_STATUS 0x45 2151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CSR_UNEXP 0x48 2161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* service required interrupts */ 2181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CSR_RESEL 0x80 2191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CSR_RESEL_AM 0x81 2201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CSR_DISC 0x85 2211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CSR_SRV_REQ 0x88 2221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Own ID/CDB Size register */ 2241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OWNID_EAF 0x08 2251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OWNID_EHP 0x10 2261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OWNID_RAF 0x20 2271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OWNID_FS_8 0x00 2281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OWNID_FS_12 0x40 2291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OWNID_FS_16 0x80 2301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Control register */ 2321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CTRL_HSP 0x01 2331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CTRL_HA 0x02 2341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CTRL_IDI 0x04 2351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CTRL_EDI 0x08 2361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CTRL_HHP 0x10 2371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CTRL_POLLED 0x00 2381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CTRL_BURST 0x20 2391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CTRL_BUS 0x40 2401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CTRL_DMA 0x80 2411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Timeout Period register */ 2431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TIMEOUT_PERIOD_VALUE 20 /* results in 200 ms. */ 2441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Synchronous Transfer Register */ 2461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define STR_FSS 0x80 2471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Destination ID register */ 2491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DSTID_DPD 0x40 2501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DATA_OUT_DIR 0 2511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DATA_IN_DIR 1 2521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DSTID_SCC 0x80 2531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Source ID register */ 2551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SRCID_MASK 0x07 2561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SRCID_SIV 0x08 2571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SRCID_DSP 0x20 2581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SRCID_ES 0x40 2591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SRCID_ER 0x80 2601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ILLEGAL_STATUS_BYTE 0xff 2641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DEFAULT_SX_PER 500 /* (ns) fairly safe */ 2671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DEFAULT_SX_OFF 0 /* aka async */ 2681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OPTIMUM_SX_PER 252 /* (ns) best we can do (mult-of-4) */ 2701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OPTIMUM_SX_OFF 12 /* size of in2000 fifo */ 2711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct sx_period { 2731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned int period_ns; 2741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds uchar reg_value; 2751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds }; 2761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 2781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct IN2000_hostdata { 2791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct Scsi_Host *next; 2801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds uchar chip; /* what kind of wd33c93 chip? */ 2811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds uchar microcode; /* microcode rev if 'B' */ 2821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned short io_base; /* IO port base */ 2831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned int dip_switch; /* dip switch settings */ 2841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned int hrev; /* hardware revision of card */ 2851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds volatile uchar busy[8]; /* index = target, bit = lun */ 2861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds volatile Scsi_Cmnd *input_Q; /* commands waiting to be started */ 2871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds volatile Scsi_Cmnd *selecting; /* trying to select this command */ 2881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds volatile Scsi_Cmnd *connected; /* currently connected command */ 2891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds volatile Scsi_Cmnd *disconnected_Q;/* commands waiting for reconnect */ 2901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds uchar state; /* what we are currently doing */ 2911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds uchar fifo; /* what the FIFO is up to */ 2921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds uchar level2; /* extent to which Level-2 commands are used */ 2931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds uchar disconnect; /* disconnect/reselect policy */ 2941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned int args; /* set from command-line argument */ 2951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds uchar incoming_msg[8]; /* filled during message_in phase */ 2961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int incoming_ptr; /* mainly used with EXTENDED messages */ 2971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds uchar outgoing_msg[8]; /* send this during next message_out */ 2981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int outgoing_len; /* length of outgoing message */ 2991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned int default_sx_per; /* default transfer period for SCSI bus */ 3001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds uchar sync_xfer[8]; /* sync_xfer reg settings per target */ 3011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds uchar sync_stat[8]; /* status of sync negotiation per target */ 3021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds uchar sync_off; /* bit mask: don't use sync with these targets */ 3031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef PROC_INTERFACE 3041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds uchar proc; /* bit mask: what's in proc output */ 3051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef PROC_STATISTICS 3061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned long cmd_cnt[8]; /* # of commands issued per target */ 3071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned long int_cnt; /* # of interrupts serviced */ 3081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned long disc_allowed_cnt[8]; /* # of disconnects allowed per target */ 3091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds unsigned long disc_done_cnt[8]; /* # of disconnects done per target*/ 3101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 3111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 3121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds }; 3131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* defines for hostdata->chip */ 3161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define C_WD33C93 0 3181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define C_WD33C93A 1 3191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define C_WD33C93B 2 3201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define C_UNKNOWN_CHIP 100 3211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* defines for hostdata->state */ 3231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define S_UNCONNECTED 0 3251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define S_SELECTING 1 3261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define S_RUNNING_LEVEL2 2 3271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define S_CONNECTED 3 3281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define S_PRE_TMP_DISC 4 3291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define S_PRE_CMP_DISC 5 3301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* defines for hostdata->fifo */ 3321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FI_FIFO_UNUSED 0 3341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FI_FIFO_READING 1 3351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FI_FIFO_WRITING 2 3361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* defines for hostdata->level2 */ 3381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* NOTE: only the first 3 are trustworthy at this point - 3391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * having trouble when more than 1 device is reading/writing 3401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * at the same time... 3411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 3421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define L2_NONE 0 /* no combination commands - we get lots of ints */ 3441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define L2_SELECT 1 /* start with SEL_ATN_XFER, but never resume it */ 3451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define L2_BASIC 2 /* resume after STATUS ints & RDP messages */ 3461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define L2_DATA 3 /* resume after DATA_IN/OUT ints */ 3471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define L2_MOST 4 /* resume after anything except a RESELECT int */ 3481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define L2_RESELECT 5 /* resume after everything, including RESELECT ints */ 3491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define L2_ALL 6 /* always resume */ 3501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* defines for hostdata->disconnect */ 3521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DIS_NEVER 0 3541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DIS_ADAPTIVE 1 3551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DIS_ALWAYS 2 3561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* defines for hostdata->args */ 3581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DB_TEST 1<<0 3601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DB_FIFO 1<<1 3611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DB_QUEUE_COMMAND 1<<2 3621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DB_EXECUTE 1<<3 3631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DB_INTR 1<<4 3641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DB_TRANSFER 1<<5 3651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DB_MASK 0x3f 3661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define A_NO_SCSI_RESET 1<<15 3681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* defines for hostdata->sync_xfer[] */ 3711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SS_UNSET 0 3731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SS_FIRST 1 3741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SS_WAITING 2 3751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SS_SET 3 3761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* defines for hostdata->proc */ 3781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PR_VERSION 1<<0 3801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PR_INFO 1<<1 3811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PR_STATISTICS 1<<2 3821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PR_CONNECTED 1<<3 3831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PR_INPUTQ 1<<4 3841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PR_DISCQ 1<<5 3851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PR_TEST 1<<6 3861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PR_STOP 1<<7 3871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 3891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds# include <linux/init.h> 3901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds# include <linux/spinlock.h> 3911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds# define in2000__INITFUNC(function) __initfunc(function) 3921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds# define in2000__INIT __init 3931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds# define in2000__INITDATA __initdata 3941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds# define CLISPIN_LOCK(host,flags) spin_lock_irqsave(host->host_lock, flags) 3951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds# define CLISPIN_UNLOCK(host,flags) spin_unlock_irqrestore(host->host_lock, \ 3961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds flags) 3971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 398d0be4a7d29ad0bd3ce2209dd9e46d410b632db59Christoph Hellwigstatic int in2000_detect(struct scsi_host_template *) in2000__INIT; 399f281233d3eba15fb225d21ae2e228fd4553d824aJeff Garzikstatic int in2000_queuecommand(struct Scsi_Host *, struct scsi_cmnd *); 4001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int in2000_abort(Scsi_Cmnd *); 4011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void in2000_setup(char *, int *) in2000__INIT; 4021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int in2000_biosparam(struct scsi_device *, struct block_device *, 4031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds sector_t, int *); 4041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic int in2000_bus_reset(Scsi_Cmnd *); 4051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IN2000_CAN_Q 16 4081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IN2000_SG SG_ALL 4091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IN2000_CPL 2 4101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IN2000_HOST_ID 7 4111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 4121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* IN2000_H */ 413