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