xref: /qemu/tests/qtest/endianness-test.c (revision 51cdb6806f405062c2bda3f527e98aaf259d6116)
18fefa31bSPaolo Bonzini /*
28fefa31bSPaolo Bonzini  * QTest testcase for ISA endianness
38fefa31bSPaolo Bonzini  *
48fefa31bSPaolo Bonzini  * Copyright Red Hat, Inc. 2012
58fefa31bSPaolo Bonzini  *
68fefa31bSPaolo Bonzini  * Authors:
78fefa31bSPaolo Bonzini  *  Paolo Bonzini <pbonzini@redhat.com>
88fefa31bSPaolo Bonzini  *
98fefa31bSPaolo Bonzini  * This work is licensed under the terms of the GNU GPL, version 2 or later.
108fefa31bSPaolo Bonzini  * See the COPYING file in the top-level directory.
118fefa31bSPaolo Bonzini  *
128fefa31bSPaolo Bonzini  */
138fefa31bSPaolo Bonzini 
14681c28a3SPeter Maydell #include "qemu/osdep.h"
158fefa31bSPaolo Bonzini 
16907b5105SMarc-André Lureau #include "libqtest.h"
178fefa31bSPaolo Bonzini #include "qemu/bswap.h"
188fefa31bSPaolo Bonzini 
198fefa31bSPaolo Bonzini typedef struct TestCase TestCase;
208fefa31bSPaolo Bonzini struct TestCase {
218fefa31bSPaolo Bonzini     const char *arch;
228fefa31bSPaolo Bonzini     const char *machine;
238fefa31bSPaolo Bonzini     uint64_t isa_base;
248fefa31bSPaolo Bonzini     bool bswap;
258fefa31bSPaolo Bonzini     const char *superio;
268fefa31bSPaolo Bonzini };
278fefa31bSPaolo Bonzini 
288fefa31bSPaolo Bonzini static const TestCase test_cases[] = {
298fefa31bSPaolo Bonzini     { "i386", "pc", -1 },
308fefa31bSPaolo Bonzini     { "mips", "malta", 0x10000000, .bswap = true },
3120516580SThomas Huth     { "mipsel", "malta", 0x10000000 },
328fefa31bSPaolo Bonzini     { "mips64", "magnum", 0x90000000, .bswap = true },
338fefa31bSPaolo Bonzini     { "mips64", "pica61", 0x90000000, .bswap = true },
348fefa31bSPaolo Bonzini     { "mips64", "malta", 0x10000000, .bswap = true },
35c3a09ff6SPhilippe Mathieu-Daudé     { "mips64el", "fuloong2e", 0x1fd00000 },
368fefa31bSPaolo Bonzini     { "ppc", "g3beige", 0xfe000000, .bswap = true, .superio = "i82378" },
37b2ce76a0SThomas Huth     { "ppc", "40p", 0x80000000, .bswap = true },
388fefa31bSPaolo Bonzini     { "ppc", "bamboo", 0xe8000000, .bswap = true, .superio = "i82378" },
398fefa31bSPaolo Bonzini     { "ppc64", "mac99", 0xf2000000, .bswap = true, .superio = "i82378" },
40357d1e3bSDavid Gibson     { "ppc64", "pseries", (1ULL << 45), .bswap = true, .superio = "i82378" },
41357d1e3bSDavid Gibson     { "ppc64", "pseries-2.7", 0x10080000000ULL,
425cb6be2cSStefan Hajnoczi       .bswap = true, .superio = "i82378" },
438fefa31bSPaolo Bonzini     { "sh4", "r2d", 0xfe240000, .superio = "i82378" },
44*51cdb680SThomas Huth     { "sh4eb", "r2d", 0xfe240000, .bswap = true, .superio = "i82378" },
458fefa31bSPaolo Bonzini     { "sparc64", "sun4u", 0x1fe02000000LL, .bswap = true },
468fefa31bSPaolo Bonzini     { "x86_64", "pc", -1 },
478fefa31bSPaolo Bonzini     {}
488fefa31bSPaolo Bonzini };
498fefa31bSPaolo Bonzini 
isa_inb(QTestState * qts,const TestCase * test,uint16_t addr)50fdba0d09SThomas Huth static uint8_t isa_inb(QTestState *qts, const TestCase *test, uint16_t addr)
518fefa31bSPaolo Bonzini {
528fefa31bSPaolo Bonzini     uint8_t value;
538fefa31bSPaolo Bonzini     if (test->isa_base == -1) {
54fdba0d09SThomas Huth         value = qtest_inb(qts, addr);
558fefa31bSPaolo Bonzini     } else {
56fdba0d09SThomas Huth         value = qtest_readb(qts, test->isa_base + addr);
578fefa31bSPaolo Bonzini     }
588fefa31bSPaolo Bonzini     return value;
598fefa31bSPaolo Bonzini }
608fefa31bSPaolo Bonzini 
isa_inw(QTestState * qts,const TestCase * test,uint16_t addr)61fdba0d09SThomas Huth static uint16_t isa_inw(QTestState *qts, const TestCase *test, uint16_t addr)
628fefa31bSPaolo Bonzini {
638fefa31bSPaolo Bonzini     uint16_t value;
648fefa31bSPaolo Bonzini     if (test->isa_base == -1) {
65fdba0d09SThomas Huth         value = qtest_inw(qts, addr);
668fefa31bSPaolo Bonzini     } else {
67fdba0d09SThomas Huth         value = qtest_readw(qts, test->isa_base + addr);
688fefa31bSPaolo Bonzini     }
698fefa31bSPaolo Bonzini     return test->bswap ? bswap16(value) : value;
708fefa31bSPaolo Bonzini }
718fefa31bSPaolo Bonzini 
isa_inl(QTestState * qts,const TestCase * test,uint16_t addr)72fdba0d09SThomas Huth static uint32_t isa_inl(QTestState *qts, const TestCase *test, uint16_t addr)
738fefa31bSPaolo Bonzini {
748fefa31bSPaolo Bonzini     uint32_t value;
758fefa31bSPaolo Bonzini     if (test->isa_base == -1) {
76fdba0d09SThomas Huth         value = qtest_inl(qts, addr);
778fefa31bSPaolo Bonzini     } else {
78fdba0d09SThomas Huth         value = qtest_readl(qts, test->isa_base + addr);
798fefa31bSPaolo Bonzini     }
808fefa31bSPaolo Bonzini     return test->bswap ? bswap32(value) : value;
818fefa31bSPaolo Bonzini }
828fefa31bSPaolo Bonzini 
isa_outb(QTestState * qts,const TestCase * test,uint16_t addr,uint8_t value)83fdba0d09SThomas Huth static void isa_outb(QTestState *qts, const TestCase *test, uint16_t addr,
84fdba0d09SThomas Huth                      uint8_t value)
858fefa31bSPaolo Bonzini {
868fefa31bSPaolo Bonzini     if (test->isa_base == -1) {
87fdba0d09SThomas Huth         qtest_outb(qts, addr, value);
888fefa31bSPaolo Bonzini     } else {
89fdba0d09SThomas Huth         qtest_writeb(qts, test->isa_base + addr, value);
908fefa31bSPaolo Bonzini     }
918fefa31bSPaolo Bonzini }
928fefa31bSPaolo Bonzini 
isa_outw(QTestState * qts,const TestCase * test,uint16_t addr,uint16_t value)93fdba0d09SThomas Huth static void isa_outw(QTestState *qts, const TestCase *test, uint16_t addr,
94fdba0d09SThomas Huth                      uint16_t value)
958fefa31bSPaolo Bonzini {
968fefa31bSPaolo Bonzini     value = test->bswap ? bswap16(value) : value;
978fefa31bSPaolo Bonzini     if (test->isa_base == -1) {
98fdba0d09SThomas Huth         qtest_outw(qts, addr, value);
998fefa31bSPaolo Bonzini     } else {
100fdba0d09SThomas Huth         qtest_writew(qts, test->isa_base + addr, value);
1018fefa31bSPaolo Bonzini     }
1028fefa31bSPaolo Bonzini }
1038fefa31bSPaolo Bonzini 
isa_outl(QTestState * qts,const TestCase * test,uint16_t addr,uint32_t value)104fdba0d09SThomas Huth static void isa_outl(QTestState *qts, const TestCase *test, uint16_t addr,
105fdba0d09SThomas Huth                      uint32_t value)
1068fefa31bSPaolo Bonzini {
1078fefa31bSPaolo Bonzini     value = test->bswap ? bswap32(value) : value;
1088fefa31bSPaolo Bonzini     if (test->isa_base == -1) {
109fdba0d09SThomas Huth         qtest_outl(qts, addr, value);
1108fefa31bSPaolo Bonzini     } else {
111fdba0d09SThomas Huth         qtest_writel(qts, test->isa_base + addr, value);
1128fefa31bSPaolo Bonzini     }
1138fefa31bSPaolo Bonzini }
1148fefa31bSPaolo Bonzini 
1158fefa31bSPaolo Bonzini 
test_endianness(gconstpointer data)1168fefa31bSPaolo Bonzini static void test_endianness(gconstpointer data)
1178fefa31bSPaolo Bonzini {
1188fefa31bSPaolo Bonzini     const TestCase *test = data;
119fdba0d09SThomas Huth     QTestState *qts;
1208fefa31bSPaolo Bonzini 
121fdba0d09SThomas Huth     qts = qtest_initf("-M %s%s%s -device pc-testdev", test->machine,
1228fefa31bSPaolo Bonzini                       test->superio ? " -device " : "",
1238fefa31bSPaolo Bonzini                       test->superio ?: "");
124fdba0d09SThomas Huth     isa_outl(qts, test, 0xe0, 0x87654321);
125fdba0d09SThomas Huth     g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x87654321);
126fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8765);
127fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe0), ==, 0x4321);
128fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe3), ==, 0x87);
129fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe2), ==, 0x65);
130fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe1), ==, 0x43);
131fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe0), ==, 0x21);
1328fefa31bSPaolo Bonzini 
133fdba0d09SThomas Huth     isa_outw(qts, test, 0xe2, 0x8866);
134fdba0d09SThomas Huth     g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x88664321);
135fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8866);
136fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe0), ==, 0x4321);
137fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe3), ==, 0x88);
138fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe2), ==, 0x66);
139fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe1), ==, 0x43);
140fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe0), ==, 0x21);
1418fefa31bSPaolo Bonzini 
142fdba0d09SThomas Huth     isa_outw(qts, test, 0xe0, 0x4422);
143fdba0d09SThomas Huth     g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x88664422);
144fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8866);
145fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe0), ==, 0x4422);
146fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe3), ==, 0x88);
147fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe2), ==, 0x66);
148fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe1), ==, 0x44);
149fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe0), ==, 0x22);
1508fefa31bSPaolo Bonzini 
151fdba0d09SThomas Huth     isa_outb(qts, test, 0xe3, 0x87);
152fdba0d09SThomas Huth     g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x87664422);
153fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8766);
154fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe3), ==, 0x87);
155fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe2), ==, 0x66);
156fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe1), ==, 0x44);
157fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe0), ==, 0x22);
1588fefa31bSPaolo Bonzini 
159fdba0d09SThomas Huth     isa_outb(qts, test, 0xe2, 0x65);
160fdba0d09SThomas Huth     g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x87654422);
161fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8765);
162fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe0), ==, 0x4422);
163fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe3), ==, 0x87);
164fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe2), ==, 0x65);
165fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe1), ==, 0x44);
166fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe0), ==, 0x22);
1678fefa31bSPaolo Bonzini 
168fdba0d09SThomas Huth     isa_outb(qts, test, 0xe1, 0x43);
169fdba0d09SThomas Huth     g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x87654322);
170fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8765);
171fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe0), ==, 0x4322);
172fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe3), ==, 0x87);
173fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe2), ==, 0x65);
174fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe1), ==, 0x43);
175fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe0), ==, 0x22);
1768fefa31bSPaolo Bonzini 
177fdba0d09SThomas Huth     isa_outb(qts, test, 0xe0, 0x21);
178fdba0d09SThomas Huth     g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x87654321);
179fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8765);
180fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe0), ==, 0x4321);
181fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe3), ==, 0x87);
182fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe2), ==, 0x65);
183fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe1), ==, 0x43);
184fdba0d09SThomas Huth     g_assert_cmphex(isa_inb(qts, test, 0xe0), ==, 0x21);
185fdba0d09SThomas Huth     qtest_quit(qts);
1868fefa31bSPaolo Bonzini }
1878fefa31bSPaolo Bonzini 
test_endianness_split(gconstpointer data)188d2f5ea97SPaolo Bonzini static void test_endianness_split(gconstpointer data)
189d2f5ea97SPaolo Bonzini {
190d2f5ea97SPaolo Bonzini     const TestCase *test = data;
191fdba0d09SThomas Huth     QTestState *qts;
192d2f5ea97SPaolo Bonzini 
193fdba0d09SThomas Huth     qts = qtest_initf("-M %s%s%s -device pc-testdev", test->machine,
194d2f5ea97SPaolo Bonzini                       test->superio ? " -device " : "",
195d2f5ea97SPaolo Bonzini                       test->superio ?: "");
196fdba0d09SThomas Huth     isa_outl(qts, test, 0xe8, 0x87654321);
197fdba0d09SThomas Huth     g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x87654321);
198fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8765);
199fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe0), ==, 0x4321);
200d2f5ea97SPaolo Bonzini 
201fdba0d09SThomas Huth     isa_outw(qts, test, 0xea, 0x8866);
202fdba0d09SThomas Huth     g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x88664321);
203fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8866);
204fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe0), ==, 0x4321);
205d2f5ea97SPaolo Bonzini 
206fdba0d09SThomas Huth     isa_outw(qts, test, 0xe8, 0x4422);
207fdba0d09SThomas Huth     g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x88664422);
208fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8866);
209fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe0), ==, 0x4422);
210d2f5ea97SPaolo Bonzini 
211fdba0d09SThomas Huth     isa_outb(qts, test, 0xeb, 0x87);
212fdba0d09SThomas Huth     g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x87664422);
213fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8766);
214d2f5ea97SPaolo Bonzini 
215fdba0d09SThomas Huth     isa_outb(qts, test, 0xea, 0x65);
216fdba0d09SThomas Huth     g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x87654422);
217fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8765);
218fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe0), ==, 0x4422);
219d2f5ea97SPaolo Bonzini 
220fdba0d09SThomas Huth     isa_outb(qts, test, 0xe9, 0x43);
221fdba0d09SThomas Huth     g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x87654322);
222fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8765);
223fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe0), ==, 0x4322);
224d2f5ea97SPaolo Bonzini 
225fdba0d09SThomas Huth     isa_outb(qts, test, 0xe8, 0x21);
226fdba0d09SThomas Huth     g_assert_cmphex(isa_inl(qts, test, 0xe0), ==, 0x87654321);
227fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe2), ==, 0x8765);
228fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe0), ==, 0x4321);
229fdba0d09SThomas Huth     qtest_quit(qts);
230d2f5ea97SPaolo Bonzini }
231d2f5ea97SPaolo Bonzini 
test_endianness_combine(gconstpointer data)232d2f5ea97SPaolo Bonzini static void test_endianness_combine(gconstpointer data)
233d2f5ea97SPaolo Bonzini {
234d2f5ea97SPaolo Bonzini     const TestCase *test = data;
235fdba0d09SThomas Huth     QTestState *qts;
236d2f5ea97SPaolo Bonzini 
237fdba0d09SThomas Huth     qts = qtest_initf("-M %s%s%s -device pc-testdev", test->machine,
238d2f5ea97SPaolo Bonzini                       test->superio ? " -device " : "",
239d2f5ea97SPaolo Bonzini                       test->superio ?: "");
240fdba0d09SThomas Huth     isa_outl(qts, test, 0xe0, 0x87654321);
241fdba0d09SThomas Huth     g_assert_cmphex(isa_inl(qts, test, 0xe8), ==, 0x87654321);
242fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xea), ==, 0x8765);
243fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe8), ==, 0x4321);
244d2f5ea97SPaolo Bonzini 
245fdba0d09SThomas Huth     isa_outw(qts, test, 0xe2, 0x8866);
246fdba0d09SThomas Huth     g_assert_cmphex(isa_inl(qts, test, 0xe8), ==, 0x88664321);
247fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xea), ==, 0x8866);
248fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe8), ==, 0x4321);
249d2f5ea97SPaolo Bonzini 
250fdba0d09SThomas Huth     isa_outw(qts, test, 0xe0, 0x4422);
251fdba0d09SThomas Huth     g_assert_cmphex(isa_inl(qts, test, 0xe8), ==, 0x88664422);
252fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xea), ==, 0x8866);
253fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe8), ==, 0x4422);
254d2f5ea97SPaolo Bonzini 
255fdba0d09SThomas Huth     isa_outb(qts, test, 0xe3, 0x87);
256fdba0d09SThomas Huth     g_assert_cmphex(isa_inl(qts, test, 0xe8), ==, 0x87664422);
257fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xea), ==, 0x8766);
258d2f5ea97SPaolo Bonzini 
259fdba0d09SThomas Huth     isa_outb(qts, test, 0xe2, 0x65);
260fdba0d09SThomas Huth     g_assert_cmphex(isa_inl(qts, test, 0xe8), ==, 0x87654422);
261fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xea), ==, 0x8765);
262fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe8), ==, 0x4422);
263d2f5ea97SPaolo Bonzini 
264fdba0d09SThomas Huth     isa_outb(qts, test, 0xe1, 0x43);
265fdba0d09SThomas Huth     g_assert_cmphex(isa_inl(qts, test, 0xe8), ==, 0x87654322);
266fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xea), ==, 0x8765);
267fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe8), ==, 0x4322);
268d2f5ea97SPaolo Bonzini 
269fdba0d09SThomas Huth     isa_outb(qts, test, 0xe0, 0x21);
270fdba0d09SThomas Huth     g_assert_cmphex(isa_inl(qts, test, 0xe8), ==, 0x87654321);
271fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xea), ==, 0x8765);
272fdba0d09SThomas Huth     g_assert_cmphex(isa_inw(qts, test, 0xe8), ==, 0x4321);
273fdba0d09SThomas Huth     qtest_quit(qts);
274d2f5ea97SPaolo Bonzini }
275d2f5ea97SPaolo Bonzini 
main(int argc,char ** argv)2768fefa31bSPaolo Bonzini int main(int argc, char **argv)
2778fefa31bSPaolo Bonzini {
2788fefa31bSPaolo Bonzini     const char *arch = qtest_get_arch();
2798fefa31bSPaolo Bonzini     int i;
2808fefa31bSPaolo Bonzini 
2818fefa31bSPaolo Bonzini     g_test_init(&argc, &argv, NULL);
2828fefa31bSPaolo Bonzini 
2838fefa31bSPaolo Bonzini     for (i = 0; test_cases[i].arch; i++) {
2848fefa31bSPaolo Bonzini         gchar *path;
2859cbd6602SThomas Huth 
2869cbd6602SThomas Huth         if (!g_str_equal(test_cases[i].arch, arch) ||
2879cbd6602SThomas Huth             !qtest_has_machine(test_cases[i].machine) ||
2889cbd6602SThomas Huth             (test_cases[i].superio && !qtest_has_device(test_cases[i].superio))) {
2898fefa31bSPaolo Bonzini             continue;
2908fefa31bSPaolo Bonzini         }
29153f77e45SAndreas Färber         path = g_strdup_printf("endianness/%s",
29253f77e45SAndreas Färber                                test_cases[i].machine);
29353f77e45SAndreas Färber         qtest_add_data_func(path, &test_cases[i], test_endianness);
294f3f8e811SMarc-André Lureau         g_free(path);
295d2f5ea97SPaolo Bonzini 
29653f77e45SAndreas Färber         path = g_strdup_printf("endianness/split/%s",
29753f77e45SAndreas Färber                                test_cases[i].machine);
29853f77e45SAndreas Färber         qtest_add_data_func(path, &test_cases[i], test_endianness_split);
299f3f8e811SMarc-André Lureau         g_free(path);
300d2f5ea97SPaolo Bonzini 
30153f77e45SAndreas Färber         path = g_strdup_printf("endianness/combine/%s",
30253f77e45SAndreas Färber                                test_cases[i].machine);
30353f77e45SAndreas Färber         qtest_add_data_func(path, &test_cases[i], test_endianness_combine);
304f3f8e811SMarc-André Lureau         g_free(path);
3058fefa31bSPaolo Bonzini     }
3068fefa31bSPaolo Bonzini 
3079be38598SEduardo Habkost     return g_test_run();
3088fefa31bSPaolo Bonzini }
309