summaryrefslogtreecommitdiff
path: root/include/arch/x86_64/linux/cciss_defs.h
blob: d5e0c5f66800f307fee04e7edd341dc41f7c9528 (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
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
#ifndef CCISS_DEFS_H
#define CCISS_DEFS_H

#include <linux/types.h>

/* general boundary definitions */
#define SENSEINFOBYTES                      \
	32 /* note that this value may vary \
	      between host implementations */

/* Command Status value */
#define CMD_SUCCESS	      0x0000
#define CMD_TARGET_STATUS     0x0001
#define CMD_DATA_UNDERRUN     0x0002
#define CMD_DATA_OVERRUN      0x0003
#define CMD_INVALID	      0x0004
#define CMD_PROTOCOL_ERR      0x0005
#define CMD_HARDWARE_ERR      0x0006
#define CMD_CONNECTION_LOST   0x0007
#define CMD_ABORTED	      0x0008
#define CMD_ABORT_FAILED      0x0009
#define CMD_UNSOLICITED_ABORT 0x000A
#define CMD_TIMEOUT	      0x000B
#define CMD_UNABORTABLE	      0x000C

/* transfer direction */
#define XFER_NONE  0x00
#define XFER_WRITE 0x01
#define XFER_READ  0x02
#define XFER_RSVD  0x03

/* task attribute */
#define ATTR_UNTAGGED	 0x00
#define ATTR_SIMPLE	 0x04
#define ATTR_HEADOFQUEUE 0x05
#define ATTR_ORDERED	 0x06
#define ATTR_ACA	 0x07

/* cdb type */
#define TYPE_CMD 0x00
#define TYPE_MSG 0x01

/* Type defs used in the following structs */
#define BYTE  __u8
#define WORD  __u16
#define HWORD __u16
#define DWORD __u32

#define CISS_MAX_LUN 1024

#define LEVEL2LUN 1 /* index into Target(x) structure, due to byte swapping */
#define LEVEL3LUN 0

#pragma pack(1)

/* Command List Structure */
typedef union _SCSI3Addr_struct {
	struct {
		BYTE Dev;
		BYTE Bus : 6;
		BYTE Mode : 2; /* b00 */
	} PeripDev;
	struct {
		BYTE DevLSB;
		BYTE DevMSB : 6;
		BYTE Mode : 2; /* b01 */
	} LogDev;
	struct {
		BYTE Dev : 5;
		BYTE Bus : 3;
		BYTE Targ : 6;
		BYTE Mode : 2; /* b10 */
	} LogUnit;
} SCSI3Addr_struct;

typedef struct _PhysDevAddr_struct {
	DWORD TargetId : 24;
	DWORD Bus : 6;
	DWORD Mode : 2;
	SCSI3Addr_struct Target[2]; /* 2 level target device addr */
} PhysDevAddr_struct;

typedef struct _LogDevAddr_struct {
	DWORD VolId : 30;
	DWORD Mode : 2;
	BYTE reserved[4];
} LogDevAddr_struct;

typedef union _LUNAddr_struct {
	BYTE LunAddrBytes[8];
	SCSI3Addr_struct SCSI3Lun[4];
	PhysDevAddr_struct PhysDev;
	LogDevAddr_struct LogDev;
} LUNAddr_struct;

typedef struct _RequestBlock_struct {
	BYTE CDBLen;
	struct {
		BYTE Type : 3;
		BYTE Attribute : 3;
		BYTE Direction : 2;
	} Type;
	HWORD Timeout;
	BYTE CDB[16];
} RequestBlock_struct;

typedef union _MoreErrInfo_struct {
	struct {
		BYTE Reserved[3];
		BYTE Type;
		DWORD ErrorInfo;
	} Common_Info;
	struct {
		BYTE Reserved[2];
		BYTE offense_size; /* size of offending entry */
		BYTE offense_num;  /* byte # of offense 0-base */
		DWORD offense_value;
	} Invalid_Cmd;
} MoreErrInfo_struct;
typedef struct _ErrorInfo_struct {
	BYTE ScsiStatus;
	BYTE SenseLen;
	HWORD CommandStatus;
	DWORD ResidualCnt;
	MoreErrInfo_struct MoreErrInfo;
	BYTE SenseInfo[SENSEINFOBYTES];
} ErrorInfo_struct;

#pragma pack()

#endif /* CCISS_DEFS_H */