OSDN Git Service

PPC: dbdma: Support more multi-issue DMA requests
authorAlexander Graf <agraf@suse.de>
Sun, 30 Jun 2013 13:29:13 +0000 (15:29 +0200)
committerAlexander Graf <agraf@suse.de>
Thu, 11 Jul 2013 16:51:25 +0000 (18:51 +0200)
commitf35ea98cd9f75db9286f05bf3dc4b532f4cb5eaa
tree594b8455808884e8f28eee95570b9b0de0c54eb8
parenta0f9fdfd98cc0571f9921a7eadd7316532e3e289
PPC: dbdma: Support more multi-issue DMA requests

A DMA request can happen for data that hasn't been completely been
provided by the IDE core yet. For example

  - DBDMA request for 0x1000 bytes
  - IDE request for 1 sector
  - DBDMA wants to read 0x1000 bytes (8 sectors) from bdrv
  - breakage

Instead, we should truncate our bdrv request to the maximum number
of sectors we're allowed to read at that given time. Once that transfer
is through, we will fall into our recently introduced waiting logic.

  - DBDMA requests for 0x1000 bytes
  - IDE request for 1 sector
  - DBDMA wants to read MIN(0x1000, 1 * 512) bytes
  - DBDMA finishes reading, indicates to IDE core that transfer is complete
  - IDE request for 7 sectors
  - DBDMA finishes the DMA

Reported-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Signed-off-by: Alexander Graf <agraf@suse.de>
hw/ide/macio.c