| 257 | dev9.fifo_bytes_write += read; |
| 258 | } |
| 259 | void HDDReadFIFO() |
| 260 | { |
| 261 | pxAssert(dev9.ata->dmaReady && (dev9.if_ctrl & SPD_IF_ATA_DMAEN)); |
| 262 | pxAssert((dev9.if_ctrl & SPD_IF_READ) == 0); |
| 263 | |
| 264 | const int unread = (dev9.fifo_bytes_write - dev9.fifo_bytes_read); |
| 265 | const int base = dev9.fifo_bytes_read % (SPD_DBUF_AVAIL_MAX * 512); |
| 266 | |
| 267 | pxAssert(unread <= SPD_DBUF_AVAIL_MAX * 512); |
| 268 | |
| 269 | int write; |
| 270 | if (base + unread > SPD_DBUF_AVAIL_MAX * 512) |
| 271 | { |
| 272 | const int was = SPD_DBUF_AVAIL_MAX * 512 - base; |
| 273 | write = dev9.ata->WriteDMAFromFIFO(dev9.fifo + base, was); |
| 274 | if (write == was) |
| 275 | write += dev9.ata->WriteDMAFromFIFO(dev9.fifo, unread - was); |
| 276 | } |
| 277 | else |
| 278 | { |
| 279 | write = dev9.ata->WriteDMAFromFIFO(dev9.fifo + base, unread); |
| 280 | } |
| 281 | |
| 282 | dev9.fifo_bytes_read += write; |
| 283 | } |
| 284 | void IOPReadFIFO() |
| 285 | { |
| 286 | pxAssert((dev9.dma_iop_ptr != nullptr) && (dev9.xfr_ctrl & SPD_XFR_DMAEN)); |
no test coverage detected