home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2007 January, February, March & April
/
Chip-Cover-CD-2007-02.iso
/
boot
/
i386
/
root
/
usr
/
share
/
YaST2
/
modules
/
Hotplug.ycp
< prev
next >
Wrap
Text File
|
2006-11-29
|
5KB
|
211 lines
/**
* File:
* Hotplug.ycp
*
* Module:
* Hotplug
*
* Summary:
* provide hotplug (USB, FireWire, PCMCIA) functions
*
* $Id: Hotplug.ycp 22825 2005-03-29 09:31:42Z jsrain $
*
* Authors:
* Klaus Kaempf <kkaempf@suse.de>
* Arvin Schnell <arvin@suse.de>
*/
{
module "Hotplug";
import "Arch";
import "ModuleLoading";
import "HwStatus";
import "Linuxrc";
import "Mode";
/**
* if a usb controller was found and initialized
*/
global boolean haveUSB = false;
/**
* if a firewire controller was found and initialized
*/
global boolean haveFireWire = false;
// start a controller (by loading its module)
// return true if successfull
// return false if failed
define boolean startController (map controller)
``{
// check module information
// skip controller if no module info available
list<map> module_drivers = controller["drivers"]:[];
if (size (module_drivers) == 0)
return true;
// loop through all drivers checking if one is already active
boolean already_active = false;
foreach (map modulemap, module_drivers,
``{
if (modulemap["active"]:true)
{
already_active = true;
}
});
// save unique key for HwStatus::Set()
string unique_key = controller["unique_key"]:"";
if (already_active)
{
HwStatus::Set (unique_key, `yes);
return true;
}
boolean stop_loading = false;
boolean one_module_failed = false;
// loop through all drivers defined for this controller
// break after first successful load
// no need to check "active", already done before !
foreach (map modulemap, module_drivers,
``{
y2milestone ("modulemap: %1", modulemap);
boolean module_modprobe = modulemap["modprobe"]:false;
boolean all_modules_loaded = true;
if (!stop_loading)
{
foreach (list module_entry, modulemap["modules"]:[],
``{
string module_name = module_entry[0]:"";
string module_args = module_entry[1]:"";
symbol load_result = `ok;
if (Linuxrc::manual ())
{
list vendor_device = ModuleLoading::prepareVendorDeviceInfo (controller);
load_result = ModuleLoading::Load (module_name, module_args,
vendor_device[0]:"",
vendor_device[1]:"",
true,
module_modprobe);
}
else
{
load_result = ModuleLoading::Load (module_name, module_args,
"", "",
false, module_modprobe);
}
if (load_result == `fail)
{
all_modules_loaded = false;
}
else if (load_result == `dont)
{
all_modules_loaded = true;
}
// break out of module load loop if one module failed
if (!all_modules_loaded)
{
one_module_failed = true;
}
}); // foreach module of current driver info
} // stop_loading
// break out of driver load loop if all modules of
// the current driver loaded successfully
if (all_modules_loaded)
{
stop_loading = true;
}
}); // foreach driver
HwStatus::Set (unique_key, one_module_failed?`no:`yes);
return (!one_module_failed);
}
/**
* @param none
*
* @returns void
* probe for usb type, load appropriate modules, and mount
* usbfs to /proc/bus/usb
*/
global define void StartUSB ()
``{
if (Arch::sparc ()) // why this and why here ???
return;
list<map> usb_controllers = (list<map>) SCR::Read(.probe.usbctrl);
foreach (map controller, usb_controllers,
``{
boolean start_result = startController (controller);
if (start_result)
haveUSB = true;
});
y2milestone ("haveUSB = %1", haveUSB);
if (haveUSB)
{
// prevent multiple mounts for /proc/bus/usb
list<map> mtab = (list<map>) SCR::Read(.etc.mtab);
if (mtab == nil) mtab = [];
boolean usb_mounted = false;
foreach (map mpoint, mtab,
``{
if (mpoint["file"]:"" == "/proc/bus/usb")
usb_mounted = true;
});
if (!usb_mounted)
SCR::Execute (.target.mount, ["usbfs", "/proc/bus/usb"], "-t usbfs");
}
}
/**
* @param none
*
* @returns void
* probe for firewire type, load appropriate modules, and mount
* usbfs to /proc/bus/usb
*/
global define void StartFireWire ()
``{
if (Arch::sparc ()) // why this and why here ???
return;
list<map> firewire_controllers = (list<map>) SCR::Read (.probe.ieee1394ctrl);
foreach (map controller, firewire_controllers,
``{
boolean start_result = startController (controller);
if (start_result)
haveFireWire = true;
});
y2milestone ("haveFireWire = %1", haveFireWire);
}
}