diff options
Diffstat (limited to 'Documentation/s390/cds.txt')
| -rw-r--r-- | Documentation/s390/cds.txt | 52 |
1 files changed, 24 insertions, 28 deletions
diff --git a/Documentation/s390/cds.txt b/Documentation/s390/cds.txt index d80e5733827d..32a96cc39215 100644 --- a/Documentation/s390/cds.txt +++ b/Documentation/s390/cds.txt | |||
| @@ -174,14 +174,10 @@ read_dev_chars() - Read Device Characteristics | |||
| 174 | 174 | ||
| 175 | This routine returns the characteristics for the device specified. | 175 | This routine returns the characteristics for the device specified. |
| 176 | 176 | ||
| 177 | The function is meant to be called with an irq handler in place; that is, | 177 | The function is meant to be called with the device already enabled; that is, |
| 178 | at earliest during set_online() processing. | 178 | at earliest during set_online() processing. |
| 179 | 179 | ||
| 180 | While the request is processed synchronously, the device interrupt | 180 | The ccw_device must not be locked prior to calling read_dev_chars(). |
| 181 | handler is called for final ending status. In case of error situations the | ||
| 182 | interrupt handler may recover appropriately. The device irq handler can | ||
| 183 | recognize the corresponding interrupts by the interruption parameter be | ||
| 184 | 0x00524443. The ccw_device must not be locked prior to calling read_dev_chars(). | ||
| 185 | 181 | ||
| 186 | The function may be called enabled or disabled. | 182 | The function may be called enabled or disabled. |
| 187 | 183 | ||
| @@ -410,26 +406,7 @@ individual flag meanings. | |||
| 410 | 406 | ||
| 411 | Usage Notes : | 407 | Usage Notes : |
| 412 | 408 | ||
| 413 | Prior to call ccw_device_start() the device driver must assure disabled state, | 409 | ccw_device_start() must be called disabled and with the ccw device lock held. |
| 414 | i.e. the I/O mask value in the PSW must be disabled. This can be accomplished | ||
| 415 | by calling local_save_flags( flags). The current PSW flags are preserved and | ||
| 416 | can be restored by local_irq_restore( flags) at a later time. | ||
| 417 | |||
| 418 | If the device driver violates this rule while running in a uni-processor | ||
| 419 | environment an interrupt might be presented prior to the ccw_device_start() | ||
| 420 | routine returning to the device driver main path. In this case we will end in a | ||
| 421 | deadlock situation as the interrupt handler will try to obtain the irq | ||
| 422 | lock the device driver still owns (see below) ! | ||
| 423 | |||
| 424 | The driver must assure to hold the device specific lock. This can be | ||
| 425 | accomplished by | ||
| 426 | |||
| 427 | (i) spin_lock(get_ccwdev_lock(cdev)), or | ||
| 428 | (ii) spin_lock_irqsave(get_ccwdev_lock(cdev), flags) | ||
| 429 | |||
| 430 | Option (i) should be used if the calling routine is running disabled for | ||
| 431 | I/O interrupts (see above) already. Option (ii) obtains the device gate und | ||
| 432 | puts the CPU into I/O disabled state by preserving the current PSW flags. | ||
| 433 | 410 | ||
| 434 | The device driver is allowed to issue the next ccw_device_start() call from | 411 | The device driver is allowed to issue the next ccw_device_start() call from |
| 435 | within its interrupt handler already. It is not required to schedule a | 412 | within its interrupt handler already. It is not required to schedule a |
| @@ -488,7 +465,7 @@ int ccw_device_resume(struct ccw_device *cdev); | |||
| 488 | 465 | ||
| 489 | cdev - ccw_device the resume operation is requested for | 466 | cdev - ccw_device the resume operation is requested for |
| 490 | 467 | ||
| 491 | The resume_IO() function returns: | 468 | The ccw_device_resume() function returns: |
| 492 | 469 | ||
| 493 | 0 - suspended channel program is resumed | 470 | 0 - suspended channel program is resumed |
| 494 | -EBUSY - status pending | 471 | -EBUSY - status pending |
| @@ -507,6 +484,8 @@ a long-running channel program or the device might require to initially issue | |||
| 507 | a halt subchannel (HSCH) I/O command. For those purposes the ccw_device_halt() | 484 | a halt subchannel (HSCH) I/O command. For those purposes the ccw_device_halt() |
| 508 | command is provided. | 485 | command is provided. |
| 509 | 486 | ||
| 487 | ccw_device_halt() must be called disabled and with the ccw device lock held. | ||
| 488 | |||
| 510 | int ccw_device_halt(struct ccw_device *cdev, | 489 | int ccw_device_halt(struct ccw_device *cdev, |
| 511 | unsigned long intparm); | 490 | unsigned long intparm); |
| 512 | 491 | ||
| @@ -517,7 +496,7 @@ intparm : interruption parameter; value is only used if no I/O | |||
| 517 | 496 | ||
| 518 | The ccw_device_halt() function returns : | 497 | The ccw_device_halt() function returns : |
| 519 | 498 | ||
| 520 | 0 - successful completion or request successfully initiated | 499 | 0 - request successfully initiated |
| 521 | -EBUSY - the device is currently busy, or status pending. | 500 | -EBUSY - the device is currently busy, or status pending. |
| 522 | -ENODEV - cdev invalid. | 501 | -ENODEV - cdev invalid. |
| 523 | -EINVAL - The device is not operational or the ccw device is not online. | 502 | -EINVAL - The device is not operational or the ccw device is not online. |
| @@ -533,6 +512,23 @@ can then perform an appropriate action. Prior to interrupt of an outstanding | |||
| 533 | read to a network device (with or without PCI flag) a ccw_device_halt() | 512 | read to a network device (with or without PCI flag) a ccw_device_halt() |
| 534 | is required to end the pending operation. | 513 | is required to end the pending operation. |
| 535 | 514 | ||
| 515 | ccw_device_clear() - Terminage I/O Request Processing | ||
| 516 | |||
| 517 | In order to terminate all I/O processing at the subchannel, the clear subchannel | ||
| 518 | (CSCH) command is used. It can be issued via ccw_device_clear(). | ||
| 519 | |||
| 520 | ccw_device_clear() must be called disabled and with the ccw device lock held. | ||
| 521 | |||
| 522 | int ccw_device_clear(struct ccw_device *cdev, unsigned long intparm); | ||
| 523 | |||
| 524 | cdev: ccw_device the clear operation is requested for | ||
| 525 | intparm: interruption parameter (see ccw_device_halt()) | ||
| 526 | |||
| 527 | The ccw_device_clear() function returns: | ||
| 528 | |||
| 529 | 0 - request successfully initiated | ||
| 530 | -ENODEV - cdev invalid | ||
| 531 | -EINVAL - The device is not operational or the ccw device is not online. | ||
| 536 | 532 | ||
| 537 | Miscellaneous Support Routines | 533 | Miscellaneous Support Routines |
| 538 | 534 | ||
