17c2aad20Sopenharmony_ci/* SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) */ 27c2aad20Sopenharmony_ci 37c2aad20Sopenharmony_ci#ifndef __LINUX_KERNEL_H 47c2aad20Sopenharmony_ci#define __LINUX_KERNEL_H 57c2aad20Sopenharmony_ci 67c2aad20Sopenharmony_ci#ifndef offsetof 77c2aad20Sopenharmony_ci#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) 87c2aad20Sopenharmony_ci#endif 97c2aad20Sopenharmony_ci 107c2aad20Sopenharmony_ci#ifndef container_of 117c2aad20Sopenharmony_ci#define container_of(ptr, type, member) ({ \ 127c2aad20Sopenharmony_ci const typeof(((type *)0)->member) * __mptr = (ptr); \ 137c2aad20Sopenharmony_ci (type *)((char *)__mptr - offsetof(type, member)); }) 147c2aad20Sopenharmony_ci#endif 157c2aad20Sopenharmony_ci 167c2aad20Sopenharmony_ci#ifndef max 177c2aad20Sopenharmony_ci#define max(x, y) ({ \ 187c2aad20Sopenharmony_ci typeof(x) _max1 = (x); \ 197c2aad20Sopenharmony_ci typeof(y) _max2 = (y); \ 207c2aad20Sopenharmony_ci (void) (&_max1 == &_max2); \ 217c2aad20Sopenharmony_ci _max1 > _max2 ? _max1 : _max2; }) 227c2aad20Sopenharmony_ci#endif 237c2aad20Sopenharmony_ci 247c2aad20Sopenharmony_ci#ifndef min 257c2aad20Sopenharmony_ci#define min(x, y) ({ \ 267c2aad20Sopenharmony_ci typeof(x) _min1 = (x); \ 277c2aad20Sopenharmony_ci typeof(y) _min2 = (y); \ 287c2aad20Sopenharmony_ci (void) (&_min1 == &_min2); \ 297c2aad20Sopenharmony_ci _min1 < _min2 ? _min1 : _min2; }) 307c2aad20Sopenharmony_ci#endif 317c2aad20Sopenharmony_ci 327c2aad20Sopenharmony_ci#ifndef roundup 337c2aad20Sopenharmony_ci#define roundup(x, y) ( \ 347c2aad20Sopenharmony_ci{ \ 357c2aad20Sopenharmony_ci const typeof(y) __y = y; \ 367c2aad20Sopenharmony_ci (((x) + (__y - 1)) / __y) * __y; \ 377c2aad20Sopenharmony_ci} \ 387c2aad20Sopenharmony_ci) 397c2aad20Sopenharmony_ci#endif 407c2aad20Sopenharmony_ci 417c2aad20Sopenharmony_ci#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) 427c2aad20Sopenharmony_ci#define __KERNEL_DIV_ROUND_UP(n, d) (((n) + (d) - 1) / (d)) 437c2aad20Sopenharmony_ci 447c2aad20Sopenharmony_ci#endif 45