unpack.h revision 1.4 1 /* $NetBSD: unpack.h,v 1.4 2021/12/18 23:45:33 riastradh Exp $ */
2
3 /* SPDX-License-Identifier: MIT */
4 #ifndef __NVIF_UNPACK_H__
5 #define __NVIF_UNPACK_H__
6
7 #define nvif_unvers(r,d,s,m) ({ \
8 void **_data = (d); __u32 *_size = (s); int _ret = (r); \
9 if (_ret == -ENOSYS && *_size == sizeof(m)) { \
10 *_data = NULL; \
11 *_size = _ret = 0; \
12 } \
13 _ret; \
14 })
15
16 #define nvif_unpack(r,d,s,m,vl,vh,x) ({ \
17 void **_data = (d); __u32 *_size = (s); \
18 int _ret = (r), _vl = (vl), _vh = (vh); \
19 if (_ret == -ENOSYS && *_size >= sizeof(m) && \
20 (m).version >= _vl && (m).version <= _vh) { \
21 *_data = (__u8 *)*_data + sizeof(m); \
22 *_size = *_size - sizeof(m); \
23 if (_ret = 0, !(x)) { \
24 _ret = *_size ? -E2BIG : 0; \
25 *_data = NULL; \
26 *_size = 0; \
27 } \
28 } \
29 _ret; \
30 })
31 #endif
32