179ca27706a034b683196c85f5c6901b78e5ab8f0Ben Skeggs#ifndef __NVIF_UNPACK_H__ 279ca27706a034b683196c85f5c6901b78e5ab8f0Ben Skeggs#define __NVIF_UNPACK_H__ 379ca27706a034b683196c85f5c6901b78e5ab8f0Ben Skeggs 479ca27706a034b683196c85f5c6901b78e5ab8f0Ben Skeggs#define nvif_unvers(d) ({ \ 579ca27706a034b683196c85f5c6901b78e5ab8f0Ben Skeggs ret = (size == sizeof(d)) ? 0 : -ENOSYS; \ 679ca27706a034b683196c85f5c6901b78e5ab8f0Ben Skeggs (ret == 0); \ 779ca27706a034b683196c85f5c6901b78e5ab8f0Ben Skeggs}) 879ca27706a034b683196c85f5c6901b78e5ab8f0Ben Skeggs 979ca27706a034b683196c85f5c6901b78e5ab8f0Ben Skeggs#define nvif_unpack(d,vl,vh,m) ({ \ 1079ca27706a034b683196c85f5c6901b78e5ab8f0Ben Skeggs if ((vl) == 0 || ret == -ENOSYS) { \ 1179ca27706a034b683196c85f5c6901b78e5ab8f0Ben Skeggs int _size = sizeof(d); \ 1279ca27706a034b683196c85f5c6901b78e5ab8f0Ben Skeggs if (_size <= size && (d).version >= (vl) && \ 1379ca27706a034b683196c85f5c6901b78e5ab8f0Ben Skeggs (d).version <= (vh)) { \ 1479ca27706a034b683196c85f5c6901b78e5ab8f0Ben Skeggs data = (u8 *)data + _size; \ 1579ca27706a034b683196c85f5c6901b78e5ab8f0Ben Skeggs size = size - _size; \ 1679ca27706a034b683196c85f5c6901b78e5ab8f0Ben Skeggs ret = ((m) || !size) ? 0 : -E2BIG; \ 1779ca27706a034b683196c85f5c6901b78e5ab8f0Ben Skeggs } else { \ 1879ca27706a034b683196c85f5c6901b78e5ab8f0Ben Skeggs ret = -ENOSYS; \ 1979ca27706a034b683196c85f5c6901b78e5ab8f0Ben Skeggs } \ 2079ca27706a034b683196c85f5c6901b78e5ab8f0Ben Skeggs } \ 2179ca27706a034b683196c85f5c6901b78e5ab8f0Ben Skeggs (ret == 0); \ 2279ca27706a034b683196c85f5c6901b78e5ab8f0Ben Skeggs}) 2379ca27706a034b683196c85f5c6901b78e5ab8f0Ben Skeggs 2479ca27706a034b683196c85f5c6901b78e5ab8f0Ben Skeggs#endif 25