152
152
hwaddr len = sizeof(*schib);
154
if (ioinst_disassemble_sch_ident(reg1, &m, &cssid, &ssid, &schid)) {
154
addr = decode_basedisp_s(env, ipb);
156
program_interrupt(env, PGM_SPECIFICATION, 2);
159
schib = s390_cpu_physical_memory_map(env, addr, &len, 0);
160
if (!schib || len != sizeof(*schib)) {
161
program_interrupt(env, PGM_ADDRESSING, 2);
165
if (ioinst_disassemble_sch_ident(reg1, &m, &cssid, &ssid, &schid) ||
166
!ioinst_schib_valid(schib)) {
155
167
program_interrupt(env, PGM_OPERAND, 2);
158
171
trace_ioinst_sch_id("msch", cssid, ssid, schid);
159
addr = decode_basedisp_s(env, ipb);
160
schib = s390_cpu_physical_memory_map(env, addr, &len, 0);
161
if (!schib || len != sizeof(*schib)) {
162
program_interrupt(env, PGM_SPECIFICATION, 2);
166
if (!ioinst_schib_valid(schib)) {
167
program_interrupt(env, PGM_OPERAND, 2);
171
172
sch = css_find_subch(m, cssid, ssid, schid);
172
173
if (sch && css_subch_visible(sch)) {
173
174
ret = css_do_msch(sch, schib);
223
224
hwaddr len = sizeof(*orig_orb);
225
if (ioinst_disassemble_sch_ident(reg1, &m, &cssid, &ssid, &schid)) {
226
program_interrupt(env, PGM_OPERAND, 2);
226
addr = decode_basedisp_s(env, ipb);
228
program_interrupt(env, PGM_SPECIFICATION, 2);
229
trace_ioinst_sch_id("ssch", cssid, ssid, schid);
230
addr = decode_basedisp_s(env, ipb);
231
231
orig_orb = s390_cpu_physical_memory_map(env, addr, &len, 0);
232
232
if (!orig_orb || len != sizeof(*orig_orb)) {
233
program_interrupt(env, PGM_SPECIFICATION, 2);
233
program_interrupt(env, PGM_ADDRESSING, 2);
237
237
copy_orb_from_guest(&orb, orig_orb);
238
if (!ioinst_orb_valid(&orb)) {
238
if (ioinst_disassemble_sch_ident(reg1, &m, &cssid, &ssid, &schid) ||
239
!ioinst_orb_valid(&orb)) {
239
240
program_interrupt(env, PGM_OPERAND, 2);
244
trace_ioinst_sch_id("ssch", cssid, ssid, schid);
243
245
sch = css_find_subch(m, cssid, ssid, schid);
244
246
if (sch && css_subch_visible(sch)) {
245
247
ret = css_do_ssch(sch, &orb);
272
274
hwaddr len = sizeof(*crw);
274
276
addr = decode_basedisp_s(env, ipb);
278
program_interrupt(env, PGM_SPECIFICATION, 2);
275
281
crw = s390_cpu_physical_memory_map(env, addr, &len, 1);
276
282
if (!crw || len != sizeof(*crw)) {
277
program_interrupt(env, PGM_SPECIFICATION, 2);
283
program_interrupt(env, PGM_ADDRESSING, 2);
295
301
hwaddr len = sizeof(*schib);
303
addr = decode_basedisp_s(env, ipb);
305
program_interrupt(env, PGM_SPECIFICATION, 2);
308
schib = s390_cpu_physical_memory_map(env, addr, &len, 1);
309
if (!schib || len != sizeof(*schib)) {
310
program_interrupt(env, PGM_ADDRESSING, 2);
297
315
if (ioinst_disassemble_sch_ident(reg1, &m, &cssid, &ssid, &schid)) {
298
316
program_interrupt(env, PGM_OPERAND, 2);
301
320
trace_ioinst_sch_id("stsch", cssid, ssid, schid);
302
addr = decode_basedisp_s(env, ipb);
303
schib = s390_cpu_physical_memory_map(env, addr, &len, 1);
304
if (!schib || len != sizeof(*schib)) {
305
program_interrupt(env, PGM_SPECIFICATION, 2);
309
321
sch = css_find_subch(m, cssid, ssid, schid);
311
323
if (css_subch_visible(sch)) {
346
358
trace_ioinst_sch_id("tsch", cssid, ssid, schid);
347
359
addr = decode_basedisp_s(env, ipb);
361
program_interrupt(env, PGM_SPECIFICATION, 2);
348
364
irb = s390_cpu_physical_memory_map(env, addr, &len, 1);
349
365
if (!irb || len != sizeof(*irb)) {
350
program_interrupt(env, PGM_SPECIFICATION, 2);
366
program_interrupt(env, PGM_ADDRESSING, 2);
581
597
req = s390_cpu_physical_memory_map(env, addr, &map_size, 1);
582
598
if (!req || map_size != TARGET_PAGE_SIZE) {
583
program_interrupt(env, PGM_SPECIFICATION, 2);
599
program_interrupt(env, PGM_ADDRESSING, 2);
626
642
trace_ioinst("tpi");
627
643
addr = decode_basedisp_s(env, ipb);
645
program_interrupt(env, PGM_SPECIFICATION, 2);
628
649
lowcore = addr ? 0 : 1;
629
650
len = lowcore ? 8 /* two words */ : 12 /* three words */;
631
652
int_code = s390_cpu_physical_memory_map(env, addr, &len, 1);
632
653
if (!int_code || (len != orig_len)) {
633
program_interrupt(env, PGM_SPECIFICATION, 2);
654
program_interrupt(env, PGM_ADDRESSING, 2);
663
684
update = SCHM_REG1_UPD(reg1);
664
685
dct = SCHM_REG1_DCT(reg1);
666
if (update && (reg2 & 0x0000000000000fff)) {
687
if (update && (reg2 & 0x000000000000001f)) {
667
688
program_interrupt(env, PGM_OPERAND, 2);