1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Orb related data structures. 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright IBM Corp. 2007, 2011 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * Author(s): Cornelia Huck <cornelia.huck@de.ibm.com> 8*4882a593Smuzhiyun * Peter Oberparleiter <peter.oberparleiter@de.ibm.com> 9*4882a593Smuzhiyun * Sebastian Ott <sebott@linux.vnet.ibm.com> 10*4882a593Smuzhiyun */ 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #ifndef S390_ORB_H 13*4882a593Smuzhiyun #define S390_ORB_H 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun /* 16*4882a593Smuzhiyun * Command-mode operation request block 17*4882a593Smuzhiyun */ 18*4882a593Smuzhiyun struct cmd_orb { 19*4882a593Smuzhiyun u32 intparm; /* interruption parameter */ 20*4882a593Smuzhiyun u32 key:4; /* flags, like key, suspend control, etc. */ 21*4882a593Smuzhiyun u32 spnd:1; /* suspend control */ 22*4882a593Smuzhiyun u32 res1:1; /* reserved */ 23*4882a593Smuzhiyun u32 mod:1; /* modification control */ 24*4882a593Smuzhiyun u32 sync:1; /* synchronize control */ 25*4882a593Smuzhiyun u32 fmt:1; /* format control */ 26*4882a593Smuzhiyun u32 pfch:1; /* prefetch control */ 27*4882a593Smuzhiyun u32 isic:1; /* initial-status-interruption control */ 28*4882a593Smuzhiyun u32 alcc:1; /* address-limit-checking control */ 29*4882a593Smuzhiyun u32 ssic:1; /* suppress-suspended-interr. control */ 30*4882a593Smuzhiyun u32 res2:1; /* reserved */ 31*4882a593Smuzhiyun u32 c64:1; /* IDAW/QDIO 64 bit control */ 32*4882a593Smuzhiyun u32 i2k:1; /* IDAW 2/4kB block size control */ 33*4882a593Smuzhiyun u32 lpm:8; /* logical path mask */ 34*4882a593Smuzhiyun u32 ils:1; /* incorrect length */ 35*4882a593Smuzhiyun u32 zero:6; /* reserved zeros */ 36*4882a593Smuzhiyun u32 orbx:1; /* ORB extension control */ 37*4882a593Smuzhiyun u32 cpa; /* channel program address */ 38*4882a593Smuzhiyun } __packed __aligned(4); 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun /* 41*4882a593Smuzhiyun * Transport-mode operation request block 42*4882a593Smuzhiyun */ 43*4882a593Smuzhiyun struct tm_orb { 44*4882a593Smuzhiyun u32 intparm; 45*4882a593Smuzhiyun u32 key:4; 46*4882a593Smuzhiyun u32:9; 47*4882a593Smuzhiyun u32 b:1; 48*4882a593Smuzhiyun u32:2; 49*4882a593Smuzhiyun u32 lpm:8; 50*4882a593Smuzhiyun u32:7; 51*4882a593Smuzhiyun u32 x:1; 52*4882a593Smuzhiyun u32 tcw; 53*4882a593Smuzhiyun u32 prio:8; 54*4882a593Smuzhiyun u32:8; 55*4882a593Smuzhiyun u32 rsvpgm:8; 56*4882a593Smuzhiyun u32:8; 57*4882a593Smuzhiyun u32:32; 58*4882a593Smuzhiyun u32:32; 59*4882a593Smuzhiyun u32:32; 60*4882a593Smuzhiyun u32:32; 61*4882a593Smuzhiyun } __packed __aligned(4); 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun /* 64*4882a593Smuzhiyun * eadm operation request block 65*4882a593Smuzhiyun */ 66*4882a593Smuzhiyun struct eadm_orb { 67*4882a593Smuzhiyun u32 intparm; 68*4882a593Smuzhiyun u32 key:4; 69*4882a593Smuzhiyun u32:4; 70*4882a593Smuzhiyun u32 compat1:1; 71*4882a593Smuzhiyun u32 compat2:1; 72*4882a593Smuzhiyun u32:21; 73*4882a593Smuzhiyun u32 x:1; 74*4882a593Smuzhiyun u32 aob; 75*4882a593Smuzhiyun u32 css_prio:8; 76*4882a593Smuzhiyun u32:8; 77*4882a593Smuzhiyun u32 scm_prio:8; 78*4882a593Smuzhiyun u32:8; 79*4882a593Smuzhiyun u32:29; 80*4882a593Smuzhiyun u32 fmt:3; 81*4882a593Smuzhiyun u32:32; 82*4882a593Smuzhiyun u32:32; 83*4882a593Smuzhiyun u32:32; 84*4882a593Smuzhiyun } __packed __aligned(4); 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun union orb { 87*4882a593Smuzhiyun struct cmd_orb cmd; 88*4882a593Smuzhiyun struct tm_orb tm; 89*4882a593Smuzhiyun struct eadm_orb eadm; 90*4882a593Smuzhiyun } __packed __aligned(4); 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun #endif /* S390_ORB_H */ 93