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 <linux/usb/gadget.h> 151efd54eaSAndrzej Pietrasiewicz #include "u_f.h" 161efd54eaSAndrzej Pietrasiewicz 171efd54eaSAndrzej Pietrasiewicz struct usb_request *alloc_ep_req(struct usb_ep *ep, int 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; 241efd54eaSAndrzej Pietrasiewicz req->buf = kmalloc(req->length, GFP_ATOMIC); 251efd54eaSAndrzej Pietrasiewicz if (!req->buf) { 261efd54eaSAndrzej Pietrasiewicz usb_ep_free_request(ep, req); 271efd54eaSAndrzej Pietrasiewicz req = NULL; 281efd54eaSAndrzej Pietrasiewicz } 291efd54eaSAndrzej Pietrasiewicz } 301efd54eaSAndrzej Pietrasiewicz return req; 311efd54eaSAndrzej Pietrasiewicz } 321efd54eaSAndrzej Pietrasiewicz EXPORT_SYMBOL(alloc_ep_req); 33