diff options
| -rw-r--r-- | drivers/s390/cio/device_ops.c | 32 | ||||
| -rw-r--r-- | drivers/s390/cio/qdio.c | 2 | ||||
| -rw-r--r-- | include/asm-s390/ccwdev.h | 2 |
3 files changed, 33 insertions, 3 deletions
diff --git a/drivers/s390/cio/device_ops.c b/drivers/s390/cio/device_ops.c index d7b25b8f71d2..7c7775aae38a 100644 --- a/drivers/s390/cio/device_ops.c +++ b/drivers/s390/cio/device_ops.c | |||
| @@ -23,8 +23,7 @@ | |||
| 23 | #include "chsc.h" | 23 | #include "chsc.h" |
| 24 | #include "device.h" | 24 | #include "device.h" |
| 25 | 25 | ||
| 26 | int | 26 | int ccw_device_set_options_mask(struct ccw_device *cdev, unsigned long flags) |
| 27 | ccw_device_set_options(struct ccw_device *cdev, unsigned long flags) | ||
| 28 | { | 27 | { |
| 29 | /* | 28 | /* |
| 30 | * The flag usage is mutal exclusive ... | 29 | * The flag usage is mutal exclusive ... |
| @@ -39,6 +38,33 @@ ccw_device_set_options(struct ccw_device *cdev, unsigned long flags) | |||
| 39 | return 0; | 38 | return 0; |
| 40 | } | 39 | } |
| 41 | 40 | ||
| 41 | int ccw_device_set_options(struct ccw_device *cdev, unsigned long flags) | ||
| 42 | { | ||
| 43 | /* | ||
| 44 | * The flag usage is mutal exclusive ... | ||
| 45 | */ | ||
| 46 | if (((flags & CCWDEV_EARLY_NOTIFICATION) && | ||
| 47 | (flags & CCWDEV_REPORT_ALL)) || | ||
| 48 | ((flags & CCWDEV_EARLY_NOTIFICATION) && | ||
| 49 | cdev->private->options.repall) || | ||
| 50 | ((flags & CCWDEV_REPORT_ALL) && | ||
| 51 | cdev->private->options.fast)) | ||
| 52 | return -EINVAL; | ||
| 53 | cdev->private->options.fast |= (flags & CCWDEV_EARLY_NOTIFICATION) != 0; | ||
| 54 | cdev->private->options.repall |= (flags & CCWDEV_REPORT_ALL) != 0; | ||
| 55 | cdev->private->options.pgroup |= (flags & CCWDEV_DO_PATHGROUP) != 0; | ||
| 56 | cdev->private->options.force |= (flags & CCWDEV_ALLOW_FORCE) != 0; | ||
| 57 | return 0; | ||
| 58 | } | ||
| 59 | |||
| 60 | void ccw_device_clear_options(struct ccw_device *cdev, unsigned long flags) | ||
| 61 | { | ||
| 62 | cdev->private->options.fast &= (flags & CCWDEV_EARLY_NOTIFICATION) == 0; | ||
| 63 | cdev->private->options.repall &= (flags & CCWDEV_REPORT_ALL) == 0; | ||
| 64 | cdev->private->options.pgroup &= (flags & CCWDEV_DO_PATHGROUP) == 0; | ||
| 65 | cdev->private->options.force &= (flags & CCWDEV_ALLOW_FORCE) == 0; | ||
| 66 | } | ||
| 67 | |||
| 42 | int | 68 | int |
| 43 | ccw_device_clear(struct ccw_device *cdev, unsigned long intparm) | 69 | ccw_device_clear(struct ccw_device *cdev, unsigned long intparm) |
| 44 | { | 70 | { |
| @@ -601,7 +627,9 @@ _ccw_device_get_device_number(struct ccw_device *cdev) | |||
| 601 | 627 | ||
| 602 | 628 | ||
| 603 | MODULE_LICENSE("GPL"); | 629 | MODULE_LICENSE("GPL"); |
| 630 | EXPORT_SYMBOL(ccw_device_set_options_mask); | ||
| 604 | EXPORT_SYMBOL(ccw_device_set_options); | 631 | EXPORT_SYMBOL(ccw_device_set_options); |
| 632 | EXPORT_SYMBOL(ccw_device_clear_options); | ||
| 605 | EXPORT_SYMBOL(ccw_device_clear); | 633 | EXPORT_SYMBOL(ccw_device_clear); |
| 606 | EXPORT_SYMBOL(ccw_device_halt); | 634 | EXPORT_SYMBOL(ccw_device_halt); |
| 607 | EXPORT_SYMBOL(ccw_device_resume); | 635 | EXPORT_SYMBOL(ccw_device_resume); |
diff --git a/drivers/s390/cio/qdio.c b/drivers/s390/cio/qdio.c index d726cd5777de..5b1e3ff26c0b 100644 --- a/drivers/s390/cio/qdio.c +++ b/drivers/s390/cio/qdio.c | |||
| @@ -3194,7 +3194,7 @@ qdio_establish(struct qdio_initialize *init_data) | |||
| 3194 | 3194 | ||
| 3195 | spin_lock_irqsave(get_ccwdev_lock(cdev),saveflags); | 3195 | spin_lock_irqsave(get_ccwdev_lock(cdev),saveflags); |
| 3196 | 3196 | ||
| 3197 | ccw_device_set_options(cdev, 0); | 3197 | ccw_device_set_options_mask(cdev, 0); |
| 3198 | result=ccw_device_start_timeout(cdev,&irq_ptr->ccw, | 3198 | result=ccw_device_start_timeout(cdev,&irq_ptr->ccw, |
| 3199 | QDIO_DOING_ESTABLISH,0, 0, | 3199 | QDIO_DOING_ESTABLISH,0, 0, |
| 3200 | QDIO_ESTABLISH_TIMEOUT); | 3200 | QDIO_ESTABLISH_TIMEOUT); |
diff --git a/include/asm-s390/ccwdev.h b/include/asm-s390/ccwdev.h index 58c70acffc73..cfc81533b9ba 100644 --- a/include/asm-s390/ccwdev.h +++ b/include/asm-s390/ccwdev.h | |||
| @@ -110,7 +110,9 @@ extern void ccw_driver_unregister (struct ccw_driver *driver); | |||
| 110 | 110 | ||
| 111 | struct ccw1; | 111 | struct ccw1; |
| 112 | 112 | ||
| 113 | extern int ccw_device_set_options_mask(struct ccw_device *, unsigned long); | ||
| 113 | extern int ccw_device_set_options(struct ccw_device *, unsigned long); | 114 | extern int ccw_device_set_options(struct ccw_device *, unsigned long); |
| 115 | extern void ccw_device_clear_options(struct ccw_device *, unsigned long); | ||
| 114 | 116 | ||
| 115 | /* Allow for i/o completion notification after primary interrupt status. */ | 117 | /* Allow for i/o completion notification after primary interrupt status. */ |
| 116 | #define CCWDEV_EARLY_NOTIFICATION 0x0001 | 118 | #define CCWDEV_EARLY_NOTIFICATION 0x0001 |
