#!/bin/sh
# $Id: suntype,v 2.1 1994/04/18 21:39:17 jdd Exp $
#
# suntype: Figure out what sort of sun this is.
#
# Version 2.0 April 16, 1994
# John DiMarco <jdd@cdf.toronto.edu>
# University of Toronto, Computing Disciplines Facility
PATH="/bin:/usr/bin:/usr/etc:/usr/sbin:/usr/ucb"; export PATH
VERBOSE="VERBOSE no"
if [ $# -gt 0 ]; then
if [ $1 = "-v" ]; then
VERBOSE="VERBOSE yes"
else
echo "Usage $0 [-v]" 1>&2
exit 3
fi
fi
export VERBOSE
# misc function definitions
get_hostid() {
# Output the host id, if possible
echo HOSTID
if [ -x /usr/bin/hostid ]; then
/usr/bin/hostid 2>/dev/null
elif [ -x /usr/ucb/hostid ]; then
/usr/ucb/hostid 2>/dev/null
fi
}
get_prominfo() {
# Output the output of prtconf/devinfo -pv, if possible
echo PROMINFO
if [ -x /usr/sbin/prtconf ]; then
/usr/sbin/prtconf -pv 2>/dev/null
elif [ -x /usr/etc/devinfo ]; then
/usr/etc/devinfo -pv 2>/dev/null
fi
}
(
echo $VERBOSE
cat <<END_OF_TABLE
#
# ID = model code from hostid.
# DEV_NAME = Sun internal development name
# SYSTEM_NAME = System name
# MODEL_NAME = Model name(s)
# CLK = CLock speed
# CPU_NAME = name of CPU (Integer Unit)
# NB: cpu name in table may not always be correct.
#
# This data is overridden by prtconf/devinfo -pv data, if available.
#
ID DEV_NAME SYSTEM_NAME MODEL_NAME CLK CPU_NAME (IU)
## ########### #################### #################### #### #################
01 unknown 2/100 100U,150U,120,170 10 Motorola,MC68010
02 unknown 2/50 50,130,160 10 Motorola,MC68010
11 Carrera 3/100 75,140,150,160,180 16.7 Motorola,MC68020
12 M25 3/50 _NA 12.5 Motorola,MC68020
13 Sirius 3/200 260,280 25 Motorola,MC68020
14 Prism 3/110 _NA 16.7 Motorola,MC68020
17 Ferrari 3/60 _NA 20 Motorola,MC68020
18 unknown 3E _NA ?? Motorola,MC68020
21 Sunrise 4/200 260,280 16.7 Fujitsu,MB86903
22 Cobra 4/100 110,150 14.2 Fujitsu,SF9010
23 Stingray 4/300 310,330,370,390 25 Cypress,CY7C601
24 Sunray 4/400 470,490 33 Cypress,CY7C601
31 RoadRunner 386i 150,250 ?? Intel,80386DX
32 Apache 486i unknown ?? Intel,80486DX
41 Pegasus 3/400 470,490 33 Motorola,MC68030
42 Hydra 3/80 _NA 20 Motorola,MC68030
51 Campus SPARCstation-1 4/60 20 LSI,L64801
52 Phoenix SPARCstation-IPC 4/40 25 LSI,L64801
53 CampusB SPARCstation-1+ 4/65 25 LSI,L64801
54 OffCampus SPARCstation-SLC 4/20 20 LSI,L64801
55 Calvin SPARCstation-2 4/75 40 Cypress,CY7C601
56 NodeWarrior SPARCstation-ELC 4/25 33 Weitek,W8601
57 Hobbes SPARCstation-IPX 4/50 40 Weitek,W8601
61 Polaris 4E _NA ?? unknown,SPARC
71 Galaxy SPARCsystem-600 _MBUS 40 unknown
72 Campus2 SPARCstation-10 _MBUS 40 unknown
72 Kodiak SPARCstation-20 _MBUS 50 unknown
80 Sunergy SPARCclassic 4/15 50 TI,TMS390S10
80 Sunergy SPARCstation-LX 4/30 50 TI,TMS390S10
80 Aurora SPARCstation-5 _SS5 ?? unknown,SPARC
80 Gypsy SPARCstation-Voyager S240 60 unknown,SPARC
80 Scorpion SPARCserver-1000 _XDBUS 40 unknown
80 Dragon SPARCcenter-2000 _XDBUS 40 unknown
END_OF_TABLE
get_hostid
get_prominfo
) | awk '
BEGIN {
#
# SS10/20/600 type table:
# Maps from module clock rate to system name.
#
mtype[33]=2
mtype[36]=3
mtype[40]=4
mtype[50]=5
mtype[60]=6
#
# Some constants
#
MB=1048576
KB=1024
M=1000000
ROSS="Ross 605 SPARC"
#
# Maps from reported processor name to generic processor name
#
ptype["Motorola,MC68010"]="68K"
ptype["Motorola,MC68020"]="68K"
ptype["Motorola,MC68030"]="68K"
ptype["Intel,80386DX"]="x86"
ptype["Intel,80386DX"]="x86"
ptype["Fujitsu,MB86900IU"]="SPARC"
ptype["Fujitsu,SF9010IU"]="SPARC"
ptype["Cypress,CY7C601"]="SPARC"
ptype["Weitek,W8601"]="SPARC"
ptype["LSI,L64811"]="SPARC"
ptype["TI,TMS390S10"]="MicroSPARC I"
ptype["TI,TMS390Z50"]="SuperSPARC"
ptype["TI,TMS390Z55"]="SuperSPARC"
ptype["Cypress,CY605"]=ROSS
ptype["Ross,RT605"]=ROSS
ptype["Ross,RT625"]="HyperSPARC"
}
$1~/^#/ { continue }
$1=="VERBOSE" { verbose=$2; continue }
$1=="ID" || $1=="PROMINFO" || $1=="HOSTID" { mode=$1; continue }
mode=="ID" {
#
# read a line of the ID table
#
nlines++
hostidcode[nlines]=$1
id[$1]=nlines
devname[nlines]=$2
sysname[nlines]=$3
model[nlines]=$4
clk[nlines]=$5
cpu[nlines]=$6
nm[$3]=nlines
}
mode=="HOSTID" {
hostid=substr($1,0,2)
}
mode=="PROMINFO" {
if($1=="idprom:"){
# get hostid code from here if it is not already defined
if(!hostid){
hostid=substr($2, 2, 2)
}
} else if($1=="clock-frequency:"){
# convert clock frequency from hex to decimal
pwr=1;
clock=0;
for(i=8;i>0;i--){
digit=substr($2, i, 1);
if("a"==digit) digit=10;
else if("b"==digit) digit=11;
else if("c"==digit) digit=12;
else if("d"==digit) digit=13;
else if("e"==digit) digit=14;
else if("f"==digit) digit=15;
clock += digit*pwr;
pwr *= 16;
}
if(!systemclock) systemclock=clock/M
} else if($1=="ecache-line-size:" || $1=="cache-line-size:"){
# again, hex to dec. If I was using nawk, I would make
# this a function, but early SunOS is nawkless
pwr=1;
clinesize=0;
for(i=8;i>0;i--){
digit=substr($2, i, 1);
if("a"==digit) digit=10;
else if("b"==digit) digit=11;
else if("c"==digit) digit=12;
else if("d"==digit) digit=13;
else if("e"==digit) digit=14;
else if("f"==digit) digit=15;
clinesize += digit*pwr;
pwr *= 16;
}
} else if($1=="ecache-nlines:" || $1=="cache-nlines:"){
# again, hex to dec. If I was using nawk, I would make
# this a function, but early SunOS is nawkless
pwr=1;
cnlines=0;
for(i=8;i>0;i--){
digit=substr($2, i, 1);
if("a"==digit) digit=10;
else if("b"==digit) digit=11;
else if("c"==digit) digit=12;
else if("d"==digit) digit=13;
else if("e"==digit) digit=14;
else if("f"==digit) digit=15;
cnlines += digit*pwr;
pwr *= 16;
}
} else if($1=="name:"){
# process name:
# first, concatenate all the pieces
name=$2
for(i=3;i<=NF;i++) name=name" "$i
# strip off end quotes
name = substr(name, 2, length(name)-2)
# strip off leading "SUNW," if present
if("SUNW,"==substr(name, 1, 5))
name=substr(name, 6, length(name)-5)
# strip off leading "Sun " if present
if("Sun "==substr(name, 1, 4))
name=substr(name, 5, length(name)-4)
if(!systemname){
# the first "name:" is the system name
systemname = name
}
} else if($1=="device_type:"){
if("cpu" == substr($2,2,3)){
iscpu="yes"
cpucount++
}
} else if($1=="Node"){
if("yes"==iscpu){
if(clock) {
cpuclock=clock/M
} else {
cpuclock=systemclock
}
cpucache=clinesize*cnlines
cpuname=name
}
iscpu="no"
clock=0
}
}
END{
# process last remaining cpu, if applicable
if("yes"==iscpu){
if(clock) {
cpuclock=clock/M
} else {
cpuclock=systemclock
}
cpucache=clinesize*cnlines
cpuname=name
}
if(0==cpucount) cpucount=1
if(hostid<"80" && "72"!=hostid) {
# look up hostid in table
if(id[hostid]) {
developname=devname[id[hostid]]
modelname=model[id[hostid]]
if (!cpuname) cpuname=cpu[id[hostid]]
if (!systemname || systemname==modelname) systemname=sysname[id[hostid]]
if (!cpuclock) cpuclock=clk[id[hostid]]
}
} else {
# look up system name in table
if(systemname) {
if(nm[systemname]){
developname=devname[nm[systemname]]
modelname=model[nm[systemname]]
if (!cpuname) cpuname=cpu[id[hostid]]
if (!cpuclock) cpuclock=clk[id[hostid]]
}
}
}
if(!cpucount) cpucount=1
# Compute known model names.
if("_MBUS" == modelname){
# SS10/20/600: Ross 605 or SuperSPARC processors.
if(ROSS==ptype[cpuname]) {
modelname=1""cpucount""0
} else if("SuperSPARC"==ptype[cpuname]){
if(cpucount==1) cpucount=""
if(mtype[cpuclock]) {
modelname=mtype[cpuclock]""cpucache/MB""cpucount
}
}
if("_MBUS" == modelname) modelname = "unknown"
} else if("_SS5" == modelname){
# SPARCstation 5: modelname is simply the CPU clock rate
modelname=cpuclock
} else if ("_XDBUS" == modelname){
# SPARCcenter 1000 or 2000.
ccount=cpucount; if(ccount<10) ccount="0"ccount
modelname=substr(systemname,13,1)""cpucache/MB""ccount
}
if(!systemname) systemname="unknown"
if(!modelname) modelname=systemname
if(!developname) developname="unknown"
if(!cpuname) cpuname="unknown"
if(!cpuclock) cpuclock="unknown"
if(ptype[cpuname]) cpuname=cpuname" ("ptype[cpuname]")"
if(cpucache) {
if(cpucache>=MB) {
cpucache=cpucache/MB" MB"
} else {
cpucache=cpucache/KB" KB"
}
}
if(!systemclock) systemclock=cpuclock
if("yes"==verbose){
# output what we have discovered
print "System name:", systemname
print "Development name:", developname
if("_NA"!=modelname) print "Model:", modelname
print "Number of cpus:", cpucount
print "Cpu name:", cpuname
if(systemclock == cpuclock) {
print "Clock rate (MHz):", cpuclock
} else {
print "System clock rate (MHz):", systemclock
print "Cpu clock rate (MHz):", cpuclock
}
if(cpucache) print "External cache:", cpucache
} else {
if("_NA"==modelname) {
modelname=""
} else {
modelname=": "modelname
}
print systemname, modelname
}
}
'
echo Memory: `pstat -s | cut -d' ' -f6-`