usr/src/pkgdefs/SUNWnvsata/postinstall
changeset 4876 ecd69ba0713a
child 5278 43e9b8e1ada5
equal deleted inserted replaced
4875:4ae54dfe2667 4876:ecd69ba0713a
       
     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 2007 Sun Microsystems, Inc.  All rights reserved.
       
    25 # Use is subject to license terms.
       
    26 
       
    27 # ident	"%Z%%M%	%I%	%E% SMI"
       
    28 
       
    29 ROOT=${PKG_INSTALL_ROOT:-/}
       
    30 SYSTEM=${ROOT}/etc/system
       
    31 BOOTENVRC=${ROOT}/boot/solaris/bootenv.rc
       
    32 PATH_TO_INST=${ROOT}/etc/path_to_inst
       
    33 POWER_CONF=${ROOT}/etc/power.conf
       
    34 BAK=bak
       
    35 TMP=/tmp
       
    36 NV_SATA=nv_sata
       
    37 NVSATA_TMP=$TMP/${NV_SATA}
       
    38 SYSTEM_BAK=${NVSATA_TMP}/system.${BAK}
       
    39 BOOTENVRC_BAK=${NVSATA_TMP}/bootenv.rc.${BAK}
       
    40 POWER_CONF_BAK=${NVSATA_TMP}/power.conf.${BAK}
       
    41 UPGRADE_LOG=${ROOT}/var/sadm/system/logs/upgrade_log
       
    42 LIVEUPGRADE_TMP_LOG=$TMP/.luupgrade.pfinstall.log.*
       
    43 DEVMAP_TABLE=${TMP}/devmap_table
       
    44 DRIVER_ALIASES='"pci10de,37f" "pci10de,55" "pci10de,54"'
       
    45 ETC_DEV_DIR=${ROOT}/etc/dev
       
    46 ENUMERATE_RESERVED=${ETC_DEV_DIR}/reserved_devnames
       
    47 DEVLINK_DB=${ETC_DEV_DIR}/.devlink_db
       
    48 
       
    49 CP=/usr/bin/cp
       
    50 MV=/usr/bin/mv
       
    51 LN=/usr/bin/ln
       
    52 LS=/usr/bin/ls
       
    53 GREP=/usr/bin/grep
       
    54 SED=/usr/bin/sed
       
    55 CUT=/usr/bin/cut
       
    56 CAT=/usr/bin/cat
       
    57 NAWK=/usr/bin/nawk
       
    58 RM=/usr/bin/rm
       
    59 MKDIR=/usr/bin/mkdir
       
    60 MOUNT=/usr/sbin/mount
       
    61 MODINFO=/usr/sbin/modinfo
       
    62 PRTCONF=/etc/prtconf
       
    63 PRTCONF_OUT=${NVSATA_TMP}/prtconf_vp.out
       
    64 DEV_PROPS=${NVSATA_TMP}/dev_props.out
       
    65 
       
    66 #
       
    67 # get_devinfo_prop(file, prop)
       
    68 #
       
    69 #   <prtconf.out> file that has output from 'prtconf -vp' command
       
    70 #   <prop>  name of the property OR "ALL" for all properties
       
    71 #
       
    72 # parse the output of prtconf command and print the value of
       
    73 # of the specified property or all if <prop> is "ALL" in
       
    74 # the format "<name>=<value>".
       
    75 #
       
    76 get_devinfo_prop()
       
    77 {
       
    78     /bin/cat $1 | ${NAWK} -v prop=$2 '
       
    79 	BEGIN {
       
    80 		if (match(prop,"ALL"))
       
    81 			check_all=1;
       
    82 		else
       
    83 			check_all=0;
       
    84 	}
       
    85 	{
       
    86 		if (!match($1, "name="))
       
    87 			next;
       
    88 		if (!check_all) {
       
    89 			pname = sprintf("name=\047%s\047", prop);
       
    90 			if (!match($1, pname))
       
    91 				next;
       
    92 		}
       
    93 		gsub("\047", "", $1);
       
    94 		name = substr($1, index($1,"=")+1);
       
    95 		if (match($2, "type=boolean")) {
       
    96 			value=1;
       
    97 		} else if (match($2, "type=int") || match($2, "type=byte")) {
       
    98 			getline;
       
    99 			value = ""
       
   100 			cnt = split(substr($0,index($0, "=")+1), words, ".");
       
   101 			for (i = 1; i <= cnt; i++) {
       
   102 				w = "0x" skipzeros(words[i]);
       
   103 				if (i > 1)
       
   104 					value = value " ";
       
   105 				value = value w;
       
   106 			}
       
   107 		} else {
       
   108 			getline;
       
   109 			value = substr($0,index($0, "=")+1);
       
   110 		} 
       
   111 		if (!check_all) {
       
   112 			print value;
       
   113 			exit (0);
       
   114 		}
       
   115 		print name "=" value;
       
   116 	}
       
   117 	# skp the leading '0' characters in the string
       
   118 	function skipzeros (str, out, n, i)
       
   119 	{
       
   120 		n = length(str);
       
   121 		for (i = 1; i <= n; i++) {
       
   122 			if (!match(substr(str, i, 1), "0")) {
       
   123 				break;
       
   124 			}
       
   125 		}
       
   126 		if (i > n)
       
   127 			out=substr(str,n);
       
   128 		else
       
   129 			out=substr(str,i);
       
   130 		return (out);
       
   131 	}'
       
   132 }
       
   133 
       
   134 #
       
   135 # Function get_properties() gets the following properties for the
       
   136 # device (i.e /devices path without '/devices' prefix) passed as
       
   137 # an argument:
       
   138 #
       
   139 #	vendor-id
       
   140 #	device-id
       
   141 #	subsystem-vendor-id
       
   142 #	subsystem-id
       
   143 #
       
   144 # Note: it saves the pathname and the properties in ${DEV_PROPS} file 
       
   145 # to optimize subsequent mapping calls for the same path name.
       
   146 #
       
   147 # e.g: get_properties "/pci@0,0/pci-ide@1f,2"
       
   148 #
       
   149 get_properties()
       
   150 {
       
   151     if [ -f ${DEV_PROPS} ]
       
   152     then
       
   153 	mapped_path=`${GREP} $1 ${DEV_PROPS}`
       
   154 	if [ $? -eq 0 ]
       
   155 	then
       
   156 		vendor_id=`echo ${mapped_path} | ${CUT} -d ' ' -f2` 
       
   157 		device_id=`echo ${mapped_path} | ${CUT} -d ' ' -f3` 
       
   158 		subsystem_vendor_id=`echo ${mapped_path} | ${CUT} -d ' ' -f4` 
       
   159 		subsystem_id=`echo ${mapped_path} | ${CUT} -d ' ' -f5` 
       
   160 		return;
       
   161 	fi
       
   162     fi
       
   163 
       
   164     path=`echo $1|${GREP} -v storage`
       
   165     ${PRTCONF} -vp "/devices"$path >${PRTCONF_OUT}
       
   166     if [ $? -eq 0 ]
       
   167     then
       
   168 	vendor_id=`get_devinfo_prop ${PRTCONF_OUT} "vendor-id" | ${SED} "s/^0x//"`
       
   169 	device_id=`get_devinfo_prop ${PRTCONF_OUT} "device-id" | ${SED} "s/^0x//"`
       
   170 	subsystem_vendor_id=`get_devinfo_prop ${PRTCONF_OUT} "subsystem-vendor-id" | ${SED} "s/^0x//"`
       
   171 	subsystem_id=`get_devinfo_prop ${PRTCONF_OUT} "subsystem-id" | ${SED} "s/^0x//"`
       
   172 	rm -f ${PRTCONF_OUT}
       
   173 	echo $1 "$vendor_id" "$device_id" "$subsystem_vendor_id" "$subsystem_id" >>${DEV_PROPS}
       
   174     else
       
   175 	vendor_id=""
       
   176 	device_id=""
       
   177 	subsystem_vendor_id=""
       
   178 	subsystem_id=""
       
   179 	echo $1 "$vendor_id" >>${DEV_PROPS}
       
   180     fi
       
   181 }
       
   182 
       
   183 #
       
   184 # Function process_bootenvrc_for_install() converts bootpath in ata style
       
   185 # to nv_sata style in the file /boot/solaris/bootenv.rc for normal upgrade.
       
   186 #
       
   187 process_bootenvrc_for_install() {
       
   188 
       
   189 	# Check to see if bootenv.rc file has ata disk entries.
       
   190 	${GREP} "cmdk@" ${BOOTENVRC} > /dev/null
       
   191 	if [ $? -eq 1 ]
       
   192 	then
       
   193 		# There is no ata disk entry. No mapping is needed.
       
   194 		return 0
       
   195 	fi
       
   196 
       
   197 	# Backup the bootenv.rc file.
       
   198 	$CP ${BOOTENVRC} ${BOOTENVRC_BAK}
       
   199 	if [ $? -ne 0 ]
       
   200 	then
       
   201 		# Can't backup bootenv.rc file.
       
   202 		rem_drv -b ${ROOT} nv_sata
       
   203 		${RM} -rf ${NVSATA_TMP}
       
   204 		exit 1
       
   205 	fi
       
   206  
       
   207 	${GREP} "cmdk@" ${BOOTENVRC} | while read bootpath_line
       
   208 	do
       
   209 		old_path=`echo ${bootpath_line} | ${CUT} -d' ' -f3`
       
   210 		devname=`echo ${old_path} | $CUT -d/ -f4- | $SED "{
       
   211 			s/ide@/disk@/
       
   212 			s/\/cmdk@.//
       
   213 			}"`
       
   214 		$LS -l /dev/dsk | $GREP ${devname} | while read line
       
   215 		do
       
   216 			new_path=`echo $line | $NAWK '{print $11}'`
       
   217 			arg="/`echo ${new_path} | ${CUT} -d/ -f4,5`"
       
   218 			get_properties ${arg}
       
   219 	
       
   220 			for pair in ${DRIVER_ALIASES}
       
   221 			do
       
   222 				VENDOR_ID=`echo ${pair} | $SED "s/\"//g" \
       
   223 					| $CUT -d, -f1`
       
   224 				DEVICE_ID=`echo ${pair} | $SED "s/\"//g" \
       
   225 					| $CUT -d, -f2`
       
   226 				# Check to see if it is a nv_sata device.
       
   227 				if [ "pci${vendor_id}" = ${VENDOR_ID} -a \
       
   228 					${device_id} = ${DEVICE_ID} ]
       
   229 				then	
       
   230 					if [ "X${subsystem_vendor_id}" = "X" ]
       
   231 					then
       
   232                        				ids="pci${vendor_id},${device_id}"
       
   233 					else
       
   234                        				ids="pci${subsystem_vendor_id},${subsystem_id}"
       
   235 					fi
       
   236 					mapped_path=`echo ${old_path} | ${SED} "{
       
   237 						s/pci-ide/${ids}/
       
   238 						s/ide/disk/
       
   239 						s/\/cmdk@.//
       
   240 						}"`
       
   241 					new_path="/`echo ${new_path} | $CUT -d/ -f4-`"
       
   242 					if [ ${new_path} = ${mapped_path} ]
       
   243 					then
       
   244 						if [ ! -f ${NVSATA_TMP}/bootenv.rc ]
       
   245 						then
       
   246 							$GREP -v "cmdk@" ${BOOTENVRC} > \
       
   247 								${NVSATA_TMP}/bootenv.rc	
       
   248 						fi
       
   249 						echo "setprop bootpath ${new_path}" \
       
   250 							>> ${NVSATA_TMP}/bootenv.rc
       
   251 						break	
       
   252 					fi	
       
   253 				fi	
       
   254 			done
       
   255 		done
       
   256 	done
       
   257 	# Commit the changes
       
   258 	if [ -f ${NVSATA_TMP}/bootenv.rc ]
       
   259 	then
       
   260 		${CP} ${NVSATA_TMP}/bootenv.rc ${BOOTENVRC}
       
   261 		if [ $? -ne 0 ]
       
   262 		then
       
   263 			# Failed to modify bootenv.rc file.
       
   264 			rem_drv -b ${ROOT} nv_sata
       
   265 			${RM} -rf ${NVSATA_TMP}
       
   266 			exit 1
       
   267 		fi
       
   268 	fi
       
   269 }
       
   270 
       
   271 #
       
   272 # Function process_bootenvrc_for_lu() converts bootpath in ata style
       
   273 # to nv_sata style in the file /boot/solaris/bootenv.rc for live upgrade.
       
   274 #
       
   275 process_bootenvrc_for_lu() {
       
   276 
       
   277         # Check to see if bootenv.rc has ata disk entries.
       
   278 
       
   279         ${GREP} "cmdk@" ${BOOTENVRC} > /dev/null
       
   280         if [ $? -eq 1 ]
       
   281         then
       
   282                 # There is no ata disk. No mapping is needed.
       
   283                 return 0
       
   284         fi
       
   285 
       
   286 	# Backup the bootenv.rc file.
       
   287 	$CP ${BOOTENVRC} ${BOOTENVRC_BAK}
       
   288 	if [ $? -ne 0 ]
       
   289 	then
       
   290 		# Can't backup bootenv.rc file.
       
   291 		rem_drv -b ${ROOT} nv_sata
       
   292 		${RM} -rf ${NVSATA_TMP}
       
   293 		exit 1
       
   294 	fi
       
   295 
       
   296 	${GREP} "cmdk@" ${BOOTENVRC} | while read bootpath_line
       
   297 	do
       
   298 	    bootpath=`echo ${bootpath_line} | ${CUT} -d' ' -f3`
       
   299 	    if [ "X${no_nvsata_in_CBE}" != "X0" ]
       
   300 	    then 
       
   301         	arg=`echo ${bootpath} | ${CUT} -d/ -f1-3`
       
   302         	get_properties ${arg}
       
   303 
       
   304         	# Check if boot device is a supported nv_sata device.
       
   305         	for pair in ${DRIVER_ALIASES}
       
   306         	do
       
   307                 	dr_vendor_id=`echo $pair | $SED "s/\"//g" | $CUT -d, -f1`
       
   308                 	dr_device_id=`echo $pair | $SED "s/\"//g" | $CUT -d, -f2`
       
   309                 	if [ "pci${vendor_id}" = ${dr_vendor_id} -a ${device_id} = \
       
   310 				${dr_device_id} ]
       
   311                 	then
       
   312 				if [ "X${subsystem_vendor_id}" = "X" ]
       
   313 				then
       
   314                        			ids="pci${vendor_id},${device_id}"
       
   315 				else
       
   316                        			ids="pci${subsystem_vendor_id},${subsystem_id}"
       
   317 				fi
       
   318 				if [ ! -f ${NVSATA_TMP}/bootenv.rc ]
       
   319 				then
       
   320 					$GREP -v "cmdk@" ${BOOTENVRC} > \
       
   321 						${NVSATA_TMP}/bootenv.rc
       
   322 				fi
       
   323 				mapped_bootpath_line=`echo ${bootpath_line} | ${SED} "{
       
   324                                 	s/pci-ide/${ids}/
       
   325                                 	s/ide/disk/
       
   326                                 	s/\/cmdk@.//
       
   327                                 	}"`
       
   328 
       
   329 				echo ${mapped_bootpath_line} >> ${NVSATA_TMP}/bootenv.rc
       
   330 				break
       
   331                 	fi
       
   332         	done
       
   333 	    else
       
   334 		is_mapped="no"
       
   335 		devname=`echo ${bootpath} | $CUT -d/ -f4- | $SED "{
       
   336 			s/ide@/disk@/
       
   337 			s/\/cmdk@.//
       
   338 			}"`
       
   339 		for new_path in `$LS -l "/dev/dsk" | $GREP ${devname} |$NAWK '{print $11}'`
       
   340 		do
       
   341 			arg2="/`echo ${new_path} | ${CUT} -d/ -f4,5`"
       
   342 			get_properties ${arg2}
       
   343 			for pair in ${DRIVER_ALIASES}
       
   344 			do
       
   345 				VENDOR_ID=`echo ${pair} | $SED "s/\"//g" \
       
   346 					| $CUT -d, -f1`
       
   347 				DEVICE_ID=`echo ${pair} | $SED "s/\"//g" \
       
   348 					| $CUT -d, -f2`
       
   349 
       
   350 				# Check to see if it is a nv_sata device.
       
   351 				if [ "pci${vendor_id}" = ${VENDOR_ID} -a \
       
   352 					${device_id} = ${DEVICE_ID} ]
       
   353 				then
       
   354 					if [ "X${subsystem_vendor_id}" = "X" ]
       
   355 					then
       
   356 						ids3="pci${vendor_id},${device_id}"
       
   357 					else
       
   358 						ids3="pci${subsystem_vendor_id},${subsystem_id}"
       
   359 					fi
       
   360 					mapped_bootpath_line=`echo ${bootpath_line} | ${SED} "{
       
   361 						s/pci-ide/${ids3}/
       
   362 						s/ide/disk/
       
   363 						s/\/cmdk@.//
       
   364 						 }"`
       
   365 					mapped_bootpath=`echo ${mapped_bootpath_line} \
       
   366 						| ${CUT} -d' ' -f3`
       
   367 					$LS -l "/dev/dsk" | $GREP ${mapped_bootpath} >/dev/null
       
   368 					if [ $? -eq 0 ]
       
   369 					then
       
   370 						if [ ! -f ${NVSATA_TMP}/bootenv.rc ]
       
   371 						then
       
   372 							$GREP -v "cmdk@" ${BOOTENVRC} > \
       
   373 								${NVSATA_TMP}/bootenv.rc
       
   374 						fi
       
   375 						echo ${mapped_bootpath_line} >> \
       
   376 							${NVSATA_TMP}/bootenv.rc	
       
   377 						is_mapped="yes"
       
   378 						break
       
   379 					fi
       
   380 				fi
       
   381 			done
       
   382 			if [ "${is_mapped}" = "yes" ]
       
   383 			then 
       
   384 				break
       
   385 			fi
       
   386 		done
       
   387 	    fi
       
   388 	done
       
   389 	# Commit the changes
       
   390 	if [ -f ${NVSATA_TMP}/bootenv.rc ]
       
   391 	then
       
   392 		${CP} ${NVSATA_TMP}/bootenv.rc ${BOOTENVRC}
       
   393 		if [ $? -ne 0 ]
       
   394 		then
       
   395 			# Failed to modify bootenv.rc file.
       
   396 			rem_drv -b ${ROOT} nv_sata
       
   397 			${RM} -rf ${NVSATA_TMP}
       
   398 			exit 1
       
   399 		fi
       
   400 	fi
       
   401 }
       
   402 
       
   403 #
       
   404 # Function process_system_for_lu() converts rootdev in /etc/system from
       
   405 # old ata fromat to new nv_sata format during live upgrade.
       
   406 #
       
   407 process_system_for_lu() {
       
   408 
       
   409         # Check to see if system has ata disk as a root device.
       
   410         rootdev_line=`${GREP} -v "*" $SYSTEM | ${GREP} "rootdev:/"| ${GREP} "cmdk@"`
       
   411         if [ $? -eq 1 ]
       
   412         then
       
   413                 # roodev entry does not exist, or root disk is not ata.
       
   414                 return 0
       
   415         fi
       
   416 
       
   417 	${CP} ${SYSTEM} ${SYSTEM_BAK}
       
   418 	if [ $? -ne 0 ]
       
   419 	then
       
   420 		# Can't backup system file."
       
   421 		$CP ${BOOTENVRC_BAK} ${BOOTENVRC}
       
   422 		rem_drv -b ${ROOT} nv_sata
       
   423 		${RM} -rf ${NVSATA_TMP}
       
   424 		exit 1
       
   425 	fi
       
   426 
       
   427         rootdev=`echo ${rootdev_line} | ${CUT} -d: -f2-`
       
   428 	if [ "X${no_nvsata_in_CBE}" != "X0" ]
       
   429 	then
       
   430         	ar=`echo ${rootdev} | ${CUT} -d/ -f1-3`
       
   431         	get_properties ${ar}
       
   432 
       
   433         	# Check if boot device is a supported nv_sata device.
       
   434         	for pair in ${DRIVER_ALIASES}
       
   435         	do
       
   436 			dr_vendor_id=`echo $pair | $SED "s/\"//g" | $CUT -d, -f1`
       
   437                 	dr_device_id=`echo $pair | $SED "s/\"//g" | $CUT -d, -f2`
       
   438                 	if [ "pci${vendor_id}" = ${dr_vendor_id} -a \
       
   439 				${device_id} = ${dr_device_id} ]
       
   440                 	then
       
   441 
       
   442 				if [ "X${subsystem_vendor_id}" = "X" ]
       
   443 				then
       
   444                        			ids="pci${vendor_id},${device_id}"
       
   445 				else
       
   446                        			ids="pci${subsystem_vendor_id},${subsystem_id}"
       
   447 				fi
       
   448                         	$SED "{
       
   449                                 	s/pci-ide/$ids/
       
   450                                 	s/ide/disk/
       
   451                                 	s/\/cmdk@.//
       
   452                                 	}" ${SYSTEM} > "${NVSATA_TMP}/system"
       
   453 
       
   454                         	break
       
   455 			fi
       
   456         	done
       
   457 	else
       
   458 		devname=`echo ${rootdev} | $CUT -d/ -f4- | $SED "{
       
   459 			s/ide@/disk@/
       
   460 			s/\/cmdk@.//
       
   461 			}"`
       
   462 		is_mapped="no"
       
   463 		for dev_path in `$LS -l "/dev/dsk" | $GREP ${devname} |$NAWK '{print $11}'`
       
   464 		do
       
   465 			ar="/`echo ${dev_path} | ${CUT} -d/ -f4,5`"
       
   466 			get_properties ${ar}
       
   467 			for pair in ${DRIVER_ALIASES}
       
   468 			do
       
   469 				VENDOR_ID=`echo ${pair} | $SED "s/\"//g" \
       
   470 					| $CUT -d, -f1`
       
   471 				DEVICE_ID=`echo ${pair} | $SED "s/\"//g" \
       
   472 					| $CUT -d, -f2`
       
   473 
       
   474 				# Check to see if it is a nv_sata device.
       
   475 				if [ "pci${vendor_id}" = ${VENDOR_ID} -a \
       
   476 					${device_id} = ${DEVICE_ID} ]
       
   477 				then
       
   478 					if [ "X${subsystem_vendor_id}" = "X" ]
       
   479 					then
       
   480 						ids="pci${vendor_id},${device_id}"
       
   481 					else
       
   482 						ids="pci${subsystem_vendor_id},${subsystem_id}"
       
   483 					fi
       
   484 					
       
   485 					mapped_rootdev=`echo ${rootdev} | ${SED} "{
       
   486 						s/pci-ide/${ids}/
       
   487 						s/ide/disk/
       
   488 						s/\/cmdk@.//
       
   489 						}"`		
       
   490 					$LS -l "/dev/dsk" | $GREP ${mapped_rootdev} >/dev/null
       
   491 					if [ $? -eq 0 ]
       
   492 					then
       
   493 						$SED "{
       
   494 							s/pci-ide/$ids/
       
   495 							s/ide/disk/
       
   496 							s/\/cmdk@.//
       
   497 							}" ${SYSTEM} > "${NVSATA_TMP}/system"
       
   498 						is_mapped="yes"	
       
   499 						break
       
   500 					fi
       
   501 				fi
       
   502 			done
       
   503 			if [ "${is_mapped}" = "yes" ]
       
   504 			then
       
   505 				break
       
   506 			fi
       
   507 		done
       
   508 	fi
       
   509 	
       
   510 	if [ -f ${NVSATA_TMP}/system ]
       
   511 	then
       
   512 		${CP} ${NVSATA_TMP}/system ${SYSTEM}
       
   513 		if [ $? -ne 0 ]
       
   514 		then
       
   515 			# Failed to modify system file.
       
   516 			$CP ${BOOTENVRC_BAK} ${BOOTENVRC}
       
   517 			rem_drv -b ${ROOT} nv_sata
       
   518 			${RM} -rf ${NVSATA_TMP}
       
   519 			exit 1
       
   520 		fi
       
   521 	fi
       
   522 }
       
   523 
       
   524 #
       
   525 # Function process_system_for_install() converts rootdev in /etc/system from 
       
   526 # old ata format to new nv_sata format during the upgrade installation.
       
   527 #
       
   528 process_system_for_install() {
       
   529 
       
   530         # Check to see if system has ata disk as a root device.
       
   531 	rootdev_line=`${GREP} -v "*" $SYSTEM | ${GREP} "rootdev:/"| ${GREP} "cmdk@"`
       
   532         if [ $? -eq 1 ]
       
   533         then
       
   534 		# roodev entry does not exist, or root disk is not ata.
       
   535                 return 0
       
   536         fi
       
   537 
       
   538 	${CP} ${SYSTEM} ${SYSTEM_BAK}
       
   539 	if [ $? -ne 0 ]
       
   540 	then
       
   541 		# Can't backup system file."
       
   542 		$CP ${BOOTENVRC_BAK} ${BOOTENVRC}
       
   543 		rem_drv -b ${ROOT} nv_sata
       
   544 		${RM} -rf ${NVSATA_TMP}
       
   545 		exit 1
       
   546 	fi
       
   547 
       
   548 	rootdev=`echo ${rootdev_line} | ${CUT} -d: -f2-`
       
   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 					}"`
       
   825 				for x in `$LS -l /dev/dsk | $GREP $dn \
       
   826 					| $NAWK '{print $11}'`
       
   827 				do
       
   828 					np=""
       
   829 					a="/`echo ${x} | ${CUT} -d/ -f4,5`"
       
   830 					get_properties $a
       
   831 
       
   832 					for pair in ${DRIVER_ALIASES}
       
   833 					do
       
   834 					    VENDOR_ID=`echo ${pair} | $SED "s/\"//g" \
       
   835 						| $CUT -d, -f1`
       
   836 					    DEVICE_ID=`echo ${pair} | $SED "s/\"//g" \
       
   837 						| $CUT -d, -f2`
       
   838 					    if [ "pci${vendor_id}" = ${VENDOR_ID} -a \
       
   839 						${device_id} = ${DEVICE_ID} ]
       
   840 					    then
       
   841 				    		if [ "X${subsystem_vendor_id}" = "X" ]
       
   842 				    		then
       
   843                        				    is="pci${vendor_id},${device_id}"
       
   844 				    		else
       
   845                        				    is="pci${subsystem_vendor_id},${subsystem_id}"
       
   846 				    		fi
       
   847 						mapped_path=`echo $i | ${SED} "{
       
   848 							s/pci-ide/${is}/
       
   849 							s/ide/disk/
       
   850 							s/\/cmdk@.//
       
   851 							}"`
       
   852 						np="/`echo ${x} | $CUT -d/ -f4- \
       
   853 							| $CUT -d: -f1`"
       
   854 						if [ ${np} = ${mapped_path} ]
       
   855 						then
       
   856 							tp=${mapped_path}	
       
   857 							if [ "${is_mapped}" = "no" ]
       
   858 							then
       
   859 								is_mapped="yes"
       
   860 							fi
       
   861 							break
       
   862 						fi
       
   863 					    fi
       
   864 					done
       
   865 					
       
   866 					if [ "${is_mapped}" = "yes" ]
       
   867 					then
       
   868 						break
       
   869 					fi
       
   870 				done
       
   871 			fi
       
   872 			new_entry="${new_entry}$tp "
       
   873                 done
       
   874 		if [ "${is_mapped}" = "yes" ]
       
   875 		then
       
   876 			echo ${new_entry} >> ${NVSATA_TMP}/mapped_power.conf
       
   877 		else
       
   878 			echo ${new_entry} >> ${NVSATA_TMP}/power.conf
       
   879 		fi
       
   880         done
       
   881 
       
   882 	if [ -f ${NVSATA_TMP}/mapped_power.conf ]
       
   883 	then
       
   884 		$CAT ${NVSATA_TMP}/mapped_power.conf >> ${NVSATA_TMP}/power.conf
       
   885         	$CP ${NVSATA_TMP}/power.conf ${POWER_CONF}
       
   886         	if [ $? -ne 0 ]
       
   887         	then
       
   888 			$CP ${BOOTENVRC_BAK} ${BOOTENVRC}
       
   889 			$CP ${SYSTEM_BAK} ${SYSTEM}
       
   890 			rem_drv -b ${ROOT} nv_sata
       
   891                 	$RM -rf ${NVSATA_TMP}
       
   892                 	exit 1
       
   893         	fi
       
   894 	fi
       
   895 }
       
   896 
       
   897 #
       
   898 # Function process_devlink_for_lu() links all old ata logical device names
       
   899 # to new physical device paths on upgraded BE.
       
   900 #
       
   901 process_devlink_for_lu() {
       
   902 
       
   903         $LS -l "${ROOT}/dev/dsk" | $GREP "cmdk@" | while read line1
       
   904         do
       
   905                 logical_disk=`echo $line1 | $NAWK '{print $9}'`
       
   906                 old_path=`echo $line1 | $NAWK '{print $11}'`
       
   907 		mapped_new_path=""
       
   908 		if [ "X${no_nvsata_in_CBE}" != "X0" ]
       
   909 		then
       
   910                 	arg2="/`echo ${old_path} | ${CUT} -d/ -f4,5`"
       
   911                 	get_properties ${arg2}
       
   912 
       
   913                 	for pair in ${DRIVER_ALIASES}
       
   914                 	do
       
   915                         	VENDOR_ID=`echo ${pair} | $SED "s/\"//g" \
       
   916                                 	| $CUT -d, -f1`
       
   917                         	DEVICE_ID=`echo ${pair} | $SED "s/\"//g" \
       
   918                                 	| $CUT -d, -f2`
       
   919                         	# Check to see if it is a nv_sata device.
       
   920                         	if [ "pci${vendor_id}" = ${VENDOR_ID} -a \
       
   921 					${device_id} = ${DEVICE_ID} ]
       
   922                         	then
       
   923 					if [ "X${subsystem_vendor_id}" = "X" ]
       
   924 					then
       
   925                         	    	    ids3="pci${vendor_id},${device_id}"
       
   926 					else
       
   927                         	    	    ids3="pci${subsystem_vendor_id},${subsystem_id}"
       
   928 					fi
       
   929 					mapped_new_path=`echo ${old_path} | ${SED} "{
       
   930 						s/pci-ide/${ids3}/
       
   931 						s/ide/disk/
       
   932 						s/\/cmdk@.//
       
   933 						 }"`
       
   934 					break
       
   935 				fi
       
   936 			done
       
   937 		else
       
   938 			devname=`echo ${old_path} | $CUT -d/ -f6- | $SED "{
       
   939 				s/ide@/disk@/
       
   940 				s/\/cmdk@.//
       
   941 				}"`
       
   942 			is_mapped="no"
       
   943 			for new_path in `$LS -l "/dev/dsk" | $GREP ${devname} | $NAWK '{print $11}'`
       
   944 			do
       
   945 				arg2="/`echo ${new_path} | ${CUT} -d/ -f4,5`"
       
   946 				get_properties ${arg2}
       
   947 				for pair in ${DRIVER_ALIASES}
       
   948 				do
       
   949 					VENDOR_ID=`echo ${pair} | $SED "s/\"//g" \
       
   950 						| $CUT -d, -f1`
       
   951 					DEVICE_ID=`echo ${pair} | $SED "s/\"//g" \
       
   952 						| $CUT -d, -f2`
       
   953 					
       
   954 					# Check to see if it is a nv_sata device.
       
   955 					if [ "pci${vendor_id}" = ${VENDOR_ID} -a \
       
   956 						${device_id} = ${DEVICE_ID} ]
       
   957 					then
       
   958 						if [ "X${subsystem_vendor_id}" = "X" ]
       
   959 						then
       
   960 						    ids3="pci${vendor_id},${device_id}"
       
   961 						else
       
   962 						    ids3="pci${subsystem_vendor_id},${subsystem_id}"
       
   963 						fi
       
   964 						mapped_new_path=`echo ${old_path} | ${SED} "{
       
   965 							s/pci-ide/${ids3}/
       
   966 							s/ide/disk/
       
   967 							s/\/cmdk@.//
       
   968 							}"`
       
   969 						if [ ${new_path} = ${mapped_new_path} ]
       
   970 						then
       
   971 							is_mapped="yes"
       
   972 							break
       
   973 						fi
       
   974 					fi
       
   975 				done
       
   976 				if [ "${is_mapped}" = "yes" ]
       
   977 				then
       
   978 					break
       
   979 				fi
       
   980 			done
       
   981 		fi
       
   982 						
       
   983 		if [ "X${mapped_new_path}" != "X" ]
       
   984 		then
       
   985 			cd ${ROOT}/dev/dsk
       
   986 			${MV} ${logical_disk} ${logical_disk}.${BAK}
       
   987 			if [ $? -ne 0 ]
       
   988 			then
       
   989 				# Can't back up old link.
       
   990 				$CP ${BOOTENVRC_BAK} ${BOOTENVRC}
       
   991 				$CP ${SYSTEM_BAK} ${SYSTEM}
       
   992 				$CP ${POWER_CONF_BAK} ${POWER_CONF}
       
   993 				rem_drv -b ${ROOT} nv_sata
       
   994                        		${RM} -rf ${NVSATA_TMP}
       
   995                        		exit 1
       
   996                         fi
       
   997 
       
   998 			${LN} -s ${mapped_new_path} ${logical_disk}
       
   999 			if [ $? -ne 0 ]
       
  1000 			then
       
  1001 				# Can't create symbolic link
       
  1002 				${MV} ${logical_disk}.${BAK} ${logical_disk}
       
  1003                                	$CP ${BOOTENVRC_BAK} ${BOOTENVRC}
       
  1004 				$CP ${SYSTEM_BAK} ${SYSTEM}
       
  1005 				$CP ${POWER_CONF_BAK} ${POWER_CONF}
       
  1006 				rem_drv -b ${ROOT} nv_sata
       
  1007                                 ${RM} -rf ${NVSATA_TMP}
       
  1008                                	exit 1
       
  1009 			fi
       
  1010 				
       
  1011 			c_number="dsk/`echo ${logical_disk} | $CUT -d'd' -f1`"
       
  1012 			$GREP ${c_number} ${ENUMERATE_RESERVED} >/dev/null
       
  1013 			if [ $? -ne 0 ]
       
  1014 			then
       
  1015 				echo ${c_number} >> ${ENUMERATE_RESERVED}
       
  1016 			fi
       
  1017 
       
  1018 			cd ../rdsk
       
  1019 			mapped_new_path="${mapped_new_path},raw"
       
  1020 			${MV} ${logical_disk} ${logical_disk}.${BAK}
       
  1021 			if [ $? -ne 0 ]
       
  1022 			then
       
  1023                               	# Can't back up old link.
       
  1024                                	${RM} ../dsk/${logical_disk}
       
  1025                                	${MV} ../dsk/${logical_disk}.${BAK} \
       
  1026 					../dsk/${logical_disk}
       
  1027                                	$CP ${BOOTENVRC_BAK} ${BOOTENVRC}
       
  1028 				$CP ${SYSTEM_BAK} ${SYSTEM}
       
  1029 				$CP ${POWER_CONF_BAK} ${POWER_CONF}
       
  1030 				rem_drv -b ${ROOT} nv_sata
       
  1031                                	${RM} -rf ${NVSATA_TMP}
       
  1032                                	exit 1
       
  1033 			fi
       
  1034 
       
  1035 			${LN} -s ${mapped_new_path} ${logical_disk}
       
  1036 			if [ $? -ne 0 ]
       
  1037 			then
       
  1038 				# Can't create symbolic link.
       
  1039                                	${MV} ${logical_disk}.${BAK} ${logical_disk}
       
  1040                                	${RM} ../dsk/${logical_disk}
       
  1041                                	${MV} ../dsk/${logical_disk}.${BAK} \
       
  1042                                        	../dsk/${logical_disk}
       
  1043                                	$CP ${BOOTENVRC_BAK} ${BOOTENVRC}
       
  1044 				$CP ${SYSTEM_BAK} ${SYSTEM}
       
  1045 				$CP ${POWER_CONF_BAK} ${POWER_CONF}
       
  1046 				rem_drv -b ${ROOT} nv_sata
       
  1047                                	${RM} -rf ${NVSATA_TMP}
       
  1048                                	exit 1
       
  1049 			fi
       
  1050                	fi
       
  1051         done
       
  1052 
       
  1053 	$GREP "^dsk" ${ENUMERATE_RESERVED} >/dev/null
       
  1054 	if [ $? -eq 0 ]
       
  1055         then
       
  1056                 $RM ${DEVLINK_DB}       
       
  1057         fi
       
  1058 }
       
  1059 
       
  1060 #
       
  1061 # Function process_devlink_for_install() links all old ata logical device names
       
  1062 # to new physical device paths for normal upgrade installation.
       
  1063 #
       
  1064 process_devlink_for_install() {
       
  1065 
       
  1066         $LS -l "${ROOT}/dev/dsk" | $GREP "cmdk@" | while read line1
       
  1067         do
       
  1068                 logical_disk=`echo $line1 | $NAWK '{print $9}'`
       
  1069                 old_path=`echo $line1 | $NAWK '{print $11}'`
       
  1070 		devname=`echo ${old_path} | $CUT -d/ -f6- | $SED "{
       
  1071 			s/ide@/disk@/
       
  1072 			s/\/cmdk@.//
       
  1073 			 }"`
       
  1074                 $LS -l "/dev/dsk" | $GREP ${devname} | while read line2
       
  1075                 do
       
  1076                         new_path=`echo $line2 | $NAWK '{print $11}'`
       
  1077                         arg2="/`echo ${new_path} | ${CUT} -d/ -f4,5`"
       
  1078                         get_properties ${arg2}
       
  1079 
       
  1080 			for pair in ${DRIVER_ALIASES}
       
  1081                         do
       
  1082                                 VENDOR_ID=`echo ${pair} | $SED "s/\"//g"\
       
  1083                                         | $CUT -d, -f1`
       
  1084                                 DEVICE_ID=`echo ${pair} | $SED "s/\"//g" \
       
  1085                                         | $CUT -d, -f2`
       
  1086 
       
  1087                                 # Check to see if it is a nv_sata device.
       
  1088                                 if [ "pci${vendor_id}" = ${VENDOR_ID} -a \
       
  1089                                         ${device_id} = ${DEVICE_ID} ]
       
  1090                                 then
       
  1091 					if [ "X${subsystem_vendor_id}" = "X" ]
       
  1092 					then
       
  1093                         		    ids3="pci${vendor_id},${device_id}"
       
  1094 					else
       
  1095                         		    ids3="pci${subsystem_vendor_id},${subsystem_id}"
       
  1096 					fi
       
  1097                                         mapped_new_path=`echo ${old_path} | ${SED} "{
       
  1098                                                 s/pci-ide/${ids3}/
       
  1099                                                 s/ide/disk/
       
  1100                                                 s/\/cmdk@.//
       
  1101                                                 }"`
       
  1102                                         if [ ${new_path} = ${mapped_new_path} ]
       
  1103                                         then
       
  1104                                                 # Found the match.
       
  1105                                                 cd ${ROOT}/dev/dsk
       
  1106                                                 ${MV} ${logical_disk} ${logical_disk}.${BAK}
       
  1107                                                 if [ $? -ne 0 ]
       
  1108                                                 then
       
  1109                                                         # Can't back up old link.
       
  1110                                                         $CP ${BOOTENVRC_BAK} ${BOOTENVRC}
       
  1111 							$CP ${SYSTEM_BAK} ${SYSTEM}
       
  1112 							$CP ${POWER_CONF_BAK} ${POWER_CONF}
       
  1113 							rem_drv -b ${ROOT} nv_sata
       
  1114                                                         ${RM} -rf ${NVSATA_TMP}
       
  1115                                                         exit 1
       
  1116                                                 fi
       
  1117 
       
  1118                                                 ${LN} -s ${mapped_new_path} ${logical_disk}
       
  1119                                                 if [ $? -ne 0 ]
       
  1120                                                 then
       
  1121                                                         # Can't create symbolic link
       
  1122                                                         ${MV} ${logical_disk}.${BAK} ${logical_disk}
       
  1123                                                         $CP ${BOOTENVRC_BAK} ${BOOTENVRC}
       
  1124 							$CP ${SYSTEM_BAK} ${SYSTEM}
       
  1125 							$CP ${POWER_CONF_BAK} ${POWER_CONF}
       
  1126 							rem_drv -b ${ROOT} nv_sata
       
  1127                                                         ${RM} -rf ${NVSATA_TMP}
       
  1128                                                         exit 1
       
  1129                                                 fi
       
  1130 						
       
  1131 						c_number="dsk/`echo ${logical_disk} \
       
  1132 							| $CUT -d'd' -f1`"
       
  1133 						$GREP ${c_number} ${ENUMERATE_RESERVED} >/dev/null
       
  1134 						if [ $? -ne 0 ]
       
  1135 						then
       
  1136 							echo ${c_number} >> ${ENUMERATE_RESERVED}
       
  1137 						fi
       
  1138 
       
  1139                                                 cd ../rdsk
       
  1140                                                 mapped_new_path="${mapped_new_path},raw"
       
  1141                                                 ${MV} ${logical_disk} ${logical_disk}.${BAK}
       
  1142                                                 if [ $? -ne 0 ]
       
  1143                                                 then
       
  1144                                                         # Can't back up old link.
       
  1145                                                         ${RM} ../dsk/${logical_disk}
       
  1146                                                         ${MV} ../dsk/${logical_disk}.${BAK} \
       
  1147                                                                 ../dsk/${logical_disk}
       
  1148                                                         $CP ${BOOTENVRC_BAK} ${BOOTENVRC}
       
  1149 							$CP ${SYSTEM_BAK} ${SYSTEM}
       
  1150 							$CP ${POWER_CONF_BAK} ${POWER_CONF}
       
  1151 							rem_drv -b ${ROOT} nv_sata
       
  1152                                                         ${RM} -rf ${NVSATA_TMP}
       
  1153                                                         exit 1
       
  1154                                                 fi
       
  1155 
       
  1156                                                 ${LN} -s ${mapped_new_path} ${logical_disk}
       
  1157                                                 if [ $? -ne 0 ]
       
  1158                                                 then
       
  1159                                                         # Can't create symbolic link.
       
  1160                                                         ${MV} ${logical_disk}.${BAK} ${logical_disk}
       
  1161                                                         ${RM} ../dsk/${logical_disk}
       
  1162                                                         ${MV} ../dsk/${logical_disk}.${BAK} \
       
  1163                                                                 ../dsk/${logical_disk}
       
  1164                                                         $CP ${BOOTENVRC_BAK} ${BOOTENVRC}
       
  1165 							$CP ${SYSTEM_BAK} ${SYSTEM}
       
  1166 							$CP ${POWER_CONF_BAK} ${POWER_CONF}
       
  1167 							rem_drv -b ${ROOT} nv_sata
       
  1168                                                         ${RM} -rf ${NVSATA_TMP}
       
  1169                                                         exit 1
       
  1170                                                 fi
       
  1171                                         fi
       
  1172                                 fi
       
  1173                         done
       
  1174                 done
       
  1175         done
       
  1176 	
       
  1177 	$GREP "^dsk" ${ENUMERATE_RESERVED} >/dev/null
       
  1178 	if [ $? -eq 0 ]
       
  1179 	then
       
  1180 		$RM ${DEVLINK_DB}	
       
  1181 	fi
       
  1182 }
       
  1183 
       
  1184 clean_up() {
       
  1185 
       
  1186         ${RM} -rf ${NVSATA_TMP}
       
  1187         $LS -l "${ROOT}/dev/dsk" | $GREP "disk@" | while read line
       
  1188         do
       
  1189                 logical_disk=`echo $line | $NAWK '{print $9}'`
       
  1190                 cd ${ROOT}/dev/dsk
       
  1191                 ${RM} -f ${logical_disk}.${BAK}
       
  1192 
       
  1193                 cd ../rdsk
       
  1194                 ${RM} -f ${logical_disk}.${BAK}
       
  1195         done
       
  1196 }
       
  1197 
       
  1198 # Function: check_add_drv()
       
  1199 #
       
  1200 # This function will check if the module has an entry in etc/name_to_major
       
  1201 # If not simply calls add_drv with the arguments given. If there is
       
  1202 # such an entry in name_to_major file, it adds entries in driver_aliases
       
  1203 # driver_classes and minor_perm if necessary.
       
  1204 # The syntax of this function is the same as add_drv. 
       
  1205 
       
  1206 check_add_drv()
       
  1207 {
       
  1208 	if [ "$BASEDIR" = "" ]
       
  1209 	then
       
  1210 		BASEDIR=/  
       
  1211 	fi
       
  1212 	alias=""
       
  1213 	class=""
       
  1214 	ADD_ALIAS=0
       
  1215 	ADD_CLASS=0
       
  1216 	ADD_MINOR=0
       
  1217 	OPTIND=1
       
  1218 	IS_NET_DRIVER=0
       
  1219 
       
  1220 	cmd="add_drv"
       
  1221 
       
  1222 	NO_CMD=
       
  1223 	while getopts i:b:m:c:N  opt
       
  1224 	do
       
  1225 		case $opt in
       
  1226 			N )	NO_CMD=1;;
       
  1227 			i )	ADD_ALIAS=1	
       
  1228 				alias=$OPTARG
       
  1229 				cmd=$cmd" -i '$alias'"
       
  1230 				;;
       
  1231 			m )	ADD_MINOR=1
       
  1232 				minor=$OPTARG
       
  1233 				cmd=$cmd" -m '$minor'"
       
  1234 				;;
       
  1235 			c)	ADD_CLASS=1
       
  1236 				class=$OPTARG
       
  1237 				cmd=$cmd" -c $class"
       
  1238 				;;
       
  1239 			b)	BASEDIR=$OPTARG
       
  1240 				cmd=$cmd" -b $BASEDIR"
       
  1241 				;;
       
  1242 			\?) 	echo "check_add_drv can not handle this option"
       
  1243 				return
       
  1244 				;;
       
  1245 			esac
       
  1246 	done 
       
  1247 	shift `/usr/bin/expr $OPTIND - 1`
       
  1248 	
       
  1249 	drvname=$1
       
  1250 
       
  1251 	cmd=$cmd" "$drvname
       
  1252 
       
  1253 	drvname=`echo $drvname | /usr/bin/sed 's;.*/;;g'`
       
  1254 
       
  1255 	/usr/bin/grep "^$drvname[ 	]" ${ROOT}/etc/name_to_major >  /dev/null 2>&1
       
  1256 
       
  1257 	if [ "$NO_CMD" = "" -a $? -ne 0 ] 
       
  1258 	then
       
  1259 		eval $cmd
       
  1260 	else	
       
  1261 		# entry already in name_to_major, add alias, class, minorperm
       
  1262 		# if necessary
       
  1263 		if [ $ADD_ALIAS = 1 ]	
       
  1264 		then
       
  1265 			for i in $alias
       
  1266 			do
       
  1267 				/usr/bin/egrep "^$drvname[ 	]+$i" ${ROOT}/etc/driver_aliases>/dev/null 2>&1
       
  1268 				if [ $? -ne 0 ]
       
  1269 				then
       
  1270 					echo "$drvname $i" >> ${ROOT}/etc/driver_aliases	
       
  1271 				fi
       
  1272 			done
       
  1273 		fi
       
  1274 
       
  1275 		if [ $ADD_CLASS = 1 ]
       
  1276 		then
       
  1277 			/usr/bin/egrep "^$drvname[ 	]+$class( |	|$)" ${ROOT}/etc/driver_classes > /dev/null 2>&1
       
  1278 			if [ $? -ne 0 ]
       
  1279 			then 
       
  1280 				echo "$drvname\t$class" >> ${ROOT}/etc/driver_classes
       
  1281 			fi
       
  1282 		fi
       
  1283 
       
  1284 		if [ $ADD_MINOR = 1 ]
       
  1285 		then
       
  1286 			/usr/bin/grep "^$drvname:" ${ROOT}/etc/minor_perm > /dev/null 2>&1
       
  1287 			if [ $? -ne 0 ]
       
  1288 			then 
       
  1289 				minorentry="$drvname:$minor"
       
  1290 				echo $minorentry >> ${ROOT}/etc/minor_perm
       
  1291 			fi
       
  1292 		fi
       
  1293 
       
  1294 	fi
       
  1295 }
       
  1296 
       
  1297 #
       
  1298 # Main program starts here.
       
  1299 #
       
  1300 check_add_drv -b ${ROOT} -i '"pci10de,37f" "pci10de,55" "pci10de,54"' -m '* 0644 root sys' nv_sata
       
  1301 
       
  1302 #
       
  1303 # Create temporary directory for node migration 
       
  1304 #
       
  1305 if [ ! -d ${NVSATA_TMP} ]
       
  1306 then
       
  1307         ${MKDIR} ${NVSATA_TMP}
       
  1308         if [ $? -ne 0 ]
       
  1309         then
       
  1310                 # Failed to create ${NVSATA_TMP} directory.
       
  1311                 exit 1
       
  1312         fi
       
  1313 fi
       
  1314 
       
  1315 #
       
  1316 # If it is an install, do nothing. If it is an upgrade, do the conversion.
       
  1317 #
       
  1318 line=`$MOUNT | $GREP "/ "`
       
  1319 first_field=`echo $line | $NAWK '{print $1}'`
       
  1320 third_field=`echo $line | $NAWK '{print $3}'`
       
  1321 
       
  1322 if [ ${first_field} = "/" -a ${third_field} = "/ramdisk:a" ]
       
  1323 then
       
  1324 	# It is either an install/upgrade.
       
  1325 	if [ -f ${UPGRADE_LOG} ]
       
  1326 	then
       
  1327 		# It is an upgrade.
       
  1328 		$GREP ${NV_SATA} ${PATH_TO_INST} > /dev/null
       
  1329 		if [ $? -eq 0 ]
       
  1330 		then
       
  1331 			# The system was running nv_sata before the upgrade.
       
  1332 			$RM -rf ${NVSATA_TMP}
       
  1333 			exit 0
       
  1334 		fi
       
  1335 
       
  1336 		process_bootenvrc_for_install
       
  1337 		process_system_for_install
       
  1338 		process_power_conf_for_install
       
  1339 		process_devlink_for_install
       
  1340 		clean_up
       
  1341 		exit 0
       
  1342 	fi
       
  1343 	$RM -rf ${NVSATA_TMP}
       
  1344 	exit 0
       
  1345 fi
       
  1346 
       
  1347 #
       
  1348 # Liveupgrade. 
       
  1349 #
       
  1350 if [ -f ${LIVEUPGRADE_TMP_LOG} ]
       
  1351 then
       
  1352 	$GREP ${NV_SATA} /etc/driver_aliases >/dev/null
       
  1353 	no_nvsata_in_CBE=$?
       
  1354 	$GREP ${NV_SATA} ${PATH_TO_INST} > /dev/null
       
  1355 	if [ $? -eq 0 ]
       
  1356 	then
       
  1357 		# Target BE was running nv_sata driver before the upgrade.
       
  1358 		$RM -rf ${NVSATA_TMP}
       
  1359 		exit 0
       
  1360 	fi	
       
  1361 	process_bootenvrc_for_lu
       
  1362 	process_system_for_lu
       
  1363 	process_power_conf_for_lu
       
  1364 	process_devlink_for_lu
       
  1365 	clean_up
       
  1366 	touch ${ROOT}/reconfigure
       
  1367 	exit 0
       
  1368 fi
       
  1369 
       
  1370 #
       
  1371 # Pkgadd.
       
  1372 #
       
  1373 $RM -rf ${NVSATA_TMP}
       
  1374 exit 0