Commit 958974fb authored by Cornelia Huck's avatar Cornelia Huck Committed by Martin Schwidefsky

[S390] cio: Introduce ccw_bus_type.shutdown.

Introduce a shutdown method for the ccw bus that calls the driver
specific shutdown method in struct ccw_driver.
Switch zfcp to the new ccw_driver shutdown method.
Signed-off-by: default avatarCornelia Huck <cornelia.huck@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent a55360df
...@@ -1433,12 +1433,22 @@ ccw_device_remove (struct device *dev) ...@@ -1433,12 +1433,22 @@ ccw_device_remove (struct device *dev)
return 0; return 0;
} }
static void ccw_device_shutdown(struct device *dev)
{
struct ccw_device *cdev;
cdev = to_ccwdev(dev);
if (cdev->drv && cdev->drv->shutdown)
cdev->drv->shutdown(cdev);
}
struct bus_type ccw_bus_type = { struct bus_type ccw_bus_type = {
.name = "ccw", .name = "ccw",
.match = ccw_bus_match, .match = ccw_bus_match,
.uevent = ccw_uevent, .uevent = ccw_uevent,
.probe = ccw_device_probe, .probe = ccw_device_probe,
.remove = ccw_device_remove, .remove = ccw_device_remove,
.shutdown = ccw_device_shutdown,
}; };
/** /**
......
...@@ -28,7 +28,7 @@ static void zfcp_ccw_remove(struct ccw_device *); ...@@ -28,7 +28,7 @@ static void zfcp_ccw_remove(struct ccw_device *);
static int zfcp_ccw_set_online(struct ccw_device *); static int zfcp_ccw_set_online(struct ccw_device *);
static int zfcp_ccw_set_offline(struct ccw_device *); static int zfcp_ccw_set_offline(struct ccw_device *);
static int zfcp_ccw_notify(struct ccw_device *, int); static int zfcp_ccw_notify(struct ccw_device *, int);
static void zfcp_ccw_shutdown(struct device *); static void zfcp_ccw_shutdown(struct ccw_device *);
static struct ccw_device_id zfcp_ccw_device_id[] = { static struct ccw_device_id zfcp_ccw_device_id[] = {
{CCW_DEVICE_DEVTYPE(ZFCP_CONTROL_UNIT_TYPE, {CCW_DEVICE_DEVTYPE(ZFCP_CONTROL_UNIT_TYPE,
...@@ -51,9 +51,7 @@ static struct ccw_driver zfcp_ccw_driver = { ...@@ -51,9 +51,7 @@ static struct ccw_driver zfcp_ccw_driver = {
.set_online = zfcp_ccw_set_online, .set_online = zfcp_ccw_set_online,
.set_offline = zfcp_ccw_set_offline, .set_offline = zfcp_ccw_set_offline,
.notify = zfcp_ccw_notify, .notify = zfcp_ccw_notify,
.driver = { .shutdown = zfcp_ccw_shutdown,
.shutdown = zfcp_ccw_shutdown,
},
}; };
MODULE_DEVICE_TABLE(ccw, zfcp_ccw_device_id); MODULE_DEVICE_TABLE(ccw, zfcp_ccw_device_id);
...@@ -277,12 +275,12 @@ zfcp_ccw_register(void) ...@@ -277,12 +275,12 @@ zfcp_ccw_register(void)
* Makes sure that QDIO queues are down when the system gets stopped. * Makes sure that QDIO queues are down when the system gets stopped.
*/ */
static void static void
zfcp_ccw_shutdown(struct device *dev) zfcp_ccw_shutdown(struct ccw_device *cdev)
{ {
struct zfcp_adapter *adapter; struct zfcp_adapter *adapter;
down(&zfcp_data.config_sema); down(&zfcp_data.config_sema);
adapter = dev_get_drvdata(dev); adapter = dev_get_drvdata(&cdev->dev);
zfcp_erp_adapter_shutdown(adapter, 0); zfcp_erp_adapter_shutdown(adapter, 0);
zfcp_erp_wait(adapter); zfcp_erp_wait(adapter);
up(&zfcp_data.config_sema); up(&zfcp_data.config_sema);
......
...@@ -102,6 +102,7 @@ struct ccw_device { ...@@ -102,6 +102,7 @@ struct ccw_device {
* @set_online: called when setting device online * @set_online: called when setting device online
* @set_offline: called when setting device offline * @set_offline: called when setting device offline
* @notify: notify driver of device state changes * @notify: notify driver of device state changes
* @shutdown: called at device shutdown
* @driver: embedded device driver structure * @driver: embedded device driver structure
* @name: device driver name * @name: device driver name
*/ */
...@@ -113,6 +114,7 @@ struct ccw_driver { ...@@ -113,6 +114,7 @@ struct ccw_driver {
int (*set_online) (struct ccw_device *); int (*set_online) (struct ccw_device *);
int (*set_offline) (struct ccw_device *); int (*set_offline) (struct ccw_device *);
int (*notify) (struct ccw_device *, int); int (*notify) (struct ccw_device *, int);
void (*shutdown) (struct ccw_device *);
struct device_driver driver; struct device_driver driver;
char *name; char *name;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment