Mercurial > sarpn
annotate arch/channel.h @ 12:40af39d064fa
Refactor the arch code
Note: the code, as it is now, does not run even though it compiles
author | Josef 'Jeff' Sipek <jeffpc@josefsipek.net> |
---|---|
date | Thu, 07 Apr 2011 22:07:20 -0400 |
parents | |
children | c75be274ce23 |
rev | line source |
---|---|
12
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
1 #ifndef __CHANNEL_H |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
2 #define __CHANNEL_H |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
3 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
4 #define CON_LEN 132 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
5 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
6 struct pmcw { |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
7 /* word 0 */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
8 u32 interrupt_param; /* Interruption Parameter */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
9 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
10 /* word 1*/ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
11 u8 __zero1:2, |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
12 isc:3, /* I/O-Interruption-Subclass Code */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
13 __zero2:3; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
14 u8 e:1, /* Enabled */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
15 lm:2, /* Limit Mode */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
16 mm:2, /* Measurement-Mode Enable */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
17 d:1, /* Multipath Mode */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
18 t:1, /* Timing Facility */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
19 v:1; /* Device Number Valid */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
20 u16 dev_num; /* Device Number */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
21 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
22 /* word 2 */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
23 u8 lpm; /* Logical-Path Mask */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
24 u8 pnom; /* Path-Not-Operational Mask */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
25 u8 lpum; /* Last-Path-Used Mask */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
26 u8 pim; /* Path-Installed Mask */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
27 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
28 /* word 3 */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
29 u16 mbi; /* Measurement-Block Index */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
30 u8 pom; /* Path-Operational Mask */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
31 u8 pam; /* Path-Available Mask */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
32 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
33 /* word 4 & 5 */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
34 u8 chpid[8]; /* Channel-Path Identifiers */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
35 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
36 /* word 6 */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
37 u16 __zero3; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
38 u16 __zero4:13, |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
39 f:1, /* Measurement Block Format Control */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
40 x:1, /* Extended Measurement Word Mode Enable */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
41 s:1; /* Concurrent Sense */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
42 }; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
43 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
44 struct scsw { |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
45 /* word 0 */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
46 u16 key:4, /* Subchannel key */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
47 s:1, /* Suspend control */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
48 l:1, /* ESW format */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
49 cc:2, /* Deferred condition code */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
50 f:1, /* Format */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
51 p:1, /* Prefetch */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
52 i:1, /* Initial-status interruption control */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
53 a:1, /* Address-limit-checking control */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
54 u:1, /* Supress-suspended interruption */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
55 z:1, /* Zero condition code */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
56 e:1, /* Extended control */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
57 n:1; /* Path no operational */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
58 u16 __zero:1, |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
59 fc:3, /* Function control */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
60 ac:7, /* Activity control */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
61 sc:5; /* Status control */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
62 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
63 /* word 1 */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
64 u32 addr; /* CCW Address */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
65 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
66 /* word 2 */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
67 u8 dev_status; /* Device status */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
68 u8 sch_status; /* Subchannel status */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
69 u16 count; /* Count */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
70 } __attribute__((packed)); |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
71 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
72 struct schib { |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
73 struct pmcw pmcw; /* Path Management Control Word */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
74 struct scsw scsw; /* Subchannel Status Word */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
75 u32 measure_block_1; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
76 u32 measure_block_2; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
77 u32 model_dep_area; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
78 } __attribute__((packed,aligned(4))); |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
79 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
80 struct orb { |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
81 /* word 0 */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
82 u32 param; /* Interruption Parameter */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
83 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
84 /* word 1 */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
85 u8 key:4, /* Subchannel Key */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
86 s:1, /* Suspend */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
87 c:1, /* Streaming-Mode Control */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
88 m:1, /* Modification Control */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
89 y:1; /* Synchronization Control */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
90 u8 f:1, /* Format Control */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
91 p:1, /* Prefetch Control */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
92 i:1, /* Initial-Status-Interruption Control */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
93 a:1, /* Address-Limit-Checking control */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
94 u:1, /* Suppress-Suspend-Interruption Control */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
95 __zero1:1, |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
96 h:1, /* Format-2-IDAW Control */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
97 t:1; /* 2K-IDAW Control */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
98 u8 lpm; /* Logical-Path Mask */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
99 u8 l:1, /* Incorrect-Length-Suppression Mode */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
100 d:1, /* Modified-CCW-Indirect-Data-Addressing Control */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
101 __zero2:5, |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
102 x:1; /* ORB-Extension Control */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
103 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
104 /* word 2 */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
105 u32 addr; /* Channel-Program Address */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
106 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
107 /* word 3 */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
108 u8 css_prio; /* Channel-Subsystem Priority */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
109 u8 __reserved1; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
110 u8 cu_prio; /* Control-Unit Priority */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
111 u8 __reserved2; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
112 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
113 /* word 4 - 7 */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
114 u32 __reserved3; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
115 u32 __reserved4; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
116 u32 __reserved5; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
117 u32 __reserved6; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
118 } __attribute__((packed,aligned(4))); |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
119 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
120 struct ccw { |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
121 u8 cmd; /* Command code */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
122 u8 flags; /* Flags */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
123 u16 count; /* Count */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
124 u32 addr; /* Data Address */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
125 } __attribute__((packed,aligned(8))); |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
126 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
127 struct psw { |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
128 u8 _zero0:1, |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
129 r:1, /* PER Mask (R) */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
130 _zero1:3, |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
131 t:1, /* DAT Mode (T) */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
132 io:1, /* I/O Mask (IO) */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
133 ex:1; /* External Mask (EX) */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
134 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
135 u8 key:4, /* Key */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
136 _zero2:1, |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
137 m:1, /* Machine-Check Mask (M) */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
138 w:1, /* Wait State (W) */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
139 p:1; /* Problem State (P) */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
140 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
141 u8 as:2, /* Address-Space Control (AS) */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
142 cc:2, /* Condition Code (CC) */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
143 prog_mask:4; /* Program Mask */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
144 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
145 u8 _zero3:7, |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
146 ea:1; /* Extended Addressing (EA) */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
147 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
148 u32 ba:1, /* Basic Addressing (BA) */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
149 _zero4:31; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
150 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
151 u64 ptr; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
152 }; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
153 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
154 struct irb { |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
155 struct scsw scsw; /* Subchannel-Status */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
156 u32 w0a, w1a, w2a, w3a, w4a; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
157 u32 w0b, w1b, w2b, w3b, w4b, w5b, w6b, w7b; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
158 u32 w0c, w1c, w2c, w3c, w4c, w5c, w6c, w7c; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
159 } __attribute__((packed,aligned(4))); |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
160 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
161 static inline int store_sch(u32 sch, struct schib *schib) |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
162 { |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
163 int cc; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
164 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
165 asm volatile( |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
166 "lr %%r1,%2\n" |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
167 "stsch %1\n" |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
168 "ipm %0\n" |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
169 "srl %0,28\n" |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
170 : /* output */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
171 "=d" (cc), |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
172 "=Q" (*schib) |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
173 : /* input */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
174 "d" (sch) |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
175 : /* clobbered */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
176 "cc", "r1", "memory" |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
177 ); |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
178 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
179 return cc; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
180 } |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
181 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
182 static inline int modify_sch(u32 sch, struct schib *schib) |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
183 { |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
184 int cc; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
185 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
186 asm volatile( |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
187 "lr %%r1,%1\n" |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
188 "msch 0(%2)\n" |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
189 "ipm %0\n" |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
190 "srl %0,28\n" |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
191 : /* output */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
192 "=d" (cc) |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
193 : /* input */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
194 "d" (sch), |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
195 "a" (schib) |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
196 : /* clobbered */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
197 "cc", "r1" |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
198 ); |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
199 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
200 return cc; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
201 } |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
202 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
203 static inline int start_sch(u32 sch, struct orb *orb) |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
204 { |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
205 int cc; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
206 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
207 asm volatile( |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
208 " lr %%r1,%1\n" |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
209 " ssch 0(%2)\n" |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
210 " ipm %0\n" |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
211 " srl %0,28\n" |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
212 : /* output */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
213 "=d" (cc) |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
214 : /* input */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
215 "d" (sch), |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
216 "a" (orb) |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
217 : /* clobbered */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
218 "cc", "r1" |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
219 ); |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
220 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
221 return cc; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
222 } |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
223 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
224 static inline void wait_for_io_int() |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
225 { |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
226 struct psw psw; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
227 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
228 __builtin_memset(&psw, 0, sizeof(struct psw)); |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
229 psw.io = 1; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
230 psw.ea = 1; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
231 psw.ba = 1; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
232 psw.w = 1; |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
233 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
234 asm volatile( |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
235 " larl %%r1,0f\n" |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
236 " stg %%r1,%0\n" |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
237 " lpswe %1\n" |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
238 "0:\n" |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
239 : /* output */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
240 "=m" (psw.ptr) |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
241 : /* input */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
242 "m" (psw) |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
243 : /* clobbered */ |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
244 "r1", "r2" |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
245 ); |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
246 } |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
247 |
40af39d064fa
Refactor the arch code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
248 #endif |