diff options
author | Jan Glauber <jang@linux.vnet.ibm.com> | 2011-06-06 08:14:40 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2011-06-06 08:14:56 -0400 |
commit | 3ec90878bade9280dee87c9e27d759f1cee07e70 (patch) | |
tree | 54f07b9d840ee98e78370b8843374f317fa6f8c8 /arch | |
parent | 9950f8be3f379e36be73be958ec5cf6c15eac0b2 (diff) |
[S390] qdio: Split SBAL entry flags
The qdio SBAL entry flag is made-up of four different values that are
independent of one another. Some of the bits are reserved by the
hardware and should not be changed by qdio. Currently all four values
are overwritten since the SBAL entry flag is defined as an u32.
Split the SBAL entry flag into four u8's as defined by the hardware
and don't touch the reserved bits.
Signed-off-by: Jan Glauber <jang@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/s390/include/asm/qdio.h | 119 |
1 files changed, 28 insertions, 91 deletions
diff --git a/arch/s390/include/asm/qdio.h b/arch/s390/include/asm/qdio.h index 350e7ee5952d..15c97625df8d 100644 --- a/arch/s390/include/asm/qdio.h +++ b/arch/s390/include/asm/qdio.h | |||
@@ -139,110 +139,47 @@ struct slib { | |||
139 | struct slibe slibe[QDIO_MAX_BUFFERS_PER_Q]; | 139 | struct slibe slibe[QDIO_MAX_BUFFERS_PER_Q]; |
140 | } __attribute__ ((packed, aligned(2048))); | 140 | } __attribute__ ((packed, aligned(2048))); |
141 | 141 | ||
142 | /** | 142 | #define SBAL_EFLAGS_LAST_ENTRY 0x40 |
143 | * struct sbal_flags - storage block address list flags | 143 | #define SBAL_EFLAGS_CONTIGUOUS 0x20 |
144 | * @last: last entry | 144 | #define SBAL_EFLAGS_FIRST_FRAG 0x04 |
145 | * @cont: contiguous storage | 145 | #define SBAL_EFLAGS_MIDDLE_FRAG 0x08 |
146 | * @frag: fragmentation | 146 | #define SBAL_EFLAGS_LAST_FRAG 0x0c |
147 | */ | 147 | #define SBAL_EFLAGS_MASK 0x6f |
148 | struct sbal_flags { | ||
149 | u8 : 1; | ||
150 | u8 last : 1; | ||
151 | u8 cont : 1; | ||
152 | u8 : 1; | ||
153 | u8 frag : 2; | ||
154 | u8 : 2; | ||
155 | } __attribute__ ((packed)); | ||
156 | |||
157 | #define SBAL_FLAGS_FIRST_FRAG 0x04000000UL | ||
158 | #define SBAL_FLAGS_MIDDLE_FRAG 0x08000000UL | ||
159 | #define SBAL_FLAGS_LAST_FRAG 0x0c000000UL | ||
160 | #define SBAL_FLAGS_LAST_ENTRY 0x40000000UL | ||
161 | #define SBAL_FLAGS_CONTIGUOUS 0x20000000UL | ||
162 | 148 | ||
163 | #define SBAL_FLAGS0_DATA_CONTINUATION 0x20UL | 149 | #define SBAL_SFLAGS0_PCI_REQ 0x40 |
150 | #define SBAL_SFLAGS0_DATA_CONTINUATION 0x20 | ||
164 | 151 | ||
165 | /* Awesome OpenFCP extensions */ | 152 | /* Awesome OpenFCP extensions */ |
166 | #define SBAL_FLAGS0_TYPE_STATUS 0x00UL | 153 | #define SBAL_SFLAGS0_TYPE_STATUS 0x00 |
167 | #define SBAL_FLAGS0_TYPE_WRITE 0x08UL | 154 | #define SBAL_SFLAGS0_TYPE_WRITE 0x08 |
168 | #define SBAL_FLAGS0_TYPE_READ 0x10UL | 155 | #define SBAL_SFLAGS0_TYPE_READ 0x10 |
169 | #define SBAL_FLAGS0_TYPE_WRITE_READ 0x18UL | 156 | #define SBAL_SFLAGS0_TYPE_WRITE_READ 0x18 |
170 | #define SBAL_FLAGS0_MORE_SBALS 0x04UL | 157 | #define SBAL_SFLAGS0_MORE_SBALS 0x04 |
171 | #define SBAL_FLAGS0_COMMAND 0x02UL | 158 | #define SBAL_SFLAGS0_COMMAND 0x02 |
172 | #define SBAL_FLAGS0_LAST_SBAL 0x00UL | 159 | #define SBAL_SFLAGS0_LAST_SBAL 0x00 |
173 | #define SBAL_FLAGS0_ONLY_SBAL SBAL_FLAGS0_COMMAND | 160 | #define SBAL_SFLAGS0_ONLY_SBAL SBAL_SFLAGS0_COMMAND |
174 | #define SBAL_FLAGS0_MIDDLE_SBAL SBAL_FLAGS0_MORE_SBALS | 161 | #define SBAL_SFLAGS0_MIDDLE_SBAL SBAL_SFLAGS0_MORE_SBALS |
175 | #define SBAL_FLAGS0_FIRST_SBAL SBAL_FLAGS0_MORE_SBALS | SBAL_FLAGS0_COMMAND | 162 | #define SBAL_SFLAGS0_FIRST_SBAL (SBAL_SFLAGS0_MORE_SBALS | SBAL_SFLAGS0_COMMAND) |
176 | #define SBAL_FLAGS0_PCI 0x40 | ||
177 | |||
178 | /** | ||
179 | * struct sbal_sbalf_0 - sbal flags for sbale 0 | ||
180 | * @pci: PCI indicator | ||
181 | * @cont: data continuation | ||
182 | * @sbtype: storage-block type (FCP) | ||
183 | */ | ||
184 | struct sbal_sbalf_0 { | ||
185 | u8 : 1; | ||
186 | u8 pci : 1; | ||
187 | u8 cont : 1; | ||
188 | u8 sbtype : 2; | ||
189 | u8 : 3; | ||
190 | } __attribute__ ((packed)); | ||
191 | |||
192 | /** | ||
193 | * struct sbal_sbalf_1 - sbal flags for sbale 1 | ||
194 | * @key: storage key | ||
195 | */ | ||
196 | struct sbal_sbalf_1 { | ||
197 | u8 : 4; | ||
198 | u8 key : 4; | ||
199 | } __attribute__ ((packed)); | ||
200 | |||
201 | /** | ||
202 | * struct sbal_sbalf_14 - sbal flags for sbale 14 | ||
203 | * @erridx: error index | ||
204 | */ | ||
205 | struct sbal_sbalf_14 { | ||
206 | u8 : 4; | ||
207 | u8 erridx : 4; | ||
208 | } __attribute__ ((packed)); | ||
209 | |||
210 | /** | ||
211 | * struct sbal_sbalf_15 - sbal flags for sbale 15 | ||
212 | * @reason: reason for error state | ||
213 | */ | ||
214 | struct sbal_sbalf_15 { | ||
215 | u8 reason; | ||
216 | } __attribute__ ((packed)); | ||
217 | |||
218 | /** | ||
219 | * union sbal_sbalf - storage block address list flags | ||
220 | * @i0: sbalf0 | ||
221 | * @i1: sbalf1 | ||
222 | * @i14: sbalf14 | ||
223 | * @i15: sblaf15 | ||
224 | * @value: raw value | ||
225 | */ | ||
226 | union sbal_sbalf { | ||
227 | struct sbal_sbalf_0 i0; | ||
228 | struct sbal_sbalf_1 i1; | ||
229 | struct sbal_sbalf_14 i14; | ||
230 | struct sbal_sbalf_15 i15; | ||
231 | u8 value; | ||
232 | }; | ||
233 | 163 | ||
234 | /** | 164 | /** |
235 | * struct qdio_buffer_element - SBAL entry | 165 | * struct qdio_buffer_element - SBAL entry |
236 | * @flags: flags | 166 | * @eflags: SBAL entry flags |
167 | * @scount: SBAL count | ||
168 | * @sflags: whole SBAL flags | ||
237 | * @length: length | 169 | * @length: length |
238 | * @addr: address | 170 | * @addr: address |
239 | */ | 171 | */ |
240 | struct qdio_buffer_element { | 172 | struct qdio_buffer_element { |
241 | u32 flags; | 173 | u8 eflags; |
174 | /* private: */ | ||
175 | u8 res1; | ||
176 | /* public: */ | ||
177 | u8 scount; | ||
178 | u8 sflags; | ||
242 | u32 length; | 179 | u32 length; |
243 | #ifdef CONFIG_32BIT | 180 | #ifdef CONFIG_32BIT |
244 | /* private: */ | 181 | /* private: */ |
245 | void *reserved; | 182 | void *res2; |
246 | /* public: */ | 183 | /* public: */ |
247 | #endif | 184 | #endif |
248 | void *addr; | 185 | void *addr; |