11da177e4SLinus Torvalds /*=======================================================/ 21da177e4SLinus Torvalds Header file for nsp_cs.c 31da177e4SLinus Torvalds By: YOKOTA Hiroshi <yokota@netlab.is.tsukuba.ac.jp> 41da177e4SLinus Torvalds 51da177e4SLinus Torvalds Ver.1.0 : Cut unused lines. 61da177e4SLinus Torvalds Ver 0.1 : Initial version. 71da177e4SLinus Torvalds 81da177e4SLinus Torvalds This software may be used and distributed according to the terms of 91da177e4SLinus Torvalds the GNU General Public License. 101da177e4SLinus Torvalds 111da177e4SLinus Torvalds =========================================================*/ 121da177e4SLinus Torvalds 131da177e4SLinus Torvalds #ifndef __nsp_cs__ 141da177e4SLinus Torvalds #define __nsp_cs__ 151da177e4SLinus Torvalds 161da177e4SLinus Torvalds /* for debugging */ 171da177e4SLinus Torvalds //#define NSP_DEBUG 9 181da177e4SLinus Torvalds 191da177e4SLinus Torvalds /* 201da177e4SLinus Torvalds #define static 211da177e4SLinus Torvalds #define inline 221da177e4SLinus Torvalds */ 231da177e4SLinus Torvalds 241da177e4SLinus Torvalds /************************************ 251da177e4SLinus Torvalds * Some useful macros... 261da177e4SLinus Torvalds */ 271da177e4SLinus Torvalds 281da177e4SLinus Torvalds /* SCSI initiator must be ID 7 */ 291da177e4SLinus Torvalds #define NSP_INITIATOR_ID 7 301da177e4SLinus Torvalds 311da177e4SLinus Torvalds #define NSP_SELTIMEOUT 200 321da177e4SLinus Torvalds 331da177e4SLinus Torvalds /*************************************************************************** 341da177e4SLinus Torvalds * register definitions 351da177e4SLinus Torvalds ***************************************************************************/ 361da177e4SLinus Torvalds /*======================================================================== 371da177e4SLinus Torvalds * base register 381da177e4SLinus Torvalds ========================================================================*/ 391da177e4SLinus Torvalds #define IRQCONTROL 0x00 /* R */ 401da177e4SLinus Torvalds # define IRQCONTROL_RESELECT_CLEAR BIT(0) 411da177e4SLinus Torvalds # define IRQCONTROL_PHASE_CHANGE_CLEAR BIT(1) 421da177e4SLinus Torvalds # define IRQCONTROL_TIMER_CLEAR BIT(2) 431da177e4SLinus Torvalds # define IRQCONTROL_FIFO_CLEAR BIT(3) 441da177e4SLinus Torvalds # define IRQCONTROL_ALLMASK 0xff 451da177e4SLinus Torvalds # define IRQCONTROL_ALLCLEAR (IRQCONTROL_RESELECT_CLEAR | \ 461da177e4SLinus Torvalds IRQCONTROL_PHASE_CHANGE_CLEAR | \ 471da177e4SLinus Torvalds IRQCONTROL_TIMER_CLEAR | \ 481da177e4SLinus Torvalds IRQCONTROL_FIFO_CLEAR ) 491da177e4SLinus Torvalds # define IRQCONTROL_IRQDISABLE 0xf0 501da177e4SLinus Torvalds 511da177e4SLinus Torvalds #define IRQSTATUS 0x00 /* W */ 521da177e4SLinus Torvalds # define IRQSTATUS_SCSI BIT(0) 531da177e4SLinus Torvalds # define IRQSTATUS_TIMER BIT(2) 541da177e4SLinus Torvalds # define IRQSTATUS_FIFO BIT(3) 551da177e4SLinus Torvalds # define IRQSTATUS_MASK 0x0f 561da177e4SLinus Torvalds 571da177e4SLinus Torvalds #define IFSELECT 0x01 /* W */ 581da177e4SLinus Torvalds # define IF_IFSEL BIT(0) 591da177e4SLinus Torvalds # define IF_REGSEL BIT(2) 601da177e4SLinus Torvalds 611da177e4SLinus Torvalds #define FIFOSTATUS 0x01 /* R */ 621da177e4SLinus Torvalds # define FIFOSTATUS_CHIP_REVISION_MASK 0x0f 631da177e4SLinus Torvalds # define FIFOSTATUS_CHIP_ID_MASK 0x70 641da177e4SLinus Torvalds # define FIFOSTATUS_FULL_EMPTY BIT(7) 651da177e4SLinus Torvalds 661da177e4SLinus Torvalds #define INDEXREG 0x02 /* R/W */ 671da177e4SLinus Torvalds #define DATAREG 0x03 /* R/W */ 681da177e4SLinus Torvalds #define FIFODATA 0x04 /* R/W */ 691da177e4SLinus Torvalds #define FIFODATA1 0x05 /* R/W */ 701da177e4SLinus Torvalds #define FIFODATA2 0x06 /* R/W */ 711da177e4SLinus Torvalds #define FIFODATA3 0x07 /* R/W */ 721da177e4SLinus Torvalds 731da177e4SLinus Torvalds /*==================================================================== 741da177e4SLinus Torvalds * indexed register 751da177e4SLinus Torvalds ====================================================================*/ 761da177e4SLinus Torvalds #define EXTBUSCTRL 0x10 /* R/W,deleted */ 771da177e4SLinus Torvalds 781da177e4SLinus Torvalds #define CLOCKDIV 0x11 /* R/W */ 791da177e4SLinus Torvalds # define CLOCK_40M 0x02 801da177e4SLinus Torvalds # define CLOCK_20M 0x01 811da177e4SLinus Torvalds # define FAST_20 BIT(2) 821da177e4SLinus Torvalds 831da177e4SLinus Torvalds #define TERMPWRCTRL 0x13 /* R/W */ 841da177e4SLinus Torvalds # define POWER_ON BIT(0) 851da177e4SLinus Torvalds 861da177e4SLinus Torvalds #define SCSIIRQMODE 0x15 /* R/W */ 871da177e4SLinus Torvalds # define SCSI_PHASE_CHANGE_EI BIT(0) 881da177e4SLinus Torvalds # define RESELECT_EI BIT(4) 891da177e4SLinus Torvalds # define FIFO_IRQ_EI BIT(5) 901da177e4SLinus Torvalds # define SCSI_RESET_IRQ_EI BIT(6) 911da177e4SLinus Torvalds 921da177e4SLinus Torvalds #define IRQPHASESENCE 0x16 /* R */ 931da177e4SLinus Torvalds # define LATCHED_MSG BIT(0) 941da177e4SLinus Torvalds # define LATCHED_IO BIT(1) 951da177e4SLinus Torvalds # define LATCHED_CD BIT(2) 961da177e4SLinus Torvalds # define LATCHED_BUS_FREE BIT(3) 971da177e4SLinus Torvalds # define PHASE_CHANGE_IRQ BIT(4) 981da177e4SLinus Torvalds # define RESELECT_IRQ BIT(5) 991da177e4SLinus Torvalds # define FIFO_IRQ BIT(6) 1001da177e4SLinus Torvalds # define SCSI_RESET_IRQ BIT(7) 1011da177e4SLinus Torvalds 1021da177e4SLinus Torvalds #define TIMERCOUNT 0x17 /* R/W */ 1031da177e4SLinus Torvalds 1041da177e4SLinus Torvalds #define SCSIBUSCTRL 0x18 /* R/W */ 1051da177e4SLinus Torvalds # define SCSI_SEL BIT(0) 1061da177e4SLinus Torvalds # define SCSI_RST BIT(1) 1071da177e4SLinus Torvalds # define SCSI_DATAOUT_ENB BIT(2) 1081da177e4SLinus Torvalds # define SCSI_ATN BIT(3) 1091da177e4SLinus Torvalds # define SCSI_ACK BIT(4) 1101da177e4SLinus Torvalds # define SCSI_BSY BIT(5) 1111da177e4SLinus Torvalds # define AUTODIRECTION BIT(6) 1121da177e4SLinus Torvalds # define ACKENB BIT(7) 1131da177e4SLinus Torvalds 1141da177e4SLinus Torvalds #define SCSIBUSMON 0x19 /* R */ 1151da177e4SLinus Torvalds 1161da177e4SLinus Torvalds #define SETARBIT 0x1A /* W */ 1171da177e4SLinus Torvalds # define ARBIT_GO BIT(0) 1181da177e4SLinus Torvalds # define ARBIT_FLAG_CLEAR BIT(1) 1191da177e4SLinus Torvalds 1201da177e4SLinus Torvalds #define ARBITSTATUS 0x1A /* R */ 1211da177e4SLinus Torvalds /*# define ARBIT_GO BIT(0)*/ 1221da177e4SLinus Torvalds # define ARBIT_WIN BIT(1) 1231da177e4SLinus Torvalds # define ARBIT_FAIL BIT(2) 1241da177e4SLinus Torvalds # define RESELECT_FLAG BIT(3) 1251da177e4SLinus Torvalds 1261da177e4SLinus Torvalds #define PARITYCTRL 0x1B /* W */ 1271da177e4SLinus Torvalds #define PARITYSTATUS 0x1B /* R */ 1281da177e4SLinus Torvalds 1291da177e4SLinus Torvalds #define COMMANDCTRL 0x1C /* W */ 1301da177e4SLinus Torvalds # define CLEAR_COMMAND_POINTER BIT(0) 1311da177e4SLinus Torvalds # define AUTO_COMMAND_GO BIT(1) 1321da177e4SLinus Torvalds 1331da177e4SLinus Torvalds #define RESELECTID 0x1C /* R */ 1341da177e4SLinus Torvalds #define COMMANDDATA 0x1D /* R/W */ 1351da177e4SLinus Torvalds 1361da177e4SLinus Torvalds #define POINTERCLR 0x1E /* W */ 1371da177e4SLinus Torvalds # define POINTER_CLEAR BIT(0) 1381da177e4SLinus Torvalds # define ACK_COUNTER_CLEAR BIT(1) 1391da177e4SLinus Torvalds # define REQ_COUNTER_CLEAR BIT(2) 1401da177e4SLinus Torvalds # define HOST_COUNTER_CLEAR BIT(3) 1411da177e4SLinus Torvalds # define READ_SOURCE (BIT(4) | BIT(5)) 1421da177e4SLinus Torvalds # define ACK_COUNTER (0) 1431da177e4SLinus Torvalds # define REQ_COUNTER (BIT(4)) 1441da177e4SLinus Torvalds # define HOST_COUNTER (BIT(5)) 1451da177e4SLinus Torvalds 1461da177e4SLinus Torvalds #define TRANSFERCOUNT 0x1E /* R */ 1471da177e4SLinus Torvalds 1481da177e4SLinus Torvalds #define TRANSFERMODE 0x20 /* R/W */ 1491da177e4SLinus Torvalds # define MODE_MEM8 BIT(0) 1501da177e4SLinus Torvalds # define MODE_MEM32 BIT(1) 1511da177e4SLinus Torvalds # define MODE_ADR24 BIT(2) 1521da177e4SLinus Torvalds # define MODE_ADR32 BIT(3) 1531da177e4SLinus Torvalds # define MODE_IO8 BIT(4) 1541da177e4SLinus Torvalds # define MODE_IO32 BIT(5) 1551da177e4SLinus Torvalds # define TRANSFER_GO BIT(6) 1561da177e4SLinus Torvalds # define BRAIND BIT(7) 1571da177e4SLinus Torvalds 1581da177e4SLinus Torvalds #define SYNCREG 0x21 /* R/W */ 1591da177e4SLinus Torvalds # define SYNCREG_OFFSET_MASK 0x0f 1601da177e4SLinus Torvalds # define SYNCREG_PERIOD_MASK 0xf0 1611da177e4SLinus Torvalds # define SYNCREG_PERIOD_SHIFT 4 1621da177e4SLinus Torvalds 1631da177e4SLinus Torvalds #define SCSIDATALATCH 0x22 /* W */ 1641da177e4SLinus Torvalds #define SCSIDATAIN 0x22 /* R */ 1651da177e4SLinus Torvalds #define SCSIDATAWITHACK 0x23 /* R/W */ 1661da177e4SLinus Torvalds #define SCAMCONTROL 0x24 /* W */ 1671da177e4SLinus Torvalds #define SCAMSTATUS 0x24 /* R */ 1681da177e4SLinus Torvalds #define SCAMDATA 0x25 /* R/W */ 1691da177e4SLinus Torvalds 1701da177e4SLinus Torvalds #define OTHERCONTROL 0x26 /* R/W */ 1711da177e4SLinus Torvalds # define TPL_ROM_WRITE_EN BIT(0) 1721da177e4SLinus Torvalds # define TPWR_OUT BIT(1) 1731da177e4SLinus Torvalds # define TPWR_SENSE BIT(2) 1741da177e4SLinus Torvalds # define RA8_CONTROL BIT(3) 1751da177e4SLinus Torvalds 1761da177e4SLinus Torvalds #define ACKWIDTH 0x27 /* R/W */ 1771da177e4SLinus Torvalds #define CLRTESTPNT 0x28 /* W */ 1781da177e4SLinus Torvalds #define ACKCNTLD 0x29 /* W */ 1791da177e4SLinus Torvalds #define REQCNTLD 0x2A /* W */ 1801da177e4SLinus Torvalds #define HSTCNTLD 0x2B /* W */ 1811da177e4SLinus Torvalds #define CHECKSUM 0x2C /* R/W */ 1821da177e4SLinus Torvalds 1831da177e4SLinus Torvalds /************************************************************************ 1841da177e4SLinus Torvalds * Input status bit definitions. 1851da177e4SLinus Torvalds ************************************************************************/ 1861da177e4SLinus Torvalds #define S_MESSAGE BIT(0) /* Message line from SCSI bus */ 1871da177e4SLinus Torvalds #define S_IO BIT(1) /* Input/Output line from SCSI bus */ 1881da177e4SLinus Torvalds #define S_CD BIT(2) /* Command/Data line from SCSI bus */ 1891da177e4SLinus Torvalds #define S_BUSY BIT(3) /* Busy line from SCSI bus */ 1903ad2f3fbSDaniel Mack #define S_ACK BIT(4) /* Acknowledge line from SCSI bus */ 1911da177e4SLinus Torvalds #define S_REQUEST BIT(5) /* Request line from SCSI bus */ 1921da177e4SLinus Torvalds #define S_SELECT BIT(6) /* */ 1931da177e4SLinus Torvalds #define S_ATN BIT(7) /* */ 1941da177e4SLinus Torvalds 1951da177e4SLinus Torvalds /*********************************************************************** 1961da177e4SLinus Torvalds * Useful Bus Monitor status combinations. 1971da177e4SLinus Torvalds ***********************************************************************/ 1981da177e4SLinus Torvalds #define BUSMON_SEL S_SELECT 1991da177e4SLinus Torvalds #define BUSMON_BSY S_BUSY 2001da177e4SLinus Torvalds #define BUSMON_REQ S_REQUEST 2011da177e4SLinus Torvalds #define BUSMON_IO S_IO 2021da177e4SLinus Torvalds #define BUSMON_ACK S_ACK 2031da177e4SLinus Torvalds #define BUSMON_BUS_FREE 0 2041da177e4SLinus Torvalds #define BUSMON_COMMAND ( S_BUSY | S_CD | S_REQUEST ) 2051da177e4SLinus Torvalds #define BUSMON_MESSAGE_IN ( S_BUSY | S_CD | S_IO | S_MESSAGE | S_REQUEST ) 2061da177e4SLinus Torvalds #define BUSMON_MESSAGE_OUT ( S_BUSY | S_CD | S_MESSAGE | S_REQUEST ) 2071da177e4SLinus Torvalds #define BUSMON_DATA_IN ( S_BUSY | S_IO | S_REQUEST ) 2081da177e4SLinus Torvalds #define BUSMON_DATA_OUT ( S_BUSY | S_REQUEST ) 2091da177e4SLinus Torvalds #define BUSMON_STATUS ( S_BUSY | S_CD | S_IO | S_REQUEST ) 2101da177e4SLinus Torvalds #define BUSMON_SELECT ( S_IO | S_SELECT ) 2111da177e4SLinus Torvalds #define BUSMON_RESELECT ( S_IO | S_SELECT ) 2121da177e4SLinus Torvalds #define BUSMON_PHASE_MASK ( S_CD | S_IO | S_MESSAGE | S_SELECT ) 2131da177e4SLinus Torvalds 2141da177e4SLinus Torvalds #define BUSPHASE_SELECT ( BUSMON_SELECT & BUSMON_PHASE_MASK ) 2151da177e4SLinus Torvalds #define BUSPHASE_COMMAND ( BUSMON_COMMAND & BUSMON_PHASE_MASK ) 2161da177e4SLinus Torvalds #define BUSPHASE_MESSAGE_IN ( BUSMON_MESSAGE_IN & BUSMON_PHASE_MASK ) 2171da177e4SLinus Torvalds #define BUSPHASE_MESSAGE_OUT ( BUSMON_MESSAGE_OUT & BUSMON_PHASE_MASK ) 2181da177e4SLinus Torvalds #define BUSPHASE_DATA_IN ( BUSMON_DATA_IN & BUSMON_PHASE_MASK ) 2191da177e4SLinus Torvalds #define BUSPHASE_DATA_OUT ( BUSMON_DATA_OUT & BUSMON_PHASE_MASK ) 2201da177e4SLinus Torvalds #define BUSPHASE_STATUS ( BUSMON_STATUS & BUSMON_PHASE_MASK ) 2211da177e4SLinus Torvalds 2221da177e4SLinus Torvalds /*====================================================================*/ 2231da177e4SLinus Torvalds 2241da177e4SLinus Torvalds typedef struct scsi_info_t { 225fd238232SDominik Brodowski struct pcmcia_device *p_dev; 2261da177e4SLinus Torvalds struct Scsi_Host *host; 2271da177e4SLinus Torvalds int stop; 2281da177e4SLinus Torvalds } scsi_info_t; 2291da177e4SLinus Torvalds 2301da177e4SLinus Torvalds 2311da177e4SLinus Torvalds /* synchronous transfer negotiation data */ 2321da177e4SLinus Torvalds typedef struct _sync_data { 2331da177e4SLinus Torvalds unsigned int SyncNegotiation; 2341da177e4SLinus Torvalds #define SYNC_NOT_YET 0 2351da177e4SLinus Torvalds #define SYNC_OK 1 2361da177e4SLinus Torvalds #define SYNC_NG 2 2371da177e4SLinus Torvalds 2381da177e4SLinus Torvalds unsigned int SyncPeriod; 2391da177e4SLinus Torvalds unsigned int SyncOffset; 2401da177e4SLinus Torvalds unsigned char SyncRegister; 2411da177e4SLinus Torvalds unsigned char AckWidth; 2421da177e4SLinus Torvalds } sync_data; 2431da177e4SLinus Torvalds 2441da177e4SLinus Torvalds typedef struct _nsp_hw_data { 2451da177e4SLinus Torvalds unsigned int BaseAddress; 2461da177e4SLinus Torvalds unsigned int NumAddress; 2471da177e4SLinus Torvalds unsigned int IrqNumber; 2481da177e4SLinus Torvalds 2491da177e4SLinus Torvalds unsigned long MmioAddress; 2501da177e4SLinus Torvalds #define NSP_MMIO_OFFSET 0x0800 2511da177e4SLinus Torvalds unsigned long MmioLength; 2521da177e4SLinus Torvalds 2531da177e4SLinus Torvalds unsigned char ScsiClockDiv; 2541da177e4SLinus Torvalds 2551da177e4SLinus Torvalds unsigned char TransferMode; 2561da177e4SLinus Torvalds 2571da177e4SLinus Torvalds int TimerCount; 2581da177e4SLinus Torvalds int SelectionTimeOut; 2590fc82d5eSHenrik Kretzschmar struct scsi_cmnd *CurrentSC; 2601da177e4SLinus Torvalds //int CurrnetTarget; 2611da177e4SLinus Torvalds 2621da177e4SLinus Torvalds int FifoCount; 2631da177e4SLinus Torvalds 2641da177e4SLinus Torvalds #define MSGBUF_SIZE 20 2651da177e4SLinus Torvalds unsigned char MsgBuffer[MSGBUF_SIZE]; 2661da177e4SLinus Torvalds int MsgLen; 2671da177e4SLinus Torvalds 2681da177e4SLinus Torvalds #define N_TARGET 8 2691da177e4SLinus Torvalds sync_data Sync[N_TARGET]; 2701da177e4SLinus Torvalds 2711da177e4SLinus Torvalds char nspinfo[110]; /* description */ 2721da177e4SLinus Torvalds spinlock_t Lock; 2731da177e4SLinus Torvalds 2741da177e4SLinus Torvalds scsi_info_t *ScsiInfo; /* attach <-> detect glue */ 2751da177e4SLinus Torvalds 2761da177e4SLinus Torvalds 2771da177e4SLinus Torvalds #ifdef NSP_DEBUG 2781da177e4SLinus Torvalds int CmdId; /* Accepted command serial number. 2791da177e4SLinus Torvalds Used for debugging. */ 2801da177e4SLinus Torvalds #endif 2811da177e4SLinus Torvalds } nsp_hw_data; 2821da177e4SLinus Torvalds 2831da177e4SLinus Torvalds /**************************************************************************** 2841da177e4SLinus Torvalds * 2851da177e4SLinus Torvalds */ 2861da177e4SLinus Torvalds 2871da177e4SLinus Torvalds /* Card service functions */ 288cc3b4866SDominik Brodowski static void nsp_cs_detach (struct pcmcia_device *p_dev); 289fba395eeSDominik Brodowski static void nsp_cs_release(struct pcmcia_device *link); 29015b99ac1SDominik Brodowski static int nsp_cs_config (struct pcmcia_device *link); 2911da177e4SLinus Torvalds 2921da177e4SLinus Torvalds /* Linux SCSI subsystem specific functions */ 293d0be4a7dSChristoph Hellwig static struct Scsi_Host *nsp_detect (struct scsi_host_template *sht); 2941da177e4SLinus Torvalds static const char *nsp_info (struct Scsi_Host *shpnt); 29563fd57cbSAl Viro static int nsp_show_info (struct seq_file *m, 29663fd57cbSAl Viro struct Scsi_Host *host); 297f281233dSJeff Garzik static int nsp_queuecommand(struct Scsi_Host *h, struct scsi_cmnd *SCpnt); 2981da177e4SLinus Torvalds 2991da177e4SLinus Torvalds /* Error handler */ 3000fc82d5eSHenrik Kretzschmar /*static int nsp_eh_abort (struct scsi_cmnd *SCpnt);*/ 3010fc82d5eSHenrik Kretzschmar /*static int nsp_eh_device_reset(struct scsi_cmnd *SCpnt);*/ 3020fc82d5eSHenrik Kretzschmar static int nsp_eh_bus_reset (struct scsi_cmnd *SCpnt); 3030fc82d5eSHenrik Kretzschmar static int nsp_eh_host_reset (struct scsi_cmnd *SCpnt); 3041da177e4SLinus Torvalds static int nsp_bus_reset (nsp_hw_data *data); 3051da177e4SLinus Torvalds 3061da177e4SLinus Torvalds /* */ 30772961735SBart Van Assche static void nsphw_init (nsp_hw_data *data); 308dfab1e53SBart Van Assche static bool nsphw_start_selection(struct scsi_cmnd *SCpnt); 3090fc82d5eSHenrik Kretzschmar static void nsp_start_timer (struct scsi_cmnd *SCpnt, int time); 3100fc82d5eSHenrik Kretzschmar static int nsp_fifo_count (struct scsi_cmnd *SCpnt); 3110fc82d5eSHenrik Kretzschmar static void nsp_pio_read (struct scsi_cmnd *SCpnt); 3120fc82d5eSHenrik Kretzschmar static void nsp_pio_write (struct scsi_cmnd *SCpnt); 3130fc82d5eSHenrik Kretzschmar static int nsp_nexus (struct scsi_cmnd *SCpnt); 3140fc82d5eSHenrik Kretzschmar static void nsp_scsi_done (struct scsi_cmnd *SCpnt); 3150fc82d5eSHenrik Kretzschmar static int nsp_analyze_sdtr (struct scsi_cmnd *SCpnt); 3160fc82d5eSHenrik Kretzschmar static int nsp_negate_signal (struct scsi_cmnd *SCpnt, 3170fc82d5eSHenrik Kretzschmar unsigned char mask, char *str); 3180fc82d5eSHenrik Kretzschmar static int nsp_expect_signal (struct scsi_cmnd *SCpnt, 3190fc82d5eSHenrik Kretzschmar unsigned char current_phase, 3200fc82d5eSHenrik Kretzschmar unsigned char mask); 3210fc82d5eSHenrik Kretzschmar static int nsp_xfer (struct scsi_cmnd *SCpnt, int phase); 3220fc82d5eSHenrik Kretzschmar static int nsp_dataphase_bypass (struct scsi_cmnd *SCpnt); 32372961735SBart Van Assche static void nsp_reselected (struct scsi_cmnd *SCpnt); 324d0be4a7dSChristoph Hellwig static struct Scsi_Host *nsp_detect(struct scsi_host_template *sht); 3251da177e4SLinus Torvalds 3261da177e4SLinus Torvalds /* Interrupt handler */ 3277d12e780SDavid Howells //static irqreturn_t nspintr(int irq, void *dev_id); 3281da177e4SLinus Torvalds 3291da177e4SLinus Torvalds /* Debug */ 3301da177e4SLinus Torvalds #ifdef NSP_DEBUG 3310fc82d5eSHenrik Kretzschmar static void show_command (struct scsi_cmnd *SCpnt); 3320fc82d5eSHenrik Kretzschmar static void show_phase (struct scsi_cmnd *SCpnt); 3331da177e4SLinus Torvalds static void show_busphase(unsigned char stat); 3341da177e4SLinus Torvalds static void show_message (nsp_hw_data *data); 3351da177e4SLinus Torvalds #else 3361da177e4SLinus Torvalds # define show_command(ptr) /* */ 3371da177e4SLinus Torvalds # define show_phase(SCpnt) /* */ 3381da177e4SLinus Torvalds # define show_busphase(stat) /* */ 3391da177e4SLinus Torvalds # define show_message(data) /* */ 3401da177e4SLinus Torvalds #endif 3411da177e4SLinus Torvalds 3421da177e4SLinus Torvalds /* 3431da177e4SLinus Torvalds * SCSI phase 3441da177e4SLinus Torvalds */ 3451da177e4SLinus Torvalds enum _scsi_phase { 3461da177e4SLinus Torvalds PH_UNDETERMINED , 3471da177e4SLinus Torvalds PH_ARBSTART , 3481da177e4SLinus Torvalds PH_SELSTART , 3491da177e4SLinus Torvalds PH_SELECTED , 3501da177e4SLinus Torvalds PH_COMMAND , 3511da177e4SLinus Torvalds PH_DATA , 3521da177e4SLinus Torvalds PH_STATUS , 3531da177e4SLinus Torvalds PH_MSG_IN , 3541da177e4SLinus Torvalds PH_MSG_OUT , 3551da177e4SLinus Torvalds PH_DISCONNECT , 3561da177e4SLinus Torvalds PH_RESELECT , 3571da177e4SLinus Torvalds PH_ABORT , 3581da177e4SLinus Torvalds PH_RESET 3591da177e4SLinus Torvalds }; 3601da177e4SLinus Torvalds 3611da177e4SLinus Torvalds enum _data_in_out { 3621da177e4SLinus Torvalds IO_UNKNOWN, 3631da177e4SLinus Torvalds IO_IN, 3641da177e4SLinus Torvalds IO_OUT 3651da177e4SLinus Torvalds }; 3661da177e4SLinus Torvalds 3671da177e4SLinus Torvalds enum _burst_mode { 3681da177e4SLinus Torvalds BURST_IO8 = 0, 3691da177e4SLinus Torvalds BURST_IO32 = 1, 3701da177e4SLinus Torvalds BURST_MEM32 = 2, 3711da177e4SLinus Torvalds }; 3721da177e4SLinus Torvalds 3731da177e4SLinus Torvalds /* scatter-gather table */ 374ea39700fSBart Van Assche #define BUFFER_ADDR(SCpnt) ((char *)(sg_virt(nsp_priv(SCpnt)->buffer))) 3751da177e4SLinus Torvalds 3761da177e4SLinus Torvalds #endif /*__nsp_cs__*/ 3771da177e4SLinus Torvalds /* end */ 378