blob: 33461266feacb5eecc6027bb0b7bdef2ed5d4a70 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
--- yaboot-1.3.13.orig/ybin/ofpath 2004-11-04 21:57:17.000000000 -0500
+++ yaboot-1.3.13/ybin/ofpath 2004-11-04 22:36:41.234195024 -0500
@@ -8,6 +8,9 @@
## Portions based on show_of_path.sh:
##
## Copyright (C) 2000 Olaf Hering <olh@suse.de>
+##
+## sbp2 patch:
+## Copyright (C) 2004 Christiaan Welvaart <cjw@time4t.net>
##
## This program is free software; you can redistribute it and/or
## modify it under the terms of the GNU General Public License
@@ -301,7 +304,52 @@
HOST_LIST="$(for i in `find /proc/device-tree -name compatible` ; do
lgrep "$i" "k2-s-ata" ; done)"
DEVICE_PATH="$(printhost $SCSI_HOSTNUMBER $HOST_LIST)"
- echo "${DEVICE_PATH##*device-tree}/k2-sata@$DEVICE_ID/disk@0:$PARTITION"
+ K2_DEVICE_ID=0
+ while [ "$DEVICE_PATH" = "" ] ; do
+ SCSI_HOSTNUMBER=`expr $SCSI_HOSTNUMBER - 1`
+ let "K2_DEVICE_ID += 1"
+ DEVICE_PATH="$(printhost $SCSI_HOSTNUMBER $HOST_LIST)"
+ done
+ echo "${DEVICE_PATH##*device-tree}/k2-sata@$K2_DEVICE_ID/disk@0:$PARTITION"
+ ;;
+ usb-storage)
+ if [ ! -d /sys/devices ]
+ then
+ echo 1>&2 "sysfs must be mounted on /sys for usb-storage support"
+ return 1
+ fi
+ local USBDEV=`readlink /sys/block/$DEVNODE/device`
+ local PCIADDR=`echo ${USBDEV#../../devices/} |sed -re 's#(pci[^/]*/[^/]*)/.*#\1#'`
+ local USBPATH=`echo ${USBDEV} |sed -re 's#.*/[0-9]*-([0-9\.]*):[0-9\.]*/host[0-9]*/[^/]*#\1#'`
+ local DEVSPEC=`cat /sys/devices/$PCIADDR/devspec`
+ local DISKPATH=`echo $USBPATH |sed -re 's#((.*\.)*)([0-9]*)$#\1disk@\3#' |sed -re 's#([0-9]*)\.#hub@\1/#'`
+ if [ `cat /proc/device-tree${DEVSPEC}/device_type` = ehci ]
+ then
+ local USB2PORT=`echo ${DEVSPEC} |sed -re 's#^.*,([0-9]+)#\1#'`
+ local USB1PORT=`echo ${DISKPATH} |sed -re 's#^[^@]+@([0-9]+).*#\1#'`
+ USB1PORT=`expr $USB1PORT - 1`
+ DISKPATH=`echo ${DISKPATH} |sed -re "s/^([^@]+)@${USB2PORT}(.*)/\1@1\2/"`
+ DEVSPEC=`echo ${DEVSPEC} |sed -re "s/^(.*),${USB2PORT}\$/\1,${USB1PORT}/"`
+ fi
+ echo "${DEVSPEC#,0}/${DISKPATH}:${PARTITION}"
+ ;;
+ "")
+ # sbp-2 driver does not have a dir in /proc/scsi
+ if [ -d /sys/devices ]
+ then
+ local SYSFSDEV=`readlink /sys/block/$DEVNODE/device`
+ local FWNODE=`echo ${SYSFSDEV} |sed -re 's#^.*/fw-host[0-9]+/([^/]+)/.*#\1#'`
+ local PCIADDR=`echo ${SYSFSDEV#../../devices/} |sed -re 's#(pci[^/]*/[^/]*)/.*#\1#'`
+ local DEVSPEC=`cat /sys/devices/$PCIADDR/devspec`
+ local OFNODE="${DEVSPEC}/node@${FWNODE}/sbp-2/disk@0"
+ if [ -f /proc/device-tree${OFNODE}/device_type ]
+ then
+ echo "${OFNODE}:${PARTITION}"
+ return 0
+ fi
+ fi
+ echo 1>&2 "$PRG: cannot find SCSI driver for ${DEVNODE}"
+ return 1
;;
*)
echo 1>&2 "$PRG: Driver: $SCSI_DRIVER is not supported"
|