No empty .Rs/.Re
[netbsd-mini2440.git] / sys / dev / usb / umidivar.h
blob22178442e52c863ea6a02ed8c548d08eb7b56d71
1 /* $NetBSD: umidivar.h,v 1.12 2008/05/24 16:40:58 cube Exp $ */
2 /*
3 * Copyright (c) 2001 The NetBSD Foundation, Inc.
4 * All rights reserved.
6 * This code is derived from software contributed to The NetBSD Foundation
7 * by Takuya SHIOZAKI (tshiozak@NetBSD.org).
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the distribution.
18 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
19 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
20 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
22 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 * POSSIBILITY OF SUCH DAMAGE.
31 #define UMIDI_PACKET_SIZE 4
34 * hierarchie
36 * <-- parent child -->
38 * umidi(sc) -> endpoint -> jack <- (dynamically assignable) - mididev
39 * ^ | ^ |
40 * +-----+ +-----+
43 /* midi device */
44 struct umidi_mididev {
45 struct umidi_softc *sc;
46 device_t mdev;
47 /* */
48 struct umidi_jack *in_jack;
49 struct umidi_jack *out_jack;
50 char *label;
51 /* */
52 int opened;
53 int flags;
56 /* Jack Information */
57 struct umidi_jack {
58 struct umidi_endpoint *endpoint;
59 /* */
60 int cable_number;
61 void *arg;
62 int binded;
63 int opened;
64 unsigned char *midiman_ppkt;
65 union {
66 struct {
67 void (*intr)(void *);
68 } out;
69 struct {
70 void (*intr)(void *, int);
71 } in;
72 } u;
75 #define UMIDI_MAX_EPJACKS 16
76 typedef unsigned char (*umidi_packet_bufp)[UMIDI_PACKET_SIZE];
77 /* endpoint data */
78 struct umidi_endpoint {
79 struct umidi_softc *sc;
80 /* */
81 int addr;
82 usbd_pipe_handle pipe;
83 usbd_xfer_handle xfer;
84 umidi_packet_bufp buffer;
85 umidi_packet_bufp next_slot;
86 u_int32_t buffer_size;
87 int num_scheduled;
88 int num_open;
89 int num_jacks;
90 int soliciting;
91 void *solicit_cookie;
92 int armed;
93 struct umidi_jack *jacks[UMIDI_MAX_EPJACKS];
94 u_int16_t this_schedule; /* see UMIDI_MAX_EPJACKS */
95 u_int16_t next_schedule;
98 /* software context */
99 struct umidi_softc {
100 USBBASEDEVICE sc_dev;
101 usbd_device_handle sc_udev;
102 usbd_interface_handle sc_iface;
103 const struct umidi_quirk *sc_quirk;
105 int sc_dying;
107 int sc_out_num_jacks;
108 struct umidi_jack *sc_out_jacks;
109 int sc_in_num_jacks;
110 struct umidi_jack *sc_in_jacks;
111 struct umidi_jack *sc_jacks;
113 int sc_num_mididevs;
114 struct umidi_mididev *sc_mididevs;
116 int sc_out_num_endpoints;
117 struct umidi_endpoint *sc_out_ep;
118 int sc_in_num_endpoints;
119 struct umidi_endpoint *sc_in_ep;
120 struct umidi_endpoint *sc_endpoints;
121 int cblnums_global;