diff options
author | Sebastian Ott <sebott@linux.vnet.ibm.com> | 2012-08-28 10:44:51 -0400 |
---|---|---|
committer | Martin Schwidefsky <schwidefsky@de.ibm.com> | 2012-09-26 09:44:57 -0400 |
commit | d2fc439b99820cccd6978918c260730dd97bf373 (patch) | |
tree | 2f71bb936d3c2a9c3ad2a86a662492229aa07660 /arch/s390/include | |
parent | 382b73663529b756914cf17a9912c9cf00cf0025 (diff) |
s390: add eadm related structures
Add structures to be used by the eadm subchannel driver.
Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/include')
-rw-r--r-- | arch/s390/include/asm/cio.h | 28 | ||||
-rw-r--r-- | arch/s390/include/asm/eadm.h | 74 | ||||
-rw-r--r-- | arch/s390/include/asm/scsw.h | 36 |
3 files changed, 135 insertions, 3 deletions
diff --git a/arch/s390/include/asm/cio.h b/arch/s390/include/asm/cio.h index 77043aa44d67..55bde6035216 100644 --- a/arch/s390/include/asm/cio.h +++ b/arch/s390/include/asm/cio.h | |||
@@ -80,6 +80,18 @@ struct erw { | |||
80 | } __attribute__ ((packed)); | 80 | } __attribute__ ((packed)); |
81 | 81 | ||
82 | /** | 82 | /** |
83 | * struct erw_eadm - EADM Subchannel extended report word | ||
84 | * @b: aob error | ||
85 | * @r: arsb error | ||
86 | */ | ||
87 | struct erw_eadm { | ||
88 | __u32 : 16; | ||
89 | __u32 b : 1; | ||
90 | __u32 r : 1; | ||
91 | __u32 : 14; | ||
92 | } __packed; | ||
93 | |||
94 | /** | ||
83 | * struct sublog - subchannel logout area | 95 | * struct sublog - subchannel logout area |
84 | * @res0: reserved | 96 | * @res0: reserved |
85 | * @esf: extended status flags | 97 | * @esf: extended status flags |
@@ -170,9 +182,22 @@ struct esw3 { | |||
170 | } __attribute__ ((packed)); | 182 | } __attribute__ ((packed)); |
171 | 183 | ||
172 | /** | 184 | /** |
185 | * struct esw_eadm - EADM Subchannel Extended Status Word (ESW) | ||
186 | * @sublog: subchannel logout | ||
187 | * @erw: extended report word | ||
188 | */ | ||
189 | struct esw_eadm { | ||
190 | __u32 sublog; | ||
191 | struct erw_eadm erw; | ||
192 | __u32 : 32; | ||
193 | __u32 : 32; | ||
194 | __u32 : 32; | ||
195 | } __packed; | ||
196 | |||
197 | /** | ||
173 | * struct irb - interruption response block | 198 | * struct irb - interruption response block |
174 | * @scsw: subchannel status word | 199 | * @scsw: subchannel status word |
175 | * @esw: extened status word, 4 formats | 200 | * @esw: extened status word |
176 | * @ecw: extended control word | 201 | * @ecw: extended control word |
177 | * | 202 | * |
178 | * The irb that is handed to the device driver when an interrupt occurs. For | 203 | * The irb that is handed to the device driver when an interrupt occurs. For |
@@ -191,6 +216,7 @@ struct irb { | |||
191 | struct esw1 esw1; | 216 | struct esw1 esw1; |
192 | struct esw2 esw2; | 217 | struct esw2 esw2; |
193 | struct esw3 esw3; | 218 | struct esw3 esw3; |
219 | struct esw_eadm eadm; | ||
194 | } esw; | 220 | } esw; |
195 | __u8 ecw[32]; | 221 | __u8 ecw[32]; |
196 | } __attribute__ ((packed,aligned(4))); | 222 | } __attribute__ ((packed,aligned(4))); |
diff --git a/arch/s390/include/asm/eadm.h b/arch/s390/include/asm/eadm.h new file mode 100644 index 000000000000..4a65803baa08 --- /dev/null +++ b/arch/s390/include/asm/eadm.h | |||
@@ -0,0 +1,74 @@ | |||
1 | #ifndef _ASM_S390_EADM_H | ||
2 | #define _ASM_S390_EADM_H | ||
3 | |||
4 | #include <linux/types.h> | ||
5 | |||
6 | struct arqb { | ||
7 | u64 data; | ||
8 | u16 fmt:4; | ||
9 | u16:12; | ||
10 | u16 cmd_code; | ||
11 | u16:16; | ||
12 | u16 msb_count; | ||
13 | u32 reserved[12]; | ||
14 | } __packed; | ||
15 | |||
16 | #define ARQB_CMD_MOVE 1 | ||
17 | |||
18 | struct arsb { | ||
19 | u16 fmt:4; | ||
20 | u32:28; | ||
21 | u8 ef; | ||
22 | u8:8; | ||
23 | u8 ecbi; | ||
24 | u8:8; | ||
25 | u8 fvf; | ||
26 | u16:16; | ||
27 | u8 eqc; | ||
28 | u32:32; | ||
29 | u64 fail_msb; | ||
30 | u64 fail_aidaw; | ||
31 | u64 fail_ms; | ||
32 | u64 fail_scm; | ||
33 | u32 reserved[4]; | ||
34 | } __packed; | ||
35 | |||
36 | struct msb { | ||
37 | u8 fmt:4; | ||
38 | u8 oc:4; | ||
39 | u8 flags; | ||
40 | u16:12; | ||
41 | u16 bs:4; | ||
42 | u32 blk_count; | ||
43 | u64 data_addr; | ||
44 | u64 scm_addr; | ||
45 | u64:64; | ||
46 | } __packed; | ||
47 | |||
48 | struct aidaw { | ||
49 | u8 flags; | ||
50 | u32 :24; | ||
51 | u32 :32; | ||
52 | u64 data_addr; | ||
53 | } __packed; | ||
54 | |||
55 | #define MSB_OC_CLEAR 0 | ||
56 | #define MSB_OC_READ 1 | ||
57 | #define MSB_OC_WRITE 2 | ||
58 | #define MSB_OC_RELEASE 3 | ||
59 | |||
60 | #define MSB_FLAG_BNM 0x80 | ||
61 | #define MSB_FLAG_IDA 0x40 | ||
62 | |||
63 | #define MSB_BS_4K 0 | ||
64 | #define MSB_BS_1M 1 | ||
65 | |||
66 | #define AOB_NR_MSB 124 | ||
67 | |||
68 | struct aob { | ||
69 | struct arqb request; | ||
70 | struct arsb response; | ||
71 | struct msb msb[AOB_NR_MSB]; | ||
72 | } __packed __aligned(PAGE_SIZE); | ||
73 | |||
74 | #endif /* _ASM_S390_EADM_H */ | ||
diff --git a/arch/s390/include/asm/scsw.h b/arch/s390/include/asm/scsw.h index 8096bfe67424..4af99cdaddf5 100644 --- a/arch/s390/include/asm/scsw.h +++ b/arch/s390/include/asm/scsw.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Helper functions for scsw access. | 2 | * Helper functions for scsw access. |
3 | * | 3 | * |
4 | * Copyright IBM Corp. 2008, 2009 | 4 | * Copyright IBM Corp. 2008, 2012 |
5 | * Author(s): Peter Oberparleiter <peter.oberparleiter@de.ibm.com> | 5 | * Author(s): Peter Oberparleiter <peter.oberparleiter@de.ibm.com> |
6 | */ | 6 | */ |
7 | 7 | ||
@@ -100,14 +100,46 @@ struct tm_scsw { | |||
100 | } __attribute__ ((packed)); | 100 | } __attribute__ ((packed)); |
101 | 101 | ||
102 | /** | 102 | /** |
103 | * struct eadm_scsw - subchannel status word for eadm subchannels | ||
104 | * @key: subchannel key | ||
105 | * @eswf: esw format | ||
106 | * @cc: deferred condition code | ||
107 | * @ectl: extended control | ||
108 | * @fctl: function control | ||
109 | * @actl: activity control | ||
110 | * @stctl: status control | ||
111 | * @aob: AOB address | ||
112 | * @dstat: device status | ||
113 | * @cstat: subchannel status | ||
114 | */ | ||
115 | struct eadm_scsw { | ||
116 | u32 key:4; | ||
117 | u32:1; | ||
118 | u32 eswf:1; | ||
119 | u32 cc:2; | ||
120 | u32:6; | ||
121 | u32 ectl:1; | ||
122 | u32:2; | ||
123 | u32 fctl:3; | ||
124 | u32 actl:7; | ||
125 | u32 stctl:5; | ||
126 | u32 aob; | ||
127 | u32 dstat:8; | ||
128 | u32 cstat:8; | ||
129 | u32:16; | ||
130 | } __packed; | ||
131 | |||
132 | /** | ||
103 | * union scsw - subchannel status word | 133 | * union scsw - subchannel status word |
104 | * @cmd: command-mode SCSW | 134 | * @cmd: command-mode SCSW |
105 | * @tm: transport-mode SCSW | 135 | * @tm: transport-mode SCSW |
136 | * @eadm: eadm SCSW | ||
106 | */ | 137 | */ |
107 | union scsw { | 138 | union scsw { |
108 | struct cmd_scsw cmd; | 139 | struct cmd_scsw cmd; |
109 | struct tm_scsw tm; | 140 | struct tm_scsw tm; |
110 | } __attribute__ ((packed)); | 141 | struct eadm_scsw eadm; |
142 | } __packed; | ||
111 | 143 | ||
112 | #define SCSW_FCTL_CLEAR_FUNC 0x1 | 144 | #define SCSW_FCTL_CLEAR_FUNC 0x1 |
113 | #define SCSW_FCTL_HALT_FUNC 0x2 | 145 | #define SCSW_FCTL_HALT_FUNC 0x2 |