#!/bin/sh
#
# Copyright 1992, Sun Microsystems Computer Corp.
# All Rights Reserved
#
if [ -x /etc/prtconf ]; then
        PRTCONF=prtconf
else
        PRTCONF=devinfo
fi
#
# Find CPU node(s) and their clock frequency, if any
#
$PRTCONF -pv | awk ' \
        BEGIN { ncpu = 0 } \
        $1 == "Node" { \
          if (idprom != "") { \
            sysfreq = freq; sysname = name; name = ""; freq = "" \
          } \
          if (type == "'"'cpu'"'") { ncpu++; cputype = name; cpufreq = 
freq } \
          name = ""; freq = ""; type = "" ; idprom = "" \
        } \
        $1 != "Node" { \
          if ($1 == "name:") { \
            name = $2; \
            for (i = 3; i <= NF; i++) name = name "-" $i \
          } \
          if ($1 == "device_type:") { type = $2 } \
          if ($1 == "clock-frequency:") { \
            for (i = 1; i <= length ($2); i++) { \
              c = substr ($2, i, 1); \
              if (c == "a") freq = freq "A"; \
              else if (c == "b") freq = freq "B"; \
              else if (c == "c") freq = freq "C"; \
              else if (c == "d") freq = freq "D"; \
              else if (c == "e") freq = freq "E"; \
              else if (c == "f") freq = freq "F"; \
              else freq = freq c; \
            } \
          } \
          if ($1 == "idprom:") { idprom = $2 } \
        } \
        END { \
          if (idprom != "") { sysfreq = freq; sysname = name } \
          if (type == "'"'cpu'"'") { ncpu++; cputype = name; cpufreq = 
freq } \
          if (ncpu == 0) { ncpu = 1 } \
          print sysfreq, " ", sysname, " ", ncpu, " ", cputype, " " 
cpufreq \
        } ' \
        > /tmp/xxxmixxx
#
# Convert clock frequency from Hex Hz to Decimal MHz
#
read SYSFREQ SYSNAME NCPU CPUTYPE CPUFREQ < /tmp/xxxmixxx
echo "16 i 1 k" $SYSFREQ "F4240 / p q" >/tmp/xxxmixxx
dc </tmp/xxxmixxx >/tmp/xxxmiyyy
read SYSFREQN < /tmp/xxxmiyyy
if [ $CPUFREQ ]; then
        echo "16 i 1 k" $CPUFREQ "F4240 / p q" >/tmp/xxxmixxx
        dc </tmp/xxxmixxx >/tmp/xxxmiyyy
        read CPUFREQN < /tmp/xxxmiyyy
        if [ $SYSFREQN -gt $CPUFREQN ]; then
                echo $CPUFREQN "0 k 1 / 1 k 1.0 * p" >/tmp/xxxmixxx
                dc </tmp/xxxmixxx >/tmp/xxxmiyyy
                read SYSFREQN < /tmp/xxxmiyyy
                SYSFREQ="xxx"
        fi
fi
rm /tmp/xxxmixxx
rm /tmp/xxxmiyyy
#
# Based on system name, CPU type, etc., display model
#
case $SYSNAME in
    *600"'")
        case $CPUTYPE in
            "'"TI*)
                case $CPUFREQN in
                    33*)
                        echo "SPARCsystem 600MP/Model 2"$NCPU
                        ;;
                    36*)
                        echo "SPARCsystem 600MP/Model 3"$NCPU
                        ;;
                    40*)
                        echo "SPARCsystem 600MP/Model 4"$NCPU
                        ;;
                    45*|50*)
                        echo "SPARCsystem 600MP/Model 5"$NCPU
                        ;;
                    *)
                        echo "SPARCsystem 600MP," $NCPU $CPUTYPE \
                             "processors @" $CPUFREQN "MHz"
                        ;;
                esac
                ;;
            "'"Cypress*)
                case $NCPU in
                    2)
                        echo "SPARCsystem 600MP/Model 120"
                        ;;
                    4)
                        echo "SPARCsystem 600MP/Model 140"
                        ;;
                    *)
                        echo "SPARCsystem 600MP," $NCPU $CPUTYPE \
                             "processors @" $CPUFREQN "MHz"
                        ;;
                esac
                ;;
            *)
                echo "SPARCsystem 600MP," $NCPU $CPUTYPE "processors @" \
                     $CPUFREQN "MHz"
                ;;
        esac
        ;;
    *-10"'")
        if [ $CPUFREQ ]; then
                case $CPUFREQN in
                    33*)
                        echo "SPARCstation 10/Model 2"$NCPU
                        ;;
                    36*)
                        echo "SPARCstation 10/Model 3"$NCPU
                        ;;
                    40*)
                        echo "SPARCstation 10/Model 4"$NCPU
                        ;;
                    45*|50*)
                        echo "SPARCstation 10/Model 5"$NCPU
                        ;;
                    *)
                        echo "SPARCstation 10," $NCPU "processors @" \
                             $CPUFREQN "MHz"
                        ;;
                esac
        else
                case $SYSFREQN in
                    33*)
                        echo "SPARCstation 10/Model 20"
                        ;;
                    36*)
                        echo "SPARCstation 10/Model 30"
                        ;;
                    40*)
                        echo "SPARCstation 10/Model 40"
                        ;;
                    *)
                        echo "SPARCstation 10, 1 processor @" $SYSFREQN "MHz"
                        ;;
                esac
        fi
        ;;
    *-2000"'")
        echo "SPARCcenter 2000," $NCPU "processors"
        ;;
    *)
        echo $SYSNAME
        ;;
esac
#
# Display details if desired
#
if [ $1 -a $1 = "-v" ]; then
        echo $SYSNAME
        if [ $CPUTYPE ]; then
                if [ $NCPU -gt 1 ]; then
                        S="s"
                else
                        S=""
                fi
                echo $NCPU $CPUTYPE "processor"$S
        fi
        echo "System clock at" $SYSFREQN "MHz"
        if [ $CPUFREQ ]; then
                if [ $SYSFREQ != $CPUFREQ ]; then
                        echo "Module clock"$S "at" $CPUFREQN "MHz"
                fi
        fi
fi
