root / hw / ppc-viosrp.h @ 8294a64d
History | View | Annotate | Download (6.7 kB)
1 | 6e270446 | Ben Herrenschmidt | /*****************************************************************************/
|
---|---|---|---|
2 | 6e270446 | Ben Herrenschmidt | /* srp.h -- SCSI RDMA Protocol definitions */
|
3 | 6e270446 | Ben Herrenschmidt | /* */
|
4 | 6e270446 | Ben Herrenschmidt | /* Written By: Colin Devilbis, IBM Corporation */
|
5 | 6e270446 | Ben Herrenschmidt | /* */
|
6 | 6e270446 | Ben Herrenschmidt | /* Copyright (C) 2003 IBM Corporation */
|
7 | 6e270446 | Ben Herrenschmidt | /* */
|
8 | 6e270446 | Ben Herrenschmidt | /* This program is free software; you can redistribute it and/or modify */
|
9 | 6e270446 | Ben Herrenschmidt | /* it under the terms of the GNU General Public License as published by */
|
10 | 6e270446 | Ben Herrenschmidt | /* the Free Software Foundation; either version 2 of the License, or */
|
11 | 6e270446 | Ben Herrenschmidt | /* (at your option) any later version. */
|
12 | 6e270446 | Ben Herrenschmidt | /* */
|
13 | 6e270446 | Ben Herrenschmidt | /* This program is distributed in the hope that it will be useful, */
|
14 | 6e270446 | Ben Herrenschmidt | /* but WITHOUT ANY WARRANTY; without even the implied warranty of */
|
15 | 6e270446 | Ben Herrenschmidt | /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
|
16 | 6e270446 | Ben Herrenschmidt | /* GNU General Public License for more details. */
|
17 | 6e270446 | Ben Herrenschmidt | /* */
|
18 | 6e270446 | Ben Herrenschmidt | /* You should have received a copy of the GNU General Public License */
|
19 | 6e270446 | Ben Herrenschmidt | /* along with this program; if not, write to the Free Software */
|
20 | 6e270446 | Ben Herrenschmidt | /* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
21 | 6e270446 | Ben Herrenschmidt | /* */
|
22 | 6e270446 | Ben Herrenschmidt | /* */
|
23 | 6e270446 | Ben Herrenschmidt | /* This file contains structures and definitions for IBM RPA (RS/6000 */
|
24 | 6e270446 | Ben Herrenschmidt | /* platform architecture) implementation of the SRP (SCSI RDMA Protocol) */
|
25 | 6e270446 | Ben Herrenschmidt | /* standard. SRP is used on IBM iSeries and pSeries platforms to send SCSI */
|
26 | 6e270446 | Ben Herrenschmidt | /* commands between logical partitions. */
|
27 | 6e270446 | Ben Herrenschmidt | /* */
|
28 | 6e270446 | Ben Herrenschmidt | /* SRP Information Units (IUs) are sent on a "Command/Response Queue" (CRQ) */
|
29 | 6e270446 | Ben Herrenschmidt | /* between partitions. The definitions in this file are architected, */
|
30 | 6e270446 | Ben Herrenschmidt | /* and cannot be changed without breaking compatibility with other versions */
|
31 | 6e270446 | Ben Herrenschmidt | /* of Linux and other operating systems (AIX, OS/400) that talk this protocol*/
|
32 | 6e270446 | Ben Herrenschmidt | /* between logical partitions */
|
33 | 6e270446 | Ben Herrenschmidt | /*****************************************************************************/
|
34 | 6e270446 | Ben Herrenschmidt | #ifndef PPC_VIOSRP_H
|
35 | 6e270446 | Ben Herrenschmidt | #define PPC_VIOSRP_H
|
36 | 6e270446 | Ben Herrenschmidt | |
37 | 6e270446 | Ben Herrenschmidt | #define SRP_VERSION "16.a" |
38 | 6e270446 | Ben Herrenschmidt | #define SRP_MAX_IU_LEN 256 |
39 | 6e270446 | Ben Herrenschmidt | #define SRP_MAX_LOC_LEN 32 |
40 | 6e270446 | Ben Herrenschmidt | |
41 | 6e270446 | Ben Herrenschmidt | union srp_iu {
|
42 | 6e270446 | Ben Herrenschmidt | struct srp_login_req login_req;
|
43 | 6e270446 | Ben Herrenschmidt | struct srp_login_rsp login_rsp;
|
44 | 6e270446 | Ben Herrenschmidt | struct srp_login_rej login_rej;
|
45 | 6e270446 | Ben Herrenschmidt | struct srp_i_logout i_logout;
|
46 | 6e270446 | Ben Herrenschmidt | struct srp_t_logout t_logout;
|
47 | 6e270446 | Ben Herrenschmidt | struct srp_tsk_mgmt tsk_mgmt;
|
48 | 6e270446 | Ben Herrenschmidt | struct srp_cmd cmd;
|
49 | 6e270446 | Ben Herrenschmidt | struct srp_rsp rsp;
|
50 | 6e270446 | Ben Herrenschmidt | uint8_t reserved[SRP_MAX_IU_LEN]; |
51 | 6e270446 | Ben Herrenschmidt | }; |
52 | 6e270446 | Ben Herrenschmidt | |
53 | 6e270446 | Ben Herrenschmidt | enum viosrp_crq_formats {
|
54 | 6e270446 | Ben Herrenschmidt | VIOSRP_SRP_FORMAT = 0x01,
|
55 | 6e270446 | Ben Herrenschmidt | VIOSRP_MAD_FORMAT = 0x02,
|
56 | 6e270446 | Ben Herrenschmidt | VIOSRP_OS400_FORMAT = 0x03,
|
57 | 6e270446 | Ben Herrenschmidt | VIOSRP_AIX_FORMAT = 0x04,
|
58 | 6e270446 | Ben Herrenschmidt | VIOSRP_LINUX_FORMAT = 0x06,
|
59 | 6e270446 | Ben Herrenschmidt | VIOSRP_INLINE_FORMAT = 0x07
|
60 | 6e270446 | Ben Herrenschmidt | }; |
61 | 6e270446 | Ben Herrenschmidt | |
62 | 6e270446 | Ben Herrenschmidt | enum viosrp_crq_status {
|
63 | 6e270446 | Ben Herrenschmidt | VIOSRP_OK = 0x0,
|
64 | 6e270446 | Ben Herrenschmidt | VIOSRP_NONRECOVERABLE_ERR = 0x1,
|
65 | 6e270446 | Ben Herrenschmidt | VIOSRP_VIOLATES_MAX_XFER = 0x2,
|
66 | 6e270446 | Ben Herrenschmidt | VIOSRP_PARTNER_PANIC = 0x3,
|
67 | 6e270446 | Ben Herrenschmidt | VIOSRP_DEVICE_BUSY = 0x8,
|
68 | 6e270446 | Ben Herrenschmidt | VIOSRP_ADAPTER_FAIL = 0x10,
|
69 | 6e270446 | Ben Herrenschmidt | VIOSRP_OK2 = 0x99,
|
70 | 6e270446 | Ben Herrenschmidt | }; |
71 | 6e270446 | Ben Herrenschmidt | |
72 | 6e270446 | Ben Herrenschmidt | struct viosrp_crq {
|
73 | 6e270446 | Ben Herrenschmidt | uint8_t valid; /* used by RPA */
|
74 | 6e270446 | Ben Herrenschmidt | uint8_t format; /* SCSI vs out-of-band */
|
75 | 6e270446 | Ben Herrenschmidt | uint8_t reserved; |
76 | 6e270446 | Ben Herrenschmidt | uint8_t status; /* non-scsi failure? (e.g. DMA failure) */
|
77 | 6e270446 | Ben Herrenschmidt | uint16_t timeout; /* in seconds */
|
78 | 6e270446 | Ben Herrenschmidt | uint16_t IU_length; /* in bytes */
|
79 | 6e270446 | Ben Herrenschmidt | uint64_t IU_data_ptr; /* the TCE for transferring data */
|
80 | 6e270446 | Ben Herrenschmidt | }; |
81 | 6e270446 | Ben Herrenschmidt | |
82 | 6e270446 | Ben Herrenschmidt | /* MADs are Management requests above and beyond the IUs defined in the SRP
|
83 | 6e270446 | Ben Herrenschmidt | * standard.
|
84 | 6e270446 | Ben Herrenschmidt | */
|
85 | 6e270446 | Ben Herrenschmidt | enum viosrp_mad_types {
|
86 | 6e270446 | Ben Herrenschmidt | VIOSRP_EMPTY_IU_TYPE = 0x01,
|
87 | 6e270446 | Ben Herrenschmidt | VIOSRP_ERROR_LOG_TYPE = 0x02,
|
88 | 6e270446 | Ben Herrenschmidt | VIOSRP_ADAPTER_INFO_TYPE = 0x03,
|
89 | 6e270446 | Ben Herrenschmidt | VIOSRP_HOST_CONFIG_TYPE = 0x04,
|
90 | 6e270446 | Ben Herrenschmidt | VIOSRP_CAPABILITIES_TYPE = 0x05,
|
91 | 6e270446 | Ben Herrenschmidt | VIOSRP_ENABLE_FAST_FAIL = 0x08,
|
92 | 6e270446 | Ben Herrenschmidt | }; |
93 | 6e270446 | Ben Herrenschmidt | |
94 | 6e270446 | Ben Herrenschmidt | enum viosrp_mad_status {
|
95 | 6e270446 | Ben Herrenschmidt | VIOSRP_MAD_SUCCESS = 0x00,
|
96 | 6e270446 | Ben Herrenschmidt | VIOSRP_MAD_NOT_SUPPORTED = 0xF1,
|
97 | 6e270446 | Ben Herrenschmidt | VIOSRP_MAD_FAILED = 0xF7,
|
98 | 6e270446 | Ben Herrenschmidt | }; |
99 | 6e270446 | Ben Herrenschmidt | |
100 | 6e270446 | Ben Herrenschmidt | enum viosrp_capability_type {
|
101 | 6e270446 | Ben Herrenschmidt | MIGRATION_CAPABILITIES = 0x01,
|
102 | 6e270446 | Ben Herrenschmidt | RESERVATION_CAPABILITIES = 0x02,
|
103 | 6e270446 | Ben Herrenschmidt | }; |
104 | 6e270446 | Ben Herrenschmidt | |
105 | 6e270446 | Ben Herrenschmidt | enum viosrp_capability_support {
|
106 | 6e270446 | Ben Herrenschmidt | SERVER_DOES_NOT_SUPPORTS_CAP = 0x0,
|
107 | 6e270446 | Ben Herrenschmidt | SERVER_SUPPORTS_CAP = 0x01,
|
108 | 6e270446 | Ben Herrenschmidt | SERVER_CAP_DATA = 0x02,
|
109 | 6e270446 | Ben Herrenschmidt | }; |
110 | 6e270446 | Ben Herrenschmidt | |
111 | 6e270446 | Ben Herrenschmidt | enum viosrp_reserve_type {
|
112 | 6e270446 | Ben Herrenschmidt | CLIENT_RESERVE_SCSI_2 = 0x01,
|
113 | 6e270446 | Ben Herrenschmidt | }; |
114 | 6e270446 | Ben Herrenschmidt | |
115 | 6e270446 | Ben Herrenschmidt | enum viosrp_capability_flag {
|
116 | 6e270446 | Ben Herrenschmidt | CLIENT_MIGRATED = 0x01,
|
117 | 6e270446 | Ben Herrenschmidt | CLIENT_RECONNECT = 0x02,
|
118 | 6e270446 | Ben Herrenschmidt | CAP_LIST_SUPPORTED = 0x04,
|
119 | 6e270446 | Ben Herrenschmidt | CAP_LIST_DATA = 0x08,
|
120 | 6e270446 | Ben Herrenschmidt | }; |
121 | 6e270446 | Ben Herrenschmidt | |
122 | 6e270446 | Ben Herrenschmidt | /*
|
123 | 6e270446 | Ben Herrenschmidt | * Common MAD header
|
124 | 6e270446 | Ben Herrenschmidt | */
|
125 | 6e270446 | Ben Herrenschmidt | struct mad_common {
|
126 | 6e270446 | Ben Herrenschmidt | uint32_t type; |
127 | 6e270446 | Ben Herrenschmidt | uint16_t status; |
128 | 6e270446 | Ben Herrenschmidt | uint16_t length; |
129 | 6e270446 | Ben Herrenschmidt | uint64_t tag; |
130 | 6e270446 | Ben Herrenschmidt | }; |
131 | 6e270446 | Ben Herrenschmidt | |
132 | 6e270446 | Ben Herrenschmidt | /*
|
133 | 6e270446 | Ben Herrenschmidt | * All SRP (and MAD) requests normally flow from the
|
134 | 6e270446 | Ben Herrenschmidt | * client to the server. There is no way for the server to send
|
135 | 6e270446 | Ben Herrenschmidt | * an asynchronous message back to the client. The Empty IU is used
|
136 | 6e270446 | Ben Herrenschmidt | * to hang out a meaningless request to the server so that it can respond
|
137 | 6e270446 | Ben Herrenschmidt | * asynchrouously with something like a SCSI AER
|
138 | 6e270446 | Ben Herrenschmidt | */
|
139 | 6e270446 | Ben Herrenschmidt | struct viosrp_empty_iu {
|
140 | 6e270446 | Ben Herrenschmidt | struct mad_common common;
|
141 | 6e270446 | Ben Herrenschmidt | uint64_t buffer; |
142 | 6e270446 | Ben Herrenschmidt | uint32_t port; |
143 | 6e270446 | Ben Herrenschmidt | }; |
144 | 6e270446 | Ben Herrenschmidt | |
145 | 6e270446 | Ben Herrenschmidt | struct viosrp_error_log {
|
146 | 6e270446 | Ben Herrenschmidt | struct mad_common common;
|
147 | 6e270446 | Ben Herrenschmidt | uint64_t buffer; |
148 | 6e270446 | Ben Herrenschmidt | }; |
149 | 6e270446 | Ben Herrenschmidt | |
150 | 6e270446 | Ben Herrenschmidt | struct viosrp_adapter_info {
|
151 | 6e270446 | Ben Herrenschmidt | struct mad_common common;
|
152 | 6e270446 | Ben Herrenschmidt | uint64_t buffer; |
153 | 6e270446 | Ben Herrenschmidt | }; |
154 | 6e270446 | Ben Herrenschmidt | |
155 | 6e270446 | Ben Herrenschmidt | struct viosrp_host_config {
|
156 | 6e270446 | Ben Herrenschmidt | struct mad_common common;
|
157 | 6e270446 | Ben Herrenschmidt | uint64_t buffer; |
158 | 6e270446 | Ben Herrenschmidt | }; |
159 | 6e270446 | Ben Herrenschmidt | |
160 | 6e270446 | Ben Herrenschmidt | struct viosrp_fast_fail {
|
161 | 6e270446 | Ben Herrenschmidt | struct mad_common common;
|
162 | 6e270446 | Ben Herrenschmidt | }; |
163 | 6e270446 | Ben Herrenschmidt | |
164 | 6e270446 | Ben Herrenschmidt | struct viosrp_capabilities {
|
165 | 6e270446 | Ben Herrenschmidt | struct mad_common common;
|
166 | 6e270446 | Ben Herrenschmidt | uint64_t buffer; |
167 | 6e270446 | Ben Herrenschmidt | }; |
168 | 6e270446 | Ben Herrenschmidt | |
169 | 6e270446 | Ben Herrenschmidt | struct mad_capability_common {
|
170 | 6e270446 | Ben Herrenschmidt | uint32_t cap_type; |
171 | 6e270446 | Ben Herrenschmidt | uint16_t length; |
172 | 6e270446 | Ben Herrenschmidt | uint16_t server_support; |
173 | 6e270446 | Ben Herrenschmidt | }; |
174 | 6e270446 | Ben Herrenschmidt | |
175 | 6e270446 | Ben Herrenschmidt | struct mad_reserve_cap {
|
176 | 6e270446 | Ben Herrenschmidt | struct mad_capability_common common;
|
177 | 6e270446 | Ben Herrenschmidt | uint32_t type; |
178 | 6e270446 | Ben Herrenschmidt | }; |
179 | 6e270446 | Ben Herrenschmidt | |
180 | 6e270446 | Ben Herrenschmidt | struct mad_migration_cap {
|
181 | 6e270446 | Ben Herrenschmidt | struct mad_capability_common common;
|
182 | 6e270446 | Ben Herrenschmidt | uint32_t ecl; |
183 | 6e270446 | Ben Herrenschmidt | }; |
184 | 6e270446 | Ben Herrenschmidt | |
185 | 6e270446 | Ben Herrenschmidt | struct capabilities {
|
186 | 6e270446 | Ben Herrenschmidt | uint32_t flags; |
187 | 6e270446 | Ben Herrenschmidt | char name[SRP_MAX_LOC_LEN];
|
188 | 6e270446 | Ben Herrenschmidt | char loc[SRP_MAX_LOC_LEN];
|
189 | 6e270446 | Ben Herrenschmidt | struct mad_migration_cap migration;
|
190 | 6e270446 | Ben Herrenschmidt | struct mad_reserve_cap reserve;
|
191 | 6e270446 | Ben Herrenschmidt | }; |
192 | 6e270446 | Ben Herrenschmidt | |
193 | 6e270446 | Ben Herrenschmidt | union mad_iu {
|
194 | 6e270446 | Ben Herrenschmidt | struct viosrp_empty_iu empty_iu;
|
195 | 6e270446 | Ben Herrenschmidt | struct viosrp_error_log error_log;
|
196 | 6e270446 | Ben Herrenschmidt | struct viosrp_adapter_info adapter_info;
|
197 | 6e270446 | Ben Herrenschmidt | struct viosrp_host_config host_config;
|
198 | 6e270446 | Ben Herrenschmidt | struct viosrp_fast_fail fast_fail;
|
199 | 6e270446 | Ben Herrenschmidt | struct viosrp_capabilities capabilities;
|
200 | 6e270446 | Ben Herrenschmidt | }; |
201 | 6e270446 | Ben Herrenschmidt | |
202 | 6e270446 | Ben Herrenschmidt | union viosrp_iu {
|
203 | 6e270446 | Ben Herrenschmidt | union srp_iu srp;
|
204 | 6e270446 | Ben Herrenschmidt | union mad_iu mad;
|
205 | 6e270446 | Ben Herrenschmidt | }; |
206 | 6e270446 | Ben Herrenschmidt | |
207 | 6e270446 | Ben Herrenschmidt | struct mad_adapter_info_data {
|
208 | 6e270446 | Ben Herrenschmidt | char srp_version[8]; |
209 | 6e270446 | Ben Herrenschmidt | char partition_name[96]; |
210 | 6e270446 | Ben Herrenschmidt | uint32_t partition_number; |
211 | 6e270446 | Ben Herrenschmidt | uint32_t mad_version; |
212 | 6e270446 | Ben Herrenschmidt | uint32_t os_type; |
213 | 6e270446 | Ben Herrenschmidt | uint32_t port_max_txu[8]; /* per-port maximum transfer */ |
214 | 6e270446 | Ben Herrenschmidt | }; |
215 | 6e270446 | Ben Herrenschmidt | |
216 | 6e270446 | Ben Herrenschmidt | #endif |