2006-06-22 02:35:28 +04:00
# ifndef _SPARC64_PROM_H
# define _SPARC64_PROM_H
# ifdef __KERNEL__
/*
* Definitions for talking to the Open Firmware PROM on
* Power Macintosh computers .
*
* Copyright ( C ) 1996 - 2005 Paul Mackerras .
*
* Updates for PPC64 by Peter Bergner & David Engebretsen , IBM Corp .
* Updates for SPARC64 by David S . Miller
*
* 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/types.h>
# include <linux/proc_fs.h>
# include <asm/atomic.h>
typedef u32 phandle ;
typedef u32 ihandle ;
struct property {
char * name ;
int length ;
void * value ;
struct property * next ;
2006-06-26 10:18:36 +04:00
unsigned long _flags ;
2006-06-26 10:18:57 +04:00
unsigned int unique_id ;
2006-06-22 02:35:28 +04:00
} ;
2006-06-30 02:07:37 +04:00
struct of_irq_controller ;
2006-06-22 02:35:28 +04:00
struct device_node {
char * name ;
char * type ;
phandle node ;
char * path_component_name ;
char * full_name ;
struct property * properties ;
struct property * deadprops ; /* removed properties */
struct device_node * parent ;
struct device_node * child ;
struct device_node * sibling ;
struct device_node * next ; /* next device of same type */
struct device_node * allnext ; /* next in list of all nodes */
struct proc_dir_entry * pde ; /* this node's proc directory */
struct kref kref ;
unsigned long _flags ;
void * data ;
2006-06-26 10:18:57 +04:00
unsigned int unique_id ;
2006-06-30 02:07:37 +04:00
struct of_irq_controller * irq_trans ;
} ;
struct of_irq_controller {
unsigned int ( * irq_build ) ( struct device_node * , unsigned int , void * ) ;
void * data ;
2006-06-22 02:35:28 +04:00
} ;
2006-06-26 10:18:36 +04:00
/* 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)
2006-06-30 01:34:50 +04:00
# define OF_BAD_ADDR ((u64)-1)
2006-06-22 02:35:28 +04:00
static inline void set_node_proc_entry ( struct device_node * dn , struct proc_dir_entry * de )
{
dn - > pde = de ;
}
2006-06-22 03:33:54 +04:00
extern struct device_node * of_find_node_by_name ( struct device_node * from ,
const char * name ) ;
# define for_each_node_by_name(dn, name) \
for ( dn = of_find_node_by_name ( NULL , name ) ; dn ; \
dn = of_find_node_by_name ( dn , name ) )
extern struct device_node * of_find_node_by_type ( struct device_node * from ,
const char * type ) ;
# define for_each_node_by_type(dn, type) \
for ( dn = of_find_node_by_type ( NULL , type ) ; dn ; \
dn = of_find_node_by_type ( dn , type ) )
2006-06-23 09:08:58 +04:00
extern struct device_node * of_find_compatible_node ( struct device_node * from ,
const char * type , const char * compat ) ;
2006-06-22 02:35:28 +04:00
extern struct device_node * of_find_node_by_path ( const char * path ) ;
2006-06-23 03:18:54 +04:00
extern struct device_node * of_find_node_by_phandle ( phandle handle ) ;
2006-06-22 02:35:28 +04:00
extern struct device_node * of_get_parent ( const struct device_node * node ) ;
extern struct device_node * of_get_next_child ( const struct device_node * node ,
struct device_node * prev ) ;
extern struct property * of_find_property ( struct device_node * np ,
const char * name ,
int * lenp ) ;
2006-06-23 09:08:58 +04:00
extern int of_device_is_compatible ( struct device_node * device , const char * ) ;
2006-06-23 03:18:54 +04:00
extern void * of_get_property ( struct device_node * node , const char * name ,
int * lenp ) ;
2006-06-26 10:18:36 +04:00
extern int of_set_property ( struct device_node * node , const char * name , void * val , int len ) ;
2006-06-22 10:07:29 +04:00
extern int of_getintprop_default ( struct device_node * np ,
const char * name ,
int def ) ;
2006-06-30 01:34:12 +04:00
extern int of_n_addr_cells ( struct device_node * np ) ;
extern int of_n_size_cells ( struct device_node * np ) ;
2006-06-22 02:35:28 +04:00
extern void prom_build_devicetree ( void ) ;
# endif /* __KERNEL__ */
# endif /* _SPARC64_PROM_H */