xref: /openbmc/linux/arch/s390/include/asm/fcx.h (revision 1ac731c529cd4d6adbce134754b51ff7d822b145)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2c6557e7fSMartin Schwidefsky /*
3c6557e7fSMartin Schwidefsky  *  Functions for assembling fcx enabled I/O control blocks.
4c6557e7fSMartin Schwidefsky  *
5c6557e7fSMartin Schwidefsky  *    Copyright IBM Corp. 2008
6c6557e7fSMartin Schwidefsky  *    Author(s): Peter Oberparleiter <peter.oberparleiter@de.ibm.com>
7c6557e7fSMartin Schwidefsky  */
8c6557e7fSMartin Schwidefsky 
9c6557e7fSMartin Schwidefsky #ifndef _ASM_S390_FCX_H
1099ec1112SDaniel van Gerpen #define _ASM_S390_FCX_H
11c6557e7fSMartin Schwidefsky 
12c6557e7fSMartin Schwidefsky #include <linux/types.h>
13c6557e7fSMartin Schwidefsky 
14c6557e7fSMartin Schwidefsky #define TCW_FORMAT_DEFAULT		0
15c6557e7fSMartin Schwidefsky #define TCW_TIDAW_FORMAT_DEFAULT	0
168a80b108SPeter Oberparleiter #define TCW_FLAGS_INPUT_TIDA		(1 << (23 - 5))
178a80b108SPeter Oberparleiter #define TCW_FLAGS_TCCB_TIDA		(1 << (23 - 6))
188a80b108SPeter Oberparleiter #define TCW_FLAGS_OUTPUT_TIDA		(1 << (23 - 7))
19c6557e7fSMartin Schwidefsky #define TCW_FLAGS_TIDAW_FORMAT(x)	((x) & 3) << (23 - 9)
20c6557e7fSMartin Schwidefsky #define TCW_FLAGS_GET_TIDAW_FORMAT(x)	(((x) >> (23 - 9)) & 3)
21c6557e7fSMartin Schwidefsky 
22c6557e7fSMartin Schwidefsky /**
23c6557e7fSMartin Schwidefsky  * struct tcw - Transport Control Word (TCW)
24c6557e7fSMartin Schwidefsky  * @format: TCW format
25c6557e7fSMartin Schwidefsky  * @flags: TCW flags
26c6557e7fSMartin Schwidefsky  * @tccbl: Transport-Command-Control-Block Length
27c6557e7fSMartin Schwidefsky  * @r: Read Operations
28c6557e7fSMartin Schwidefsky  * @w: Write Operations
29c6557e7fSMartin Schwidefsky  * @output: Output-Data Address
30c6557e7fSMartin Schwidefsky  * @input: Input-Data Address
31c6557e7fSMartin Schwidefsky  * @tsb: Transport-Status-Block Address
32c6557e7fSMartin Schwidefsky  * @tccb: Transport-Command-Control-Block Address
33c6557e7fSMartin Schwidefsky  * @output_count: Output Count
34c6557e7fSMartin Schwidefsky  * @input_count: Input Count
35c6557e7fSMartin Schwidefsky  * @intrg: Interrogate TCW Address
36c6557e7fSMartin Schwidefsky  */
37c6557e7fSMartin Schwidefsky struct tcw {
38c6557e7fSMartin Schwidefsky 	u32 format:2;
39c6557e7fSMartin Schwidefsky 	u32 :6;
40c6557e7fSMartin Schwidefsky 	u32 flags:24;
41c6557e7fSMartin Schwidefsky 	u32 :8;
42c6557e7fSMartin Schwidefsky 	u32 tccbl:6;
43c6557e7fSMartin Schwidefsky 	u32 r:1;
44c6557e7fSMartin Schwidefsky 	u32 w:1;
45c6557e7fSMartin Schwidefsky 	u32 :16;
46c6557e7fSMartin Schwidefsky 	u64 output;
47c6557e7fSMartin Schwidefsky 	u64 input;
48c6557e7fSMartin Schwidefsky 	u64 tsb;
49c6557e7fSMartin Schwidefsky 	u64 tccb;
50c6557e7fSMartin Schwidefsky 	u32 output_count;
51c6557e7fSMartin Schwidefsky 	u32 input_count;
52c6557e7fSMartin Schwidefsky 	u32 :32;
53c6557e7fSMartin Schwidefsky 	u32 :32;
54c6557e7fSMartin Schwidefsky 	u32 :32;
55c6557e7fSMartin Schwidefsky 	u32 intrg;
56c6557e7fSMartin Schwidefsky } __attribute__ ((packed, aligned(64)));
57c6557e7fSMartin Schwidefsky 
588a80b108SPeter Oberparleiter #define TIDAW_FLAGS_LAST		(1 << (7 - 0))
598a80b108SPeter Oberparleiter #define TIDAW_FLAGS_SKIP		(1 << (7 - 1))
608a80b108SPeter Oberparleiter #define TIDAW_FLAGS_DATA_INT		(1 << (7 - 2))
618a80b108SPeter Oberparleiter #define TIDAW_FLAGS_TTIC		(1 << (7 - 3))
628a80b108SPeter Oberparleiter #define TIDAW_FLAGS_INSERT_CBC		(1 << (7 - 4))
63c6557e7fSMartin Schwidefsky 
64c6557e7fSMartin Schwidefsky /**
65c6557e7fSMartin Schwidefsky  * struct tidaw - Transport-Indirect-Addressing Word (TIDAW)
66c6557e7fSMartin Schwidefsky  * @flags: TIDAW flags. Can be an arithmetic OR of the following constants:
67c6557e7fSMartin Schwidefsky  * %TIDAW_FLAGS_LAST, %TIDAW_FLAGS_SKIP, %TIDAW_FLAGS_DATA_INT,
68c6557e7fSMartin Schwidefsky  * %TIDAW_FLAGS_TTIC, %TIDAW_FLAGS_INSERT_CBC
69c6557e7fSMartin Schwidefsky  * @count: Count
70c6557e7fSMartin Schwidefsky  * @addr: Address
71c6557e7fSMartin Schwidefsky  */
72c6557e7fSMartin Schwidefsky struct tidaw {
73c6557e7fSMartin Schwidefsky 	u32 flags:8;
74c6557e7fSMartin Schwidefsky 	u32 :24;
75c6557e7fSMartin Schwidefsky 	u32 count;
76c6557e7fSMartin Schwidefsky 	u64 addr;
77c6557e7fSMartin Schwidefsky } __attribute__ ((packed, aligned(16)));
78c6557e7fSMartin Schwidefsky 
79c6557e7fSMartin Schwidefsky /**
80c6557e7fSMartin Schwidefsky  * struct tsa_iostat - I/O-Status Transport-Status Area (IO-Stat TSA)
81c6557e7fSMartin Schwidefsky  * @dev_time: Device Time
82c6557e7fSMartin Schwidefsky  * @def_time: Defer Time
83c6557e7fSMartin Schwidefsky  * @queue_time: Queue Time
84c6557e7fSMartin Schwidefsky  * @dev_busy_time: Device-Busy Time
85c6557e7fSMartin Schwidefsky  * @dev_act_time: Device-Active-Only Time
86c6557e7fSMartin Schwidefsky  * @sense: Sense Data (if present)
87c6557e7fSMartin Schwidefsky  */
88c6557e7fSMartin Schwidefsky struct tsa_iostat {
89c6557e7fSMartin Schwidefsky 	u32 dev_time;
90c6557e7fSMartin Schwidefsky 	u32 def_time;
91c6557e7fSMartin Schwidefsky 	u32 queue_time;
92c6557e7fSMartin Schwidefsky 	u32 dev_busy_time;
93c6557e7fSMartin Schwidefsky 	u32 dev_act_time;
94c6557e7fSMartin Schwidefsky 	u8 sense[32];
95c6557e7fSMartin Schwidefsky } __attribute__ ((packed));
96c6557e7fSMartin Schwidefsky 
97c6557e7fSMartin Schwidefsky /**
98c6557e7fSMartin Schwidefsky  * struct tsa_ddpcs - Device-Detected-Program-Check Transport-Status Area (DDPC TSA)
99c6557e7fSMartin Schwidefsky  * @rc: Reason Code
100c6557e7fSMartin Schwidefsky  * @rcq: Reason Code Qualifier
101c6557e7fSMartin Schwidefsky  * @sense: Sense Data (if present)
102c6557e7fSMartin Schwidefsky  */
103c6557e7fSMartin Schwidefsky struct tsa_ddpc {
104c6557e7fSMartin Schwidefsky 	u32 :24;
105c6557e7fSMartin Schwidefsky 	u32 rc:8;
106c6557e7fSMartin Schwidefsky 	u8 rcq[16];
107c6557e7fSMartin Schwidefsky 	u8 sense[32];
108c6557e7fSMartin Schwidefsky } __attribute__ ((packed));
109c6557e7fSMartin Schwidefsky 
1108a80b108SPeter Oberparleiter #define TSA_INTRG_FLAGS_CU_STATE_VALID		(1 << (7 - 0))
1118a80b108SPeter Oberparleiter #define TSA_INTRG_FLAGS_DEV_STATE_VALID		(1 << (7 - 1))
1128a80b108SPeter Oberparleiter #define TSA_INTRG_FLAGS_OP_STATE_VALID		(1 << (7 - 2))
113c6557e7fSMartin Schwidefsky 
114c6557e7fSMartin Schwidefsky /**
115c6557e7fSMartin Schwidefsky  * struct tsa_intrg - Interrogate Transport-Status Area (Intrg. TSA)
116c6557e7fSMartin Schwidefsky  * @format: Format
117c6557e7fSMartin Schwidefsky  * @flags: Flags. Can be an arithmetic OR of the following constants:
118c6557e7fSMartin Schwidefsky  * %TSA_INTRG_FLAGS_CU_STATE_VALID, %TSA_INTRG_FLAGS_DEV_STATE_VALID,
119c6557e7fSMartin Schwidefsky  * %TSA_INTRG_FLAGS_OP_STATE_VALID
120c6557e7fSMartin Schwidefsky  * @cu_state: Controle-Unit State
121c6557e7fSMartin Schwidefsky  * @dev_state: Device State
122c6557e7fSMartin Schwidefsky  * @op_state: Operation State
123c6557e7fSMartin Schwidefsky  * @sd_info: State-Dependent Information
124c6557e7fSMartin Schwidefsky  * @dl_id: Device-Level Identifier
125c6557e7fSMartin Schwidefsky  * @dd_data: Device-Dependent Data
126c6557e7fSMartin Schwidefsky  */
127c6557e7fSMartin Schwidefsky struct tsa_intrg {
128c6557e7fSMartin Schwidefsky 	u32 format:8;
129c6557e7fSMartin Schwidefsky 	u32 flags:8;
130c6557e7fSMartin Schwidefsky 	u32 cu_state:8;
131c6557e7fSMartin Schwidefsky 	u32 dev_state:8;
132c6557e7fSMartin Schwidefsky 	u32 op_state:8;
133c6557e7fSMartin Schwidefsky 	u32 :24;
134c6557e7fSMartin Schwidefsky 	u8 sd_info[12];
135c6557e7fSMartin Schwidefsky 	u32 dl_id;
136c6557e7fSMartin Schwidefsky 	u8 dd_data[28];
137c6557e7fSMartin Schwidefsky } __attribute__ ((packed));
138c6557e7fSMartin Schwidefsky 
139c6557e7fSMartin Schwidefsky #define TSB_FORMAT_NONE		0
140c6557e7fSMartin Schwidefsky #define TSB_FORMAT_IOSTAT	1
141c6557e7fSMartin Schwidefsky #define TSB_FORMAT_DDPC		2
142c6557e7fSMartin Schwidefsky #define TSB_FORMAT_INTRG	3
143c6557e7fSMartin Schwidefsky 
1448a80b108SPeter Oberparleiter #define TSB_FLAGS_DCW_OFFSET_VALID	(1 << (7 - 0))
1458a80b108SPeter Oberparleiter #define TSB_FLAGS_COUNT_VALID		(1 << (7 - 1))
1468a80b108SPeter Oberparleiter #define TSB_FLAGS_CACHE_MISS		(1 << (7 - 2))
1478a80b108SPeter Oberparleiter #define TSB_FLAGS_TIME_VALID		(1 << (7 - 3))
148c6557e7fSMartin Schwidefsky #define TSB_FLAGS_FORMAT(x)		((x) & 7)
149c6557e7fSMartin Schwidefsky #define TSB_FORMAT(t)			((t)->flags & 7)
150c6557e7fSMartin Schwidefsky 
151c6557e7fSMartin Schwidefsky /**
152c6557e7fSMartin Schwidefsky  * struct tsb - Transport-Status Block (TSB)
153c6557e7fSMartin Schwidefsky  * @length: Length
154c6557e7fSMartin Schwidefsky  * @flags: Flags. Can be an arithmetic OR of the following constants:
155c6557e7fSMartin Schwidefsky  * %TSB_FLAGS_DCW_OFFSET_VALID, %TSB_FLAGS_COUNT_VALID, %TSB_FLAGS_CACHE_MISS,
156c6557e7fSMartin Schwidefsky  * %TSB_FLAGS_TIME_VALID
157c6557e7fSMartin Schwidefsky  * @dcw_offset: DCW Offset
158c6557e7fSMartin Schwidefsky  * @count: Count
159c6557e7fSMartin Schwidefsky  * @tsa: Transport-Status-Area
160c6557e7fSMartin Schwidefsky  */
161c6557e7fSMartin Schwidefsky struct tsb {
162c6557e7fSMartin Schwidefsky 	u32 length:8;
163c6557e7fSMartin Schwidefsky 	u32 flags:8;
164c6557e7fSMartin Schwidefsky 	u32 dcw_offset:16;
165c6557e7fSMartin Schwidefsky 	u32 count;
166c6557e7fSMartin Schwidefsky 	u32 :32;
167c6557e7fSMartin Schwidefsky 	union {
168c6557e7fSMartin Schwidefsky 		struct tsa_iostat iostat;
169c6557e7fSMartin Schwidefsky 		struct tsa_ddpc ddpc;
170c6557e7fSMartin Schwidefsky 		struct tsa_intrg intrg;
171c6557e7fSMartin Schwidefsky 	} __attribute__ ((packed)) tsa;
172c6557e7fSMartin Schwidefsky } __attribute__ ((packed, aligned(8)));
173c6557e7fSMartin Schwidefsky 
174c6557e7fSMartin Schwidefsky #define DCW_INTRG_FORMAT_DEFAULT	0
175c6557e7fSMartin Schwidefsky 
176c6557e7fSMartin Schwidefsky #define DCW_INTRG_RC_UNSPECIFIED	0
177c6557e7fSMartin Schwidefsky #define DCW_INTRG_RC_TIMEOUT		1
178c6557e7fSMartin Schwidefsky 
179c6557e7fSMartin Schwidefsky #define DCW_INTRG_RCQ_UNSPECIFIED	0
180c6557e7fSMartin Schwidefsky #define DCW_INTRG_RCQ_PRIMARY		1
181c6557e7fSMartin Schwidefsky #define DCW_INTRG_RCQ_SECONDARY		2
182c6557e7fSMartin Schwidefsky 
1838a80b108SPeter Oberparleiter #define DCW_INTRG_FLAGS_MPM		(1 << (7 - 0))
1848a80b108SPeter Oberparleiter #define DCW_INTRG_FLAGS_PPR		(1 << (7 - 1))
1858a80b108SPeter Oberparleiter #define DCW_INTRG_FLAGS_CRIT		(1 << (7 - 2))
186c6557e7fSMartin Schwidefsky 
187c6557e7fSMartin Schwidefsky /**
188c6557e7fSMartin Schwidefsky  * struct dcw_intrg_data - Interrogate DCW data
189c6557e7fSMartin Schwidefsky  * @format: Format. Should be %DCW_INTRG_FORMAT_DEFAULT
190c6557e7fSMartin Schwidefsky  * @rc: Reason Code. Can be one of %DCW_INTRG_RC_UNSPECIFIED,
191c6557e7fSMartin Schwidefsky  * %DCW_INTRG_RC_TIMEOUT
192c6557e7fSMartin Schwidefsky  * @rcq: Reason Code Qualifier: Can be one of %DCW_INTRG_RCQ_UNSPECIFIED,
193c6557e7fSMartin Schwidefsky  * %DCW_INTRG_RCQ_PRIMARY, %DCW_INTRG_RCQ_SECONDARY
194c6557e7fSMartin Schwidefsky  * @lpm: Logical-Path Mask
195c6557e7fSMartin Schwidefsky  * @pam: Path-Available Mask
196c6557e7fSMartin Schwidefsky  * @pim: Path-Installed Mask
197c6557e7fSMartin Schwidefsky  * @timeout: Timeout
198c6557e7fSMartin Schwidefsky  * @flags: Flags. Can be an arithmetic OR of %DCW_INTRG_FLAGS_MPM,
199c6557e7fSMartin Schwidefsky  * %DCW_INTRG_FLAGS_PPR, %DCW_INTRG_FLAGS_CRIT
200c6557e7fSMartin Schwidefsky  * @time: Time
201c6557e7fSMartin Schwidefsky  * @prog_id: Program Identifier
202c6557e7fSMartin Schwidefsky  * @prog_data: Program-Dependent Data
203c6557e7fSMartin Schwidefsky  */
204c6557e7fSMartin Schwidefsky struct dcw_intrg_data {
205c6557e7fSMartin Schwidefsky 	u32 format:8;
206c6557e7fSMartin Schwidefsky 	u32 rc:8;
207c6557e7fSMartin Schwidefsky 	u32 rcq:8;
208c6557e7fSMartin Schwidefsky 	u32 lpm:8;
209c6557e7fSMartin Schwidefsky 	u32 pam:8;
210c6557e7fSMartin Schwidefsky 	u32 pim:8;
211c6557e7fSMartin Schwidefsky 	u32 timeout:16;
212c6557e7fSMartin Schwidefsky 	u32 flags:8;
213c6557e7fSMartin Schwidefsky 	u32 :24;
214c6557e7fSMartin Schwidefsky 	u32 :32;
215c6557e7fSMartin Schwidefsky 	u64 time;
216c6557e7fSMartin Schwidefsky 	u64 prog_id;
2175224f790SGustavo A. R. Silva 	u8  prog_data[];
218c6557e7fSMartin Schwidefsky } __attribute__ ((packed));
219c6557e7fSMartin Schwidefsky 
2208a80b108SPeter Oberparleiter #define DCW_FLAGS_CC		(1 << (7 - 1))
221c6557e7fSMartin Schwidefsky 
222c6557e7fSMartin Schwidefsky #define DCW_CMD_WRITE		0x01
223c6557e7fSMartin Schwidefsky #define DCW_CMD_READ		0x02
224c6557e7fSMartin Schwidefsky #define DCW_CMD_CONTROL		0x03
225c6557e7fSMartin Schwidefsky #define DCW_CMD_SENSE		0x04
226c6557e7fSMartin Schwidefsky #define DCW_CMD_SENSE_ID	0xe4
227c6557e7fSMartin Schwidefsky #define DCW_CMD_INTRG		0x40
228c6557e7fSMartin Schwidefsky 
229c6557e7fSMartin Schwidefsky /**
230c6557e7fSMartin Schwidefsky  * struct dcw - Device-Command Word (DCW)
231c6557e7fSMartin Schwidefsky  * @cmd: Command Code. Can be one of %DCW_CMD_WRITE, %DCW_CMD_READ,
232c6557e7fSMartin Schwidefsky  * %DCW_CMD_CONTROL, %DCW_CMD_SENSE, %DCW_CMD_SENSE_ID, %DCW_CMD_INTRG
233c6557e7fSMartin Schwidefsky  * @flags: Flags. Can be an arithmetic OR of %DCW_FLAGS_CC
234c6557e7fSMartin Schwidefsky  * @cd_count: Control-Data Count
235c6557e7fSMartin Schwidefsky  * @count: Count
236c6557e7fSMartin Schwidefsky  * @cd: Control Data
237c6557e7fSMartin Schwidefsky  */
238c6557e7fSMartin Schwidefsky struct dcw {
239c6557e7fSMartin Schwidefsky 	u32 cmd:8;
240c6557e7fSMartin Schwidefsky 	u32 flags:8;
241c6557e7fSMartin Schwidefsky 	u32 :8;
242c6557e7fSMartin Schwidefsky 	u32 cd_count:8;
243c6557e7fSMartin Schwidefsky 	u32 count;
2445224f790SGustavo A. R. Silva 	u8 cd[];
245c6557e7fSMartin Schwidefsky } __attribute__ ((packed));
246c6557e7fSMartin Schwidefsky 
247c6557e7fSMartin Schwidefsky #define TCCB_FORMAT_DEFAULT	0x7f
248c6557e7fSMartin Schwidefsky #define TCCB_MAX_DCW		30
249c6557e7fSMartin Schwidefsky #define TCCB_MAX_SIZE		(sizeof(struct tccb_tcah) + \
250c6557e7fSMartin Schwidefsky 				 TCCB_MAX_DCW * sizeof(struct dcw) + \
251c6557e7fSMartin Schwidefsky 				 sizeof(struct tccb_tcat))
252d7b60489SPeter Oberparleiter #define TCCB_SAC_DEFAULT	0x1ffe
253d7b60489SPeter Oberparleiter #define TCCB_SAC_INTRG		0x1fff
254c6557e7fSMartin Schwidefsky 
255c6557e7fSMartin Schwidefsky /**
256c6557e7fSMartin Schwidefsky  * struct tccb_tcah - Transport-Command-Area Header (TCAH)
257c6557e7fSMartin Schwidefsky  * @format: Format. Should be %TCCB_FORMAT_DEFAULT
258c6557e7fSMartin Schwidefsky  * @tcal: Transport-Command-Area Length
259c6557e7fSMartin Schwidefsky  * @sac: Service-Action Code. Can be one of %TCCB_SAC_DEFAULT, %TCCB_SAC_INTRG
260c6557e7fSMartin Schwidefsky  * @prio: Priority
261c6557e7fSMartin Schwidefsky  */
262c6557e7fSMartin Schwidefsky struct tccb_tcah {
263c6557e7fSMartin Schwidefsky 	u32 format:8;
264c6557e7fSMartin Schwidefsky 	u32 :24;
265c6557e7fSMartin Schwidefsky 	u32 :24;
266c6557e7fSMartin Schwidefsky 	u32 tcal:8;
267c6557e7fSMartin Schwidefsky 	u32 sac:16;
268c6557e7fSMartin Schwidefsky 	u32 :8;
269c6557e7fSMartin Schwidefsky 	u32 prio:8;
270c6557e7fSMartin Schwidefsky 	u32 :32;
271c6557e7fSMartin Schwidefsky } __attribute__ ((packed));
272c6557e7fSMartin Schwidefsky 
273c6557e7fSMartin Schwidefsky /**
274c6557e7fSMartin Schwidefsky  * struct tccb_tcat - Transport-Command-Area Trailer (TCAT)
275c6557e7fSMartin Schwidefsky  * @count: Transport Count
276c6557e7fSMartin Schwidefsky  */
277c6557e7fSMartin Schwidefsky struct tccb_tcat {
278c6557e7fSMartin Schwidefsky 	u32 :32;
279c6557e7fSMartin Schwidefsky 	u32 count;
280c6557e7fSMartin Schwidefsky } __attribute__ ((packed));
281c6557e7fSMartin Schwidefsky 
282c6557e7fSMartin Schwidefsky /**
283c6557e7fSMartin Schwidefsky  * struct tccb - (partial) Transport-Command-Control Block (TCCB)
284c6557e7fSMartin Schwidefsky  * @tcah: TCAH
285c6557e7fSMartin Schwidefsky  * @tca: Transport-Command Area
286c6557e7fSMartin Schwidefsky  */
287c6557e7fSMartin Schwidefsky struct tccb {
288c6557e7fSMartin Schwidefsky 	struct tccb_tcah tcah;
289*6ca87bc4SGustavo A. R. Silva 	u8 tca[];
290c6557e7fSMartin Schwidefsky } __attribute__ ((packed, aligned(8)));
291c6557e7fSMartin Schwidefsky 
292c6557e7fSMartin Schwidefsky struct tcw *tcw_get_intrg(struct tcw *tcw);
293c6557e7fSMartin Schwidefsky void *tcw_get_data(struct tcw *tcw);
294c6557e7fSMartin Schwidefsky struct tccb *tcw_get_tccb(struct tcw *tcw);
295c6557e7fSMartin Schwidefsky struct tsb *tcw_get_tsb(struct tcw *tcw);
296c6557e7fSMartin Schwidefsky 
297c6557e7fSMartin Schwidefsky void tcw_init(struct tcw *tcw, int r, int w);
298c6557e7fSMartin Schwidefsky void tcw_finalize(struct tcw *tcw, int num_tidaws);
299c6557e7fSMartin Schwidefsky 
300c6557e7fSMartin Schwidefsky void tcw_set_intrg(struct tcw *tcw, struct tcw *intrg_tcw);
301c6557e7fSMartin Schwidefsky void tcw_set_data(struct tcw *tcw, void *data, int use_tidal);
302c6557e7fSMartin Schwidefsky void tcw_set_tccb(struct tcw *tcw, struct tccb *tccb);
303c6557e7fSMartin Schwidefsky void tcw_set_tsb(struct tcw *tcw, struct tsb *tsb);
304c6557e7fSMartin Schwidefsky 
305c6557e7fSMartin Schwidefsky void tccb_init(struct tccb *tccb, size_t tccb_size, u32 sac);
306c6557e7fSMartin Schwidefsky void tsb_init(struct tsb *tsb);
307c6557e7fSMartin Schwidefsky struct dcw *tccb_add_dcw(struct tccb *tccb, size_t tccb_size, u8 cmd, u8 flags,
308c6557e7fSMartin Schwidefsky 			 void *cd, u8 cd_count, u32 count);
309c6557e7fSMartin Schwidefsky struct tidaw *tcw_add_tidaw(struct tcw *tcw, int num_tidaws, u8 flags,
310c6557e7fSMartin Schwidefsky 			    void *addr, u32 count);
311c6557e7fSMartin Schwidefsky 
312c6557e7fSMartin Schwidefsky #endif /* _ASM_S390_FCX_H */
313