1*4164e152SWei Yang /* SPDX-License-Identifier: GPL-2.0 */ 2*4164e152SWei Yang #ifndef _TOOLS_LINUX_CONTAINER_OF_H 3*4164e152SWei Yang #define _TOOLS_LINUX_CONTAINER_OF_H 4*4164e152SWei Yang 5*4164e152SWei Yang #ifndef container_of 6*4164e152SWei Yang /** 7*4164e152SWei Yang * container_of - cast a member of a structure out to the containing structure 8*4164e152SWei Yang * @ptr: the pointer to the member. 9*4164e152SWei Yang * @type: the type of the container struct this is embedded in. 10*4164e152SWei Yang * @member: the name of the member within the struct. 11*4164e152SWei Yang * 12*4164e152SWei Yang */ 13*4164e152SWei Yang #define container_of(ptr, type, member) ({ \ 14*4164e152SWei Yang const typeof(((type *)0)->member) * __mptr = (ptr); \ 15*4164e152SWei Yang (type *)((char *)__mptr - offsetof(type, member)); }) 16*4164e152SWei Yang #endif 17*4164e152SWei Yang 18*4164e152SWei Yang #endif /* _TOOLS_LINUX_CONTAINER_OF_H */ 19