Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d77612ab authored by Borislav Petkov's avatar Borislav Petkov Committed by Bartlomiej Zolnierkiewicz
Browse files

ide-atapi: split drive-specific functionality in ide_issue_pc



There should be no functionality change resulting from this patch.

Signed-off-by: default avatarBorislav Petkov <petkovbb@gmail.com>
Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent def860d0
Loading
Loading
Loading
Loading
+20 −16
Original line number Diff line number Diff line
@@ -564,39 +564,43 @@ static ide_startstop_t ide_transfer_pc(ide_drive_t *drive)

ide_startstop_t ide_issue_pc(ide_drive_t *drive, unsigned int timeout)
{
	struct ide_atapi_pc *pc = drive->pc;
	struct ide_atapi_pc *pc;
	ide_hwif_t *hwif = drive->hwif;
	ide_expiry_t *expiry = NULL;
	u32 tf_flags;
	u16 bcount;

	/* We haven't transferred any data yet */
	pc->xferred = 0;
	pc->cur_pos = pc->buf;

	if (dev_is_idecd(drive)) {
		tf_flags = IDE_TFLAG_OUT_NSECT | IDE_TFLAG_OUT_LBAL;
		bcount = ide_cd_get_xferlen(hwif->hwgroup->rq);
		expiry = ide_cd_expiry;

		if (drive->dma)
			drive->dma = !hwif->dma_ops->dma_setup(drive);
	} else {
		pc = drive->pc;

		/* We haven't transferred any data yet */
		pc->xferred = 0;
		pc->cur_pos = pc->buf;

		tf_flags = IDE_TFLAG_OUT_DEVICE;
		bcount = ((drive->media == ide_tape) ?
				pc->req_xfer :
				min(pc->req_xfer, 63 * 1024));
	}

		if (pc->flags & PC_FLAG_DMA_ERROR) {
			pc->flags &= ~PC_FLAG_DMA_ERROR;
			ide_dma_off(drive);
		}

	if (((pc->flags & PC_FLAG_DMA_OK) &&
		(drive->dev_flags & IDE_DFLAG_USING_DMA)) ||
	    drive->dma)
		if ((pc->flags & PC_FLAG_DMA_OK) &&
		     (drive->dev_flags & IDE_DFLAG_USING_DMA))
			drive->dma = !hwif->dma_ops->dma_setup(drive);

		if (!drive->dma)
			pc->flags &= ~PC_FLAG_DMA_OK;
	}

	ide_pktcmd_tf_load(drive, tf_flags, bcount, drive->dma);