Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/alpha/kernel/gct.c
26424 views
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
}
49
50