1#!/bin/bash
2# ------------------------------------------------------------------------------
3# ndrun_precheker
4# ------------------------------------------------------------------------------
5set -u
6
7# ------------------------------------------------------------------------------
8# CHECK ARGMENT
9# ------------------------------------------------------------------------------
10I_ELF_CHK_FLAG=FALSE
11if [ ."$*" = ."" ]; then
12	return 1
13else
14	for a in $* ; do
15		case $a in
16        	*.elf|*.ELF)
17            	NDRUN_PRECHK_ELF_NAME=`cygpath -lm "$a"`
18				I_ELF_CHK_FLAG=TRUE
19                ;;
20        	*)
21				;;
22		esac
23	done
24fi
25
26if [ "${I_ELF_CHK_FLAG}." == "FALSE." ] ; then
27	exit 1
28fi
29
30# ------------------------------------------------------------------------------
31# READ FIRMWARE LIST
32# ------------------------------------------------------------------------------
33#source ndrun_fwlist
34. ndrun_fwlist
35
36# ------------------------------------------------------------------------------
37# CHECK FIRMWARE VERSION in rvl.bin
38# ------------------------------------------------------------------------------
39NDRUN_PRECHK_TARGET_DDF="${NDRUN_PRECHK_ELF_NAME//.elf/.ddf}"
40NDRUN_PRECHK_NDEV_DDF="${NDEV_TOOLS}/NdevRun.ddf"
41
42NDRUN_PRECHK_RVLSYS_CNT=0
43if [ -f "${NDRUN_PRECHK_TARGET_DDF}" ] ; then
44	NDRUN_PRECHK_RVLSYS_CNT=`grep -sc "^[^\;]*RVLSysFileName" "${NDRUN_PRECHK_TARGET_DDF}"`
45	if [ ${NDRUN_PRECHK_RVLSYS_CNT} -gt 1 ] ; then
46		exit 1
47	fi
48fi
49
50if [ ! -f "${NDRUN_PRECHK_NDEV_DDF}" ] ; then
51	exit 1
52fi
53NDRUN_PRECHK_RVLSYS_CNT=`grep -sc "^[^\;]*RVLSysFileName" "${NDRUN_PRECHK_NDEV_DDF}"`
54if [ ${NDRUN_PRECHK_RVLSYS_CNT} -gt 1 ] ; then
55	exit 1
56fi
57
58if grep -sqa "^[^\;]*RVLSysFileName" "${NDRUN_PRECHK_TARGET_DDF}" ;then
59	_TMP=`grep "^[^\;]*RVLSysFileName" "${NDRUN_PRECHK_TARGET_DDF}"`
60elif grep -sqa "^[^\;]*RVLSysFileName" "${NDRUN_PRECHK_NDEV_DDF}" ; then
61	_TMP=`grep "^[^\;]*RVLSysFileName" "${NDRUN_PRECHK_NDEV_DDF}"`
62else
63	echo "ERROR: Can't find "RVLSysFileName" section in DDF file."
64	exit 1
65fi
66
67_TMP=${_TMP//"RVLSysFileName="/}
68_TMP=${_TMP//\\//}
69_TMP=${_TMP//(/{}
70_TMP=${_TMP//)/\}}
71_TMP=${_TMP//"	"/}
72_TMP=${_TMP//" "/}
73eval NDRUN_PRECHK_RVLBIN=`echo "${_TMP}" |tr -d '\r'`
74
75if [ ! -f "${NDRUN_PRECHK_RVLBIN}" ] ; then
76	echo "ERROR: Can't find ${NDRUN_PRECHK_RVLBIN} file"
77	exit 1
78fi
79
80NDRUN_PRECHK_RVLBIN_SIZE=`stat -c %s "${NDRUN_PRECHK_RVLBIN}"`
81NDRUN_PRECHK_RVLBIN_FW_ADDR=`expr ${NDRUN_PRECHK_RVLBIN_SIZE} - 32 \* 1024 + 1099 `
82NDRUN_PRECHK_RVLBIN_FW_VERSION0="`od -A n -tu1 -j ${NDRUN_PRECHK_RVLBIN_FW_ADDR} -N 1 ${NDRUN_PRECHK_RVLBIN}`"
83NDRUN_PRECHK_RVLBIN_FW_VERSION=`printf "%d" $NDRUN_PRECHK_RVLBIN_FW_VERSION0`
84
85# ------------------------------------------------------------------------------
86# CHECK FIRMWARE TYPE "for extension" or "for standard"
87# ------------------------------------------------------------------------------
88NDRUN_PRECHK_FW_TYPE='UNKNOWN'
89for f in ${FW_FOR_EXTENSION} ; do
90	if [ ."${NDRUN_PRECHK_RVLBIN_FW_VERSION}" = .$f ] ; then
91		NDRUN_PRECHK_FW_TYPE='NET'
92	fi
93done
94for f in ${FW_FOR_STANDARD} ; do
95	if [ ."${NDRUN_PRECHK_RVLBIN_FW_VERSION}" = .$f ] ; then
96		NDRUN_PRECHK_FW_TYPE='standard'
97	fi
98done
99
100# ------------------------------------------------------------------------------
101# CHECK REGION rvl.bin
102# ------------------------------------------------------------------------------
103NDRUN_PRECHK_RVLBIN_REGION_ADDR="0xe003"
104NDRUN_PRECHK_RVLBIN_REGION_NUM="`od -A n -td1 -j ${NDRUN_PRECHK_RVLBIN_REGION_ADDR} -N 1 ${NDRUN_PRECHK_RVLBIN}`"
105
106if [ "${NDRUN_PRECHK_RVLBIN_REGION_NUM}" -eq '0' ] ; then
107	NDRUN_PRECHK_RVLBIN_REGION="JP"
108elif [ "$NDRUN_PRECHK_RVLBIN_REGION_NUM" -eq '1' ] ; then
109	NDRUN_PRECHK_RVLBIN_REGION="US"
110elif [ "${NDRUN_PRECHK_RVLBIN_REGION_NUM}" -eq '2' ] ; then
111	NDRUN_PRECHK_RVLBIN_REGION="EU"
112else
113	NDRUN_PRECHK_RVLBIN_REGION="region number: ${NDRUN_PRECHK_RVLBIN_REGION_NUM}"
114fi
115
116# ------------------------------------------------------------------------------
117# CHECK MEM2 SIZE in bi2.bin
118# ------------------------------------------------------------------------------
119I_MEM2_SIZE=`peekBI2.exe -i "${REVOLUTION_SDK_ROOT}"/X86/bin/bi2.bin 0x2c`
120
121# ------------------------------------------------------------------------------
122# CHECK PARENTAL in rvl.bin
123# ------------------------------------------------------------------------------
124# NDRUN_PRECHK_RVLBIN_PARENTAL_ADDR="0xe01f"
125# NDRUN_PRECHK_RVLBIN_PARENTAL_CODE="`od -A n -td1 -j ${NDRUN_PRECHK_RVLBIN_PARENTAL_ADDR} -N 1 ${NDRUN_PRECHK_RVLBIN}`"
126
127# ------------------------------------------------------------------------------
128# CHECK DvdRoot
129# ------------------------------------------------------------------------------
130NDRUN_PRECHK_DVDROOT=`getndenv`
131NDRUN_PRECHK_DVDROOT=${NDRUN_PRECHK_DVDROOT//"\"DvdRoot\""/}
132NDRUN_PRECHK_DVDROOT=${NDRUN_PRECHK_DVDROOT//"	"/}
133NDRUN_PRECHK_DVDROOT=${NDRUN_PRECHK_DVDROOT//" "/}
134
135# ------------------------------------------------------------------------------
136# CHECK LIB(NWC24 = use RevoEX, SO) in ELF for identify the extension associated
137# ------------------------------------------------------------------------------
138if grep -qa "__NWC24Version" "${NDRUN_PRECHK_ELF_NAME}"
139then
140	IS_LINK_NWC24="TRUE"
141else
142	IS_LINK_NWC24="FALSE"
143fi
144
145if grep -qa "__SOVersion" "${NDRUN_PRECHK_ELF_NAME}"
146then
147	IS_LINK_SO="TRUE"
148else
149	IS_LINK_SO="FALSE"
150fi
151
152# ------------------------------------------------------------------------------
153# PRINT ENV
154# ------------------------------------------------------------------------------
155echo "**********************************************************************"
156echo "* YOUR BOOT ENVIRONMENT"
157echo "**********************************************************************"
158if [ ."$NDRUN_PRECHK_FW_TYPE" = '.standard' ] ; then		# NOT USE extension
159	echo "* firmware version : ${NDRUN_PRECHK_RVLBIN_FW_VERSION}.x.x (for standard)"
160elif [ ."$NDRUN_PRECHK_FW_TYPE" = '.NET' ] ; then		# USE extension
161	echo "* firmware version : ${NDRUN_PRECHK_RVLBIN_FW_VERSION}.x.x (for extension)"
162else
163	echo "* firmware version : ${NDRUN_PRECHK_RVLBIN_FW_VERSION}.x.x (unexpected version)"
164fi
165
166if [ ."$I_MEM2_SIZE" = ".67108864(0x04000000)" ] ; then
167	echo "* mem2 size        : 64 MB"
168else
169	echo "* mem2 size        : 128 MB"
170fi
171echo "* country code     : ${NDRUN_PRECHK_RVLBIN_REGION}"
172#echo "* parental         :"
173echo "* DvdRoot          : ${NDRUN_PRECHK_DVDROOT}"
174echo "**********************************************************************"
175echo ""
176
177# ------------------------------------------------------------------------------
178# JUDGMENT
179# ------------------------------------------------------------------------------
180if [ ."$NDRUN_PRECHK_FW_TYPE" = '.standard' ] ; then		# NOT USE extension
181	if [ ."$IS_LINK_NWC24" = '.TRUE' -o ."$IS_LINK_SO" = '.TRUE' ] ; then
182		echo
183		echo "WARNNING >>> Wrong firmware version."
184		echo
185		echo "This ELF is a program only for extension."
186		echo "You must not use the firmware for standard."
187		echo "* Expected : ${FW_FOR_EXTENSION}.x.x"
188		echo "* Actual   : ${NDRUN_PRECHK_RVLBIN_FW_VERSION}.x.x"
189		echo
190		echo "If you want to continue, please press RETURN"
191		read
192	fi
193elif [ ."$NDRUN_PRECHK_FW_TYPE" = '.NET' ] ; then		# USE extension
194	if [ ."$IS_LINK_NWC24" = '.FALSE' -a ."$IS_LINK_SO" = '.FALSE' ] ; then
195		echo
196		echo "WARNNING >>> Wrong firmware version."
197		echo
198		echo "This ELF is a program only for standard."
199		echo "You must not use the firmware for extension."
200		echo "* Expected : ${FW_FOR_STANDARD}.x.x"
201		echo "* Actual   : ${NDRUN_PRECHK_RVLBIN_FW_VERSION}.x.x"
202		echo
203		echo "If you want to continue, please press RETURN"
204		read
205	fi
206fi
207
208