| .. | .. |
|---|
| 72 | 72 | /* Didn't find it. */ |
|---|
| 73 | 73 | return (lboard_t *)NULL; |
|---|
| 74 | 74 | } |
|---|
| 75 | | - |
|---|
| 76 | | -cnodeid_t get_cpu_cnode(cpuid_t cpu) |
|---|
| 77 | | -{ |
|---|
| 78 | | - return CPUID_TO_COMPACT_NODEID(cpu); |
|---|
| 79 | | -} |
|---|
| 80 | | - |
|---|
| 81 | | -klcpu_t *nasid_slice_to_cpuinfo(nasid_t nasid, int slice) |
|---|
| 82 | | -{ |
|---|
| 83 | | - lboard_t *brd; |
|---|
| 84 | | - klcpu_t *acpu; |
|---|
| 85 | | - |
|---|
| 86 | | - if (!(brd = find_lboard((lboard_t *)KL_CONFIG_INFO(nasid), KLTYPE_IP27))) |
|---|
| 87 | | - return (klcpu_t *)NULL; |
|---|
| 88 | | - |
|---|
| 89 | | - if (!(acpu = (klcpu_t *)find_first_component(brd, KLSTRUCT_CPU))) |
|---|
| 90 | | - return (klcpu_t *)NULL; |
|---|
| 91 | | - |
|---|
| 92 | | - do { |
|---|
| 93 | | - if ((acpu->cpu_info.physid) == slice) |
|---|
| 94 | | - return acpu; |
|---|
| 95 | | - } while ((acpu = (klcpu_t *)find_component(brd, (klinfo_t *)acpu, |
|---|
| 96 | | - KLSTRUCT_CPU))); |
|---|
| 97 | | - return (klcpu_t *)NULL; |
|---|
| 98 | | -} |
|---|
| 99 | | - |
|---|
| 100 | | -klcpu_t *sn_get_cpuinfo(cpuid_t cpu) |
|---|
| 101 | | -{ |
|---|
| 102 | | - nasid_t nasid; |
|---|
| 103 | | - int slice; |
|---|
| 104 | | - klcpu_t *acpu; |
|---|
| 105 | | - gda_t *gdap = GDA; |
|---|
| 106 | | - cnodeid_t cnode; |
|---|
| 107 | | - |
|---|
| 108 | | - if (!(cpu < MAXCPUS)) { |
|---|
| 109 | | - printk("sn_get_cpuinfo: illegal cpuid 0x%lx\n", cpu); |
|---|
| 110 | | - return NULL; |
|---|
| 111 | | - } |
|---|
| 112 | | - |
|---|
| 113 | | - cnode = get_cpu_cnode(cpu); |
|---|
| 114 | | - if (cnode == INVALID_CNODEID) |
|---|
| 115 | | - return NULL; |
|---|
| 116 | | - |
|---|
| 117 | | - if ((nasid = gdap->g_nasidtable[cnode]) == INVALID_NASID) |
|---|
| 118 | | - return NULL; |
|---|
| 119 | | - |
|---|
| 120 | | - for (slice = 0; slice < CPUS_PER_NODE; slice++) { |
|---|
| 121 | | - acpu = nasid_slice_to_cpuinfo(nasid, slice); |
|---|
| 122 | | - if (acpu && acpu->cpu_info.virtid == cpu) |
|---|
| 123 | | - return acpu; |
|---|
| 124 | | - } |
|---|
| 125 | | - return NULL; |
|---|
| 126 | | -} |
|---|
| 127 | | - |
|---|
| 128 | | -int get_cpu_slice(cpuid_t cpu) |
|---|
| 129 | | -{ |
|---|
| 130 | | - klcpu_t *acpu; |
|---|
| 131 | | - |
|---|
| 132 | | - if ((acpu = sn_get_cpuinfo(cpu)) == NULL) |
|---|
| 133 | | - return -1; |
|---|
| 134 | | - return acpu->cpu_info.physid; |
|---|
| 135 | | -} |
|---|