| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* | 
 | 2 |  *	linux/arch/alpha/kernel/gct.c | 
 | 3 |  */ | 
 | 4 |  | 
 | 5 | #include <linux/config.h> | 
 | 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 | } |