Lines Matching defs:sch

37 int vfio_ccw_sch_quiesce(struct subchannel *sch)
39 struct vfio_ccw_parent *parent = dev_get_drvdata(&sch->dev);
55 ret = cio_cancel_halt_clear(sch, &iretry);
59 sch->schid.ssid, sch->schid.sch_no);
68 spin_unlock_irq(&sch->lock);
75 spin_lock_irq(&sch->lock);
76 ret = cio_disable_subchannel(sch);
131 static void vfio_ccw_sch_irq(struct subchannel *sch)
133 struct vfio_ccw_parent *parent = dev_get_drvdata(&sch->dev);
143 VFIO_CCW_MSG_EVENT(2, "sch %x.%x.%04x: unexpected interrupt\n",
144 sch->schid.cssid, sch->schid.ssid,
145 sch->schid.sch_no);
147 cio_disable_subchannel(sch);
162 static int vfio_ccw_sch_probe(struct subchannel *sch)
164 struct pmcw *pmcw = &sch->schib.pmcw;
169 dev_warn(&sch->dev, "vfio: ccw: does not support QDIO: %s\n",
170 dev_name(&sch->dev));
179 parent->dev.parent = &sch->dev;
185 dev_set_drvdata(&sch->dev, parent);
190 ret = mdev_register_parent(&parent->parent, &sch->dev,
197 sch->schid.cssid, sch->schid.ssid,
198 sch->schid.sch_no);
205 dev_set_drvdata(&sch->dev, NULL);
209 static void vfio_ccw_sch_remove(struct subchannel *sch)
211 struct vfio_ccw_parent *parent = dev_get_drvdata(&sch->dev);
216 dev_set_drvdata(&sch->dev, NULL);
219 sch->schid.cssid, sch->schid.ssid,
220 sch->schid.sch_no);
223 static void vfio_ccw_sch_shutdown(struct subchannel *sch)
225 struct vfio_ccw_parent *parent = dev_get_drvdata(&sch->dev);
237 * @sch: subchannel
245 static int vfio_ccw_sch_event(struct subchannel *sch, int process)
247 struct vfio_ccw_parent *parent = dev_get_drvdata(&sch->dev);
252 spin_lock_irqsave(&sch->lock, flags);
253 if (!device_is_registered(&sch->dev))
256 if (work_pending(&sch->todo_work))
261 if (cio_update_schib(sch)) {
267 spin_unlock_irqrestore(&sch->lock, flags);
299 static int vfio_ccw_chp_event(struct subchannel *sch,
302 struct vfio_ccw_parent *parent = dev_get_drvdata(&sch->dev);
304 int mask = chp_ssd_get_mask(&sch->ssd_info, link);
310 trace_vfio_ccw_chp_event(sch->schid, mask, event);
311 VFIO_CCW_MSG_EVENT(2, "sch %x.%x.%04x: mask=0x%x event=%d\n",
312 sch->schid.cssid,
313 sch->schid.ssid, sch->schid.sch_no,
316 if (cio_update_schib(sch))
322 sch->opm &= ~mask;
323 sch->lpm &= ~mask;
324 if (sch->schib.pmcw.lpum & mask)
325 cio_cancel_halt_clear(sch, &retry);
329 if (sch->schib.pmcw.lpum & mask)
330 cio_cancel_halt_clear(sch, &retry);
336 sch->opm |= mask;
337 sch->lpm |= mask;
341 sch->lpm |= mask & sch->opm;