Commit | Line | Data |
---|---|---|
a00736e9 SR |
1 | #ifndef _SPARC64_MDESC_H |
2 | #define _SPARC64_MDESC_H | |
3 | ||
4 | #include <linux/types.h> | |
5 | #include <linux/cpumask.h> | |
6 | #include <asm/prom.h> | |
7 | ||
8 | struct mdesc_handle; | |
9 | ||
10 | /* Machine description operations are to be surrounded by grab and | |
11 | * release calls. The mdesc_handle returned from the grab is | |
12 | * the first argument to all of the operational calls that work | |
13 | * on mdescs. | |
14 | */ | |
15 | extern struct mdesc_handle *mdesc_grab(void); | |
16 | extern void mdesc_release(struct mdesc_handle *); | |
17 | ||
18 | #define MDESC_NODE_NULL (~(u64)0) | |
19 | ||
20 | extern u64 mdesc_node_by_name(struct mdesc_handle *handle, | |
21 | u64 from_node, const char *name); | |
22 | #define mdesc_for_each_node_by_name(__hdl, __node, __name) \ | |
23 | for (__node = mdesc_node_by_name(__hdl, MDESC_NODE_NULL, __name); \ | |
24 | (__node) != MDESC_NODE_NULL; \ | |
25 | __node = mdesc_node_by_name(__hdl, __node, __name)) | |
26 | ||
27 | /* Access to property values returned from mdesc_get_property() are | |
28 | * only valid inside of a mdesc_grab()/mdesc_release() sequence. | |
29 | * Once mdesc_release() is called, the memory backed up by these | |
30 | * pointers may reference freed up memory. | |
31 | * | |
32 | * Therefore callers must make copies of any property values | |
33 | * they need. | |
34 | * | |
35 | * These same rules apply to mdesc_node_name(). | |
36 | */ | |
37 | extern const void *mdesc_get_property(struct mdesc_handle *handle, | |
38 | u64 node, const char *name, int *lenp); | |
39 | extern const char *mdesc_node_name(struct mdesc_handle *hp, u64 node); | |
40 | ||
41 | /* MD arc iteration, the standard sequence is: | |
42 | * | |
43 | * unsigned long arc; | |
44 | * mdesc_for_each_arc(arc, handle, node, MDESC_ARC_TYPE_{FWD,BACK}) { | |
45 | * unsigned long target = mdesc_arc_target(handle, arc); | |
46 | * ... | |
47 | * } | |
48 | */ | |
49 | ||
50 | #define MDESC_ARC_TYPE_FWD "fwd" | |
51 | #define MDESC_ARC_TYPE_BACK "back" | |
52 | ||
53 | extern u64 mdesc_next_arc(struct mdesc_handle *handle, u64 from, | |
54 | const char *arc_type); | |
55 | #define mdesc_for_each_arc(__arc, __hdl, __node, __type) \ | |
56 | for (__arc = mdesc_next_arc(__hdl, __node, __type); \ | |
57 | (__arc) != MDESC_NODE_NULL; \ | |
58 | __arc = mdesc_next_arc(__hdl, __arc, __type)) | |
59 | ||
60 | extern u64 mdesc_arc_target(struct mdesc_handle *hp, u64 arc); | |
61 | ||
62 | extern void mdesc_update(void); | |
63 | ||
64 | struct mdesc_notifier_client { | |
65 | void (*add)(struct mdesc_handle *handle, u64 node); | |
66 | void (*remove)(struct mdesc_handle *handle, u64 node); | |
67 | ||
68 | const char *node_name; | |
69 | struct mdesc_notifier_client *next; | |
70 | }; | |
71 | ||
72 | extern void mdesc_register_notifier(struct mdesc_notifier_client *client); | |
73 | ||
74 | extern void mdesc_fill_in_cpu_data(cpumask_t mask); | |
75 | ||
76 | extern void sun4v_mdesc_init(void); | |
77 | ||
78 | #endif |