18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci *  Functions for assembling fcx enabled I/O control blocks.
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci *    Copyright IBM Corp. 2008
68c2ecf20Sopenharmony_ci *    Author(s): Peter Oberparleiter <peter.oberparleiter@de.ibm.com>
78c2ecf20Sopenharmony_ci */
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci#ifndef _ASM_S390_FCX_H
108c2ecf20Sopenharmony_ci#define _ASM_S390_FCX_H
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci#include <linux/types.h>
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ci#define TCW_FORMAT_DEFAULT		0
158c2ecf20Sopenharmony_ci#define TCW_TIDAW_FORMAT_DEFAULT	0
168c2ecf20Sopenharmony_ci#define TCW_FLAGS_INPUT_TIDA		(1 << (23 - 5))
178c2ecf20Sopenharmony_ci#define TCW_FLAGS_TCCB_TIDA		(1 << (23 - 6))
188c2ecf20Sopenharmony_ci#define TCW_FLAGS_OUTPUT_TIDA		(1 << (23 - 7))
198c2ecf20Sopenharmony_ci#define TCW_FLAGS_TIDAW_FORMAT(x)	((x) & 3) << (23 - 9)
208c2ecf20Sopenharmony_ci#define TCW_FLAGS_GET_TIDAW_FORMAT(x)	(((x) >> (23 - 9)) & 3)
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci/**
238c2ecf20Sopenharmony_ci * struct tcw - Transport Control Word (TCW)
248c2ecf20Sopenharmony_ci * @format: TCW format
258c2ecf20Sopenharmony_ci * @flags: TCW flags
268c2ecf20Sopenharmony_ci * @tccbl: Transport-Command-Control-Block Length
278c2ecf20Sopenharmony_ci * @r: Read Operations
288c2ecf20Sopenharmony_ci * @w: Write Operations
298c2ecf20Sopenharmony_ci * @output: Output-Data Address
308c2ecf20Sopenharmony_ci * @input: Input-Data Address
318c2ecf20Sopenharmony_ci * @tsb: Transport-Status-Block Address
328c2ecf20Sopenharmony_ci * @tccb: Transport-Command-Control-Block Address
338c2ecf20Sopenharmony_ci * @output_count: Output Count
348c2ecf20Sopenharmony_ci * @input_count: Input Count
358c2ecf20Sopenharmony_ci * @intrg: Interrogate TCW Address
368c2ecf20Sopenharmony_ci */
378c2ecf20Sopenharmony_cistruct tcw {
388c2ecf20Sopenharmony_ci	u32 format:2;
398c2ecf20Sopenharmony_ci	u32 :6;
408c2ecf20Sopenharmony_ci	u32 flags:24;
418c2ecf20Sopenharmony_ci	u32 :8;
428c2ecf20Sopenharmony_ci	u32 tccbl:6;
438c2ecf20Sopenharmony_ci	u32 r:1;
448c2ecf20Sopenharmony_ci	u32 w:1;
458c2ecf20Sopenharmony_ci	u32 :16;
468c2ecf20Sopenharmony_ci	u64 output;
478c2ecf20Sopenharmony_ci	u64 input;
488c2ecf20Sopenharmony_ci	u64 tsb;
498c2ecf20Sopenharmony_ci	u64 tccb;
508c2ecf20Sopenharmony_ci	u32 output_count;
518c2ecf20Sopenharmony_ci	u32 input_count;
528c2ecf20Sopenharmony_ci	u32 :32;
538c2ecf20Sopenharmony_ci	u32 :32;
548c2ecf20Sopenharmony_ci	u32 :32;
558c2ecf20Sopenharmony_ci	u32 intrg;
568c2ecf20Sopenharmony_ci} __attribute__ ((packed, aligned(64)));
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_ci#define TIDAW_FLAGS_LAST		(1 << (7 - 0))
598c2ecf20Sopenharmony_ci#define TIDAW_FLAGS_SKIP		(1 << (7 - 1))
608c2ecf20Sopenharmony_ci#define TIDAW_FLAGS_DATA_INT		(1 << (7 - 2))
618c2ecf20Sopenharmony_ci#define TIDAW_FLAGS_TTIC		(1 << (7 - 3))
628c2ecf20Sopenharmony_ci#define TIDAW_FLAGS_INSERT_CBC		(1 << (7 - 4))
638c2ecf20Sopenharmony_ci
648c2ecf20Sopenharmony_ci/**
658c2ecf20Sopenharmony_ci * struct tidaw - Transport-Indirect-Addressing Word (TIDAW)
668c2ecf20Sopenharmony_ci * @flags: TIDAW flags. Can be an arithmetic OR of the following constants:
678c2ecf20Sopenharmony_ci * %TIDAW_FLAGS_LAST, %TIDAW_FLAGS_SKIP, %TIDAW_FLAGS_DATA_INT,
688c2ecf20Sopenharmony_ci * %TIDAW_FLAGS_TTIC, %TIDAW_FLAGS_INSERT_CBC
698c2ecf20Sopenharmony_ci * @count: Count
708c2ecf20Sopenharmony_ci * @addr: Address
718c2ecf20Sopenharmony_ci */
728c2ecf20Sopenharmony_cistruct tidaw {
738c2ecf20Sopenharmony_ci	u32 flags:8;
748c2ecf20Sopenharmony_ci	u32 :24;
758c2ecf20Sopenharmony_ci	u32 count;
768c2ecf20Sopenharmony_ci	u64 addr;
778c2ecf20Sopenharmony_ci} __attribute__ ((packed, aligned(16)));
788c2ecf20Sopenharmony_ci
798c2ecf20Sopenharmony_ci/**
808c2ecf20Sopenharmony_ci * struct tsa_iostat - I/O-Status Transport-Status Area (IO-Stat TSA)
818c2ecf20Sopenharmony_ci * @dev_time: Device Time
828c2ecf20Sopenharmony_ci * @def_time: Defer Time
838c2ecf20Sopenharmony_ci * @queue_time: Queue Time
848c2ecf20Sopenharmony_ci * @dev_busy_time: Device-Busy Time
858c2ecf20Sopenharmony_ci * @dev_act_time: Device-Active-Only Time
868c2ecf20Sopenharmony_ci * @sense: Sense Data (if present)
878c2ecf20Sopenharmony_ci */
888c2ecf20Sopenharmony_cistruct tsa_iostat {
898c2ecf20Sopenharmony_ci	u32 dev_time;
908c2ecf20Sopenharmony_ci	u32 def_time;
918c2ecf20Sopenharmony_ci	u32 queue_time;
928c2ecf20Sopenharmony_ci	u32 dev_busy_time;
938c2ecf20Sopenharmony_ci	u32 dev_act_time;
948c2ecf20Sopenharmony_ci	u8 sense[32];
958c2ecf20Sopenharmony_ci} __attribute__ ((packed));
968c2ecf20Sopenharmony_ci
978c2ecf20Sopenharmony_ci/**
988c2ecf20Sopenharmony_ci * struct tsa_ddpcs - Device-Detected-Program-Check Transport-Status Area (DDPC TSA)
998c2ecf20Sopenharmony_ci * @rc: Reason Code
1008c2ecf20Sopenharmony_ci * @rcq: Reason Code Qualifier
1018c2ecf20Sopenharmony_ci * @sense: Sense Data (if present)
1028c2ecf20Sopenharmony_ci */
1038c2ecf20Sopenharmony_cistruct tsa_ddpc {
1048c2ecf20Sopenharmony_ci	u32 :24;
1058c2ecf20Sopenharmony_ci	u32 rc:8;
1068c2ecf20Sopenharmony_ci	u8 rcq[16];
1078c2ecf20Sopenharmony_ci	u8 sense[32];
1088c2ecf20Sopenharmony_ci} __attribute__ ((packed));
1098c2ecf20Sopenharmony_ci
1108c2ecf20Sopenharmony_ci#define TSA_INTRG_FLAGS_CU_STATE_VALID		(1 << (7 - 0))
1118c2ecf20Sopenharmony_ci#define TSA_INTRG_FLAGS_DEV_STATE_VALID		(1 << (7 - 1))
1128c2ecf20Sopenharmony_ci#define TSA_INTRG_FLAGS_OP_STATE_VALID		(1 << (7 - 2))
1138c2ecf20Sopenharmony_ci
1148c2ecf20Sopenharmony_ci/**
1158c2ecf20Sopenharmony_ci * struct tsa_intrg - Interrogate Transport-Status Area (Intrg. TSA)
1168c2ecf20Sopenharmony_ci * @format: Format
1178c2ecf20Sopenharmony_ci * @flags: Flags. Can be an arithmetic OR of the following constants:
1188c2ecf20Sopenharmony_ci * %TSA_INTRG_FLAGS_CU_STATE_VALID, %TSA_INTRG_FLAGS_DEV_STATE_VALID,
1198c2ecf20Sopenharmony_ci * %TSA_INTRG_FLAGS_OP_STATE_VALID
1208c2ecf20Sopenharmony_ci * @cu_state: Controle-Unit State
1218c2ecf20Sopenharmony_ci * @dev_state: Device State
1228c2ecf20Sopenharmony_ci * @op_state: Operation State
1238c2ecf20Sopenharmony_ci * @sd_info: State-Dependent Information
1248c2ecf20Sopenharmony_ci * @dl_id: Device-Level Identifier
1258c2ecf20Sopenharmony_ci * @dd_data: Device-Dependent Data
1268c2ecf20Sopenharmony_ci */
1278c2ecf20Sopenharmony_cistruct tsa_intrg {
1288c2ecf20Sopenharmony_ci	u32 format:8;
1298c2ecf20Sopenharmony_ci	u32 flags:8;
1308c2ecf20Sopenharmony_ci	u32 cu_state:8;
1318c2ecf20Sopenharmony_ci	u32 dev_state:8;
1328c2ecf20Sopenharmony_ci	u32 op_state:8;
1338c2ecf20Sopenharmony_ci	u32 :24;
1348c2ecf20Sopenharmony_ci	u8 sd_info[12];
1358c2ecf20Sopenharmony_ci	u32 dl_id;
1368c2ecf20Sopenharmony_ci	u8 dd_data[28];
1378c2ecf20Sopenharmony_ci} __attribute__ ((packed));
1388c2ecf20Sopenharmony_ci
1398c2ecf20Sopenharmony_ci#define TSB_FORMAT_NONE		0
1408c2ecf20Sopenharmony_ci#define TSB_FORMAT_IOSTAT	1
1418c2ecf20Sopenharmony_ci#define TSB_FORMAT_DDPC		2
1428c2ecf20Sopenharmony_ci#define TSB_FORMAT_INTRG	3
1438c2ecf20Sopenharmony_ci
1448c2ecf20Sopenharmony_ci#define TSB_FLAGS_DCW_OFFSET_VALID	(1 << (7 - 0))
1458c2ecf20Sopenharmony_ci#define TSB_FLAGS_COUNT_VALID		(1 << (7 - 1))
1468c2ecf20Sopenharmony_ci#define TSB_FLAGS_CACHE_MISS		(1 << (7 - 2))
1478c2ecf20Sopenharmony_ci#define TSB_FLAGS_TIME_VALID		(1 << (7 - 3))
1488c2ecf20Sopenharmony_ci#define TSB_FLAGS_FORMAT(x)		((x) & 7)
1498c2ecf20Sopenharmony_ci#define TSB_FORMAT(t)			((t)->flags & 7)
1508c2ecf20Sopenharmony_ci
1518c2ecf20Sopenharmony_ci/**
1528c2ecf20Sopenharmony_ci * struct tsb - Transport-Status Block (TSB)
1538c2ecf20Sopenharmony_ci * @length: Length
1548c2ecf20Sopenharmony_ci * @flags: Flags. Can be an arithmetic OR of the following constants:
1558c2ecf20Sopenharmony_ci * %TSB_FLAGS_DCW_OFFSET_VALID, %TSB_FLAGS_COUNT_VALID, %TSB_FLAGS_CACHE_MISS,
1568c2ecf20Sopenharmony_ci * %TSB_FLAGS_TIME_VALID
1578c2ecf20Sopenharmony_ci * @dcw_offset: DCW Offset
1588c2ecf20Sopenharmony_ci * @count: Count
1598c2ecf20Sopenharmony_ci * @tsa: Transport-Status-Area
1608c2ecf20Sopenharmony_ci */
1618c2ecf20Sopenharmony_cistruct tsb {
1628c2ecf20Sopenharmony_ci	u32 length:8;
1638c2ecf20Sopenharmony_ci	u32 flags:8;
1648c2ecf20Sopenharmony_ci	u32 dcw_offset:16;
1658c2ecf20Sopenharmony_ci	u32 count;
1668c2ecf20Sopenharmony_ci	u32 :32;
1678c2ecf20Sopenharmony_ci	union {
1688c2ecf20Sopenharmony_ci		struct tsa_iostat iostat;
1698c2ecf20Sopenharmony_ci		struct tsa_ddpc ddpc;
1708c2ecf20Sopenharmony_ci		struct tsa_intrg intrg;
1718c2ecf20Sopenharmony_ci	} __attribute__ ((packed)) tsa;
1728c2ecf20Sopenharmony_ci} __attribute__ ((packed, aligned(8)));
1738c2ecf20Sopenharmony_ci
1748c2ecf20Sopenharmony_ci#define DCW_INTRG_FORMAT_DEFAULT	0
1758c2ecf20Sopenharmony_ci
1768c2ecf20Sopenharmony_ci#define DCW_INTRG_RC_UNSPECIFIED	0
1778c2ecf20Sopenharmony_ci#define DCW_INTRG_RC_TIMEOUT		1
1788c2ecf20Sopenharmony_ci
1798c2ecf20Sopenharmony_ci#define DCW_INTRG_RCQ_UNSPECIFIED	0
1808c2ecf20Sopenharmony_ci#define DCW_INTRG_RCQ_PRIMARY		1
1818c2ecf20Sopenharmony_ci#define DCW_INTRG_RCQ_SECONDARY		2
1828c2ecf20Sopenharmony_ci
1838c2ecf20Sopenharmony_ci#define DCW_INTRG_FLAGS_MPM		(1 << (7 - 0))
1848c2ecf20Sopenharmony_ci#define DCW_INTRG_FLAGS_PPR		(1 << (7 - 1))
1858c2ecf20Sopenharmony_ci#define DCW_INTRG_FLAGS_CRIT		(1 << (7 - 2))
1868c2ecf20Sopenharmony_ci
1878c2ecf20Sopenharmony_ci/**
1888c2ecf20Sopenharmony_ci * struct dcw_intrg_data - Interrogate DCW data
1898c2ecf20Sopenharmony_ci * @format: Format. Should be %DCW_INTRG_FORMAT_DEFAULT
1908c2ecf20Sopenharmony_ci * @rc: Reason Code. Can be one of %DCW_INTRG_RC_UNSPECIFIED,
1918c2ecf20Sopenharmony_ci * %DCW_INTRG_RC_TIMEOUT
1928c2ecf20Sopenharmony_ci * @rcq: Reason Code Qualifier: Can be one of %DCW_INTRG_RCQ_UNSPECIFIED,
1938c2ecf20Sopenharmony_ci * %DCW_INTRG_RCQ_PRIMARY, %DCW_INTRG_RCQ_SECONDARY
1948c2ecf20Sopenharmony_ci * @lpm: Logical-Path Mask
1958c2ecf20Sopenharmony_ci * @pam: Path-Available Mask
1968c2ecf20Sopenharmony_ci * @pim: Path-Installed Mask
1978c2ecf20Sopenharmony_ci * @timeout: Timeout
1988c2ecf20Sopenharmony_ci * @flags: Flags. Can be an arithmetic OR of %DCW_INTRG_FLAGS_MPM,
1998c2ecf20Sopenharmony_ci * %DCW_INTRG_FLAGS_PPR, %DCW_INTRG_FLAGS_CRIT
2008c2ecf20Sopenharmony_ci * @time: Time
2018c2ecf20Sopenharmony_ci * @prog_id: Program Identifier
2028c2ecf20Sopenharmony_ci * @prog_data: Program-Dependent Data
2038c2ecf20Sopenharmony_ci */
2048c2ecf20Sopenharmony_cistruct dcw_intrg_data {
2058c2ecf20Sopenharmony_ci	u32 format:8;
2068c2ecf20Sopenharmony_ci	u32 rc:8;
2078c2ecf20Sopenharmony_ci	u32 rcq:8;
2088c2ecf20Sopenharmony_ci	u32 lpm:8;
2098c2ecf20Sopenharmony_ci	u32 pam:8;
2108c2ecf20Sopenharmony_ci	u32 pim:8;
2118c2ecf20Sopenharmony_ci	u32 timeout:16;
2128c2ecf20Sopenharmony_ci	u32 flags:8;
2138c2ecf20Sopenharmony_ci	u32 :24;
2148c2ecf20Sopenharmony_ci	u32 :32;
2158c2ecf20Sopenharmony_ci	u64 time;
2168c2ecf20Sopenharmony_ci	u64 prog_id;
2178c2ecf20Sopenharmony_ci	u8  prog_data[0];
2188c2ecf20Sopenharmony_ci} __attribute__ ((packed));
2198c2ecf20Sopenharmony_ci
2208c2ecf20Sopenharmony_ci#define DCW_FLAGS_CC		(1 << (7 - 1))
2218c2ecf20Sopenharmony_ci
2228c2ecf20Sopenharmony_ci#define DCW_CMD_WRITE		0x01
2238c2ecf20Sopenharmony_ci#define DCW_CMD_READ		0x02
2248c2ecf20Sopenharmony_ci#define DCW_CMD_CONTROL		0x03
2258c2ecf20Sopenharmony_ci#define DCW_CMD_SENSE		0x04
2268c2ecf20Sopenharmony_ci#define DCW_CMD_SENSE_ID	0xe4
2278c2ecf20Sopenharmony_ci#define DCW_CMD_INTRG		0x40
2288c2ecf20Sopenharmony_ci
2298c2ecf20Sopenharmony_ci/**
2308c2ecf20Sopenharmony_ci * struct dcw - Device-Command Word (DCW)
2318c2ecf20Sopenharmony_ci * @cmd: Command Code. Can be one of %DCW_CMD_WRITE, %DCW_CMD_READ,
2328c2ecf20Sopenharmony_ci * %DCW_CMD_CONTROL, %DCW_CMD_SENSE, %DCW_CMD_SENSE_ID, %DCW_CMD_INTRG
2338c2ecf20Sopenharmony_ci * @flags: Flags. Can be an arithmetic OR of %DCW_FLAGS_CC
2348c2ecf20Sopenharmony_ci * @cd_count: Control-Data Count
2358c2ecf20Sopenharmony_ci * @count: Count
2368c2ecf20Sopenharmony_ci * @cd: Control Data
2378c2ecf20Sopenharmony_ci */
2388c2ecf20Sopenharmony_cistruct dcw {
2398c2ecf20Sopenharmony_ci	u32 cmd:8;
2408c2ecf20Sopenharmony_ci	u32 flags:8;
2418c2ecf20Sopenharmony_ci	u32 :8;
2428c2ecf20Sopenharmony_ci	u32 cd_count:8;
2438c2ecf20Sopenharmony_ci	u32 count;
2448c2ecf20Sopenharmony_ci	u8 cd[0];
2458c2ecf20Sopenharmony_ci} __attribute__ ((packed));
2468c2ecf20Sopenharmony_ci
2478c2ecf20Sopenharmony_ci#define TCCB_FORMAT_DEFAULT	0x7f
2488c2ecf20Sopenharmony_ci#define TCCB_MAX_DCW		30
2498c2ecf20Sopenharmony_ci#define TCCB_MAX_SIZE		(sizeof(struct tccb_tcah) + \
2508c2ecf20Sopenharmony_ci				 TCCB_MAX_DCW * sizeof(struct dcw) + \
2518c2ecf20Sopenharmony_ci				 sizeof(struct tccb_tcat))
2528c2ecf20Sopenharmony_ci#define TCCB_SAC_DEFAULT	0x1ffe
2538c2ecf20Sopenharmony_ci#define TCCB_SAC_INTRG		0x1fff
2548c2ecf20Sopenharmony_ci
2558c2ecf20Sopenharmony_ci/**
2568c2ecf20Sopenharmony_ci * struct tccb_tcah - Transport-Command-Area Header (TCAH)
2578c2ecf20Sopenharmony_ci * @format: Format. Should be %TCCB_FORMAT_DEFAULT
2588c2ecf20Sopenharmony_ci * @tcal: Transport-Command-Area Length
2598c2ecf20Sopenharmony_ci * @sac: Service-Action Code. Can be one of %TCCB_SAC_DEFAULT, %TCCB_SAC_INTRG
2608c2ecf20Sopenharmony_ci * @prio: Priority
2618c2ecf20Sopenharmony_ci */
2628c2ecf20Sopenharmony_cistruct tccb_tcah {
2638c2ecf20Sopenharmony_ci	u32 format:8;
2648c2ecf20Sopenharmony_ci	u32 :24;
2658c2ecf20Sopenharmony_ci	u32 :24;
2668c2ecf20Sopenharmony_ci	u32 tcal:8;
2678c2ecf20Sopenharmony_ci	u32 sac:16;
2688c2ecf20Sopenharmony_ci	u32 :8;
2698c2ecf20Sopenharmony_ci	u32 prio:8;
2708c2ecf20Sopenharmony_ci	u32 :32;
2718c2ecf20Sopenharmony_ci} __attribute__ ((packed));
2728c2ecf20Sopenharmony_ci
2738c2ecf20Sopenharmony_ci/**
2748c2ecf20Sopenharmony_ci * struct tccb_tcat - Transport-Command-Area Trailer (TCAT)
2758c2ecf20Sopenharmony_ci * @count: Transport Count
2768c2ecf20Sopenharmony_ci */
2778c2ecf20Sopenharmony_cistruct tccb_tcat {
2788c2ecf20Sopenharmony_ci	u32 :32;
2798c2ecf20Sopenharmony_ci	u32 count;
2808c2ecf20Sopenharmony_ci} __attribute__ ((packed));
2818c2ecf20Sopenharmony_ci
2828c2ecf20Sopenharmony_ci/**
2838c2ecf20Sopenharmony_ci * struct tccb - (partial) Transport-Command-Control Block (TCCB)
2848c2ecf20Sopenharmony_ci * @tcah: TCAH
2858c2ecf20Sopenharmony_ci * @tca: Transport-Command Area
2868c2ecf20Sopenharmony_ci */
2878c2ecf20Sopenharmony_cistruct tccb {
2888c2ecf20Sopenharmony_ci	struct tccb_tcah tcah;
2898c2ecf20Sopenharmony_ci	u8 tca[0];
2908c2ecf20Sopenharmony_ci} __attribute__ ((packed, aligned(8)));
2918c2ecf20Sopenharmony_ci
2928c2ecf20Sopenharmony_cistruct tcw *tcw_get_intrg(struct tcw *tcw);
2938c2ecf20Sopenharmony_civoid *tcw_get_data(struct tcw *tcw);
2948c2ecf20Sopenharmony_cistruct tccb *tcw_get_tccb(struct tcw *tcw);
2958c2ecf20Sopenharmony_cistruct tsb *tcw_get_tsb(struct tcw *tcw);
2968c2ecf20Sopenharmony_ci
2978c2ecf20Sopenharmony_civoid tcw_init(struct tcw *tcw, int r, int w);
2988c2ecf20Sopenharmony_civoid tcw_finalize(struct tcw *tcw, int num_tidaws);
2998c2ecf20Sopenharmony_ci
3008c2ecf20Sopenharmony_civoid tcw_set_intrg(struct tcw *tcw, struct tcw *intrg_tcw);
3018c2ecf20Sopenharmony_civoid tcw_set_data(struct tcw *tcw, void *data, int use_tidal);
3028c2ecf20Sopenharmony_civoid tcw_set_tccb(struct tcw *tcw, struct tccb *tccb);
3038c2ecf20Sopenharmony_civoid tcw_set_tsb(struct tcw *tcw, struct tsb *tsb);
3048c2ecf20Sopenharmony_ci
3058c2ecf20Sopenharmony_civoid tccb_init(struct tccb *tccb, size_t tccb_size, u32 sac);
3068c2ecf20Sopenharmony_civoid tsb_init(struct tsb *tsb);
3078c2ecf20Sopenharmony_cistruct dcw *tccb_add_dcw(struct tccb *tccb, size_t tccb_size, u8 cmd, u8 flags,
3088c2ecf20Sopenharmony_ci			 void *cd, u8 cd_count, u32 count);
3098c2ecf20Sopenharmony_cistruct tidaw *tcw_add_tidaw(struct tcw *tcw, int num_tidaws, u8 flags,
3108c2ecf20Sopenharmony_ci			    void *addr, u32 count);
3118c2ecf20Sopenharmony_ci
3128c2ecf20Sopenharmony_ci#endif /* _ASM_S390_FCX_H */
313