static void test_dma_fragmented(void)

{

    AHCIQState *ahci;

    AHCICommand *cmd;

    uint8_t px;

    size_t bufsize = 4096;

    unsigned char *tx = g_malloc(bufsize);

    unsigned char *rx = g_malloc0(bufsize);

    uint64_t ptr;



    ahci = ahci_boot_and_enable();

    px = ahci_port_select(ahci);

    ahci_port_clear(ahci, px);



    /* create pattern */

    generate_pattern(tx, bufsize, AHCI_SECTOR_SIZE);



    /* Create a DMA buffer in guest memory, and write our pattern to it. */

    ptr = guest_alloc(ahci->parent->alloc, bufsize);

    g_assert(ptr);

    memwrite(ptr, tx, bufsize);



    cmd = ahci_command_create(CMD_WRITE_DMA);

    ahci_command_adjust(cmd, 0, ptr, bufsize, 32);

    ahci_command_commit(ahci, cmd, px);

    ahci_command_issue(ahci, cmd);

    ahci_command_verify(ahci, cmd);

    g_free(cmd);



    cmd = ahci_command_create(CMD_READ_DMA);

    ahci_command_adjust(cmd, 0, ptr, bufsize, 32);

    ahci_command_commit(ahci, cmd, px);

    ahci_command_issue(ahci, cmd);

    ahci_command_verify(ahci, cmd);

    g_free(cmd);



    /* Read back the guest's receive buffer into local memory */

    memread(ptr, rx, bufsize);

    guest_free(ahci->parent->alloc, ptr);



    g_assert_cmphex(memcmp(tx, rx, bufsize), ==, 0);



    ahci_shutdown(ahci);



    g_free(rx);

    g_free(tx);

}

static void test_dma_fragmented(void)

{

    AHCIQState *ahci;

    AHCICommand *cmd;

    uint8_t px;

    size_t bufsize = 4096;

    unsigned char *tx = g_malloc(bufsize);

    unsigned char *rx = g_malloc0(bufsize);

    uint64_t ptr;



    ahci = ahci_boot_and_enable();

    px = ahci_port_select(ahci);

    ahci_port_clear(ahci, px);



    

    generate_pattern(tx, bufsize, AHCI_SECTOR_SIZE);



    

    ptr = guest_alloc(ahci->parent->alloc, bufsize);

    g_assert(ptr);

    memwrite(ptr, tx, bufsize);



    cmd = ahci_command_create(CMD_WRITE_DMA);

    ahci_command_adjust(cmd, 0, ptr, bufsize, 32);

    ahci_command_commit(ahci, cmd, px);

    ahci_command_issue(ahci, cmd);

    ahci_command_verify(ahci, cmd);

    g_free(cmd);



    cmd = ahci_command_create(CMD_READ_DMA);

    ahci_command_adjust(cmd, 0, ptr, bufsize, 32);

    ahci_command_commit(ahci, cmd, px);

    ahci_command_issue(ahci, cmd);

    ahci_command_verify(ahci, cmd);

    g_free(cmd);



    

    memread(ptr, rx, bufsize);

    guest_free(ahci->parent->alloc, ptr);



    g_assert_cmphex(memcmp(tx, rx, bufsize), ==, 0);



    ahci_shutdown(ahci);



    g_free(rx);

    g_free(tx);

}

static void FUNC_0(void)

{

    AHCIQState *ahci;

    AHCICommand *cmd;

    uint8_t px;

    size_t bufsize = 4096;

    unsigned char *VAR_0 = g_malloc(bufsize);

    unsigned char *VAR_1 = g_malloc0(bufsize);

    uint64_t ptr;



    ahci = ahci_boot_and_enable();

    px = ahci_port_select(ahci);

    ahci_port_clear(ahci, px);



    

    generate_pattern(VAR_0, bufsize, AHCI_SECTOR_SIZE);



    

    ptr = guest_alloc(ahci->parent->alloc, bufsize);

    g_assert(ptr);

    memwrite(ptr, VAR_0, bufsize);



    cmd = ahci_command_create(CMD_WRITE_DMA);

    ahci_command_adjust(cmd, 0, ptr, bufsize, 32);

    ahci_command_commit(ahci, cmd, px);

    ahci_command_issue(ahci, cmd);

    ahci_command_verify(ahci, cmd);

    g_free(cmd);



    cmd = ahci_command_create(CMD_READ_DMA);

    ahci_command_adjust(cmd, 0, ptr, bufsize, 32);

    ahci_command_commit(ahci, cmd, px);

    ahci_command_issue(ahci, cmd);

    ahci_command_verify(ahci, cmd);

    g_free(cmd);



    

    memread(ptr, VAR_1, bufsize);

    guest_free(ahci->parent->alloc, ptr);



    g_assert_cmphex(memcmp(VAR_0, VAR_1, bufsize), ==, 0);



    ahci_shutdown(ahci);



    g_free(VAR_1);

    g_free(VAR_0);

}

static void FUNC_0(void)
{ AHCIQState *ahci; AHCICommand *cmd; uint8_t px; size_t bufsize = 4096; unsigned char *VAR_0 = g_malloc(bufsize); unsigned char *VAR_1 = g_malloc0(bufsize); uint64_t ptr; ahci = ahci_boot_and_enable(); px = ahci_port_select(ahci); ahci_port_clear(ahci, px); generate_pattern(VAR_0, bufsize, AHCI_SECTOR_SIZE); ptr = guest_alloc(ahci->parent->alloc, bufsize); g_assert(ptr); memwrite(ptr, VAR_0, bufsize); cmd = ahci_command_create(CMD_WRITE_DMA); ahci_command_adjust(cmd, 0, ptr, bufsize, 32); ahci_command_commit(ahci, cmd, px); ahci_command_issue(ahci, cmd); ahci_command_verify(ahci, cmd); g_free(cmd); cmd = ahci_command_create(CMD_READ_DMA); ahci_command_adjust(cmd, 0, ptr, bufsize, 32); ahci_command_commit(ahci, cmd, px); ahci_command_issue(ahci, cmd); ahci_command_verify(ahci, cmd); g_free(cmd); memread(ptr, VAR_1, bufsize); guest_free(ahci->parent->alloc, ptr); g_assert_cmphex(memcmp(VAR_0, VAR_1, bufsize), ==, 0); ahci_shutdown(ahci); g_free(VAR_1); g_free(VAR_0); }