identcpu.c revision 164372
1/*- 2 * Initial implementation: 3 * Copyright (c) 2001 Robert Drehmel 4 * All rights reserved. 5 * 6 * As long as the above copyright statement and this notice remain 7 * unchanged, you can do what ever you want with this file. 8 * 9 * $FreeBSD: head/sys/sparc64/sparc64/identcpu.c 164372 2006-11-18 07:10:52Z kmacy $ 10 */ 11#include <sys/param.h> 12#include <sys/systm.h> 13#include <sys/kernel.h> 14#include <sys/sysctl.h> 15 16#include <machine/cpufunc.h> 17#include <machine/md_var.h> 18#include <machine/ver.h> 19 20char machine[] = MACHINE; 21SYSCTL_STRING(_hw, HW_MACHINE, machine, CTLFLAG_RD, 22 machine, 0, "Machine class"); 23 24static char cpu_model[128]; 25SYSCTL_STRING(_hw, HW_MODEL, model, CTLFLAG_RD, 26 cpu_model, 0, "Machine model"); 27 28#ifndef SUN4V 29int cpu_impl; 30#endif 31 32void setPQL2(int *const size, int *const ways); 33 34void 35setPQL2(int *const size, int *const ways) 36{ 37#ifdef SUN4V 38/* XXX hardcoding is lame */ 39 *size = 3*1024; 40 *ways = 12; 41#endif 42 return; 43} 44 45void 46cpu_identify(u_long vers, u_int freq, u_int id) 47{ 48 const char *manus; 49 const char *impls; 50 51 switch (VER_MANUF(vers)) { 52 case 0x04: 53 manus = "HAL"; 54 break; 55 case 0x13: 56 case 0x17: 57 case 0x22: 58 case 0x3e: 59 manus = "Sun Microsystems"; 60 break; 61 default: 62 manus = NULL; 63 break; 64 } 65 switch (VER_IMPL(vers)) { 66 case CPU_IMPL_SPARC64: 67 impls = "SPARC64"; 68 break; 69 case CPU_IMPL_ULTRASPARCI: 70 impls = "UltraSparc-I"; 71 break; 72 case CPU_IMPL_ULTRASPARCII: 73 impls = "UltraSparc-II"; 74 break; 75 case CPU_IMPL_ULTRASPARCIIi: 76 impls = "UltraSparc-IIi"; 77 break; 78 case CPU_IMPL_ULTRASPARCIIe: 79 /* V9 Manual says `UltraSparc-e'. I assume this is wrong. */ 80 impls = "UltraSparc-IIe"; 81 break; 82 case CPU_IMPL_ULTRASPARCIII: 83 impls = "UltraSparc-III"; 84 break; 85 case CPU_IMPL_ULTRASPARCIIIp: 86 impls = "UltraSparc-III+"; 87 break; 88 case CPU_IMPL_ULTRASPARCIIIi: 89 impls = "UltraSparc-IIIi"; 90 break; 91 default: 92 impls = NULL; 93 break; 94 } 95 if (manus == NULL || impls == NULL) { 96 printf( 97 "CPU: unknown; please e-mail the following value together\n" 98 " with the exact name of your processor to " 99 "<freebsd-sparc64@FreeBSD.org>.\n" 100 " version register: <0x%lx>\n", vers); 101 return; 102 } 103 104 snprintf(cpu_model, sizeof(cpu_model), "%s %s", manus, impls); 105 printf("cpu%d: %s %s Processor (%d.%02d MHz CPU)\n", id, manus, impls, 106 (freq + 4999) / 1000000, ((freq + 4999) / 10000) % 100); 107 if (bootverbose) { 108 printf(" mask=0x%lx maxtl=%ld maxwin=%ld\n", VER_MASK(vers), 109 VER_MAXTL(vers), VER_MAXWIN(vers)); 110 } 111} 112