Lines Matching refs:sch

150 static int io_subchannel_prepare(struct subchannel *sch)
157 cdev = sch_get_cdev(sch);
220 struct subchannel *sch = to_subchannel(dev);
221 struct chsc_ssd_info *ssd = &sch->ssd_info;
240 struct subchannel *sch = to_subchannel(dev);
241 struct pmcw *pmcw = &sch->schib.pmcw;
323 struct subchannel *sch;
337 sch = to_subchannel(cdev->dev.parent);
358 io_subchannel_quiesce(sch);
592 struct subchannel *sch;
602 sch = to_subchannel(dev->parent);
603 if (!sch->lpm)
617 struct subchannel *sch = to_subchannel(dev);
620 rc = chsc_siosl(sch->schid);
624 sch->schid.ssid, sch->schid.sch_no, rc);
628 sch->schid.ssid, sch->schid.sch_no);
635 struct subchannel *sch = to_subchannel(dev);
637 return sprintf(buf, "%02x\n", sch->vpm);
740 static struct ccw_device * io_subchannel_allocate_dev(struct subchannel *sch)
757 static int io_subchannel_initialize_dev(struct subchannel *sch,
766 priv->dev_id.devno = sch->schib.pmcw.dev;
767 priv->dev_id.ssid = sch->schid.ssid;
768 priv->schid = sch->schid;
776 cdev->ccwlock = sch->lock;
777 cdev->dev.parent = &sch->dev;
786 if (!get_device(&sch->dev)) {
791 spin_lock_irq(sch->lock);
792 sch_set_cdev(sch, cdev);
793 spin_unlock_irq(sch->lock);
802 static struct ccw_device * io_subchannel_create_ccwdev(struct subchannel *sch)
807 cdev = io_subchannel_allocate_dev(sch);
809 ret = io_subchannel_initialize_dev(sch, cdev);
818 static void sch_create_and_recog_new_device(struct subchannel *sch)
823 cdev = io_subchannel_create_ccwdev(sch);
826 css_sch_device_unregister(sch);
830 io_subchannel_recog(cdev, sch);
838 struct subchannel *sch;
842 sch = to_subchannel(cdev->dev.parent);
849 if (!device_is_registered(&sch->dev))
851 css_update_ssd_info(sch);
875 dev_set_uevent_suppress(&sch->dev, 0);
876 kobject_uevent(&sch->dev.kobj, KOBJ_ADD);
883 spin_lock_irqsave(sch->lock, flags);
884 sch_set_cdev(sch, NULL);
885 spin_unlock_irqrestore(sch->lock, flags);
900 struct subchannel *sch;
905 sch = to_subchannel(cdev->dev.parent);
906 css_sch_device_unregister(sch);
908 put_device(&sch->dev);
941 static void io_subchannel_recog(struct ccw_device *cdev, struct subchannel *sch)
947 spin_lock_irq(sch->lock);
949 spin_unlock_irq(sch->lock);
953 struct subchannel *sch)
960 if (!get_device(&sch->dev))
972 put_device(&sch->dev);
977 mutex_lock(&sch->reg_mutex);
978 rc = device_move(&cdev->dev, &sch->dev, DPM_ORDER_PARENT_BEFORE_DEV);
979 mutex_unlock(&sch->reg_mutex);
983 cdev->private->dev_id.devno, sch->schid.ssid,
984 sch->schib.pmcw.dev, rc);
992 put_device(&sch->dev);
1005 spin_lock_irq(sch->lock);
1006 cdev->private->schid = sch->schid;
1007 cdev->ccwlock = sch->lock;
1008 if (!sch_is_pseudo_sch(sch))
1009 sch_set_cdev(sch, cdev);
1010 spin_unlock_irq(sch->lock);
1011 if (!sch_is_pseudo_sch(sch))
1012 css_update_ssd_info(sch);
1018 struct subchannel *sch = to_subchannel(cdev->dev.parent);
1019 struct channel_subsystem *css = to_css(sch->dev.parent);
1024 static void io_subchannel_irq(struct subchannel *sch)
1028 cdev = sch_get_cdev(sch);
1031 CIO_TRACE_EVENT(6, dev_name(&sch->dev));
1038 void io_subchannel_init_config(struct subchannel *sch)
1040 memset(&sch->config, 0, sizeof(sch->config));
1041 sch->config.csense = 1;
1044 static void io_subchannel_init_fields(struct subchannel *sch)
1046 if (cio_is_console(sch->schid))
1047 sch->opm = 0xff;
1049 sch->opm = chp_get_sch_opm(sch);
1050 sch->lpm = sch->schib.pmcw.pam & sch->opm;
1051 sch->isc = cio_is_console(sch->schid) ? CONSOLE_ISC : IO_SCH_ISC;
1055 sch->schib.pmcw.dev, sch->schid.ssid,
1056 sch->schid.sch_no, sch->schib.pmcw.pim,
1057 sch->schib.pmcw.pam, sch->schib.pmcw.pom);
1059 io_subchannel_init_config(sch);
1066 static int io_subchannel_probe(struct subchannel *sch)
1072 if (cio_is_console(sch->schid)) {
1073 rc = sysfs_create_group(&sch->dev.kobj,
1079 sch->schid.ssid, sch->schid.sch_no, rc);
1085 dev_set_uevent_suppress(&sch->dev, 0);
1086 kobject_uevent(&sch->dev.kobj, KOBJ_ADD);
1087 cdev = sch_get_cdev(sch);
1098 io_subchannel_init_fields(sch);
1099 rc = cio_commit_config(sch);
1102 rc = sysfs_create_group(&sch->dev.kobj,
1111 set_io_private(sch, io_priv);
1112 css_schedule_eval(sch->schid);
1116 spin_lock_irq(sch->lock);
1117 css_sched_sch_todo(sch, SCH_TODO_UNREG);
1118 spin_unlock_irq(sch->lock);
1123 io_subchannel_remove (struct subchannel *sch)
1125 struct io_subchannel_private *io_priv = to_io_private(sch);
1128 cdev = sch_get_cdev(sch);
1131 io_subchannel_quiesce(sch);
1134 sch_set_cdev(sch, NULL);
1135 set_io_private(sch, NULL);
1141 sysfs_remove_group(&sch->dev.kobj, &io_subchannel_attr_group);
1145 static void io_subchannel_verify(struct subchannel *sch)
1149 cdev = sch_get_cdev(sch);
1154 static void io_subchannel_terminate_path(struct subchannel *sch, u8 mask)
1158 cdev = sch_get_cdev(sch);
1161 if (cio_update_schib(sch))
1164 if (scsw_actl(&sch->schib.scsw) == 0 || sch->schib.pmcw.lpum != mask)
1170 if (cio_clear(sch))
1181 static int io_subchannel_chp_event(struct subchannel *sch,
1184 struct ccw_device *cdev = sch_get_cdev(sch);
1187 mask = chp_ssd_get_mask(&sch->ssd_info, link);
1192 sch->opm &= ~mask;
1193 sch->lpm &= ~mask;
1196 io_subchannel_terminate_path(sch, mask);
1199 sch->opm |= mask;
1200 sch->lpm |= mask;
1203 io_subchannel_verify(sch);
1206 if (cio_update_schib(sch))
1210 io_subchannel_terminate_path(sch, mask);
1213 if (cio_update_schib(sch))
1215 sch->lpm |= mask & sch->opm;
1218 io_subchannel_verify(sch);
1224 static void io_subchannel_quiesce(struct subchannel *sch)
1229 spin_lock_irq(sch->lock);
1230 cdev = sch_get_cdev(sch);
1231 if (cio_is_console(sch->schid))
1233 if (!sch->schib.pmcw.ena)
1235 ret = cio_disable_subchannel(sch);
1246 spin_unlock_irq(sch->lock);
1249 spin_lock_irq(sch->lock);
1251 ret = cio_disable_subchannel(sch);
1254 spin_unlock_irq(sch->lock);
1257 static void io_subchannel_shutdown(struct subchannel *sch)
1259 io_subchannel_quiesce(sch);
1382 struct subchannel *sch = to_subchannel(cdev->dev.parent);
1385 CIO_TRACE_EVENT(2, dev_name(&sch->dev));
1387 cio_disable_subchannel(sch);
1403 static enum io_sch_action sch_get_action(struct subchannel *sch)
1407 cdev = sch_get_cdev(sch);
1408 if (cio_update_schib(sch)) {
1419 if (sch->schib.pmcw.dev != cdev->private->dev_id.devno) {
1424 if ((sch->schib.pmcw.pam & sch->opm) == 0) {
1440 * @sch: subchannel
1448 static int io_subchannel_sch_event(struct subchannel *sch, int process)
1456 spin_lock_irqsave(sch->lock, flags);
1457 if (!device_is_registered(&sch->dev))
1459 if (work_pending(&sch->todo_work))
1461 cdev = sch_get_cdev(sch);
1464 action = sch_get_action(sch);
1465 CIO_MSG_EVENT(2, "event: sch 0.%x.%04x, process=%d, action=%d\n",
1466 sch->schid.ssid, sch->schid.sch_no, process,
1477 io_subchannel_verify(sch);
1508 spin_unlock_irqrestore(sch->lock, flags);
1522 spin_lock_irqsave(sch->lock, flags);
1528 sch_set_cdev(sch, NULL);
1529 spin_unlock_irqrestore(sch->lock, flags);
1541 css_sch_device_unregister(sch);
1546 dev_id.ssid = sch->schid.ssid;
1547 dev_id.devno = sch->schib.pmcw.dev;
1550 sch_create_and_recog_new_device(sch);
1553 rc = ccw_device_move_to_sch(cdev, sch);
1559 spin_lock_irqsave(sch->lock, flags);
1561 spin_unlock_irqrestore(sch->lock, flags);
1571 spin_unlock_irqrestore(sch->lock, flags);
1591 struct subchannel *sch = to_subchannel(cdev->dev.parent);
1597 io_subchannel_init_fields(sch);
1598 rc = cio_commit_config(sch);
1601 sch->driver = &io_subchannel_driver;
1602 io_subchannel_recog(cdev, sch);
1632 struct subchannel *sch;
1634 sch = cio_probe_console();
1635 if (IS_ERR(sch))
1636 return ERR_CAST(sch);
1640 put_device(&sch->dev);
1643 set_io_private(sch, io_priv);
1644 cdev = io_subchannel_create_ccwdev(sch);
1646 put_device(&sch->dev);
1657 struct subchannel *sch = to_subchannel(cdev->dev.parent);
1658 struct io_subchannel_private *io_priv = to_io_private(sch);
1660 set_io_private(sch, NULL);
1661 put_device(&sch->dev);
1676 struct subchannel *sch = to_subchannel(cdev->dev.parent);
1679 cio_tsch(sch);
1680 if (sch->schib.scsw.cmd.actl == 0)
1830 struct subchannel *sch = to_subchannel(cdev->dev.parent);
1844 spin_lock_irq(sch->lock);
1846 spin_unlock_irq(sch->lock);
1854 spin_lock_irq(sch->lock);
1855 ret = cio_disable_subchannel(sch);
1856 spin_unlock_irq(sch->lock);
1864 struct subchannel *sch = to_subchannel(cdev->dev.parent);
1870 spin_lock_irq(sch->lock);
1872 ret = cio_enable_subchannel(sch, (u32)(addr_t)sch);
1874 spin_unlock_irq(sch->lock);
1892 struct subchannel *sch = to_subchannel(cdev->dev.parent);
1894 spin_lock_irq(sch->lock);
1895 if (cio_is_console(sch->schid)) {
1896 cio_enable_subchannel(sch, (u32)(addr_t)sch);
1905 css_sched_sch_todo(sch, SCH_TODO_EVAL);
1906 spin_unlock_irq(sch->lock);
1910 sch = to_subchannel(cdev->dev.parent);
1911 spin_lock_irq(sch->lock);
1917 spin_unlock_irq(sch->lock);
1920 spin_lock_irq(sch->lock);
1924 spin_unlock_irq(sch->lock);
1948 struct subchannel *sch;
1952 sch = to_subchannel(cdev->dev.parent);
1953 spin_lock_irq(sch->lock);
1954 if (cio_is_console(sch->schid))
1990 spin_unlock_irq(sch->lock);
1992 spin_lock_irq(sch->lock);
2002 spin_unlock_irq(sch->lock);
2004 spin_lock_irq(sch->lock);
2014 spin_unlock_irq(sch->lock);
2020 spin_unlock_irq(sch->lock);
2074 struct subchannel *sch;
2079 sch = to_subchannel(cdev->dev.parent);
2099 if (!sch_is_pseudo_sch(sch))
2100 css_schedule_eval(sch->schid);
2103 if (sch_is_pseudo_sch(sch))
2150 struct subchannel *sch = to_subchannel(cdev->dev.parent);
2152 return chsc_siosl(sch->schid);