static int __init pdc_stable_init(void) { int rc = 0, error = 0; u32 result; if (pdc_stable_get_size(&pdcs_size) != PDC_OK) return -ENODEV; if (pdcs_size < 96) return -ENODATA; printk(KERN_INFO PDCS_PREFIX " facility v%s\n", PDCS_VERSION); if (pdc_stable_read(PDCS_ADDR_OSID, &result, sizeof(result)) != PDC_OK) return -EIO; pdcs_osid = (u16)(result >> 16); stable_kobj = kobject_create_and_add("stable", firmware_kobj); if (!stable_kobj) { rc = -ENOMEM; goto fail_firmreg; } error = sysfs_create_group(stable_kobj, &pdcs_attr_group); paths_kset = kset_create_and_add("paths", NULL, stable_kobj); if (!paths_kset) { rc = -ENOMEM; goto fail_ksetreg; } if ((rc = pdcs_register_pathentries())) goto fail_pdcsreg; return rc; fail_pdcsreg: pdcs_unregister_pathentries(); kset_unregister(paths_kset); fail_ksetreg: kobject_put(stable_kobj); fail_firmreg: printk(KERN_INFO PDCS_PREFIX " bailing out\n"); return rc; }
/* * For now we register the stable subsystem with the firmware subsystem * and the paths subsystem with the stable subsystem */ static int __init pdc_stable_init(void) { int rc = 0, error = 0; u32 result; /* find the size of the stable storage */ if (pdc_stable_get_size(&pdcs_size) != PDC_OK) return -ENODEV; /* make sure we have enough data */ if (pdcs_size < 96) return -ENODATA; printk(KERN_INFO PDCS_PREFIX " facility v%s\n", PDCS_VERSION); /* get OSID */ if (pdc_stable_read(PDCS_ADDR_OSID, &result, sizeof(result)) != PDC_OK) return -EIO; /* the actual result is 16 bits away */ pdcs_osid = (u16)(result >> 16); /* For now we'll register the directory at /sys/firmware/stable */ stable_kobj = kobject_create_and_add("stable", firmware_kobj); if (!stable_kobj) { rc = -ENOMEM; goto fail_firmreg; } /* Don't forget the root entries */ error = sysfs_create_group(stable_kobj, &pdcs_attr_group); /* register the paths kset as a child of the stable kset */ paths_kset = kset_create_and_add("paths", NULL, stable_kobj); if (!paths_kset) { rc = -ENOMEM; goto fail_ksetreg; } /* now we create all "files" for the paths kset */ if ((rc = pdcs_register_pathentries())) goto fail_pdcsreg; return rc; fail_pdcsreg: pdcs_unregister_pathentries(); kset_unregister(paths_kset); fail_ksetreg: kobject_put(stable_kobj); fail_firmreg: printk(KERN_INFO PDCS_PREFIX " bailing out\n"); return rc; }
/* * For now we register the stable subsystem with the firmware subsystem * and the paths subsystem with the stable subsystem */ static int __init pdc_stable_init(void) { struct subsys_attribute *attr; int i, rc = 0, error = 0; /* find the size of the stable storage */ if (pdc_stable_get_size(&pdcs_size) != PDC_OK) return -ENODEV; /* make sure we have enough data */ if (pdcs_size < 96) return -ENODATA; printk(KERN_INFO PDCS_PREFIX " facility v%s\n", PDCS_VERSION); /* For now we'll register the stable subsys within this driver */ if ((rc = firmware_register(&stable_subsys))) goto fail_firmreg; /* Don't forget the root entries */ for (i = 0; (attr = pdcs_subsys_attrs[i]) && !error; i++) if (attr->show) error = subsys_create_file(&stable_subsys, attr); /* register the paths subsys as a subsystem of stable subsys */ kset_set_kset_s(&paths_subsys, stable_subsys); if ((rc= subsystem_register(&paths_subsys))) goto fail_subsysreg; /* now we create all "files" for the paths subsys */ if ((rc = pdcs_register_pathentries())) goto fail_pdcsreg; return rc; fail_pdcsreg: pdcs_unregister_pathentries(); subsystem_unregister(&paths_subsys); fail_subsysreg: firmware_unregister(&stable_subsys); fail_firmreg: printk(KERN_INFO PDCS_PREFIX " bailing out\n"); return rc; }