Lines Matching refs:property

3  * Thunderbolt XDomain property support
82 struct tb_property *property;
84 property = kzalloc(sizeof(*property), GFP_KERNEL);
85 if (!property)
88 strcpy(property->key, key);
89 property->type = type;
90 INIT_LIST_HEAD(&property->list);
92 return property;
99 struct tb_property *property;
108 property = tb_property_alloc(key, entry->type);
109 if (!property)
112 property->length = entry->length;
114 switch (property->type) {
119 kfree(property);
122 property->value.dir = dir;
126 property->value.data = kcalloc(property->length, sizeof(u32),
128 if (!property->value.data) {
129 kfree(property);
132 parse_dwdata(property->value.data, block + entry->value,
137 property->value.text = kcalloc(property->length, sizeof(u32),
139 if (!property->value.text) {
140 kfree(property);
143 parse_dwdata(property->value.text, block + entry->value,
146 property->value.text[property->length * 4 - 1] = '\0';
150 property->value.immediate = entry->value;
154 property->type = TB_PROPERTY_TYPE_UNKNOWN;
158 return property;
193 struct tb_property *property;
195 property = tb_property_parse(block, block_len, &entries[i]);
196 if (!property) {
201 list_add_tail(&property->list, &dir->properties);
208 * tb_property_parse_dir() - Parses properties from given property block
210 * @block_len: Number of dword elements in the property block
236 * tb_property_create_dir() - Creates new property directory
239 * Creates new, empty property directory. If @uuid is %NULL then the
263 static void tb_property_free(struct tb_property *property)
265 switch (property->type) {
267 tb_property_free_dir(property->value.dir);
271 kfree(property->value.data);
275 kfree(property->value.text);
282 kfree(property);
286 * tb_property_free_dir() - Release memory allocated for property directory
295 struct tb_property *property, *tmp;
300 list_for_each_entry_safe(property, tmp, &dir->properties, list) {
301 list_del(&property->list);
302 tb_property_free(property);
312 const struct tb_property *property;
320 list_for_each_entry(property, &dir->properties, list) {
323 switch (property->type) {
327 property->value.dir, recurse, data_len);
337 *data_len += property->length;
352 const struct tb_property *property;
358 * The structure of property block looks like following. Leaf
427 list_for_each_entry(property, &dir->properties, list) {
430 format_dwdata(entry, property->key, 2);
431 entry->type = property->type;
433 switch (property->type) {
435 child = property->value.dir;
447 format_dwdata(&block[data_offset], property->value.data,
448 property->length);
449 entry->length = property->length;
455 format_dwdata(&block[data_offset], property->value.text,
456 property->length);
457 entry->length = property->length;
463 entry->length = property->length;
464 entry->value = property->value.immediate;
481 * @block_len: Length of the property block
514 struct tb_property *property, *p = NULL;
524 list_for_each_entry(property, &dir->properties, list) {
527 p = tb_property_alloc(property->key, property->type);
531 p->length = property->length;
533 switch (property->type) {
535 p->value.dir = tb_property_copy_dir(property->value.dir);
541 p->value.data = kmemdup(property->value.data,
542 property->length * 4,
552 strcpy(p->value.text, property->value.text);
556 p->value.immediate = property->value.immediate;
576 * tb_property_add_immediate() - Add immediate property to directory
577 * @parent: Directory to add the property
578 * @key: Key for the property
579 * @value: Immediate value to store with the property
584 struct tb_property *property;
589 property = tb_property_alloc(key, TB_PROPERTY_TYPE_VALUE);
590 if (!property)
593 property->length = 1;
594 property->value.immediate = value;
596 list_add_tail(&property->list, &parent->properties);
602 * tb_property_add_data() - Adds arbitrary data property to directory
603 * @parent: Directory to add the property
604 * @key: Key for the property
615 struct tb_property *property;
620 property = tb_property_alloc(key, TB_PROPERTY_TYPE_DATA);
621 if (!property)
624 property->length = size / 4;
625 property->value.data = kzalloc(size, GFP_KERNEL);
626 if (!property->value.data) {
627 kfree(property);
631 memcpy(property->value.data, buf, buflen);
633 list_add_tail(&property->list, &parent->properties);
639 * tb_property_add_text() - Adds string property to directory
640 * @parent: Directory to add the property
641 * @key: Key for the property
651 struct tb_property *property;
656 property = tb_property_alloc(key, TB_PROPERTY_TYPE_TEXT);
657 if (!property)
660 property->length = size / 4;
661 property->value.text = kzalloc(size, GFP_KERNEL);
662 if (!property->value.text) {
663 kfree(property);
667 strcpy(property->value.text, text);
669 list_add_tail(&property->list, &parent->properties);
676 * @parent: Directory to add the property
677 * @key: Key for the property
683 struct tb_property *property;
688 property = tb_property_alloc(key, TB_PROPERTY_TYPE_DIRECTORY);
689 if (!property)
692 property->value.dir = dir;
694 list_add_tail(&property->list, &parent->properties);
700 * tb_property_remove() - Removes property from a parent directory
701 * @property: Property to remove
703 * Note memory for @property is released as well so it is not allowed to
706 void tb_property_remove(struct tb_property *property)
708 list_del(&property->list);
709 kfree(property);
714 * tb_property_find() - Find a property from a directory
715 * @dir: Directory where the property is searched
717 * @type: Type of the property
719 * Finds and returns property from the given directory. Does not recurse
720 * into sub-directories. Returns %NULL if the property was not found.
725 struct tb_property *property;
727 list_for_each_entry(property, &dir->properties, list) {
728 if (property->type == type && !strcmp(property->key, key))
729 return property;
737 * tb_property_get_next() - Get next property from directory
739 * @prev: Previous property in the directory (%NULL returns the first)