dev: implement generic devices
generic devices don't have a type (char, block, etc) and are created by bus drivers to represent the device until a suitable driver is found. generic devices are registered by the bus driver. once a more suitable driver is found, that driver will re-register the device under itself.
This commit is contained in:
13
dev/core.c
13
dev/core.c
@@ -228,6 +228,19 @@ kern_status_t device_register(struct device *dev, struct driver *owner, struct d
|
||||
{
|
||||
unsigned long flags;
|
||||
device_lock_irqsave(dev, &flags);
|
||||
|
||||
if (dev->dev_owner) {
|
||||
struct driver *prev_owner = dev->dev_owner;
|
||||
|
||||
/* migrate device to new driver */
|
||||
driver_lock(prev_owner);
|
||||
driver_remove_device(prev_owner, dev);
|
||||
driver_free_minor(prev_owner, dev->dev_minor);
|
||||
dev->dev_minor = DEV_MINOR_INVALID;
|
||||
dev->dev_owner = NULL;
|
||||
driver_unlock(prev_owner);
|
||||
}
|
||||
|
||||
driver_lock(owner);
|
||||
|
||||
if (owner->drv_major == DEV_MAJOR_INVALID) {
|
||||
|
||||
Reference in New Issue
Block a user