aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJohn Snow <jsnow@redhat.com>2015-02-05 12:41:24 -0500
committerStefan Hajnoczi <stefanha@redhat.com>2015-02-16 15:07:17 +0000
commitea41deb6022c1468de094dac12610de74220e4b0 (patch)
tree1993897fee79be43da7c0df2364e0f076559ac50 /tests
parent64a5a272e31c99cfb348f908d71c98d2eb83ba28 (diff)
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>
Diffstat (limited to 'tests')
-rw-r--r--tests/ahci-test.c16
-rw-r--r--tests/libqos/ahci.c15
-rw-r--r--tests/libqos/ahci.h1
3 files changed, 18 insertions, 14 deletions
diff --git a/tests/ahci-test.c b/tests/ahci-test.c
index 08340207b3..6e7b76533f 100644
--- a/tests/ahci-test.c
+++ b/tests/ahci-test.c
@@ -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);
diff --git a/tests/libqos/ahci.c b/tests/libqos/ahci.c
index 21f86c0799..09e7159d25 100644
--- a/tests/libqos/ahci.c
+++ b/tests/libqos/ahci.c
@@ -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;
diff --git a/tests/libqos/ahci.h b/tests/libqos/ahci.h
index 6ca1a6eb15..26ccdd6d9b 100644
--- a/tests/libqos/ahci.h
+++ b/tests/libqos/ahci.h
@@ -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 */