1#!/usr/bin/env bash
2###############################################################################
3#
4# Copyright (C) 2009-2013 Nintendo.  All rights reserved.
5#
6# These coded instructions, statements, and computer programs contain
7# proprietary information of Nintendo of America Inc. and/or Nintendo
8# Company Ltd., and are protected by Federal copyright law.  They may
9# not be disclosed to third parties or copied or duplicated in any form,
10# in whole or in part, without the prior written consent of Nintendo.
11#
12###############################################################################
13
14################################################################################
15# cafe_nand2pcfs
16# This script enables a CAT_DEV to boot from PCFS. It must not be executed
17# directly from the bash command prompt. Instead, invoke this using:
18#   source update2pcfs
19################################################################################
20source cafe_utils
21
22###############################################################################
23# compute_flat_version
24###############################################################################
25
26compute_flat_version()
27{
28    IFS="."
29    local v=( $1 )
30    echo $((${v[0]} * 1000000 + ${v[1]} * 10000 + ${v[2]} * 1000 + ${v[3]}))
31}
32
33################################################################################
34# main
35################################################################################
36call_mionps=${1:-1}
37
38# Bash_sourced_check 0 `basename "$BASH_SOURCE"` update2pcfs
39rval=$?
40if [ $rval == 0 ]; then
41    #------------------------------------------------------------------------------
42    #---- initialization
43    #------------------------------------------------------------------------------
44    SCRIPT_EXE_TIMESTAMP=`date +%m_%d_%Y_%H%M%S`
45    LOGDIR="$CAFE_ROOT/${SESSION_PATH_PREFIX}`basename "$0"`/${SCRIPT_EXE_TIMESTAMP}"
46    echo `basename "$0"`
47    echo log directory is $LOGDIR
48    mkdir -p "$LOGDIR"
49
50    # Cleanup any old logs
51    rm -f "$TMP/${SESSION_PATH_PREFIX}cafestop_mion.log"
52
53    CAFESTOP_STATUS=0
54    export _CCRSYSCFG1=     #disable
55    Initialize_serial_port_and_directory cafestop
56    #echo CAFE_CONSOLE=$CAFE_CONSOLE
57
58    #------------------------------------------------------------------------------
59    #---- cafestop
60    #------------------------------------------------------------------------------
61    echo Executing cafestop"..."
62    source cafestop -hard 1> "$LOGDIR"/cafestop0.txt 2>&1
63    if [ -e "$TMP/${SESSION_PATH_PREFIX}cafestop_mion.log" ]; then
64        mv "$TMP/${SESSION_PATH_PREFIX}cafestop_mion.log" "${LOGDIR}/cafestop0_mion.log"
65    fi
66    if [ $CAFESTOP_STATUS -ne 0 ]; then
67        echo `basename "$0"`: cafestop failure.
68        exit 1
69    fi
70
71    #------------------------------------------------------------------------------
72    #---- cafeon
73    #------------------------------------------------------------------------------
74    source hostcheckversion
75    hb_ver_flat=$(compute_flat_version $CAFERUN_HOSTBRIDGE_VERSION)
76
77    echo Executing cafeon"..."
78    set -e
79    if [ $hb_ver_flat -lt $(compute_flat_version 3.2.4.1) ]
80    then
81        cafeon 1> "$LOGDIR"/cafeon.txt 2>&1
82    else
83        cafeon -e nomodecheck 1> "$LOGDIR"/cafeon.txt 2>&1
84    fi
85    if [ -e "$TMP/${SESSION_PATH_PREFIX}cafestop_mion.log" ]; then
86        mv "$TMP/${SESSION_PATH_PREFIX}cafestop_mion.log" "${LOGDIR}/cafeon_mion.log"
87    fi
88    set +e
89    Monitor_For_Output -k "source -p -q /vol/content/" $MONITOR_DEFAULT_TIMEOUT "$LOGDIR"
90    if [ $? -ne 0 ]; then
91        echo `basename "$0"`: monitor failed waiting for cafeon success message.
92        exit 1
93    fi
94
95    #------------------------------------------------------------------------------
96    #---- recover command
97    #------------------------------------------------------------------------------
98    echo Executing devkitmsg recover -v"..."
99    set -e
100    devkitmsg recover -v -p $SESSION_LAUNCH_CTRL_PORT
101    set +e
102    Monitor_For_Output -K "WUD_BCMFWCheck" $MONITOR_DEFAULT_TIMEOUT "$LOGDIR" #note: need -K here, not -k
103    if [ $? -ne 0 ]; then
104        echo `basename "$0"`: monitor failed waiting for devkitmsg recover success message.
105        exit 1
106    fi
107
108    #------------------------------------------------------------------------------
109    #---- update to PCFS
110    #------------------------------------------------------------------------------
111    echo Executing devkitmsg \'update /vol/storage_hfiomlc01/sys/update/pcfs\' -v"..."
112    set -e
113    devkitmsg 'update /vol/storage_hfiomlc01/sys/update/pcfs' -v -p $SESSION_LAUNCH_CTRL_PORT
114    set +e
115    Monitor_For_Output -k "Update Done, err 0" $MONITOR_DEFAULT_TIMEOUT "$LOGDIR"
116    if [ $? -ne 0 ]; then
117        echo `basename "$0"`: monitor failed waiting for devkitmsg 1st update success message.
118        exit 1
119    fi
120
121    if [ $call_mionps -eq 1 ]
122    then
123        "$CAFE_ROOT\system\bin\tool\mionps" $BRIDGE_CURRENT_IP_ADDRESS 2 -s 2
124    fi
125
126    #------------------------------------------------------------------------------
127    #---- clr_usrdata command
128    #------------------------------------------------------------------------------
129    echo Executing devkitmsg clr_usrdata -v"..."
130    set -e
131    devkitmsg clr_usrdata -v -p $SESSION_LAUNCH_CTRL_PORT
132    set +e
133    Monitor_For_Output -k "Done, err 0" $MONITOR_DEFAULT_TIMEOUT "$LOGDIR"
134    if [ $? -ne 0 ]; then
135        echo `basename "$0"`: monitor failed waiting for devkitmsg clr_usrdata success message.
136        exit 1
137    fi
138
139	if [ ! -z $CAFE_TEST_SELF_REFRESH ]
140	then
141	    echo Enabling standby mode
142	    devkitmsg 'standby_en 1' -v -p $SESSION_LAUNCH_CTRL_PORT
143	fi
144
145    #------------------------------------------------------------------------------
146    #---- cafestop
147    #------------------------------------------------------------------------------
148    echo Executing cafestop"..."
149    source cafestop 1> "$LOGDIR"/cafestop1.txt 2>&1
150    if [ -e "$TMP/${SESSION_PATH_PREFIX}cafestop_mion.log" ]; then
151        mv "$TMP/${SESSION_PATH_PREFIX}cafestop_mion.log" "${LOGDIR}/cafestop1_mion.log"
152    fi
153    if [ $CAFESTOP_STATUS -ne 0 ]; then
154        echo `basename "$0"`: cafestop failure.
155        exit 1
156    fi
157
158    #------------------------------------------------------------------------------
159    #---- success!
160    #------------------------------------------------------------------------------
161    echo Removing log directory $LOGDIR"..."
162    rm -rf "$LOGDIR"
163    echo `basename "$0"` complete. Exiting with code 0.
164    exit 0
165else
166    echo `basename "$BASH_SOURCE"` error: Format deprecated. Instead, use \"source setbootmode PCFS\". >/dev/stderr
167fi
168unset SCRIPT_IS_SOURCED
169