Ticket #1653: sssraid.h

File sssraid.h, 3.0 KB (added by steven.song, 3 years ago)
Line 
1#ifndef _SSSRAID_H_
2#define _SSSRAID_H_
3#include <stdint.h>
4#define u8 uint8_t
5#define u16 uint16_t
6#define u32 uint32_t
7#define u64 uint64_t
8#define ADM_MAX_DATA_SIZE 0x1000U // 4096
9#define ADM_SCSI_CDB_MAX_LEN 32
10#define ADM_SCSI_CDB_SENSE_MAX_LEN 96
11#define ADM_SCSI_CDB_SENSE_LEN32 32
12#define ADM_CMD_SHOW_PDLIST 0x502 // 1282
13#define ADM_CMD_SCSI_PASSTHROUGH 0x51e // 1310
14#define BSG_APPEND_TIMEOUT_MS 600000
15#define ADM_BSG_MSGCODE_SCSI_PTHRU 1
16
17#define ADM_RAID_SET 0xc0
18#define ADM_RAID_WRITE 0xc1
19#define ADM_RAID_READ 0xc2
20#define ADM_RAID_PARAM_WRITE 0xc3
21#define ADM_RAID_READ_FROM_CQE 0xc4
22
23// pdlist device type interface
24enum adm_pdlist_intf {
25 ADM_DEVICE_TYPE_SAS = 1,
26 ADM_DEVICE_TYPE_EXP = 2,
27 ADM_DEVICE_TYPE_SATA = 8,
28 ADM_DEVICE_TYPE_PLANE = 9,
29 ADM_DEVICE_TYPE_NVME = 10,
30 ADM_DEVICE_TYPE_UNKNOW,
31 ADM_DEVICE_TYPE_BUTT
32};
33
34struct cmd_pdlist_idx {
35 u16 start_idx;
36 u16 count;
37 u32 rsvd;
38};
39
40struct cmd_pdlist_entry {
41 u16 enc_id;
42 u16 slot_id;
43 u8 interface;
44 u8 media_type;
45 u8 logi_type;
46 u8 logi_status;
47 u32 reserve[26];
48};
49#define CMD_PDS_MAX_NUM 256U
50#define CMD_PDLIST_ONCE_NUM ((ADM_MAX_DATA_SIZE - 64) / sizeof(struct cmd_pdlist_entry))
51
52struct cmd_show_pdlist {
53 u16 num;
54 u16 rsvd0;
55 u32 rsvd1[15];
56 struct cmd_pdlist_entry disks[CMD_PDLIST_ONCE_NUM];
57};
58
59struct multi_disk_location {
60 u16 enc_id;
61 u16 slot_id;
62 u16 did;
63 u8 flag;
64 u8 rsvd;
65};
66
67struct cmd_scsi_passthrough {
68 struct multi_disk_location loc;
69 u8 lun;
70 u8 cdb_len;
71 u8 sense_buffer_len;
72 u8 rsvd0;
73 u8 cdb[32];
74 u32 rsvd1;
75 u8 *sense_buffer;
76};
77
78struct sssraid_passthru_common_cmd {
79 u8 opcode;
80 u8 flags;
81 u16 rsvd0;
82 u32 nsid;
83 union {
84 struct {
85 u16 subopcode;
86 u16 rsvd1;
87 } info_0;
88 u32 cdw2;
89 };
90 union {
91 struct {
92 u16 data_len;
93 u16 param_len;
94 } info_1;
95 u32 cdw3;
96 };
97 u64 metadata;
98
99 u64 addr;
100 u32 metadata_len;
101 u32 data_len;
102
103 u32 cdw10;
104 u32 cdw11;
105 u32 cdw12;
106 u32 cdw13;
107 u32 cdw14;
108 u32 cdw15;
109 u32 timeout_ms;
110 u32 result0;
111 u32 result1;
112};
113
114struct sssraid_ioq_passthru_cmd {
115 u8 opcode;
116 u8 flags;
117 u16 rsvd0;
118 u32 nsid;
119 union {
120 struct {
121 u16 res_sense_len;
122 u8 cdb_len;
123 u8 rsvd0;
124 } info_0;
125 u32 cdw2;
126 };
127 union {
128 struct {
129 u16 subopcode;
130 u16 rsvd1;
131 } info_1;
132 u32 cdw3;
133 };
134 union {
135 struct {
136 u16 rsvd;
137 u16 param_len;
138 } info_2;
139 u32 cdw4;
140 };
141 u32 cdw5;
142 u64 addr;
143 u64 prp2;
144 union {
145 struct {
146 u16 eid;
147 u16 sid;
148 } info_3;
149 u32 cdw10;
150 };
151 union {
152 struct {
153 u16 did;
154 u8 did_flag;
155 u8 rsvd2;
156 } info_4;
157 u32 cdw11;
158 };
159 u32 cdw12;
160 u32 cdw13;
161 u32 cdw14;
162 u32 data_len;
163 u32 cdw16;
164 u32 cdw17;
165 u32 cdw18;
166 u32 cdw19;
167 u32 cdw20;
168 u32 cdw21;
169 u32 cdw22;
170 u32 cdw23;
171 u64 sense_addr;
172 u32 cdw26[4];
173 u32 timeout_ms;
174 u32 result0;
175 u32 result1;
176};
177
178struct bsg_ioctl_cmd {
179 u32 msgcode;
180 u32 control;
181 union {
182 struct sssraid_passthru_common_cmd ioctl_r64;
183 struct sssraid_ioq_passthru_cmd ioctl_pthru;
184 };
185};
186
187#endif // _SSSRAID_H