On Mon, Feb 29, 2016 at 7:40 PM, Markus Armbruster <[email protected]> wrote: > Test state of registers after reset. > > Test reading Interrupt Status clears it. > > Test (invalid) read of Doorbell. > > Add more comments. > > Signed-off-by: Markus Armbruster <[email protected]>
Reviewed-by: Marc-André Lureau <[email protected]> > --- > tests/ivshmem-test.c | 23 ++++++++++++++++------- > 1 file changed, 16 insertions(+), 7 deletions(-) > > diff --git a/tests/ivshmem-test.c b/tests/ivshmem-test.c > index e118377..ba4d9f1 100644 > --- a/tests/ivshmem-test.c > +++ b/tests/ivshmem-test.c > @@ -143,32 +143,41 @@ static void test_ivshmem_single(void) > setup_vm(&state); > s = &state; > > - /* valid io */ > - out_reg(s, INTRMASK, 0); > - in_reg(s, INTRSTATUS); > - in_reg(s, IVPOSITION); > + /* initial state of readable registers */ > + g_assert_cmpuint(in_reg(s, INTRMASK), ==, 0); > + g_assert_cmpuint(in_reg(s, INTRSTATUS), ==, 0); > + g_assert_cmpuint(in_reg(s, IVPOSITION), ==, 0); > > + /* trigger interrupt via registers */ > out_reg(s, INTRMASK, 0xffffffff); > g_assert_cmpuint(in_reg(s, INTRMASK), ==, 0xffffffff); > out_reg(s, INTRSTATUS, 1); > - /* XXX: intercept IRQ, not seen in resp */ > + /* check interrupt status */ > g_assert_cmpuint(in_reg(s, INTRSTATUS), ==, 1); > + /* reading clears */ > + g_assert_cmpuint(in_reg(s, INTRSTATUS), ==, 0); > + /* TODO intercept actual interrupt (needs qtest work) */ > > - /* invalid io */ > + /* invalid register access */ > out_reg(s, IVPOSITION, 1); > + in_reg(s, DOORBELL); > + > + /* ring the (non-functional) doorbell */ > out_reg(s, DOORBELL, 8 << 16); > > + /* write shared memory */ > for (i = 0; i < G_N_ELEMENTS(data); i++) { > data[i] = i; > } > qtest_memwrite(s->qtest, (uintptr_t)s->mem_base, data, sizeof(data)); > > + /* verify write */ > for (i = 0; i < G_N_ELEMENTS(data); i++) { > g_assert_cmpuint(((uint32_t *)tmpshmem)[i], ==, i); > } > > + /* read it back and verify read */ > memset(data, 0, sizeof(data)); > - > qtest_memread(s->qtest, (uintptr_t)s->mem_base, data, sizeof(data)); > for (i = 0; i < G_N_ELEMENTS(data); i++) { > g_assert_cmpuint(data[i], ==, i); > -- > 2.4.3 > > -- Marc-André Lureau
