Lines Matching full:sec
100 struct vpd_section *sec = arg; in vpd_section_attrib_add() local
131 ret = sysfs_create_bin_file(sec->kobj, &info->bin_attr); in vpd_section_attrib_add()
135 list_add_tail(&info->list, &sec->attribs); in vpd_section_attrib_add()
146 static void vpd_section_attrib_destroy(struct vpd_section *sec) in vpd_section_attrib_destroy() argument
151 list_for_each_entry_safe(info, temp, &sec->attribs, list) { in vpd_section_attrib_destroy()
152 sysfs_remove_bin_file(sec->kobj, &info->bin_attr); in vpd_section_attrib_destroy()
162 struct vpd_section *sec = bin_attr->private; in vpd_section_read() local
164 return memory_read_from_buffer(buf, count, &pos, sec->baseaddr, in vpd_section_read()
165 sec->bin_attr.size); in vpd_section_read()
168 static int vpd_section_create_attribs(struct vpd_section *sec) in vpd_section_create_attribs() argument
175 ret = vpd_decode_string(sec->bin_attr.size, sec->baseaddr, in vpd_section_create_attribs()
176 &consumed, vpd_section_attrib_add, sec); in vpd_section_create_attribs()
182 static int vpd_section_init(const char *name, struct vpd_section *sec, in vpd_section_init() argument
187 sec->baseaddr = memremap(physaddr, size, MEMREMAP_WB); in vpd_section_init()
188 if (!sec->baseaddr) in vpd_section_init()
191 sec->name = name; in vpd_section_init()
194 sec->raw_name = kasprintf(GFP_KERNEL, "%s_raw", name); in vpd_section_init()
195 if (!sec->raw_name) { in vpd_section_init()
200 sysfs_bin_attr_init(&sec->bin_attr); in vpd_section_init()
201 sec->bin_attr.attr.name = sec->raw_name; in vpd_section_init()
202 sec->bin_attr.attr.mode = 0444; in vpd_section_init()
203 sec->bin_attr.size = size; in vpd_section_init()
204 sec->bin_attr.read_new = vpd_section_read; in vpd_section_init()
205 sec->bin_attr.private = sec; in vpd_section_init()
207 err = sysfs_create_bin_file(vpd_kobj, &sec->bin_attr); in vpd_section_init()
211 sec->kobj = kobject_create_and_add(name, vpd_kobj); in vpd_section_init()
212 if (!sec->kobj) { in vpd_section_init()
217 INIT_LIST_HEAD(&sec->attribs); in vpd_section_init()
218 vpd_section_create_attribs(sec); in vpd_section_init()
220 sec->enabled = true; in vpd_section_init()
225 sysfs_remove_bin_file(vpd_kobj, &sec->bin_attr); in vpd_section_init()
227 kfree(sec->raw_name); in vpd_section_init()
229 memunmap(sec->baseaddr); in vpd_section_init()
233 static int vpd_section_destroy(struct vpd_section *sec) in vpd_section_destroy() argument
235 if (sec->enabled) { in vpd_section_destroy()
236 vpd_section_attrib_destroy(sec); in vpd_section_destroy()
237 kobject_put(sec->kobj); in vpd_section_destroy()
238 sysfs_remove_bin_file(vpd_kobj, &sec->bin_attr); in vpd_section_destroy()
239 kfree(sec->raw_name); in vpd_section_destroy()
240 memunmap(sec->baseaddr); in vpd_section_destroy()
241 sec->enabled = false; in vpd_section_destroy()