#!/bin/bash

CPU_SYS_DIR=/sys/devices/system/cpu/
NR_CPUS=0
CPU=
SHOW_LAYOUT=0


function usage()
{
        echo "usage:"
        echo "        $0 [cpu] [-L]"
        echo
        echo "option:"
        echo "        [cpu]"
        echo "          Logical cpu id."
        echo "        -L"
        echo "          Show processor layout."
        echo "        -h"
        echo "          Show this help."
        exit 1
}

function parse_args()
{
        while getopts "hL" OPTION
        do
        case $OPTION in
                L)
                        SHOW_LAYOUT=1
                        ;;
                *)
                        usage
                        exit 1
                        ;;
        esac
        done

        CPU=${!OPTIND}
}

parse_args $*

[ "$1" == "-h" ] && usage

declare -a CPUS
declare -a CPU_FILE
declare -a CPU_PIR
declare -a CORE_ID
declare -a CHIP_ID

declare -a CHIP_EQ
declare -a CHIP_EX
declare -a CHIP_CORES

declare -A CORE_MATRIX

for cpu_file in $(find $CPU_SYS_DIR -name "cpu[0-9]*")
do
        cpu=$(basename $cpu_file | tr -dc '0-9')
        [ -n "$cpu" ] && NR_CPUS=$(expr $NR_CPUS + 1)

        CPU_VALID[$cpu]=0
        [ -n "$CPU" ] && [ $cpu != $CPU ] && continue
        [ ! -e $cpu_file/pir ] && continue

        CPU_VALID[$cpu]=1

        CPU_FILE[$cpu]=$cpu_file
        pir=$(cat $cpu_file/pir)
        CPU_PIR[$cpu]=$pir
        CORE_ID[$cpu]=$(perl -e '{ printf("%d", (0x'$pir' >> 2) & 0x3f); }')
        CHIP_ID[$cpu]=$(perl -e '{ printf("%x", (0x'$pir' >> 8) & 0x7f); }')
done

i=0
chip_id=-1
core_id=-1
prev_eq_id=-1
prev_ex_id=-1
num_threads=0
CPU_LIST=" "
while [ $i -lt $NR_CPUS ]
do
        [ ${CPU_VALID[$i]} -eq 0 ] && i=$(expr $i + 1) && continue

        [ "$chip_id" != "${CHIP_ID[$i]}" ] && core_id=-1 && prev_eq_id=-1 && prev_ex_id=-1
        chip_id=${CHIP_ID[$i]}
        if [ "$core_id" != ${CORE_ID[$i]} ]
        then
                if [ $num_threads -ne 0 ]; then
                        echo "THREADS: $num_threads CPUs: $CPU_LIST"
                        CPU_LIST=" "
                fi
                CPU_LIST="$CPU_LIST$i "
                echo -n "CHIP ID: ${CHIP_ID[$i]} "
                echo -n "CORE ID: ${CORE_ID[$i]} "
                CHIP_CORES[$chip_id]="${CHIP_CORES[$chip_id]},${CORE_ID[$i]}"
                CORE_MATRIX[$chip_id,${CORE_ID[$i]}]=1
                eq_id=$(perl -e '{ printf("%d", (('${CORE_ID[$i]}' & 0x1c) >> 2)); }')
                if [ $eq_id != $prev_eq_id ]
                then
                        CHIP_EQ[$chip_id]="${CHIP_EQ[$chip_id]},$eq_id"
                        prev_eq_id=$eq_id
                fi
                ex_id=$(perl -e '{ printf("%d", (('${CORE_ID[$i]}') >> 1)); }')
                if [ $ex_id != $prev_ex_id ]
                then
                        CHIP_EX[$chip_id]="${CHIP_EX[$chip_id]},$ex_id"
                        prev_ex_id=$ex_id
                fi
                num_threads=1
        else
                CPU_LIST="$CPU_LIST$i "
                num_threads=$(expr $num_threads + 1)
        fi
        core_id=${CORE_ID[$i]}

        i=$(expr $i + 1)
done
echo "THREADS: $num_threads CPUs: $CPU_LIST"

echo
echo "-----------------------------"
for chip_id in ${!CHIP_CORES[@]}
do
        echo "p[$chip_id]"
        CHIP_CORES[$chip_id]="$(echo ${CHIP_CORES[$chip_id]} | cut -c 2-)"
        CHIP_EQ[$chip_id]="$(echo ${CHIP_EQ[$chip_id]} | cut -c 2-)"
        CHIP_EX[$chip_id]="$(echo ${CHIP_EX[$chip_id]} | cut -c 2-)"
        echo "   eq[${CHIP_EQ[$chip_id]}]"
        echo "   ex[${CHIP_EX[$chip_id]}]"
        echo "    c[${CHIP_CORES[$chip_id]}]"
done
echo "-----------------------------"


[ $SHOW_LAYOUT -eq 0 ] && exit

# Print chip layout

function print_header()
{
        local _row_=$1

        for q in 0 2 4
        do
                quad=$(perl -e '{ printf("%02d", ('$q' + '$_row_')); }')
                echo -n "        +---EQ$quad----+ "
        done
        echo
}

function print_core_info()
{
        local _row_=$1
        local _cpos_=$2   # Core position

        for q in 0 2 4
        do
                quad=$(perl -e '{ printf("%02d", ('$q' + '$_row_')); }')
                core_id=$(perl -e '{ printf("%d", ('$_cpos_' + ('$quad' * 4))); }')
                core_id_str=$(perl -e '{ printf("%-2d", ('$_cpos_' + ('$quad' * 4))); }')
                ex=$(perl -e '{ printf("%-2d", ('$core_id' >> 1)); }')
                if [ -n "${CORE_MATRIX[$chip_id,$core_id]}" ]
                then
                        echo -n "        |EX-$ex   C$core_id_str|"
                else
                        echo -n "        |           |"
                fi
        done
        echo
        if [ $_cpos_ -eq 3 ]
        then
                echo "        +-----------+         +-----------+        +-----------+"
        else
                echo "        + - - - - - +        + - - - - - +        + - - - - - +"
        fi
}

echo
echo "----------Processor Layout-------------------"
for chip_id in ${!CHIP_CORES[@]}
do
        echo "p[$chip_id]"

        for row in 0 1
        do
                print_header $row
                for core_pos in 0 1 2 3
                do
                        print_core_info $row $core_pos
                done
                echo

        done
        echo

done
