pipe.h revision dad67397f2090b29cd1f169e6a4ac6f3532c6858
1/* 2 * Renesas USB driver 3 * 4 * Copyright (C) 2011 Renesas Solutions Corp. 5 * Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> 6 * 7 * This program is distributed in the hope that it will be useful, 8 * but WITHOUT ANY WARRANTY; without even the implied warranty of 9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 * GNU General Public License for more details. 11 * 12 * You should have received a copy of the GNU General Public License 13 * along with this program; if not, write to the Free Software 14 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 15 * 16 */ 17#ifndef RENESAS_USB_PIPE_H 18#define RENESAS_USB_PIPE_H 19 20#include "./common.h" 21#include "./fifo.h" 22 23/* 24 * struct 25 */ 26struct usbhs_pipe { 27 u32 pipe_type; /* USB_ENDPOINT_XFER_xxx */ 28 29 struct usbhs_priv *priv; 30 struct list_head list; 31 32 u32 flags; 33#define USBHS_PIPE_FLAGS_IS_USED (1 << 0) 34#define USBHS_PIPE_FLAGS_IS_DIR_IN (1 << 1) 35#define USBHS_PIPE_FLAGS_IS_DIR_HOST (1 << 2) 36 37 void *mod_private; 38}; 39 40struct usbhs_pipe_info { 41 struct usbhs_pipe *pipe; 42 int size; /* array size of "pipe" */ 43 int bufnmb_last; /* FIXME : driver needs good allocator */ 44 45 void (*done)(struct usbhs_pkt *pkt); 46}; 47 48/* 49 * pipe list 50 */ 51#define __usbhs_for_each_pipe(start, pos, info, i) \ 52 for (i = start, pos = (info)->pipe; \ 53 i < (info)->size; \ 54 i++, pos = (info)->pipe + i) 55 56#define usbhs_for_each_pipe(pos, priv, i) \ 57 __usbhs_for_each_pipe(1, pos, &((priv)->pipe_info), i) 58 59#define usbhs_for_each_pipe_with_dcp(pos, priv, i) \ 60 __usbhs_for_each_pipe(0, pos, &((priv)->pipe_info), i) 61 62/* 63 * data 64 */ 65#define usbhs_priv_to_pipeinfo(pr) (&(pr)->pipe_info) 66 67/* 68 * usb request 69 */ 70void usbhs_usbreq_get_val(struct usbhs_priv *priv, struct usb_ctrlrequest *req); 71void usbhs_usbreq_set_val(struct usbhs_priv *priv, struct usb_ctrlrequest *req); 72 73/* 74 * pipe control 75 */ 76struct usbhs_pipe 77*usbhs_pipe_malloc(struct usbhs_priv *priv, 78 const struct usb_endpoint_descriptor *desc); 79int usbhs_pipe_probe(struct usbhs_priv *priv); 80void usbhs_pipe_remove(struct usbhs_priv *priv); 81int usbhs_pipe_is_dir_in(struct usbhs_pipe *pipe); 82int usbhs_pipe_is_dir_host(struct usbhs_pipe *pipe); 83void usbhs_pipe_init(struct usbhs_priv *priv, 84 void (*done)(struct usbhs_pkt *pkt)); 85int usbhs_pipe_get_maxpacket(struct usbhs_pipe *pipe); 86void usbhs_pipe_clear_sequence(struct usbhs_pipe *pipe); 87int usbhs_pipe_is_accessible(struct usbhs_pipe *pipe); 88void usbhs_pipe_enable(struct usbhs_pipe *pipe); 89void usbhs_pipe_disable(struct usbhs_pipe *pipe); 90void usbhs_pipe_stall(struct usbhs_pipe *pipe); 91 92#define usbhs_pipe_to_priv(p) ((p)->priv) 93#define usbhs_pipe_number(p) (int)((p) - (p)->priv->pipe_info.pipe) 94#define usbhs_pipe_is_dcp(p) ((p)->priv->pipe_info.pipe == (p)) 95 96/* 97 * dcp control 98 */ 99struct usbhs_pipe *usbhs_dcp_malloc(struct usbhs_priv *priv); 100void usbhs_dcp_control_transfer_done(struct usbhs_pipe *pipe); 101 102#endif /* RENESAS_USB_PIPE_H */ 103