|
@@ -1130,120 +1130,6 @@ static int __init prom_reconfig_setup(void)
|
|
|
__initcall(prom_reconfig_setup);
|
|
|
#endif
|
|
|
|
|
|
-/*
|
|
|
- * Add a property to a node
|
|
|
- */
|
|
|
-int prom_add_property(struct device_node* np, struct property* prop)
|
|
|
-{
|
|
|
- struct property **next;
|
|
|
- unsigned long flags;
|
|
|
-
|
|
|
- prop->next = NULL;
|
|
|
- write_lock_irqsave(&devtree_lock, flags);
|
|
|
- next = &np->properties;
|
|
|
- while (*next) {
|
|
|
- if (strcmp(prop->name, (*next)->name) == 0) {
|
|
|
- /* duplicate ! don't insert it */
|
|
|
- write_unlock_irqrestore(&devtree_lock, flags);
|
|
|
- return -1;
|
|
|
- }
|
|
|
- next = &(*next)->next;
|
|
|
- }
|
|
|
- *next = prop;
|
|
|
- write_unlock_irqrestore(&devtree_lock, flags);
|
|
|
-
|
|
|
-#ifdef CONFIG_PROC_DEVICETREE
|
|
|
- /* try to add to proc as well if it was initialized */
|
|
|
- if (np->pde)
|
|
|
- proc_device_tree_add_prop(np->pde, prop);
|
|
|
-#endif /* CONFIG_PROC_DEVICETREE */
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
- * Remove a property from a node. Note that we don't actually
|
|
|
- * remove it, since we have given out who-knows-how-many pointers
|
|
|
- * to the data using get-property. Instead we just move the property
|
|
|
- * to the "dead properties" list, so it won't be found any more.
|
|
|
- */
|
|
|
-int prom_remove_property(struct device_node *np, struct property *prop)
|
|
|
-{
|
|
|
- struct property **next;
|
|
|
- unsigned long flags;
|
|
|
- int found = 0;
|
|
|
-
|
|
|
- write_lock_irqsave(&devtree_lock, flags);
|
|
|
- next = &np->properties;
|
|
|
- while (*next) {
|
|
|
- if (*next == prop) {
|
|
|
- /* found the node */
|
|
|
- *next = prop->next;
|
|
|
- prop->next = np->deadprops;
|
|
|
- np->deadprops = prop;
|
|
|
- found = 1;
|
|
|
- break;
|
|
|
- }
|
|
|
- next = &(*next)->next;
|
|
|
- }
|
|
|
- write_unlock_irqrestore(&devtree_lock, flags);
|
|
|
-
|
|
|
- if (!found)
|
|
|
- return -ENODEV;
|
|
|
-
|
|
|
-#ifdef CONFIG_PROC_DEVICETREE
|
|
|
- /* try to remove the proc node as well */
|
|
|
- if (np->pde)
|
|
|
- proc_device_tree_remove_prop(np->pde, prop);
|
|
|
-#endif /* CONFIG_PROC_DEVICETREE */
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
- * Update a property in a node. Note that we don't actually
|
|
|
- * remove it, since we have given out who-knows-how-many pointers
|
|
|
- * to the data using get-property. Instead we just move the property
|
|
|
- * to the "dead properties" list, and add the new property to the
|
|
|
- * property list
|
|
|
- */
|
|
|
-int prom_update_property(struct device_node *np,
|
|
|
- struct property *newprop,
|
|
|
- struct property *oldprop)
|
|
|
-{
|
|
|
- struct property **next;
|
|
|
- unsigned long flags;
|
|
|
- int found = 0;
|
|
|
-
|
|
|
- write_lock_irqsave(&devtree_lock, flags);
|
|
|
- next = &np->properties;
|
|
|
- while (*next) {
|
|
|
- if (*next == oldprop) {
|
|
|
- /* found the node */
|
|
|
- newprop->next = oldprop->next;
|
|
|
- *next = newprop;
|
|
|
- oldprop->next = np->deadprops;
|
|
|
- np->deadprops = oldprop;
|
|
|
- found = 1;
|
|
|
- break;
|
|
|
- }
|
|
|
- next = &(*next)->next;
|
|
|
- }
|
|
|
- write_unlock_irqrestore(&devtree_lock, flags);
|
|
|
-
|
|
|
- if (!found)
|
|
|
- return -ENODEV;
|
|
|
-
|
|
|
-#ifdef CONFIG_PROC_DEVICETREE
|
|
|
- /* try to add to proc as well if it was initialized */
|
|
|
- if (np->pde)
|
|
|
- proc_device_tree_update_prop(np->pde, newprop, oldprop);
|
|
|
-#endif /* CONFIG_PROC_DEVICETREE */
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
/* Find the device node for a given logical cpu number, also returns the cpu
|
|
|
* local thread number (index in ibm,interrupt-server#s) if relevant and
|
|
|
* asked for (non NULL)
|