Lines Matching full:ahci

2  * AHCI test cases
30 #include "libqos/ahci.h"
52 static void ahci_test_port_spec(AHCIQState *ahci, uint8_t port);
53 static void ahci_test_pci_spec(AHCIQState *ahci);
54 static void ahci_test_pci_caps(AHCIQState *ahci, uint16_t header,
56 static void ahci_test_satacap(AHCIQState *ahci, uint8_t offset);
57 static void ahci_test_msicap(AHCIQState *ahci, uint8_t offset);
58 static void ahci_test_pmcap(AHCIQState *ahci, uint8_t offset);
81 static void verify_state(AHCIQState *ahci, uint64_t hba_old) in verify_state() argument
88 ahci_fingerprint = qpci_config_readl(ahci->dev, PCI_VENDOR_ID); in verify_state()
89 g_assert_cmphex(ahci_fingerprint, ==, ahci->fingerprint); in verify_state()
92 if (!ahci->enabled) { in verify_state()
96 hba_base = (uint64_t)qpci_config_readl(ahci->dev, PCI_BASE_ADDRESS_5); in verify_state()
99 g_assert_cmphex(ahci_rreg(ahci, AHCI_CAP), ==, ahci->cap); in verify_state()
100 g_assert_cmphex(ahci_rreg(ahci, AHCI_CAP2), ==, ahci->cap2); in verify_state()
103 g_assert_cmphex(ahci_px_rreg(ahci, i, AHCI_PX_FB), ==, in verify_state()
104 ahci->port[i].fb); in verify_state()
105 g_assert_cmphex(ahci_px_rreg(ahci, i, AHCI_PX_CLB), ==, in verify_state()
106 ahci->port[i].clb); in verify_state()
108 ahci_get_command_header(ahci, i, j, &cmd); in verify_state()
109 g_assert_cmphex(cmd.prdtl, ==, ahci->port[i].prdtl[j]); in verify_state()
110 g_assert_cmphex(cmd.ctba, ==, ahci->port[i].ctba[j]); in verify_state()
152 * Start a Q35 machine and bookmark a handle to the AHCI device.
163 /* Verify that we have an AHCI device present. */ in ahci_vboot()
170 * Start a Q35 machine and bookmark a handle to the AHCI device.
197 static void ahci_shutdown(AHCIQState *ahci) in ahci_shutdown() argument
199 QOSState *qs = ahci->parent; in ahci_shutdown()
201 ahci_clean_mem(ahci); in ahci_shutdown()
202 free_ahci_device(ahci->dev); in ahci_shutdown()
203 g_free(ahci); in ahci_shutdown()
214 AHCIQState *ahci; in ahci_boot_and_enable() local
222 ahci = ahci_vboot(cli, ap); in ahci_boot_and_enable()
225 ahci = ahci_boot(NULL); in ahci_boot_and_enable()
228 ahci_pci_enable(ahci); in ahci_boot_and_enable()
229 ahci_hba_enable(ahci); in ahci_boot_and_enable()
231 port = ahci_port_select(ahci); in ahci_boot_and_enable()
232 ahci_port_clear(ahci, port); in ahci_boot_and_enable()
233 if (is_atapi(ahci, port)) { in ahci_boot_and_enable()
238 ahci_io(ahci, port, hello, &buff, sizeof(buff), 0); in ahci_boot_and_enable()
240 return ahci; in ahci_boot_and_enable()
248 static void ahci_test_pci_spec(AHCIQState *ahci) in ahci_test_pci_spec() argument
255 data = qpci_config_readw(ahci->dev, PCI_COMMAND); in ahci_test_pci_spec()
267 data = qpci_config_readw(ahci->dev, PCI_STATUS); in ahci_test_pci_spec()
280 datal = qpci_config_readl(ahci->dev, PCI_CLASS_REVISION); in ahci_test_pci_spec()
282 /* AHCI 1.3 specifies that at-boot, the RID should reset to 0x00, in ahci_test_pci_spec()
297 /* AHCI */ in ahci_test_pci_spec()
303 datab = qpci_config_readb(ahci->dev, PCI_CACHE_LINE_SIZE); in ahci_test_pci_spec()
306 datab = qpci_config_readb(ahci->dev, PCI_LATENCY_TIMER); in ahci_test_pci_spec()
310 datab = qpci_config_readb(ahci->dev, PCI_HEADER_TYPE); in ahci_test_pci_spec()
314 datab = qpci_config_readb(ahci->dev, PCI_BIST); in ahci_test_pci_spec()
318 datal = qpci_config_readl(ahci->dev, PCI_BASE_ADDRESS_5); in ahci_test_pci_spec()
321 qpci_config_writel(ahci->dev, PCI_BASE_ADDRESS_5, 0xFFFFFFFF); in ahci_test_pci_spec()
322 datal = qpci_config_readl(ahci->dev, PCI_BASE_ADDRESS_5); in ahci_test_pci_spec()
328 datal = qpci_config_readl(ahci->dev, PCI_CAPABILITY_LIST); in ahci_test_pci_spec()
334 data = qpci_config_readw(ahci->dev, datal); in ahci_test_pci_spec()
336 switch (ahci->fingerprint) { in ahci_test_pci_spec()
342 /* AHCI 1.3, Section 2.1.14 -- CAP must point to PMCAP. */ in ahci_test_pci_spec()
346 ahci_test_pci_caps(ahci, data, (uint8_t)datal); in ahci_test_pci_spec()
349 datal = qpci_config_readl(ahci->dev, PCI_CAPABILITY_LIST + 4); in ahci_test_pci_spec()
353 datab = qpci_config_readb(ahci->dev, PCI_INTERRUPT_LINE); in ahci_test_pci_spec()
358 * Test PCI capabilities for AHCI specification adherence.
360 static void ahci_test_pci_caps(AHCIQState *ahci, uint16_t header, in ahci_test_pci_caps() argument
370 ahci_test_pmcap(ahci, offset); in ahci_test_pci_caps()
373 ahci_test_msicap(ahci, offset); in ahci_test_pci_caps()
376 ahci_test_satacap(ahci, offset); in ahci_test_pci_caps()
384 ahci_test_pci_caps(ahci, qpci_config_readw(ahci->dev, next), next); in ahci_test_pci_caps()
389 * Test SATA PCI capabilitity for AHCI specification adherence.
391 static void ahci_test_satacap(AHCIQState *ahci, uint8_t offset) in ahci_test_satacap() argument
399 dataw = qpci_config_readw(ahci->dev, offset + 2); in ahci_test_satacap()
403 datal = qpci_config_readw(ahci->dev, offset + 4); in ahci_test_satacap()
424 * Test MSI PCI capability for AHCI specification adherence.
426 static void ahci_test_msicap(AHCIQState *ahci, uint8_t offset) in ahci_test_msicap() argument
433 dataw = qpci_config_readw(ahci->dev, offset + PCI_MSI_FLAGS); in ahci_test_msicap()
438 datal = qpci_config_readl(ahci->dev, offset + PCI_MSI_ADDRESS_LO); in ahci_test_msicap()
443 datal = qpci_config_readl(ahci->dev, offset + PCI_MSI_ADDRESS_HI); in ahci_test_msicap()
445 dataw = qpci_config_readw(ahci->dev, offset + PCI_MSI_DATA_64); in ahci_test_msicap()
449 dataw = qpci_config_readw(ahci->dev, offset + PCI_MSI_DATA_32); in ahci_test_msicap()
455 * Test Power Management PCI capability for AHCI specification adherence.
457 static void ahci_test_pmcap(AHCIQState *ahci, uint8_t offset) in ahci_test_pmcap() argument
463 dataw = qpci_config_readw(ahci->dev, offset + PCI_PM_PMC); in ahci_test_pmcap()
469 dataw = qpci_config_readw(ahci->dev, offset + PCI_PM_CTRL); in ahci_test_pmcap()
476 static void ahci_test_hba_spec(AHCIQState *ahci) in ahci_test_hba_spec() argument
484 g_assert(ahci != NULL); in ahci_test_hba_spec()
487 * Note that the AHCI spec does expect the BIOS to set up a few things: in ahci_test_hba_spec()
495 * Additional items are touched if CAP.SSS is on, see AHCI 10.1.1 p.97: in ahci_test_hba_spec()
507 ahci->cap = ahci_rreg(ahci, AHCI_CAP); in ahci_test_hba_spec()
508 ASSERT_BIT_CLEAR(ahci->cap, AHCI_CAP_RESERVED); in ahci_test_hba_spec()
511 reg = ahci_rreg(ahci, AHCI_GHC); in ahci_test_hba_spec()
515 if (BITSET(ahci->cap, AHCI_CAP_SAM)) { in ahci_test_hba_spec()
516 g_test_message("Supports AHCI-Only Mode: GHC_AE is Read-Only."); in ahci_test_hba_spec()
519 g_test_message("Supports AHCI/Legacy mix."); in ahci_test_hba_spec()
524 reg = ahci_rreg(ahci, AHCI_IS); in ahci_test_hba_spec()
528 ports = ahci_rreg(ahci, AHCI_PI); in ahci_test_hba_spec()
533 g_assert_cmpuint(((AHCI_CAP_NP & ahci->cap) + 1), >=, nports_impl); in ahci_test_hba_spec()
538 g_assert_cmphex(ahci->barsize, >, 0); in ahci_test_hba_spec()
539 maxports = (ahci->barsize - HBA_DATA_REGION_SIZE) / HBA_PORT_DATA_SIZE; in ahci_test_hba_spec()
543 /* 5 AHCI Version */ in ahci_test_hba_spec()
544 reg = ahci_rreg(ahci, AHCI_VS); in ahci_test_hba_spec()
557 reg = ahci_rreg(ahci, AHCI_CCCCTL); in ahci_test_hba_spec()
558 if (BITSET(ahci->cap, AHCI_CAP_CCCS)) { in ahci_test_hba_spec()
568 reg = ahci_rreg(ahci, AHCI_CCCPORTS); in ahci_test_hba_spec()
573 reg = ahci_rreg(ahci, AHCI_EMLOC); in ahci_test_hba_spec()
574 if (BITCLR(ahci->cap, AHCI_CAP_EMS)) { in ahci_test_hba_spec()
579 reg = ahci_rreg(ahci, AHCI_EMCTL); in ahci_test_hba_spec()
580 if (BITSET(ahci->cap, AHCI_CAP_EMS)) { in ahci_test_hba_spec()
590 ahci->cap2 = ahci_rreg(ahci, AHCI_CAP2); in ahci_test_hba_spec()
591 ASSERT_BIT_CLEAR(ahci->cap2, AHCI_CAP2_RESERVED); in ahci_test_hba_spec()
594 reg = ahci_rreg(ahci, AHCI_BOHC); in ahci_test_hba_spec()
600 reg = ahci_rreg(ahci, i); in ahci_test_hba_spec()
605 if (BITCLR(ahci->cap2, AHCI_CAP2_NVMP)) { in ahci_test_hba_spec()
608 reg = ahci_rreg(ahci, i); in ahci_test_hba_spec()
616 reg = ahci_rreg(ahci, i); in ahci_test_hba_spec()
624 ahci_test_port_spec(ahci, i); in ahci_test_hba_spec()
633 reg = ahci_rreg(ahci, j); in ahci_test_hba_spec()
643 static void ahci_test_port_spec(AHCIQState *ahci, uint8_t port) in ahci_test_port_spec() argument
649 reg = ahci_px_rreg(ahci, port, AHCI_PX_CLB); in ahci_test_port_spec()
653 if (BITCLR(ahci->cap, AHCI_CAP_S64A)) { in ahci_test_port_spec()
654 reg = ahci_px_rreg(ahci, port, AHCI_PX_CLBU); in ahci_test_port_spec()
659 reg = ahci_px_rreg(ahci, port, AHCI_PX_FB); in ahci_test_port_spec()
663 if (BITCLR(ahci->cap, AHCI_CAP_S64A)) { in ahci_test_port_spec()
664 reg = ahci_px_rreg(ahci, port, AHCI_PX_FBU); in ahci_test_port_spec()
669 reg = ahci_px_rreg(ahci, port, AHCI_PX_IS); in ahci_test_port_spec()
673 reg = ahci_px_rreg(ahci, port, AHCI_PX_IE); in ahci_test_port_spec()
677 reg = ahci_px_rreg(ahci, port, AHCI_PX_CMD); in ahci_test_port_spec()
699 if (BITCLR(ahci->cap, AHCI_CAP_SMPS)) { in ahci_test_port_spec()
710 if (BITCLR(ahci->cap, AHCI_CAP_FBSS)) { in ahci_test_port_spec()
715 reg = ahci_px_rreg(ahci, port, AHCI_PX_RES1); in ahci_test_port_spec()
719 reg = ahci_px_rreg(ahci, port, AHCI_PX_TFD); in ahci_test_port_spec()
721 * which breaks down as follows, as seen in AHCI 1.3 sec 3.3.8, p. 27. */ in ahci_test_port_spec()
731 /* Though AHCI specifies the boot value should be 0xFFFFFFFF, in ahci_test_port_spec()
732 * Even when GHC.ST is zero, the AHCI HBA may receive the initial in ahci_test_port_spec()
734 * so we cannot expect a value here. AHCI 1.3, sec 3.3.9, pp 27-28 */ in ahci_test_port_spec()
737 reg = ahci_px_rreg(ahci, port, AHCI_PX_SSTS); in ahci_test_port_spec()
743 reg = ahci_px_rreg(ahci, port, AHCI_PX_SCTL); in ahci_test_port_spec()
747 reg = ahci_px_rreg(ahci, port, AHCI_PX_SERR); in ahci_test_port_spec()
751 reg = ahci_px_rreg(ahci, port, AHCI_PX_SACT); in ahci_test_port_spec()
755 reg = ahci_px_rreg(ahci, port, AHCI_PX_CI); in ahci_test_port_spec()
759 reg = ahci_px_rreg(ahci, port, AHCI_PX_SNTF); in ahci_test_port_spec()
763 reg = ahci_px_rreg(ahci, port, AHCI_PX_FBS); in ahci_test_port_spec()
770 if (BITSET(ahci->cap, AHCI_CAP_FBSS)) { in ahci_test_port_spec()
777 reg = ahci_px_rreg(ahci, port, i); in ahci_test_port_spec()
783 reg = ahci_px_rreg(ahci, port, i); in ahci_test_port_spec()
791 * Utilizing an initialized AHCI HBA, issue an IDENTIFY command to the first
794 static void ahci_test_identify(AHCIQState *ahci) in ahci_test_identify() argument
802 g_assert(ahci != NULL); in ahci_test_identify()
805 * This serves as a bit of a tutorial on AHCI device programming: in ahci_test_identify()
815 * (6) Each AHCI port has up to 32 command slots. Each slot contains a in ahci_test_identify()
826 px = ahci_port_select(ahci); in ahci_test_identify()
830 ahci_port_clear(ahci, px); in ahci_test_identify()
833 ahci_io(ahci, px, CMD_IDENTIFY, &buff, buffsize, 0); in ahci_test_identify()
837 * Since we copy byte-for-byte in ahci-test, on both LE and BE, we need to in ahci_test_identify()
852 static void ahci_test_io_rw_simple(AHCIQState *ahci, unsigned bufsize, in ahci_test_io_rw_simple() argument
861 g_assert(ahci != NULL); in ahci_test_io_rw_simple()
864 port = ahci_port_select(ahci); in ahci_test_io_rw_simple()
865 ahci_port_clear(ahci, port); in ahci_test_io_rw_simple()
869 ptr = ahci_alloc(ahci, bufsize); in ahci_test_io_rw_simple()
874 qtest_bufwrite(ahci->parent->qts, ptr, tx, bufsize); in ahci_test_io_rw_simple()
877 ahci_guest_io(ahci, port, write_cmd, ptr, bufsize, sector); in ahci_test_io_rw_simple()
878 qtest_memset(ahci->parent->qts, ptr, 0x00, bufsize); in ahci_test_io_rw_simple()
879 ahci_guest_io(ahci, port, read_cmd, ptr, bufsize, sector); in ahci_test_io_rw_simple()
882 qtest_bufread(ahci->parent->qts, ptr, rx, bufsize); in ahci_test_io_rw_simple()
885 ahci_free(ahci, ptr); in ahci_test_io_rw_simple()
890 static uint8_t ahci_test_nondata(AHCIQState *ahci, uint8_t ide_cmd) in ahci_test_nondata() argument
895 port = ahci_port_select(ahci); in ahci_test_nondata()
896 ahci_port_clear(ahci, port); in ahci_test_nondata()
898 ahci_io(ahci, port, ide_cmd, NULL, 0, 0); in ahci_test_nondata()
903 static void ahci_test_flush(AHCIQState *ahci) in ahci_test_flush() argument
905 ahci_test_nondata(ahci, CMD_FLUSH_CACHE); in ahci_test_flush()
908 static void ahci_test_max(AHCIQState *ahci) in ahci_test_max() argument
922 port = ahci_test_nondata(ahci, cmd); in ahci_test_max()
923 qtest_memread(ahci->parent->qts, ahci->port[port].fb + 0x40, d2h, 0x20); in ahci_test_max()
941 * Basic sanity test to boot a machine, find an AHCI device, and shutdown.
945 AHCIQState *ahci; in test_sanity() local
946 ahci = ahci_boot(NULL); in test_sanity()
947 ahci_shutdown(ahci); in test_sanity()
951 * Ensure that the PCI configuration space for the AHCI device is in-line with
952 * the AHCI 1.3 specification for initial values.
956 AHCIQState *ahci; in test_pci_spec() local
957 ahci = ahci_boot(NULL); in test_pci_spec()
958 ahci_test_pci_spec(ahci); in test_pci_spec()
959 ahci_shutdown(ahci); in test_pci_spec()
963 * Engage the PCI AHCI device and sanity check the response.
968 AHCIQState *ahci; in test_pci_enable() local
969 ahci = ahci_boot(NULL); in test_pci_enable()
970 ahci_pci_enable(ahci); in test_pci_enable()
971 ahci_shutdown(ahci); in test_pci_enable()
976 * and test them for AHCI specification adherence.
980 AHCIQState *ahci; in test_hba_spec() local
982 ahci = ahci_boot(NULL); in test_hba_spec()
983 ahci_pci_enable(ahci); in test_hba_spec()
984 ahci_test_hba_spec(ahci); in test_hba_spec()
985 ahci_shutdown(ahci); in test_hba_spec()
989 * Engage the HBA functionality of the AHCI PCI device,
994 AHCIQState *ahci; in test_hba_enable() local
996 ahci = ahci_boot(NULL); in test_hba_enable()
997 ahci_pci_enable(ahci); in test_hba_enable()
998 ahci_hba_enable(ahci); in test_hba_enable()
999 ahci_shutdown(ahci); in test_hba_enable()
1008 AHCIQState *ahci; in test_identify() local
1010 ahci = ahci_boot_and_enable(NULL); in test_identify()
1011 ahci_test_identify(ahci); in test_identify()
1012 ahci_shutdown(ahci); in test_identify()
1018 * be very small, each just 32 bytes, to see how AHCI performs
1023 AHCIQState *ahci; in test_dma_fragmented() local
1031 ahci = ahci_boot_and_enable(NULL); in test_dma_fragmented()
1032 px = ahci_port_select(ahci); in test_dma_fragmented()
1033 ahci_port_clear(ahci, px); in test_dma_fragmented()
1039 ptr = guest_alloc(&ahci->parent->alloc, bufsize); in test_dma_fragmented()
1041 qtest_bufwrite(ahci->parent->qts, ptr, tx, bufsize); in test_dma_fragmented()
1045 ahci_command_commit(ahci, cmd, px); in test_dma_fragmented()
1046 ahci_command_issue(ahci, cmd); in test_dma_fragmented()
1047 ahci_command_verify(ahci, cmd); in test_dma_fragmented()
1052 ahci_command_commit(ahci, cmd, px); in test_dma_fragmented()
1053 ahci_command_issue(ahci, cmd); in test_dma_fragmented()
1054 ahci_command_verify(ahci, cmd); in test_dma_fragmented()
1058 qtest_bufread(ahci->parent->qts, ptr, rx, bufsize); in test_dma_fragmented()
1059 guest_free(&ahci->parent->alloc, ptr); in test_dma_fragmented()
1063 ahci_shutdown(ahci); in test_dma_fragmented()
1070 * Write sector 1 with random data to make AHCI storage dirty
1073 static void make_dirty(AHCIQState* ahci, uint8_t port) in make_dirty() argument
1078 ptr = ahci_alloc(ahci, bufsize); in make_dirty()
1081 ahci_guest_io(ahci, port, CMD_WRITE_DMA, ptr, bufsize, 1); in make_dirty()
1082 ahci_free(ahci, ptr); in make_dirty()
1087 AHCIQState *ahci; in test_flush() local
1090 ahci = ahci_boot_and_enable(NULL); in test_flush()
1092 port = ahci_port_select(ahci); in test_flush()
1093 ahci_port_clear(ahci, port); in test_flush()
1095 make_dirty(ahci, port); in test_flush()
1097 ahci_test_flush(ahci); in test_flush()
1098 ahci_shutdown(ahci); in test_flush()
1103 AHCIQState *ahci; in test_flush_retry() local
1108 ahci = ahci_boot_and_enable("-drive file=blkdebug:%s:%s,if=none,id=drive0," in test_flush_retry()
1116 port = ahci_port_select(ahci); in test_flush_retry()
1117 ahci_port_clear(ahci, port); in test_flush_retry()
1120 make_dirty(ahci, port); in test_flush_retry()
1123 cmd = ahci_guest_io_halt(ahci, port, CMD_FLUSH_CACHE, 0, 0, 0); in test_flush_retry()
1124 ahci_guest_io_resume(ahci, cmd); in test_flush_retry()
1126 ahci_shutdown(ahci); in test_flush_retry()
1130 * Basic sanity test to boot a machine, find an AHCI device, and shutdown.
1210 AHCIQState *ahci; in ahci_halted_io_test() local
1220 ahci = ahci_boot_and_enable("-drive file=blkdebug:%s:%s,if=none,id=drive0," in ahci_halted_io_test()
1229 port = ahci_port_select(ahci); in ahci_halted_io_test()
1230 ahci_port_clear(ahci, port); in ahci_halted_io_test()
1234 ptr = ahci_alloc(ahci, bufsize); in ahci_halted_io_test()
1236 qtest_memwrite(ahci->parent->qts, ptr, tx, bufsize); in ahci_halted_io_test()
1239 cmd = ahci_guest_io_halt(ahci, port, cmd_write, in ahci_halted_io_test()
1243 ahci_guest_io_resume(ahci, cmd); in ahci_halted_io_test()
1244 ahci_free(ahci, ptr); in ahci_halted_io_test()
1247 ahci_io(ahci, port, cmd_read, rx, bufsize, 0); in ahci_halted_io_test()
1251 ahci_shutdown(ahci); in ahci_halted_io_test()
1397 AHCIQState *ahci; in test_max() local
1399 ahci = ahci_boot_and_enable(NULL); in test_max()
1400 ahci_test_max(ahci); in test_max()
1401 ahci_shutdown(ahci); in test_max()
1406 AHCIQState *ahci; in test_reset() local
1409 ahci = ahci_boot(NULL); in test_reset()
1410 ahci_test_pci_spec(ahci); in test_reset()
1411 ahci_pci_enable(ahci); in test_reset()
1414 ahci_test_hba_spec(ahci); in test_reset()
1415 ahci_hba_enable(ahci); in test_reset()
1416 ahci_test_identify(ahci); in test_reset()
1417 ahci_test_io_rw_simple(ahci, 4096, 0, in test_reset()
1420 ahci_set(ahci, AHCI_GHC, AHCI_GHC_HR); in test_reset()
1421 ahci_clean_mem(ahci); in test_reset()
1424 ahci_shutdown(ahci); in test_reset()
1429 AHCIQState *ahci; in test_reset_pending_callback() local
1446 ahci = ahci_boot_and_enable("-drive if=none,id=drive0,file=%s," in test_reset_pending_callback()
1453 port = ahci_port_select(ahci); in test_reset_pending_callback()
1454 ahci_port_clear(ahci, port); in test_reset_pending_callback()
1456 ptr1 = ahci_alloc(ahci, bufsize); in test_reset_pending_callback()
1457 ptr2 = ahci_alloc(ahci, bufsize); in test_reset_pending_callback()
1467 qtest_bufwrite(ahci->parent->qts, ptr1, tx1, bufsize); in test_reset_pending_callback()
1468 qtest_bufwrite(ahci->parent->qts, ptr2, tx2, bufsize); in test_reset_pending_callback()
1471 ahci_guest_io(ahci, port, CMD_WRITE_DMA_EXT, ptr1, bufsize, offset1); in test_reset_pending_callback()
1476 ahci_command_commit(ahci, cmd, port); in test_reset_pending_callback()
1477 ahci_command_issue_async(ahci, cmd); in test_reset_pending_callback()
1479 ahci_set(ahci, AHCI_GHC, AHCI_GHC_HR); in test_reset_pending_callback()
1487 ahci_clean_mem(ahci); in test_reset_pending_callback()
1488 ahci_pci_enable(ahci); in test_reset_pending_callback()
1489 ahci_hba_enable(ahci); in test_reset_pending_callback()
1490 port = ahci_port_select(ahci); in test_reset_pending_callback()
1491 ahci_port_clear(ahci, port); in test_reset_pending_callback()
1494 ahci_guest_io(ahci, port, CMD_READ_DMA_EXT, ptr1, bufsize, offset1); in test_reset_pending_callback()
1495 qtest_bufread(ahci->parent->qts, ptr1, rx1, bufsize); in test_reset_pending_callback()
1498 ahci_guest_io(ahci, port, CMD_READ_DMA_EXT, ptr2, bufsize, offset2); in test_reset_pending_callback()
1499 qtest_bufread(ahci->parent->qts, ptr2, rx2, bufsize); in test_reset_pending_callback()
1502 ahci_free(ahci, ptr1); in test_reset_pending_callback()
1503 ahci_free(ahci, ptr2); in test_reset_pending_callback()
1505 ahci_clean_mem(ahci); in test_reset_pending_callback()
1507 ahci_shutdown(ahci); in test_reset_pending_callback()
1512 AHCIQState *ahci; in test_ncq_simple() local
1514 ahci = ahci_boot_and_enable(NULL); in test_ncq_simple()
1515 ahci_test_io_rw_simple(ahci, 4096, 0, in test_ncq_simple()
1518 ahci_shutdown(ahci); in test_ncq_simple()
1550 static int ahci_cb_cmp_buff(AHCIQState *ahci, AHCICommand *cmd, in ahci_cb_cmp_buff() argument
1561 qtest_bufread(ahci->parent->qts, opts->buffer, rx, opts->size); in ahci_cb_cmp_buff()
1571 AHCIQState *ahci; in ahci_test_cdrom() local
1590 ahci = ahci_boot_and_enable("-drive if=none,id=drive0,file=%s,format=raw " in ahci_test_cdrom()
1594 /* Build & Send AHCI command */ in ahci_test_cdrom()
1595 ahci_exec(ahci, ahci_port_select(ahci), cmd, &opts); in ahci_test_cdrom()
1599 ahci_shutdown(ahci); in ahci_test_cdrom()
1636 static void atapi_wait_tray(AHCIQState *ahci, bool open) in atapi_wait_tray() argument
1638 QDict *rsp = qtest_qmp_eventwait_ref(ahci->parent->qts, in atapi_wait_tray()
1651 AHCIQState *ahci; in test_atapi_tray() local
1660 ahci = ahci_boot_and_enable("-blockdev node-name=drive0,driver=file,filename=%s " in test_atapi_tray()
1663 port = ahci_port_select(ahci); in test_atapi_tray()
1665 ahci_atapi_eject(ahci, port); in test_atapi_tray()
1666 atapi_wait_tray(ahci, true); in test_atapi_tray()
1668 ahci_atapi_load(ahci, port); in test_atapi_tray()
1669 atapi_wait_tray(ahci, false); in test_atapi_tray()
1672 qtest_qmp_send(ahci->parent->qts, "{'execute': 'blockdev-open-tray', " in test_atapi_tray()
1674 atapi_wait_tray(ahci, true); in test_atapi_tray()
1675 rsp = qtest_qmp_receive(ahci->parent->qts); in test_atapi_tray()
1678 qtest_qmp_assert_success(ahci->parent->qts, in test_atapi_tray()
1683 ahci_atapi_load(ahci, port); in test_atapi_tray()
1684 atapi_wait_tray(ahci, false); in test_atapi_tray()
1686 ahci_atapi_eject(ahci, port); in test_atapi_tray()
1687 atapi_wait_tray(ahci, true); in test_atapi_tray()
1691 ahci->parent->qts, in test_atapi_tray()
1698 ahci->parent->qts, in test_atapi_tray()
1704 qtest_qmp_send(ahci->parent->qts, "{'execute': 'blockdev-close-tray', " in test_atapi_tray()
1706 atapi_wait_tray(ahci, false); in test_atapi_tray()
1707 rsp = qtest_qmp_receive(ahci->parent->qts); in test_atapi_tray()
1711 ahci_atapi_test_ready(ahci, port, false, SENSE_NOT_READY); in test_atapi_tray()
1712 ahci_atapi_get_sense(ahci, port, &sense, &asc); in test_atapi_tray()
1716 ahci_atapi_test_ready(ahci, port, false, SENSE_UNIT_ATTENTION); in test_atapi_tray()
1717 ahci_atapi_get_sense(ahci, port, &sense, &asc); in test_atapi_tray()
1721 ahci_atapi_test_ready(ahci, port, true, SENSE_NO_SENSE); in test_atapi_tray()
1722 ahci_atapi_get_sense(ahci, port, &sense, &asc); in test_atapi_tray()
1726 ahci_atapi_eject(ahci, port); in test_atapi_tray()
1727 atapi_wait_tray(ahci, true); in test_atapi_tray()
1729 ahci_atapi_load(ahci, port); in test_atapi_tray()
1730 atapi_wait_tray(ahci, false); in test_atapi_tray()
1734 ahci_shutdown(ahci); in test_atapi_tray()
1739 /* AHCI I/O Test Matrix Definitions */
1846 AHCIQState *ahci; in test_io_rw_interface() local
1848 ahci = ahci_boot_and_enable(NULL); in test_io_rw_interface()
1849 ahci_test_io_rw_simple(ahci, bufsize, sector, in test_io_rw_interface()
1852 ahci_shutdown(ahci); in test_io_rw_interface()
1899 name = g_strdup_printf("ahci/io/%s/%s/%s/%s", in create_ahci_io_test()
2002 qtest_add_func("/ahci/sanity", test_sanity); in main()
2003 qtest_add_func("/ahci/pci_spec", test_pci_spec); in main()
2004 qtest_add_func("/ahci/pci_enable", test_pci_enable); in main()
2005 qtest_add_func("/ahci/hba_spec", test_hba_spec); in main()
2006 qtest_add_func("/ahci/hba_enable", test_hba_enable); in main()
2007 qtest_add_func("/ahci/identify", test_identify); in main()
2019 qtest_add_func("/ahci/io/dma/lba28/fragmented", test_dma_fragmented); in main()
2021 qtest_add_func("/ahci/flush/simple", test_flush); in main()
2022 qtest_add_func("/ahci/flush/retry", test_flush_retry); in main()
2023 qtest_add_func("/ahci/flush/migrate", test_flush_migrate); in main()
2025 qtest_add_func("/ahci/migrate/sanity", test_migrate_sanity); in main()
2026 qtest_add_func("/ahci/migrate/dma/simple", test_migrate_dma); in main()
2027 qtest_add_func("/ahci/io/dma/lba28/retry", test_halted_dma); in main()
2028 qtest_add_func("/ahci/migrate/dma/halted", test_migrate_halted_dma); in main()
2030 qtest_add_func("/ahci/max", test_max); in main()
2031 qtest_add_func("/ahci/reset/simple", test_reset); in main()
2032 qtest_add_func("/ahci/reset/pending_callback", test_reset_pending_callback); in main()
2034 qtest_add_func("/ahci/io/ncq/simple", test_ncq_simple); in main()
2035 qtest_add_func("/ahci/migrate/ncq/simple", test_migrate_ncq); in main()
2036 qtest_add_func("/ahci/io/ncq/retry", test_halted_ncq); in main()
2037 qtest_add_func("/ahci/migrate/ncq/halted", test_migrate_halted_ncq); in main()
2039 qtest_add_func("/ahci/cdrom/dma/single", test_cdrom_dma); in main()
2040 qtest_add_func("/ahci/cdrom/dma/multi", test_cdrom_dma_multi); in main()
2041 qtest_add_func("/ahci/cdrom/pio/single", test_cdrom_pio); in main()
2042 qtest_add_func("/ahci/cdrom/pio/multi", test_cdrom_pio_multi); in main()
2044 qtest_add_func("/ahci/cdrom/pio/bcl", test_atapi_bcl); in main()
2045 qtest_add_func("/ahci/cdrom/eject", test_atapi_tray); in main()