diff options
author | John Snow <jsnow@redhat.com> | 2015-02-05 12:41:12 -0500 |
---|---|---|
committer | Stefan Hajnoczi <stefanha@redhat.com> | 2015-02-16 15:07:16 +0000 |
commit | e77448a385dc72fa671752ec11c84c931f316d09 (patch) | |
tree | 3910d33918ca8b913467b7c811942248458ecb9d /tests | |
parent | b0e5d90ebc3edb5cfc1d5d33dd3334482dee6d46 (diff) |
libqos/ahci: Add ahci_port_select helper
This helper identifies which port of the
AHCI HBA has a device we may run tests on.
Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-id: 1423158090-25580-2-git-send-email-jsnow@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/ahci-test.c | 19 | ||||
-rw-r--r-- | tests/libqos/ahci.c | 27 | ||||
-rw-r--r-- | tests/libqos/ahci.h | 1 |
3 files changed, 30 insertions, 17 deletions
diff --git a/tests/ahci-test.c b/tests/ahci-test.c index fca33d2998..c689b62fc0 100644 --- a/tests/ahci-test.c +++ b/tests/ahci-test.c @@ -662,7 +662,7 @@ static void ahci_test_identify(AHCIQState *ahci) RegH2DFIS fis; AHCICommand cmd; PRD prd; - uint32_t ports, reg, table, data_ptr; + uint32_t reg, table, data_ptr; uint16_t buff[256]; unsigned i; int rc; @@ -684,22 +684,7 @@ static void ahci_test_identify(AHCIQState *ahci) */ /* Pick the first implemented and running port */ - ports = ahci_rreg(ahci, AHCI_PI); - for (i = 0; i < 32; ports >>= 1, ++i) { - if (ports == 0) { - i = 32; - } - - if (!(ports & 0x01)) { - continue; - } - - reg = ahci_px_rreg(ahci, i, AHCI_PX_CMD); - if (BITSET(reg, AHCI_PX_CMD_ST)) { - break; - } - } - g_assert_cmphex(i, <, 32); + i = ahci_port_select(ahci); g_test_message("Selected port %u for test", i); /* Clear out this port's interrupts (ignore the init register d2h fis) */ diff --git a/tests/libqos/ahci.c b/tests/libqos/ahci.c index 5164d42450..7ea55f90b7 100644 --- a/tests/libqos/ahci.c +++ b/tests/libqos/ahci.c @@ -267,3 +267,30 @@ void ahci_hba_enable(AHCIQState *ahci) * In the future, a small test-case to inspect the Register D2H FIS * and clear the initial interrupts might be good. */ } + +/** + * Pick the first implemented and running port + */ +unsigned ahci_port_select(AHCIQState *ahci) +{ + uint32_t ports, reg; + unsigned i; + + ports = ahci_rreg(ahci, AHCI_PI); + for (i = 0; i < 32; ports >>= 1, ++i) { + if (ports == 0) { + i = 32; + } + + if (!(ports & 0x01)) { + continue; + } + + reg = ahci_px_rreg(ahci, i, AHCI_PX_CMD); + if (BITSET(reg, AHCI_PX_CMD_ST)) { + break; + } + } + g_assert(i < 32); + return i; +} diff --git a/tests/libqos/ahci.h b/tests/libqos/ahci.h index 77f205590e..b3992e19e5 100644 --- a/tests/libqos/ahci.h +++ b/tests/libqos/ahci.h @@ -431,5 +431,6 @@ void free_ahci_device(QPCIDevice *dev); void ahci_pci_enable(AHCIQState *ahci); void start_ahci_device(AHCIQState *ahci); void ahci_hba_enable(AHCIQState *ahci); +unsigned ahci_port_select(AHCIQState *ahci); #endif |