/* Initialize quiesce driver. */ static int __init sclp_quiesce_init(void) { int rc; rc = sclp_register(&sclp_quiesce_event); if (rc) printk(KERN_WARNING "sclp: could not register quiesce handler " "(rc=%d)\n", rc); return rc; }
int sclp_rw_init(void) { static int init_done = 0; int rc; if (init_done) return 0; rc = sclp_register(&sclp_rw_event); if (rc == 0) init_done = 1; return rc; }
int __init sclp_sdias_init(void) { int rc; if (ipl_info.type != IPL_TYPE_FCP_DUMP) return 0; sdias_dbf = debug_register("dump_sdias", 4, 1, 4 * sizeof(long)); debug_register_view(sdias_dbf, &debug_sprintf_view); debug_set_level(sdias_dbf, 6); rc = sclp_register(&sclp_sdias_register); if (rc) return rc; init_waitqueue_head(&sdias_wq); TRACE("init done\n"); return 0; }
static int __init ocf_init(void) { int rc; INIT_WORK(&sclp_ocf_change_work, sclp_ocf_change_notify); ocf_kset = kset_create_and_add("ocf", NULL, firmware_kobj); if (!ocf_kset) return -ENOMEM; rc = sysfs_create_group(&ocf_kset->kobj, &ocf_attr_group); if (rc) { kset_unregister(ocf_kset); return rc; } return sclp_register(&sclp_ocf_event); }
/* Initialize quiesce driver. */ static int __init sclp_quiesce_init(void) { return sclp_register(&sclp_quiesce_event); }
int sclp_pci_report(struct zpci_report_error_header *report, u32 fh, u32 fid) { DECLARE_COMPLETION_ONSTACK(completion); struct err_notify_sccb *sccb; struct sclp_req req; int ret; ret = sclp_pci_check_report(report); if (ret) return ret; mutex_lock(&sclp_pci_mutex); ret = sclp_register(&sclp_pci_event); if (ret) goto out_unlock; if (!(sclp_pci_event.sclp_receive_mask & EVTYP_ERRNOTIFY_MASK)) { ret = -EOPNOTSUPP; goto out_unregister; } sccb = (void *) get_zeroed_page(GFP_KERNEL | GFP_DMA); if (!sccb) { ret = -ENOMEM; goto out_unregister; } memset(&req, 0, sizeof(req)); req.callback_data = &completion; req.callback = sclp_pci_callback; req.command = SCLP_CMDW_WRITE_EVENT_DATA; req.status = SCLP_REQ_FILLED; req.sccb = sccb; sccb->evbuf.header.length = sizeof(sccb->evbuf) + report->length; sccb->evbuf.header.type = EVTYP_ERRNOTIFY; sccb->header.length = sizeof(sccb->header) + sccb->evbuf.header.length; sccb->evbuf.action = report->action; sccb->evbuf.atype = SCLP_ATYPE_PCI; sccb->evbuf.fh = fh; sccb->evbuf.fid = fid; memcpy(sccb->evbuf.data, report->data, report->length); ret = sclp_add_request(&req); if (ret) goto out_free_req; wait_for_completion(&completion); if (req.status != SCLP_REQ_DONE) { pr_warn("request failed (status=0x%02x)\n", req.status); ret = -EIO; goto out_free_req; } if (sccb->header.response_code != 0x0020) { pr_warn("request failed with response code 0x%x\n", sccb->header.response_code); ret = -EIO; } out_free_req: free_page((unsigned long) sccb); out_unregister: sclp_unregister(&sclp_pci_event); out_unlock: mutex_unlock(&sclp_pci_mutex); return ret; }