Lines Matching defs:sch

88 int cio_set_options(struct subchannel *sch, int flags)
90 struct io_subchannel_private *priv = to_io_private(sch);
99 cio_start_handle_notoper(struct subchannel *sch, __u8 lpm)
104 sch->lpm &= ~lpm;
106 sch->lpm = 0;
109 "subchannel 0.%x.%04x!\n", sch->schid.ssid,
110 sch->schid.sch_no);
112 if (cio_update_schib(sch))
115 sprintf(dbf_text, "no%s", dev_name(&sch->dev));
117 CIO_HEX_EVENT(0, &sch->schib, sizeof (struct schib));
119 return (sch->lpm ? -EACCES : -ENODEV);
123 cio_start_key (struct subchannel *sch, /* subchannel structure */
128 struct io_subchannel_private *priv = to_io_private(sch);
133 CIO_TRACE_EVENT(5, dev_name(&sch->dev));
136 /* sch is always under 2G. */
137 orb->cmd.intparm = (u32)virt_to_phys(sch);
143 orb->cmd.lpm = (lpm != 0) ? lpm : sch->lpm;
152 ccode = ssch(sch->schid, orb);
162 sch->schib.scsw.cmd.actl |= SCSW_ACTL_START_PEND;
168 return cio_start_handle_notoper(sch, lpm);
176 cio_start (struct subchannel *sch, struct ccw1 *cpa, __u8 lpm)
178 return cio_start_key(sch, cpa, lpm, PAGE_DEFAULT_KEY);
186 cio_resume (struct subchannel *sch)
191 CIO_TRACE_EVENT(4, dev_name(&sch->dev));
193 ccode = rsch (sch->schid);
199 sch->schib.scsw.cmd.actl |= SCSW_ACTL_RESUME_PEND;
219 cio_halt(struct subchannel *sch)
223 if (!sch)
227 CIO_TRACE_EVENT(2, dev_name(&sch->dev));
232 ccode = hsch (sch->schid);
238 sch->schib.scsw.cmd.actl |= SCSW_ACTL_HALT_PEND;
253 cio_clear(struct subchannel *sch)
257 if (!sch)
261 CIO_TRACE_EVENT(2, dev_name(&sch->dev));
266 ccode = csch (sch->schid);
272 sch->schib.scsw.cmd.actl |= SCSW_ACTL_CLEAR_PEND;
288 cio_cancel (struct subchannel *sch)
292 if (!sch)
296 CIO_TRACE_EVENT(2, dev_name(&sch->dev));
298 ccode = xsch (sch->schid);
305 if (cio_update_schib(sch))
321 * @sch: subchannel on which to perform the cancel_halt_clear operation
334 int cio_cancel_halt_clear(struct subchannel *sch, int *iretry)
338 if (cio_update_schib(sch))
340 if (!sch->schib.pmcw.ena)
344 if (!(scsw_actl(&sch->schib.scsw) & SCSW_ACTL_HALT_PEND) &&
345 !(scsw_actl(&sch->schib.scsw) & SCSW_ACTL_CLEAR_PEND)) {
346 if (!scsw_is_tm(&sch->schib.scsw)) {
347 ret = cio_cancel(sch);
358 if (!(scsw_actl(&sch->schib.scsw) & SCSW_ACTL_CLEAR_PEND)) {
361 ret = cio_halt(sch);
371 ret = cio_clear(sch);
379 static void cio_apply_config(struct subchannel *sch, struct schib *schib)
381 schib->pmcw.intparm = sch->config.intparm;
382 schib->pmcw.mbi = sch->config.mbi;
383 schib->pmcw.isc = sch->config.isc;
384 schib->pmcw.ena = sch->config.ena;
385 schib->pmcw.mme = sch->config.mme;
386 schib->pmcw.mp = sch->config.mp;
387 schib->pmcw.csense = sch->config.csense;
388 schib->pmcw.mbfc = sch->config.mbfc;
389 if (sch->config.mbfc)
390 schib->mba = sch->config.mba;
393 static int cio_check_config(struct subchannel *sch, struct schib *schib)
395 return (schib->pmcw.intparm == sch->config.intparm) &&
396 (schib->pmcw.mbi == sch->config.mbi) &&
397 (schib->pmcw.isc == sch->config.isc) &&
398 (schib->pmcw.ena == sch->config.ena) &&
399 (schib->pmcw.mme == sch->config.mme) &&
400 (schib->pmcw.mp == sch->config.mp) &&
401 (schib->pmcw.csense == sch->config.csense) &&
402 (schib->pmcw.mbfc == sch->config.mbfc) &&
403 (!sch->config.mbfc || (schib->mba == sch->config.mba));
409 int cio_commit_config(struct subchannel *sch)
415 if (stsch(sch->schid, &schib) || !css_sch_is_valid(&schib))
420 cio_apply_config(sch, &schib);
421 ccode = msch(sch->schid, &schib);
426 if (stsch(sch->schid, &schib) ||
429 if (cio_check_config(sch, &schib)) {
431 memcpy(&sch->schib, &schib, sizeof(schib));
438 if (tsch(sch->schid, &irb))
455 * @sch: subchannel on which to perform stsch
458 int cio_update_schib(struct subchannel *sch)
462 if (stsch(sch->schid, &schib) || !css_sch_is_valid(&schib))
465 memcpy(&sch->schib, &schib, sizeof(schib));
472 * @sch: subchannel to be enabled
475 int cio_enable_subchannel(struct subchannel *sch, u32 intparm)
480 CIO_TRACE_EVENT(2, dev_name(&sch->dev));
482 if (sch_is_pseudo_sch(sch))
484 if (cio_update_schib(sch))
487 sch->config.ena = 1;
488 sch->config.isc = sch->isc;
489 sch->config.intparm = intparm;
491 ret = cio_commit_config(sch);
497 sch->config.csense = 0;
498 ret = cio_commit_config(sch);
507 * @sch: subchannel to disable
509 int cio_disable_subchannel(struct subchannel *sch)
514 CIO_TRACE_EVENT(2, dev_name(&sch->dev));
516 if (sch_is_pseudo_sch(sch))
518 if (cio_update_schib(sch))
521 sch->config.ena = 0;
522 ret = cio_commit_config(sch);
535 struct subchannel *sch;
547 sch = phys_to_virt(tpi_info->intparm);
548 spin_lock(&sch->lock);
552 memcpy (&sch->schib.scsw, &irb->scsw, sizeof (irb->scsw));
554 if (sch->driver && sch->driver->irq)
555 sch->driver->irq(sch);
560 spin_unlock(&sch->lock);
581 void cio_tsch(struct subchannel *sch)
588 if (tsch(sch->schid, irb) != 0)
591 memcpy(&sch->schib.scsw, &irb->scsw, sizeof(union scsw));
599 if (sch->driver && sch->driver->irq)
600 sch->driver->irq(sch);
646 struct subchannel *sch;
661 sch = css_alloc_subchannel(schid, &schib);
662 if (IS_ERR(sch))
663 return sch;
665 lockdep_set_class(&sch->lock, &console_sch_key);
667 sch->config.isc = CONSOLE_ISC;
668 sch->config.intparm = (u32)virt_to_phys(sch);
669 ret = cio_commit_config(sch);
672 put_device(&sch->dev);
675 console_sch = sch;
676 return sch;
701 * @sch: subchannel on which to perform the start function
709 int cio_tm_start_key(struct subchannel *sch, struct tcw *tcw, u8 lpm, u8 key)
712 union orb *orb = &to_io_private(sch)->orb;
715 orb->tm.intparm = (u32)virt_to_phys(sch);
718 orb->tm.lpm = lpm ? lpm : sch->lpm;
720 cc = ssch(sch->schid, orb);
728 return cio_start_handle_notoper(sch, lpm);
735 * @sch: subchannel on which to perform the interrogate function
740 int cio_tm_intrg(struct subchannel *sch)
744 if (!to_io_private(sch)->orb.tm.b)
746 cc = xsch(sch->schid);