summaryrefslogtreecommitdiff
path: root/sanei/os2_srb.h
diff options
context:
space:
mode:
Diffstat (limited to 'sanei/os2_srb.h')
-rw-r--r--sanei/os2_srb.h156
1 files changed, 156 insertions, 0 deletions
diff --git a/sanei/os2_srb.h b/sanei/os2_srb.h
new file mode 100644
index 0000000..d04cf74
--- /dev/null
+++ b/sanei/os2_srb.h
@@ -0,0 +1,156 @@
+/***************************************************************************
+ * *
+ * ASPI Router Library *
+ * *
+ * This is a sample library which shows how to send SRB's to the *
+ * ASPI Router device driver. USE AT YOUR OWN RISK!! *
+ * *
+ * Version 1.01 - June 1997 *
+ * Daniel Dorau (woodst@cs.tu-berlin.de) *
+ * *
+ * Changes since 1.00: *
+ * abort(), AbortSRB added *
+ * *
+ ***************************************************************************/
+
+#pragma pack(1)
+
+ /* SRB command */
+#define SRB_Inquiry 0x00
+#define SRB_Device 0x01
+#define SRB_Command 0x02
+#define SRB_Abort 0x03
+#define SRB_Reset 0x04
+#define SRB_Param 0x05
+
+ /* SRB status */
+#define SRB_Busy 0x00 /* SCSI request in progress */
+#define SRB_Done 0x01 /* SCSI request completed without error */
+#define SRB_Aborted 0x02 /* SCSI aborted by host */
+#define SRB_BadAbort 0x03 /* Unable to abort SCSI request */
+#define SRB_Error 0x04 /* SCSI request completed with error */
+#define SRB_BusyPost 0x10 /* SCSI request in progress with POST - Nokia */
+#define SRB_InvalidCmd 0x80 /* Invalid SCSI request */
+#define SRB_InvalidHA 0x81 /* Invalid Hhost adapter number */
+#define SRB_BadDevice 0x82 /* SCSI device not installed */
+
+ /* SRB flags */
+#define SRB_Post 0x01 /* Post vector valid */
+#define SRB_Link 0x02 /* Link vector valid */
+#define SRB_SG 0x04 /* Nokia: scatter/gather */
+ /* S/G: n * (4 bytes length, 4 bytes addr) */
+ /* No of s/g items not limited by HA spec. */
+#define SRB_NoCheck 0x00 /* determined by command, not checked */
+#define SRB_Read 0x08 /* target to host, length checked */
+#define SRB_Write 0x10 /* host to target, length checked */
+#define SRB_NoTransfer 0x18 /* no data transfer */
+#define SRB_DirMask 0x18 /* bit mask */
+
+ /* SRB host adapter status */
+#define SRB_NoError 0x00 /* No host adapter detected error */
+#define SRB_Timeout 0x11 /* Selection timeout */
+#define SRB_DataLength 0x12 /* Data over/underrun */
+#define SRB_BusFree 0x13 /* Unexpected bus free */
+#define SRB_BusSequence 0x14 /* Target bus sequence failure */
+
+ /* SRB target status field */
+#define SRB_NoStatus 0x00 /* No target status */
+#define SRB_CheckStatus 0x02 /* Check status (sense data valid) */
+#define SRB_LUN_Busy 0x08 /* Specified LUN is busy */
+#define SRB_Reserved 0x18 /* Reservation conflict */
+
+#define MaxCDBStatus 64 /* max size of CDB + status */
+
+typedef struct SRB SRB;
+struct SRB {
+ unsigned char cmd, /* 00 */
+ status, /* 01 */
+ ha_num, /* 02 */
+ flags; /* 03 */
+ unsigned long res_04_07; /* 04..07 */
+ union { /* 08 */
+
+ /* SRB_Inquiry */
+ struct {
+ unsigned char num_ha, /* 08 */
+ ha_target, /* 09 */
+ aspimgr_id[16], /* 0A..19 */
+ host_id[16], /* 1A..29 */
+ unique_id[16]; /* 2A..39 */
+ } inq;
+
+ /* SRB_Device */
+ struct {
+ unsigned char target, /* 08 */
+ lun, /* 09 */
+ devtype; /* 0A */
+ } dev;
+
+ /* SRB_Command */
+ struct {
+ unsigned char target, /* 08 */
+ lun; /* 09 */
+ unsigned long data_len; /* 0A..0D */
+ unsigned char sense_len; /* 0E */
+ void * _Seg16 data_ptr; /* 0F..12 */
+ void * _Seg16 link_ptr; /* 13..16 */
+ unsigned char cdb_len, /* 17 */
+ ha_status, /* 18 */
+ target_status; /* 19 */
+ void (* _Seg16 post) (SRB *); /* 1A..1D */
+ unsigned char res_1E_29[12]; /* 1E..29 */
+ unsigned char res_2A_3F[22]; /* 2A..3F */
+ unsigned char cdb_st[64]; /* 40..7F CDB+status */
+ unsigned char res_80_BF[64]; /* 80..BF */
+ } cmd;
+
+ /* SRB_Abort */
+ struct {
+ void * _Seg16 srb; /* 08..0B */
+ } abt;
+
+ /* SRB_Reset */
+ struct {
+ unsigned char target, /* 08 */
+ lun, /* 09 */
+ res_0A_17[14], /* 0A..17 */
+ ha_status, /* 18 */
+ target_status; /* 19 */
+ } res;
+
+ /* SRB_Param - unused by ASPI4OS2 */
+ struct {
+ unsigned char unique[16]; /* 08..17 */
+ } par;
+
+ } u;
+};
+
+
+/* SCSI sense codes */
+/* Note! This list may not be complete. I did this compilation for use with tape drives.*/
+
+#define Sense_Current 0x70; /* Current Error */
+#define Sense_Deferred 0x71; /* Deferred Error */
+#define Sense_Filemark 0x80; /* Filemark detected */
+#define Sense_EOM 0x40; /* End of medium detected */
+#define Sense_ILI 0x20; /* Incorrect length indicator */
+
+/* Sense Keys */
+
+#define SK_NoSense 0x00; /* No Sense */
+#define SK_RcvrdErr 0x01; /* Recovered Error */
+#define SK_NotReady 0x02; /* Not ready */
+#define SK_MedErr 0x03; /* Medium Error */
+#define SK_HWErr 0x04; /* Hardware Error */
+#define SK_IllReq 0x05; /* Illegal Request */
+#define SK_UnitAtt 0x06; /* Unit attention */
+#define SK_DataProt 0x07: /* Data Protect */
+#define SK_BlankChk 0x08: /* Blank Check */
+#define SK_VndSpec 0x09; /* Vendor Specific */
+#define SK_CopyAbort 0x0A; /* Copy Aborted */
+#define SK_AbtdCmd 0x0B; /* Aborted Command */
+#define SK_Equal 0x0C; /* Equal */
+#define SK_VolOvfl 0x0D; /* Volume Overflow */
+#define SK_MisComp 0x0E; /* Miscompare */
+#define SK_Reserved 0x0F; /* Reserved */