xref: /netbsd-src/sys/external/bsd/drm2/dist/drm/nouveau/include/nvif/unpack.h (revision f3cfa6f6ce31685c6c4a758bc430e69eb99f50a4)
1 /*	$NetBSD: unpack.h,v 1.3 2018/08/27 07:35:22 riastradh Exp $	*/
2 
3 #ifndef __NVIF_UNPACK_H__
4 #define __NVIF_UNPACK_H__
5 
6 #define nvif_unvers(d) ({                                                      \
7 	ret = (size == sizeof(d)) ? 0 : -ENOSYS;                               \
8 	(ret == 0);                                                            \
9 })
10 
11 #define nvif_unpack(d,vl,vh,m) ({                                              \
12 	if ((vl) == 0 || ret == -ENOSYS) {                                     \
13 		int _size = sizeof(d);                                         \
14 		if (_size <= size &&                                           \
15 		    ((d).version == (vl) || (d).version > (vl)) &&             \
16 		    (d).version <= (vh)) {                                     \
17 			data = (u8 *)data + _size;                             \
18 			size = size - _size;                                   \
19 			ret = ((m) || !size) ? 0 : -E2BIG;                     \
20 		} else {                                                       \
21 			ret = -ENOSYS;                                         \
22 		}                                                              \
23 	}                                                                      \
24 	(ret == 0);                                                            \
25 })
26 
27 #endif
28