[S390] Cleanup cio printk messages.
[safe/jmp/linux-2.6] / drivers / s390 / cio / cio.c
index a4f9130..33bff8f 100644 (file)
@@ -74,7 +74,6 @@ out_unregister:
                debug_unregister(cio_debug_trace_id);
        if (cio_debug_crw_id)
                debug_unregister(cio_debug_crw_id);
-       printk(KERN_WARNING"cio: could not initialize debugging\n");
        return -1;
 }
 
@@ -641,7 +640,7 @@ do_IRQ (struct pt_regs *regs)
                 */
                if (tpi_info->adapter_IO == 1 &&
                    tpi_info->int_type == IO_INTERRUPT_TYPE) {
-                       do_adapter_IO();
+                       do_adapter_IO(tpi_info->isc);
                        continue;
                }
                sch = (struct subchannel *)(unsigned long)tpi_info->intparm;
@@ -755,7 +754,6 @@ cio_get_console_sch_no(void)
                /* unlike in 2.4, we cannot autoprobe here, since
                 * the channel subsystem is not fully initialized.
                 * With some luck, the HWC console can take over */
-               printk(KERN_WARNING "cio: No ccw console found!\n");
                return -1;
        }
        return console_irq;
@@ -772,6 +770,7 @@ cio_probe_console(void)
        sch_no = cio_get_console_sch_no();
        if (sch_no == -1) {
                console_subchannel_in_use = 0;
+               printk(KERN_WARNING "cio: No ccw console found!\n");
                return ERR_PTR(-ENODEV);
        }
        memset(&console_subchannel, 0, sizeof(struct subchannel));
@@ -786,12 +785,13 @@ cio_probe_console(void)
        /*
         * enable console I/O-interrupt subclass
         */
-       ctl_set_bit(6, 31 - CONSOLE_ISC);
+       isc_register(CONSOLE_ISC);
        console_subchannel.schib.pmcw.isc = CONSOLE_ISC;
        console_subchannel.schib.pmcw.intparm =
                (u32)(addr_t)&console_subchannel;
        ret = cio_modify(&console_subchannel);
        if (ret) {
+               isc_unregister(CONSOLE_ISC);
                console_subchannel_in_use = 0;
                return ERR_PTR(ret);
        }
@@ -803,7 +803,7 @@ cio_release_console(void)
 {
        console_subchannel.schib.pmcw.intparm = 0;
        cio_modify(&console_subchannel);
-       ctl_clear_bit(6, 31 - CONSOLE_ISC);
+       isc_unregister(CONSOLE_ISC);
        console_subchannel_in_use = 0;
 }
 
@@ -876,6 +876,12 @@ __clear_io_subchannel_easy(struct subchannel_id schid)
        return -EBUSY;
 }
 
+static void __clear_chsc_subchannel_easy(void)
+{
+       /* It seems we can only wait for a bit here :/ */
+       udelay_reset(100);
+}
+
 static int pgm_check_occured;
 
 static void cio_reset_pgm_check_handler(void)
@@ -919,6 +925,9 @@ static int __shutdown_subchannel_easy(struct subchannel_id schid, void *data)
                        if (__clear_io_subchannel_easy(schid))
                                goto out; /* give up... */
                        break;
+               case SUBCHANNEL_TYPE_CHSC:
+                       __clear_chsc_subchannel_easy();
+                       break;
                default:
                        /* No default clear strategy */
                        break;