1*b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0 21da177e4SLinus Torvalds /* 31da177e4SLinus Torvalds * linux/arch/alpha/kernel/gct.c 41da177e4SLinus Torvalds */ 51da177e4SLinus Torvalds 61da177e4SLinus Torvalds #include <linux/kernel.h> 71da177e4SLinus Torvalds #include <linux/types.h> 81da177e4SLinus Torvalds #include <linux/errno.h> 91da177e4SLinus Torvalds 101da177e4SLinus Torvalds #include <asm/hwrpb.h> 111da177e4SLinus Torvalds #include <asm/gct.h> 121da177e4SLinus Torvalds 131da177e4SLinus Torvalds int gct6_find_nodes(gct6_node * node,gct6_search_struct * search)141da177e4SLinus Torvaldsgct6_find_nodes(gct6_node *node, gct6_search_struct *search) 151da177e4SLinus Torvalds { 161da177e4SLinus Torvalds gct6_search_struct *wanted; 171da177e4SLinus Torvalds int status = 0; 181da177e4SLinus Torvalds 191da177e4SLinus Torvalds /* First check the magic number. */ 201da177e4SLinus Torvalds if (node->magic != GCT_NODE_MAGIC) { 211da177e4SLinus Torvalds printk(KERN_ERR "GCT Node MAGIC incorrect - GCT invalid\n"); 221da177e4SLinus Torvalds return -EINVAL; 231da177e4SLinus Torvalds } 241da177e4SLinus Torvalds 251da177e4SLinus Torvalds /* Check against the search struct. */ 261da177e4SLinus Torvalds for (wanted = search; 271da177e4SLinus Torvalds wanted && (wanted->type | wanted->subtype); 281da177e4SLinus Torvalds wanted++) { 291da177e4SLinus Torvalds if (node->type != wanted->type) 301da177e4SLinus Torvalds continue; 311da177e4SLinus Torvalds if (node->subtype != wanted->subtype) 321da177e4SLinus Torvalds continue; 331da177e4SLinus Torvalds 341da177e4SLinus Torvalds /* Found it -- call out. */ 351da177e4SLinus Torvalds if (wanted->callout) 361da177e4SLinus Torvalds wanted->callout(node); 371da177e4SLinus Torvalds } 381da177e4SLinus Torvalds 391da177e4SLinus Torvalds /* Now walk the tree, siblings first. */ 401da177e4SLinus Torvalds if (node->next) 411da177e4SLinus Torvalds status |= gct6_find_nodes(GCT_NODE_PTR(node->next), search); 421da177e4SLinus Torvalds 431da177e4SLinus Torvalds /* Then the children. */ 441da177e4SLinus Torvalds if (node->child) 451da177e4SLinus Torvalds status |= gct6_find_nodes(GCT_NODE_PTR(node->child), search); 461da177e4SLinus Torvalds 471da177e4SLinus Torvalds return status; 481da177e4SLinus Torvalds } 49