You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							180 lines
						
					
					
						
							5.0 KiB
						
					
					
				
			
		
		
	
	
							180 lines
						
					
					
						
							5.0 KiB
						
					
					
				# --- SDE-COPYRIGHT-NOTE-BEGIN --- | 
						|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch. | 
						|
# | 
						|
# Filename: package/.../stone/stone_mod_hardware.sh | 
						|
# Copyright (C) 2008 The OpenSDE Project | 
						|
# Copyright (C) 2004 - 2006 The T2 SDE Project | 
						|
# Copyright (C) 1998 - 2003 Clifford Wolf | 
						|
# | 
						|
# More information can be found in the files COPYING and README. | 
						|
# | 
						|
# This program is free software; you can redistribute it and/or modify | 
						|
# it under the terms of the GNU General Public License as published by | 
						|
# the Free Software Foundation; version 2 of the License. A copy of the | 
						|
# GNU General Public License can be found in the file COPYING. | 
						|
# --- SDE-COPYRIGHT-NOTE-END --- | 
						|
# | 
						|
# [MAIN] 20 hardware Kernel Drivers and Hardware Configuration | 
						|
 | 
						|
set_hw_setup() { | 
						|
    echo "HARDWARE_SETUP=$1" > /etc/conf/hardware | 
						|
} | 
						|
 | 
						|
flip_hw_config() { | 
						|
	local tmp=`mktemp` | 
						|
	awk "\$0 == \"### $1 ###\", \$0 == \"\" {"' | 
						|
		if ( /^#[^# ]/ ) { | 
						|
			sub("^#", ""); | 
						|
			system($0 " >&2"); | 
						|
		} else { | 
						|
			if ( /^[^# ]/ ) $0 = "#" $0; | 
						|
			if (/^#modprobe /) { | 
						|
				cmd = $0; | 
						|
				sub("^#modprobe", "modprobe -r", cmd); | 
						|
				system(cmd " >&2"); | 
						|
			} | 
						|
			if (/^#mount /) { | 
						|
				cmd = $0; | 
						|
				sub("^#mount .* ", "umount ", cmd); | 
						|
				system(cmd " >&2"); | 
						|
			} | 
						|
		} | 
						|
	} { print; }' < /etc/conf/kernel > $tmp | 
						|
	cat $tmp > /etc/conf/kernel; rm -f $tmp | 
						|
 | 
						|
	# this is needed to e.g. initialize /proc/bus/usb/devices | 
						|
	sleep 1 | 
						|
} | 
						|
 | 
						|
add_hw_config() { | 
						|
	case $state in | 
						|
		1) cmd="$cmd '[ ] $name'" ;; | 
						|
		2) cmd="$cmd '[*] $name'" ;; | 
						|
		*) cmd="$cmd '[?] $name'" ;; | 
						|
	esac | 
						|
	case $state in | 
						|
		1|2) cmd="$cmd 'flip_hw_config \"$id\"'" ;; | 
						|
		*)   cmd="$cmd 'true'" ;; | 
						|
	esac | 
						|
	id= | 
						|
} | 
						|
 | 
						|
store_clock() { | 
						|
	if [ -f /etc/conf/clock ] ; then | 
						|
		sed -e "s/clock_tz=.*/clock_tz=$clock_tz/" \ | 
						|
		    -e "s/clock_rtc=.*/clock_rtc=$clock_rtc/" \ | 
						|
		  < /etc/conf/clock > /etc/conf/clock.tmp | 
						|
		grep -q clock_tz= /etc/conf/clock.tmp || \ | 
						|
		  echo clock_tz=$clock_tz >> /etc/conf/clock.tmp | 
						|
		grep -q clock_rtc= /etc/conf/clock.tmp || \ | 
						|
		  echo clock_rtc=$clock_rtc >> /etc/conf/clock.tmp | 
						|
		mv /etc/conf/clock.tmp /etc/conf/clock | 
						|
	else | 
						|
		echo -e "clock_tz=$clock_tz\nclock_rtc=$clock_rtc\n" \ | 
						|
		  > /etc/conf/clock | 
						|
	fi | 
						|
	if [ -w /proc/sys/dev/rtc/max-user-freq -a "$clock_rtc" ] ; then | 
						|
		echo $clock_rtc > /proc/sys/dev/rtc/max-user-freq | 
						|
	fi | 
						|
} | 
						|
 | 
						|
set_zone() { | 
						|
	clock_tz=$1 | 
						|
	hwclock --hctosys --$clock_tz | 
						|
	store_clock | 
						|
} | 
						|
 | 
						|
set_rtc() { | 
						|
	gui_input "Set new enhanced real time clock precision" \ | 
						|
                  "$clock_rtc" "clock_rtc" | 
						|
	store_clock | 
						|
} | 
						|
 | 
						|
main() { | 
						|
    while | 
						|
        HARDWARE_SETUP=rockplug | 
						|
	if [ -f /etc/conf/hardware ]; then | 
						|
	    . /etc/conf/hardware | 
						|
	fi | 
						|
	for x in hwscan rockplug; do | 
						|
	    if [ "$HARDWARE_SETUP" = $x ]; then | 
						|
		eval "hw_$x='<*>'" | 
						|
	    else | 
						|
		eval "hw_$x='< >'" | 
						|
	    fi | 
						|
	done | 
						|
 | 
						|
	clock_tz=utc | 
						|
	clock_rtc="`cat /proc/sys/dev/rtc/max-user-freq 2> /dev/null`" | 
						|
	if [ -f /etc/conf/clock ]; then | 
						|
	    . /etc/conf/clock | 
						|
	fi | 
						|
 | 
						|
	cmd="gui_menu hw 'Kernel Drivers and Hardware Configuration'" | 
						|
	if [ "$HARDWARE_SETUP" = rockplug ]; then | 
						|
	    cmd="$cmd \"$hw_rockplug Use ROCKPLUG to configure hardware.\"" | 
						|
	    cmd="$cmd \"set_hw_setup rockplug\""; | 
						|
	    cmd="$cmd \"$hw_hwscan Use hwscan to configure hardware.\"" | 
						|
	    cmd="$cmd \"set_hw_setup hwscan\""; | 
						|
	    cmd="$cmd \"\" \"\""; | 
						|
	    cmd="$cmd 'Edit/View PCI configuration'"; | 
						|
	    cmd="$cmd \"gui_edit PCI /etc/conf/pci\"" | 
						|
	    cmd="$cmd 'Edit/View USB configuration'"; | 
						|
	    cmd="$cmd \"gui_edit USB /etc/conf/usb\"" | 
						|
	    cmd="$cmd \"\" \"\""; | 
						|
 | 
						|
	    #@FIXME single shot menu? | 
						|
 | 
						|
	    cmd="$cmd 'Re-create initrd image (mkinitrd, `uname -r`)'" | 
						|
	    cmd="$cmd 'gui_cmd mkinitrd mkinitrd' '' ''" | 
						|
	fi | 
						|
 | 
						|
	if [ "$HARDWARE_SETUP" = hwscan ]; then | 
						|
	    cmd="$cmd \"$hw_rockplug Use ROCKPLUG to configure hardware.\" \"set_hw_setup rockplug\""; | 
						|
	    cmd="$cmd \"$hw_hwscan Use hwscan to configure hardware.\" \"set_hw_setup hwscan\""; | 
						|
	    cmd="$cmd \"\" \"\""; | 
						|
	    cmd="$cmd 'Edit /etc/conf/kernel (kernel drivers config file)'" | 
						|
	    cmd="$cmd \"gui_edit 'Kernel Drivers Config File' /etc/conf/kernel\"" | 
						|
	    cmd="$cmd 'Re-create initrd image (mkinitrd, `uname -r`)'" | 
						|
	    cmd="$cmd 'gui_cmd mkinitrd mkinitrd' '' ''" | 
						|
	    hwscan -d -s /etc/conf/kernel | 
						|
 | 
						|
	    id= | 
						|
	    while read line; do | 
						|
		if [ "${line#\#\#\# }" != "${line}" -a \ | 
						|
		    "${line% \#\#\#}" != "${line}" ] | 
						|
		    then | 
						|
		    id="${line#\#\#\# }"; id="${id% \#\#\#}" | 
						|
		    state=0; name="Unamed Kernel Driver" | 
						|
		elif [ -z "$id" ]; then | 
						|
		    continue | 
						|
		elif [ "${line#\# }" != "${line}" ]; then | 
						|
		    name="${line#\# }" | 
						|
		elif [ "${line#\#[!\# ]}" != "${line}" ]; then | 
						|
		    [ $state -eq 0 ] && state=1 | 
						|
		    [ $state -eq 2 ] && state=3 | 
						|
		elif [ "${line#[!\# ]}" != "${line}" ]; then | 
						|
		    [ $state -eq 0 ] && state=2 | 
						|
		    [ $state -eq 1 ] && state=3 | 
						|
		elif [ -z "$line" ]; then | 
						|
		    add_hw_config | 
						|
		fi | 
						|
	    done < /etc/conf/kernel | 
						|
	    [ -z "$id" ] || add_hw_config | 
						|
	    cmd="$cmd '' ''" | 
						|
	fi | 
						|
 | 
						|
	if [ "$clock_tz" = localtime ] ; then | 
						|
	    cmd="$cmd '[*] Use localtime instead of utc' 'set_zone utc'" | 
						|
	else | 
						|
	    cmd="$cmd '[ ] Use localtime instead of utc' 'set_zone localtime'" | 
						|
	    clock_tz=utc | 
						|
	fi | 
						|
	cmd="$cmd 'Set enhanced real time clock precision ($clock_rtc)' set_rtc" | 
						|
 | 
						|
	eval "$cmd" | 
						|
    do : ; done | 
						|
 | 
						|
    return | 
						|
} | 
						|
 | 
						|
 |