xref: /openbmc/linux/drivers/usb/gadget/u_f.h (revision 74d48466)
11efd54eaSAndrzej Pietrasiewicz /*
21efd54eaSAndrzej Pietrasiewicz  * u_f.h
31efd54eaSAndrzej Pietrasiewicz  *
41efd54eaSAndrzej Pietrasiewicz  * Utility definitions for USB functions
51efd54eaSAndrzej Pietrasiewicz  *
61efd54eaSAndrzej Pietrasiewicz  * Copyright (c) 2013 Samsung Electronics Co., Ltd.
71efd54eaSAndrzej Pietrasiewicz  *		http://www.samsung.com
81efd54eaSAndrzej Pietrasiewicz  *
91efd54eaSAndrzej Pietrasiewicz  * Author: Andrzej Pietrasiewicz <andrzej.p@samsung.com>
101efd54eaSAndrzej Pietrasiewicz  *
111efd54eaSAndrzej Pietrasiewicz  * This program is free software; you can redistribute it and/or modify
121efd54eaSAndrzej Pietrasiewicz  * it under the terms of the GNU General Public License version 2 as
131efd54eaSAndrzej Pietrasiewicz  * published by the Free Software Foundation.
141efd54eaSAndrzej Pietrasiewicz  */
151efd54eaSAndrzej Pietrasiewicz 
161efd54eaSAndrzej Pietrasiewicz #ifndef __U_F_H__
171efd54eaSAndrzej Pietrasiewicz #define __U_F_H__
181efd54eaSAndrzej Pietrasiewicz 
1974d48466SAndrzej Pietrasiewicz /* Variable Length Array Macros **********************************************/
2074d48466SAndrzej Pietrasiewicz #define vla_group(groupname) size_t groupname##__next = 0
2174d48466SAndrzej Pietrasiewicz #define vla_group_size(groupname) groupname##__next
2274d48466SAndrzej Pietrasiewicz 
2374d48466SAndrzej Pietrasiewicz #define vla_item(groupname, type, name, n) \
2474d48466SAndrzej Pietrasiewicz 	size_t groupname##_##name##__offset = ({			       \
2574d48466SAndrzej Pietrasiewicz 		size_t align_mask = __alignof__(type) - 1;		       \
2674d48466SAndrzej Pietrasiewicz 		size_t offset = (groupname##__next + align_mask) & ~align_mask;\
2774d48466SAndrzej Pietrasiewicz 		size_t size = (n) * sizeof(type);			       \
2874d48466SAndrzej Pietrasiewicz 		groupname##__next = offset + size;			       \
2974d48466SAndrzej Pietrasiewicz 		offset;							       \
3074d48466SAndrzej Pietrasiewicz 	})
3174d48466SAndrzej Pietrasiewicz 
3274d48466SAndrzej Pietrasiewicz #define vla_item_with_sz(groupname, type, name, n) \
3374d48466SAndrzej Pietrasiewicz 	size_t groupname##_##name##__sz = (n) * sizeof(type);		       \
3474d48466SAndrzej Pietrasiewicz 	size_t groupname##_##name##__offset = ({			       \
3574d48466SAndrzej Pietrasiewicz 		size_t align_mask = __alignof__(type) - 1;		       \
3674d48466SAndrzej Pietrasiewicz 		size_t offset = (groupname##__next + align_mask) & ~align_mask;\
3774d48466SAndrzej Pietrasiewicz 		size_t size = groupname##_##name##__sz;			       \
3874d48466SAndrzej Pietrasiewicz 		groupname##__next = offset + size;			       \
3974d48466SAndrzej Pietrasiewicz 		offset;							       \
4074d48466SAndrzej Pietrasiewicz 	})
4174d48466SAndrzej Pietrasiewicz 
4274d48466SAndrzej Pietrasiewicz #define vla_ptr(ptr, groupname, name) \
4374d48466SAndrzej Pietrasiewicz 	((void *) ((char *)ptr + groupname##_##name##__offset))
4474d48466SAndrzej Pietrasiewicz 
451efd54eaSAndrzej Pietrasiewicz struct usb_ep;
461efd54eaSAndrzej Pietrasiewicz struct usb_request;
471efd54eaSAndrzej Pietrasiewicz 
481efd54eaSAndrzej Pietrasiewicz struct usb_request *alloc_ep_req(struct usb_ep *ep, int len, int default_len);
491efd54eaSAndrzej Pietrasiewicz 
501efd54eaSAndrzej Pietrasiewicz #endif /* __U_F_H__ */
511efd54eaSAndrzej Pietrasiewicz 
521efd54eaSAndrzej Pietrasiewicz 
53