diff options
Diffstat (limited to 'include/linux/libata.h')
| -rw-r--r-- | include/linux/libata.h | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/include/linux/libata.h b/include/linux/libata.h index e74f301e9bae..b009f801e7c5 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
| @@ -467,12 +467,34 @@ static inline u8 ata_chk_status(struct ata_port *ap) | |||
| 467 | return ap->ops->check_status(ap); | 467 | return ap->ops->check_status(ap); |
| 468 | } | 468 | } |
| 469 | 469 | ||
| 470 | |||
| 471 | /** | ||
| 472 | * ata_pause - Flush writes and pause 400 nanoseconds. | ||
| 473 | * @ap: Port to wait for. | ||
| 474 | * | ||
| 475 | * LOCKING: | ||
| 476 | * Inherited from caller. | ||
| 477 | */ | ||
| 478 | |||
| 470 | static inline void ata_pause(struct ata_port *ap) | 479 | static inline void ata_pause(struct ata_port *ap) |
| 471 | { | 480 | { |
| 472 | ata_altstatus(ap); | 481 | ata_altstatus(ap); |
| 473 | ndelay(400); | 482 | ndelay(400); |
| 474 | } | 483 | } |
| 475 | 484 | ||
| 485 | |||
| 486 | /** | ||
| 487 | * ata_busy_wait - Wait for a port status register | ||
| 488 | * @ap: Port to wait for. | ||
| 489 | * | ||
| 490 | * Waits up to max*10 microseconds for the selected bits in the port's | ||
| 491 | * status register to be cleared. | ||
| 492 | * Returns final value of status register. | ||
| 493 | * | ||
| 494 | * LOCKING: | ||
| 495 | * Inherited from caller. | ||
| 496 | */ | ||
| 497 | |||
| 476 | static inline u8 ata_busy_wait(struct ata_port *ap, unsigned int bits, | 498 | static inline u8 ata_busy_wait(struct ata_port *ap, unsigned int bits, |
| 477 | unsigned int max) | 499 | unsigned int max) |
| 478 | { | 500 | { |
| @@ -487,6 +509,18 @@ static inline u8 ata_busy_wait(struct ata_port *ap, unsigned int bits, | |||
| 487 | return status; | 509 | return status; |
| 488 | } | 510 | } |
| 489 | 511 | ||
| 512 | |||
| 513 | /** | ||
| 514 | * ata_wait_idle - Wait for a port to be idle. | ||
| 515 | * @ap: Port to wait for. | ||
| 516 | * | ||
| 517 | * Waits up to 10ms for port's BUSY and DRQ signals to clear. | ||
| 518 | * Returns final value of status register. | ||
| 519 | * | ||
| 520 | * LOCKING: | ||
| 521 | * Inherited from caller. | ||
| 522 | */ | ||
| 523 | |||
| 490 | static inline u8 ata_wait_idle(struct ata_port *ap) | 524 | static inline u8 ata_wait_idle(struct ata_port *ap) |
| 491 | { | 525 | { |
| 492 | u8 status = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000); | 526 | u8 status = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000); |
| @@ -525,6 +559,18 @@ static inline void ata_tf_init(struct ata_port *ap, struct ata_taskfile *tf, uns | |||
| 525 | tf->device = ATA_DEVICE_OBS | ATA_DEV1; | 559 | tf->device = ATA_DEVICE_OBS | ATA_DEV1; |
| 526 | } | 560 | } |
| 527 | 561 | ||
| 562 | |||
| 563 | /** | ||
| 564 | * ata_irq_on - Enable interrupts on a port. | ||
| 565 | * @ap: Port on which interrupts are enabled. | ||
| 566 | * | ||
| 567 | * Enable interrupts on a legacy IDE device using MMIO or PIO, | ||
| 568 | * wait for idle, clear any pending interrupts. | ||
| 569 | * | ||
| 570 | * LOCKING: | ||
| 571 | * Inherited from caller. | ||
| 572 | */ | ||
| 573 | |||
| 528 | static inline u8 ata_irq_on(struct ata_port *ap) | 574 | static inline u8 ata_irq_on(struct ata_port *ap) |
| 529 | { | 575 | { |
| 530 | struct ata_ioports *ioaddr = &ap->ioaddr; | 576 | struct ata_ioports *ioaddr = &ap->ioaddr; |
| @@ -544,6 +590,18 @@ static inline u8 ata_irq_on(struct ata_port *ap) | |||
| 544 | return tmp; | 590 | return tmp; |
| 545 | } | 591 | } |
| 546 | 592 | ||
| 593 | |||
| 594 | /** | ||
| 595 | * ata_irq_ack - Acknowledge a device interrupt. | ||
| 596 | * @ap: Port on which interrupts are enabled. | ||
| 597 | * | ||
| 598 | * Wait up to 10 ms for legacy IDE device to become idle (BUSY | ||
| 599 | * or BUSY+DRQ clear). Obtain dma status and port status from | ||
| 600 | * device. Clear the interrupt. Return port status. | ||
| 601 | * | ||
| 602 | * LOCKING: | ||
| 603 | */ | ||
| 604 | |||
| 547 | static inline u8 ata_irq_ack(struct ata_port *ap, unsigned int chk_drq) | 605 | static inline u8 ata_irq_ack(struct ata_port *ap, unsigned int chk_drq) |
| 548 | { | 606 | { |
| 549 | unsigned int bits = chk_drq ? ATA_BUSY | ATA_DRQ : ATA_BUSY; | 607 | unsigned int bits = chk_drq ? ATA_BUSY | ATA_DRQ : ATA_BUSY; |
