summaryrefslogtreecommitdiff
path: root/libusal/usal/aspi-dos.h
blob: 3428ac85a63bd5368dbc5581afe5c17e1b15698d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
/*
 * This file has been modified for the cdrkit suite.
 *
 * The behaviour and appearence of the program code below can differ to a major
 * extent from the version distributed by the original author(s).
 *
 * For details, see Changelog file distributed with the cdrkit package. If you
 * received this file from another source then ask the distributing person for
 * a log of modifications.
 *
 */

/* @(#)aspi-dos.h	1.2 05/05/15 J. Schilling */
#ifndef	__ASPI16_H_
#define	__ASPI16_H_

#define	PACKED	__attribute__((packed))
#define	FAR
typedef unsigned char	BYTE;
typedef unsigned short	WORD;
typedef unsigned long	DWORD;

//*****************************************************************************
//	%%% SCSI MISCELLANEOUS EQUATES %%%
//*****************************************************************************

#define	SENSE_LEN			14	// Default sense buffer length
#define	SRB_DIR_SCSI			0x00	// Direction determined by SCSI
#define	SRB_POSTING			0x01	// Enable ASPI posting
#define	SRB_ENABLE_RESIDUAL_COUNT	0x04	// Enable residual byte count reporting
#define	SRB_DIR_IN			0x08	// Transfer from SCSI target to host
#define	SRB_DIR_OUT			0x10	// Transfer from host to SCSI target

//*****************************************************************************
//      %%% ASPI Command Definitions %%%
//*****************************************************************************

#define	SC_HA_INQUIRY			0x00	// Host adapter inquiry
#define	SC_GET_DEV_TYPE			0x01	// Get device type
#define	SC_EXEC_SCSI_CMD		0x02	// Execute SCSI command
#define	SC_ABORT_SRB			0x03	// Abort an SRB
#define	SC_RESET_DEV			0x04	// SCSI bus device reset
#define	SC_SET_HA_PARMS			0x05	// Set HA parameters
#define	SC_GET_DISK_INFO		0x06	// Get Disk information

//*****************************************************************************
//      %%% SRB Status %%%
//*****************************************************************************

#define	SS_PENDING			0x00	// SRB being processed
#define	SS_COMP				0x01	// SRB completed without error
#define	SS_ABORTED			0x02	// SRB aborted
#define	SS_ABORT_FAIL			0x03	// Unable to abort SRB
#define	SS_ERR				0x04	// SRB completed with error

#define	SS_INVALID_CMD			0x80	// Invalid ASPI command
#define	SS_INVALID_HA			0x81	// Invalid host adapter number
#define	SS_NO_DEVICE			0x82	// SCSI device not installed

//*****************************************************************************
//      %%% Host Adapter Status %%%
//*****************************************************************************

#define	HASTAT_OK			0x00	// Host adapter did not detect an
						// error
#define	HASTAT_SEL_TO			0x11	// Selection Timeout
#define	HASTAT_DO_DU			0x12	// Data overrun data underrun
#define	HASTAT_BUS_FREE			0x13	// Unexpected bus free
#define	HASTAT_PHASE_ERR		0x14	// Target bus phase sequence
						// failure
#define	HASTAT_TIMEOUT			0x09	// Timed out while SRB was
						// waiting to beprocessed.
#define	HASTAT_COMMAND_TIMEOUT		0x0B	// Adapter timed out processing SRB.
#define	HASTAT_MESSAGE_REJECT		0x0D	// While processing SRB, the
						// adapter received a MESSAGE
#define	HASTAT_BUS_RESET		0x0E	// A bus reset was detected.
#define	HASTAT_PARITY_ERROR		0x0F	// A parity error was detected.
#define	HASTAT_REQUEST_SENSE_FAILED	0x10	// The adapter failed in issuing

typedef struct {

	BYTE	Cmd;				// 00/000 ASPI command code = SC_EXEC_SCSI_CMD
	BYTE	Status;				// 01/001 ASPI command status byte
	BYTE	HaId;				// 02/002 ASPI host adapter number
	BYTE	Flags;				// 03/003 ASPI request flags
	DWORD	Hdr_Rsvd;			// 04/004 Reserved, MUST = 0

	union {

	struct {

		BYTE	Count;			// 08/008 Number of host adapters present
		BYTE	SCSI_ID;		// 09/009 SCSI ID of host adapter
		BYTE	ManagerId[16];		// 0A/010 String describing the manager
		BYTE	Identifier[16];		// 1A/026 String describing the host adapter
		BYTE	Unique[16];		// 2A/042 Host Adapter Unique parameters
		BYTE	ExtBuffer[8];		// 3A/058 Extended inquiry data

	} PACKED HAInquiry;

	struct {

		BYTE	Target;			// 08/008 Target's SCSI ID
		BYTE	Lun;			// 09/009 Target's LUN number
		BYTE	DeviceType;		// 0A/010 Target's peripheral device type

	} PACKED GetDeviceType;

	struct {

		BYTE	Target;			// 08/008 Target's SCSI ID
		BYTE	Lun;			// 09/009 Target's LUN number
		DWORD	BufLen;			// 0A/010 Data Allocation Length
		BYTE	SenseLen;		// 0E/014 Sense Allocation Length
		BYTE	FAR *BufPointer;	// 0F/015 Data Buffer Pointer
		DWORD	Rsvd1;			// 13/019 Reserved, MUST = 0
		BYTE	CDBLen;			// 17/023 CDB Length = 6/10/12
		BYTE	HaStat;			// 18/024 Host Adapter Status
		BYTE	TargStat;		// 19/025 Target Status
		VOID	FAR *PostProc;		// 1A/026 Post routine
		BYTE	Rsvd2[34];		// 1E/030 Reserved, MUST = 0

		union {

		struct {

			BYTE	CDBByte[6];		// 40/064 SCSI CDB
			BYTE	SenseArea[SENSE_LEN+2];	// 46/070 Request Sense buffer

		} PACKED _6;

		struct {

			BYTE	CDBByte[10];		// 40/064 SCSI CDB
			BYTE	SenseArea[SENSE_LEN+2];	// 4A/074 Request Sense buffer

		} PACKED _10;

		struct {

			BYTE	CDBByte[12];		// 40/064 SCSI CDB
			BYTE	SenseArea[SENSE_LEN+2];	// 4C/076 Request Sense buffer

		} PACKED _12;

		} PACKED CmdLen;

	} PACKED ExecSCSICmd;

	struct {

		VOID	FAR	*SRBToAbort;	// 08/008 Pointer to SRB to abort

	} PACKED Abort;

	struct {
		BYTE	Target;		// 08/008 Target's SCSI ID
		BYTE	Lun;		// 09/009 Target's LUN number
		BYTE	ResetRsvd1[14];	// 0A/010 Reserved, MUST = 0
		BYTE	HaStat;		// 18/024 Host Adapter Status
		BYTE	TargStat;	// 19/025 Target Status
		VOID	FAR *PostProc;	// 1A/026 Post routine
		BYTE	ResetRsvd2[34];	// 1E/030 Reserved, MUST = 0
	} Reset;
	} PACKED Type;

} PACKED SRB;

#endif /* __ASPI16_H_ */