Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 123366
b: refs/heads/master
c: dfa7606
h: refs/heads/master
v: v3
  • Loading branch information
David S. Miller committed Dec 6, 2008
1 parent a7b186b commit a0f42d1
Show file tree
Hide file tree
Showing 5 changed files with 123 additions and 189 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: ab04323e5b8c50d6e8f7f4a3e4118ba5fcba61a1
refs/heads/master: dfa76060be85dd48d3803bc26f6a6d2e93e812f0
1 change: 1 addition & 0 deletions trunk/arch/sparc/kernel/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ obj-y += ptrace_$(BITS).o
obj-y += unaligned_$(BITS).o
obj-y += una_asm_$(BITS).o
obj-$(CONFIG_SPARC32) += muldiv.o
obj-y += prom_common.o
obj-y += prom_$(BITS).o
obj-y += of_device_$(BITS).o

Expand Down
94 changes: 0 additions & 94 deletions trunk/arch/sparc/kernel/prom_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,100 +27,6 @@

#include "prom.h"

struct device_node *of_find_node_by_phandle(phandle handle)
{
struct device_node *np;

for (np = allnodes; np != 0; np = np->allnext)
if (np->node == handle)
break;

return np;
}
EXPORT_SYMBOL(of_find_node_by_phandle);

int of_getintprop_default(struct device_node *np, const char *name, int def)
{
struct property *prop;
int len;

prop = of_find_property(np, name, &len);
if (!prop || len != 4)
return def;

return *(int *) prop->value;
}
EXPORT_SYMBOL(of_getintprop_default);

DEFINE_MUTEX(of_set_property_mutex);
EXPORT_SYMBOL(of_set_property_mutex);

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 (!strcasecmp(prop->name, name)) {
void *old_val = prop->value;
int ret;

mutex_lock(&of_set_property_mutex);
ret = prom_setprop(dp->node, (char *) name, val, len);
mutex_unlock(&of_set_property_mutex);

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);

int of_find_in_proplist(const char *list, const char *match, int len)
{
while (len > 0) {
int l;

if (!strcmp(list, match))
return 1;
l = strlen(list) + 1;
list += l;
len -= l;
}
return 0;
}
EXPORT_SYMBOL(of_find_in_proplist);

static unsigned int prom_early_allocated;

static void * __init prom_early_alloc(unsigned long size)
Expand Down
94 changes: 0 additions & 94 deletions trunk/arch/sparc/kernel/prom_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,100 +32,6 @@

#include "prom.h"

struct device_node *of_find_node_by_phandle(phandle handle)
{
struct device_node *np;

for (np = allnodes; np; np = np->allnext)
if (np->node == handle)
break;

return np;
}
EXPORT_SYMBOL(of_find_node_by_phandle);

int of_getintprop_default(struct device_node *np, const char *name, int def)
{
struct property *prop;
int len;

prop = of_find_property(np, name, &len);
if (!prop || len != 4)
return def;

return *(int *) prop->value;
}
EXPORT_SYMBOL(of_getintprop_default);

DEFINE_MUTEX(of_set_property_mutex);
EXPORT_SYMBOL(of_set_property_mutex);

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 (!strcasecmp(prop->name, name)) {
void *old_val = prop->value;
int ret;

mutex_lock(&of_set_property_mutex);
ret = prom_setprop(dp->node, name, val, len);
mutex_unlock(&of_set_property_mutex);

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);

int of_find_in_proplist(const char *list, const char *match, int len)
{
while (len > 0) {
int l;

if (!strcmp(list, match))
return 1;
l = strlen(list) + 1;
list += l;
len -= l;
}
return 0;
}
EXPORT_SYMBOL(of_find_in_proplist);

static unsigned int prom_early_allocated __initdata;

static void * __init prom_early_alloc(unsigned long size)
Expand Down
121 changes: 121 additions & 0 deletions trunk/arch/sparc/kernel/prom_common.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
/* prom_common.c: OF device tree support common code.
*
* Paul Mackerras August 1996.
* Copyright (C) 1996-2005 Paul Mackerras.
*
* Adapted for 64bit PowerPC by Dave Engebretsen and Peter Bergner.
* {engebret|bergner}@us.ibm.com
*
* Adapted for sparc by David S. Miller davem@davemloft.net
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*/

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/errno.h>
#include <linux/mutex.h>
#include <linux/slab.h>
#include <linux/of.h>
#include <asm/prom.h>
#include <asm/oplib.h>

#include "prom.h"

struct device_node *of_find_node_by_phandle(phandle handle)
{
struct device_node *np;

for (np = allnodes; np; np = np->allnext)
if (np->node == handle)
break;

return np;
}
EXPORT_SYMBOL(of_find_node_by_phandle);

int of_getintprop_default(struct device_node *np, const char *name, int def)
{
struct property *prop;
int len;

prop = of_find_property(np, name, &len);
if (!prop || len != 4)
return def;

return *(int *) prop->value;
}
EXPORT_SYMBOL(of_getintprop_default);

DEFINE_MUTEX(of_set_property_mutex);
EXPORT_SYMBOL(of_set_property_mutex);

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 (!strcasecmp(prop->name, name)) {
void *old_val = prop->value;
int ret;

mutex_lock(&of_set_property_mutex);
ret = prom_setprop(dp->node, name, val, len);
mutex_unlock(&of_set_property_mutex);

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);

int of_find_in_proplist(const char *list, const char *match, int len)
{
while (len > 0) {
int l;

if (!strcmp(list, match))
return 1;
l = strlen(list) + 1;
list += l;
len -= l;
}
return 0;
}
EXPORT_SYMBOL(of_find_in_proplist);

0 comments on commit a0f42d1

Please sign in to comment.