• Home
  • Raw
  • Download

Lines Matching refs:sch

39 int vfio_ccw_sch_quiesce(struct subchannel *sch)  in vfio_ccw_sch_quiesce()  argument
41 struct vfio_ccw_private *private = dev_get_drvdata(&sch->dev); in vfio_ccw_sch_quiesce()
45 spin_lock_irq(sch->lock); in vfio_ccw_sch_quiesce()
46 if (!sch->schib.pmcw.ena) in vfio_ccw_sch_quiesce()
48 ret = cio_disable_subchannel(sch); in vfio_ccw_sch_quiesce()
55 ret = cio_cancel_halt_clear(sch, &iretry); in vfio_ccw_sch_quiesce()
59 sch->schid.ssid, sch->schid.sch_no); in vfio_ccw_sch_quiesce()
68 spin_unlock_irq(sch->lock); in vfio_ccw_sch_quiesce()
75 spin_lock_irq(sch->lock); in vfio_ccw_sch_quiesce()
76 ret = cio_disable_subchannel(sch); in vfio_ccw_sch_quiesce()
80 spin_unlock_irq(sch->lock); in vfio_ccw_sch_quiesce()
132 static void vfio_ccw_sch_irq(struct subchannel *sch) in vfio_ccw_sch_irq() argument
134 struct vfio_ccw_private *private = dev_get_drvdata(&sch->dev); in vfio_ccw_sch_irq()
152 static int vfio_ccw_sch_probe(struct subchannel *sch) in vfio_ccw_sch_probe() argument
154 struct pmcw *pmcw = &sch->schib.pmcw; in vfio_ccw_sch_probe()
159 dev_warn(&sch->dev, "vfio: ccw: does not support QDIO: %s\n", in vfio_ccw_sch_probe()
160 dev_name(&sch->dev)); in vfio_ccw_sch_probe()
195 private->sch = sch; in vfio_ccw_sch_probe()
196 dev_set_drvdata(&sch->dev, private); in vfio_ccw_sch_probe()
199 spin_lock_irq(sch->lock); in vfio_ccw_sch_probe()
201 sch->isc = VFIO_CCW_ISC; in vfio_ccw_sch_probe()
202 ret = cio_enable_subchannel(sch, (u32)(unsigned long)sch); in vfio_ccw_sch_probe()
203 spin_unlock_irq(sch->lock); in vfio_ccw_sch_probe()
213 ret = vfio_ccw_mdev_reg(sch); in vfio_ccw_sch_probe()
217 if (dev_get_uevent_suppress(&sch->dev)) { in vfio_ccw_sch_probe()
218 dev_set_uevent_suppress(&sch->dev, 0); in vfio_ccw_sch_probe()
219 kobject_uevent(&sch->dev.kobj, KOBJ_ADD); in vfio_ccw_sch_probe()
223 sch->schid.cssid, sch->schid.ssid, in vfio_ccw_sch_probe()
224 sch->schid.sch_no); in vfio_ccw_sch_probe()
228 cio_disable_subchannel(sch); in vfio_ccw_sch_probe()
230 dev_set_drvdata(&sch->dev, NULL); in vfio_ccw_sch_probe()
237 static int vfio_ccw_sch_remove(struct subchannel *sch) in vfio_ccw_sch_remove() argument
239 struct vfio_ccw_private *private = dev_get_drvdata(&sch->dev); in vfio_ccw_sch_remove()
242 vfio_ccw_sch_quiesce(sch); in vfio_ccw_sch_remove()
249 vfio_ccw_mdev_unreg(sch); in vfio_ccw_sch_remove()
251 dev_set_drvdata(&sch->dev, NULL); in vfio_ccw_sch_remove()
258 sch->schid.cssid, sch->schid.ssid, in vfio_ccw_sch_remove()
259 sch->schid.sch_no); in vfio_ccw_sch_remove()
263 static void vfio_ccw_sch_shutdown(struct subchannel *sch) in vfio_ccw_sch_shutdown() argument
265 vfio_ccw_sch_quiesce(sch); in vfio_ccw_sch_shutdown()
278 static int vfio_ccw_sch_event(struct subchannel *sch, int process) in vfio_ccw_sch_event() argument
280 struct vfio_ccw_private *private = dev_get_drvdata(&sch->dev); in vfio_ccw_sch_event()
284 spin_lock_irqsave(sch->lock, flags); in vfio_ccw_sch_event()
285 if (!device_is_registered(&sch->dev)) in vfio_ccw_sch_event()
288 if (work_pending(&sch->todo_work)) in vfio_ccw_sch_event()
291 if (cio_update_schib(sch)) { in vfio_ccw_sch_event()
297 private = dev_get_drvdata(&sch->dev); in vfio_ccw_sch_event()
305 spin_unlock_irqrestore(sch->lock, flags); in vfio_ccw_sch_event()
337 static int vfio_ccw_chp_event(struct subchannel *sch, in vfio_ccw_chp_event() argument
340 struct vfio_ccw_private *private = dev_get_drvdata(&sch->dev); in vfio_ccw_chp_event()
341 int mask = chp_ssd_get_mask(&sch->ssd_info, link); in vfio_ccw_chp_event()
347 trace_vfio_ccw_chp_event(private->sch->schid, mask, event); in vfio_ccw_chp_event()
349 mdev_uuid(private->mdev), sch->schid.cssid, in vfio_ccw_chp_event()
350 sch->schid.ssid, sch->schid.sch_no, in vfio_ccw_chp_event()
353 if (cio_update_schib(sch)) in vfio_ccw_chp_event()
359 sch->opm &= ~mask; in vfio_ccw_chp_event()
360 sch->lpm &= ~mask; in vfio_ccw_chp_event()
361 if (sch->schib.pmcw.lpum & mask) in vfio_ccw_chp_event()
362 cio_cancel_halt_clear(sch, &retry); in vfio_ccw_chp_event()
366 if (sch->schib.pmcw.lpum & mask) in vfio_ccw_chp_event()
367 cio_cancel_halt_clear(sch, &retry); in vfio_ccw_chp_event()
373 sch->opm |= mask; in vfio_ccw_chp_event()
374 sch->lpm |= mask; in vfio_ccw_chp_event()
378 sch->lpm |= mask & sch->opm; in vfio_ccw_chp_event()