162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 1999, 2000 Ralf Baechle (ralf@gnu.org) 462306a36Sopenharmony_ci * Copyright (C) 1999, 2000 Silicon Graphics, Inc. 562306a36Sopenharmony_ci */ 662306a36Sopenharmony_ci#include <linux/kernel.h> 762306a36Sopenharmony_ci#include <linux/sched.h> 862306a36Sopenharmony_ci#include <linux/interrupt.h> 962306a36Sopenharmony_ci#include <linux/kernel_stat.h> 1062306a36Sopenharmony_ci#include <linux/param.h> 1162306a36Sopenharmony_ci#include <linux/timex.h> 1262306a36Sopenharmony_ci#include <linux/mm.h> 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#include <asm/sn/klconfig.h> 1562306a36Sopenharmony_ci#include <asm/sn/arch.h> 1662306a36Sopenharmony_ci#include <asm/sn/gda.h> 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ciklinfo_t *find_component(lboard_t *brd, klinfo_t *kli, unsigned char struct_type) 1962306a36Sopenharmony_ci{ 2062306a36Sopenharmony_ci int index, j; 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci if (kli == (klinfo_t *)NULL) { 2362306a36Sopenharmony_ci index = 0; 2462306a36Sopenharmony_ci } else { 2562306a36Sopenharmony_ci for (j = 0; j < KLCF_NUM_COMPS(brd); j++) 2662306a36Sopenharmony_ci if (kli == KLCF_COMP(brd, j)) 2762306a36Sopenharmony_ci break; 2862306a36Sopenharmony_ci index = j; 2962306a36Sopenharmony_ci if (index == KLCF_NUM_COMPS(brd)) { 3062306a36Sopenharmony_ci printk("find_component: Bad pointer: 0x%p\n", kli); 3162306a36Sopenharmony_ci return (klinfo_t *)NULL; 3262306a36Sopenharmony_ci } 3362306a36Sopenharmony_ci index++; /* next component */ 3462306a36Sopenharmony_ci } 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci for (; index < KLCF_NUM_COMPS(brd); index++) { 3762306a36Sopenharmony_ci kli = KLCF_COMP(brd, index); 3862306a36Sopenharmony_ci if (KLCF_COMP_TYPE(kli) == struct_type) 3962306a36Sopenharmony_ci return kli; 4062306a36Sopenharmony_ci } 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci /* Didn't find it. */ 4362306a36Sopenharmony_ci return (klinfo_t *)NULL; 4462306a36Sopenharmony_ci} 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ciklinfo_t *find_first_component(lboard_t *brd, unsigned char struct_type) 4762306a36Sopenharmony_ci{ 4862306a36Sopenharmony_ci return find_component(brd, (klinfo_t *)NULL, struct_type); 4962306a36Sopenharmony_ci} 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_cilboard_t *find_lboard(lboard_t *start, unsigned char brd_type) 5262306a36Sopenharmony_ci{ 5362306a36Sopenharmony_ci /* Search all boards stored on this node. */ 5462306a36Sopenharmony_ci while (start) { 5562306a36Sopenharmony_ci if (start->brd_type == brd_type) 5662306a36Sopenharmony_ci return start; 5762306a36Sopenharmony_ci start = KLCF_NEXT(start); 5862306a36Sopenharmony_ci } 5962306a36Sopenharmony_ci /* Didn't find it. */ 6062306a36Sopenharmony_ci return (lboard_t *)NULL; 6162306a36Sopenharmony_ci} 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_cilboard_t *find_lboard_class(lboard_t *start, unsigned char brd_type) 6462306a36Sopenharmony_ci{ 6562306a36Sopenharmony_ci /* Search all boards stored on this node. */ 6662306a36Sopenharmony_ci while (start) { 6762306a36Sopenharmony_ci if (KLCLASS(start->brd_type) == KLCLASS(brd_type)) 6862306a36Sopenharmony_ci return start; 6962306a36Sopenharmony_ci start = KLCF_NEXT(start); 7062306a36Sopenharmony_ci } 7162306a36Sopenharmony_ci 7262306a36Sopenharmony_ci /* Didn't find it. */ 7362306a36Sopenharmony_ci return (lboard_t *)NULL; 7462306a36Sopenharmony_ci} 75