📄 sim710.h
字号:
#ifndef _SIM710_H#define _SIM710_H/* * sim710.h - Copyright (C) 1999 Richard Hirst */#include <linux/types.h>int sim710_detect(Scsi_Host_Template *);int sim710_command(Scsi_Cmnd *);int sim710_queuecommand(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));int sim710_abort(Scsi_Cmnd * SCpnt);int sim710_bus_reset(Scsi_Cmnd * SCpnt);int sim710_dev_reset(Scsi_Cmnd * SCpnt);int sim710_host_reset(Scsi_Cmnd * SCpnt);int sim710_biosparam(Disk *, kdev_t, int*);#ifdef MODULEint sim710_release(struct Scsi_Host *);#else#define sim710_release NULL#endif#include <scsi/scsicam.h>#define SIM710_SCSI { proc_name: "sim710", \ name: "Simple 53c710", \ detect: sim710_detect, \ release: sim710_release, \ queuecommand: sim710_queuecommand, \ eh_abort_handler: sim710_abort, \ eh_device_reset_handler: sim710_dev_reset, \ eh_bus_reset_handler: sim710_bus_reset, \ eh_host_reset_handler: sim710_host_reset, \ bios_param: scsicam_bios_param, \ can_queue: 8, \ this_id: 7, \ sg_tablesize: 128, \ cmd_per_lun: 1, \ use_clustering: DISABLE_CLUSTERING, \ use_new_eh_code: 1}#ifndef HOSTS_C#ifdef __BIG_ENDIAN#define bE 3 /* 0 for little endian, 3 for big endian */#else#define bE 0#endif/* SCSI control 0 rw, default = 0xc0 */#define SCNTL0_REG (0x00^bE)#define SCNTL0_ARB1 0x80 /* 0 0 = simple arbitration */#define SCNTL0_ARB2 0x40 /* 1 1 = full arbitration */#define SCNTL0_STRT 0x20 /* Start Sequence */#define SCNTL0_WATN 0x10 /* Select with ATN */#define SCNTL0_EPC 0x08 /* Enable parity checking *//* Bit 2 is reserved on 800 series chips */#define SCNTL0_EPG_700 0x04 /* Enable parity generation */#define SCNTL0_AAP 0x02 /* ATN/ on parity error */#define SCNTL0_TRG 0x01 /* Target mode *//* SCSI control 1 rw, default = 0x00 */#define SCNTL1_REG (0x01^bE)#define SCNTL1_EXC 0x80 /* Extra Clock Cycle of Data setup */#define SCNTL1_ADB 0x40 /* contents of SODL on bus */#define SCNTL1_ESR_700 0x20 /* Enable SIOP response to selection and reselection */#define SCNTL1_CON 0x10 /* Connected */#define SCNTL1_RST 0x08 /* SCSI RST/ */#define SCNTL1_AESP 0x04 /* Force bad parity */#define SCNTL1_SND_700 0x02 /* Start SCSI send */#define SCNTL1_IARB_800 0x02 /* Immediate Arbitration, start arbitration immediately after busfree is detected */#define SCNTL1_RCV_700 0x01 /* Start SCSI receive */#define SCNTL1_SST_800 0x01 /* Start SCSI transfer *//* SCSI control 2 rw, */#define SCNTL2_REG_800 (0x02^bE)#define SCNTL2_800_SDU 0x80 /* SCSI disconnect unexpected *//* SCSI control 3 rw */#define SCNTL3_REG_800 (0x03^bE)#define SCNTL3_800_SCF_SHIFT 4#define SCNTL3_800_SCF_MASK 0x70#define SCNTL3_800_SCF2 0x40 /* Synchronous divisor */#define SCNTL3_800_SCF1 0x20 /* 0x00 = SCLK/3 */#define SCNTL3_800_SCF0 0x10 /* 0x10 = SCLK/1 */ /* 0x20 = SCLK/1.5 0x30 = SCLK/2 0x40 = SCLK/3 */#define SCNTL3_800_CCF_SHIFT 0#define SCNTL3_800_CCF_MASK 0x07#define SCNTL3_800_CCF2 0x04 /* 0x00 50.01 to 66 */#define SCNTL3_800_CCF1 0x02 /* 0x01 16.67 to 25 */#define SCNTL3_800_CCF0 0x01 /* 0x02 25.01 - 37.5 0x03 37.51 - 50 0x04 50.01 - 66 *//* * SCSI destination ID rw - the appropriate bit is set for the selected * target ID. This is written by the SCSI SCRIPTS processor. * default = 0x00 */#define SDID_REG_700 (0x02^bE)#define SDID_REG_800 (0x06^bE)#define GP_REG_800 (0x07^bE) /* General purpose IO */#define GP_800_IO1 0x02#define GP_800_IO2 0x01/* SCSI interrupt enable rw, default = 0x00 */#define SIEN_REG_700 (0x03^bE)#define SIEN0_REG_800 (0x40^bE)#define SIEN_MA 0x80 /* Phase mismatch (ini) or ATN (tgt) */#define SIEN_FC 0x40 /* Function complete */#define SIEN_700_STO 0x20 /* Selection or reselection timeout */#define SIEN_800_SEL 0x20 /* Selected */#define SIEN_700_SEL 0x10 /* Selected or reselected */#define SIEN_800_RESEL 0x10 /* Reselected */#define SIEN_SGE 0x08 /* SCSI gross error */#define SIEN_UDC 0x04 /* Unexpected disconnect */#define SIEN_RST 0x02 /* SCSI RST/ received */#define SIEN_PAR 0x01 /* Parity error *//* * SCSI chip ID rw * NCR53c700 : * When arbitrating, the highest bit is used, when reselection or selection * occurs, the chip responds to all IDs for which a bit is set. * default = 0x00 */#define SCID_REG (0x04^bE)/* Bit 7 is reserved on 800 series chips */#define SCID_800_RRE 0x40 /* Enable response to reselection */#define SCID_800_SRE 0x20 /* Enable response to selection *//* Bits four and three are reserved on 800 series chips */#define SCID_800_ENC_MASK 0x07 /* Encoded SCSI ID *//* SCSI transfer rw, default = 0x00 */#define SXFER_REG (0x05^bE)#define SXFER_DHP 0x80 /* Disable halt on parity */#define SXFER_TP2 0x40 /* Transfer period msb */#define SXFER_TP1 0x20#define SXFER_TP0 0x10 /* lsb */#define SXFER_TP_MASK 0x70/* FIXME : SXFER_TP_SHIFT == 5 is right for '8xx chips */#define SXFER_TP_SHIFT 5#define SXFER_TP_4 0x00 /* Divisors */#define SXFER_TP_5 0x10<<1#define SXFER_TP_6 0x20<<1#define SXFER_TP_7 0x30<<1#define SXFER_TP_8 0x40<<1#define SXFER_TP_9 0x50<<1#define SXFER_TP_10 0x60<<1#define SXFER_TP_11 0x70<<1#define SXFER_MO3 0x08 /* Max offset msb */#define SXFER_MO2 0x04#define SXFER_MO1 0x02#define SXFER_MO0 0x01 /* lsb */#define SXFER_MO_MASK 0x0f#define SXFER_MO_SHIFT 0/* * SCSI output data latch rw * The contents of this register are driven onto the SCSI bus when * the Assert Data Bus bit of the SCNTL1 register is set and * the CD, IO, and MSG bits of the SOCL register match the SCSI phase */#define SODL_REG_700 (0x06^bE)#define SODL_REG_800 (0x54^bE)/* * SCSI output control latch rw, default = 0 * Note that when the chip is being manually programmed as an initiator, * the MSG, CD, and IO bits must be set correctly for the phase the target * is driving the bus in. Otherwise no data transfer will occur due to * phase mismatch. */#define SOCL_REG (0x07^bE)#define SOCL_REQ 0x80 /* REQ */#define SOCL_ACK 0x40 /* ACK */#define SOCL_BSY 0x20 /* BSY */#define SOCL_SEL 0x10 /* SEL */#define SOCL_ATN 0x08 /* ATN */#define SOCL_MSG 0x04 /* MSG */#define SOCL_CD 0x02 /* C/D */#define SOCL_IO 0x01 /* I/O *//* * SCSI first byte received latch ro * This register contains the first byte received during a block MOVE * SCSI SCRIPTS instruction, including * * Initiator mode Target mode * Message in Command * Status Message out * Data in Data out * * It also contains the selecting or reselecting device's ID and our * ID. * * Note that this is the register the various IF conditionals can * operate on. */#define SFBR_REG (0x08^bE)/* * SCSI input data latch ro * In initiator mode, data is latched into this register on the rising * edge of REQ/. In target mode, data is latched on the rising edge of * ACK/ */#define SIDL_REG_700 (0x09^bE)#define SIDL_REG_800 (0x50^bE)/* * SCSI bus data lines ro * This register reflects the instantaneous status of the SCSI data * lines. Note that SCNTL0 must be set to disable parity checking, * otherwise reading this register will latch new parity. */#define SBDL_REG_700 (0x0a^bE)#define SBDL_REG_800 (0x58^bE)#define SSID_REG_800 (0x0a^bE)#define SSID_800_VAL 0x80 /* Exactly two bits asserted at sel */#define SSID_800_ENCID_MASK 0x07 /* Device which performed operation *//* * SCSI bus control lines rw, * instantaneous readout of control lines */#define SBCL_REG (0x0b^bE)#define SBCL_REQ 0x80 /* REQ ro */#define SBCL_ACK 0x40 /* ACK ro */#define SBCL_BSY 0x20 /* BSY ro */#define SBCL_SEL 0x10 /* SEL ro */#define SBCL_ATN 0x08 /* ATN ro */#define SBCL_MSG 0x04 /* MSG ro */#define SBCL_CD 0x02 /* C/D ro */#define SBCL_IO 0x01 /* I/O ro */#define SBCL_PHASE_CMDOUT SBCL_CD#define SBCL_PHASE_DATAIN SBCL_IO#define SBCL_PHASE_DATAOUT 0#define SBCL_PHASE_MSGIN (SBCL_CD|SBCL_IO|SBCL_MSG)#define SBCL_PHASE_MSGOUT (SBCL_CD|SBCL_MSG)#define SBCL_PHASE_STATIN (SBCL_CD|SBCL_IO)#define SBCL_PHASE_MASK (SBCL_CD|SBCL_IO|SBCL_MSG)/* * Synchronous SCSI Clock Control bits * 0 - set by DCNTL * 1 - SCLK / 1.0 * 2 - SCLK / 1.5 * 3 - SCLK / 2.0 */#define SBCL_SSCF1 0x02 /* wo, -66 only */#define SBCL_SSCF0 0x01 /* wo, -66 only */#define SBCL_SSCF_MASK 0x03/* * XXX note : when reading the DSTAT and STAT registers to clear interrupts, * insure that 10 clocks elapse between the two *//* DMA status ro */#define DSTAT_REG (0x0c^bE)#define DSTAT_DFE 0x80 /* DMA FIFO empty */#define DSTAT_800_MDPE 0x40 /* Master Data Parity Error */#define DSTAT_BF 0x20 /* Bus Fault */#define DSTAT_ABRT 0x10 /* Aborted - set on error */#define DSTAT_SSI 0x08 /* SCRIPTS single step interrupt */#define DSTAT_SIR 0x04 /* SCRIPTS interrupt received - set when INT instruction is executed */#define DSTAT_WTD 0x02 /* Watchdog timeout detected */#define DSTAT_OPC 0x01 /* Illegal instruction */#define DSTAT_IID 0x01 /* Same thing, different name */#define SSTAT0_REG (0x0d^bE) /* SCSI status 0 ro */#define SIST0_REG_800 (0x42^bE) /* SCSI status 0 ro */#define SSTAT0_MA 0x80 /* ini : phase mismatch, * tgt : ATN/ asserted */#define SSTAT0_CMP 0x40 /* function complete */#define SSTAT0_700_STO 0x20 /* Selection or reselection timeout */#define SSTAT0_800_SEL 0x20 /* Selected */#define SSTAT0_700_SEL 0x10 /* Selected or reselected */#define SIST0_800_RSL 0x10 /* Reselected */#define SSTAT0_SGE 0x08 /* SCSI gross error */#define SSTAT0_UDC 0x04 /* Unexpected disconnect */#define SSTAT0_RST 0x02 /* SCSI RST/ received */#define SSTAT0_PAR 0x01 /* Parity error */#define SSTAT1_REG (0x0e^bE) /* SCSI status 1 ro */#define SSTAT1_ILF 0x80 /* SIDL full */#define SSTAT1_ORF 0x40 /* SODR full */#define SSTAT1_OLF 0x20 /* SODL full */#define SSTAT1_AIP 0x10 /* Arbitration in progress */#define SSTAT1_LOA 0x08 /* Lost arbitration */#define SSTAT1_WOA 0x04 /* Won arbitration */#define SSTAT1_RST 0x02 /* Instant readout of RST/ */#define SSTAT1_SDP 0x01 /* Instant readout of SDP/ */#define SSTAT2_REG (0x0f^bE) /* SCSI status 2 ro */#define SSTAT2_FF3 0x80 /* number of bytes in synchronous */#define SSTAT2_FF2 0x40 /* data FIFO */#define SSTAT2_FF1 0x20#define SSTAT2_FF0 0x10#define SSTAT2_FF_MASK 0xf0#define SSTAT2_FF_SHIFT 4/* * Latched signals, latched on the leading edge of REQ/ for initiators, * ACK/ for targets. */#define SSTAT2_SDP 0x08 /* SDP */#define SSTAT2_MSG 0x04 /* MSG */#define SSTAT2_CD 0x02 /* C/D */#define SSTAT2_IO 0x01 /* I/O */#define SSTAT2_PHASE_CMDOUT SSTAT2_CD#define SSTAT2_PHASE_DATAIN SSTAT2_IO#define SSTAT2_PHASE_DATAOUT 0#define SSTAT2_PHASE_MSGIN (SSTAT2_CD|SSTAT2_IO|SSTAT2_MSG)#define SSTAT2_PHASE_MSGOUT (SSTAT2_CD|SSTAT2_MSG)#define SSTAT2_PHASE_STATIN (SSTAT2_CD|SSTAT2_IO)#define SSTAT2_PHASE_MASK (SSTAT2_CD|SSTAT2_IO|SSTAT2_MSG)#define DSA_REG 0x10 /* DATA structure address */#define CTEST0_REG_700 (0x14^bE) /* Chip test 0 ro */#define CTEST0_REG_800 (0x18^bE) /* Chip test 0 ro *//* 0x80 - 0x04 are reserved */#define CTEST0_700_RTRG 0x02 /* Real target mode */#define CTEST0_700_DDIR 0x01 /* Data direction, 1 = * SCSI bus to host, 0 = * host to SCSI. */#define CTEST1_REG_700 (0x15^bE) /* Chip test 1 ro */#define CTEST1_REG_800 (0x19^bE) /* Chip test 1 ro */#define CTEST1_FMT3 0x80 /* Identify which byte lanes are empty */#define CTEST1_FMT2 0x40 /* in the DMA FIFO */#define CTEST1_FMT1 0x20#define CTEST1_FMT0 0x10#define CTEST1_FFL3 0x08 /* Identify which bytes lanes are full */#define CTEST1_FFL2 0x04 /* in the DMA FIFO */#define CTEST1_FFL1 0x02#define CTEST1_FFL0 0x01#define CTEST2_REG_700 (0x16^bE) /* Chip test 2 ro */#define CTEST2_REG_800 (0x1a^bE) /* Chip test 2 ro */#define CTEST2_800_DDIR 0x80 /* 1 = SCSI->host */#define CTEST2_800_SIGP 0x40 /* A copy of SIGP in ISTAT. Reading this register clears */#define CTEST2_800_CIO 0x20 /* Configured as IO */.#define CTEST2_800_CM 0x10 /* Configured as memory *//* 0x80 - 0x40 are reserved on 700 series chips */#define CTEST2_700_SOFF 0x20 /* SCSI Offset Compare, * As an initiator, this bit is * one when the synchronous offset * is zero, as a target this bit * is one when the synchronous * offset is at the maximum * defined in SXFER */#define CTEST2_700_SFP 0x10 /* SCSI FIFO parity bit, * reading CTEST3 unloads a byte * from the FIFO and sets this */#define CTEST2_700_DFP 0x08 /* DMA FIFO parity bit, * reading CTEST6 unloads a byte * from the FIFO and sets this */#define CTEST2_TEOP 0x04 /* SCSI true end of process, * indicates a totally finished * transfer */#define CTEST2_DREQ 0x02 /* Data request signal *//* 0x01 is reserved on 700 series chips */#define CTEST2_800_DACK 0x01/* * Chip test 3 ro * Unloads the bottom byte of the eight deep SCSI synchronous FIFO, * check SSTAT2 FIFO full bits to determine size. Note that a GROSS * error results if a read is attempted on this register. Also note * that 16 and 32 bit reads of this register will cause corruption. */#define CTEST3_REG_700 (0x17^bE)/* Chip test 3 rw */#define CTEST3_REG_800 (0x1b^bE)#define CTEST3_800_V3 0x80 /* Chip revision */#define CTEST3_800_V2 0x40#define CTEST3_800_V1 0x20#define CTEST3_800_V0 0x10#define CTEST3_800_FLF 0x08 /* Flush DMA FIFO */#define CTEST3_800_CLF 0x04 /* Clear DMA FIFO */#define CTEST3_800_FM 0x02 /* Fetch mode pin *//* bit 0 is reserved on 800 series chips */#define CTEST4_REG_400 (0x18^bE) /* Chip test 4 rw */#define CTEST4_REG_800 (0x21^bE) /* Chip test 4 rw *//* 0x80 is reserved on 700 series chips */#define CTEST4_800_BDIS 0x80 /* Burst mode disable */#define CTEST4_ZMOD 0x40 /* High impedance mode */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -