Loading arch/sparc/kernel/prom.c +53 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,11 @@ static struct device_node *allnodes; /* use when traversing tree through the allnext, child, sibling, * or parent members of struct device_node. */ static DEFINE_RWLOCK(devtree_lock); int of_device_is_compatible(struct device_node *device, const char *compat) { const char* cp; Loading Loading @@ -185,6 +190,54 @@ int of_getintprop_default(struct device_node *np, const char *name, int def) } EXPORT_SYMBOL(of_getintprop_default); int of_set_property(struct device_node *dp, const char *name, void *val, int len) { struct property **prevp; void *new_val; int err; new_val = kmalloc(len, GFP_KERNEL); if (!new_val) return -ENOMEM; memcpy(new_val, val, len); err = -ENODEV; write_lock(&devtree_lock); prevp = &dp->properties; while (*prevp) { struct property *prop = *prevp; if (!strcmp(prop->name, name)) { void *old_val = prop->value; int ret; ret = prom_setprop(dp->node, name, val, len); err = -EINVAL; if (ret >= 0) { prop->value = new_val; prop->length = len; if (OF_IS_DYNAMIC(prop)) kfree(old_val); OF_MARK_DYNAMIC(prop); err = 0; } break; } prevp = &(*prevp)->next; } write_unlock(&devtree_lock); /* XXX Upate procfs if necessary... */ return err; } EXPORT_SYMBOL(of_set_property); static unsigned int prom_early_allocated; static void * __init prom_early_alloc(unsigned long size) Loading arch/sparc64/kernel/prom.c +53 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,11 @@ static struct device_node *allnodes; /* use when traversing tree through the allnext, child, sibling, * or parent members of struct device_node. */ static DEFINE_RWLOCK(devtree_lock); int of_device_is_compatible(struct device_node *device, const char *compat) { const char* cp; Loading Loading @@ -185,6 +190,54 @@ int of_getintprop_default(struct device_node *np, const char *name, int def) } EXPORT_SYMBOL(of_getintprop_default); int of_set_property(struct device_node *dp, const char *name, void *val, int len) { struct property **prevp; void *new_val; int err; new_val = kmalloc(len, GFP_KERNEL); if (!new_val) return -ENOMEM; memcpy(new_val, val, len); err = -ENODEV; write_lock(&devtree_lock); prevp = &dp->properties; while (*prevp) { struct property *prop = *prevp; if (!strcmp(prop->name, name)) { void *old_val = prop->value; int ret; ret = prom_setprop(dp->node, name, val, len); err = -EINVAL; if (ret >= 0) { prop->value = new_val; prop->length = len; if (OF_IS_DYNAMIC(prop)) kfree(old_val); OF_MARK_DYNAMIC(prop); err = 0; } break; } prevp = &(*prevp)->next; } write_unlock(&devtree_lock); /* XXX Upate procfs if necessary... */ return err; } EXPORT_SYMBOL(of_set_property); static unsigned int prom_early_allocated; static void * __init prom_early_alloc(unsigned long size) Loading include/asm-sparc/prom.h +8 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ struct property { int length; void *value; struct property *next; unsigned long _flags; }; struct device_node { Loading @@ -60,6 +61,12 @@ struct device_node { void *data; }; /* flag descriptions */ #define OF_DYNAMIC 1 /* node and properties were allocated via kmalloc */ #define OF_IS_DYNAMIC(x) test_bit(OF_DYNAMIC, &x->_flags) #define OF_MARK_DYNAMIC(x) set_bit(OF_DYNAMIC, &x->_flags) static inline void set_node_proc_entry(struct device_node *dn, struct proc_dir_entry *de) { dn->pde = de; Loading Loading @@ -88,6 +95,7 @@ extern struct property *of_find_property(struct device_node *np, extern int of_device_is_compatible(struct device_node *device, const char *); extern void *of_get_property(struct device_node *node, const char *name, int *lenp); extern int of_set_property(struct device_node *node, const char *name, void *val, int len); extern int of_getintprop_default(struct device_node *np, const char *name, int def); Loading include/asm-sparc64/prom.h +8 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ struct property { int length; void *value; struct property *next; unsigned long _flags; }; struct device_node { Loading @@ -60,6 +61,12 @@ struct device_node { void *data; }; /* flag descriptions */ #define OF_DYNAMIC 1 /* node and properties were allocated via kmalloc */ #define OF_IS_DYNAMIC(x) test_bit(OF_DYNAMIC, &x->_flags) #define OF_MARK_DYNAMIC(x) set_bit(OF_DYNAMIC, &x->_flags) static inline void set_node_proc_entry(struct device_node *dn, struct proc_dir_entry *de) { dn->pde = de; Loading Loading @@ -88,6 +95,7 @@ extern struct property *of_find_property(struct device_node *np, extern int of_device_is_compatible(struct device_node *device, const char *); extern void *of_get_property(struct device_node *node, const char *name, int *lenp); extern int of_set_property(struct device_node *node, const char *name, void *val, int len); extern int of_getintprop_default(struct device_node *np, const char *name, int def); Loading Loading
arch/sparc/kernel/prom.c +53 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,11 @@ static struct device_node *allnodes; /* use when traversing tree through the allnext, child, sibling, * or parent members of struct device_node. */ static DEFINE_RWLOCK(devtree_lock); int of_device_is_compatible(struct device_node *device, const char *compat) { const char* cp; Loading Loading @@ -185,6 +190,54 @@ int of_getintprop_default(struct device_node *np, const char *name, int def) } EXPORT_SYMBOL(of_getintprop_default); int of_set_property(struct device_node *dp, const char *name, void *val, int len) { struct property **prevp; void *new_val; int err; new_val = kmalloc(len, GFP_KERNEL); if (!new_val) return -ENOMEM; memcpy(new_val, val, len); err = -ENODEV; write_lock(&devtree_lock); prevp = &dp->properties; while (*prevp) { struct property *prop = *prevp; if (!strcmp(prop->name, name)) { void *old_val = prop->value; int ret; ret = prom_setprop(dp->node, name, val, len); err = -EINVAL; if (ret >= 0) { prop->value = new_val; prop->length = len; if (OF_IS_DYNAMIC(prop)) kfree(old_val); OF_MARK_DYNAMIC(prop); err = 0; } break; } prevp = &(*prevp)->next; } write_unlock(&devtree_lock); /* XXX Upate procfs if necessary... */ return err; } EXPORT_SYMBOL(of_set_property); static unsigned int prom_early_allocated; static void * __init prom_early_alloc(unsigned long size) Loading
arch/sparc64/kernel/prom.c +53 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,11 @@ static struct device_node *allnodes; /* use when traversing tree through the allnext, child, sibling, * or parent members of struct device_node. */ static DEFINE_RWLOCK(devtree_lock); int of_device_is_compatible(struct device_node *device, const char *compat) { const char* cp; Loading Loading @@ -185,6 +190,54 @@ int of_getintprop_default(struct device_node *np, const char *name, int def) } EXPORT_SYMBOL(of_getintprop_default); int of_set_property(struct device_node *dp, const char *name, void *val, int len) { struct property **prevp; void *new_val; int err; new_val = kmalloc(len, GFP_KERNEL); if (!new_val) return -ENOMEM; memcpy(new_val, val, len); err = -ENODEV; write_lock(&devtree_lock); prevp = &dp->properties; while (*prevp) { struct property *prop = *prevp; if (!strcmp(prop->name, name)) { void *old_val = prop->value; int ret; ret = prom_setprop(dp->node, name, val, len); err = -EINVAL; if (ret >= 0) { prop->value = new_val; prop->length = len; if (OF_IS_DYNAMIC(prop)) kfree(old_val); OF_MARK_DYNAMIC(prop); err = 0; } break; } prevp = &(*prevp)->next; } write_unlock(&devtree_lock); /* XXX Upate procfs if necessary... */ return err; } EXPORT_SYMBOL(of_set_property); static unsigned int prom_early_allocated; static void * __init prom_early_alloc(unsigned long size) Loading
include/asm-sparc/prom.h +8 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ struct property { int length; void *value; struct property *next; unsigned long _flags; }; struct device_node { Loading @@ -60,6 +61,12 @@ struct device_node { void *data; }; /* flag descriptions */ #define OF_DYNAMIC 1 /* node and properties were allocated via kmalloc */ #define OF_IS_DYNAMIC(x) test_bit(OF_DYNAMIC, &x->_flags) #define OF_MARK_DYNAMIC(x) set_bit(OF_DYNAMIC, &x->_flags) static inline void set_node_proc_entry(struct device_node *dn, struct proc_dir_entry *de) { dn->pde = de; Loading Loading @@ -88,6 +95,7 @@ extern struct property *of_find_property(struct device_node *np, extern int of_device_is_compatible(struct device_node *device, const char *); extern void *of_get_property(struct device_node *node, const char *name, int *lenp); extern int of_set_property(struct device_node *node, const char *name, void *val, int len); extern int of_getintprop_default(struct device_node *np, const char *name, int def); Loading
include/asm-sparc64/prom.h +8 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ struct property { int length; void *value; struct property *next; unsigned long _flags; }; struct device_node { Loading @@ -60,6 +61,12 @@ struct device_node { void *data; }; /* flag descriptions */ #define OF_DYNAMIC 1 /* node and properties were allocated via kmalloc */ #define OF_IS_DYNAMIC(x) test_bit(OF_DYNAMIC, &x->_flags) #define OF_MARK_DYNAMIC(x) set_bit(OF_DYNAMIC, &x->_flags) static inline void set_node_proc_entry(struct device_node *dn, struct proc_dir_entry *de) { dn->pde = de; Loading Loading @@ -88,6 +95,7 @@ extern struct property *of_find_property(struct device_node *np, extern int of_device_is_compatible(struct device_node *device, const char *); extern void *of_get_property(struct device_node *node, const char *name, int *lenp); extern int of_set_property(struct device_node *node, const char *name, void *val, int len); extern int of_getintprop_default(struct device_node *np, const char *name, int def); Loading