summaryrefslogtreecommitdiff
path: root/drivers/base/Makefile
AgeCommit message (Collapse)Author
2009-09-15Driver Core: devtmpfs - kernel-maintained tmpfs-based /devKay Sievers
Devtmpfs lets the kernel create a tmpfs instance called devtmpfs very early at kernel initialization, before any driver-core device is registered. Every device with a major/minor will provide a device node in devtmpfs. Devtmpfs can be changed and altered by userspace at any time, and in any way needed - just like today's udev-mounted tmpfs. Unmodified udev versions will run just fine on top of it, and will recognize an already existing kernel-created device node and use it. The default node permissions are root:root 0600. Proper permissions and user/group ownership, meaningful symlinks, all other policy still needs to be applied by userspace. If a node is created by devtmps, devtmpfs will remove the device node when the device goes away. If the device node was created by userspace, or the devtmpfs created node was replaced by userspace, it will no longer be removed by devtmpfs. If it is requested to auto-mount it, it makes init=/bin/sh work without any further userspace support. /dev will be fully populated and dynamic, and always reflect the current device state of the kernel. With the commonly used dynamic device numbers, it solves the problem where static devices nodes may point to the wrong devices. It is intended to make the initial bootup logic simpler and more robust, by de-coupling the creation of the inital environment, to reliably run userspace processes, from a complex userspace bootstrap logic to provide a working /dev. Signed-off-by: Kay Sievers <kay.sievers@vrfy.org> Signed-off-by: Jan Blunck <jblunck@suse.de> Tested-By: Harald Hoyer <harald@redhat.com> Tested-By: Scott James Remnant <scott@ubuntu.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2009-09-15driver-core: move dma-coherent.c from kernel to driver/baseMing Lei
Placing dma-coherent.c in driver/base is better than in kernel, since it contains code to do per-device coherent dma memory handling. Signed-off-by: Ming Lei <tom.leiming@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2009-01-03select IOMMU_API when DMAR and/or AMD_IOMMU is selectedJoerg Roedel
These two IOMMUs can implement the current version of this API. So select the API if one or both of these IOMMU drivers is selected. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
2008-02-05Merge branch 'dmapool' of ↵Linus Torvalds
git://git.kernel.org/pub/scm/linux/kernel/git/willy/misc * 'dmapool' of git://git.kernel.org/pub/scm/linux/kernel/git/willy/misc: pool: Improve memory usage for devices which can't cross boundaries Change dmapool free block management dmapool: Tidy up includes and add comments dmapool: Validate parameters to dma_pool_create Avoid taking waitqueue lock in dmapool dmapool: Fix style problems Move dmapool.c to mm/ directory
2008-01-24driver core: fix build with SYSFS=nRandy Dunlap
When SYSFS=n and MODULES=y, build ends with: linux-2.6.24-rc6-mm1/drivers/base/module.c: In function 'module_add_driver': linux-2.6.24-rc6-mm1/drivers/base/module.c:49: error: 'module_kset' undeclared (first use in this function) make[3]: *** [drivers/base/module.o] Error 1 Below is one possible fix. Build-tested with all 4 config combinations of SYSFS & MODULES. Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2008-01-24Driver core: move the driver specific module code into the driver coreGreg Kroah-Hartman
The module driver specific code should belong in the driver core, not in the kernel/ directory. So move this code. This is done in preparation for some struct device_driver rework that should be confined to the driver core code only. This also lets us keep from exporting these functions, as no external code should ever be calling it. Thanks to Andrew Morton for the !CONFIG_MODULES fix. Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2007-12-04Move dmapool.c to mm/ directoryMatthew Wilcox
Signed-off-by: Matthew Wilcox <willy@linux.intel.com>
2007-05-07Introduce CONFIG_HAS_DMAHeiko Carstens
Architectures that don't support DMA can say so by adding a config NO_DMA to their Kconfig file. This will prevent compilation of some dma specific driver code. Also dma-mapping-broken.h isn't needed anymore on at least s390. This avoids compilation and linking of otherwise dead/broken code. Other architectures that include dma-mapping-broken.h are arm26, h8300, m68k, m68knommu and v850. If these could be converted as well we could get rid of the header file. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> "John W. Linville" <linville@tuxdriver.com> Cc: Kyle McMartin <kyle@parisc-linux.org> Cc: <James.Bottomley@SteelEye.com> Cc: Tejun Heo <htejun@gmail.com> Cc: Jeff Garzik <jeff@garzik.org> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: <geert@linux-m68k.org> Cc: <zippel@linux-m68k.org> Cc: <spyro@f2s.com> Cc: <uclinux-v850@lsi.nec.co.jp> Cc: <ysato@users.sourceforge.jp> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2007-02-09devres: device resource managementTejun Heo
Implement device resource management, in short, devres. A device driver can allocate arbirary size of devres data which is associated with a release function. On driver detach, release function is invoked on the devres data, then, devres data is freed. devreses are typed by associated release functions. Some devreses are better represented by single instance of the type while others need multiple instances sharing the same release function. Both usages are supported. devreses can be grouped using devres group such that a device driver can easily release acquired resources halfway through initialization or selectively release resources (e.g. resources for port 1 out of 4 ports). This patch adds devres core including documentation and the following managed interfaces. * alloc/free : devm_kzalloc(), devm_kzfree() * IO region : devm_request_region(), devm_release_region() * IRQ : devm_request_irq(), devm_free_irq() * DMA : dmam_alloc_coherent(), dmam_free_coherent(), dmam_declare_coherent_memory(), dmam_pool_create(), dmam_pool_destroy() * PCI : pcim_enable_device(), pcim_pin_device(), pci_is_managed() * iomap : devm_ioport_map(), devm_ioport_unmap(), devm_ioremap(), devm_ioremap_nocache(), devm_iounmap(), pcim_iomap_table(), pcim_iomap(), pcim_iounmap() Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
2006-10-01[PATCH] hot-add-mem x86_64: use CONFIG_MEMORY_HOTPLUG_SPARSEKeith Mannthey
Migate CONFIG_MEMORY_HOTPLUG to CONFIG_MEMORY_HOTPLUG_SPARSE where needed. Signed-off-by: Keith Mannthey <kmannth@us.ibm.com> Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: Andi Kleen <ak@muc.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-06-21[PATCH] Driver model: add ISA busRene Herman
During the recent "isa drivers using platform devices" discussion it was pointed out that (ALSA) ISA drivers ran into the problem of not having the option to fail driver load (device registration rather) upon not finding their hardware due to a probe() error not being passed up through the driver model. In the course of that, I suggested a seperate ISA bus might be best; Russell King agreed and suggested this bus could use the .match() method for the actual device discovery. The attached does this. For this old non (generically) discoverable ISA hardware only the driver itself can do discovery so as a difference with the platform_bus, this isa_bus also distributes match() up to the driver. As another difference: these devices only exist in the driver model due to the driver creating them because it might want to drive them, meaning that all device creation has been made internal as well. The usage model this provides is nice, and has been acked from the ALSA side by Takashi Iwai and Jaroslav Kysela. The ALSA driver module_init's now (for oldisa-only drivers) become: static int __init alsa_card_foo_init(void) { return isa_register_driver(&snd_foo_isa_driver, SNDRV_CARDS); } static void __exit alsa_card_foo_exit(void) { isa_unregister_driver(&snd_foo_isa_driver); } Quite like the other bus models therefore. This removes a lot of duplicated init code from the ALSA ISA drivers. The passed in isa_driver struct is the regular driver struct embedding a struct device_driver, the normal probe/remove/shutdown/suspend/resume callbacks, and as indicated that .match callback. The "SNDRV_CARDS" you see being passed in is a "unsigned int ndev" parameter, indicating how many devices to create and call our methods with. The platform_driver callbacks are called with a platform_device param; the isa_driver callbacks are being called with a "struct device *dev, unsigned int id" pair directly -- with the device creation completely internal to the bus it's much cleaner to not leak isa_dev's by passing them in at all. The id is the only thing we ever want other then the struct device * anyways, and it makes for nicer code in the callbacks as well. With this additional .match() callback ISA drivers have all options. If ALSA would want to keep the old non-load behaviour, it could stick all of the old .probe in .match, which would only keep them registered after everything was found to be present and accounted for. If it wanted the behaviour of always loading as it inadvertently did for a bit after the changeover to platform devices, it could just not provide a .match() and do everything in .probe() as before. If it, as Takashi Iwai already suggested earlier as a way of following the model from saner buses more closely, wants to load when a later bind could conceivably succeed, it could use .match() for the prerequisites (such as checking the user wants the card enabled and that port/irq/dma values have been passed in) and .probe() for everything else. This is the nicest model. To the code... This exports only two functions; isa_{,un}register_driver(). isa_register_driver() register's the struct device_driver, and then loops over the passed in ndev creating devices and registering them. This causes the bus match method to be called for them, which is: int isa_bus_match(struct device *dev, struct device_driver *driver) { struct isa_driver *isa_driver = to_isa_driver(driver); if (dev->platform_data == isa_driver) { if (!isa_driver->match || isa_driver->match(dev, to_isa_dev(dev)->id)) return 1; dev->platform_data = NULL; } return 0; } The first thing this does is check if this device is in fact one of this driver's devices by seeing if the device's platform_data pointer is set to this driver. Platform devices compare strings, but we don't need to do that with everything being internal, so isa_register_driver() abuses dev->platform_data as a isa_driver pointer which we can then check here. I believe platform_data is available for this, but if rather not, moving the isa_driver pointer to the private struct isa_dev is ofcourse fine as well. Then, if the the driver did not provide a .match, it matches. If it did, the driver match() method is called to determine a match. If it did _not_ match, dev->platform_data is reset to indicate this to isa_register_driver which can then unregister the device again. If during all this, there's any error, or no devices matched at all everything is backed out again and the error, or -ENODEV, is returned. isa_unregister_driver() just unregisters the matched devices and the driver itself. More global points/questions... - I'm introducing include/linux/isa.h. It was available but is ofcourse a somewhat generic name. Moving more isa stuff over to it in time is ofcourse fine, so can I have it please? :) - I'm using device_initcall() and added the isa.o (dependent on CONFIG_ISA) after the base driver model things in the Makefile. Will this do, or I really need to stick it in drivers/base/init.c, inside #ifdef CONFIG_ISA? It's working fine. Lastly -- I also looked, a bit, into integrating with PnP. "Old ISA" could be another pnp_protocol, but this does not seem to be a good match, largely due to the same reason platform_devices weren't -- the devices do not have a life of their own outside the driver, meaning the pnp_protocol {get,set}_resources callbacks would need to callback into driver -- which again means you first need to _have_ that driver. Even if there's clean way around that, you only end up inventing fake but valid-form PnP IDs and generally catering to the PnP layer without any practical advantages over this very simple isa_bus. The thing I also suggested earlier about the user echoing values into /sys to set up the hardware from userspace first is... well, cute, but a horrible idea from a user standpoint. Comments ofcourse appreciated. Hope it's okay. As said, the usage model is nice at least. Signed-off-by: Rene Herman <rene.herman@keyaccess.nl>
2006-06-21[PATCH] Driver Core: Add /sys/hypervisor when neededMichael Holzheu
To have a home for all hypervisors, this patch creates /sys/hypervisor. A new config option SYS_HYPERVISOR is introduced, which should to be set by architecture dependent hypervisors (e.g. s390 or Xen). Acked-by: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: Michael Holzheu <holzheu@de.ibm.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2006-02-03[PATCH] Export cpu topology in sysfsZhang, Yanmin
The patch implements cpu topology exportation by sysfs. Items (attributes) are similar to /proc/cpuinfo. 1) /sys/devices/system/cpu/cpuX/topology/physical_package_id: represent the physical package id of cpu X; 2) /sys/devices/system/cpu/cpuX/topology/core_id: represent the cpu core id to cpu X; 3) /sys/devices/system/cpu/cpuX/topology/thread_siblings: represent the thread siblings to cpu X in the same core; 4) /sys/devices/system/cpu/cpuX/topology/core_siblings: represent the thread siblings to cpu X in the same physical package; To implement it in an architecture-neutral way, a new source file, driver/base/topology.c, is to export the 5 attributes. If one architecture wants to support this feature, it just needs to implement 4 defines, typically in file include/asm-XXX/topology.h. The 4 defines are: #define topology_physical_package_id(cpu) #define topology_core_id(cpu) #define topology_thread_siblings(cpu) #define topology_core_siblings(cpu) The type of **_id is int. The type of siblings is cpumask_t. To be consistent on all architectures, the 4 attributes should have deafult values if their values are unavailable. Below is the rule. 1) physical_package_id: If cpu has no physical package id, -1 is the default value. 2) core_id: If cpu doesn't support multi-core, its core id is 0. 3) thread_siblings: Just include itself, if the cpu doesn't support HT/multi-thread. 4) core_siblings: Just include itself, if the cpu doesn't support multi-core and HT/Multi-thread. So be careful when declaring the 4 defines in include/asm-XXX/topology.h. If an attribute isn't defined on an architecture, it won't be exported. Thank Nathan, Greg, Andi, Paul and Venki. The patch provides defines for i386/x86_64/ia64. Signed-off-by: Zhang, Yanmin <yanmin.zhang@intel.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Nick Piggin <nickpiggin@yahoo.com.au> Cc: Greg KH <greg@kroah.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-10-29[PATCH] memory hotplug: sysfs and add/remove functionsDave Hansen
This adds generic memory add/remove and supporting functions for memory hotplug into a new file as well as a memory hotplug kernel config option. Individual architecture patches will follow. For now, disable memory hotplug when swsusp is enabled. There's a lot of churn there right now. We'll fix it up properly once it calms down. Signed-off-by: Matt Tolentino <matthew.e.tolentino@intel.com> Signed-off-by: Dave Hansen <haveblue@us.ibm.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-06-20[PATCH] Move device/driver code to drivers/base/dd.cmochel@digitalimplant.org
This relocates the driver binding/unbinding code to drivers/base/dd.c. This is done for two reasons: One, it's not code related to the bus_type itself; it uses some from that, some from devices, and some from drivers. And Two, it will make it easier to do some of the upcoming lock removal on that code.. Signed-off-by: Patrick Mochel <mochel@digitalimplant.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2005-06-20[PATCH] class: remove class_simple code, as no one in the tree is using it ↵gregkh@suse.de
anymore. Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2005-05-17[PATCH] Driver Core: remove driver model detach_stateDavid Brownell
The driver model has a "detach_state" mechanism that: - Has never been used by any in-kernel drive; - Is superfluous, since driver remove() methods can do the same thing; - Became buggy when the suspend() parameter changed semantics and type; - Could self-deadlock when called from certain suspend contexts; - Is effectively wasted documentation, object code, and headspace. This removes that "detach_state" mechanism; net code shrink, as well as a per-device saving in the driver model and sysfs. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2005-01-17add a generic device transport classJames Bottomley
Transport classes are a mechanism for providing transport specific services to drivers that the more generic command processing layers don't care about. A good example is the SCSI mid-layer not caring about parallel transfer characteristics or providing services for domain validation. Transport classes usually provide a transport specific API at one end and a class interface at the other (for the user to interrogate and set parameters). Originally, transport classes were SCSI specific. However, this code is generic to the device model. As long as you have a generic device representing a storage interface (or device) then you can attach a transport class to it. The new code also allows an arbitrary number of transport classes to be attached to a device, unlike SCSI which only allowed one. This is going to be important for things like SATA and SAS which share the PHY layer (and hence should be capable of sharing a PHY transport class). The generic transport class is designed to operate identically to the current SCSI transport classes, except that it uses generic devices rather than SCSI devices. We have five events: setup add ----- configure ----- remove destroy With callbacks for setup configure and remove. There's also an anonymous transport class which can only respond to configure events (and which has no attributes). Signed-off-by: Greg Kroah-Hartman <greg@kroah.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
2005-01-17Add attribute container to generic device modelJames Bottomley
Attribute containers allows a single device to belong to an arbitrary number of classes, each with an arbitrary number of attributes. This will be used as the basis for a generic transport class Signed-off-by: Greg Kroah-Hartman <greg@kroah.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
2004-03-08Driver core: make CONFIG_DEBUG_DRIVER implementation a whole lot cleanerGreg Kroah-Hartman
2004-02-08Merge kroah.com:/home/greg/linux/BK/bleed-2.6Greg Kroah-Hartman
into kroah.com:/home/greg/linux/BK/pci-2.6
2004-02-03[PATCH] Remove memblks from the kernelAndrew Morton
From: "Martin J. Bligh" <mbligh@aracnet.com> This patch removes memblks from the kernel ... we don't use them, and the NUMA API that was planning to use them when they were originally designed isn't going to use them anymore. They're just unnecessary added complexity now ... time for them to go. There's a slight complication in that ia64 uses something with a similar name for part of its memory layout, but Jes Sorensen kindly untangled them from each other for us. The patch with his modifications is below. Jes tested it on ia64, and I testbuilt it with every config in my arsenal.
2004-02-01[PATCH] PCI: Replace pci_pool with generic dma_poolDeepak Saxena
- Move drivers/pci/pool.c to drivers/base/pool.c - Initialize struct device.dma_pools in device_initialize() - Remove initialization of struct pci_dev.pools from pci_setup_device()
2004-01-19[PATCH] Driver Core: add class_simple supportGreg Kroah-Hartman
This patch adds a struct class_simple which can be used to create "simple" class support for subsystems. It also adds a class_release() callback for struct class, as it is needed to properly handle the reference counting logic.
2003-08-06[power] Split device PM functionsPatrick Mochel
- Create drivers/base/power/ - Move drivers/base/power.c there. - Split into shutdown.c suspend.c and resume.c
2003-06-18[PATCH] DRIVER: request_firmware() hotplug interfaceManuel Estrada Sainz
2003-05-24[PATCH] kobj_mapAlexander Viro
code responsible for gendisk lookups taken out in drivers/base and generalized - now it allows to have a range-based mapping from numbers to kobjects for given struct subsystem.
2003-04-28driver core: rework driver class structures and logicGreg Kroah-Hartman
Removes the device_class, devclass_attribute, and device_interface structures and replaces them with class, class_device, and class_interface structures. This allows us to have multiple class_device structures per device structures which mirrors the ways things really are within the kernel. It also allows class_device structures to be created later than struct devices as they are naturally created much later in the initialization process of a device.
2003-03-03driver model: Make initialization explicit.Patrick Mochel
- Call driver_init() from init/main.c::do_basic_setup(). This ensures that all the driver model subsystems are initialized before any drivers or devices can be registered. It nearly frees up the core and postcore initcall levels, making them available for other kernel code to use freely.
2003-02-03kbuild: Remove export-objs := ... statementsKai Germaschewski
One of the goals of the whole new modversions implementation: export-objs is gone for good!
2002-12-14[PATCH] Remove Rules.make from Makefiles (2/3)Brian Gerst
Makefiles no longer need to include Rules.make, which is currently an empty file. This patch removes it from the drivers tree Makefiles.
2002-10-31[PATCH] Update/Create core files for DriverFS Topology.Andrew Morton
From Matthew Dobson. Update/Create core files for DriverFS Topology. This patch creates the generic structures that are (will be) embedded in the per-arch structures. Also creates calls to register these generic structures (CPUs, MemBlks, & Nodes). Note that without arch-specific structures in which to embed these structures, and an arch-specific initialization routine, these functions/structures remain unused.
2002-10-30create firmware subsystem and register it on startup.Patrick Mochel
2002-09-26add hotplug support to the driver core for devices, if their bus type ↵Greg Kroah-Hartman
supports it.
2002-09-23driver model: add better platform device support.Patrick Mochel
Platform devices are devices commonly found on the motherboard of systems. This includes legacy devices (serial ports, floppy controllers, parallel ports, etc) and host bridges to peripheral buses. We already had a platform bus type, which gives a way to group platform devices and drivers, and allow each to be bound to each other dynamically. Though before, it didn't do anything. It still doesn't do much, but we now have: - struct platform_device, which generically describes platform deviecs. This only includes a name and id in addition to a struct device, but more may be added later. - implelemnt platform_device_register() and platform_device_unregister() to handle adding and removing these devices. - Create legacy_bus - a default parent device for legacy devices. - Change the floppy driver to define a platform_device (instead of a sys_device). In driverfs, this gives us now: a# tree -d /sys/bus/platform/ /sys/bus/platform/ |-- devices | `-- floppy0 -> ../../../root/legacy/floppy0 `-- drivers and # tree -d /sys/root/legacy/ /sys/root/legacy/ `-- floppy0
2002-09-23driver model: add support for CPUs.Patrick Mochel
- Create struct cpu to generically describe cpus (it simply contains a struct sys_device in it). - Define an array of size NR_CPUS in arch/i386/kernel/cpu/common.c and register each on bootup. This gives us something like: # tree -d /sys/root/sys/ /sys/root/sys/ |-- cpu0 |-- pic0 `-- rtc0 and: # tree -d /sys/bus/system/devices/ /sys/bus/system/devices/ |-- cpu0 -> ../../../root/sys/cpu0 - Define arch-specific CPU driver that's also registered on boot. That gives us: # tree -d /sys/bus/system/drivers/ /sys/bus/system/drivers/ |-- cpu - Create a CPU device class that's registered very early. That gives us all the CPUs in the system in one place: # tree -d /sys/class/cpu/ /sys/class/cpu/ |-- devices | `-- 0 -> ../../../root/sys/cpu0 `-- drivers Other archs are encouraged to do the same.
2002-08-26Add struct bus_type platform_bus and document its intentions.Patrick Mochel
The platform bus is a pseudo-bus meant to group legacy devices. Not only does it give legacy devices a common parent and bus type, it provides the necessary infrastructure to allow for firmware-based enumeration of the system's devices (using the platform's add() callback).
2002-08-25Introduce struct device_interface.Patrick Mochel
Device interfaces are the logical interfaces of device classes that correlate directly to userspace interfaces, like device nodes. Device interfaces are registered with the class they belong to. As devices are added to the class, they are added to each interface registered with the class. The interface is responsible for determining whether the device supports the interface or not. The interface is responsible for allocating and initializing a struct intf_data and calling interface_add_data() to add it to the device's list of interfaces it belongs to. This list will be iterated over when the device is removed from the class (instead of all possible interfaces for a class). This structure should probably be embedded in whatever per-device data structure the interface is allocating anyway. Devices are enumerated within the interface. This happens in interface_add_data() and the enumerated value is stored in the struct intf_data for that device. Interfaces get a directory in driverfs under their class's directory. Each time a device is added to the interface, a symlink is created in that directory that points to the device's directory in the physical hierarchy. The name of this symlink is the interface-enumerated value of the device.
2002-08-25Introduce struct device_classPatrick Mochel
Device classes describe a type (or class) of device, like an input device or network device, etc. This changeset defines a struct device_class that each subsystem is expected to implement and register with the core. struct device_driver gains a devclass pointer which points to the class it belongs to. When the driver is registered, it is added to the class's list of drivers. Whenever a device is bound to that driver, it is added to the class by calling the class's add_device callback. struct device gains a class_num field which is the per-class enumerated value of the device. It is incremented each time a device is registered with the class. Each device class gets a driverfs directory in class/<class name> and two subdirectories: 'devices' and 'drivers'. For each device added to the class, a symlink is created in the devices/ directory that points to the device's directory in the physical hierarchy. The name of the symlink is the enumerated number the device got when it was registered with the class. For each driver that's added to the class, a symlink is created in the class's drivers/ directory that points to the driver's directory. The name of this symlink is a concatenation of <bus name>:<driver name> (to prevent namespace conflicts of drivers with the same name on different buses).
2002-08-01driverfs: Move driverfs calls from drivers/base/*.c to drivers/base/fs/*.cPatrick Mochel
This cleans up the drivers/base/ files, so they deal mainly with registration. It also provides a good place to put the glue needed for bus and driver files in driverfs.
2002-05-28Merge master.kernel.org:/home/mochel/BK/linux-2.5-linusLinus Torvalds
into home.transmeta.com:/home/torvalds/v2.5/linux
2002-05-28MergeKai Germaschewski
2002-05-28kbuild: Group together descending/linking in drivers/*Kai Germaschewski
We currently decide whether we need to descend into the subdirs of drivers/ in drivers/Makefile, but link the resulting objects from the top-level Makefile. Making these two decisions at the same time (in drivers/Makefile) cleans up the top-level Makefile quite a bit. Link order does not change at all apart from sound/, which is now linked last.
2002-05-28Beef up centralized driver mgmt:Patrick Mochel
- add name, bus, lock, refcount, bus_list, devices, and dir fields to struct - add release callback to be called when refcount hits 0 - add helpers for registration and refcounting - create directory for driver in bus's directory
2002-05-27deivce model: actually compile and use bus driversPatrick Mochel
2002-05-09Fix 'export-objs' usage in Makefiles. Linus Torvalds
Noted by Keith Owens.
2002-03-25Add device_{suspend,resume,shutdown} calls.Patrick Mochel
2002-03-25Add concept of system bus, so system devices (CPUs, PICs, etc) can have a ↵Patrick Mochel
common home in the device tree. Add helper functions for {un,}registering.
2002-02-05v2.5.2.5 -> v2.5.2.6Linus Torvalds
- Asit Mallick: mtrr update - Patrick Mochel: split up kernel/device.c into drivers/base - Mikael Pettersson/Al Viro: fix missing in-core inode initialization in ext2 introduced by Al's inode trimming - David Miller: sparc and network updates - Frank Davis: firewire video mmap page remapping fix - me: fix configure help scripts to fix breakage noticed by Dave Jones - Greg KH: USB updates - Kai Germaschewski: ISDN fixes, Config.help entries - Douglas Gilbert: SCSI doc update - Ingo Molnar: x86 taskswitch optimizations, scheduler updates - Mikael Pettersson: make APIC work on old external setups - Al Viro: more inode trimming