linux/arch/alpha/kernel/gct.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 *      linux/arch/alpha/kernel/gct.c
   4 */
   5
   6#include <linux/kernel.h>
   7#include <linux/types.h>
   8#include <linux/errno.h>
   9
  10#include <asm/hwrpb.h>
  11#include <asm/gct.h>
  12
  13int
  14gct6_find_nodes(gct6_node *node, gct6_search_struct *search)
  15{
  16        gct6_search_struct *wanted;
  17        int status = 0;
  18
  19        /* First check the magic number.  */
  20        if (node->magic != GCT_NODE_MAGIC) {
  21                printk(KERN_ERR "GCT Node MAGIC incorrect - GCT invalid\n");
  22                return -EINVAL;
  23        }
  24
  25        /* Check against the search struct.  */
  26        for (wanted = search; 
  27             wanted && (wanted->type | wanted->subtype); 
  28             wanted++) {
  29                if (node->type != wanted->type)
  30                        continue;
  31                if (node->subtype != wanted->subtype)
  32                        continue;
  33
  34                /* Found it -- call out.  */
  35                if (wanted->callout)
  36                        wanted->callout(node);
  37        }
  38
  39        /* Now walk the tree, siblings first.  */
  40        if (node->next) 
  41                status |= gct6_find_nodes(GCT_NODE_PTR(node->next), search);
  42
  43        /* Then the children.  */
  44        if (node->child) 
  45                status |= gct6_find_nodes(GCT_NODE_PTR(node->child), search);
  46
  47        return status;
  48}
  49