Lines Matching refs:sch

72 	struct subchannel *sch = to_subchannel(dev);
77 idset_sch_del(cb->set, sch->schid);
79 rc = cb->fn_known_sch(sch, cb->data);
96 struct subchannel *sch;
99 sch = get_subchannel_by_schid(schid);
100 if (sch) {
102 rc = cb->fn_known_sch(sch, cb->data);
103 put_device(&sch->dev);
152 static int css_sch_create_locks(struct subchannel *sch)
154 sch->lock = kmalloc(sizeof(*sch->lock), GFP_KERNEL);
155 if (!sch->lock)
158 spin_lock_init(sch->lock);
159 mutex_init(&sch->reg_mutex);
166 struct subchannel *sch = to_subchannel(dev);
168 sch->config.intparm = 0;
169 cio_commit_config(sch);
170 kfree(sch->driver_override);
171 kfree(sch->lock);
172 kfree(sch);
208 struct subchannel *sch;
215 sch = kzalloc(sizeof(*sch), GFP_KERNEL | GFP_DMA);
216 if (!sch)
219 sch->schid = schid;
220 sch->schib = *schib;
221 sch->st = schib->pmcw.st;
223 ret = css_sch_create_locks(sch);
227 INIT_WORK(&sch->todo_work, css_sch_todo);
228 sch->dev.release = &css_subchannel_release;
229 device_initialize(&sch->dev);
234 sch->dev.coherent_dma_mask = DMA_BIT_MASK(31);
239 sch->dma_mask = DMA_BIT_MASK(64);
240 sch->dev.dma_mask = &sch->dma_mask;
241 return sch;
244 kfree(sch);
248 static int css_sch_device_register(struct subchannel *sch)
252 mutex_lock(&sch->reg_mutex);
253 dev_set_name(&sch->dev, "0.%x.%04x", sch->schid.ssid,
254 sch->schid.sch_no);
255 ret = device_add(&sch->dev);
256 mutex_unlock(&sch->reg_mutex);
262 * @sch: subchannel to be unregistered
264 void css_sch_device_unregister(struct subchannel *sch)
266 mutex_lock(&sch->reg_mutex);
267 if (device_is_registered(&sch->dev))
268 device_unregister(&sch->dev);
269 mutex_unlock(&sch->reg_mutex);
301 void css_update_ssd_info(struct subchannel *sch)
305 ret = chsc_get_ssd_info(sch->schid, &sch->ssd_info);
307 ssd_from_pmcw(&sch->ssd_info, &sch->schib.pmcw);
309 ssd_register_chpids(&sch->ssd_info);
315 struct subchannel *sch = to_subchannel(dev);
317 return sprintf(buf, "%01x\n", sch->st);
325 struct subchannel *sch = to_subchannel(dev);
327 return sprintf(buf, "css:t%01X\n", sch->st);
336 struct subchannel *sch = to_subchannel(dev);
352 old = sch->driver_override;
354 sch->driver_override = driver_override;
357 sch->driver_override = NULL;
369 struct subchannel *sch = to_subchannel(dev);
373 len = snprintf(buf, PAGE_SIZE, "%s\n", sch->driver_override);
399 struct subchannel *sch = to_subchannel(dev);
400 struct chsc_ssd_info *ssd = &sch->ssd_info;
421 struct subchannel *sch = to_subchannel(dev);
422 struct pmcw *pmcw = &sch->schib.pmcw;
433 struct subchannel *sch = to_subchannel(dev);
434 struct pmcw *pmcw = &sch->schib.pmcw;
438 return sysfs_emit(buf, "0.%x.%04x\n", sch->schid.ssid,
457 int css_register_subchannel(struct subchannel *sch)
462 sch->dev.parent = &channel_subsystems[0]->device;
463 sch->dev.bus = &css_bus_type;
464 sch->dev.groups = default_subch_attr_groups;
466 if (sch->st == SUBCHANNEL_TYPE_IO)
467 sch->dev.type = &io_subchannel_type;
478 dev_set_uevent_suppress(&sch->dev, 1);
479 css_update_ssd_info(sch);
481 ret = css_sch_device_register(sch);
483 CIO_MSG_EVENT(0, "Could not register sch 0.%x.%04x: %d\n",
484 sch->schid.ssid, sch->schid.sch_no, ret);
487 if (!sch->driver) {
493 dev_set_uevent_suppress(&sch->dev, 0);
494 kobject_uevent(&sch->dev.kobj, KOBJ_ADD);
501 struct subchannel *sch;
504 sch = css_alloc_subchannel(schid, schib);
505 if (IS_ERR(sch))
506 return PTR_ERR(sch);
508 ret = css_register_subchannel(sch);
510 put_device(&sch->dev);
518 struct subchannel *sch;
521 sch = to_subchannel(dev);
522 return schid_equal(&sch->schid, schid);
572 static int css_evaluate_known_subchannel(struct subchannel *sch, int slow)
576 if (sch->driver) {
577 if (sch->driver->sch_event)
578 ret = sch->driver->sch_event(sch, slow);
580 dev_dbg(&sch->dev,
585 CIO_MSG_EVENT(2, "eval: sch 0.%x.%04x, rc=%d\n",
586 sch->schid.ssid, sch->schid.sch_no, ret);
593 struct subchannel *sch;
596 sch = get_subchannel_by_schid(schid);
597 if (sch) {
598 ret = css_evaluate_known_subchannel(sch, slow);
599 put_device(&sch->dev);
608 * @sch: subchannel
615 void css_sched_sch_todo(struct subchannel *sch, enum sch_todo todo)
617 CIO_MSG_EVENT(4, "sch_todo: sched sch=0.%x.%04x todo=%d\n",
618 sch->schid.ssid, sch->schid.sch_no, todo);
619 if (sch->todo >= todo)
622 if (!get_device(&sch->dev))
624 sch->todo = todo;
625 if (!queue_work(cio_work_q, &sch->todo_work)) {
627 put_device(&sch->dev);
634 struct subchannel *sch;
638 sch = container_of(work, struct subchannel, todo_work);
640 spin_lock_irq(sch->lock);
641 todo = sch->todo;
642 CIO_MSG_EVENT(4, "sch_todo: sch=0.%x.%04x, todo=%d\n", sch->schid.ssid,
643 sch->schid.sch_no, todo);
644 sch->todo = SCH_TODO_NOTHING;
645 spin_unlock_irq(sch->lock);
651 ret = css_evaluate_known_subchannel(sch, 1);
653 spin_lock_irq(sch->lock);
654 css_sched_sch_todo(sch, todo);
655 spin_unlock_irq(sch->lock);
659 css_sch_device_unregister(sch);
663 put_device(&sch->dev);
684 static int slow_eval_known_fn(struct subchannel *sch, void *data)
690 eval = idset_sch_contains(slow_subchannel_set, sch->schid);
691 idset_sch_del(slow_subchannel_set, sch->schid);
694 rc = css_evaluate_known_subchannel(sch, 1);
696 css_schedule_eval(sch->schid);
783 struct subchannel *sch = to_subchannel(dev);
785 idset_sch_del(set, sch->schid);
831 struct subchannel *sch;
852 sch = get_subchannel_by_schid(mchk_schid);
853 if (sch) {
854 css_update_ssd_info(sch);
855 put_device(&sch->dev);
1406 int sch_is_pseudo_sch(struct subchannel *sch)
1408 if (!sch->dev.parent)
1410 return sch == to_css(sch->dev.parent)->pseudo_subchannel;
1415 struct subchannel *sch = to_subchannel(dev);
1420 if (sch->driver_override && strcmp(sch->driver_override, drv->name))
1424 if (sch->st == id->type)
1433 struct subchannel *sch;
1436 sch = to_subchannel(dev);
1437 sch->driver = to_cssdriver(dev->driver);
1438 ret = sch->driver->probe ? sch->driver->probe(sch) : 0;
1440 sch->driver = NULL;
1446 struct subchannel *sch;
1449 sch = to_subchannel(dev);
1450 ret = sch->driver->remove ? sch->driver->remove(sch) : 0;
1451 sch->driver = NULL;
1457 struct subchannel *sch;
1459 sch = to_subchannel(dev);
1460 if (sch->driver && sch->driver->shutdown)
1461 sch->driver->shutdown(sch);
1466 struct subchannel *sch = to_subchannel(dev);
1469 ret = add_uevent_var(env, "ST=%01X", sch->st);
1472 ret = add_uevent_var(env, "MODALIAS=css:t%01X", sch->st);
1478 struct subchannel *sch = to_subchannel(dev);
1481 if (mutex_is_locked(&sch->reg_mutex))
1483 if (!sch->dev.driver)
1485 drv = to_cssdriver(sch->dev.driver);
1487 return drv->prepare ? drv->prepare(sch) : 0;
1492 struct subchannel *sch = to_subchannel(dev);
1495 if (!sch->dev.driver)
1497 drv = to_cssdriver(sch->dev.driver);
1499 drv->complete(sch);
1504 struct subchannel *sch = to_subchannel(dev);
1507 if (!sch->dev.driver)
1509 drv = to_cssdriver(sch->dev.driver);
1510 return drv->freeze ? drv->freeze(sch) : 0;
1515 struct subchannel *sch = to_subchannel(dev);
1518 if (!sch->dev.driver)
1520 drv = to_cssdriver(sch->dev.driver);
1521 return drv->thaw ? drv->thaw(sch) : 0;
1526 struct subchannel *sch = to_subchannel(dev);
1529 css_update_ssd_info(sch);
1530 if (!sch->dev.driver)
1532 drv = to_cssdriver(sch->dev.driver);
1533 return drv->restore ? drv->restore(sch) : 0;