aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390
diff options
context:
space:
mode:
authorMichael Ernst <mernst@de.ibm.com>2010-05-26 23:27:08 +0200
committerMartin Schwidefsky <sky@mschwide.boeblingen.de.ibm.com>2010-05-26 23:27:09 +0200
commit094f2100d6bb16ef0c4f82167cc55173ca22ee93 (patch)
tree5e6540cc332b1b83216d3dfa037ea9ac50b9aacc /arch/s390
parentc560d105a197464603247bf55962fc7f23c8cb62 (diff)
downloadkernel_samsung_tuna-094f2100d6bb16ef0c4f82167cc55173ca22ee93.zip
kernel_samsung_tuna-094f2100d6bb16ef0c4f82167cc55173ca22ee93.tar.gz
kernel_samsung_tuna-094f2100d6bb16ef0c4f82167cc55173ca22ee93.tar.bz2
[S390] cio: unit check handling during internal I/O
Send unit checks that occur during internal I/O to the device driver and react according to its return code. Signed-off-by: Michael Ernst <mernst@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390')
-rw-r--r--arch/s390/include/asm/ccwdev.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/arch/s390/include/asm/ccwdev.h b/arch/s390/include/asm/ccwdev.h
index f4bd346..1c0030f 100644
--- a/arch/s390/include/asm/ccwdev.h
+++ b/arch/s390/include/asm/ccwdev.h
@@ -91,6 +91,14 @@ struct ccw_device {
void (*handler) (struct ccw_device *, unsigned long, struct irb *);
};
+/*
+ * Possible CIO actions triggered by the unit check handler.
+ */
+enum uc_todo {
+ UC_TODO_RETRY,
+ UC_TODO_RETRY_ON_NEW_PATH,
+ UC_TODO_STOP
+};
/**
* struct ccw driver - device driver for channel attached devices
@@ -107,6 +115,7 @@ struct ccw_device {
* @freeze: callback for freezing during hibernation snapshotting
* @thaw: undo work done in @freeze
* @restore: callback for restoring after hibernation
+ * @uc_handler: callback for unit check handler
* @driver: embedded device driver structure
* @name: device driver name
*/
@@ -124,6 +133,7 @@ struct ccw_driver {
int (*freeze)(struct ccw_device *);
int (*thaw) (struct ccw_device *);
int (*restore)(struct ccw_device *);
+ enum uc_todo (*uc_handler) (struct ccw_device *, struct irb *);
struct device_driver driver;
char *name;
};