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. ${REVOLUTION_SDK_ROOT}/X86/bin/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	f=`echo $f|sed s/.[^\.]*.[^\.]*$//`
91	if [ ."${NDRUN_PRECHK_RVLBIN_FW_VERSION}" = .$f ] ; then
92		NDRUN_PRECHK_FW_TYPE='NET'
93	fi
94done
95for f in ${FW_FOR_STANDARD} ; do
96	f=`echo $f|sed s/.[^\.]*.[^\.]*$//`
97	if [ ."${NDRUN_PRECHK_RVLBIN_FW_VERSION}" = .$f ] ; then
98		NDRUN_PRECHK_FW_TYPE='standard'
99	fi
100done
101
102# ------------------------------------------------------------------------------
103# CHECK REGION rvl.bin
104# ------------------------------------------------------------------------------
105NDRUN_PRECHK_RVLBIN_REGION_ADDR="0xe003"
106NDRUN_PRECHK_RVLBIN_REGION_NUM="`od -A n -td1 -j ${NDRUN_PRECHK_RVLBIN_REGION_ADDR} -N 1 ${NDRUN_PRECHK_RVLBIN}`"
107
108if [ "${NDRUN_PRECHK_RVLBIN_REGION_NUM}" -eq '0' ] ; then
109	NDRUN_PRECHK_RVLBIN_REGION="JP"
110elif [ "$NDRUN_PRECHK_RVLBIN_REGION_NUM" -eq '1' ] ; then
111	NDRUN_PRECHK_RVLBIN_REGION="US"
112elif [ "${NDRUN_PRECHK_RVLBIN_REGION_NUM}" -eq '2' ] ; then
113	NDRUN_PRECHK_RVLBIN_REGION="EU"
114elif [ "${NDRUN_PRECHK_RVLBIN_REGION_NUM}" -eq '4' ] ; then
115	NDRUN_PRECHK_RVLBIN_REGION="KR"
116elif [ "${NDRUN_PRECHK_RVLBIN_REGION_NUM}" -eq '5' ] ; then
117	NDRUN_PRECHK_RVLBIN_REGION="CN"
118else
119	NDRUN_PRECHK_RVLBIN_REGION="region number: ${NDRUN_PRECHK_RVLBIN_REGION_NUM}"
120fi
121
122# ------------------------------------------------------------------------------
123# CHECK MEM2 SIZE in bi2.bin
124# ------------------------------------------------------------------------------
125I_MEM2_SIZE=`peekBI2.exe -i "${REVOLUTION_SDK_ROOT}"/X86/bin/bi2.bin 0x2c`
126
127# ------------------------------------------------------------------------------
128# CHECK PARENTAL in rvl.bin
129# ------------------------------------------------------------------------------
130# NDRUN_PRECHK_RVLBIN_PARENTAL_ADDR="0xe01f"
131# NDRUN_PRECHK_RVLBIN_PARENTAL_CODE="`od -A n -td1 -j ${NDRUN_PRECHK_RVLBIN_PARENTAL_ADDR} -N 1 ${NDRUN_PRECHK_RVLBIN}`"
132
133# ------------------------------------------------------------------------------
134# CHECK DvdRoot
135# ------------------------------------------------------------------------------
136NDRUN_PRECHK_DVDROOT=`getndenv`
137NDRUN_PRECHK_DVDROOT=${NDRUN_PRECHK_DVDROOT//"\"DvdRoot\""/}
138NDRUN_PRECHK_DVDROOT=${NDRUN_PRECHK_DVDROOT//"	"/}
139NDRUN_PRECHK_DVDROOT=${NDRUN_PRECHK_DVDROOT//" "/}
140
141# ------------------------------------------------------------------------------
142# CHECK LIB(NWC24 = use RevoEX, SO) in ELF for identify the extension associated
143# ------------------------------------------------------------------------------
144if grep -qa "__NWC24Version" "${NDRUN_PRECHK_ELF_NAME}"
145then
146	IS_LINK_NWC24="TRUE"
147else
148	IS_LINK_NWC24="FALSE"
149fi
150
151if grep -qa "__SOVersion" "${NDRUN_PRECHK_ELF_NAME}"
152then
153	IS_LINK_SO="TRUE"
154else
155	IS_LINK_SO="FALSE"
156fi
157
158if grep -qa "__HIDVersion" "${NDRUN_PRECHK_ELF_NAME}"
159then
160	IS_LINK_HID="TRUE"
161else
162	IS_LINK_HID="FALSE"
163fi
164
165# ------------------------------------------------------------------------------
166# PRINT ENV
167# ------------------------------------------------------------------------------
168echo "**********************************************************************"
169echo "* YOUR BOOT ENVIRONMENT"
170echo "**********************************************************************"
171if [ ."$NDRUN_PRECHK_FW_TYPE" = '.standard' ] ; then		# NOT USE extension
172	echo "* firmware version : ${NDRUN_PRECHK_RVLBIN_FW_VERSION}.x.x (for standard)"
173elif [ ."$NDRUN_PRECHK_FW_TYPE" = '.NET' ] ; then		# USE extension
174	echo "* firmware version : ${NDRUN_PRECHK_RVLBIN_FW_VERSION}.x.x (for extension)"
175else
176	echo "* firmware version : ${NDRUN_PRECHK_RVLBIN_FW_VERSION}.x.x (unexpected version)"
177fi
178
179if [ ."$I_MEM2_SIZE" = ".67108864(0x04000000)" ] ; then
180	echo "* mem2 size        : 64 MB"
181else
182	echo "* mem2 size        : 128 MB"
183fi
184echo "* country code     : ${NDRUN_PRECHK_RVLBIN_REGION}"
185#echo "* parental         :"
186echo "* DvdRoot          : ${NDRUN_PRECHK_DVDROOT}"
187echo "**********************************************************************"
188echo ""
189
190# ------------------------------------------------------------------------------
191# JUDGMENT
192# ------------------------------------------------------------------------------
193if [ ."$NDRUN_PRECHK_FW_TYPE" = '.standard' ] ; then		# NOT USE extension
194	if [ ."$IS_LINK_NWC24" = '.TRUE' -o ."$IS_LINK_SO" = '.TRUE' -o ."$IS_LINK_HID" = '.TRUE' ] ; then
195		echo
196		echo "WARNNING >>> Wrong firmware version."
197		echo
198		echo "This elf requires extension firmware (not standard firmware)."
199		echo "Please change the firmware using the setfirmware command."
200		echo "* Expected : `echo ${FW_FOR_EXTENSION}|sed s/.[^\.]*.[^\.]*$//`.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
206elif [ ."$NDRUN_PRECHK_FW_TYPE" = '.NET' ] ; then		# USE extension
207	if [ ."$IS_LINK_NWC24" = '.FALSE' -a ."$IS_LINK_SO" = '.FALSE' -a ."$IS_LINK_HID" = '.FALSE' ] ; then
208		echo
209		echo "WARNNING >>> Wrong firmware version."
210		echo
211		echo "This elf requires standard firmware (not extention firmware)."
212		echo "Please change the firmware using the setfirmware command."
213		echo "* Expected : `echo ${FW_FOR_STANDARD}|sed s/.[^\.]*.[^\.]*$//`.x.x"
214		echo "* Actual   : ${NDRUN_PRECHK_RVLBIN_FW_VERSION}.x.x"
215		echo
216		echo "If you want to continue, please press RETURN"
217		read
218	fi
219fi
220
221