Merge tag 'for-4.15-rc2-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave...
[sfrench/cifs-2.6.git] / arch / alpha / kernel / gct.c
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
13 int
14 gct6_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 }