patch-2.4.7 linux/drivers/scsi/pcmcia/nsp_cs.h

Next file: linux/drivers/scsi/pcmcia/nsp_debug.c
Previous file: linux/drivers/scsi/pcmcia/nsp_cs.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.6/linux/drivers/scsi/pcmcia/nsp_cs.h linux/drivers/scsi/pcmcia/nsp_cs.h
@@ -0,0 +1,302 @@
+/*=======================================================/
+  Header file for nsp_cs.c
+      By: YOKOTA Hiroshi <yokota@netlab.is.tsukuba.ac.jp>
+
+    Ver.1.0 : Cut unused lines.
+    Ver 0.1 : Initial version.
+
+    This software may be used and distributed according to the terms of
+    the GNU General Public License.
+
+=========================================================*/
+
+/* $Id: nsp_cs.h,v 1.18 2001/02/09 04:42:19 elca Exp $ */
+
+#ifndef  __nsp_cs__
+#define  __nsp_cs__
+
+/* for debugging */
+/*
+#define DBG
+#define DBG_PRINT
+#define DBG_SHOWCOMMAND
+#define PCMCIA_DEBUG 9
+*/
+
+/*
+#define static
+#define inline
+*/
+
+/************************************
+ * Some useful macros...
+ */
+#define Number(arr) ((int) (sizeof(arr) / sizeof(arr[0])))
+#define BIT(x)      (1<<(x))
+#define MIN(a,b)    ((a) > (b) ? (b) : (a))
+
+/* SCSI initiator must be 7 */
+#define SCSI_INITIATOR_ID  7
+
+/* base register */
+#define	IRQCONTROL	0x00
+#  define IRQCONTROL_RESELECT_CLEAR     BIT(0)
+#  define IRQCONTROL_PHASE_CHANGE_CLEAR BIT(1)
+#  define IRQCONTROL_TIMER_CLEAR        BIT(2)
+#  define IRQCONTROL_FIFO_CLEAR         BIT(3)
+#  define IRQCONTROL_ALLMASK            0xff
+#  define IRQCONTROL_ALLCLEAR           0x0f
+#  define IRQCONTROL_IRQDISABLE         0xf0
+
+#define	IRQSTATUS	0x00
+#  define IRQSTATUS_SCSI  BIT(0)
+#  define IRQSTATUS_TIMER BIT(2)
+#  define IRQSTATUS_FIFO  BIT(3)
+#  define IRQSTATUS_MASK  0x0f
+
+#define	IFSELECT	0x01
+#  define IF_IFSEL    BIT(0)
+#  define IF_REGSEL   BIT(2)
+
+#define	FIFOSTATUS	0x01
+#  define FIFOSTATUS_CHIP_REVISION 0x0f
+#  define FIFOSTATUS_CHIP_ID       0x70
+#  define FIFOSTATUS_FULL_EMPTY    0x80
+
+#define	INDEXREG	0x02
+#define	DATAREG		0x03
+#define	FIFODATA	0x04
+#define	FIFODATA1	0x05
+#define	FIFODATA2	0x06
+#define	FIFODATA3	0x07
+
+/* indexed register */
+#define EXTBUSCTRL	0x10
+
+#define CLOCKDIV	0x11
+#  define CLOCK_40M 0x02
+#  define CLOCK_20M 0x01
+
+#define TERMPWRCTRL	0x13
+#  define POWER_ON BIT(0)
+
+#define SCSIIRQMODE	0x15
+#  define SCSI_PHASE_CHANGE_EI BIT(0)
+#  define RESELECT_EI          BIT(4)
+#  define FIFO_IRQ_EI          BIT(5)
+#  define SCSI_RESET_IRQ_EI    BIT(6)
+
+#define IRQPHASESENCE	0x16
+#  define LATCHED_MSG      BIT(0)
+#  define LATCHED_IO       BIT(1)
+#  define LATCHED_CD       BIT(2)
+#  define LATCHED_BUS_FREE BIT(3)
+#  define PHASE_CHANGE_IRQ BIT(4)
+#  define RESELECT_IRQ     BIT(5)
+#  define FIFO_IRQ         BIT(6)
+#  define SCSI_RESET_IRQ   BIT(7)
+
+#define TIMERCOUNT	0x17
+
+#define SCSIBUSCTRL	0x18
+#  define SCSI_SEL         BIT(0)
+#  define SCSI_RST         BIT(1)
+#  define SCSI_DATAOUT_ENB BIT(2)
+#  define SCSI_ATN         BIT(3)
+#  define SCSI_ACK         BIT(4)
+#  define SCSI_BSY         BIT(5)
+#  define AUTODIRECTION    BIT(6)
+#  define ACKENB           BIT(7)
+
+#define SCSIBUSMON	0x19
+
+#define SETARBIT	0x1A
+#  define ARBIT_GO         BIT(0)
+#  define ARBIT_FLAG_CLEAR BIT(1)
+
+#define ARBITSTATUS	0x1A
+/*#  define ARBIT_GO        BIT(0)*/
+#  define ARBIT_WIN        BIT(1)
+#  define ARBIT_FAIL       BIT(2)
+#  define RESELECT_FLAG    BIT(3)
+
+#define PARITYCTRL	0x1B  /* W */
+#define PARITYSTATUS	0x1B  /* R */
+
+#define COMMANDCTRL	0x1C  /* W */
+#  define CLEAR_COMMAND_POINTER BIT(0)
+#  define AUTO_COMMAND_GO       BIT(1)
+
+#define RESELECTID	0x1C  /* R */
+#define COMMANDDATA	0x1D
+
+#define POINTERCLR	0x1E  /* W */
+#  define POINTER_CLEAR      BIT(0)
+#  define ACK_COUNTER_CLEAR  BIT(1)
+#  define REQ_COUNTER_CLEAR  BIT(2)
+#  define HOST_COUNTER_CLEAR BIT(3)
+#  define READ_SOURCE        0x30
+
+#define TRANSFERCOUNT	0x1E  /* R */
+
+#define TRANSFERMODE	0x20
+#   define MODE_MEM8   BIT(0)
+#   define MODE_MEM32  BIT(1)
+#   define MODE_ADR24  BIT(2)
+#   define MODE_ADR32  BIT(3)
+#   define MODE_IO8    BIT(4)
+#   define MODE_IO32   BIT(5)
+#   define TRANSFER_GO BIT(6)
+#   define BRAIND      BIT(7)
+
+#define SYNCREG		0x21
+#  define SYNCREG_OFFSET_MASK  0x0f
+#  define SYNCREG_PERIOD_MASK  0xf0
+#  define SYNCREG_PERIOD_SHIFT 4
+
+#define SCSIDATALATCH	0x22
+#define SCSIDATAIN	0x22
+#define SCSIDATAWITHACK	0x23
+#define SCAMCONTROL	0x24
+#define SCAMSTATUS	0x24
+#define SCAMDATA	0x25
+
+#define OTHERCONTROL	0x26
+#  define TPL_ROM_WRITE_EN BIT(0)
+#  define TPWR_OUT         BIT(1)
+#  define TPWR_SENSE       BIT(2)
+#  define RA8_CONTROL      BIT(3)
+
+#define ACKWIDTH	0x27
+#define CLRTESTPNT	0x28
+#define ACKCNTLD	0x29
+#define REQCNTLD	0x2A
+#define HSTCNTLD	0x2B
+#define CHECKSUM	0x2C
+
+/*
+ * Input status bit definitions.
+ */
+#define S_ATN		0x80	/**/
+#define S_SELECT	0x40	/**/
+#define S_REQUEST	0x20    /* Request line from SCSI bus*/
+#define S_ACK		0x10    /* Acknowlege line from SCSI bus*/
+#define S_BUSY		0x08    /* Busy line from SCSI bus*/
+#define S_CD		0x04    /* Command/Data line from SCSI bus*/
+#define S_IO		0x02    /* Input/Output line from SCSI bus*/
+#define S_MESSAGE	0x01    /* Message line from SCSI bus*/
+
+/*
+ * Useful Bus Monitor status combinations.
+ */
+#define BUSMON_SEL         S_SELECT
+#define BUSMON_BSY         S_BUSY
+#define BUSMON_REQ         S_REQUEST
+#define BUSMON_IO          S_IO
+#define BUSMON_ACK         S_ACK
+#define BUSMON_BUS_FREE    0
+#define BUSMON_COMMAND     ( S_BUSY | S_CD | S_REQUEST )
+#define BUSMON_MESSAGE_IN  ( S_BUSY | S_MESSAGE | S_IO | S_CD | S_REQUEST )
+#define BUSMON_MESSAGE_OUT ( S_BUSY | S_MESSAGE | S_CD | S_REQUEST )
+#define BUSMON_DATA_IN     ( S_BUSY | S_IO | S_REQUEST )
+#define BUSMON_DATA_OUT    ( S_BUSY | S_REQUEST )
+#define BUSMON_STATUS      ( S_BUSY | S_IO | S_CD | S_REQUEST )
+#define BUSMON_RESELECT    ( S_SELECT | S_IO )
+#define BUSMON_PHASE_MASK  ( S_SELECT | S_CD | S_MESSAGE | S_IO )
+
+#define BUSPHASE_COMMAND     ( BUSMON_COMMAND     & BUSMON_PHASE_MASK )
+#define BUSPHASE_MESSAGE_IN  ( BUSMON_MESSAGE_IN  & BUSMON_PHASE_MASK )
+#define BUSPHASE_MESSAGE_OUT ( BUSMON_MESSAGE_OUT & BUSMON_PHASE_MASK )
+#define BUSPHASE_DATA_IN     ( BUSMON_DATA_IN     & BUSMON_PHASE_MASK )
+#define BUSPHASE_DATA_OUT    ( BUSMON_DATA_OUT    & BUSMON_PHASE_MASK )
+#define BUSPHASE_STATUS      ( BUSMON_STATUS      & BUSMON_PHASE_MASK )
+#define BUSPHASE_SELECT      ( S_SELECT | S_IO )
+
+/* synchronous transfer negotiation data */
+typedef struct _sync_data {
+	unsigned int SyncNegotiation;
+#define SYNC_NOT_YET 0
+#define SYNC_OK      1
+#define SYNC_NG      2
+
+	unsigned int  SyncPeriod;
+	unsigned int  SyncOffset;
+	unsigned char SyncRegister;
+	unsigned char AckWidth;
+} sync_data;
+
+typedef struct _nsp_data {
+	unsigned int  BaseAddress;
+	unsigned int  NumAddress;
+	unsigned int  IrqNumber;
+
+	unsigned char ScsiClockDiv;
+
+	unsigned char TransferMode;
+
+	int           TimerCount;
+	int           SelectionTimeOut;
+	Scsi_Cmnd    *CurrentSC;
+
+	int           FifoCount;
+#if (KERNEL_VERSION(2,4,0) > LINUX_VERSION_CODE)
+	int           Residual;
+#define RESID nsp_data.Residual
+#else
+#define RESID SCpnt->resid
+#endif
+
+#define MSGBUF_SIZE 20
+	unsigned char MsgBuffer[MSGBUF_SIZE];
+	int MsgLen;
+
+#define N_TARGET 8
+#define N_LUN    8
+	sync_data     Sync[N_TARGET][N_LUN];
+} nsp_hw_data;
+
+
+static unsigned int nsphw_start_selection(Scsi_Cmnd *SCpnt);
+static void nsp_start_timer(Scsi_Cmnd *SCpnt, int time);
+
+static int nsp_eh_bus_reset(Scsi_Cmnd *SCpnt);
+
+static int nsp_fifo_count(Scsi_Cmnd *SCpnt);
+static void nsp_pio_read(Scsi_Cmnd *SCpnt);
+static int nsp_nexus(Scsi_Cmnd *SCpnt);
+
+#ifdef PCMCIA_DEBUG
+# ifdef DBG_SHOWCOMMAND
+static void show_command(Scsi_Cmnd *ptr);
+static void show_phase(Scsi_Cmnd *SCpnt);
+static void show_busphase(unsigned char stat);
+# endif /* DBG_SHOWCOMMAND */
+#endif
+
+/*
+ * SCSI phase
+ */
+enum _scsi_phase {
+	PH_UNDETERMINED,
+	PH_ARBSTART,
+	PH_SELSTART,
+	PH_SELECTED,
+	PH_COMMAND,
+	PH_DATA,
+	PH_STATUS,
+	PH_MSG_IN,
+	PH_MSG_OUT,
+	PH_DISCONNECT,
+	PH_RESELECT
+};
+
+enum _data_in_out {
+	IO_UNKNOWN,
+	IO_IN,
+	IO_OUT
+};
+
+
+#define NSP_SELTIMEOUT 200
+
+#endif  /*__nsp_cs__*/

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)