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