1 /* SPDX-License-Identifier: MIT */ 2 #ifndef __NVKM_OS_H__ 3 #define __NVKM_OS_H__ 4 #include <nvif/os.h> 5 6 struct nvkm_blob { 7 void *data; 8 u32 size; 9 }; 10 11 static inline void 12 nvkm_blob_dtor(struct nvkm_blob *blob) 13 { 14 kfree(blob->data); 15 blob->data = NULL; 16 blob->size = 0; 17 } 18 19 #define nvkm_list_find_next(p,h,m,c) ({ \ 20 typeof(p) _p = NULL; \ 21 list_for_each_entry_continue(p, (h), m) { \ 22 if (c) { \ 23 _p = p; \ 24 break; \ 25 } \ 26 } \ 27 _p; \ 28 }) 29 #define nvkm_list_find(p,h,m,c) \ 30 (p = container_of((h), typeof(*p), m), nvkm_list_find_next(p, (h), m, (c))) 31 #define nvkm_list_foreach(p,h,m,c) \ 32 for (p = nvkm_list_find(p, (h), m, (c)); p; p = nvkm_list_find_next(p, (h), m, (c))) 33 #endif 34