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