linux/arch/sparc/include/asm/mdesc.h
<<
>>
Prefs
   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
   8struct 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 */
  15extern struct mdesc_handle *mdesc_grab(void);
  16extern void mdesc_release(struct mdesc_handle *);
  17
  18#define MDESC_NODE_NULL         (~(u64)0)
  19
  20extern 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 */
  37extern const void *mdesc_get_property(struct mdesc_handle *handle,
  38                                      u64 node, const char *name, int *lenp);
  39extern 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
  53extern 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
  60extern u64 mdesc_arc_target(struct mdesc_handle *hp, u64 arc);
  61
  62extern void mdesc_update(void);
  63
  64struct 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
  72extern void mdesc_register_notifier(struct mdesc_notifier_client *client);
  73
  74extern void mdesc_fill_in_cpu_data(cpumask_t *mask);
  75extern void mdesc_populate_present_mask(cpumask_t *mask);
  76extern void mdesc_get_page_sizes(cpumask_t *mask, unsigned long *pgsz_mask);
  77
  78extern void sun4v_mdesc_init(void);
  79
  80#endif
  81