brintos

brintos / linux-shallow public Read only

0
0
Text · 6.6 KiB · 81d3069 Raw
412 lines · c
1// SPDX-License-Identifier: GPL-2.02#include <stdio.h>3#include <byteswap.h>4#include "utils.h"5#include "subunit.h"6 7#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__8#define cpu_to_be32(x)		bswap_32(x)9#define be32_to_cpu(x)		bswap_32(x)10#define be16_to_cpup(x)		bswap_16(*x)11#define cpu_to_be64(x)		bswap_64(x)12#else13#define cpu_to_be32(x)		(x)14#define be32_to_cpu(x)		(x)15#define be16_to_cpup(x)		(*x)16#define cpu_to_be64(x)		(x)17#endif18 19#include "vphn.c"20 21static struct test {22	char *descr;23	long input[VPHN_REGISTER_COUNT];24	u32 expected[VPHN_ASSOC_BUFSIZE];25} all_tests[] = {26	{27		"vphn: no data",28		{29			0xffffffffffffffff,30			0xffffffffffffffff,31			0xffffffffffffffff,32			0xffffffffffffffff,33			0xffffffffffffffff,34			0xffffffffffffffff,35		},36		{37			0x0000000038		}39	},40	{41		"vphn: 1 x 16-bit value",42		{43			0x8001ffffffffffff,44			0xffffffffffffffff,45			0xffffffffffffffff,46			0xffffffffffffffff,47			0xffffffffffffffff,48			0xffffffffffffffff,49		},50		{51			0x00000001,52			0x0000000153		}54	},55	{56		"vphn: 2 x 16-bit values",57		{58			0x80018002ffffffff,59			0xffffffffffffffff,60			0xffffffffffffffff,61			0xffffffffffffffff,62			0xffffffffffffffff,63			0xffffffffffffffff,64		},65		{66			0x00000002,67			0x00000001,68			0x0000000269		}70	},71	{72		"vphn: 3 x 16-bit values",73		{74			0x800180028003ffff,75			0xffffffffffffffff,76			0xffffffffffffffff,77			0xffffffffffffffff,78			0xffffffffffffffff,79			0xffffffffffffffff,80		},81		{82			0x00000003,83			0x00000001,84			0x00000002,85			0x0000000386		}87	},88	{89		"vphn: 4 x 16-bit values",90		{91			0x8001800280038004,92			0xffffffffffffffff,93			0xffffffffffffffff,94			0xffffffffffffffff,95			0xffffffffffffffff,96			0xffffffffffffffff,97		},98		{99			0x00000004,100			0x00000001,101			0x00000002,102			0x00000003,103			0x00000004104		}105	},106	{107		/* Parsing the next 16-bit value out of the next 64-bit input108		 * value.109		 */110		"vphn: 5 x 16-bit values",111		{112			0x8001800280038004,113			0x8005ffffffffffff,114			0xffffffffffffffff,115			0xffffffffffffffff,116			0xffffffffffffffff,117			0xffffffffffffffff,118		},119		{120			0x00000005,121			0x00000001,122			0x00000002,123			0x00000003,124			0x00000004,125			0x00000005126		}127	},128	{129		/* Parse at most 6 x 64-bit input values */130		"vphn: 24 x 16-bit values",131		{132			0x8001800280038004,133			0x8005800680078008,134			0x8009800a800b800c,135			0x800d800e800f8010,136			0x8011801280138014,137			0x8015801680178018138		},139		{140			0x00000018,141			0x00000001,142			0x00000002,143			0x00000003,144			0x00000004,145			0x00000005,146			0x00000006,147			0x00000007,148			0x00000008,149			0x00000009,150			0x0000000a,151			0x0000000b,152			0x0000000c,153			0x0000000d,154			0x0000000e,155			0x0000000f,156			0x00000010,157			0x00000011,158			0x00000012,159			0x00000013,160			0x00000014,161			0x00000015,162			0x00000016,163			0x00000017,164			0x00000018165		}166	},167	{168		"vphn: 1 x 32-bit value",169		{170			0x00000001ffffffff,171			0xffffffffffffffff,172			0xffffffffffffffff,173			0xffffffffffffffff,174			0xffffffffffffffff,175			0xffffffffffffffff176		},177		{178			0x00000001,179			0x00000001180		}181	},182	{183		"vphn: 2 x 32-bit values",184		{185			0x0000000100000002,186			0xffffffffffffffff,187			0xffffffffffffffff,188			0xffffffffffffffff,189			0xffffffffffffffff,190			0xffffffffffffffff191		},192		{193			0x00000002,194			0x00000001,195			0x00000002196		}197	},198	{199		/* Parsing the next 32-bit value out of the next 64-bit input200		 * value.201		 */202		"vphn: 3 x 32-bit values",203		{204			0x0000000100000002,205			0x00000003ffffffff,206			0xffffffffffffffff,207			0xffffffffffffffff,208			0xffffffffffffffff,209			0xffffffffffffffff210		},211		{212			0x00000003,213			0x00000001,214			0x00000002,215			0x00000003216		}217	},218	{219		/* Parse at most 6 x 64-bit input values */220		"vphn: 12 x 32-bit values",221		{222			0x0000000100000002,223			0x0000000300000004,224			0x0000000500000006,225			0x0000000700000008,226			0x000000090000000a,227			0x0000000b0000000c228		},229		{230			0x0000000c,231			0x00000001,232			0x00000002,233			0x00000003,234			0x00000004,235			0x00000005,236			0x00000006,237			0x00000007,238			0x00000008,239			0x00000009,240			0x0000000a,241			0x0000000b,242			0x0000000c243		}244	},245	{246		"vphn: 16-bit value followed by 32-bit value",247		{248			0x800100000002ffff,249			0xffffffffffffffff,250			0xffffffffffffffff,251			0xffffffffffffffff,252			0xffffffffffffffff,253			0xffffffffffffffff254		},255		{256			0x00000002,257			0x00000001,258			0x00000002259		}260	},261	{262		"vphn: 32-bit value followed by 16-bit value",263		{264			0x000000018002ffff,265			0xffffffffffffffff,266			0xffffffffffffffff,267			0xffffffffffffffff,268			0xffffffffffffffff,269			0xffffffffffffffff270		},271		{272			0x00000002,273			0x00000001,274			0x00000002275		}276	},277	{278		/* Parse a 32-bit value split accross two consecutives 64-bit279		 * input values.280		 */281		"vphn: 16-bit value followed by 2 x 32-bit values",282		{283			0x8001000000020000,284			0x0003ffffffffffff,285			0xffffffffffffffff,286			0xffffffffffffffff,287			0xffffffffffffffff,288			0xffffffffffffffff289		},290		{291			0x00000003,292			0x00000001,293			0x00000002,294			0x00000003,295			0x00000004,296			0x00000005297		}298	},299	{300		/* The lower bits in 0x0001ffff don't get mixed up with the301		 * 0xffff terminator.302		 */303		"vphn: 32-bit value has all ones in 16 lower bits",304		{305			0x0001ffff80028003,306			0xffffffffffffffff,307			0xffffffffffffffff,308			0xffffffffffffffff,309			0xffffffffffffffff,310			0xffffffffffffffff311		},312		{313			0x00000003,314			0x0001ffff,315			0x00000002,316			0x00000003317		}318	},319	{320		/* The following input doesn't follow the specification.321		 */322		"vphn: last 32-bit value is truncated",323		{324			0x0000000100000002,325			0x0000000300000004,326			0x0000000500000006,327			0x0000000700000008,328			0x000000090000000a,329			0x0000000b800c2bad330		},331		{332			0x0000000c,333			0x00000001,334			0x00000002,335			0x00000003,336			0x00000004,337			0x00000005,338			0x00000006,339			0x00000007,340			0x00000008,341			0x00000009,342			0x0000000a,343			0x0000000b,344			0x0000000c345		}346	},347	{348		"vphn: garbage after terminator",349		{350			0xffff2bad2bad2bad,351			0x2bad2bad2bad2bad,352			0x2bad2bad2bad2bad,353			0x2bad2bad2bad2bad,354			0x2bad2bad2bad2bad,355			0x2bad2bad2bad2bad356		},357		{358			0x00000000359		}360	},361	{362		NULL363	}364};365 366static int test_one(struct test *test)367{368	__be32 output[VPHN_ASSOC_BUFSIZE] = { 0 };369	int i, len;370 371	vphn_unpack_associativity(test->input, output);372 373	len = be32_to_cpu(output[0]);374	if (len != test->expected[0]) {375		printf("expected %d elements, got %d\n", test->expected[0],376		       len);377		return 1;378	}379 380	for (i = 1; i < len; i++) {381		u32 val = be32_to_cpu(output[i]);382		if (val != test->expected[i]) {383			printf("element #%d is 0x%x, should be 0x%x\n", i, val,384			       test->expected[i]);385			return 1;386		}387	}388 389	return 0;390}391 392static int test_vphn(void)393{394	static struct test *test;395 396	for (test = all_tests; test->descr; test++) {397		int ret;398 399		ret = test_one(test);400		test_finish(test->descr, ret);401		if (ret)402			return ret;403	}404 405	return 0;406}407 408int main(int argc, char **argv)409{410	return test_harness(test_vphn, "test-vphn");411}412