From e77448a385dc72fa671752ec11c84c931f316d09 Mon Sep 17 00:00:00 2001 From: John Snow Date: Thu, 5 Feb 2015 12:41:12 -0500 Subject: 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 Reviewed-by: Paolo Bonzini Message-id: 1423158090-25580-2-git-send-email-jsnow@redhat.com Signed-off-by: Stefan Hajnoczi --- tests/ahci-test.c | 19 ++----------------- tests/libqos/ahci.c | 27 +++++++++++++++++++++++++++ tests/libqos/ahci.h | 1 + 3 files changed, 30 insertions(+), 17 deletions(-) (limited to 'tests') diff --git a/tests/ahci-test.c b/tests/ahci-test.c index fca33d2..c689b62 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 5164d42..7ea55f9 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 77f2055..b3992e1 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 -- cgit v1.1