libqos/ahci: add ahci command verify
Helps to verify that a command completed successfully. Signed-off-by: John Snow <jsnow@redhat.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Message-id: 1423158090-25580-14-git-send-email-jsnow@redhat.com Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
64a5a272e3
commit
ea41deb602
@ -662,7 +662,6 @@ static void ahci_test_identify(AHCIQState *ahci)
|
||||
unsigned i;
|
||||
int rc;
|
||||
AHCICommand *cmd;
|
||||
uint8_t cx;
|
||||
|
||||
g_assert(ahci != NULL);
|
||||
|
||||
@ -702,20 +701,9 @@ static void ahci_test_identify(AHCIQState *ahci)
|
||||
* so we should find that there are no pending interrupts yet. */
|
||||
g_assert_cmphex(ahci_px_rreg(ahci, i, AHCI_PX_IS), ==, 0);
|
||||
|
||||
/* Issue Command #cx via PxCI */
|
||||
/* Issue command and sanity check response. */
|
||||
ahci_command_issue(ahci, cmd);
|
||||
cx = ahci_command_slot(cmd);
|
||||
|
||||
/* Check registers for post-command consistency */
|
||||
ahci_port_check_error(ahci, i);
|
||||
/* BUG: we expect AHCI_PX_IS_DPS to be set. */
|
||||
ahci_port_check_interrupts(ahci, i, AHCI_PX_IS_DHRS | AHCI_PX_IS_PSS);
|
||||
ahci_port_check_nonbusy(ahci, i, cx);
|
||||
/* Investigate the CMD, assert that we read 512 bytes */
|
||||
ahci_port_check_cmd_sanity(ahci, i, cx, 512);
|
||||
/* Investigate FIS responses */
|
||||
ahci_port_check_d2h_sanity(ahci, i, cx);
|
||||
ahci_port_check_pio_sanity(ahci, i, cx, 512);
|
||||
ahci_command_verify(ahci, cmd);
|
||||
|
||||
/* Last, but not least: Investigate the IDENTIFY response data. */
|
||||
memread(data_ptr, &buff, 512);
|
||||
|
@ -737,6 +737,21 @@ void ahci_command_issue(AHCIQState *ahci, AHCICommand *cmd)
|
||||
ahci_command_wait(ahci, cmd);
|
||||
}
|
||||
|
||||
void ahci_command_verify(AHCIQState *ahci, AHCICommand *cmd)
|
||||
{
|
||||
uint8_t slot = cmd->slot;
|
||||
uint8_t port = cmd->port;
|
||||
|
||||
ahci_port_check_error(ahci, port);
|
||||
ahci_port_check_interrupts(ahci, port, cmd->interrupts);
|
||||
ahci_port_check_nonbusy(ahci, port, slot);
|
||||
ahci_port_check_cmd_sanity(ahci, port, slot, cmd->xbytes);
|
||||
ahci_port_check_d2h_sanity(ahci, port, slot);
|
||||
if (cmd->props->pio) {
|
||||
ahci_port_check_pio_sanity(ahci, port, slot, cmd->xbytes);
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t ahci_command_slot(AHCICommand *cmd)
|
||||
{
|
||||
return cmd->slot;
|
||||
|
@ -528,6 +528,7 @@ void ahci_command_commit(AHCIQState *ahci, AHCICommand *cmd, uint8_t port);
|
||||
void ahci_command_issue(AHCIQState *ahci, AHCICommand *cmd);
|
||||
void ahci_command_issue_async(AHCIQState *ahci, AHCICommand *cmd);
|
||||
void ahci_command_wait(AHCIQState *ahci, AHCICommand *cmd);
|
||||
void ahci_command_verify(AHCIQState *ahci, AHCICommand *cmd);
|
||||
void ahci_command_free(AHCICommand *cmd);
|
||||
|
||||
/* Command adjustments */
|
||||
|
Loading…
Reference in New Issue
Block a user