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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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