2006-08-27 03:32:55 +04:00
|
|
|
/* $NetBSD: scsi_message.h,v 1.17 2006/08/26 23:32:55 bjh21 Exp $ */
|
1998-01-05 10:31:05 +03:00
|
|
|
|
1994-12-28 22:42:47 +03:00
|
|
|
/* Messages (1 byte) */ /* I/T (M)andatory or (O)ptional */
|
|
|
|
#define MSG_CMDCOMPLETE 0x00 /* M/M */
|
2002-12-07 01:46:34 +03:00
|
|
|
#define MSG_TASK_COMPLETE 0x00 /* M/M */ /* SPI3 Terminology */
|
1994-12-28 22:42:47 +03:00
|
|
|
#define MSG_EXTENDED 0x01 /* O/O */
|
|
|
|
#define MSG_SAVEDATAPOINTER 0x02 /* O/O */
|
|
|
|
#define MSG_RESTOREPOINTERS 0x03 /* O/O */
|
|
|
|
#define MSG_DISCONNECT 0x04 /* O/O */
|
|
|
|
#define MSG_INITIATOR_DET_ERR 0x05 /* M/M */
|
|
|
|
#define MSG_ABORT 0x06 /* O/M */
|
2002-12-07 01:46:34 +03:00
|
|
|
#define MSG_ABORT_TASK_SET 0x06 /* O/M */ /* SPI3 Terminology */
|
1994-12-28 22:42:47 +03:00
|
|
|
#define MSG_MESSAGE_REJECT 0x07 /* M/M */
|
|
|
|
#define MSG_NOOP 0x08 /* M/M */
|
|
|
|
#define MSG_PARITY_ERROR 0x09 /* M/M */
|
|
|
|
#define MSG_LINK_CMD_COMPLETE 0x0a /* O/O */
|
|
|
|
#define MSG_LINK_CMD_COMPLETEF 0x0b /* O/O */
|
|
|
|
#define MSG_BUS_DEV_RESET 0x0c /* O/M */
|
2002-12-07 01:46:34 +03:00
|
|
|
#define MSG_TARGET_RESET 0x0c /* O/M */ /* SPI3 Terminology */
|
1994-12-28 22:42:47 +03:00
|
|
|
#define MSG_ABORT_TAG 0x0d /* O/O */
|
2002-12-07 01:46:34 +03:00
|
|
|
#define MSG_ABORT_TASK 0x0d /* O/O */ /* SPI3 Terminology */
|
1994-12-28 22:42:47 +03:00
|
|
|
#define MSG_CLEAR_QUEUE 0x0e /* O/O */
|
2002-12-07 01:46:34 +03:00
|
|
|
#define MSG_CLEAR_TASK_SET 0x0e /* O/O */ /* SPI3 Terminology */
|
|
|
|
#define MSG_INIT_RECOVERY 0x0f /* O/O */ /* Deprecated in SPI3 */
|
|
|
|
#define MSG_REL_RECOVERY 0x10 /* O/O */ /* Deprecated in SPI3 */
|
|
|
|
#define MSG_TERM_IO_PROC 0x11 /* O/O */ /* Deprecated in SPI3 */
|
2003-04-19 23:11:13 +04:00
|
|
|
#define MSG_QAS_REQUEST 0x55 /* O/O */ /* SPI3 */
|
1994-12-28 22:42:47 +03:00
|
|
|
|
|
|
|
/* Messages (2 byte) */
|
|
|
|
#define MSG_SIMPLE_Q_TAG 0x20 /* O/O */
|
2002-12-07 01:46:34 +03:00
|
|
|
#define MSG_SIMPLE_TASK 0x20 /* O/O */ /* SPI3 Terminology */
|
1994-12-28 22:42:47 +03:00
|
|
|
#define MSG_HEAD_OF_Q_TAG 0x21 /* O/O */
|
2002-12-07 01:46:34 +03:00
|
|
|
#define MSG_HEAD_OF_QUEUE_TASK 0x21 /* O/O */ /* SPI3 Terminology */
|
1994-12-28 22:42:47 +03:00
|
|
|
#define MSG_ORDERED_Q_TAG 0x22 /* O/O */
|
2002-12-07 01:46:34 +03:00
|
|
|
#define MSG_ORDERED_TASK 0x22 /* O/O */ /* SPI3 Terminology */
|
1994-12-28 22:42:47 +03:00
|
|
|
#define MSG_IGN_WIDE_RESIDUE 0x23 /* O/O */
|
2002-12-07 01:46:34 +03:00
|
|
|
#define MSG_ACA_TASK 0x24 /* 0/0 */ /* SPI3 */
|
1994-12-28 22:42:47 +03:00
|
|
|
|
2005-02-27 03:26:58 +03:00
|
|
|
/* Identify message */ /* M/M */
|
|
|
|
#define MSG_IDENTIFYFLAG 0x80
|
2000-03-15 05:02:37 +03:00
|
|
|
#define MSG_IDENTIFY_DISCFLAG 0x40
|
2001-11-03 18:52:03 +03:00
|
|
|
#define MSG_IDENTIFY(lun, disc) \
|
|
|
|
(MSG_IDENTIFYFLAG | ((disc) ? MSG_IDENTIFY_DISCFLAG : 0) | (lun))
|
dev/microcode/aic7xxx/aic7xxx.seq,
dev/microcode/aic7xxx_seq.h,
dev/ic/aic7xxxreg.h:
Remove intrinsic knowledge about SDTR and WDTR messages and replace it
with a generic message system that allows the kernel driver to handle
SDTR, WDTR and any other type of extended message it chooses too. This
makes the sequencer code much simpler, makes extended message handling
debuggable since the bulk of the work is in the kernel driver, and saves
lots of instruction space.
Regen microcode header file.
dev/ic/aic7xxx.c, dev/ic/aic7xxxvar.h:
Add code to handle WDTR and SDTR negotiation in light of the changes in
the message interface to the sequencer. Don't reject targets that
negotiate async by sending an SDTR with a 0 offset. Use an sdtr message
with 0,0 to negotiate async when a target suggests a period that is too
long for us to handle. Some tape and cdrom drives don't like us doing
the message reject that we did in the past.
Fix a problem with handing the QUEUE FULL condition.
Fix a race condition (most likely the cause of the SCB paging problems) that
might allow the sequencer to get unpaused before the condition that caused
it to be paused (a SEQINT) was handled.
Race condition pointed out by Doug Ledford <dledford@dialnet.net> and
by "Dan Willis" <dan@plutotech.com>.
dev/pci/ahc_pci.c:
Add support for the 2940AU, an aic7860 based controller.
dev/pci/pcidevs.h, dev/pci/pcidevs_data.h:
Add product IDs for the 2940AU, aic7860 and aic7855.
Regen data file.
scsi/scsi_message.h:
Add MSG_EXT_SDTR_LEN and MSG_EXT_WDTR_LEN - the length of bytes in these
extended messages.
Thanks to Chuck Cranor <chuck@maria.wustl.edu> for testing these changes
out for me.
1996-10-08 07:04:02 +04:00
|
|
|
#define MSG_ISIDENTIFY(m) ((m) & MSG_IDENTIFYFLAG)
|
2002-12-07 01:46:34 +03:00
|
|
|
#define MSG_IDENTIFY_LUNMASK 0x3f
|
1994-12-28 22:42:47 +03:00
|
|
|
|
dev/microcode/aic7xxx/aic7xxx.seq,
dev/microcode/aic7xxx_seq.h,
dev/ic/aic7xxxreg.h:
Remove intrinsic knowledge about SDTR and WDTR messages and replace it
with a generic message system that allows the kernel driver to handle
SDTR, WDTR and any other type of extended message it chooses too. This
makes the sequencer code much simpler, makes extended message handling
debuggable since the bulk of the work is in the kernel driver, and saves
lots of instruction space.
Regen microcode header file.
dev/ic/aic7xxx.c, dev/ic/aic7xxxvar.h:
Add code to handle WDTR and SDTR negotiation in light of the changes in
the message interface to the sequencer. Don't reject targets that
negotiate async by sending an SDTR with a 0 offset. Use an sdtr message
with 0,0 to negotiate async when a target suggests a period that is too
long for us to handle. Some tape and cdrom drives don't like us doing
the message reject that we did in the past.
Fix a problem with handing the QUEUE FULL condition.
Fix a race condition (most likely the cause of the SCB paging problems) that
might allow the sequencer to get unpaused before the condition that caused
it to be paused (a SEQINT) was handled.
Race condition pointed out by Doug Ledford <dledford@dialnet.net> and
by "Dan Willis" <dan@plutotech.com>.
dev/pci/ahc_pci.c:
Add support for the 2940AU, an aic7860 based controller.
dev/pci/pcidevs.h, dev/pci/pcidevs_data.h:
Add product IDs for the 2940AU, aic7860 and aic7855.
Regen data file.
scsi/scsi_message.h:
Add MSG_EXT_SDTR_LEN and MSG_EXT_WDTR_LEN - the length of bytes in these
extended messages.
Thanks to Chuck Cranor <chuck@maria.wustl.edu> for testing these changes
out for me.
1996-10-08 07:04:02 +04:00
|
|
|
/* Extended messages (opcode and length) */
|
1994-12-28 22:42:47 +03:00
|
|
|
#define MSG_EXT_SDTR 0x01
|
dev/microcode/aic7xxx/aic7xxx.seq,
dev/microcode/aic7xxx_seq.h,
dev/ic/aic7xxxreg.h:
Remove intrinsic knowledge about SDTR and WDTR messages and replace it
with a generic message system that allows the kernel driver to handle
SDTR, WDTR and any other type of extended message it chooses too. This
makes the sequencer code much simpler, makes extended message handling
debuggable since the bulk of the work is in the kernel driver, and saves
lots of instruction space.
Regen microcode header file.
dev/ic/aic7xxx.c, dev/ic/aic7xxxvar.h:
Add code to handle WDTR and SDTR negotiation in light of the changes in
the message interface to the sequencer. Don't reject targets that
negotiate async by sending an SDTR with a 0 offset. Use an sdtr message
with 0,0 to negotiate async when a target suggests a period that is too
long for us to handle. Some tape and cdrom drives don't like us doing
the message reject that we did in the past.
Fix a problem with handing the QUEUE FULL condition.
Fix a race condition (most likely the cause of the SCB paging problems) that
might allow the sequencer to get unpaused before the condition that caused
it to be paused (a SEQINT) was handled.
Race condition pointed out by Doug Ledford <dledford@dialnet.net> and
by "Dan Willis" <dan@plutotech.com>.
dev/pci/ahc_pci.c:
Add support for the 2940AU, an aic7860 based controller.
dev/pci/pcidevs.h, dev/pci/pcidevs_data.h:
Add product IDs for the 2940AU, aic7860 and aic7855.
Regen data file.
scsi/scsi_message.h:
Add MSG_EXT_SDTR_LEN and MSG_EXT_WDTR_LEN - the length of bytes in these
extended messages.
Thanks to Chuck Cranor <chuck@maria.wustl.edu> for testing these changes
out for me.
1996-10-08 07:04:02 +04:00
|
|
|
#define MSG_EXT_SDTR_LEN 0x03
|
|
|
|
|
|
|
|
#define MSG_EXT_WDTR 0x03
|
|
|
|
#define MSG_EXT_WDTR_LEN 0x02
|
2001-04-25 21:53:04 +04:00
|
|
|
#define MSG_EXT_WDTR_BUS_8_BIT 0x00
|
|
|
|
#define MSG_EXT_WDTR_BUS_16_BIT 0x01
|
2002-12-07 01:46:34 +03:00
|
|
|
#define MSG_EXT_WDTR_BUS_32_BIT 0x02 /* Deprecated in SPI3 */
|
2001-04-25 21:53:04 +04:00
|
|
|
|
2002-12-07 01:46:34 +03:00
|
|
|
#define MSG_EXT_PPR 0x04 /* SPI3 */
|
2002-04-23 13:46:51 +04:00
|
|
|
#define MSG_EXT_PPR_LEN 0x06
|
|
|
|
/*
|
|
|
|
* Offsets: 0x3: transfer period factor
|
|
|
|
* 0x4: reserved
|
|
|
|
* 0x5: REQ/ACK offset
|
|
|
|
* 0x6: transfer width exponent
|
|
|
|
* 0x7: flags
|
|
|
|
*/
|
|
|
|
#define MSG_EXT_PPR_IU 0x01
|
|
|
|
#define MSG_EXT_PPR_DT 0x02
|
|
|
|
#define MSG_EXT_PPR_QAS 0x04
|
|
|
|
#define MSG_EXT_PPR_HOLDMCS 0x08
|
|
|
|
#define MSG_EXT_PPR_WRFLOW 0x10
|
|
|
|
#define MSG_EXT_PPR_RDSTRM 0x20
|
|
|
|
#define MSG_EXT_PPR_RTI 0x40
|
|
|
|
#define MSG_EXT_PPR_PCOM 0x80
|
|
|
|
|
2002-12-07 01:46:34 +03:00
|
|
|
/*
|
|
|
|
* FreeBSD compat for above.
|
|
|
|
*/
|
|
|
|
#define MSG_EXT_PPR_QAS_REQ MSG_EXT_PPR_QAS
|
|
|
|
#define MSG_EXT_PPR_DT_REQ MSG_EXT_PPR_DT
|
|
|
|
#define MSG_EXT_PPR_IU_REQ MSG_EXT_PPR_IU
|
2003-04-20 16:05:42 +04:00
|
|
|
#define MSG_EXT_PPR_PCOMP_EN MSG_EXT_PPR_PCOM
|
2003-04-21 03:43:04 +04:00
|
|
|
#define MSG_EXT_PPR_RD_STRM MSG_EXT_PPR_RDSTRM
|
2002-12-07 01:46:34 +03:00
|
|
|
|
2001-11-04 15:03:03 +03:00
|
|
|
#define MSG_ISEXTENDED(m) ((m) == MSG_EXTENDED)
|
|
|
|
|
|
|
|
/* message length */
|
2006-08-27 03:32:55 +04:00
|
|
|
#define MSG_IS1BYTE(m) \
|
|
|
|
((!MSG_ISEXTENDED(m) && (m) < 0x20) || \
|
|
|
|
(m) == MSG_QAS_REQUEST || MSG_ISIDENTIFY(m))
|
2001-11-04 15:03:03 +03:00
|
|
|
#define MSG_IS2BYTE(m) (((m) & 0xf0) == 0x20)
|