2013-11-07 08:41:26 +01:00
/*
* u_f . h
*
* Utility definitions for USB functions
*
* Copyright ( c ) 2013 Samsung Electronics Co . , Ltd .
* http : //www.samsung.com
*
* Author : Andrzej Pietrasiewicz < andrzej . p @ samsung . com >
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*/
# ifndef __U_F_H__
# define __U_F_H__
2015-11-10 17:52:05 +00:00
# include <linux/usb/gadget.h>
2014-05-08 14:06:21 +02:00
/* Variable Length Array Macros **********************************************/
# define vla_group(groupname) size_t groupname##__next = 0
# define vla_group_size(groupname) groupname##__next
# define vla_item(groupname, type, name, n) \
size_t groupname # # _ # # name # # __offset = ( { \
size_t align_mask = __alignof__ ( type ) - 1 ; \
size_t offset = ( groupname # # __next + align_mask ) & ~ align_mask ; \
size_t size = ( n ) * sizeof ( type ) ; \
groupname # # __next = offset + size ; \
offset ; \
} )
# define vla_item_with_sz(groupname, type, name, n) \
size_t groupname # # _ # # name # # __sz = ( n ) * sizeof ( type ) ; \
size_t groupname # # _ # # name # # __offset = ( { \
size_t align_mask = __alignof__ ( type ) - 1 ; \
size_t offset = ( groupname # # __next + align_mask ) & ~ align_mask ; \
size_t size = groupname # # _ # # name # # __sz ; \
groupname # # __next = offset + size ; \
offset ; \
} )
# define vla_ptr(ptr, groupname, name) \
( ( void * ) ( ( char * ) ptr + groupname # # _ # # name # # __offset ) )
2013-11-07 08:41:26 +01:00
struct usb_ep ;
struct usb_request ;
2016-08-08 21:30:06 +01:00
/**
* alloc_ep_req - returns a usb_request allocated by the gadget driver and
* allocates the request ' s buffer .
*
* @ ep : the endpoint to allocate a usb_request
* @ len : usb_requests ' s buffer suggested size
*
* In case @ ep direction is OUT , the @ len will be aligned to ep ' s
* wMaxPacketSize . In order to avoid memory leaks or drops , * always * use
* usb_requests ' s length ( req - > length ) to refer to the allocated buffer size .
* Requests allocated via alloc_ep_req ( ) * must * be freed by free_ep_req ( ) .
*/
2016-08-23 18:24:49 +01:00
struct usb_request * alloc_ep_req ( struct usb_ep * ep , size_t len ) ;
2016-08-08 21:30:06 +01:00
/* Frees a usb_request previously allocated by alloc_ep_req() */
2015-11-10 17:52:05 +00:00
static inline void free_ep_req ( struct usb_ep * ep , struct usb_request * req )
{
kfree ( req - > buf ) ;
usb_ep_free_request ( ep , req ) ;
}
2013-11-07 08:41:26 +01:00
# endif /* __U_F_H__ */