xref: /aosp_15_r20/external/sg3_utils/scripts/cciss_id (revision 44704f698541f6367e81f991ef8bb54ccbf3fc18)
1*44704f69SBart Van Assche#!/bin/bash
2*44704f69SBart Van Assche#
3*44704f69SBart Van Assche# cciss_id
4*44704f69SBart Van Assche#
5*44704f69SBart Van Assche# Generates device node names according to the cciss naming rules
6*44704f69SBart Van Assche#
7*44704f69SBart Van Assche# Copyright (C) 2011 SUSE Linux Products GmbH
8*44704f69SBart Van Assche# Author:
9*44704f69SBart Van Assche#       Hannes Reinecke <[email protected]>
10*44704f69SBart Van Assche#
11*44704f69SBart Van Assche#
12*44704f69SBart Van Assche#       This program is free software; you can redistribute it and/or modify it
13*44704f69SBart Van Assche#       under the terms of the GNU General Public License as published by the
14*44704f69SBart Van Assche#       Free Software Foundation version 2 of the License.
15*44704f69SBart Van Assche#
16*44704f69SBart Van Assche# This script generates a device node name which is compatible
17*44704f69SBart Van Assche# with the 'cciss' device naming rules.
18*44704f69SBart Van Assche# It is intended to provide backward-compatible names for the
19*44704f69SBart Van Assche# 'hpsa' driver.
20*44704f69SBart Van Assche#
21*44704f69SBart Van Assche
22*44704f69SBart Van Asschecciss_enumerate()
23*44704f69SBart Van Assche{
24*44704f69SBart Van Assche    local last_pci_dev=${1##0000:}
25*44704f69SBart Van Assche    local cur_pci_dev
26*44704f69SBart Van Assche    local cciss_num=0
27*44704f69SBart Van Assche
28*44704f69SBart Van Assche    for cur_pci_dev in $(lspci -n | tac | sed -n 's/\(..:..\..\) .* 103c:\(3220\|3230\|3238\|323a\|323b\) .*/\1/p') ; do
29*44704f69SBart Van Assche	if [ "$cur_pci_dev" == "$last_pci_dev" ] ; then
30*44704f69SBart Van Assche	    echo "$cciss_num"
31*44704f69SBart Van Assche	    return;
32*44704f69SBart Van Assche	fi
33*44704f69SBart Van Assche	cciss_num=$(($cciss_num + 1))
34*44704f69SBart Van Assche    done
35*44704f69SBart Van Assche    echo "$cciss_num"
36*44704f69SBart Van Assche}
37*44704f69SBart Van Assche
38*44704f69SBart Van Asschehpsa_lun_offset()
39*44704f69SBart Van Assche{
40*44704f69SBart Van Assche    local scsi_host=$1
41*44704f69SBart Van Assche
42*44704f69SBart Van Assche    scsi_id=$(lsscsi 2>/dev/null | sed -n "s/.\(${scsi_host}:[0-9]*:[0-9]*:[0-9]*\)..*disk .*/\1/p" | head -1)
43*44704f69SBart Van Assche    echo ${scsi_id##*:}
44*44704f69SBart Van Assche}
45*44704f69SBart Van Assche
46*44704f69SBart Van AsscheDEVPATH=$1
47*44704f69SBart Van AsscheSCSIPATH=$(cd -P /sys$DEVPATH/device; echo $PWD)
48*44704f69SBart Van AsscheSCSIID=${SCSIPATH##*/}
49*44704f69SBart Van AsscheHOSTID=${SCSIID%%:*}
50*44704f69SBart Van AsscheLUNID=${SCSIID##*:}
51*44704f69SBart Van AsschePCIPATH=${SCSIPATH%%/host*}
52*44704f69SBart Van AsschePCIDEV=${PCIPATH##*/}
53*44704f69SBart Van AsscheHOSTPATH=${PCIPATH}/host${HOSTID}/scsi_host/host${HOSTID}
54*44704f69SBart Van Asscheread controller 2>/dev/null <${HOSTPATH}/ctlr_num || controller=$(cciss_enumerate $PCIDEV)
55*44704f69SBart Van Assche
56*44704f69SBart Van Assche# hpsa lies about the LUN ...
57*44704f69SBart Van Asschedisk_offset=$(hpsa_lun_offset $HOSTID)
58*44704f69SBart Van Asscheif [ "$disk_offset" ] ; then
59*44704f69SBart Van Assche    disk=$(( $LUNID - $disk_offset ))
60*44704f69SBart Van Asscheelse
61*44704f69SBart Van Assche    disk=$LUNID
62*44704f69SBart Van Asschefi
63*44704f69SBart Van Assche
64*44704f69SBart Van Asscheif [ "$controller" ] && [ "$disk" ] ; then
65*44704f69SBart Van Assche    echo "ID_CCISS=c${controller}d${disk}"
66*44704f69SBart Van Asschefi
67