xref: /openbmc/linux/drivers/s390/cio/cio.c (revision 545e4006)
1 /*
2  *  drivers/s390/cio/cio.c
3  *   S/390 common I/O routines -- low level i/o calls
4  *
5  *    Copyright IBM Corp. 1999,2008
6  *    Author(s): Ingo Adlung (adlung@de.ibm.com)
7  *		 Cornelia Huck (cornelia.huck@de.ibm.com)
8  *		 Arnd Bergmann (arndb@de.ibm.com)
9  *		 Martin Schwidefsky (schwidefsky@de.ibm.com)
10  */
11 
12 #include <linux/module.h>
13 #include <linux/init.h>
14 #include <linux/slab.h>
15 #include <linux/device.h>
16 #include <linux/kernel_stat.h>
17 #include <linux/interrupt.h>
18 #include <asm/cio.h>
19 #include <asm/delay.h>
20 #include <asm/irq.h>
21 #include <asm/irq_regs.h>
22 #include <asm/setup.h>
23 #include <asm/reset.h>
24 #include <asm/ipl.h>
25 #include <asm/chpid.h>
26 #include <asm/airq.h>
27 #include <asm/isc.h>
28 #include <asm/cpu.h>
29 #include <asm/fcx.h>
30 #include "cio.h"
31 #include "css.h"
32 #include "chsc.h"
33 #include "ioasm.h"
34 #include "io_sch.h"
35 #include "blacklist.h"
36 #include "cio_debug.h"
37 #include "chp.h"
38 #include "../s390mach.h"
39 
40 debug_info_t *cio_debug_msg_id;
41 debug_info_t *cio_debug_trace_id;
42 debug_info_t *cio_debug_crw_id;
43 
44 /*
45  * Function: cio_debug_init
46  * Initializes three debug logs for common I/O:
47  * - cio_msg logs generic cio messages
48  * - cio_trace logs the calling of different functions
49  * - cio_crw logs machine check related cio messages
50  */
51 static int __init cio_debug_init(void)
52 {
53 	cio_debug_msg_id = debug_register("cio_msg", 16, 1, 16 * sizeof(long));
54 	if (!cio_debug_msg_id)
55 		goto out_unregister;
56 	debug_register_view(cio_debug_msg_id, &debug_sprintf_view);
57 	debug_set_level(cio_debug_msg_id, 2);
58 	cio_debug_trace_id = debug_register("cio_trace", 16, 1, 16);
59 	if (!cio_debug_trace_id)
60 		goto out_unregister;
61 	debug_register_view(cio_debug_trace_id, &debug_hex_ascii_view);
62 	debug_set_level(cio_debug_trace_id, 2);
63 	cio_debug_crw_id = debug_register("cio_crw", 16, 1, 16 * sizeof(long));
64 	if (!cio_debug_crw_id)
65 		goto out_unregister;
66 	debug_register_view(cio_debug_crw_id, &debug_sprintf_view);
67 	debug_set_level(cio_debug_crw_id, 4);
68 	return 0;
69 
70 out_unregister:
71 	if (cio_debug_msg_id)
72 		debug_unregister(cio_debug_msg_id);
73 	if (cio_debug_trace_id)
74 		debug_unregister(cio_debug_trace_id);
75 	if (cio_debug_crw_id)
76 		debug_unregister(cio_debug_crw_id);
77 	return -1;
78 }
79 
80 arch_initcall (cio_debug_init);
81 
82 int
83 cio_set_options (struct subchannel *sch, int flags)
84 {
85        sch->options.suspend = (flags & DOIO_ALLOW_SUSPEND) != 0;
86        sch->options.prefetch = (flags & DOIO_DENY_PREFETCH) != 0;
87        sch->options.inter = (flags & DOIO_SUPPRESS_INTER) != 0;
88        return 0;
89 }
90 
91 /* FIXME: who wants to use this? */
92 int
93 cio_get_options (struct subchannel *sch)
94 {
95        int flags;
96 
97        flags = 0;
98        if (sch->options.suspend)
99 		flags |= DOIO_ALLOW_SUSPEND;
100        if (sch->options.prefetch)
101 		flags |= DOIO_DENY_PREFETCH;
102        if (sch->options.inter)
103 		flags |= DOIO_SUPPRESS_INTER;
104        return flags;
105 }
106 
107 /*
108  * Use tpi to get a pending interrupt, call the interrupt handler and
109  * return a pointer to the subchannel structure.
110  */
111 static int
112 cio_tpi(void)
113 {
114 	struct tpi_info *tpi_info;
115 	struct subchannel *sch;
116 	struct irb *irb;
117 
118 	tpi_info = (struct tpi_info *) __LC_SUBCHANNEL_ID;
119 	if (tpi (NULL) != 1)
120 		return 0;
121 	irb = (struct irb *) __LC_IRB;
122 	/* Store interrupt response block to lowcore. */
123 	if (tsch (tpi_info->schid, irb) != 0)
124 		/* Not status pending or not operational. */
125 		return 1;
126 	sch = (struct subchannel *)(unsigned long)tpi_info->intparm;
127 	if (!sch)
128 		return 1;
129 	local_bh_disable();
130 	irq_enter ();
131 	spin_lock(sch->lock);
132 	memcpy(&sch->schib.scsw, &irb->scsw, sizeof(union scsw));
133 	if (sch->driver && sch->driver->irq)
134 		sch->driver->irq(sch);
135 	spin_unlock(sch->lock);
136 	irq_exit ();
137 	_local_bh_enable();
138 	return 1;
139 }
140 
141 static int
142 cio_start_handle_notoper(struct subchannel *sch, __u8 lpm)
143 {
144 	char dbf_text[15];
145 
146 	if (lpm != 0)
147 		sch->lpm &= ~lpm;
148 	else
149 		sch->lpm = 0;
150 
151 	stsch (sch->schid, &sch->schib);
152 
153 	CIO_MSG_EVENT(2, "cio_start: 'not oper' status for "
154 		      "subchannel 0.%x.%04x!\n", sch->schid.ssid,
155 		      sch->schid.sch_no);
156 	sprintf(dbf_text, "no%s", sch->dev.bus_id);
157 	CIO_TRACE_EVENT(0, dbf_text);
158 	CIO_HEX_EVENT(0, &sch->schib, sizeof (struct schib));
159 
160 	return (sch->lpm ? -EACCES : -ENODEV);
161 }
162 
163 int
164 cio_start_key (struct subchannel *sch,	/* subchannel structure */
165 	       struct ccw1 * cpa,	/* logical channel prog addr */
166 	       __u8 lpm,		/* logical path mask */
167 	       __u8 key)                /* storage key */
168 {
169 	char dbf_txt[15];
170 	int ccode;
171 	union orb *orb;
172 
173 	CIO_TRACE_EVENT(4, "stIO");
174 	CIO_TRACE_EVENT(4, sch->dev.bus_id);
175 
176 	orb = &to_io_private(sch)->orb;
177 	/* sch is always under 2G. */
178 	orb->cmd.intparm = (u32)(addr_t)sch;
179 	orb->cmd.fmt = 1;
180 
181 	orb->cmd.pfch = sch->options.prefetch == 0;
182 	orb->cmd.spnd = sch->options.suspend;
183 	orb->cmd.ssic = sch->options.suspend && sch->options.inter;
184 	orb->cmd.lpm = (lpm != 0) ? lpm : sch->lpm;
185 #ifdef CONFIG_64BIT
186 	/*
187 	 * for 64 bit we always support 64 bit IDAWs with 4k page size only
188 	 */
189 	orb->cmd.c64 = 1;
190 	orb->cmd.i2k = 0;
191 #endif
192 	orb->cmd.key = key >> 4;
193 	/* issue "Start Subchannel" */
194 	orb->cmd.cpa = (__u32) __pa(cpa);
195 	ccode = ssch(sch->schid, orb);
196 
197 	/* process condition code */
198 	sprintf(dbf_txt, "ccode:%d", ccode);
199 	CIO_TRACE_EVENT(4, dbf_txt);
200 
201 	switch (ccode) {
202 	case 0:
203 		/*
204 		 * initialize device status information
205 		 */
206 		sch->schib.scsw.cmd.actl |= SCSW_ACTL_START_PEND;
207 		return 0;
208 	case 1:		/* status pending */
209 	case 2:		/* busy */
210 		return -EBUSY;
211 	default:		/* device/path not operational */
212 		return cio_start_handle_notoper(sch, lpm);
213 	}
214 }
215 
216 int
217 cio_start (struct subchannel *sch, struct ccw1 *cpa, __u8 lpm)
218 {
219 	return cio_start_key(sch, cpa, lpm, PAGE_DEFAULT_KEY);
220 }
221 
222 /*
223  * resume suspended I/O operation
224  */
225 int
226 cio_resume (struct subchannel *sch)
227 {
228 	char dbf_txt[15];
229 	int ccode;
230 
231 	CIO_TRACE_EVENT (4, "resIO");
232 	CIO_TRACE_EVENT (4, sch->dev.bus_id);
233 
234 	ccode = rsch (sch->schid);
235 
236 	sprintf (dbf_txt, "ccode:%d", ccode);
237 	CIO_TRACE_EVENT (4, dbf_txt);
238 
239 	switch (ccode) {
240 	case 0:
241 		sch->schib.scsw.cmd.actl |= SCSW_ACTL_RESUME_PEND;
242 		return 0;
243 	case 1:
244 		return -EBUSY;
245 	case 2:
246 		return -EINVAL;
247 	default:
248 		/*
249 		 * useless to wait for request completion
250 		 *  as device is no longer operational !
251 		 */
252 		return -ENODEV;
253 	}
254 }
255 
256 /*
257  * halt I/O operation
258  */
259 int
260 cio_halt(struct subchannel *sch)
261 {
262 	char dbf_txt[15];
263 	int ccode;
264 
265 	if (!sch)
266 		return -ENODEV;
267 
268 	CIO_TRACE_EVENT (2, "haltIO");
269 	CIO_TRACE_EVENT (2, sch->dev.bus_id);
270 
271 	/*
272 	 * Issue "Halt subchannel" and process condition code
273 	 */
274 	ccode = hsch (sch->schid);
275 
276 	sprintf (dbf_txt, "ccode:%d", ccode);
277 	CIO_TRACE_EVENT (2, dbf_txt);
278 
279 	switch (ccode) {
280 	case 0:
281 		sch->schib.scsw.cmd.actl |= SCSW_ACTL_HALT_PEND;
282 		return 0;
283 	case 1:		/* status pending */
284 	case 2:		/* busy */
285 		return -EBUSY;
286 	default:		/* device not operational */
287 		return -ENODEV;
288 	}
289 }
290 
291 /*
292  * Clear I/O operation
293  */
294 int
295 cio_clear(struct subchannel *sch)
296 {
297 	char dbf_txt[15];
298 	int ccode;
299 
300 	if (!sch)
301 		return -ENODEV;
302 
303 	CIO_TRACE_EVENT (2, "clearIO");
304 	CIO_TRACE_EVENT (2, sch->dev.bus_id);
305 
306 	/*
307 	 * Issue "Clear subchannel" and process condition code
308 	 */
309 	ccode = csch (sch->schid);
310 
311 	sprintf (dbf_txt, "ccode:%d", ccode);
312 	CIO_TRACE_EVENT (2, dbf_txt);
313 
314 	switch (ccode) {
315 	case 0:
316 		sch->schib.scsw.cmd.actl |= SCSW_ACTL_CLEAR_PEND;
317 		return 0;
318 	default:		/* device not operational */
319 		return -ENODEV;
320 	}
321 }
322 
323 /*
324  * Function: cio_cancel
325  * Issues a "Cancel Subchannel" on the specified subchannel
326  * Note: We don't need any fancy intparms and flags here
327  *	 since xsch is executed synchronously.
328  * Only for common I/O internal use as for now.
329  */
330 int
331 cio_cancel (struct subchannel *sch)
332 {
333 	char dbf_txt[15];
334 	int ccode;
335 
336 	if (!sch)
337 		return -ENODEV;
338 
339 	CIO_TRACE_EVENT (2, "cancelIO");
340 	CIO_TRACE_EVENT (2, sch->dev.bus_id);
341 
342 	ccode = xsch (sch->schid);
343 
344 	sprintf (dbf_txt, "ccode:%d", ccode);
345 	CIO_TRACE_EVENT (2, dbf_txt);
346 
347 	switch (ccode) {
348 	case 0:		/* success */
349 		/* Update information in scsw. */
350 		stsch (sch->schid, &sch->schib);
351 		return 0;
352 	case 1:		/* status pending */
353 		return -EBUSY;
354 	case 2:		/* not applicable */
355 		return -EINVAL;
356 	default:	/* not oper */
357 		return -ENODEV;
358 	}
359 }
360 
361 /*
362  * Function: cio_modify
363  * Issues a "Modify Subchannel" on the specified subchannel
364  */
365 int
366 cio_modify (struct subchannel *sch)
367 {
368 	int ccode, retry, ret;
369 
370 	ret = 0;
371 	for (retry = 0; retry < 5; retry++) {
372 		ccode = msch_err (sch->schid, &sch->schib);
373 		if (ccode < 0)	/* -EIO if msch gets a program check. */
374 			return ccode;
375 		switch (ccode) {
376 		case 0: /* successfull */
377 			return 0;
378 		case 1:	/* status pending */
379 			return -EBUSY;
380 		case 2:	/* busy */
381 			udelay (100);	/* allow for recovery */
382 			ret = -EBUSY;
383 			break;
384 		case 3:	/* not operational */
385 			return -ENODEV;
386 		}
387 	}
388 	return ret;
389 }
390 
391 /**
392  * cio_enable_subchannel - enable a subchannel.
393  * @sch: subchannel to be enabled
394  * @intparm: interruption parameter to set
395  */
396 int cio_enable_subchannel(struct subchannel *sch, u32 intparm)
397 {
398 	char dbf_txt[15];
399 	int ccode;
400 	int retry;
401 	int ret;
402 
403 	CIO_TRACE_EVENT (2, "ensch");
404 	CIO_TRACE_EVENT (2, sch->dev.bus_id);
405 
406 	if (sch_is_pseudo_sch(sch))
407 		return -EINVAL;
408 	ccode = stsch (sch->schid, &sch->schib);
409 	if (ccode)
410 		return -ENODEV;
411 
412 	for (retry = 5, ret = 0; retry > 0; retry--) {
413 		sch->schib.pmcw.ena = 1;
414 		sch->schib.pmcw.isc = sch->isc;
415 		sch->schib.pmcw.intparm = intparm;
416 		ret = cio_modify(sch);
417 		if (ret == -ENODEV)
418 			break;
419 		if (ret == -EIO)
420 			/*
421 			 * Got a program check in cio_modify. Try without
422 			 * the concurrent sense bit the next time.
423 			 */
424 			sch->schib.pmcw.csense = 0;
425 		if (ret == 0) {
426 			stsch (sch->schid, &sch->schib);
427 			if (sch->schib.pmcw.ena)
428 				break;
429 		}
430 		if (ret == -EBUSY) {
431 			struct irb irb;
432 			if (tsch(sch->schid, &irb) != 0)
433 				break;
434 		}
435 	}
436 	sprintf (dbf_txt, "ret:%d", ret);
437 	CIO_TRACE_EVENT (2, dbf_txt);
438 	return ret;
439 }
440 EXPORT_SYMBOL_GPL(cio_enable_subchannel);
441 
442 /**
443  * cio_disable_subchannel - disable a subchannel.
444  * @sch: subchannel to disable
445  */
446 int cio_disable_subchannel(struct subchannel *sch)
447 {
448 	char dbf_txt[15];
449 	int ccode;
450 	int retry;
451 	int ret;
452 
453 	CIO_TRACE_EVENT (2, "dissch");
454 	CIO_TRACE_EVENT (2, sch->dev.bus_id);
455 
456 	if (sch_is_pseudo_sch(sch))
457 		return 0;
458 	ccode = stsch (sch->schid, &sch->schib);
459 	if (ccode == 3)		/* Not operational. */
460 		return -ENODEV;
461 
462 	if (scsw_actl(&sch->schib.scsw) != 0)
463 		/*
464 		 * the disable function must not be called while there are
465 		 *  requests pending for completion !
466 		 */
467 		return -EBUSY;
468 
469 	for (retry = 5, ret = 0; retry > 0; retry--) {
470 		sch->schib.pmcw.ena = 0;
471 		ret = cio_modify(sch);
472 		if (ret == -ENODEV)
473 			break;
474 		if (ret == -EBUSY)
475 			/*
476 			 * The subchannel is busy or status pending.
477 			 * We'll disable when the next interrupt was delivered
478 			 * via the state machine.
479 			 */
480 			break;
481 		if (ret == 0) {
482 			stsch (sch->schid, &sch->schib);
483 			if (!sch->schib.pmcw.ena)
484 				break;
485 		}
486 	}
487 	sprintf (dbf_txt, "ret:%d", ret);
488 	CIO_TRACE_EVENT (2, dbf_txt);
489 	return ret;
490 }
491 EXPORT_SYMBOL_GPL(cio_disable_subchannel);
492 
493 int cio_create_sch_lock(struct subchannel *sch)
494 {
495 	sch->lock = kmalloc(sizeof(spinlock_t), GFP_KERNEL);
496 	if (!sch->lock)
497 		return -ENOMEM;
498 	spin_lock_init(sch->lock);
499 	return 0;
500 }
501 
502 static int cio_check_devno_blacklisted(struct subchannel *sch)
503 {
504 	if (is_blacklisted(sch->schid.ssid, sch->schib.pmcw.dev)) {
505 		/*
506 		 * This device must not be known to Linux. So we simply
507 		 * say that there is no device and return ENODEV.
508 		 */
509 		CIO_MSG_EVENT(6, "Blacklisted device detected "
510 			      "at devno %04X, subchannel set %x\n",
511 			      sch->schib.pmcw.dev, sch->schid.ssid);
512 		return -ENODEV;
513 	}
514 	return 0;
515 }
516 
517 static int cio_validate_io_subchannel(struct subchannel *sch)
518 {
519 	/* Initialization for io subchannels. */
520 	if (!css_sch_is_valid(&sch->schib))
521 		return -ENODEV;
522 
523 	/* Devno is valid. */
524 	return cio_check_devno_blacklisted(sch);
525 }
526 
527 static int cio_validate_msg_subchannel(struct subchannel *sch)
528 {
529 	/* Initialization for message subchannels. */
530 	if (!css_sch_is_valid(&sch->schib))
531 		return -ENODEV;
532 
533 	/* Devno is valid. */
534 	return cio_check_devno_blacklisted(sch);
535 }
536 
537 /**
538  * cio_validate_subchannel - basic validation of subchannel
539  * @sch: subchannel structure to be filled out
540  * @schid: subchannel id
541  *
542  * Find out subchannel type and initialize struct subchannel.
543  * Return codes:
544  *   0 on success
545  *   -ENXIO for non-defined subchannels
546  *   -ENODEV for invalid subchannels or blacklisted devices
547  *   -EIO for subchannels in an invalid subchannel set
548  */
549 int cio_validate_subchannel(struct subchannel *sch, struct subchannel_id schid)
550 {
551 	char dbf_txt[15];
552 	int ccode;
553 	int err;
554 
555 	sprintf(dbf_txt, "valsch%x", schid.sch_no);
556 	CIO_TRACE_EVENT(4, dbf_txt);
557 
558 	/* Nuke all fields. */
559 	memset(sch, 0, sizeof(struct subchannel));
560 
561 	sch->schid = schid;
562 	if (cio_is_console(schid)) {
563 		sch->lock = cio_get_console_lock();
564 	} else {
565 		err = cio_create_sch_lock(sch);
566 		if (err)
567 			goto out;
568 	}
569 	mutex_init(&sch->reg_mutex);
570 	/* Set a name for the subchannel */
571 	snprintf (sch->dev.bus_id, BUS_ID_SIZE, "0.%x.%04x", schid.ssid,
572 		  schid.sch_no);
573 
574 	/*
575 	 * The first subchannel that is not-operational (ccode==3)
576 	 *  indicates that there aren't any more devices available.
577 	 * If stsch gets an exception, it means the current subchannel set
578 	 *  is not valid.
579 	 */
580 	ccode = stsch_err (schid, &sch->schib);
581 	if (ccode) {
582 		err = (ccode == 3) ? -ENXIO : ccode;
583 		goto out;
584 	}
585 	/* Copy subchannel type from path management control word. */
586 	sch->st = sch->schib.pmcw.st;
587 
588 	switch (sch->st) {
589 	case SUBCHANNEL_TYPE_IO:
590 		err = cio_validate_io_subchannel(sch);
591 		break;
592 	case SUBCHANNEL_TYPE_MSG:
593 		err = cio_validate_msg_subchannel(sch);
594 		break;
595 	default:
596 		err = 0;
597 	}
598 	if (err)
599 		goto out;
600 
601 	CIO_MSG_EVENT(4, "Subchannel 0.%x.%04x reports subchannel type %04X\n",
602 		      sch->schid.ssid, sch->schid.sch_no, sch->st);
603 	return 0;
604 out:
605 	if (!cio_is_console(schid))
606 		kfree(sch->lock);
607 	sch->lock = NULL;
608 	return err;
609 }
610 
611 /*
612  * do_IRQ() handles all normal I/O device IRQ's (the special
613  *	    SMP cross-CPU interrupts have their own specific
614  *	    handlers).
615  *
616  */
617 void
618 do_IRQ (struct pt_regs *regs)
619 {
620 	struct tpi_info *tpi_info;
621 	struct subchannel *sch;
622 	struct irb *irb;
623 	struct pt_regs *old_regs;
624 
625 	old_regs = set_irq_regs(regs);
626 	irq_enter();
627 	s390_idle_check();
628 	if (S390_lowcore.int_clock >= S390_lowcore.clock_comparator)
629 		/* Serve timer interrupts first. */
630 		clock_comparator_work();
631 	/*
632 	 * Get interrupt information from lowcore
633 	 */
634 	tpi_info = (struct tpi_info *) __LC_SUBCHANNEL_ID;
635 	irb = (struct irb *) __LC_IRB;
636 	do {
637 		kstat_cpu(smp_processor_id()).irqs[IO_INTERRUPT]++;
638 		/*
639 		 * Non I/O-subchannel thin interrupts are processed differently
640 		 */
641 		if (tpi_info->adapter_IO == 1 &&
642 		    tpi_info->int_type == IO_INTERRUPT_TYPE) {
643 			do_adapter_IO(tpi_info->isc);
644 			continue;
645 		}
646 		sch = (struct subchannel *)(unsigned long)tpi_info->intparm;
647 		if (!sch) {
648 			/* Clear pending interrupt condition. */
649 			tsch(tpi_info->schid, irb);
650 			continue;
651 		}
652 		spin_lock(sch->lock);
653 		/* Store interrupt response block to lowcore. */
654 		if (tsch(tpi_info->schid, irb) == 0) {
655 			/* Keep subchannel information word up to date. */
656 			memcpy (&sch->schib.scsw, &irb->scsw,
657 				sizeof (irb->scsw));
658 			/* Call interrupt handler if there is one. */
659 			if (sch->driver && sch->driver->irq)
660 				sch->driver->irq(sch);
661 		}
662 		spin_unlock(sch->lock);
663 		/*
664 		 * Are more interrupts pending?
665 		 * If so, the tpi instruction will update the lowcore
666 		 * to hold the info for the next interrupt.
667 		 * We don't do this for VM because a tpi drops the cpu
668 		 * out of the sie which costs more cycles than it saves.
669 		 */
670 	} while (!MACHINE_IS_VM && tpi (NULL) != 0);
671 	irq_exit();
672 	set_irq_regs(old_regs);
673 }
674 
675 #ifdef CONFIG_CCW_CONSOLE
676 static struct subchannel console_subchannel;
677 static struct io_subchannel_private console_priv;
678 static int console_subchannel_in_use;
679 
680 void *cio_get_console_priv(void)
681 {
682 	return &console_priv;
683 }
684 
685 /*
686  * busy wait for the next interrupt on the console
687  */
688 void wait_cons_dev(void)
689 	__releases(console_subchannel.lock)
690 	__acquires(console_subchannel.lock)
691 {
692 	unsigned long cr6      __attribute__ ((aligned (8)));
693 	unsigned long save_cr6 __attribute__ ((aligned (8)));
694 
695 	/*
696 	 * before entering the spinlock we may already have
697 	 * processed the interrupt on a different CPU...
698 	 */
699 	if (!console_subchannel_in_use)
700 		return;
701 
702 	/* disable all but the console isc */
703 	__ctl_store (save_cr6, 6, 6);
704 	cr6 = 1UL << (31 - CONSOLE_ISC);
705 	__ctl_load (cr6, 6, 6);
706 
707 	do {
708 		spin_unlock(console_subchannel.lock);
709 		if (!cio_tpi())
710 			cpu_relax();
711 		spin_lock(console_subchannel.lock);
712 	} while (console_subchannel.schib.scsw.cmd.actl != 0);
713 	/*
714 	 * restore previous isc value
715 	 */
716 	__ctl_load (save_cr6, 6, 6);
717 }
718 
719 static int
720 cio_test_for_console(struct subchannel_id schid, void *data)
721 {
722 	if (stsch_err(schid, &console_subchannel.schib) != 0)
723 		return -ENXIO;
724 	if ((console_subchannel.schib.pmcw.st == SUBCHANNEL_TYPE_IO) &&
725 	    console_subchannel.schib.pmcw.dnv &&
726 	    (console_subchannel.schib.pmcw.dev == console_devno)) {
727 		console_irq = schid.sch_no;
728 		return 1; /* found */
729 	}
730 	return 0;
731 }
732 
733 
734 static int
735 cio_get_console_sch_no(void)
736 {
737 	struct subchannel_id schid;
738 
739 	init_subchannel_id(&schid);
740 	if (console_irq != -1) {
741 		/* VM provided us with the irq number of the console. */
742 		schid.sch_no = console_irq;
743 		if (stsch(schid, &console_subchannel.schib) != 0 ||
744 		    (console_subchannel.schib.pmcw.st != SUBCHANNEL_TYPE_IO) ||
745 		    !console_subchannel.schib.pmcw.dnv)
746 			return -1;
747 		console_devno = console_subchannel.schib.pmcw.dev;
748 	} else if (console_devno != -1) {
749 		/* At least the console device number is known. */
750 		for_each_subchannel(cio_test_for_console, NULL);
751 		if (console_irq == -1)
752 			return -1;
753 	} else {
754 		/* unlike in 2.4, we cannot autoprobe here, since
755 		 * the channel subsystem is not fully initialized.
756 		 * With some luck, the HWC console can take over */
757 		return -1;
758 	}
759 	return console_irq;
760 }
761 
762 struct subchannel *
763 cio_probe_console(void)
764 {
765 	int sch_no, ret;
766 	struct subchannel_id schid;
767 
768 	if (xchg(&console_subchannel_in_use, 1) != 0)
769 		return ERR_PTR(-EBUSY);
770 	sch_no = cio_get_console_sch_no();
771 	if (sch_no == -1) {
772 		console_subchannel_in_use = 0;
773 		printk(KERN_WARNING "cio: No ccw console found!\n");
774 		return ERR_PTR(-ENODEV);
775 	}
776 	memset(&console_subchannel, 0, sizeof(struct subchannel));
777 	init_subchannel_id(&schid);
778 	schid.sch_no = sch_no;
779 	ret = cio_validate_subchannel(&console_subchannel, schid);
780 	if (ret) {
781 		console_subchannel_in_use = 0;
782 		return ERR_PTR(-ENODEV);
783 	}
784 
785 	/*
786 	 * enable console I/O-interrupt subclass
787 	 */
788 	isc_register(CONSOLE_ISC);
789 	console_subchannel.schib.pmcw.isc = CONSOLE_ISC;
790 	console_subchannel.schib.pmcw.intparm =
791 		(u32)(addr_t)&console_subchannel;
792 	ret = cio_modify(&console_subchannel);
793 	if (ret) {
794 		isc_unregister(CONSOLE_ISC);
795 		console_subchannel_in_use = 0;
796 		return ERR_PTR(ret);
797 	}
798 	return &console_subchannel;
799 }
800 
801 void
802 cio_release_console(void)
803 {
804 	console_subchannel.schib.pmcw.intparm = 0;
805 	cio_modify(&console_subchannel);
806 	isc_unregister(CONSOLE_ISC);
807 	console_subchannel_in_use = 0;
808 }
809 
810 /* Bah... hack to catch console special sausages. */
811 int
812 cio_is_console(struct subchannel_id schid)
813 {
814 	if (!console_subchannel_in_use)
815 		return 0;
816 	return schid_equal(&schid, &console_subchannel.schid);
817 }
818 
819 struct subchannel *
820 cio_get_console_subchannel(void)
821 {
822 	if (!console_subchannel_in_use)
823 		return NULL;
824 	return &console_subchannel;
825 }
826 
827 #endif
828 static int
829 __disable_subchannel_easy(struct subchannel_id schid, struct schib *schib)
830 {
831 	int retry, cc;
832 
833 	cc = 0;
834 	for (retry=0;retry<3;retry++) {
835 		schib->pmcw.ena = 0;
836 		cc = msch(schid, schib);
837 		if (cc)
838 			return (cc==3?-ENODEV:-EBUSY);
839 		stsch(schid, schib);
840 		if (!schib->pmcw.ena)
841 			return 0;
842 	}
843 	return -EBUSY; /* uhm... */
844 }
845 
846 /* we can't use the normal udelay here, since it enables external interrupts */
847 
848 static void udelay_reset(unsigned long usecs)
849 {
850 	uint64_t start_cc, end_cc;
851 
852 	asm volatile ("STCK %0" : "=m" (start_cc));
853 	do {
854 		cpu_relax();
855 		asm volatile ("STCK %0" : "=m" (end_cc));
856 	} while (((end_cc - start_cc)/4096) < usecs);
857 }
858 
859 static int
860 __clear_io_subchannel_easy(struct subchannel_id schid)
861 {
862 	int retry;
863 
864 	if (csch(schid))
865 		return -ENODEV;
866 	for (retry=0;retry<20;retry++) {
867 		struct tpi_info ti;
868 
869 		if (tpi(&ti)) {
870 			tsch(ti.schid, (struct irb *)__LC_IRB);
871 			if (schid_equal(&ti.schid, &schid))
872 				return 0;
873 		}
874 		udelay_reset(100);
875 	}
876 	return -EBUSY;
877 }
878 
879 static void __clear_chsc_subchannel_easy(void)
880 {
881 	/* It seems we can only wait for a bit here :/ */
882 	udelay_reset(100);
883 }
884 
885 static int pgm_check_occured;
886 
887 static void cio_reset_pgm_check_handler(void)
888 {
889 	pgm_check_occured = 1;
890 }
891 
892 static int stsch_reset(struct subchannel_id schid, volatile struct schib *addr)
893 {
894 	int rc;
895 
896 	pgm_check_occured = 0;
897 	s390_base_pgm_handler_fn = cio_reset_pgm_check_handler;
898 	rc = stsch(schid, addr);
899 	s390_base_pgm_handler_fn = NULL;
900 
901 	/* The program check handler could have changed pgm_check_occured. */
902 	barrier();
903 
904 	if (pgm_check_occured)
905 		return -EIO;
906 	else
907 		return rc;
908 }
909 
910 static int __shutdown_subchannel_easy(struct subchannel_id schid, void *data)
911 {
912 	struct schib schib;
913 
914 	if (stsch_reset(schid, &schib))
915 		return -ENXIO;
916 	if (!schib.pmcw.ena)
917 		return 0;
918 	switch(__disable_subchannel_easy(schid, &schib)) {
919 	case 0:
920 	case -ENODEV:
921 		break;
922 	default: /* -EBUSY */
923 		switch (schib.pmcw.st) {
924 		case SUBCHANNEL_TYPE_IO:
925 			if (__clear_io_subchannel_easy(schid))
926 				goto out; /* give up... */
927 			break;
928 		case SUBCHANNEL_TYPE_CHSC:
929 			__clear_chsc_subchannel_easy();
930 			break;
931 		default:
932 			/* No default clear strategy */
933 			break;
934 		}
935 		stsch(schid, &schib);
936 		__disable_subchannel_easy(schid, &schib);
937 	}
938 out:
939 	return 0;
940 }
941 
942 static atomic_t chpid_reset_count;
943 
944 static void s390_reset_chpids_mcck_handler(void)
945 {
946 	struct crw crw;
947 	struct mci *mci;
948 
949 	/* Check for pending channel report word. */
950 	mci = (struct mci *)&S390_lowcore.mcck_interruption_code;
951 	if (!mci->cp)
952 		return;
953 	/* Process channel report words. */
954 	while (stcrw(&crw) == 0) {
955 		/* Check for responses to RCHP. */
956 		if (crw.slct && crw.rsc == CRW_RSC_CPATH)
957 			atomic_dec(&chpid_reset_count);
958 	}
959 }
960 
961 #define RCHP_TIMEOUT (30 * USEC_PER_SEC)
962 static void css_reset(void)
963 {
964 	int i, ret;
965 	unsigned long long timeout;
966 	struct chp_id chpid;
967 
968 	/* Reset subchannels. */
969 	for_each_subchannel(__shutdown_subchannel_easy,  NULL);
970 	/* Reset channel paths. */
971 	s390_base_mcck_handler_fn = s390_reset_chpids_mcck_handler;
972 	/* Enable channel report machine checks. */
973 	__ctl_set_bit(14, 28);
974 	/* Temporarily reenable machine checks. */
975 	local_mcck_enable();
976 	chp_id_init(&chpid);
977 	for (i = 0; i <= __MAX_CHPID; i++) {
978 		chpid.id = i;
979 		ret = rchp(chpid);
980 		if ((ret == 0) || (ret == 2))
981 			/*
982 			 * rchp either succeeded, or another rchp is already
983 			 * in progress. In either case, we'll get a crw.
984 			 */
985 			atomic_inc(&chpid_reset_count);
986 	}
987 	/* Wait for machine check for all channel paths. */
988 	timeout = get_clock() + (RCHP_TIMEOUT << 12);
989 	while (atomic_read(&chpid_reset_count) != 0) {
990 		if (get_clock() > timeout)
991 			break;
992 		cpu_relax();
993 	}
994 	/* Disable machine checks again. */
995 	local_mcck_disable();
996 	/* Disable channel report machine checks. */
997 	__ctl_clear_bit(14, 28);
998 	s390_base_mcck_handler_fn = NULL;
999 }
1000 
1001 static struct reset_call css_reset_call = {
1002 	.fn = css_reset,
1003 };
1004 
1005 static int __init init_css_reset_call(void)
1006 {
1007 	atomic_set(&chpid_reset_count, 0);
1008 	register_reset_call(&css_reset_call);
1009 	return 0;
1010 }
1011 
1012 arch_initcall(init_css_reset_call);
1013 
1014 struct sch_match_id {
1015 	struct subchannel_id schid;
1016 	struct ccw_dev_id devid;
1017 	int rc;
1018 };
1019 
1020 static int __reipl_subchannel_match(struct subchannel_id schid, void *data)
1021 {
1022 	struct schib schib;
1023 	struct sch_match_id *match_id = data;
1024 
1025 	if (stsch_reset(schid, &schib))
1026 		return -ENXIO;
1027 	if ((schib.pmcw.st == SUBCHANNEL_TYPE_IO) && schib.pmcw.dnv &&
1028 	    (schib.pmcw.dev == match_id->devid.devno) &&
1029 	    (schid.ssid == match_id->devid.ssid)) {
1030 		match_id->schid = schid;
1031 		match_id->rc = 0;
1032 		return 1;
1033 	}
1034 	return 0;
1035 }
1036 
1037 static int reipl_find_schid(struct ccw_dev_id *devid,
1038 			    struct subchannel_id *schid)
1039 {
1040 	struct sch_match_id match_id;
1041 
1042 	match_id.devid = *devid;
1043 	match_id.rc = -ENODEV;
1044 	for_each_subchannel(__reipl_subchannel_match, &match_id);
1045 	if (match_id.rc == 0)
1046 		*schid = match_id.schid;
1047 	return match_id.rc;
1048 }
1049 
1050 extern void do_reipl_asm(__u32 schid);
1051 
1052 /* Make sure all subchannels are quiet before we re-ipl an lpar. */
1053 void reipl_ccw_dev(struct ccw_dev_id *devid)
1054 {
1055 	struct subchannel_id schid;
1056 
1057 	s390_reset_system();
1058 	if (reipl_find_schid(devid, &schid) != 0)
1059 		panic("IPL Device not found\n");
1060 	do_reipl_asm(*((__u32*)&schid));
1061 }
1062 
1063 int __init cio_get_iplinfo(struct cio_iplinfo *iplinfo)
1064 {
1065 	struct subchannel_id schid;
1066 	struct schib schib;
1067 
1068 	schid = *(struct subchannel_id *)__LC_SUBCHANNEL_ID;
1069 	if (!schid.one)
1070 		return -ENODEV;
1071 	if (stsch(schid, &schib))
1072 		return -ENODEV;
1073 	if (schib.pmcw.st != SUBCHANNEL_TYPE_IO)
1074 		return -ENODEV;
1075 	if (!schib.pmcw.dnv)
1076 		return -ENODEV;
1077 	iplinfo->devno = schib.pmcw.dev;
1078 	iplinfo->is_qdio = schib.pmcw.qf;
1079 	return 0;
1080 }
1081 
1082 /**
1083  * cio_tm_start_key - perform start function
1084  * @sch: subchannel on which to perform the start function
1085  * @tcw: transport-command word to be started
1086  * @lpm: mask of paths to use
1087  * @key: storage key to use for storage access
1088  *
1089  * Start the tcw on the given subchannel. Return zero on success, non-zero
1090  * otherwise.
1091  */
1092 int cio_tm_start_key(struct subchannel *sch, struct tcw *tcw, u8 lpm, u8 key)
1093 {
1094 	int cc;
1095 	union orb *orb = &to_io_private(sch)->orb;
1096 
1097 	memset(orb, 0, sizeof(union orb));
1098 	orb->tm.intparm = (u32) (addr_t) sch;
1099 	orb->tm.key = key >> 4;
1100 	orb->tm.b = 1;
1101 	orb->tm.lpm = lpm ? lpm : sch->lpm;
1102 	orb->tm.tcw = (u32) (addr_t) tcw;
1103 	cc = ssch(sch->schid, orb);
1104 	switch (cc) {
1105 	case 0:
1106 		return 0;
1107 	case 1:
1108 	case 2:
1109 		return -EBUSY;
1110 	default:
1111 		return cio_start_handle_notoper(sch, lpm);
1112 	}
1113 }
1114 
1115 /**
1116  * cio_tm_intrg - perform interrogate function
1117  * @sch - subchannel on which to perform the interrogate function
1118  *
1119  * If the specified subchannel is running in transport-mode, perform the
1120  * interrogate function. Return zero on success, non-zero otherwie.
1121  */
1122 int cio_tm_intrg(struct subchannel *sch)
1123 {
1124 	int cc;
1125 
1126 	if (!to_io_private(sch)->orb.tm.b)
1127 		return -EINVAL;
1128 	cc = xsch(sch->schid);
1129 	switch (cc) {
1130 	case 0:
1131 	case 2:
1132 		return 0;
1133 	case 1:
1134 		return -EBUSY;
1135 	default:
1136 		return -ENODEV;
1137 	}
1138 }
1139