1dd873966SEric Auger /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
274c98e20SCornelia Huck /*
374c98e20SCornelia Huck  * Interfaces for vfio-ccw
474c98e20SCornelia Huck  *
574c98e20SCornelia Huck  * Copyright IBM Corp. 2017
674c98e20SCornelia Huck  *
774c98e20SCornelia Huck  * Author(s): Dong Jia Shi <bjsdjshi@linux.vnet.ibm.com>
874c98e20SCornelia Huck  */
974c98e20SCornelia Huck 
1074c98e20SCornelia Huck #ifndef _VFIO_CCW_H_
1174c98e20SCornelia Huck #define _VFIO_CCW_H_
1274c98e20SCornelia Huck 
1374c98e20SCornelia Huck #include <linux/types.h>
1474c98e20SCornelia Huck 
15d9cb4336SCornelia Huck /* used for START SUBCHANNEL, always present */
1674c98e20SCornelia Huck struct ccw_io_region {
1774c98e20SCornelia Huck #define ORB_AREA_SIZE 12
1874c98e20SCornelia Huck 	__u8	orb_area[ORB_AREA_SIZE];
1974c98e20SCornelia Huck #define SCSW_AREA_SIZE 12
2074c98e20SCornelia Huck 	__u8	scsw_area[SCSW_AREA_SIZE];
2174c98e20SCornelia Huck #define IRB_AREA_SIZE 96
2274c98e20SCornelia Huck 	__u8	irb_area[IRB_AREA_SIZE];
2374c98e20SCornelia Huck 	__u32	ret_code;
2474c98e20SCornelia Huck } __attribute__((packed));
2574c98e20SCornelia Huck 
26d9cb4336SCornelia Huck /*
27d9cb4336SCornelia Huck  * used for processing commands that trigger asynchronous actions
28d9cb4336SCornelia Huck  * Note: this is controlled by a capability
29d9cb4336SCornelia Huck  */
30d9cb4336SCornelia Huck #define VFIO_CCW_ASYNC_CMD_HSCH (1 << 0)
31d9cb4336SCornelia Huck #define VFIO_CCW_ASYNC_CMD_CSCH (1 << 1)
32d9cb4336SCornelia Huck struct ccw_cmd_region {
33d9cb4336SCornelia Huck 	__u32 command;
34d9cb4336SCornelia Huck 	__u32 ret_code;
35d9cb4336SCornelia Huck } __attribute__((packed));
36d9cb4336SCornelia Huck 
37*f76b348eSCornelia Huck /*
38*f76b348eSCornelia Huck  * Used for processing commands that read the subchannel-information block
39*f76b348eSCornelia Huck  * Reading this region triggers a stsch() to hardware
40*f76b348eSCornelia Huck  * Note: this is controlled by a capability
41*f76b348eSCornelia Huck  */
42*f76b348eSCornelia Huck struct ccw_schib_region {
43*f76b348eSCornelia Huck #define SCHIB_AREA_SIZE 52
44*f76b348eSCornelia Huck 	__u8 schib_area[SCHIB_AREA_SIZE];
45*f76b348eSCornelia Huck } __attribute__((packed));
46*f76b348eSCornelia Huck 
47*f76b348eSCornelia Huck /*
48*f76b348eSCornelia Huck  * Used for returning a Channel Report Word to userspace.
49*f76b348eSCornelia Huck  * Note: this is controlled by a capability
50*f76b348eSCornelia Huck  */
51*f76b348eSCornelia Huck struct ccw_crw_region {
52*f76b348eSCornelia Huck 	__u32 crw;
53*f76b348eSCornelia Huck 	__u32 pad;
54*f76b348eSCornelia Huck } __attribute__((packed));
55*f76b348eSCornelia Huck 
5674c98e20SCornelia Huck #endif
57