#!/usr/bin/suidperl my %mod_ign=(powernow_k8 => 1, processor => 1); my @modules; sub getmodules { my @mod; open(MOD, "lsmod|"); while(){ /^(\S+)/; next if $1 eq "Modules"; push @mod, $1; } return @mod; } sub rmmodules { my $no; my $n=-1; my $no=-1; my @mod; do { $no=$n; @mod=getmodules(); for my $m (@mod){ if(!defined($mod_ign{$m})){ system("rmmod $m"); } } $n=$#mod; } while ($no != $n); } sub insmodules { my ($mod)=@_; system("depmod"); for my $m (@$mod){ system("modprobe $m"); } } sub swsuspend_prepare { system("/sbin/ifdown ra0"); @modules=getmodules(); rmmodules(); system("/sbin/rmmod rt2500"); system ("lsmod"); } sub swsuspend_restart { insmodules(\@modules); sleep(4); system("/sbin/modprobe rt2500"); system("/sbin/ifup ra0"); system("/etc/init.d/maxdata start"); } $ENV{"PATH"}="/bin:/sbin:/usr/bin:/usr/sbin"; swsuspend_prepare(); #normal suspend: #system("echo shutdown > /sys/power/disk"); #If you feel ACPI works pretty well: #system("echo platform > /sys/power/disk"); # #To let the firmware write to disk: # system("echo firmware > /sys/power/disk"); # # #activate the swsuspend: # system("echo disk > /sys/power/state"); system("echo mem > /sys/power/state"); swsuspend_restart();