of/flattree: merge of_get_flat_dt_prop
Merge common code between PowerPC and Microblaze Signed-off-by: Grant Likely <grant.likely@secretlab.ca> Reviewed-by: Wolfram Sang <w.sang@pengutronix.de> Tested-by: Michal Simek <monstr@monstr.eu>
This commit is contained in:
Родитель
31a6a87dfc
Коммит
ca900cfa29
|
@ -50,48 +50,6 @@ typedef u32 cell_t;
|
||||||
/* export that to outside world */
|
/* export that to outside world */
|
||||||
struct device_node *of_chosen;
|
struct device_node *of_chosen;
|
||||||
|
|
||||||
/**
|
|
||||||
* This function can be used within scan_flattened_dt callback to get
|
|
||||||
* access to properties
|
|
||||||
*/
|
|
||||||
void *__init of_get_flat_dt_prop(unsigned long node, const char *name,
|
|
||||||
unsigned long *size)
|
|
||||||
{
|
|
||||||
unsigned long p = node;
|
|
||||||
|
|
||||||
do {
|
|
||||||
u32 tag = *((u32 *)p);
|
|
||||||
u32 sz, noff;
|
|
||||||
const char *nstr;
|
|
||||||
|
|
||||||
p += 4;
|
|
||||||
if (tag == OF_DT_NOP)
|
|
||||||
continue;
|
|
||||||
if (tag != OF_DT_PROP)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
sz = *((u32 *)p);
|
|
||||||
noff = *((u32 *)(p + 4));
|
|
||||||
p += 8;
|
|
||||||
if (initial_boot_params->version < 0x10)
|
|
||||||
p = _ALIGN(p, sz >= 8 ? 8 : 4);
|
|
||||||
|
|
||||||
nstr = find_flat_dt_string(noff);
|
|
||||||
if (nstr == NULL) {
|
|
||||||
printk(KERN_WARNING "Can't find property index"
|
|
||||||
" name !\n");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if (strcmp(name, nstr) == 0) {
|
|
||||||
if (size)
|
|
||||||
*size = sz;
|
|
||||||
return (void *)p;
|
|
||||||
}
|
|
||||||
p += sz;
|
|
||||||
p = _ALIGN(p, 4);
|
|
||||||
} while (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
int __init of_flat_dt_is_compatible(unsigned long node, const char *compat)
|
int __init of_flat_dt_is_compatible(unsigned long node, const char *compat)
|
||||||
{
|
{
|
||||||
const char *cp;
|
const char *cp;
|
||||||
|
|
|
@ -80,48 +80,6 @@ extern rwlock_t devtree_lock; /* temporary while merging */
|
||||||
/* export that to outside world */
|
/* export that to outside world */
|
||||||
struct device_node *of_chosen;
|
struct device_node *of_chosen;
|
||||||
|
|
||||||
/**
|
|
||||||
* This function can be used within scan_flattened_dt callback to get
|
|
||||||
* access to properties
|
|
||||||
*/
|
|
||||||
void* __init of_get_flat_dt_prop(unsigned long node, const char *name,
|
|
||||||
unsigned long *size)
|
|
||||||
{
|
|
||||||
unsigned long p = node;
|
|
||||||
|
|
||||||
do {
|
|
||||||
u32 tag = *((u32 *)p);
|
|
||||||
u32 sz, noff;
|
|
||||||
const char *nstr;
|
|
||||||
|
|
||||||
p += 4;
|
|
||||||
if (tag == OF_DT_NOP)
|
|
||||||
continue;
|
|
||||||
if (tag != OF_DT_PROP)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
sz = *((u32 *)p);
|
|
||||||
noff = *((u32 *)(p + 4));
|
|
||||||
p += 8;
|
|
||||||
if (initial_boot_params->version < 0x10)
|
|
||||||
p = _ALIGN(p, sz >= 8 ? 8 : 4);
|
|
||||||
|
|
||||||
nstr = find_flat_dt_string(noff);
|
|
||||||
if (nstr == NULL) {
|
|
||||||
printk(KERN_WARNING "Can't find property index"
|
|
||||||
" name !\n");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if (strcmp(name, nstr) == 0) {
|
|
||||||
if (size)
|
|
||||||
*size = sz;
|
|
||||||
return (void *)p;
|
|
||||||
}
|
|
||||||
p += sz;
|
|
||||||
p = _ALIGN(p, 4);
|
|
||||||
} while(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
int __init of_flat_dt_is_compatible(unsigned long node, const char *compat)
|
int __init of_flat_dt_is_compatible(unsigned long node, const char *compat)
|
||||||
{
|
{
|
||||||
const char* cp;
|
const char* cp;
|
||||||
|
|
|
@ -99,3 +99,46 @@ unsigned long __init of_get_flat_dt_root(void)
|
||||||
return _ALIGN(p + strlen((char *)p) + 1, 4);
|
return _ALIGN(p + strlen((char *)p) + 1, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* of_get_flat_dt_prop - Given a node in the flat blob, return the property ptr
|
||||||
|
*
|
||||||
|
* This function can be used within scan_flattened_dt callback to get
|
||||||
|
* access to properties
|
||||||
|
*/
|
||||||
|
void *__init of_get_flat_dt_prop(unsigned long node, const char *name,
|
||||||
|
unsigned long *size)
|
||||||
|
{
|
||||||
|
unsigned long p = node;
|
||||||
|
|
||||||
|
do {
|
||||||
|
u32 tag = *((u32 *)p);
|
||||||
|
u32 sz, noff;
|
||||||
|
const char *nstr;
|
||||||
|
|
||||||
|
p += 4;
|
||||||
|
if (tag == OF_DT_NOP)
|
||||||
|
continue;
|
||||||
|
if (tag != OF_DT_PROP)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
sz = *((u32 *)p);
|
||||||
|
noff = *((u32 *)(p + 4));
|
||||||
|
p += 8;
|
||||||
|
if (initial_boot_params->version < 0x10)
|
||||||
|
p = _ALIGN(p, sz >= 8 ? 8 : 4);
|
||||||
|
|
||||||
|
nstr = find_flat_dt_string(noff);
|
||||||
|
if (nstr == NULL) {
|
||||||
|
pr_warning("Can't find property index name !\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
if (strcmp(name, nstr) == 0) {
|
||||||
|
if (size)
|
||||||
|
*size = sz;
|
||||||
|
return (void *)p;
|
||||||
|
}
|
||||||
|
p += sz;
|
||||||
|
p = _ALIGN(p, 4);
|
||||||
|
} while (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче