11efd54eaSAndrzej Pietrasiewicz /* 21efd54eaSAndrzej Pietrasiewicz * u_f.c -- USB function utilities for Gadget stack 31efd54eaSAndrzej Pietrasiewicz * 41efd54eaSAndrzej Pietrasiewicz * Copyright (c) 2013 Samsung Electronics Co., Ltd. 51efd54eaSAndrzej Pietrasiewicz * http://www.samsung.com 61efd54eaSAndrzej Pietrasiewicz * 71efd54eaSAndrzej Pietrasiewicz * Author: Andrzej Pietrasiewicz <andrzej.p@samsung.com> 81efd54eaSAndrzej Pietrasiewicz * 91efd54eaSAndrzej Pietrasiewicz * This program is free software; you can redistribute it and/or modify 101efd54eaSAndrzej Pietrasiewicz * it under the terms of the GNU General Public License version 2 as 111efd54eaSAndrzej Pietrasiewicz * published by the Free Software Foundation. 121efd54eaSAndrzej Pietrasiewicz */ 131efd54eaSAndrzej Pietrasiewicz 141efd54eaSAndrzej Pietrasiewicz #include "u_f.h" 15e0466156SFelipe F. Tonello #include <linux/usb/ch9.h> 161efd54eaSAndrzej Pietrasiewicz 1769bb9973SFelipe F. Tonello struct usb_request *alloc_ep_req(struct usb_ep *ep, size_t len, int default_len) 181efd54eaSAndrzej Pietrasiewicz { 191efd54eaSAndrzej Pietrasiewicz struct usb_request *req; 201efd54eaSAndrzej Pietrasiewicz 211efd54eaSAndrzej Pietrasiewicz req = usb_ep_alloc_request(ep, GFP_ATOMIC); 221efd54eaSAndrzej Pietrasiewicz if (req) { 231efd54eaSAndrzej Pietrasiewicz req->length = len ?: default_len; 24e0466156SFelipe F. Tonello if (usb_endpoint_dir_out(ep->desc)) 25e0466156SFelipe F. Tonello req->length = usb_ep_align(ep, req->length); 261efd54eaSAndrzej Pietrasiewicz req->buf = kmalloc(req->length, GFP_ATOMIC); 271efd54eaSAndrzej Pietrasiewicz if (!req->buf) { 281efd54eaSAndrzej Pietrasiewicz usb_ep_free_request(ep, req); 291efd54eaSAndrzej Pietrasiewicz req = NULL; 301efd54eaSAndrzej Pietrasiewicz } 311efd54eaSAndrzej Pietrasiewicz } 321efd54eaSAndrzej Pietrasiewicz return req; 331efd54eaSAndrzej Pietrasiewicz } 340700faafSFelipe Balbi EXPORT_SYMBOL_GPL(alloc_ep_req); 35