ahci: stash ncq command

For migration and werror=stop/rerror=stop resume purposes,
it will be convenient to have the command handy inside of
ncq_tfs.

Eventually, we'd like to avoid reading from the FIS entirely
after the initial read, so this is a byte (hah!) sized step
in that direction.

Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Message-id: 1435767578-32743-3-git-send-email-jsnow@redhat.com
This commit is contained in:
John Snow 2015-07-04 02:06:04 -04:00
parent a718978ed5
commit 4614619ee4
2 changed files with 3 additions and 1 deletions

View File

@ -996,6 +996,7 @@ static void process_ncq_command(AHCIState *s, int port, uint8_t *cmd_fis,
ncq_tfs->used = 1; ncq_tfs->used = 1;
ncq_tfs->drive = ad; ncq_tfs->drive = ad;
ncq_tfs->slot = slot; ncq_tfs->slot = slot;
ncq_tfs->cmd = ncq_fis->command;
ncq_tfs->lba = ((uint64_t)ncq_fis->lba5 << 40) | ncq_tfs->lba = ((uint64_t)ncq_fis->lba5 << 40) |
((uint64_t)ncq_fis->lba4 << 32) | ((uint64_t)ncq_fis->lba4 << 32) |
((uint64_t)ncq_fis->lba3 << 24) | ((uint64_t)ncq_fis->lba3 << 24) |
@ -1047,7 +1048,7 @@ static void process_ncq_command(AHCIState *s, int port, uint8_t *cmd_fis,
ncq_tfs->lba, ncq_tfs->lba + ncq_tfs->sector_count - 1, ncq_tfs->lba, ncq_tfs->lba + ncq_tfs->sector_count - 1,
ide_state->nb_sectors - 1); ide_state->nb_sectors - 1);
switch(ncq_fis->command) { switch (ncq_tfs->cmd) {
case READ_FPDMA_QUEUED: case READ_FPDMA_QUEUED:
DPRINTF(port, "NCQ reading %d sectors from LBA %"PRId64", " DPRINTF(port, "NCQ reading %d sectors from LBA %"PRId64", "
"tag %d\n", "tag %d\n",

View File

@ -259,6 +259,7 @@ typedef struct NCQTransferState {
uint16_t sector_count; uint16_t sector_count;
uint64_t lba; uint64_t lba;
uint8_t tag; uint8_t tag;
uint8_t cmd;
int slot; int slot;
int used; int used;
} NCQTransferState; } NCQTransferState;