forked from luck/tmp_suning_uos_patched
firewire: core: move some functions
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
This commit is contained in:
parent
41f321c2ec
commit
aed8089274
@ -155,27 +155,6 @@ struct bus_type fw_bus_type = {
|
||||
};
|
||||
EXPORT_SYMBOL(fw_bus_type);
|
||||
|
||||
static void fw_device_release(struct device *dev)
|
||||
{
|
||||
struct fw_device *device = fw_device(dev);
|
||||
struct fw_card *card = device->card;
|
||||
unsigned long flags;
|
||||
|
||||
/*
|
||||
* Take the card lock so we don't set this to NULL while a
|
||||
* FW_NODE_UPDATED callback is being handled or while the
|
||||
* bus manager work looks at this node.
|
||||
*/
|
||||
spin_lock_irqsave(&card->lock, flags);
|
||||
device->node->data = NULL;
|
||||
spin_unlock_irqrestore(&card->lock, flags);
|
||||
|
||||
fw_node_put(device->node);
|
||||
kfree(device->config_rom);
|
||||
kfree(device);
|
||||
fw_card_put(card);
|
||||
}
|
||||
|
||||
int fw_device_enable_phys_dma(struct fw_device *device)
|
||||
{
|
||||
int generation = device->generation;
|
||||
@ -679,11 +658,53 @@ static void fw_device_shutdown(struct work_struct *work)
|
||||
fw_device_put(device);
|
||||
}
|
||||
|
||||
static void fw_device_release(struct device *dev)
|
||||
{
|
||||
struct fw_device *device = fw_device(dev);
|
||||
struct fw_card *card = device->card;
|
||||
unsigned long flags;
|
||||
|
||||
/*
|
||||
* Take the card lock so we don't set this to NULL while a
|
||||
* FW_NODE_UPDATED callback is being handled or while the
|
||||
* bus manager work looks at this node.
|
||||
*/
|
||||
spin_lock_irqsave(&card->lock, flags);
|
||||
device->node->data = NULL;
|
||||
spin_unlock_irqrestore(&card->lock, flags);
|
||||
|
||||
fw_node_put(device->node);
|
||||
kfree(device->config_rom);
|
||||
kfree(device);
|
||||
fw_card_put(card);
|
||||
}
|
||||
|
||||
static struct device_type fw_device_type = {
|
||||
.release = fw_device_release,
|
||||
.release = fw_device_release,
|
||||
};
|
||||
|
||||
static void fw_device_update(struct work_struct *work);
|
||||
static int update_unit(struct device *dev, void *data)
|
||||
{
|
||||
struct fw_unit *unit = fw_unit(dev);
|
||||
struct fw_driver *driver = (struct fw_driver *)dev->driver;
|
||||
|
||||
if (is_fw_unit(dev) && driver != NULL && driver->update != NULL) {
|
||||
down(&dev->sem);
|
||||
driver->update(unit);
|
||||
up(&dev->sem);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void fw_device_update(struct work_struct *work)
|
||||
{
|
||||
struct fw_device *device =
|
||||
container_of(work, struct fw_device, work.work);
|
||||
|
||||
fw_device_cdev_update(device);
|
||||
device_for_each_child(&device->device, NULL, update_unit);
|
||||
}
|
||||
|
||||
/*
|
||||
* If a device was pending for deletion because its node went away but its
|
||||
@ -851,29 +872,6 @@ static void fw_device_init(struct work_struct *work)
|
||||
put_device(&device->device); /* our reference */
|
||||
}
|
||||
|
||||
static int update_unit(struct device *dev, void *data)
|
||||
{
|
||||
struct fw_unit *unit = fw_unit(dev);
|
||||
struct fw_driver *driver = (struct fw_driver *)dev->driver;
|
||||
|
||||
if (is_fw_unit(dev) && driver != NULL && driver->update != NULL) {
|
||||
down(&dev->sem);
|
||||
driver->update(unit);
|
||||
up(&dev->sem);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void fw_device_update(struct work_struct *work)
|
||||
{
|
||||
struct fw_device *device =
|
||||
container_of(work, struct fw_device, work.work);
|
||||
|
||||
fw_device_cdev_update(device);
|
||||
device_for_each_child(&device->device, NULL, update_unit);
|
||||
}
|
||||
|
||||
enum {
|
||||
REREAD_BIB_ERROR,
|
||||
REREAD_BIB_GONE,
|
||||
|
Loading…
Reference in New Issue
Block a user