Home | History | Annotate | Download | only in SUNWnvsata
      1 #!/bin/sh
      2 #
      3 # CDDL HEADER START
      4 #
      5 # The contents of this file are subject to the terms of the
      6 # Common Development and Distribution License (the "License").
      7 # You may not use this file except in compliance with the License.
      8 #
      9 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     10 # or http://www.opensolaris.org/os/licensing.
     11 # See the License for the specific language governing permissions
     12 # and limitations under the License.
     13 #
     14 # When distributing Covered Code, include this CDDL HEADER in each
     15 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     16 # If applicable, add the following below this CDDL HEADER, with the
     17 # fields enclosed by brackets "[]" replaced with your own identifying
     18 # information: Portions Copyright [yyyy] [name of copyright owner]
     19 #
     20 # CDDL HEADER END
     21 #
     22 
     23 #
     24 # Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
     25 # Use is subject to license terms.
     26 
     27 ROOT=${PKG_INSTALL_ROOT:-/}
     28 SYSTEM=${ROOT}/etc/system
     29 BOOTENVRC=${ROOT}/boot/solaris/bootenv.rc
     30 PATH_TO_INST=${ROOT}/etc/path_to_inst
     31 POWER_CONF=${ROOT}/etc/power.conf
     32 BAK=bak
     33 TMP=/tmp
     34 NV_SATA=nv_sata
     35 NVSATA_TMP=$TMP/${NV_SATA}
     36 SYSTEM_BAK=${NVSATA_TMP}/system.${BAK}
     37 BOOTENVRC_BAK=${NVSATA_TMP}/bootenv.rc.${BAK}
     38 POWER_CONF_BAK=${NVSATA_TMP}/power.conf.${BAK}
     39 UPGRADE_LOG=${ROOT}/var/sadm/system/logs/upgrade_log
     40 LIVEUPGRADE_TMP_LOG=$TMP/.luupgrade.pfinstall.log.*
     41 DEVMAP_TABLE=${TMP}/devmap_table
     42 DRIVER_ALIASES='"pci10de,37f" "pci10de,55" "pci10de,54" "pci10de,266" "pci10de,267"'
     43 ETC_DEV_DIR=${ROOT}/etc/dev
     44 ENUMERATE_RESERVED=${ETC_DEV_DIR}/reserved_devnames
     45 DEVLINK_DB=${ETC_DEV_DIR}/.devlink_db
     46 
     47 CP=/usr/bin/cp
     48 MV=/usr/bin/mv
     49 LN=/usr/bin/ln
     50 LS=/usr/bin/ls
     51 GREP=/usr/bin/grep
     52 SED=/usr/bin/sed
     53 CUT=/usr/bin/cut
     54 CAT=/usr/bin/cat
     55 NAWK=/usr/bin/nawk
     56 RM=/usr/bin/rm
     57 MKDIR=/usr/bin/mkdir
     58 MOUNT=/usr/sbin/mount
     59 MODINFO=/usr/sbin/modinfo
     60 PRTCONF=/etc/prtconf
     61 PRTCONF_OUT=${NVSATA_TMP}/prtconf_vp.out
     62 DEV_PROPS=${NVSATA_TMP}/dev_props.out
     63 
     64 #
     65 # get_devinfo_prop(file, prop)
     66 #
     67 #   <prtconf.out> file that has output from 'prtconf -vp' command
     68 #   <prop>  name of the property OR "ALL" for all properties
     69 #
     70 # parse the output of prtconf command and print the value of
     71 # of the specified property or all if <prop> is "ALL" in
     72 # the format "<name>=<value>".
     73 #
     74 get_devinfo_prop()
     75 {
     76     /bin/cat $1 | ${NAWK} -v prop=$2 '
     77 	BEGIN {
     78 		if (match(prop,"ALL"))
     79 			check_all=1;
     80 		else
     81 			check_all=0;
     82 	}
     83 	{
     84 		if (!match($1, "name="))
     85 			next;
     86 		if (!check_all) {
     87 			pname = sprintf("name=\047%s\047", prop);
     88 			if (!match($1, pname))
     89 				next;
     90 		}
     91 		gsub("\047", "", $1);
     92 		name = substr($1, index($1,"=")+1);
     93 		if (match($2, "type=boolean")) {
     94 			value=1;
     95 		} else if (match($2, "type=int") || match($2, "type=byte")) {
     96 			getline;
     97 			value = ""
     98 			cnt = split(substr($0,index($0, "=")+1), words, ".");
     99 			for (i = 1; i <= cnt; i++) {
    100 				w = "0x" skipzeros(words[i]);
    101 				if (i > 1)
    102 					value = value " ";
    103 				value = value w;
    104 			}
    105 		} else {
    106 			getline;
    107 			value = substr($0,index($0, "=")+1);
    108 		} 
    109 		if (!check_all) {
    110 			print value;
    111 			exit (0);
    112 		}
    113 		print name "=" value;
    114 	}
    115 	# skp the leading '0' characters in the string
    116 	function skipzeros (str, out, n, i)
    117 	{
    118 		n = length(str);
    119 		for (i = 1; i <= n; i++) {
    120 			if (!match(substr(str, i, 1), "0")) {
    121 				break;
    122 			}
    123 		}
    124 		if (i > n)
    125 			out=substr(str,n);
    126 		else
    127 			out=substr(str,i);
    128 		return (out);
    129 	}'
    130 }
    131 
    132 #
    133 # Function get_properties() gets the following properties for the
    134 # device (i.e /devices path without '/devices' prefix) passed as
    135 # an argument:
    136 #
    137 #	vendor-id
    138 #	device-id
    139 #	subsystem-vendor-id
    140 #	subsystem-id
    141 #
    142 # Note: it saves the pathname and the properties in ${DEV_PROPS} file 
    143 # to optimize subsequent mapping calls for the same path name.
    144 #
    145 # e.g: get_properties "/pci@0,0/pci-ide@1f,2"
    146 #
    147 get_properties()
    148 {
    149     if [ -f ${DEV_PROPS} ]
    150     then
    151 	mapped_path=`${GREP} $1 ${DEV_PROPS}`
    152 	if [ $? -eq 0 ]
    153 	then
    154 		vendor_id=`echo ${mapped_path} | ${CUT} -d ' ' -f2` 
    155 		device_id=`echo ${mapped_path} | ${CUT} -d ' ' -f3` 
    156 		subsystem_vendor_id=`echo ${mapped_path} | ${CUT} -d ' ' -f4` 
    157 		subsystem_id=`echo ${mapped_path} | ${CUT} -d ' ' -f5` 
    158 		return;
    159 	fi
    160     fi
    161 
    162     path=`echo $1|${GREP} -v storage`
    163     ${PRTCONF} -v "/devices"$path >${PRTCONF_OUT}
    164     if [ $? -eq 0 ]
    165     then
    166 	vendor_id=`get_devinfo_prop ${PRTCONF_OUT} "vendor-id" | ${SED} "s/^0x//"`
    167 	device_id=`get_devinfo_prop ${PRTCONF_OUT} "device-id" | ${SED} "s/^0x//"`
    168 	subsystem_vendor_id=`get_devinfo_prop ${PRTCONF_OUT} "subsystem-vendor-id" | ${SED} "s/^0x//"`
    169 	subsystem_id=`get_devinfo_prop ${PRTCONF_OUT} "subsystem-id" | ${SED} "s/^0x//"`
    170 	rm -f ${PRTCONF_OUT}
    171 	echo $1 "$vendor_id" "$device_id" "$subsystem_vendor_id" "$subsystem_id" >>${DEV_PROPS}
    172     else
    173 	vendor_id=""
    174 	device_id=""
    175 	subsystem_vendor_id=""
    176 	subsystem_id=""
    177 	echo $1 "$vendor_id" >>${DEV_PROPS}
    178     fi
    179 }
    180 
    181 #
    182 # Function process_bootenvrc_for_install() converts bootpath in ata style
    183 # to nv_sata style in the file /boot/solaris/bootenv.rc for normal upgrade.
    184 #
    185 process_bootenvrc_for_install() {
    186 
    187 	# Check to see if bootenv.rc file has ata disk entries.
    188 	${GREP} "cmdk@" ${BOOTENVRC} > /dev/null
    189 	if [ $? -eq 1 ]
    190 	then
    191 		# There is no ata disk entry. No mapping is needed.
    192 		return 0
    193 	fi
    194 
    195 	# Backup the bootenv.rc file.
    196 	$CP ${BOOTENVRC} ${BOOTENVRC_BAK}
    197 	if [ $? -ne 0 ]
    198 	then
    199 		# Can't backup bootenv.rc file.
    200 		rem_drv -b ${ROOT} nv_sata
    201 		${RM} -rf ${NVSATA_TMP}
    202 		exit 1
    203 	fi
    204  
    205 	${GREP} "cmdk@" ${BOOTENVRC} | while read bootpath_line
    206 	do
    207 		old_path=`echo ${bootpath_line} | ${CUT} -d' ' -f3 \
    208 			|$SED "s/\'//g"`
    209 		devname=`echo ${old_path} | $CUT -d/ -f4- | $SED "{
    210 			s/ide@/disk@/
    211 			s/\/cmdk@.//
    212 			}"`
    213 		$LS -l /dev/dsk | $GREP ${devname} | while read line
    214 		do
    215 			new_path=`echo $line | $NAWK '{print $11}'`
    216 			arg="/`echo ${new_path} | ${CUT} -d/ -f4,5`"
    217 			get_properties ${arg}
    218 	
    219 			for pair in ${DRIVER_ALIASES}
    220 			do
    221 				VENDOR_ID=`echo ${pair} | $SED "s/\"//g" \
    222 					| $CUT -d, -f1`
    223 				DEVICE_ID=`echo ${pair} | $SED "s/\"//g" \
    224 					| $CUT -d, -f2`
    225 				# Check to see if it is a nv_sata device.
    226 				if [ "pci${vendor_id}" = ${VENDOR_ID} -a \
    227 					${device_id} = ${DEVICE_ID} ]
    228 				then	
    229 					if [ "X${subsystem_vendor_id}" = "X" ]
    230 					then
    231                        				ids="pci${vendor_id},${device_id}"
    232 					else
    233                        				ids="pci${subsystem_vendor_id},${subsystem_id}"
    234 					fi
    235 					mapped_path=`echo ${old_path} | ${SED} "{
    236 						s/pci-ide/${ids}/
    237 						s/ide/disk/
    238 						s/\/cmdk@.//
    239 						}"`
    240 					new_path="/`echo ${new_path} | $CUT -d/ -f4-`"
    241 					if [ ${new_path} = ${mapped_path} ]
    242 					then
    243 						if [ ! -f ${NVSATA_TMP}/bootenv.rc ]
    244 						then
    245 							$GREP -v "cmdk@" ${BOOTENVRC} > \
    246 								${NVSATA_TMP}/bootenv.rc	
    247 						fi
    248 						echo "setprop bootpath ${new_path}" \
    249 							>> ${NVSATA_TMP}/bootenv.rc
    250 						break	
    251 					fi	
    252 				fi	
    253 			done
    254 		done
    255 	done
    256 	# Commit the changes
    257 	if [ -f ${NVSATA_TMP}/bootenv.rc ]
    258 	then
    259 		${CP} ${NVSATA_TMP}/bootenv.rc ${BOOTENVRC}
    260 		if [ $? -ne 0 ]
    261 		then
    262 			# Failed to modify bootenv.rc file.
    263 			rem_drv -b ${ROOT} nv_sata
    264 			${RM} -rf ${NVSATA_TMP}
    265 			exit 1
    266 		fi
    267 	fi
    268 }
    269 
    270 #
    271 # Function process_bootenvrc_for_lu() converts bootpath in ata style
    272 # to nv_sata style in the file /boot/solaris/bootenv.rc for live upgrade.
    273 #
    274 process_bootenvrc_for_lu() {
    275 
    276         # Check to see if bootenv.rc has ata disk entries.
    277 
    278         ${GREP} "cmdk@" ${BOOTENVRC} > /dev/null
    279         if [ $? -eq 1 ]
    280         then
    281                 # There is no ata disk. No mapping is needed.
    282                 return 0
    283         fi
    284 
    285 	# Backup the bootenv.rc file.
    286 	$CP ${BOOTENVRC} ${BOOTENVRC_BAK}
    287 	if [ $? -ne 0 ]
    288 	then
    289 		# Can't backup bootenv.rc file.
    290 		rem_drv -b ${ROOT} nv_sata
    291 		${RM} -rf ${NVSATA_TMP}
    292 		exit 1
    293 	fi
    294 
    295 	${GREP} "cmdk@" ${BOOTENVRC} | while read bootpath_line
    296 	do
    297 	    bootpath=`echo ${bootpath_line} | ${CUT} -d' ' -f3`
    298 	    if [ "X${no_nvsata_in_CBE}" != "X0" ]
    299 	    then 
    300         	arg=`echo ${bootpath} | ${CUT} -d/ -f1-3`
    301         	get_properties ${arg}
    302 
    303         	# Check if boot device is a supported nv_sata device.
    304         	for pair in ${DRIVER_ALIASES}
    305         	do
    306                 	dr_vendor_id=`echo $pair | $SED "s/\"//g" | $CUT -d, -f1`
    307                 	dr_device_id=`echo $pair | $SED "s/\"//g" | $CUT -d, -f2`
    308                 	if [ "pci${vendor_id}" = ${dr_vendor_id} -a ${device_id} = \
    309 				${dr_device_id} ]
    310                 	then
    311 				if [ "X${subsystem_vendor_id}" = "X" ]
    312 				then
    313                        			ids="pci${vendor_id},${device_id}"
    314 				else
    315                        			ids="pci${subsystem_vendor_id},${subsystem_id}"
    316 				fi
    317 				if [ ! -f ${NVSATA_TMP}/bootenv.rc ]
    318 				then
    319 					$GREP -v "cmdk@" ${BOOTENVRC} > \
    320 						${NVSATA_TMP}/bootenv.rc
    321 				fi
    322 				mapped_bootpath_line=`echo ${bootpath_line} | ${SED} "{
    323                                 	s/pci-ide/${ids}/
    324                                 	s/ide/disk/
    325                                 	s/\/cmdk@.//
    326                                 	}"`
    327 
    328 				echo ${mapped_bootpath_line} >> ${NVSATA_TMP}/bootenv.rc
    329 				break
    330                 	fi
    331         	done
    332 	    else
    333 		is_mapped="no"
    334 		devname=`echo ${bootpath} | $CUT -d/ -f4- | $SED "{
    335 			s/ide@/disk@/
    336 			s/\/cmdk@.//
    337 			}"`
    338 		for new_path in `$LS -l "/dev/dsk" | $GREP ${devname} |$NAWK '{print $11}'`
    339 		do
    340 			arg2="/`echo ${new_path} | ${CUT} -d/ -f4,5`"
    341 			get_properties ${arg2}
    342 			for pair in ${DRIVER_ALIASES}
    343 			do
    344 				VENDOR_ID=`echo ${pair} | $SED "s/\"//g" \
    345 					| $CUT -d, -f1`
    346 				DEVICE_ID=`echo ${pair} | $SED "s/\"//g" \
    347 					| $CUT -d, -f2`
    348 
    349 				# Check to see if it is a nv_sata device.
    350 				if [ "pci${vendor_id}" = ${VENDOR_ID} -a \
    351 					${device_id} = ${DEVICE_ID} ]
    352 				then
    353 					if [ "X${subsystem_vendor_id}" = "X" ]
    354 					then
    355 						ids3="pci${vendor_id},${device_id}"
    356 					else
    357 						ids3="pci${subsystem_vendor_id},${subsystem_id}"
    358 					fi
    359 					mapped_bootpath_line=`echo ${bootpath_line} | ${SED} "{
    360 						s/pci-ide/${ids3}/
    361 						s/ide/disk/
    362 						s/\/cmdk@.//
    363 						 }"`
    364 					mapped_bootpath=`echo ${mapped_bootpath_line} \
    365 						| ${CUT} -d' ' -f3`
    366 					$LS -l "/dev/dsk" | $GREP ${mapped_bootpath} >/dev/null
    367 					if [ $? -eq 0 ]
    368 					then
    369 						if [ ! -f ${NVSATA_TMP}/bootenv.rc ]
    370 						then
    371 							$GREP -v "cmdk@" ${BOOTENVRC} > \
    372 								${NVSATA_TMP}/bootenv.rc
    373 						fi
    374 						echo ${mapped_bootpath_line} >> \
    375 							${NVSATA_TMP}/bootenv.rc	
    376 						is_mapped="yes"
    377 						break
    378 					fi
    379 				fi
    380 			done
    381 			if [ "${is_mapped}" = "yes" ]
    382 			then 
    383 				break
    384 			fi
    385 		done
    386 	    fi
    387 	done
    388 	# Commit the changes
    389 	if [ -f ${NVSATA_TMP}/bootenv.rc ]
    390 	then
    391 		${CP} ${NVSATA_TMP}/bootenv.rc ${BOOTENVRC}
    392 		if [ $? -ne 0 ]
    393 		then
    394 			# Failed to modify bootenv.rc file.
    395 			rem_drv -b ${ROOT} nv_sata
    396 			${RM} -rf ${NVSATA_TMP}
    397 			exit 1
    398 		fi
    399 	fi
    400 }
    401 
    402 #
    403 # Function process_system_for_lu() converts rootdev in /etc/system from
    404 # old ata fromat to new nv_sata format during live upgrade.
    405 #
    406 process_system_for_lu() {
    407 
    408         # Check to see if system has ata disk as a root device.
    409         rootdev_line=`${GREP} -v "*" $SYSTEM | ${GREP} "rootdev:/"| ${GREP} "cmdk@"`
    410         if [ $? -eq 1 ]
    411         then
    412                 # roodev entry does not exist, or root disk is not ata.
    413                 return 0
    414         fi
    415 
    416 	${CP} ${SYSTEM} ${SYSTEM_BAK}
    417 	if [ $? -ne 0 ]
    418 	then
    419 		# Can't backup system file."
    420 		$CP ${BOOTENVRC_BAK} ${BOOTENVRC}
    421 		rem_drv -b ${ROOT} nv_sata
    422 		${RM} -rf ${NVSATA_TMP}
    423 		exit 1
    424 	fi
    425 
    426         rootdev=`echo ${rootdev_line} | ${CUT} -d: -f2-`
    427 	if [ "X${no_nvsata_in_CBE}" != "X0" ]
    428 	then
    429         	ar=`echo ${rootdev} | ${CUT} -d/ -f1-3`
    430         	get_properties ${ar}
    431 
    432         	# Check if boot device is a supported nv_sata device.
    433         	for pair in ${DRIVER_ALIASES}
    434         	do
    435 			dr_vendor_id=`echo $pair | $SED "s/\"//g" | $CUT -d, -f1`
    436                 	dr_device_id=`echo $pair | $SED "s/\"//g" | $CUT -d, -f2`
    437                 	if [ "pci${vendor_id}" = ${dr_vendor_id} -a \
    438 				${device_id} = ${dr_device_id} ]
    439                 	then
    440 
    441 				if [ "X${subsystem_vendor_id}" = "X" ]
    442 				then
    443                        			ids="pci${vendor_id},${device_id}"
    444 				else
    445                        			ids="pci${subsystem_vendor_id},${subsystem_id}"
    446 				fi
    447                         	$SED "{
    448                                 	s/pci-ide/$ids/
    449                                 	s/ide/disk/
    450                                 	s/\/cmdk@.//
    451                                 	}" ${SYSTEM} > "${NVSATA_TMP}/system"
    452 
    453                         	break
    454 			fi
    455         	done
    456 	else
    457 		devname=`echo ${rootdev} | $CUT -d/ -f4- | $SED "{
    458 			s/ide@/disk@/
    459 			s/\/cmdk@.//
    460 			}"`
    461 		is_mapped="no"
    462 		for dev_path in `$LS -l "/dev/dsk" | $GREP ${devname} |$NAWK '{print $11}'`
    463 		do
    464 			ar="/`echo ${dev_path} | ${CUT} -d/ -f4,5`"
    465 			get_properties ${ar}
    466 			for pair in ${DRIVER_ALIASES}
    467 			do
    468 				VENDOR_ID=`echo ${pair} | $SED "s/\"//g" \
    469 					| $CUT -d, -f1`
    470 				DEVICE_ID=`echo ${pair} | $SED "s/\"//g" \
    471 					| $CUT -d, -f2`
    472 
    473 				# Check to see if it is a nv_sata device.
    474 				if [ "pci${vendor_id}" = ${VENDOR_ID} -a \
    475 					${device_id} = ${DEVICE_ID} ]
    476 				then
    477 					if [ "X${subsystem_vendor_id}" = "X" ]
    478 					then
    479 						ids="pci${vendor_id},${device_id}"
    480 					else
    481 						ids="pci${subsystem_vendor_id},${subsystem_id}"
    482 					fi
    483 					
    484 					mapped_rootdev=`echo ${rootdev} | ${SED} "{
    485 						s/pci-ide/${ids}/
    486 						s/ide/disk/
    487 						s/\/cmdk@.//
    488 						}"`		
    489 					$LS -l "/dev/dsk" | $GREP ${mapped_rootdev} >/dev/null
    490 					if [ $? -eq 0 ]
    491 					then
    492 						$SED "{
    493 							s/pci-ide/$ids/
    494 							s/ide/disk/
    495 							s/\/cmdk@.//
    496 							}" ${SYSTEM} > "${NVSATA_TMP}/system"
    497 						is_mapped="yes"	
    498 						break
    499 					fi
    500 				fi
    501 			done
    502 			if [ "${is_mapped}" = "yes" ]
    503 			then
    504 				break
    505 			fi
    506 		done
    507 	fi
    508 	
    509 	if [ -f ${NVSATA_TMP}/system ]
    510 	then
    511 		${CP} ${NVSATA_TMP}/system ${SYSTEM}
    512 		if [ $? -ne 0 ]
    513 		then
    514 			# Failed to modify system file.
    515 			$CP ${BOOTENVRC_BAK} ${BOOTENVRC}
    516 			rem_drv -b ${ROOT} nv_sata
    517 			${RM} -rf ${NVSATA_TMP}
    518 			exit 1
    519 		fi
    520 	fi
    521 }
    522 
    523 #
    524 # Function process_system_for_install() converts rootdev in /etc/system from 
    525 # old ata format to new nv_sata format during the upgrade installation.
    526 #
    527 process_system_for_install() {
    528 
    529         # Check to see if system has ata disk as a root device.
    530 	rootdev_line=`${GREP} -v "*" $SYSTEM | ${GREP} "rootdev:/"| ${GREP} "cmdk@"`
    531         if [ $? -eq 1 ]
    532         then
    533 		# roodev entry does not exist, or root disk is not ata.
    534                 return 0
    535         fi
    536 
    537 	${CP} ${SYSTEM} ${SYSTEM_BAK}
    538 	if [ $? -ne 0 ]
    539 	then
    540 		# Can't backup system file."
    541 		$CP ${BOOTENVRC_BAK} ${BOOTENVRC}
    542 		rem_drv -b ${ROOT} nv_sata
    543 		${RM} -rf ${NVSATA_TMP}
    544 		exit 1
    545 	fi
    546 
    547 	rootdev=`echo ${rootdev_line} | ${CUT} -d: -f2- \
    548 		| $SED "s/\'//g"`
    549 	devname=`echo ${rootdev} | $CUT -d/ -f4- | $SED "{
    550 		s/ide@/disk@/
    551 		s/\/cmdk@.//
    552 		}"`
    553 	is_mapped="no"
    554 	for dev_path in `$LS -l "/dev/dsk" | $GREP ${devname} |$NAWK '{print $11}'`
    555 	do
    556 		arg="/`echo ${dev_path} | ${CUT} -d/ -f4,5`"
    557 		get_properties ${arg}
    558 		for pair in ${DRIVER_ALIASES}
    559 		do
    560 			VENDOR_ID=`echo ${pair} | $SED "s/\"//g" \
    561 				| $CUT -d, -f1`
    562 			DEVICE_ID=`echo ${pair} | $SED "s/\"//g" \
    563 				| $CUT -d, -f2`
    564 
    565 			# Check to see if it is a nv_sata device.
    566 			if [ "pci${vendor_id}" = ${VENDOR_ID} -a \
    567 				${device_id} = ${DEVICE_ID} ]
    568 			then
    569 				if [ "X${subsystem_vendor_id}" = "X" ]
    570 				then
    571 					ids="pci${vendor_id},${device_id}"
    572 				else
    573 					ids="pci${subsystem_vendor_id},${subsystem_id}"
    574 				fi
    575 
    576 				mapped_rootdev=`echo ${rootdev} | ${SED} "{
    577 					s/pci-ide/${ids}/
    578 					s/ide/disk/
    579 					s/\/cmdk@.//
    580 					}"`
    581 				$LS -l "/dev/dsk" | $GREP ${mapped_rootdev} >/dev/null
    582 				if [ $? -eq 0 ]
    583 				then
    584 					$SED "{
    585 						s/pci-ide/$ids/
    586 						s/ide/disk/
    587 						s/\/cmdk@.//
    588 						}" ${SYSTEM} > "${NVSATA_TMP}/system"
    589 						is_mapped="yes"
    590 						break
    591 				fi
    592 			fi
    593 		done
    594 		if [ "${is_mapped}" = "yes" ]
    595 		then
    596 			break
    597 		fi
    598 	done
    599 
    600         if [ -f ${NVSATA_TMP}/system ]
    601         then
    602                 ${CP} ${NVSATA_TMP}/system ${SYSTEM}
    603                 if [ $? -ne 0 ]
    604                 then
    605                         # Failed to modify system file.
    606                         $CP ${BOOTENVRC_BAK} ${BOOTENVRC}
    607                         rem_drv -b ${ROOT} nv_sata
    608                         ${RM} -rf ${NVSATA_TMP}
    609                         exit 1
    610                 fi
    611         fi			
    612 }
    613 
    614 #
    615 # Function process_power_conf_for_lu converts ata device path to nv_sata 
    616 # device path if any for live upgrade.
    617 #
    618 process_power_conf_for_lu() {
    619 
    620 	$GREP -v "#" ${POWER_CONF} | $GREP "cmdk@">/dev/null
    621 	if [ $? -ne 0 ]
    622 	then
    623 		# No ata device entry in power.conf. No conversion is needed.
    624 		return 0
    625 	fi
    626 
    627 	$CP ${POWER_CONF} ${POWER_CONF_BAK}
    628 	if [ $? -ne 0 ]
    629 	then
    630 		# Failed to back up the power.conf file
    631 		$CP ${BOOTENVRC_BAK} ${BOOTENVRC}
    632 		$CP ${SYSTEM_BAK} ${SYSTEM}
    633 		rem_drv -b ${ROOT} nv_sata
    634 		$RM -rf ${NVSATA_TMP}
    635 		exit 1
    636 	fi
    637 
    638 	$GREP "#" ${POWER_CONF} > ${NVSATA_TMP}/power.conf
    639 	$GREP -v "#" ${POWER_CONF} | $GREP -v "cmdk@" \
    640 		>> ${NVSATA_TMP}/power.conf
    641 
    642 	if [ "X${no_nvsata_in_CBE}" != "X0" ]
    643 	then
    644 		$GREP -v "#" ${POWER_CONF} | $GREP "cmdk@" \
    645 			${POWER_CONF} | while read l
    646 		do
    647 			is_mapped="no"
    648 			new_entry=""
    649 			for i in $l
    650 			do
    651 				tp=$i
    652 				echo $i | $GREP "cmdk@" >/dev/dull
    653 				if [ $? -eq 0 ]
    654 				then
    655 			    		a="/`echo $i | ${CUT} -d/ -f2,3`"
    656 			    		get_properties $a
    657 			   
    658 			    		for pair in ${DRIVER_ALIASES}
    659 			    		do
    660 						dr_vendor_id=`echo $pair | $SED "s/\"//g" \
    661 				    			| $CUT -d, -f1`	
    662 						dr_device_id=`echo $pair | $SED "s/\"//g" \
    663 				    			| $CUT -d, -f2`
    664 						if [ "pci${vendor_id}" = ${dr_vendor_id} -a \
    665 				    			${device_id} = ${dr_device_id} ]
    666 						then
    667 				    			if [ "X${subsystem_vendor_id}" = "X" ]
    668 				    			then
    669                        						is="pci${vendor_id},${device_id}"
    670 				    			else
    671                        						is="pci${subsystem_vendor_id},${subsystem_id}"
    672 				    			fi
    673 				    			tp=`echo $i | $SED "{
    674 								s/pci-ide/$is/
    675 								s/ide/disk/
    676 								s/\/cmdk@.//
    677 								}"`
    678 							if [ "${is_mapped}" = "no" ]
    679 							then
    680 								is_mapped="yes"
    681 							fi
    682 				    			break
    683 						fi
    684 			    		done
    685 				fi
    686 				new_entry="${new_entry}$tp "
    687 			done		
    688 			if [ "${is_mapped}" = "yes" ]
    689 			then
    690 				echo ${new_entry} >> ${NVSATA_TMP}/mapped_power.conf
    691 			else
    692 				echo ${new_entry} >> ${NVSATA_TMP}/power.conf
    693 			fi
    694 		done 
    695 	else
    696         	$GREP -v "#" ${POWER_CONF} | $GREP "cmdk@" ${POWER_CONF} \
    697 			| while read l
    698         	do
    699 			is_mapped="no"
    700                 	new_entry=""
    701                 	for i in $l
    702                 	do
    703                         	tp=$i
    704                         	echo $i | $GREP "cmdk@" >/dev/dull
    705                         	if [ $? -eq 0 ]
    706                         	then
    707                                 	dn=`echo $i | $CUT -d/ -f4- | $SED "{
    708                                         	s/ide@/disk@/
    709                                         	s/\/cmdk@.//
    710                                         	}"`
    711                                 	for x in `$LS -l /dev/dsk | $GREP $dn \
    712                                         	| $NAWK '{print $11}'`
    713                                 	do
    714                                         	np=""
    715                                         	a="/`echo ${x} | ${CUT} -d/ -f4,5`"
    716                                         	get_properties $a
    717                                         	for pair in ${DRIVER_ALIASES}
    718                                         	do
    719                                             		VENDOR_ID=`echo ${pair} | $SED "s/\"//g" \
    720                                                 		| $CUT -d, -f1`
    721                                             		DEVICE_ID=`echo ${pair} | $SED "s/\"//g" \
    722                                                 		| $CUT -d, -f2`
    723                                             		if [ "pci${vendor_id}" = ${VENDOR_ID} -a \
    724                                                 		${device_id} = ${DEVICE_ID} ]
    725                                             		then
    726                                                 		if [ "X${subsystem_vendor_id}" = "X" ]
    727                                                 		then
    728                                                     			is="pci${vendor_id},${device_id}"
    729                                                 		else
    730                                                     			is="pci${subsystem_vendor_id},${subsystem_id}"
    731                                                 		fi
    732                                                 		mapped_path=`echo $i | ${SED} "{
    733                                                         		s/pci-ide/${is}/
    734                                                         		s/ide/disk/
    735                                                         		s/\/cmdk@.//
    736                                                         		}"`
    737                                                 		np="/`echo ${x} | $CUT -d/ -f4- \
    738                                                         		| $CUT -d: -f1`"
    739                                                 		if [ ${np} = ${mapped_path} ]
    740                                                 		then
    741                                                         		tp=${mapped_path}
    742 									if [ "${is_mapped}" = "no" ]
    743 									then
    744 										is_mapped="yes"
    745 									fi	
    746                                                         		break
    747 								fi
    748                                             		fi
    749                                         	done
    750 
    751                                         	if [ "${is_mapped}" = "yes" ]
    752                                         	then
    753                                                 	break
    754                                         	fi
    755                                 	done
    756                         	fi
    757                         	new_entry="${new_entry}$tp "
    758                 	done
    759 			if [ "${is_mapped}" = "yes" ]
    760 			then
    761                 		echo ${new_entry} >> ${NVSATA_TMP}/mapped_power.conf
    762 			else
    763 				echo ${new_entry} >> ${NVSATA_TMP}/power.conf
    764 			fi	
    765         	done
    766 	fi
    767 
    768 	if [ -f ${NVSATA_TMP}/mapped_power.conf ]
    769 	then
    770 		$CAT ${NVSATA_TMP}/mapped_power.conf >> ${NVSATA_TMP}/power.conf
    771 		$CP ${NVSATA_TMP}/power.conf ${POWER_CONF}
    772 		if [ $? -ne 0 ]
    773 		then
    774 			$CP ${BOOTENVRC_BAK} ${BOOTENVRC}
    775 			$CP ${SYSTEM_BAK} ${SYSTEM}
    776 			rem_drv -b ${ROOT} nv_sata
    777 			$RM -rf ${NVSATA_TMP}
    778 			exit 1
    779 		fi
    780 	fi
    781 }
    782 
    783 #
    784 # Function process_power_conf_for_install converts ata device path to nv_sata 
    785 # device path if any for normal upgrade installation.
    786 #
    787 process_power_conf_for_install() {
    788 
    789 	$GREP -v "#" ${POWER_CONF} | $GREP "cmdk@" >/dev/null
    790         if [ $? -ne 0 ]
    791         then
    792                 # No ata device entry in power.conf. No conversion is needed.
    793                 return 0
    794         fi
    795 
    796         $CP ${POWER_CONF} ${POWER_CONF_BAK}
    797         if [ $? -ne 0 ]
    798         then
    799 		# Failed to back up the power.conf file.
    800 		$CP ${BOOTENVRC_BAK} ${BOOTENVRC}
    801 		$CP ${SYSTEM_BAK} ${SYSTEM}
    802 		rem_drv -b ${ROOT} nv_sata
    803         	$RM -rf ${NVSATA_TMP}
    804                 exit 1
    805         fi
    806 
    807 	$GREP "#" ${POWER_CONF} > ${NVSATA_TMP}/power.conf
    808 	$GREP -v "#" ${POWER_CONF} | $GREP -v "cmdk@" \
    809 		>> ${NVSATA_TMP}/power.conf
    810 
    811 	$GREP -v "#" ${POWER_CONF} | $GREP "cmdk@" ${POWER_CONF} | while read l
    812         do
    813 		is_mapped="no"
    814 		new_entry=""
    815 		for i in $l
    816 		do
    817 			tp=$i
    818 			echo $i | $GREP "cmdk@" >/dev/dull
    819 			if [ $? -eq 0 ]
    820 			then
    821 				dn=`echo $i | $CUT -d/ -f4- | $SED "{
    822 					s/ide@/disk@/
    823 					s/\/cmdk@.//
    824 					s/\'//g
    825 					}"`
    826 				for x in `$LS -l /dev/dsk | $GREP $dn \
    827 					| $NAWK '{print $11}'`
    828 				do
    829 					np=""
    830 					a="/`echo ${x} | ${CUT} -d/ -f4,5`"
    831 					get_properties $a
    832 
    833 					for pair in ${DRIVER_ALIASES}
    834 					do
    835 					    VENDOR_ID=`echo ${pair} | $SED "s/\"//g" \
    836 						| $CUT -d, -f1`
    837 					    DEVICE_ID=`echo ${pair} | $SED "s/\"//g" \
    838 						| $CUT -d, -f2`
    839 					    if [ "pci${vendor_id}" = ${VENDOR_ID} -a \
    840 						${device_id} = ${DEVICE_ID} ]
    841 					    then
    842 				    		if [ "X${subsystem_vendor_id}" = "X" ]
    843 				    		then
    844                        				    is="pci${vendor_id},${device_id}"
    845 				    		else
    846                        				    is="pci${subsystem_vendor_id},${subsystem_id}"
    847 				    		fi
    848 						mapped_path=`echo $i | ${SED} "{
    849 							s/pci-ide/${is}/
    850 							s/ide/disk/
    851 							s/\/cmdk@.//
    852 							}"`
    853 						np="/`echo ${x} | $CUT -d/ -f4- \
    854 							| $CUT -d: -f1`"
    855 						if [ ${np} = ${mapped_path} ]
    856 						then
    857 							tp=${mapped_path}	
    858 							if [ "${is_mapped}" = "no" ]
    859 							then
    860 								is_mapped="yes"
    861 							fi
    862 							break
    863 						fi
    864 					    fi
    865 					done
    866 					
    867 					if [ "${is_mapped}" = "yes" ]
    868 					then
    869 						break
    870 					fi
    871 				done
    872 			fi
    873 			new_entry="${new_entry}$tp "
    874                 done
    875 		if [ "${is_mapped}" = "yes" ]
    876 		then
    877 			echo ${new_entry} >> ${NVSATA_TMP}/mapped_power.conf
    878 		else
    879 			echo ${new_entry} >> ${NVSATA_TMP}/power.conf
    880 		fi
    881         done
    882 
    883 	if [ -f ${NVSATA_TMP}/mapped_power.conf ]
    884 	then
    885 		$CAT ${NVSATA_TMP}/mapped_power.conf >> ${NVSATA_TMP}/power.conf
    886         	$CP ${NVSATA_TMP}/power.conf ${POWER_CONF}
    887         	if [ $? -ne 0 ]
    888         	then
    889 			$CP ${BOOTENVRC_BAK} ${BOOTENVRC}
    890 			$CP ${SYSTEM_BAK} ${SYSTEM}
    891 			rem_drv -b ${ROOT} nv_sata
    892                 	$RM -rf ${NVSATA_TMP}
    893                 	exit 1
    894         	fi
    895 	fi
    896 }
    897 
    898 #
    899 # Function process_devlink_for_lu() links all old ata logical device names
    900 # to new physical device paths on upgraded BE.
    901 #
    902 process_devlink_for_lu() {
    903 
    904         $LS -l "${ROOT}/dev/dsk" | $GREP "cmdk@" | while read line1
    905         do
    906                 logical_disk=`echo $line1 | $NAWK '{print $9}'`
    907                 old_path=`echo $line1 | $NAWK '{print $11}'`
    908 		mapped_new_path=""
    909 		if [ "X${no_nvsata_in_CBE}" != "X0" ]
    910 		then
    911                 	arg2="/`echo ${old_path} | ${CUT} -d/ -f4,5`"
    912                 	get_properties ${arg2}
    913 
    914                 	for pair in ${DRIVER_ALIASES}
    915                 	do
    916                         	VENDOR_ID=`echo ${pair} | $SED "s/\"//g" \
    917                                 	| $CUT -d, -f1`
    918                         	DEVICE_ID=`echo ${pair} | $SED "s/\"//g" \
    919                                 	| $CUT -d, -f2`
    920                         	# Check to see if it is a nv_sata device.
    921                         	if [ "pci${vendor_id}" = ${VENDOR_ID} -a \
    922 					${device_id} = ${DEVICE_ID} ]
    923                         	then
    924 					if [ "X${subsystem_vendor_id}" = "X" ]
    925 					then
    926                         	    	    ids3="pci${vendor_id},${device_id}"
    927 					else
    928                         	    	    ids3="pci${subsystem_vendor_id},${subsystem_id}"
    929 					fi
    930 					mapped_new_path=`echo ${old_path} | ${SED} "{
    931 						s/pci-ide/${ids3}/
    932 						s/ide/disk/
    933 						s/\/cmdk@.//
    934 						 }"`
    935 					break
    936 				fi
    937 			done
    938 		else
    939 			devname=`echo ${old_path} | $CUT -d/ -f6- | $SED "{
    940 				s/ide@/disk@/
    941 				s/\/cmdk@.//
    942 				}"`
    943 			is_mapped="no"
    944 			for new_path in `$LS -l "/dev/dsk" | $GREP ${devname} | $NAWK '{print $11}'`
    945 			do
    946 				arg2="/`echo ${new_path} | ${CUT} -d/ -f4,5`"
    947 				get_properties ${arg2}
    948 				for pair in ${DRIVER_ALIASES}
    949 				do
    950 					VENDOR_ID=`echo ${pair} | $SED "s/\"//g" \
    951 						| $CUT -d, -f1`
    952 					DEVICE_ID=`echo ${pair} | $SED "s/\"//g" \
    953 						| $CUT -d, -f2`
    954 					
    955 					# Check to see if it is a nv_sata device.
    956 					if [ "pci${vendor_id}" = ${VENDOR_ID} -a \
    957 						${device_id} = ${DEVICE_ID} ]
    958 					then
    959 						if [ "X${subsystem_vendor_id}" = "X" ]
    960 						then
    961 						    ids3="pci${vendor_id},${device_id}"
    962 						else
    963 						    ids3="pci${subsystem_vendor_id},${subsystem_id}"
    964 						fi
    965 						mapped_new_path=`echo ${old_path} | ${SED} "{
    966 							s/pci-ide/${ids3}/
    967 							s/ide/disk/
    968 							s/\/cmdk@.//
    969 							}"`
    970 						if [ ${new_path} = ${mapped_new_path} ]
    971 						then
    972 							is_mapped="yes"
    973 							break
    974 						fi
    975 					fi
    976 				done
    977 				if [ "${is_mapped}" = "yes" ]
    978 				then
    979 					break
    980 				fi
    981 			done
    982 		fi
    983 						
    984 		if [ "X${mapped_new_path}" != "X" ]
    985 		then
    986 			cd ${ROOT}/dev/dsk
    987 			${MV} ${logical_disk} ${logical_disk}.${BAK}
    988 			if [ $? -ne 0 ]
    989 			then
    990 				# Can't back up old link.
    991 				$CP ${BOOTENVRC_BAK} ${BOOTENVRC}
    992 				$CP ${SYSTEM_BAK} ${SYSTEM}
    993 				$CP ${POWER_CONF_BAK} ${POWER_CONF}
    994 				rem_drv -b ${ROOT} nv_sata
    995                        		${RM} -rf ${NVSATA_TMP}
    996                        		exit 1
    997                         fi
    998 
    999 			${LN} -s ${mapped_new_path} ${logical_disk}
   1000 			if [ $? -ne 0 ]
   1001 			then
   1002 				# Can't create symbolic link
   1003 				${MV} ${logical_disk}.${BAK} ${logical_disk}
   1004                                	$CP ${BOOTENVRC_BAK} ${BOOTENVRC}
   1005 				$CP ${SYSTEM_BAK} ${SYSTEM}
   1006 				$CP ${POWER_CONF_BAK} ${POWER_CONF}
   1007 				rem_drv -b ${ROOT} nv_sata
   1008                                 ${RM} -rf ${NVSATA_TMP}
   1009                                	exit 1
   1010 			fi
   1011 				
   1012 			c_number="dsk/`echo ${logical_disk} | $CUT -d'd' -f1`"
   1013 			$GREP ${c_number} ${ENUMERATE_RESERVED} >/dev/null
   1014 			if [ $? -ne 0 ]
   1015 			then
   1016 				echo ${c_number} >> ${ENUMERATE_RESERVED}
   1017 			fi
   1018 
   1019 			cd ../rdsk
   1020 			mapped_new_path="${mapped_new_path},raw"
   1021 			${MV} ${logical_disk} ${logical_disk}.${BAK}
   1022 			if [ $? -ne 0 ]
   1023 			then
   1024                               	# Can't back up old link.
   1025                                	${RM} ../dsk/${logical_disk}
   1026                                	${MV} ../dsk/${logical_disk}.${BAK} \
   1027 					../dsk/${logical_disk}
   1028                                	$CP ${BOOTENVRC_BAK} ${BOOTENVRC}
   1029 				$CP ${SYSTEM_BAK} ${SYSTEM}
   1030 				$CP ${POWER_CONF_BAK} ${POWER_CONF}
   1031 				rem_drv -b ${ROOT} nv_sata
   1032                                	${RM} -rf ${NVSATA_TMP}
   1033                                	exit 1
   1034 			fi
   1035 
   1036 			${LN} -s ${mapped_new_path} ${logical_disk}
   1037 			if [ $? -ne 0 ]
   1038 			then
   1039 				# Can't create symbolic link.
   1040                                	${MV} ${logical_disk}.${BAK} ${logical_disk}
   1041                                	${RM} ../dsk/${logical_disk}
   1042                                	${MV} ../dsk/${logical_disk}.${BAK} \
   1043                                        	../dsk/${logical_disk}
   1044                                	$CP ${BOOTENVRC_BAK} ${BOOTENVRC}
   1045 				$CP ${SYSTEM_BAK} ${SYSTEM}
   1046 				$CP ${POWER_CONF_BAK} ${POWER_CONF}
   1047 				rem_drv -b ${ROOT} nv_sata
   1048                                	${RM} -rf ${NVSATA_TMP}
   1049                                	exit 1
   1050 			fi
   1051                	fi
   1052         done
   1053 
   1054 	$GREP "^dsk" ${ENUMERATE_RESERVED} >/dev/null
   1055 	if [ $? -eq 0 ]
   1056         then
   1057                 $RM ${DEVLINK_DB}       
   1058         fi
   1059 }
   1060 
   1061 #
   1062 # Function process_devlink_for_install() links all old ata logical device names
   1063 # to new physical device paths for normal upgrade installation.
   1064 #
   1065 process_devlink_for_install() {
   1066 
   1067         $LS -l "${ROOT}/dev/dsk" | $GREP "cmdk@" | while read line1
   1068         do
   1069                 logical_disk=`echo $line1 | $NAWK '{print $9}'`
   1070 		old_path=`echo $line1 | $NAWK '{print $11}' \
   1071 			| $SED "s/\'//g"`
   1072 		devname=`echo ${old_path} | $CUT -d/ -f6- | $SED "{
   1073 			s/ide@/disk@/
   1074 			s/\/cmdk@.//
   1075 			 }"`
   1076                 $LS -l "/dev/dsk" | $GREP ${devname} | while read line2
   1077                 do
   1078                         new_path=`echo $line2 | $NAWK '{print $11}'`
   1079                         arg2="/`echo ${new_path} | ${CUT} -d/ -f4,5`"
   1080                         get_properties ${arg2}
   1081 
   1082 			for pair in ${DRIVER_ALIASES}
   1083                         do
   1084                                 VENDOR_ID=`echo ${pair} | $SED "s/\"//g"\
   1085                                         | $CUT -d, -f1`
   1086                                 DEVICE_ID=`echo ${pair} | $SED "s/\"//g" \
   1087                                         | $CUT -d, -f2`
   1088 
   1089                                 # Check to see if it is a nv_sata device.
   1090                                 if [ "pci${vendor_id}" = ${VENDOR_ID} -a \
   1091                                         ${device_id} = ${DEVICE_ID} ]
   1092                                 then
   1093 					if [ "X${subsystem_vendor_id}" = "X" ]
   1094 					then
   1095                         		    ids3="pci${vendor_id},${device_id}"
   1096 					else
   1097                         		    ids3="pci${subsystem_vendor_id},${subsystem_id}"
   1098 					fi
   1099                                         mapped_new_path=`echo ${old_path} | ${SED} "{
   1100                                                 s/pci-ide/${ids3}/
   1101                                                 s/ide/disk/
   1102                                                 s/\/cmdk@.//
   1103                                                 }"`
   1104                                         if [ ${new_path} = ${mapped_new_path} ]
   1105                                         then
   1106                                                 # Found the match.
   1107                                                 cd ${ROOT}/dev/dsk
   1108                                                 ${MV} ${logical_disk} ${logical_disk}.${BAK}
   1109                                                 if [ $? -ne 0 ]
   1110                                                 then
   1111                                                         # Can't back up old link.
   1112                                                         $CP ${BOOTENVRC_BAK} ${BOOTENVRC}
   1113 							$CP ${SYSTEM_BAK} ${SYSTEM}
   1114 							$CP ${POWER_CONF_BAK} ${POWER_CONF}
   1115 							rem_drv -b ${ROOT} nv_sata
   1116                                                         ${RM} -rf ${NVSATA_TMP}
   1117                                                         exit 1
   1118                                                 fi
   1119 
   1120                                                 ${LN} -s ${mapped_new_path} ${logical_disk}
   1121                                                 if [ $? -ne 0 ]
   1122                                                 then
   1123                                                         # Can't create symbolic link
   1124                                                         ${MV} ${logical_disk}.${BAK} ${logical_disk}
   1125                                                         $CP ${BOOTENVRC_BAK} ${BOOTENVRC}
   1126 							$CP ${SYSTEM_BAK} ${SYSTEM}
   1127 							$CP ${POWER_CONF_BAK} ${POWER_CONF}
   1128 							rem_drv -b ${ROOT} nv_sata
   1129                                                         ${RM} -rf ${NVSATA_TMP}
   1130                                                         exit 1
   1131                                                 fi
   1132 						
   1133 						c_number="dsk/`echo ${logical_disk} \
   1134 							| $CUT -d'd' -f1`"
   1135 						$GREP ${c_number} ${ENUMERATE_RESERVED} >/dev/null
   1136 						if [ $? -ne 0 ]
   1137 						then
   1138 							echo ${c_number} >> ${ENUMERATE_RESERVED}
   1139 						fi
   1140 
   1141                                                 cd ../rdsk
   1142                                                 mapped_new_path="${mapped_new_path},raw"
   1143                                                 ${MV} ${logical_disk} ${logical_disk}.${BAK}
   1144                                                 if [ $? -ne 0 ]
   1145                                                 then
   1146                                                         # Can't back up old link.
   1147                                                         ${RM} ../dsk/${logical_disk}
   1148                                                         ${MV} ../dsk/${logical_disk}.${BAK} \
   1149                                                                 ../dsk/${logical_disk}
   1150                                                         $CP ${BOOTENVRC_BAK} ${BOOTENVRC}
   1151 							$CP ${SYSTEM_BAK} ${SYSTEM}
   1152 							$CP ${POWER_CONF_BAK} ${POWER_CONF}
   1153 							rem_drv -b ${ROOT} nv_sata
   1154                                                         ${RM} -rf ${NVSATA_TMP}
   1155                                                         exit 1
   1156                                                 fi
   1157 
   1158                                                 ${LN} -s ${mapped_new_path} ${logical_disk}
   1159                                                 if [ $? -ne 0 ]
   1160                                                 then
   1161                                                         # Can't create symbolic link.
   1162                                                         ${MV} ${logical_disk}.${BAK} ${logical_disk}
   1163                                                         ${RM} ../dsk/${logical_disk}
   1164                                                         ${MV} ../dsk/${logical_disk}.${BAK} \
   1165                                                                 ../dsk/${logical_disk}
   1166                                                         $CP ${BOOTENVRC_BAK} ${BOOTENVRC}
   1167 							$CP ${SYSTEM_BAK} ${SYSTEM}
   1168 							$CP ${POWER_CONF_BAK} ${POWER_CONF}
   1169 							rem_drv -b ${ROOT} nv_sata
   1170                                                         ${RM} -rf ${NVSATA_TMP}
   1171                                                         exit 1
   1172                                                 fi
   1173                                         fi
   1174                                 fi
   1175                         done
   1176                 done
   1177         done
   1178 	
   1179 	$GREP "^dsk" ${ENUMERATE_RESERVED} >/dev/null
   1180 	if [ $? -eq 0 ]
   1181 	then
   1182 		$RM ${DEVLINK_DB}	
   1183 	fi
   1184 }
   1185 
   1186 clean_up() {
   1187 
   1188         ${RM} -rf ${NVSATA_TMP}
   1189         $LS -l "${ROOT}/dev/dsk" | $GREP "disk@" | while read line
   1190         do
   1191                 logical_disk=`echo $line | $NAWK '{print $9}'`
   1192                 cd ${ROOT}/dev/dsk
   1193                 ${RM} -f ${logical_disk}.${BAK}
   1194 
   1195                 cd ../rdsk
   1196                 ${RM} -f ${logical_disk}.${BAK}
   1197         done
   1198 }
   1199 
   1200 # Function: check_add_drv()
   1201 #
   1202 # This function will check if the module has an entry in etc/name_to_major
   1203 # If not simply calls add_drv with the arguments given. If there is
   1204 # such an entry in name_to_major file, it adds entries in driver_aliases
   1205 # driver_classes and minor_perm if necessary.
   1206 # The syntax of this function is the same as add_drv. 
   1207 
   1208 check_add_drv()
   1209 {
   1210 	if [ "$BASEDIR" = "" ]
   1211 	then
   1212 		BASEDIR=/  
   1213 	fi
   1214 	alias=""
   1215 	class=""
   1216 	ADD_ALIAS=0
   1217 	ADD_CLASS=0
   1218 	ADD_MINOR=0
   1219 	OPTIND=1
   1220 	IS_NET_DRIVER=0
   1221 
   1222 	cmd="add_drv"
   1223 
   1224 	NO_CMD=
   1225 	while getopts i:b:m:c:N  opt
   1226 	do
   1227 		case $opt in
   1228 			N )	NO_CMD=1;;
   1229 			i )	ADD_ALIAS=1	
   1230 				alias=$OPTARG
   1231 				cmd=$cmd" -i '$alias'"
   1232 				;;
   1233 			m )	ADD_MINOR=1
   1234 				minor=$OPTARG
   1235 				cmd=$cmd" -m '$minor'"
   1236 				;;
   1237 			c)	ADD_CLASS=1
   1238 				class=$OPTARG
   1239 				cmd=$cmd" -c $class"
   1240 				;;
   1241 			b)	BASEDIR=$OPTARG
   1242 				cmd=$cmd" -b $BASEDIR"
   1243 				;;
   1244 			\?) 	echo "check_add_drv can not handle this option"
   1245 				return
   1246 				;;
   1247 			esac
   1248 	done 
   1249 	shift `/usr/bin/expr $OPTIND - 1`
   1250 	
   1251 	drvname=$1
   1252 
   1253 	cmd=$cmd" "$drvname
   1254 
   1255 	drvname=`echo $drvname | /usr/bin/sed 's;.*/;;g'`
   1256 
   1257 	/usr/bin/grep "^$drvname[ 	]" ${ROOT}/etc/name_to_major >  /dev/null 2>&1
   1258 
   1259 	if [ "$NO_CMD" = "" -a $? -ne 0 ] 
   1260 	then
   1261 		eval $cmd
   1262 	else	
   1263 		# entry already in name_to_major, add alias, class, minorperm
   1264 		# if necessary
   1265 		if [ $ADD_ALIAS = 1 ]	
   1266 		then
   1267 			for i in $alias
   1268 			do
   1269 				/usr/bin/egrep "^$drvname[ 	]+$i" ${ROOT}/etc/driver_aliases>/dev/null 2>&1
   1270 				if [ $? -ne 0 ]
   1271 				then
   1272 					echo "$drvname $i" >> ${ROOT}/etc/driver_aliases	
   1273 				fi
   1274 			done
   1275 		fi
   1276 
   1277 		if [ $ADD_CLASS = 1 ]
   1278 		then
   1279 			/usr/bin/egrep "^$drvname[ 	]+$class( |	|$)" ${ROOT}/etc/driver_classes > /dev/null 2>&1
   1280 			if [ $? -ne 0 ]
   1281 			then 
   1282 				echo "$drvname\t$class" >> ${ROOT}/etc/driver_classes
   1283 			fi
   1284 		fi
   1285 
   1286 		if [ $ADD_MINOR = 1 ]
   1287 		then
   1288 			/usr/bin/grep "^$drvname:" ${ROOT}/etc/minor_perm > /dev/null 2>&1
   1289 			if [ $? -ne 0 ]
   1290 			then 
   1291 				minorentry="$drvname:$minor"
   1292 				echo $minorentry >> ${ROOT}/etc/minor_perm
   1293 			fi
   1294 		fi
   1295 
   1296 	fi
   1297 }
   1298 
   1299 #
   1300 # Main program starts here.
   1301 #
   1302 check_add_drv -b ${ROOT} -i '"pci10de,37f" "pci10de,55" "pci10de,54" "pci10de,266" "pci10de,267"' -m '* 0644 root sys' -c scsi-self-identifying nv_sata
   1303 
   1304 #
   1305 # Create temporary directory for node migration 
   1306 #
   1307 if [ ! -d ${NVSATA_TMP} ]
   1308 then
   1309         ${MKDIR} ${NVSATA_TMP}
   1310         if [ $? -ne 0 ]
   1311         then
   1312                 # Failed to create ${NVSATA_TMP} directory.
   1313                 exit 1
   1314         fi
   1315 fi
   1316 
   1317 #
   1318 # If it is an install, do nothing. If it is an upgrade, do the conversion.
   1319 #
   1320 line=`$MOUNT | $GREP "/ "`
   1321 first_field=`echo $line | $NAWK '{print $1}'`
   1322 third_field=`echo $line | $NAWK '{print $3}'`
   1323 echo ${third_field} |$GREP "ramdisk:a" > /dev/null
   1324 
   1325 if [ ${first_field} = "/" -a $? -eq 0 ]
   1326 then
   1327 	# It is either an install/upgrade.
   1328 	if [ -f ${UPGRADE_LOG} ]
   1329 	then
   1330 		# It is an upgrade.
   1331 		$GREP ${NV_SATA} ${PATH_TO_INST} > /dev/null
   1332 		if [ $? -eq 0 ]
   1333 		then
   1334 			# The system was running nv_sata before the upgrade.
   1335 			$RM -rf ${NVSATA_TMP}
   1336 			exit 0
   1337 		fi
   1338 
   1339 		process_bootenvrc_for_install
   1340 		process_system_for_install
   1341 		process_power_conf_for_install
   1342 		process_devlink_for_install
   1343 		clean_up
   1344 		exit 0
   1345 	fi
   1346 	$RM -rf ${NVSATA_TMP}
   1347 	exit 0
   1348 fi
   1349 
   1350 #
   1351 # Liveupgrade. 
   1352 #
   1353 if [ -f ${LIVEUPGRADE_TMP_LOG} ]
   1354 then
   1355 	$GREP ${NV_SATA} /etc/driver_aliases >/dev/null
   1356 	no_nvsata_in_CBE=$?
   1357 	$GREP ${NV_SATA} ${PATH_TO_INST} > /dev/null
   1358 	if [ $? -eq 0 ]
   1359 	then
   1360 		# Target BE was running nv_sata driver before the upgrade.
   1361 		$RM -rf ${NVSATA_TMP}
   1362 		exit 0
   1363 	fi	
   1364 	process_bootenvrc_for_lu
   1365 	process_system_for_lu
   1366 	process_power_conf_for_lu
   1367 	process_devlink_for_lu
   1368 	clean_up
   1369 	touch ${ROOT}/reconfigure
   1370 	exit 0
   1371 fi
   1372 
   1373 #
   1374 # Pkgadd.
   1375 #
   1376 $RM -rf ${NVSATA_TMP}
   1377 exit 0
   1378