xref: /openbmc/linux/drivers/scsi/mac53c94.h (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
21da177e4SLinus Torvalds /*
31da177e4SLinus Torvalds  * mac53c94.h: definitions for the driver for the 53c94 SCSI bus adaptor
41da177e4SLinus Torvalds  * found on Power Macintosh computers, controlling the external SCSI chain.
51da177e4SLinus Torvalds  *
61da177e4SLinus Torvalds  * Copyright (C) 1996 Paul Mackerras.
71da177e4SLinus Torvalds  */
81da177e4SLinus Torvalds #ifndef _MAC53C94_H
91da177e4SLinus Torvalds #define _MAC53C94_H
101da177e4SLinus Torvalds 
111da177e4SLinus Torvalds /*
121da177e4SLinus Torvalds  * Registers in the 53C94 controller.
131da177e4SLinus Torvalds  */
141da177e4SLinus Torvalds 
151da177e4SLinus Torvalds struct mac53c94_regs {
161da177e4SLinus Torvalds 	unsigned char	count_lo;
171da177e4SLinus Torvalds 	char pad0[15];
181da177e4SLinus Torvalds 	unsigned char	count_mid;
191da177e4SLinus Torvalds 	char pad1[15];
201da177e4SLinus Torvalds 	unsigned char	fifo;
211da177e4SLinus Torvalds 	char pad2[15];
221da177e4SLinus Torvalds 	unsigned char	command;
231da177e4SLinus Torvalds 	char pad3[15];
241da177e4SLinus Torvalds 	unsigned char	status;
251da177e4SLinus Torvalds 	char pad4[15];
261da177e4SLinus Torvalds 	unsigned char	interrupt;
271da177e4SLinus Torvalds 	char pad5[15];
281da177e4SLinus Torvalds 	unsigned char	seqstep;
291da177e4SLinus Torvalds 	char pad6[15];
301da177e4SLinus Torvalds 	unsigned char	flags;
311da177e4SLinus Torvalds 	char pad7[15];
321da177e4SLinus Torvalds 	unsigned char	config1;
331da177e4SLinus Torvalds 	char pad8[15];
341da177e4SLinus Torvalds 	unsigned char	clk_factor;
351da177e4SLinus Torvalds 	char pad9[15];
361da177e4SLinus Torvalds 	unsigned char	test;
371da177e4SLinus Torvalds 	char pad10[15];
381da177e4SLinus Torvalds 	unsigned char	config2;
391da177e4SLinus Torvalds 	char pad11[15];
401da177e4SLinus Torvalds 	unsigned char	config3;
411da177e4SLinus Torvalds 	char pad12[15];
421da177e4SLinus Torvalds 	unsigned char	config4;
431da177e4SLinus Torvalds 	char pad13[15];
441da177e4SLinus Torvalds 	unsigned char	count_hi;
451da177e4SLinus Torvalds 	char pad14[15];
461da177e4SLinus Torvalds 	unsigned char	fifo_res;
471da177e4SLinus Torvalds 	char pad15[15];
481da177e4SLinus Torvalds };
491da177e4SLinus Torvalds 
501da177e4SLinus Torvalds /*
511da177e4SLinus Torvalds  * Alternate functions for some registers.
521da177e4SLinus Torvalds  */
531da177e4SLinus Torvalds #define dest_id		status
541da177e4SLinus Torvalds #define sel_timeout	interrupt
551da177e4SLinus Torvalds #define sync_period	seqstep
561da177e4SLinus Torvalds #define sync_offset	flags
571da177e4SLinus Torvalds 
581da177e4SLinus Torvalds /*
591da177e4SLinus Torvalds  * Bits in command register.
601da177e4SLinus Torvalds  */
611da177e4SLinus Torvalds #define CMD_DMA_MODE	0x80
621da177e4SLinus Torvalds #define CMD_MODE_MASK	0x70
631da177e4SLinus Torvalds #define CMD_MODE_INIT	0x10
641da177e4SLinus Torvalds #define CMD_MODE_TARG	0x20
651da177e4SLinus Torvalds #define CMD_MODE_DISC	0x40
661da177e4SLinus Torvalds 
671da177e4SLinus Torvalds #define CMD_NOP		0
681da177e4SLinus Torvalds #define CMD_FLUSH	1
691da177e4SLinus Torvalds #define CMD_RESET	2
701da177e4SLinus Torvalds #define CMD_SCSI_RESET	3
711da177e4SLinus Torvalds 
721da177e4SLinus Torvalds #define CMD_XFER_DATA	0x10
731da177e4SLinus Torvalds #define CMD_I_COMPLETE	0x11
741da177e4SLinus Torvalds #define CMD_ACCEPT_MSG	0x12
751da177e4SLinus Torvalds #define CMD_XFER_PAD	0x18
761da177e4SLinus Torvalds #define CMD_SET_ATN	0x1a
771da177e4SLinus Torvalds #define CMD_CLR_ATN	0x1b
781da177e4SLinus Torvalds 
791da177e4SLinus Torvalds #define CMD_SEND_MSG	0x20
801da177e4SLinus Torvalds #define CMD_SEND_STATUS	0x21
811da177e4SLinus Torvalds #define CMD_SEND_DATA	0x22
821da177e4SLinus Torvalds #define CMD_DISC_SEQ	0x23
831da177e4SLinus Torvalds #define CMD_TERMINATE	0x24
841da177e4SLinus Torvalds #define CMD_T_COMPLETE	0x25
851da177e4SLinus Torvalds #define CMD_DISCONNECT	0x27
861da177e4SLinus Torvalds #define CMD_RECV_MSG	0x28
871da177e4SLinus Torvalds #define CMD_RECV_CDB	0x29
881da177e4SLinus Torvalds #define CMD_RECV_DATA	0x2a
891da177e4SLinus Torvalds #define CMD_RECV_CMD	0x2b
901da177e4SLinus Torvalds #define CMD_ABORT_DMA	0x04
911da177e4SLinus Torvalds 
921da177e4SLinus Torvalds #define CMD_RESELECT	0x40
931da177e4SLinus Torvalds #define CMD_SELECT	0x41
941da177e4SLinus Torvalds #define CMD_SELECT_ATN	0x42
951da177e4SLinus Torvalds #define CMD_SELATN_STOP	0x43
961da177e4SLinus Torvalds #define CMD_ENABLE_SEL	0x44
971da177e4SLinus Torvalds #define CMD_DISABLE_SEL	0x45
981da177e4SLinus Torvalds #define CMD_SEL_ATN3	0x46
991da177e4SLinus Torvalds #define CMD_RESEL_ATN3	0x47
1001da177e4SLinus Torvalds 
1011da177e4SLinus Torvalds /*
1021da177e4SLinus Torvalds  * Bits in status register.
1031da177e4SLinus Torvalds  */
1041da177e4SLinus Torvalds #define STAT_IRQ	0x80
1051da177e4SLinus Torvalds #define STAT_ERROR	0x40
1061da177e4SLinus Torvalds #define STAT_PARITY	0x20
1071da177e4SLinus Torvalds #define STAT_TC_ZERO	0x10
1081da177e4SLinus Torvalds #define STAT_DONE	0x08
1091da177e4SLinus Torvalds #define STAT_PHASE	0x07
1101da177e4SLinus Torvalds #define STAT_MSG	0x04
1111da177e4SLinus Torvalds #define STAT_CD		0x02
1121da177e4SLinus Torvalds #define STAT_IO		0x01
1131da177e4SLinus Torvalds 
1141da177e4SLinus Torvalds /*
1151da177e4SLinus Torvalds  * Bits in interrupt register.
1161da177e4SLinus Torvalds  */
1171da177e4SLinus Torvalds #define INTR_RESET	0x80	/* SCSI bus was reset */
1181da177e4SLinus Torvalds #define INTR_ILL_CMD	0x40	/* illegal command */
1191da177e4SLinus Torvalds #define INTR_DISCONNECT	0x20	/* we got disconnected */
1201da177e4SLinus Torvalds #define INTR_BUS_SERV	0x10	/* bus service requested */
1211da177e4SLinus Torvalds #define INTR_DONE	0x08	/* function completed */
1221da177e4SLinus Torvalds #define INTR_RESELECTED	0x04	/* we were reselected */
1231da177e4SLinus Torvalds #define INTR_SEL_ATN	0x02	/* we were selected, ATN asserted */
1241da177e4SLinus Torvalds #define INTR_SELECT	0x01	/* we were selected, ATN negated */
1251da177e4SLinus Torvalds 
1261da177e4SLinus Torvalds /*
1271da177e4SLinus Torvalds  * Encoding for the select timeout.
1281da177e4SLinus Torvalds  */
1291da177e4SLinus Torvalds #define TIMO_VAL(x)	((x) * 5000 / 7682)
1301da177e4SLinus Torvalds 
1311da177e4SLinus Torvalds /*
1321da177e4SLinus Torvalds  * Bits in sequence step register.
1331da177e4SLinus Torvalds  */
1341da177e4SLinus Torvalds #define SS_MASK		7
1351da177e4SLinus Torvalds #define SS_ARB_SEL	0	/* Selection & arbitration complete */
1361da177e4SLinus Torvalds #define SS_MSG_SENT	1	/* One message byte sent */
1371da177e4SLinus Torvalds #define SS_NOT_CMD	2	/* Not in command phase */
1381da177e4SLinus Torvalds #define SS_PHASE_CHG	3	/* Early phase change, cmd bytes lost */
1391da177e4SLinus Torvalds #define SS_DONE		4	/* Command was sent OK */
1401da177e4SLinus Torvalds 
1411da177e4SLinus Torvalds /*
1421da177e4SLinus Torvalds  * Encoding for sync transfer period.
1431da177e4SLinus Torvalds  */
1441da177e4SLinus Torvalds #define SYNCP_MASK	0x1f
1451da177e4SLinus Torvalds #define SYNCP_MIN	4
1461da177e4SLinus Torvalds #define SYNCP_MAX	31
1471da177e4SLinus Torvalds 
1481da177e4SLinus Torvalds /*
1491da177e4SLinus Torvalds  * Bits in flags register.
1501da177e4SLinus Torvalds  */
1511da177e4SLinus Torvalds #define FLAGS_FIFO_LEV	0x1f
1521da177e4SLinus Torvalds #define FLAGS_SEQ_STEP	0xe0
1531da177e4SLinus Torvalds 
1541da177e4SLinus Torvalds /*
1551da177e4SLinus Torvalds  * Encoding for sync offset.
1561da177e4SLinus Torvalds  */
1571da177e4SLinus Torvalds #define SYNCO_MASK	0x0f
1581da177e4SLinus Torvalds #define SYNCO_ASS_CTRL	0x30	/* REQ/ACK assertion control */
1591da177e4SLinus Torvalds #define SYNCO_NEG_CTRL	0xc0	/* REQ/ACK negation control */
1601da177e4SLinus Torvalds 
1611da177e4SLinus Torvalds /*
1621da177e4SLinus Torvalds  * Bits in config1 register.
1631da177e4SLinus Torvalds  */
1641da177e4SLinus Torvalds #define CF1_SLOW_CABLE	0x80	/* Slow cable mode */
1651da177e4SLinus Torvalds #define CF1_NO_RES_REP	0x40	/* Disable SCSI reset reports */
1661da177e4SLinus Torvalds #define CF1_PAR_TEST	0x20	/* Parity test mode enable */
1671da177e4SLinus Torvalds #define CF1_PAR_ENABLE	0x10	/* Enable parity checks */
1681da177e4SLinus Torvalds #define CF1_TEST	0x08	/* Chip tests */
1691da177e4SLinus Torvalds #define CF1_MY_ID	0x07	/* Controller's address on bus */
1701da177e4SLinus Torvalds 
1711da177e4SLinus Torvalds /*
1721da177e4SLinus Torvalds  * Encoding for clk_factor register.
1731da177e4SLinus Torvalds  */
1741da177e4SLinus Torvalds #define CLKF_MASK	7
1751da177e4SLinus Torvalds #define CLKF_VAL(freq)	((((freq) + 4999999) / 5000000) & CLKF_MASK)
1761da177e4SLinus Torvalds 
1771da177e4SLinus Torvalds /*
1781da177e4SLinus Torvalds  * Bits in test mode register.
1791da177e4SLinus Torvalds  */
1801da177e4SLinus Torvalds #define TEST_TARGET	1	/* target test mode */
1811da177e4SLinus Torvalds #define TEST_INITIATOR	2	/* initiator test mode */
1821da177e4SLinus Torvalds #define TEST_TRISTATE	4	/* tristate (hi-z) test mode */
1831da177e4SLinus Torvalds 
1841da177e4SLinus Torvalds /*
1851da177e4SLinus Torvalds  * Bits in config2 register.
1861da177e4SLinus Torvalds  */
1871da177e4SLinus Torvalds #define CF2_RFB		0x80
1881da177e4SLinus Torvalds #define CF2_FEATURE_EN	0x40	/* enable features / phase latch */
1891da177e4SLinus Torvalds #define CF2_BYTECTRL	0x20
1901da177e4SLinus Torvalds #define CF2_DREQ_HIZ	0x10
1911da177e4SLinus Torvalds #define CF2_SCSI2	0x08
1921da177e4SLinus Torvalds #define CF2_PAR_ABORT	0x04	/* bad parity target abort */
1931da177e4SLinus Torvalds #define CF2_REG_PARERR	0x02	/* register parity error */
1941da177e4SLinus Torvalds #define CF2_DMA_PARERR	0x01	/* DMA parity error */
1951da177e4SLinus Torvalds 
1961da177e4SLinus Torvalds /*
1971da177e4SLinus Torvalds  * Bits in the config3 register.
1981da177e4SLinus Torvalds  */
1991da177e4SLinus Torvalds #define CF3_ID_MSG_CHK	0x80
2001da177e4SLinus Torvalds #define CF3_3B_MSGS	0x40
2011da177e4SLinus Torvalds #define CF3_CDB10	0x20
2021da177e4SLinus Torvalds #define CF3_FASTSCSI	0x10	/* enable fast SCSI support */
2031da177e4SLinus Torvalds #define CF3_FASTCLOCK	0x08
2041da177e4SLinus Torvalds #define CF3_SAVERESID	0x04
2051da177e4SLinus Torvalds #define CF3_ALT_DMA	0x02
2061da177e4SLinus Torvalds #define CF3_THRESH_8	0x01
2071da177e4SLinus Torvalds 
2081da177e4SLinus Torvalds /*
2091da177e4SLinus Torvalds  * Bits in the config4 register.
2101da177e4SLinus Torvalds  */
2111da177e4SLinus Torvalds #define CF4_EAN		0x04
2121da177e4SLinus Torvalds #define CF4_TEST	0x02
2131da177e4SLinus Torvalds #define CF4_BBTE	0x01
2141da177e4SLinus Torvalds 
215cb2b6208SBart Van Assche struct mac53c94_cmd_priv {
216*55a94551SFinn Thain 	int this_residual;
217*55a94551SFinn Thain 	int status;
218*55a94551SFinn Thain 	int message;
219cb2b6208SBart Van Assche };
220cb2b6208SBart Van Assche 
mac53c94_priv(struct scsi_cmnd * cmd)221*55a94551SFinn Thain static inline struct mac53c94_cmd_priv *mac53c94_priv(struct scsi_cmnd *cmd)
222cb2b6208SBart Van Assche {
223*55a94551SFinn Thain 	return scsi_cmd_priv(cmd);
224cb2b6208SBart Van Assche }
225cb2b6208SBart Van Assche 
2261da177e4SLinus Torvalds #endif /* _MAC53C94_H */
227