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 Thainstatic 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