[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 5/8] fdc: implement VERIFY command
From: |
Hervé Poussineau |
Subject: |
[Qemu-devel] [PATCH 5/8] fdc: implement VERIFY command |
Date: |
Thu, 6 Sep 2012 21:17:56 +0200 |
VERIFY command is like a READ command, except that read data is not
transfered by DMA.
As DMA engine is not used, so we have to start data transfer ourselves.
Signed-off-by: Hervé Poussineau <address@hidden>
---
hw/fdc.c | 25 ++++++++++++++++++-------
1 file changed, 18 insertions(+), 7 deletions(-)
diff --git a/hw/fdc.c b/hw/fdc.c
index 3c343b1..551160e 100644
--- a/hw/fdc.c
+++ b/hw/fdc.c
@@ -349,6 +349,7 @@ enum {
FD_DIR_SCANE = 2,
FD_DIR_SCANL = 3,
FD_DIR_SCANH = 4,
+ FD_DIR_VERIFY = 5,
};
enum {
@@ -1271,14 +1272,21 @@ static void fdctrl_start_transfer(FDCtrl *fdctrl, int
direction)
if (((direction == FD_DIR_SCANE || direction == FD_DIR_SCANL ||
direction == FD_DIR_SCANH) && dma_mode == 0) ||
(direction == FD_DIR_WRITE && dma_mode == 2) ||
- (direction == FD_DIR_READ && dma_mode == 1)) {
+ (direction == FD_DIR_READ && dma_mode == 1) ||
+ (direction == FD_DIR_VERIFY)) {
/* No access is allowed until DMA transfer has completed */
fdctrl->msr &= ~FD_MSR_RQM;
- /* Now, we just have to wait for the DMA controller to
- * recall us...
- */
- DMA_hold_DREQ(fdctrl->dma_chann);
- DMA_schedule(fdctrl->dma_chann);
+ if (direction != FD_DIR_VERIFY) {
+ /* Now, we just have to wait for the DMA controller to
+ * recall us...
+ */
+ DMA_hold_DREQ(fdctrl->dma_chann);
+ DMA_schedule(fdctrl->dma_chann);
+ } else {
+ /* Start transfer */
+ fdctrl_transfer_handler(fdctrl, fdctrl->dma_chann, 0,
+ fdctrl->data_len);
+ }
return;
} else {
FLOPPY_DPRINTF("bad dma_mode=%d direction=%d\n", dma_mode,
@@ -1381,6 +1389,9 @@ static int fdctrl_transfer_handler (void *opaque, int
nchan,
goto transfer_error;
}
break;
+ case FD_DIR_VERIFY:
+ /* VERIFY commands */
+ break;
default:
/* SCAN commands */
{
@@ -1863,7 +1874,7 @@ static const struct {
{ FD_CMD_SAVE, 0xff, "SAVE", 0, fdctrl_handle_save }, /* part of READ
DELETED DATA */
{ FD_CMD_READ_DELETED, 0x1f, "READ DELETED DATA", 8,
fdctrl_start_transfer_del, FD_DIR_READ },
{ FD_CMD_SCAN_EQUAL, 0x1f, "SCAN EQUAL", 8, fdctrl_start_transfer,
FD_DIR_SCANE },
- { FD_CMD_VERIFY, 0x1f, "VERIFY", 8, fdctrl_unimplemented },
+ { FD_CMD_VERIFY, 0x1f, "VERIFY", 8, fdctrl_start_transfer, FD_DIR_VERIFY },
{ FD_CMD_SCAN_LOW_OR_EQUAL, 0x1f, "SCAN LOW OR EQUAL", 8,
fdctrl_start_transfer, FD_DIR_SCANL },
{ FD_CMD_SCAN_HIGH_OR_EQUAL, 0x1f, "SCAN HIGH OR EQUAL", 8,
fdctrl_start_transfer, FD_DIR_SCANH },
{ FD_CMD_WRITE_DELETED, 0x3f, "WRITE DELETED DATA", 8,
fdctrl_start_transfer_del, FD_DIR_WRITE },
--
1.7.10.4
- [Qemu-devel] [PATCH 0/8] fdc: fix FD_SR0_SEEK flag + implement VERIFY, Hervé Poussineau, 2012/09/06
- [Qemu-devel] [PATCH 1/8] fdc: Remove status0 parameter from fdctrl_set_fifo(), Hervé Poussineau, 2012/09/06
- [Qemu-devel] [PATCH 4/8] fdc: fix false FD_SR0_SEEK, Hervé Poussineau, 2012/09/06
- [Qemu-devel] [PATCH 2/8] fdc: use status0 field instead of a local variable, Hervé Poussineau, 2012/09/06
- [Qemu-devel] [PATCH 3/8] fdc-test: Check READ ID, Hervé Poussineau, 2012/09/06
- [Qemu-devel] [PATCH 5/8] fdc: implement VERIFY command,
Hervé Poussineau <=
- [Qemu-devel] [PATCH 6/8] fdc-tests: add tests for VERIFY command, Hervé Poussineau, 2012/09/06
- [Qemu-devel] [PATCH 8/8] fdc: fix typo in zero constant, Hervé Poussineau, 2012/09/06
- [Qemu-devel] [PATCH 7/8] fdc: remove double affectation of FD_MSR_CMDBUSY flag, Hervé Poussineau, 2012/09/06
- Re: [Qemu-devel] [PATCH 0/8] fdc: fix FD_SR0_SEEK flag + implement VERIFY, Kevin Wolf, 2012/09/07