1 #ifndef L4_CXX_OF1275_H__
2 #define L4_CXX_OF1275_H__
20 prom_args(const char *s, int na, int nr) : service(s), nargs(na), nret(nr) {}
23 typedef int (*prom_entry)(struct prom_args *);
28 //int prom_call(const char *service, int nargs, int nret, ...) const;
35 typedef void *ihandle_t;
36 typedef void *phandle_t;
45 unsigned prom_call(const char *service, int nargs, int nret, ...) const
47 struct prom_args args = prom_args(service, nargs, nret);
51 for(int i = 0; i < nargs; i++)
52 args.args[i] = va_arg(list, void*);
55 for(int i = 0; i < nret; i++)
56 args.args[nargs + i] = 0;
61 return (nret > 0) ? (int)args.args[nargs] : 0;
65 inline int prom_getprop(phandle_t node, const char *pname, void *value,
68 return prom_call("getprop", 4, 1, node, pname, (unsigned long)value,
72 inline int prom_next_node(phandle_t *nodep)
76 if ((node = *nodep) != 0
77 && (*nodep = (phandle_t)prom_call("child", 1, 1, node)) != 0)
79 if ((*nodep = (phandle_t)prom_call("peer", 1, 1, node)) != 0)
82 if ((node = (phandle_t)prom_call("parent", 1, 1, node)) == 0)
84 if ((*nodep = (phandle_t)prom_call("peer", 1, 1, node)) != 0)
90 static inline bool handle_valid(T p)
92 return ((unsigned)p != 0 && (unsigned)p != PROM_ERROR);
97 Of(unsigned long prom) : _prom(reinterpret_cast<prom_entry>(prom)) {}
100 inline void set_prom(T prom)
102 _prom = reinterpret_cast<prom_entry>(prom);