15fd54aceSGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0 21efd54eaSAndrzej Pietrasiewicz /* 31efd54eaSAndrzej Pietrasiewicz * u_f.c -- USB function utilities for Gadget stack 41efd54eaSAndrzej Pietrasiewicz * 51efd54eaSAndrzej Pietrasiewicz * Copyright (c) 2013 Samsung Electronics Co., Ltd. 61efd54eaSAndrzej Pietrasiewicz * http://www.samsung.com 71efd54eaSAndrzej Pietrasiewicz * 81b4a3b51SAndrzej Pietrasiewicz * Author: Andrzej Pietrasiewicz <andrzejtp2010@gmail.com> 91efd54eaSAndrzej Pietrasiewicz */ 101efd54eaSAndrzej Pietrasiewicz 111efd54eaSAndrzej Pietrasiewicz #include "u_f.h" 12e0466156SFelipe F. Tonello #include <linux/usb/ch9.h> 131efd54eaSAndrzej Pietrasiewicz alloc_ep_req(struct usb_ep * ep,size_t len)14aadbe812SFelipe F. Tonellostruct usb_request *alloc_ep_req(struct usb_ep *ep, size_t len) 151efd54eaSAndrzej Pietrasiewicz { 161efd54eaSAndrzej Pietrasiewicz struct usb_request *req; 171efd54eaSAndrzej Pietrasiewicz 181efd54eaSAndrzej Pietrasiewicz req = usb_ep_alloc_request(ep, GFP_ATOMIC); 191efd54eaSAndrzej Pietrasiewicz if (req) { 20aadbe812SFelipe F. Tonello req->length = usb_endpoint_dir_out(ep->desc) ? 21aadbe812SFelipe F. Tonello usb_ep_align(ep, len) : len; 221efd54eaSAndrzej Pietrasiewicz req->buf = kmalloc(req->length, GFP_ATOMIC); 231efd54eaSAndrzej Pietrasiewicz if (!req->buf) { 241efd54eaSAndrzej Pietrasiewicz usb_ep_free_request(ep, req); 251efd54eaSAndrzej Pietrasiewicz req = NULL; 261efd54eaSAndrzej Pietrasiewicz } 271efd54eaSAndrzej Pietrasiewicz } 281efd54eaSAndrzej Pietrasiewicz return req; 291efd54eaSAndrzej Pietrasiewicz } 300700faafSFelipe Balbi EXPORT_SYMBOL_GPL(alloc_ep_req); 31