#!/bin/sh

runlevel=S
prevlevel=N
umask 022
export runlevel prevlevel

# source defaults
. /etc/default/rcS

. /etc/profile
. /etc/init.d/functions
. /etc/init.d/globals

SHOWINFO "start"

# init system
SHOWINFO "creating and mounting system directories ..."
mount -t proc proc /proc
mount -t sysfs sys /sys
mount -t tmpfs tmp /tmp
mount -t tmpfs media /media
mount -t tmpfs srv /srv
mount -t tmpfs mnt /mnt
for dir in autofs epg logos logos/events movies music pictures plugins; do
	mkdir -p /mnt/${dir}
done
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
mkdir -p /dev/shm/usb
mount -t usbfs none /proc/bus/usb

# for nfsd
mkdir -p /var/lib/nfs
mount -t tmpfs nfs /var/lib/nfs

# for samba
mkdir -p /var/samba
mount -t tmpfs samba /var/samba

# for wget
mkdir -p /var/run/wget

# for wireless drivers
mkdir -p /var/run/wpa_supplicant

# set level of messages printed to console
dmesg -n 1

# set dummy date
test -e /etc/date-dummy && date -s "$(cat /etc/date-dummy)"

# create nodes
# <name>		<type>	<mode>	<uid>	<gid>	<major>	<minor>	<start>	<inc>	<count>
makedevs /dev << EONODES
watchdog		c	644	0	0	10	130
cnxt			d	755	0	0
cnxt/cnxt_gen_drv	c	644	0	0	102	0
notifyq			c	644	0	0	102	1
user_kal		c	644	0	0	102	2
display			c	644	0	0	238	0
cs_control		c	644	0	0	249	0
input			d	755	0	0
input/nevis_ir		c	644	0	0	240	0
input/event0_uinput	c	644	0	0	10	223
input/mouse		c	644	0	0	13	32	0	1	4
input/event2		c	644	0	0	13	66
input/event3		c	644	0	0	13	67
EONODES

ln -sf nevis_ir /dev/input/event0
ln -sf nevis_ir /dev/input/input0

# set hostname
service hostname start

# logging as much as possible
service syslogd start

LOGINFO "init frontpanel ..."
insmod cs_frontpanel.ko

# update kernel
if [ -x /etc/init.d/stb_update.sh ]; then
	/etc/init.d/stb_update.sh
fi

# update system
if [ -x /etc/init.d/sys_update.sh ]; then
	/etc/init.d/sys_update.sh
fi

# mdev coldplug for node permissions
service mdev start

# initialize hardware
LOGINFO "init hardware ..."
dt -t"INIT HARDWARE"
insmod cnxt_kal.ko
insmod cnxt_base.ko init=1

if [ -e /var/etc/.scart_osd_fix ]; then
	insmod cnxt_fb.ko cnxtfb_standalone=1 cnxtfb_width=720 cnxtfb_height=576	#PAL
elif [ -e /var/etc/.scart_osd_fix_wide ]; then
	insmod cnxt_fb.ko cnxtfb_standalone=1 cnxtfb_width=1024 cnxtfb_height=576	#PAL widescreen
else
	insmod cnxt_fb.ko cnxtfb_standalone=1 cnxtfb_width=1280 cnxtfb_height=720	#HDTV
fi

insmod cnxt_lnx.ko
insmod cnxt_alsa.ko

if [ -e /var/etc/.hddpower ]; then
	insmod cs_control.ko hdd_power=1
else
	insmod cs_control.ko
fi

insmod cnxt_i2c.ko
insmod cnxt_sata_drv.ko

LOGINFO "init drivers ..."
dt -t"INIT DRIVERS"

insmod 8712u.ko
insmod 8192cu.ko
insmod rt2870sta.ko

# fire up network/wlan
service networking start
service ntpdate start

# load rest of modules
insmod cifs.ko
insmod fuse.ko
insmod usbserial.ko
insmod ftdi_sio.ko
insmod tun.ko
insmod pl2303.ko
insmod stv6110.ko verbose=0
insmod stv090x.ko verbose=0
insmod tda10023.ko
insmod avl2108.ko
insmod max2112.ko
insmod cs_frontend_prop.ko
insmod dvb-core.ko
insmod cs_frontend.ko

# say hi to everyone
dt -ls01
dt -ls02
dt -c
dt -t"BOOT NI-IMAGE"

# trap CTRL-C only in this shell so we can interrupt subprocesses
trap ":" INT QUIT TSTP

# call all parts in order
exec /etc/init.d/rc S

SHOWINFO "done"