diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-09 09:59:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-09 09:59:14 +0000 |
commit | 01bb4a6c21c225e55a84ac606a3b213909023ba0 (patch) | |
tree | b5875af84ac1bd4015afede1015bb1761e5e85b3 /nouveau/nvif/unpack.h | |
parent | Initial commit. (diff) | |
download | libdrm-01bb4a6c21c225e55a84ac606a3b213909023ba0.tar.xz libdrm-01bb4a6c21c225e55a84ac606a3b213909023ba0.zip |
Adding upstream version 2.4.120.upstream/2.4.120
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'nouveau/nvif/unpack.h')
-rw-r--r-- | nouveau/nvif/unpack.h | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/nouveau/nvif/unpack.h b/nouveau/nvif/unpack.h new file mode 100644 index 0000000..751bcf4 --- /dev/null +++ b/nouveau/nvif/unpack.h @@ -0,0 +1,28 @@ +#ifndef __NVIF_UNPACK_H__ +#define __NVIF_UNPACK_H__ + +#define nvif_unvers(r,d,s,m) ({ \ + void **_data = (d); __u32 *_size = (s); int _ret = (r); \ + if (_ret == -ENOSYS && *_size == sizeof(m)) { \ + *_data = NULL; \ + *_size = _ret = 0; \ + } \ + _ret; \ +}) + +#define nvif_unpack(r,d,s,m,vl,vh,x) ({ \ + void **_data = (d); __u32 *_size = (s); \ + int _ret = (r), _vl = (vl), _vh = (vh); \ + if (_ret == -ENOSYS && *_size >= sizeof(m) && \ + (m).version >= _vl && (m).version <= _vh) { \ + *_data = (__u8 *)*_data + sizeof(m); \ + *_size = *_size - sizeof(m); \ + if (_ret = 0, !(x)) { \ + _ret = *_size ? -E2BIG : 0; \ + *_data = NULL; \ + *_size = 0; \ + } \ + } \ + _ret; \ +}) +#endif |