Lines Matching refs:property
85 struct tb_property *property; in tb_property_alloc() local
87 property = kzalloc(sizeof(*property), GFP_KERNEL); in tb_property_alloc()
88 if (!property) in tb_property_alloc()
91 strcpy(property->key, key); in tb_property_alloc()
92 property->type = type; in tb_property_alloc()
93 INIT_LIST_HEAD(&property->list); in tb_property_alloc()
95 return property; in tb_property_alloc()
102 struct tb_property *property; in tb_property_parse() local
111 property = tb_property_alloc(key, entry->type); in tb_property_parse()
112 if (!property) in tb_property_parse()
115 property->length = entry->length; in tb_property_parse()
117 switch (property->type) { in tb_property_parse()
122 kfree(property); in tb_property_parse()
125 property->value.dir = dir; in tb_property_parse()
129 property->value.data = kcalloc(property->length, sizeof(u32), in tb_property_parse()
131 if (!property->value.data) { in tb_property_parse()
132 kfree(property); in tb_property_parse()
135 parse_dwdata(property->value.data, block + entry->value, in tb_property_parse()
140 property->value.text = kcalloc(property->length, sizeof(u32), in tb_property_parse()
142 if (!property->value.text) { in tb_property_parse()
143 kfree(property); in tb_property_parse()
146 parse_dwdata(property->value.text, block + entry->value, in tb_property_parse()
149 property->value.text[property->length * 4 - 1] = '\0'; in tb_property_parse()
153 property->value.immediate = entry->value; in tb_property_parse()
157 property->type = TB_PROPERTY_TYPE_UNKNOWN; in tb_property_parse()
161 return property; in tb_property_parse()
192 struct tb_property *property; in __tb_property_parse_dir() local
194 property = tb_property_parse(block, block_len, &entries[i]); in __tb_property_parse_dir()
195 if (!property) { in __tb_property_parse_dir()
200 list_add_tail(&property->list, &dir->properties); in __tb_property_parse_dir()
262 static void tb_property_free(struct tb_property *property) in tb_property_free() argument
264 switch (property->type) { in tb_property_free()
266 tb_property_free_dir(property->value.dir); in tb_property_free()
270 kfree(property->value.data); in tb_property_free()
274 kfree(property->value.text); in tb_property_free()
281 kfree(property); in tb_property_free()
294 struct tb_property *property, *tmp; in tb_property_free_dir() local
299 list_for_each_entry_safe(property, tmp, &dir->properties, list) { in tb_property_free_dir()
300 list_del(&property->list); in tb_property_free_dir()
301 tb_property_free(property); in tb_property_free_dir()
311 const struct tb_property *property; in tb_property_dir_length() local
319 list_for_each_entry(property, &dir->properties, list) { in tb_property_dir_length()
322 switch (property->type) { in tb_property_dir_length()
326 property->value.dir, recurse, data_len); in tb_property_dir_length()
336 *data_len += property->length; in tb_property_dir_length()
351 const struct tb_property *property; in __tb_property_format_dir() local
426 list_for_each_entry(property, &dir->properties, list) { in __tb_property_format_dir()
429 format_dwdata(entry, property->key, 2); in __tb_property_format_dir()
430 entry->type = property->type; in __tb_property_format_dir()
432 switch (property->type) { in __tb_property_format_dir()
434 child = property->value.dir; in __tb_property_format_dir()
446 format_dwdata(&block[data_offset], property->value.data, in __tb_property_format_dir()
447 property->length); in __tb_property_format_dir()
448 entry->length = property->length; in __tb_property_format_dir()
454 format_dwdata(&block[data_offset], property->value.text, in __tb_property_format_dir()
455 property->length); in __tb_property_format_dir()
456 entry->length = property->length; in __tb_property_format_dir()
462 entry->length = property->length; in __tb_property_format_dir()
463 entry->value = property->value.immediate; in __tb_property_format_dir()
512 struct tb_property *property; in tb_property_add_immediate() local
517 property = tb_property_alloc(key, TB_PROPERTY_TYPE_VALUE); in tb_property_add_immediate()
518 if (!property) in tb_property_add_immediate()
521 property->length = 1; in tb_property_add_immediate()
522 property->value.immediate = value; in tb_property_add_immediate()
524 list_add_tail(&property->list, &parent->properties); in tb_property_add_immediate()
543 struct tb_property *property; in tb_property_add_data() local
548 property = tb_property_alloc(key, TB_PROPERTY_TYPE_DATA); in tb_property_add_data()
549 if (!property) in tb_property_add_data()
552 property->length = size / 4; in tb_property_add_data()
553 property->value.data = kzalloc(size, GFP_KERNEL); in tb_property_add_data()
554 memcpy(property->value.data, buf, buflen); in tb_property_add_data()
556 list_add_tail(&property->list, &parent->properties); in tb_property_add_data()
574 struct tb_property *property; in tb_property_add_text() local
579 property = tb_property_alloc(key, TB_PROPERTY_TYPE_TEXT); in tb_property_add_text()
580 if (!property) in tb_property_add_text()
583 property->length = size / 4; in tb_property_add_text()
584 property->value.data = kzalloc(size, GFP_KERNEL); in tb_property_add_text()
585 strcpy(property->value.text, text); in tb_property_add_text()
587 list_add_tail(&property->list, &parent->properties); in tb_property_add_text()
601 struct tb_property *property; in tb_property_add_dir() local
606 property = tb_property_alloc(key, TB_PROPERTY_TYPE_DIRECTORY); in tb_property_add_dir()
607 if (!property) in tb_property_add_dir()
610 property->value.dir = dir; in tb_property_add_dir()
612 list_add_tail(&property->list, &parent->properties); in tb_property_add_dir()
624 void tb_property_remove(struct tb_property *property) in tb_property_remove() argument
626 list_del(&property->list); in tb_property_remove()
627 kfree(property); in tb_property_remove()
643 struct tb_property *property; in tb_property_find() local
645 list_for_each_entry(property, &dir->properties, list) { in tb_property_find()
646 if (property->type == type && !strcmp(property->key, key)) in tb_property_find()
647 return property; in tb_property_find()