/*
 * QTest testcase for am53c974
 *
 * Copyright (c) 2021 Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
 *
 * This work is licensed under the terms of the GNU GPL, version 2 or
 * later. See the COPYING file in the top-level directory.
 */

#include "qemu/osdep.h"

#include "libqtest.h"


static void test_cmdfifo_underflow_ok(void)
{
    QTestState *s = qtest_init(
        "-device am53c974,id=scsi "
        "-device scsi-hd,drive=disk0 -drive "
        "id=disk0,if=none,file=null-co://,format=raw -nodefaults");
    qtest_outl(s, 0xcf8, 0x80001004);
    qtest_outw(s, 0xcfc, 0x01);
    qtest_outl(s, 0xcf8, 0x8000100e);
    qtest_outl(s, 0xcfc, 0x8a000000);
    qtest_outl(s, 0x8a09, 0x42000000);
    qtest_outl(s, 0x8a0d, 0x00);
    qtest_outl(s, 0x8a0b, 0x1000);
    qtest_quit(s);
}

/* Reported as crash_1548bd10e7 */
static void test_cmdfifo_underflow2_ok(void)
{
    QTestState *s = qtest_init(
        "-device am53c974,id=scsi -device scsi-hd,drive=disk0 "
        "-drive id=disk0,if=none,file=null-co://,format=raw -nodefaults");
    qtest_outl(s, 0xcf8, 0x80001010);
    qtest_outl(s, 0xcfc, 0xc000);
    qtest_outl(s, 0xcf8, 0x80001004);
    qtest_outw(s, 0xcfc, 0x01);
    qtest_outw(s, 0xc00c, 0x41);
    qtest_outw(s, 0xc00a, 0x00);
    qtest_outl(s, 0xc00a, 0x00);
    qtest_outw(s, 0xc00c, 0x43);
    qtest_outw(s, 0xc00b, 0x00);
    qtest_outw(s, 0xc00b, 0x00);
    qtest_outw(s, 0xc00c, 0x00);
    qtest_outl(s, 0xc00a, 0x00);
    qtest_outw(s, 0xc00a, 0x00);
    qtest_outl(s, 0xc00a, 0x00);
    qtest_outw(s, 0xc00c, 0x00);
    qtest_outl(s, 0xc00a, 0x00);
    qtest_outw(s, 0xc00a, 0x00);
    qtest_outl(s, 0xc00a, 0x00);
    qtest_outw(s, 0xc00c, 0x00);
    qtest_outl(s, 0xc00a, 0x00);
    qtest_outw(s, 0xc00a, 0x00);
    qtest_outl(s, 0xc00a, 0x00);
    qtest_outw(s, 0xc00c, 0x00);
    qtest_outl(s, 0xc00a, 0x00);
    qtest_outl(s, 0xc006, 0x00);
    qtest_outl(s, 0xc00b, 0x00);
    qtest_outw(s, 0xc00b, 0x0800);
    qtest_outw(s, 0xc00b, 0x00);
    qtest_outw(s, 0xc00b, 0x00);
    qtest_outl(s, 0xc006, 0x00);
    qtest_outl(s, 0xc00b, 0x00);
    qtest_outw(s, 0xc00b, 0x0800);
    qtest_outw(s, 0xc00b, 0x00);
    qtest_outw(s, 0xc00b, 0x4100);
    qtest_outw(s, 0xc00a, 0x00);
    qtest_outl(s, 0xc00a, 0x100000);
    qtest_outl(s, 0xc00a, 0x00);
    qtest_outw(s, 0xc00c, 0x43);
    qtest_outl(s, 0xc00a, 0x100000);
    qtest_outl(s, 0xc00a, 0x100000);
    qtest_quit(s);
}

static void test_cmdfifo_overflow_ok(void)
{
    QTestState *s = qtest_init(
        "-device am53c974,id=scsi "
        "-device scsi-hd,drive=disk0 -drive "
        "id=disk0,if=none,file=null-co://,format=raw -nodefaults");
    qtest_outl(s, 0xcf8, 0x80001004);
    qtest_outw(s, 0xcfc, 0x01);
    qtest_outl(s, 0xcf8, 0x8000100e);
    qtest_outl(s, 0xcfc, 0x0e000000);
    qtest_outl(s, 0xe40, 0x03);
    qtest_outl(s, 0xe0b, 0x4100);
    qtest_outl(s, 0xe0b, 0x9000);
    qtest_quit(s);
}

/* Reported as crash_530ff2e211 */
static void test_cmdfifo_overflow2_ok(void)
{
    QTestState *s = qtest_init(
        "-device am53c974,id=scsi -device scsi-hd,drive=disk0 "
        "-drive id=disk0,if=none,file=null-co://,format=raw -nodefaults");
    qtest_outl(s, 0xcf8, 0x80001010);
    qtest_outl(s, 0xcfc, 0xc000);
    qtest_outl(s, 0xcf8, 0x80001004);
    qtest_outw(s, 0xcfc, 0x01);
    qtest_outl(s, 0xc00b, 0x4100);
    qtest_outw(s, 0xc00b, 0xc200);
    qtest_outl(s, 0xc03f, 0x0300);
    qtest_quit(s);
}

/* Reported as crash_0900379669 */
static void test_fifo_pop_buf(void)
{
    QTestState *s = qtest_init(
        "-device am53c974,id=scsi -device scsi-hd,drive=disk0 "
        "-drive id=disk0,if=none,file=null-co://,format=raw -nodefaults");
    qtest_outl(s, 0xcf8, 0x80001010);
    qtest_outl(s, 0xcfc, 0xc000);
    qtest_outl(s, 0xcf8, 0x80001004);
    qtest_outw(s, 0xcfc, 0x01);
    qtest_outb(s, 0xc000, 0x4);
    qtest_outb(s, 0xc008, 0xa0);
    qtest_outl(s, 0xc03f, 0x0300);
    qtest_outl(s, 0xc00b, 0xc300);
    qtest_outw(s, 0xc00b, 0x9000);
    qtest_outl(s, 0xc00b, 0xc300);
    qtest_outl(s, 0xc00b, 0xc300);
    qtest_outl(s, 0xc00b, 0xc300);
    qtest_outw(s, 0xc00b, 0x9000);
    qtest_outw(s, 0xc00b, 0x1000);
    qtest_quit(s);
}

static void test_target_selected_ok(void)
{
    QTestState *s = qtest_init(
        "-device am53c974,id=scsi "
        "-device scsi-hd,drive=disk0 -drive "
        "id=disk0,if=none,file=null-co://,format=raw -nodefaults");
    qtest_outl(s, 0xcf8, 0x80001001);
    qtest_outl(s, 0xcfc, 0x01000000);
    qtest_outl(s, 0xcf8, 0x8000100e);
    qtest_outl(s, 0xcfc, 0xef800000);
    qtest_outl(s, 0xef8b, 0x4100);
    qtest_outw(s, 0xef80, 0x01);
    qtest_outl(s, 0xefc0, 0x03);
    qtest_outl(s, 0xef8b, 0xc100);
    qtest_outl(s, 0xef8b, 0x9000);
    qtest_quit(s);
}

static void test_fifo_underflow_on_write_ok(void)
{
    QTestState *s = qtest_init(
        "-device am53c974,id=scsi "
        "-device scsi-hd,drive=disk0 -drive "
        "id=disk0,if=none,file=null-co://,format=raw -nodefaults");
    qtest_outl(s, 0xcf8, 0x80001010);
    qtest_outl(s, 0xcfc, 0xc000);
    qtest_outl(s, 0xcf8, 0x80001004);
    qtest_outw(s, 0xcfc, 0x01);
    qtest_outl(s, 0xc008, 0x0a);
    qtest_outl(s, 0xc009, 0x41000000);
    qtest_outl(s, 0xc009, 0x41000000);
    qtest_outl(s, 0xc00b, 0x1000);
    qtest_quit(s);
}

static void test_cancelled_request_ok(void)
{
    QTestState *s = qtest_init(
        "-device am53c974,id=scsi "
        "-device scsi-hd,drive=disk0 -drive "
        "id=disk0,if=none,file=null-co://,format=raw -nodefaults");
    qtest_outl(s, 0xcf8, 0x80001010);
    qtest_outl(s, 0xcfc, 0xc000);
    qtest_outl(s, 0xcf8, 0x80001004);
    qtest_outw(s, 0xcfc, 0x05);
    qtest_outb(s, 0xc046, 0x02);
    qtest_outl(s, 0xc00b, 0xc100);
    qtest_outl(s, 0xc040, 0x03);
    qtest_outl(s, 0xc040, 0x03);
    qtest_bufwrite(s, 0x0, "\x41", 0x1);
    qtest_outl(s, 0xc00b, 0xc100);
    qtest_outw(s, 0xc040, 0x02);
    qtest_outw(s, 0xc040, 0x81);
    qtest_outl(s, 0xc00b, 0x9000);
    qtest_quit(s);
}

static void test_inflight_cancel_ok(void)
{
    QTestState *s = qtest_init(
        "-device am53c974,id=scsi "
        "-device scsi-hd,drive=disk0 -drive "
        "id=disk0,if=none,file=null-co://,format=raw -nodefaults");
    qtest_outl(s, 0xcf8, 0x80001000);
    qtest_inw(s, 0xcfc);
    qtest_outl(s, 0xcf8, 0x80001010);
    qtest_outl(s, 0xcfc, 0xffffffff);
    qtest_outl(s, 0xcf8, 0x80001010);
    qtest_inl(s, 0xcfc);
    qtest_outl(s, 0xcf8, 0x80001010);
    qtest_outl(s, 0xcfc, 0xc001);
    qtest_outl(s, 0xcf8, 0x80001004);
    qtest_inw(s, 0xcfc);
    qtest_outl(s, 0xcf8, 0x80001004);
    qtest_outw(s, 0xcfc, 0x7);
    qtest_outl(s, 0xcf8, 0x80001004);
    qtest_inw(s, 0xcfc);
    qtest_inb(s, 0xc000);
    qtest_outb(s, 0xc008, 0x8);
    qtest_outw(s, 0xc00b, 0x4100);
    qtest_outb(s, 0xc009, 0x0);
    qtest_outb(s, 0xc009, 0x0);
    qtest_outw(s, 0xc00b, 0xc212);
    qtest_outl(s, 0xc042, 0x2c2c5a88);
    qtest_outw(s, 0xc00b, 0xc212);
    qtest_outw(s, 0xc00b, 0x415a);
    qtest_outl(s, 0xc03f, 0x3060303);
    qtest_outl(s, 0xc00b, 0x5afa9054);
    qtest_quit(s);
}

static void test_reset_before_transfer_ok(void)
{
    QTestState *s = qtest_init(
        "-device am53c974,id=scsi "
        "-device scsi-hd,drive=disk0 -drive "
        "id=disk0,if=none,file=null-co://,format=raw -nodefaults");

    qtest_outl(s, 0xcf8, 0x80001010);
    qtest_outl(s, 0xcfc, 0xc000);
    qtest_outl(s, 0xcf8, 0x80001004);
    qtest_outw(s, 0xcfc, 0x01);
    qtest_outl(s, 0xc007, 0x2500);
    qtest_outl(s, 0xc00a, 0x410000);
    qtest_outl(s, 0xc00a, 0x410000);
    qtest_outw(s, 0xc00b, 0x0200);
    qtest_outw(s, 0xc040, 0x03);
    qtest_outw(s, 0xc009, 0x00);
    qtest_outw(s, 0xc00b, 0x00);
    qtest_outw(s, 0xc009, 0x00);
    qtest_outw(s, 0xc00b, 0x00);
    qtest_outw(s, 0xc009, 0x00);
    qtest_outw(s, 0xc003, 0x1000);
    qtest_outw(s, 0xc00b, 0x1000);
    qtest_outl(s, 0xc00b, 0x9000);
    qtest_outw(s, 0xc00b, 0x1000);
    qtest_quit(s);
}

int main(int argc, char **argv)
{
    const char *arch = qtest_get_arch();

    g_test_init(&argc, &argv, NULL);

    if (strcmp(arch, "i386") == 0) {
        qtest_add_func("am53c974/test_cmdfifo_underflow_ok",
                       test_cmdfifo_underflow_ok);
        qtest_add_func("am53c974/test_cmdfifo_underflow2_ok",
                       test_cmdfifo_underflow2_ok);
        qtest_add_func("am53c974/test_cmdfifo_overflow_ok",
                       test_cmdfifo_overflow_ok);
        qtest_add_func("am53c974/test_cmdfifo_overflow2_ok",
                       test_cmdfifo_overflow2_ok);
        qtest_add_func("am53c974/test_fifo_pop_buf",
                       test_fifo_pop_buf);
        qtest_add_func("am53c974/test_target_selected_ok",
                       test_target_selected_ok);
        qtest_add_func("am53c974/test_fifo_underflow_on_write_ok",
                       test_fifo_underflow_on_write_ok);
        qtest_add_func("am53c974/test_cancelled_request_ok",
                       test_cancelled_request_ok);
        qtest_add_func("am53c974/test_inflight_cancel_ok",
                       test_inflight_cancel_ok);
        qtest_add_func("am53c974/test_reset_before_transfer_ok",
                       test_reset_before_transfer_ok);
    }

    return g_test_run();
}
