xref: /openbmc/linux/drivers/usb/gadget/u_f.c (revision 1b4a3b51)
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. Tonello struct 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