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/libqos | |
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/libqos')
-rw-r--r-- | tests/libqos/ahci.c | 27 | ||||
-rw-r--r-- | tests/libqos/ahci.h | 1 |
2 files changed, 28 insertions, 0 deletions
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 |