3 ###############################################################################
5 ## ofpath: determine OpenFirmware path from unix device node
6 ## Copyright (C) 2000, 2001, 2002 Ethan Benson
8 ## Portions based on show_of_path.sh:
10 ## Copyright (C) 2000 Olaf Hering <olh@suse.de>
12 ## This program is free software; you can redistribute it and/or
13 ## modify it under the terms of the GNU General Public License
14 ## as published by the Free Software Foundation; either version 2
15 ## of the License, or (at your option) any later version.
17 ## This program is distributed in the hope that it will be useful,
18 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
19 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 ## GNU General Public License for more details.
22 ## You should have received a copy of the GNU General Public License
23 ## along with this program; if not, write to the Free Software
24 ## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26 ###############################################################################
28 PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"
30 VERSION=1.0.3-DEVEL_DO_NOT_DISTRIBUTE-1
39 Written by Ethan Benson
40 Portions based on show_of_path.sh written by Olaf Hering
42 Copyright (C) 2000, 2001, 2002 Ethan Benson
43 Portions Copyright (C) 2000 Olaf Hering
44 This is free software; see the source for copying conditions. There is NO
45 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
52 "Usage: $PRG [OPTION]... FILE
53 Find OpenFirmware device path from unix device node.
55 --debug print boring junk only useful for debugging
56 -h, --help display this help and exit
57 -V, --version output version information and exit"
60 ## a small seq replacement, seq is not present on boot/rescue floppies.
66 while [ "$v" -gt 1 ] ; do
74 ## a kludge to replace wc -l, wc is not present on boot/rescue
75 ## floppies. max file is 145 lines, 3 hosts * 16 devs each * 3 lines
76 ## per device, + 1 "Attached Devices:" line.
83 local file="$(cat $1)"
87 if [ -z "$file" ] ; then
92 ## use real wc if available
93 if (command -v wc > /dev/null 2>&1) ; then
94 if [ -x `command -v wc` ] ; then
95 lines="$(echo "$file" | wc -l)"
105 for i in `smallseq 145` ; do
106 local b="$(echo "$file" | tail -n $i)"
107 if [ "$v" = "$b" ] ; then
116 ## small tr replacment which handles a specific need of this script.
120 a) echo 1 ;; b) echo 2 ;; c) echo 3 ;; d) echo 4 ;; e) echo 5 ;; f) echo 6 ;;
121 g) echo 7 ;; h) echo 8 ;; i) echo 9 ;; j) echo 10 ;; k) echo 11 ;; l) echo 12 ;;
122 m) echo 13 ;; n) echo 14 ;; o) echo 15 ;; p) echo 16 ;;
123 1) echo a ;; 2) echo b ;; 3) echo c ;; 4) echo d ;; 5) echo e ;;
124 6) echo f ;; 7) echo g ;; 8) echo h ;; 9) echo i ;; 10) echo j ;;
125 11) echo k ;; 12) echo l ;; 13) echo m ;; 14) echo n ;; 15) echo o ;;
131 ## replacment for grep -l which is not supported by busybox grep.
132 ## echo $(cat..) hack needed because busybox grep barfs with `line too
133 ## long' when fed /proc files. the for loop is needed since busybox
134 ## grep seems to have somewhat broken regexp support.
135 ## usage: lgrep filename regexp regexp ...
141 echo "$(cat "$f")" | grep -q "$i" && echo "$f" && break
146 ## if readlink is missing use a kludge
147 if (command -v readlink > /dev/null 2>&1) ; then
152 local SYMTARGET="$(v=`ls -l "$2" 2>/dev/null` ; echo ${v##*> })"
153 if [ -n "$SYMTARGET" ] ; then
162 ## a function to print relevant scsi host path when there is more then
163 ## one. this function also takes care of stripping off the trailing
184 ## this finds information we need on both newworld and oldworld macs.
185 ## mainly what scsi host a disk is attached to.
188 ## see if system has scsi at all
189 if [ ! -f /proc/scsi/scsi ] ; then
190 echo 1>&2 "$PRG: /dev/$DEVNODE: Device not configured"
194 ## first we have to figure out the SCSI ID, have to do that
195 ## anyway [to] find the attached scsi disks = "Direct-Access" and
196 ## stop at sda=1 sdb=2 or whatever count in 3 lines steps
198 ## get last letter of device node, ie sda -> a
199 SUBNODE=${DEVNODE##*sd}
201 ## turn SUBNODE above into a number starting at 1, ie a -> 1
202 SUBDEV="$(smalltr $SUBNODE)"
203 [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: SUBNODE=$SUBNODE SUBDEV=$SUBDEV"
207 ## copy scsi file into a variable removing "Attached Devices"
208 ## which is the first line. this avoids a lot of
209 ## [incmopatible] crap later, and improves readability.
211 ## find number of lines once and recycle that number, to save
212 ## some time (linecount is a bit slow). subtract one line
213 ## to scrap Attached Devices:
215 SCSILINES="$(($(linecount /proc/scsi/scsi) - 1))"
217 if [ "$SUBDEV" -gt "$(cat /proc/scsi/scsi | grep Direct-Access | linecount)" ] ; then
218 echo 1>&2 "$PRG: /dev/$DEVNODE: Device not configured"
222 PROCSCSI="$(cat /proc/scsi/scsi | tail -n $SCSILINES)"
224 for i in $(smallseq $(($SCSILINES / 3))) ; do
226 ## put every scsi device into one single line
227 DEVINFO="$(echo "$PROCSCSI" | head -n $(($i * 3)) | tail -n 3)"
228 [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: DEVINFO=$DEVINFO"
230 ## cut the type field, expect "Direct-Access" later.
231 DEVTYPE="$(v=$(echo ${DEVINFO##*Type: }) ; echo ${v%% *})"
232 [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: DEVTYPE=$DEVTYPE"
234 ## get the device id.
235 DEVID="$(v=$(echo ${DEVINFO##*Id: }) ; n=$(echo ${v%% *}) ; echo ${n#*0})"
236 [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: DEVID=$DEVID"
238 ## get the scsi host id.
239 DEVHOST="$(v=$(echo ${DEVINFO##*Host: scsi}) ; echo ${v%% *})"
240 [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: DEVHOST=$DEVHOST"
242 if [ "$DEVTYPE" = "Direct-Access" ] ; then
243 DEVCOUNT="$(($DEVCOUNT + 1))"
244 [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: DEVCOUNT=$DEVCOUNT"
245 if [ "$SUBDEV" = "$DEVCOUNT" ] ; then
248 [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: DEVICE_HOST=$DEVICE_HOST"
254 ## figure out what the scsi driver is, it is /proc/scsi/dirname.
255 [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: DEVICE_HOST=$DEVICE_HOST"
256 SCSI_DRIVER="$(x=`ls /proc/scsi/*/$DEVICE_HOST 2>/dev/null | cat` ; y=`echo ${x##*proc/scsi/}` ; echo ${y%%/*})"
257 [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: SCSI_DRIVER=$SCSI_DRIVER"
259 ## figure out which host we found.
260 SCSI_HOSTNUMBER="$(v=`ls /proc/scsi/$SCSI_DRIVER/* 2>/dev/null | cat | grep -n "$DEVICE_HOST\>"` ; echo ${v%%:*})"
261 [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: SCSI_HOSTNUMBER=$SCSI_HOSTNUMBER"
266 ## generic function that can find OF device paths for scsi devices,
267 ## must be run after scsiinfo().
270 case "$SCSI_DRIVER" in
272 HOST_LIST="$(for i in `find /proc/device-tree -name compatible` ; do
273 lgrep "$i" "^ADPT" "^pci900[45]" "^pciclass,01000" ; done)"
274 DEVICE_PATH="$(printhost $SCSI_HOSTNUMBER $HOST_LIST)"
275 echo "${DEVICE_PATH##*device-tree}/@$DEVICE_ID:$PARTITION"
278 HOST_LIST="$(for i in `find /proc/device-tree -name compatible` ; do
279 lgrep "$i" "^Symbios" "^pci1000" "^pciclass,01000" ; done)"
280 DEVICE_PATH="$(printhost $SCSI_HOSTNUMBER $HOST_LIST)"
281 echo "${DEVICE_PATH##*device-tree}/@$DEVICE_ID:$PARTITION"
284 HOST_LIST="$(for i in `find /proc/device-tree -name compatible` ; do
285 lgrep "$i" "mesh" ; done)"
286 DEVICE_PATH="$(printhost $SCSI_HOSTNUMBER $HOST_LIST)"
287 echo "${DEVICE_PATH##*device-tree}/@$DEVICE_ID:$PARTITION"
290 echo 1>&2 "$PRG: Driver: $SCSI_DRIVER is not supported"
299 local OF1275IDE=/proc/ide/pmac
301 if [ ! -f "$OF1275IDE" ] ; then
302 case "$(cat /proc/device-tree/model)" in
304 local CDROM="$(grep "^drive name:" /proc/sys/dev/cdrom/info 2> /dev/null | grep $DEVNODE)"
305 if [ -z "$CDROM" ] ; then
306 echo "ultra2:$PARTITION"
312 if [ ! -L "/proc/ide/$DEVNODE" ] ; then
313 echo "$PRG: /dev/$DEVNODE: Device not configured"
316 local CDROM="$(grep "^drive name:" /proc/sys/dev/cdrom/info 2> /dev/null | grep $DEVNODE)"
317 if [ -z "$CDROM" ] ; then
318 if [ "$DEVNODE" = hda ] ; then
321 echo "ultra1:$PARTITION"
329 if [ ! -L "/proc/ide/$DEVNODE" ] ; then
330 echo 2>&1 "$PRG: /dev/$DEVNODE: Device not configured"
334 local IDEBUS="$(v=`readlink /proc/ide/$DEVNODE` ; echo ${v%%/*} )"
335 [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: IDEBUS=$IDEBUS"
336 local NUMBUSSES="$(($(linecount $OF1275IDE) / 5))"
337 [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: NUMBUSSES=$NUMBUSSES"
338 if [ "$((${IDEBUS##ide} + 1))" -gt "$NUMBUSSES" ] ; then
339 echo 1>&2 "$PRG: /dev/$DEVNODE is not supported"
342 local IDEDEV="$(head -n $((5 * $((${IDEBUS##ide} + 1)))) $OF1275IDE | tail -n 5)"
343 [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: IDEDEV=$IDEDEV"
344 if [ "$(echo "$IDEDEV" | head -n 1)" != "$IDEBUS" ] ; then
345 echo "$PRG: /dev/$DEVNODE: is not supported"
348 local DEVSPEC="$(v=`echo "$IDEDEV" | grep devspec` ; echo ${v##*:})"
349 [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: DEVSPEC=$DEVSPEC"
352 echo "${DEVSPEC}/disk@0:$PARTITION"
356 echo "${DEVSPEC}/disk@1:$PARTITION"
360 echo 1>&2 "$PRG: /dev/$DEVNODE is not supported"
367 ## figure out the OpenFirmware device path for newworld macs.
368 ## sd* scsi disks , hd* ide disks.
373 if ls -l /proc/device-tree | grep -q ^lr ; then
376 echo 1>&2 "$PRG: /proc/device-tree is broken. Do not use BootX to boot, use yaboot."
377 echo 1>&2 "$PRG: The yaboot HOWTO can be found here: http://www.alaska.net/~erbenson/doc"
381 ## use common scsiinfo function to get info we need.
384 ## now we have the data for /@$DEVID:$PARTITION
385 ## find the actual OF path.
386 scsi_ofpath || return 1
389 ide_ofpath || return 1
392 echo 1>&2 "$PRG: Device: /dev/$DEVNODE is not supported"
401 ## for some reason 2.4 kernels put OF aliases in aliases@0/ instead of plain aliases/
402 if [ -d "/proc/device-tree/aliases" ] ; then
403 local ALIASES="aliases"
404 elif [ -d "/proc/device-tree/aliases@0" ] ; then
405 local ALIASES="aliases@0"
407 echo 1>&2 "$PRG: Cannot find OpenFirmware aliases directory in /proc/device-tree/"
411 local MODEL="$(cat /proc/device-tree/compatible)"
412 [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: Oldworld subarch: $MODEL"
415 AAPL,7300*|AAPL,7500*|AAPL,8500*|AAPL,9500*|AAPL,\?\?\?\?*)
419 case "$SCSI_DRIVER" in
421 echo $(cat /proc/device-tree/$ALIASES/scsi-int)/sd\@$DEVICE_ID:$PARTITION
424 echo $(cat /proc/device-tree/$ALIASES/scsi)/sd\@$DEVICE_ID:$PARTITION
427 echo 1>&2 "$PRG: Driver $SCSI_DRIVER is not supported"
433 echo 1>&2 "$PRG: Unsupported device: /dev/$DEVNODE"
442 case "$SCSI_DRIVER" in
444 echo $(cat /proc/device-tree/$ALIASES/scsi)/sd\@$DEVICE_ID:$PARTITION
447 echo 1>&2 "$PRG: Driver $SCSI_DRIVER is not supported"
453 echo $(cat /proc/device-tree/$ALIASES/ata)/ATA-Disk\@0:$PARTITION
456 echo $(cat /proc/device-tree/$ALIASES/ata)/ATA-Disk\@1:$PARTITION
459 echo 1>&2 "$PRG: Device: /dev/$DEVNODE is not supported"
467 case "$SCSI_DRIVER" in
469 echo $(cat /proc/device-tree/$ALIASES/scsi)/sd\@$DEVICE_ID:$PARTITION
472 echo 1>&2 "$PRG: Driver $SCSI_DRIVER is not supported"
478 echo $(cat /proc/device-tree/$ALIASES/ata)/ata-disk\@0:$PARTITION
481 echo $(cat /proc/device-tree/$ALIASES/ata)/ata-disk\@1:$PARTITION
484 echo 1>&2 "$PRG: Device: /dev/$DEVNODE is not supported"
488 AAPL,Gossamer*|AAPL,PowerMac\ G3*)
492 case "$SCSI_DRIVER" in
494 echo $(cat /proc/device-tree/$ALIASES/scsi)/sd\@$DEVICE_ID:$PARTITION
497 echo 1>&2 "$PRG: Driver $SCSI_DRIVER is not supported"
503 echo $(cat /proc/device-tree/$ALIASES/ide0)/ata-disk\@0:$PARTITION
506 echo $(cat /proc/device-tree/$ALIASES/ide0)/ata-disk\@1:$PARTITION
509 echo $(cat /proc/device-tree/$ALIASES/ide1)/ata-disk\@0:$PARTITION
512 echo $(cat /proc/device-tree/$ALIASES/ide1)/ata-disk\@1:$PARTITION
515 echo 1>&2 "$PRG: Device: /dev/$DEVNODE is not supported"
520 if [ -f /proc/device-tree/$ALIASES/ata0 ] ; then
525 if [ -f /proc/device-tree/$ALIASES/ata1 ] ; then
533 case "$SCSI_DRIVER" in
535 echo $(cat /proc/device-tree/$ALIASES/scsi)/sd\@$DEVICE_ID:$PARTITON
538 echo 1>&2 "$PRG: Driver $SCSI_DRIVER is not supported"
544 echo $(cat /proc/device-tree/$ALIASES/$ATA0)/ata-disk\@0:$PARTITION
547 echo $(cat /proc/device-tree/$ALIASES/$ATA0)/ata-disk\@1:$PARTITION
550 echo $(cat /proc/device-tree/$ALIASES/$ATA1)/atapi-disk\@0:$PARTITION
553 echo $(cat /proc/device-tree/$ALIASES/$ATA1)/atapi-disk\@1:$PARTITION
556 echo 1>&2 "$PRG: Unsupported device: /dev/$DEVNODE"
565 case "$SCSI_DRIVER" in
567 echo $(cat /proc/device-tree/$ALIASES/scsi-int)/sd\@$DEVICE_ID:$PARTITON
570 echo $(cat /proc/device-tree/$ALIASES/scsi)/sd\@$DEVICE_ID:$PARTITON
573 echo 1>&2 "$PRG: Driver $SCSI_DRIVER is not supported"
579 echo $(cat /proc/device-tree/$ALIASES/ata0)/ata-disk\@0:$PARTITION
582 echo $(cat /proc/device-tree/$ALIASES/ata0)/ata-disk\@1:$PARTITION
585 echo $(cat /proc/device-tree/$ALIASES/ata1)/atapi-disk\@0:$PARTITION
588 echo $(cat /proc/device-tree/$ALIASES/ata1)/atapi-disk\@1:$PARTITION
591 echo $(cat /proc/device-tree/$ALIASES/ata2):$PARTITION
594 echo $(cat /proc/device-tree/$ALIASES/ata3):$PARTITION
597 echo 1>&2 "$PRG: Unsupported device: /dev/$DEVNODE"
603 echo 1>&2 "$PRG: This machine is not supported: $MODEL"
610 ## find OpenFirmware device path for IBM CHRP hardware (scsi only)
615 if ls -l /proc/device-tree | grep -q ^lr ; then
618 echo 1>&2 "$PRG: /proc/device-tree is broken."
622 ## use common scsiinfo function to get info we need.
625 ## now we have the data for /@$DEVID:$PARTITION
626 ## find the actual OF path.
627 scsi_ofpath || return 1
630 echo 1>&2 "$PRG: Device: /dev/$DEVNODE is not supported"
637 ## If we get lame devfs name, we need to make it foad
641 /dev/ide/*|/dev/scsi/*|/dev/discs/*)
650 ## convert devfs names into normal short ones, written by Tom Rini.
653 ## get partition number, if any
654 local PARTNUM="${1##*[a-z]}"
655 ## Find the bus type.
656 local TYPE="$(v=${1#/dev/} ; echo ${v%/host*})"
657 ## Find the host number.
658 local HOST="$(v=${1#/dev/*/host} ; echo ${v%/bus*})"
659 ## Find the bus number.
660 local BUS="$(v=${1#/dev/*/bus} ; echo ${v%/tar*})"
662 local TARGET="$(v=${1#/dev/*/target} ; echo ${v%/lun*})"
688 echo 1>&2 "$PRG: $1: Unable to translate this device, try again without devfs."
691 local DEV="${DEV}${PARTNUM}"
696 local LUN="$(v=${1#/dev/*/lun} ; echo ${v%/*})"
698 ## In this case, we need to figure out what number our device is
701 ## copy scsi file into a variable removing "Attached Devices"
702 ## which is the first line. this avoids a lot of
703 ## [incmopatible] crap later, and improves readability.
705 ## find number of lines once and recycle that number, to save
706 ## some time (linecount is a bit slow). subtract one line
707 ## to scrap Attached Devices:
709 local SCSILINES="$(($(linecount /proc/scsi/scsi) - 1))"
710 local PROCSCSI="$(cat /proc/scsi/scsi | tail -n $SCSILINES)"
712 for i in $(smallseq $(($SCSILINES / 3))) ; do
714 ## put every scsi device into one single line
715 local DEVINFO="$(echo "$PROCSCSI" | head -n $(($i * 3)) | tail -n 3)"
716 [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: fixdevfs: DEVINFO=$DEVINFO"
718 ## cut the type field, expect "Direct-Access" later.
719 local DEVTYPE="$(v=$(echo ${DEVINFO##*Type: }) ; echo ${v%% *})"
720 [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: fixdevfs: DEVTYPE=$DEVTYPE"
722 if [ "$DEVTYPE" = "Direct-Access" ] ; then
723 ## Lets find out some more information
724 ## get the device id.
725 local DEVID="$(v=$(echo ${DEVINFO##*Id: }) ; n=$(echo ${v%% *}) ; echo ${n#*0})"
726 [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: fixdevfs: DEVID=$DEVID"
728 ## get the device lun.
729 local DEVLUN="$(v=$(echo ${DEVINFO##*Lun: }) ; n=$(echo ${v%% *}) ; echo ${n#*0})"
730 [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: fixdevfs: DEVLUN=$DEVLUN"
732 ## get the device channel.
733 local DEVCHAN="$(v=$(echo ${DEVINFO##*Channel: }) ; n=$(echo ${v%% *}) ; echo ${n#*0})"
734 [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: fixdevfs: DEVCHAN=$DEVCHAN"
736 ## get the scsi host id.
737 local DEVHOST="$(v=$(echo ${DEVINFO##*Host: scsi}) ; echo ${v%% *})"
738 [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: fixdevfs: DEVHOST=$DEVHOST"
740 local DEVCOUNT="$(($DEVCOUNT + 1))"
741 [ "$DEBUG" = 1 ] && echo 1>&2 "$PRG: DEBUG: fixdevfs: DEVCOUNT=$DEVCOUNT"
742 if [ "$DEVHOST" = "$HOST" -a "$DEVCHAN" = "$BUS" -a \
743 "$DEVID" = "$TARGET" -a "$DEVLUN" = "$LUN" ] ; then
744 local DEV="sd$(smalltr $DEVCOUNT)${PARTNUM}"
750 echo 1>&2 "$PRG: $1: Unable to translate this device, try again without devfs."
754 echo 1>&2 "$PRG: Unknown bus $TYPE"
758 ## we should never get here
762 ## make sure that find, head and tail can be found. otherwise the
763 ## script will silently give bogus paths. these are the only /usr/*
764 ## utilities this script depends on.
767 if command -v find > /dev/null 2>&1 ; then
768 [ -x `command -v find` ] || FAIL=1 ; else FAIL=1 ; fi
769 if command -v head > /dev/null 2>&1 ; then
770 [ -x `command -v head` ] || FAIL=1 ; else FAIL=1 ; fi
771 if command -v tail > /dev/null 2>&1 ; then
772 [ -x `command -v tail` ] || FAIL=1 ; else FAIL=1 ; fi
774 if [ "$FAIL" = 1 ] ; then
775 echo 1>&2 "$PRG: \`find', \`head', or \`tail' could not be found, aborting."
782 ## parse command line switches.
783 if [ $# != 0 ] ; then
799 echo 1>&2 "$PRG: unrecognized option \`$1'"
800 echo 1>&2 "$PRG: Try \`$PRG --help' for more information."
804 echo 1>&2 "$PRG: You must specify a filename"
805 echo 1>&2 "Try \`$PRG --help' for more information."
815 echo 1>&2 "$PRG: You must specify a /dev device"
816 echo 1>&2 "Try \`$PRG --help' for more information."
820 ## check that FILE is a block device and exists.
821 if [ ! -e "$device" ] ; then
822 echo 1>&2 "$PRG: $device: No such file or directory"
824 elif [ ! -b "$device" ] ; then
825 echo 1>&2 "$PRG: $device is not a block device"
829 ## check that we are running on a GNU/Linux system, OSX/BSD does not
830 ## have the same /proc stuff
831 if [ `uname -s` != Linux ] ; then
832 echo 1>&2 "$PRG: This utility will only work with GNU/Linux"
836 ## check for ppc, i think uname -m is safe for this...
837 if [ `uname -m` != ppc ] ; then
838 echo 1>&2 "$PRG: This utility will only work on PowerPC hardware"
842 ## ofpath cannot live without procfs
843 if [ ! -f /proc/uptime ] ; then
844 echo 1>&2 "$PRG: This utility requires the /proc filesystem"
848 ## check for retarded devfs names and tell them to foad.
849 if ckdevfs "$device" ; then
850 device="$(fixdevfs $device)" || exit 1
853 ## check for newworld mac. use cat hack due to /proc wierdness.
854 if [ "$(v=`cat /proc/cpuinfo 2>/dev/null | grep pmac-generation` ; echo ${v##*:[ ]})" = NewWorld ] ; then
856 elif [ "$(v=`cat /proc/cpuinfo 2>/dev/null | grep pmac-generation` ; echo ${v##*:[ ]})" = OldWorld ] ; then
858 elif (cat /proc/cpuinfo 2>/dev/null | grep ^motherboard | grep -q AAPL) ; then
860 elif (cat /proc/cpuinfo 2> /dev/null | grep ^machine | grep -q 'CHRP IBM') ; then
863 echo 1>&2 "$PRG: This machine is not yet supported"
867 ## make sure /proc/device-tree exists
868 if [ ! -d /proc/device-tree ] ; then
869 echo 1>&2 "$PRG: /proc/device-tree does not exist"
870 echo 1>&2 "$PRG: Make sure you compiled your kernel with CONFIG_PROC_DEVICETREE=y"
874 ## make sure we have what we need.
877 ## get the base device node and scrap /dev/ ie /dev/hda2 -> hda
878 DEVICE="${device##*/}"
879 DEVNODE="${DEVICE%%[0-9]*}"
880 PARTITION="${DEVICE##*[a-z]}"
882 ## use appropriate search for right sub arch.